summaryrefslogtreecommitdiff
path: root/sys-boot/grub-handler
diff options
context:
space:
mode:
authorV3n3RiX <venerix@rogentos.ro>2016-08-11 00:33:31 +0100
committerV3n3RiX <venerix@rogentos.ro>2016-08-11 00:33:31 +0100
commitff5dd7b3704b9e8f9f606d4929f95694ec84ddf3 (patch)
tree393b3bd8a65eb3ec464babab42da8d9ec88851c3 /sys-boot/grub-handler
parent4c05e04608db666140daaa94499f5f90521a2cc4 (diff)
cleanup
Diffstat (limited to 'sys-boot/grub-handler')
-rwxr-xr-xsys-boot/grub-handler/files/grub-handler318
-rw-r--r--sys-boot/grub-handler/grub-handler-0.2-r6.ebuild21
2 files changed, 0 insertions, 339 deletions
diff --git a/sys-boot/grub-handler/files/grub-handler b/sys-boot/grub-handler/files/grub-handler
deleted file mode 100755
index 4e805a33..00000000
--- a/sys-boot/grub-handler/files/grub-handler
+++ /dev/null
@@ -1,318 +0,0 @@
-#!/usr/bin/python2
-# -*- coding: utf-8 -*-
-"""
- Kernel grub.conf configuration script
-
- Copyright (C) 2009 Fabio Erculiani
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
-"""
-import os
-import sys
-import subprocess
-import shutil
-BOOT_MOUNT = False
-NO_SYS_ROOT_BOOT_DIR = "/boot"
-if os.path.ismount(NO_SYS_ROOT_BOOT_DIR):
- BOOT_MOUNT = True
-SYS_ROOT = os.getenv("ROOT","")
-GRUB_CONF = SYS_ROOT+"/boot/grub/grub.conf"
-FSTAB_CONF = SYS_ROOT+"/etc/fstab"
-DISTRO_NAME = "Kogaion Linux"
-
-def getstatusoutput(cmd):
- """Return (status, output) of executing cmd in a shell."""
- pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
- text = pipe.read()
- sts = pipe.close()
- if sts is None: sts = 0
- if text[-1:] == '\n': text = text[:-1]
- return sts, text
-
-def get_kernel_grub_line(kernel):
- return "title=%s (%s)\n" % (DISTRO_NAME, os.path.basename(kernel),)
-
-def configure_boot_grub(kernel, initramfs):
-
- grub_dir = os.path.dirname(GRUB_CONF)
- if not os.path.isdir(grub_dir):
- os.makedirs(grub_dir)
-
- if os.access(GRUB_CONF, os.R_OK | os.F_OK):
-
- # open in append
- grub = open(GRUB_CONF,"aw")
- shutil.copy2(GRUB_CONF, GRUB_CONF+".add")
- # get boot dev
- boot_dev = get_grub_boot_dev()
- # test if entry has been already added
- grubtest = open(GRUB_CONF,"r")
- content = grubtest.readlines()
- content = [unicode(x,'raw_unicode_escape') for x in content]
- for line in content:
-
- if line.find(get_kernel_grub_line(kernel)) != -1:
- grubtest.close()
- print "** Kernel already in configuration => ", line.strip()
- return
-
- # also check if we have the same kernel listed
- if (line.find("kernel") != 1) and \
- (line.find(os.path.basename(kernel)) != -1) and not \
- line.strip().startswith("#") \
- and (line.find("safe mode") == -1):
-
- grubtest.close()
- print "** Kernel already in configuration (2) => ", line.strip()
- return
- else:
-
- # create
- boot_dev = get_grub_boot_dev()
- grub = open(GRUB_CONF,"w")
- # write header - guess (hd0,0)... since it is weird
- # having a running system without a bootloader, at least, grub.
- grub.write("default=0\ntimeout=10\n")
-
- cmdline = ''
- if os.access("/proc/cmdline", os.R_OK):
- cmdline_f = open("/proc/cmdline","r")
- cmdline = " "+cmdline_f.readline().strip()
- cmdline_f.close()
-
- grub.write(get_kernel_grub_line(kernel))
- grub.write("\troot "+boot_dev+"\n")
- grub.write("\tkernel "+kernel+cmdline+"\n")
- if initramfs:
- grub.write("\tinitrd "+initramfs+"\n")
- grub.write("\tsavedefault\n")
- grub.write("\n")
- grub.flush()
- grub.close()
-
-def remove_boot_grub(kernel, initramfs):
-
- grub_dir = os.path.dirname(GRUB_CONF)
- if not os.path.isdir(grub_dir):
- os.makedirs(grub_dir)
-
- if os.path.isdir(grub_dir) and os.access(GRUB_CONF, os.R_OK | os.F_OK):
-
- shutil.copy2(GRUB_CONF, GRUB_CONF+".remove")
- grub_f = open(GRUB_CONF,"r")
- grub_conf = grub_f.readlines()
- grub_f.close()
-
- content = [unicode(x,'raw_unicode_escape') for x in grub_conf]
- if not isinstance(kernel, unicode):
- kernel = unicode(kernel,'raw_unicode_escape')
- if not isinstance(initramfs, unicode):
- initramfs = unicode(initramfs,'raw_unicode_escape')
-
- new_conf = []
- skip = False
- for line in content:
-
- kernel_grub_line = get_kernel_grub_line(kernel)
- if (line.find(kernel_grub_line) != -1):
- skip = True
- continue
-
- if line.strip().startswith("title"):
- skip = False
-
- if not skip or line.strip().startswith("#"):
- new_conf.append(line)
-
- grub_tmp_f = open(GRUB_CONF+".tmp","w")
- for line in new_conf:
- try:
- grub_tmp_f.write(line)
- except UnicodeEncodeError:
- grub_tmp_f.write(line.encode('utf-8'))
- grub_tmp_f.flush()
- grub_tmp_f.close()
- os.rename(GRUB_CONF+".tmp", GRUB_CONF)
-
-def boot_device_translation(boot_dev):
-
- # actually disabled due to buggy grub.conf entry
- if os.access(GRUB_CONF, os.R_OK | os.F_OK) and 0:
-
- f_grub = open(GRUB_CONF, "r")
- stored_boot_dev = [x.strip() for x in f_grub.readlines() if \
- x.strip().startswith("#boot=")]
- f_grub.close()
- if stored_boot_dev:
- stored_boot_dev = stored_boot_dev[0]
- boot_dev = "/dev/" + stored_boot_dev[len("#boot="):]
-
- if boot_dev.startswith("/dev/md"):
-
- boot_dev = os.path.realpath(boot_dev)
- md_dev = os.path.basename(boot_dev)
-
- if os.access("/proc/mdstat", os.R_OK | os.F_OK):
-
- f_mdstat = open("/proc/mdstat","r")
- stored_boot_dev = [x.split() for x in f_mdstat.readlines() if \
- x.startswith(md_dev)]
- f_mdstat.close()
-
- if stored_boot_dev:
- stored_boot_dev = stored_boot_dev[0]
- for elem in stored_boot_dev:
- if elem.endswith("[0]"):
- boot_dev = "/dev/" + elem[:-len("[0]")]
- break
-
- return boot_dev
-
-def resolve_device(device):
- if device.startswith("/dev/"):
- return device
- if device.startswith("UUID=") or device.startswith("LABEL="):
- print "resolving UUID/LABEL to device", device
- rc, outstring = getstatusoutput("blkid -lt %s" % (device,))
- if rc != 0:
- print "cannot resolve UUID/LABEL for", device
- return None # argh!
- device = outstring.split(":")[0]
- print "UUID/LABEL resolved to", device
- return device
-
-def get_grub_boot_dev():
-
- grub_avail = subprocess.call("which grub &> /dev/null", shell = True)
- if grub_avail != 0:
- print "** Cannot find grub. Cannot properly configure kernel"
- return "(hd0,0)"
-
- # load currently mounted partitions
- if not os.access(FSTAB_CONF, os.R_OK | os.F_OK):
- print "** Cannot find %s. Cannot properly configure kernel" % (
- FSTAB_CONF,)
- return "(hd0,0)"
-
- f_fstab = open(FSTAB_CONF, "r")
- mount_data = [x.split() for x in f_fstab.readlines()]
- f_fstab.close()
- # filter out bogus devices
- mount_data = [x for x in mount_data if x]
- mount_data = [x for x in mount_data if x[0].startswith("/") or \
- x[0].startswith("UUID=") or x[0].startswith('LABEL=')]
-
- mount_hash = {}
- for item in mount_data:
- solved_dev = resolve_device(item[0])
- if not solved_dev:
- continue
- mount_hash[item[1]] = solved_dev
- boot_dev = mount_hash.get(NO_SYS_ROOT_BOOT_DIR, mount_hash.get("/"))
- if boot_dev == None:
- print "** Cannot determine boot device. Cannot properly configure" \
- " kernel"
- return "(hd0,0)"
-
- # translate boot device, if needed
- boot_dev = boot_device_translation(boot_dev)
-
- # load grub map file
- map_file = "grub.map"
- subprocess.call('echo "quit" | grub --no-floppy --no-config-file ' \
- '--no-curses --batch --device-map=grub.map &> /dev/null', shell = True)
- if not os.access(map_file, os.R_OK | os.F_OK):
- print "** Cannot find grub. Cannot properly configure kernel"
- return "(hd0,0)"
-
- f_map = open(map_file)
- map_data = [x.split() for x in f_map.readlines()]
- f_map.close()
- os.remove(map_file)
- map_data = dict(((y, x) for x, y in map_data))
-
- map_data_devs = map_data.keys()
- grub_dev = None
- linux_dev = None
- for dev in map_data_devs:
- if boot_dev.startswith(dev):
- grub_dev = map_data.get(dev)
- linux_dev = dev
- break
-
- if grub_dev == None:
- print "** Cannot match grub device. Cannot properly configure kernel"
- return "(hd0,0)"
-
- device_number = boot_dev.replace(linux_dev,'')
- try:
- device_number = int(device_number)
- except ValueError:
- print "** Cannot get device number for '%s' => '%s' | '%s'. Cannot properly configure kernel" % (
- device_number, boot_dev, linux_dev,)
- return "(hd0,0)"
-
- device_number -= 1
- grub_boot_dev = grub_dev.replace(')',',%s)' % (device_number,))
- return grub_boot_dev
-
-def print_help():
- print "%s %s %s %s" % (sys.argv[0], "[add/remove]",
- "<kernel>", "<initramfs or 'none'>",)
-
-def add_kernel(kernel, initramfs):
-
- boot_len = len(NO_SYS_ROOT_BOOT_DIR)
- if BOOT_MOUNT:
- kernel = kernel[boot_len:]
- if initramfs:
- initramfs = initramfs[boot_len:]
-
- # configure GRUB
- print "** Configuring GRUB bootloader. Adding the new kernel ..."
- configure_boot_grub(kernel, initramfs)
-
-def remove_kernel(kernel, initramfs):
-
- boot_len = len(NO_SYS_ROOT_BOOT_DIR)
- if BOOT_MOUNT:
- kernel = kernel[boot_len:]
- if initramfs:
- initramfs = initramfs[boot_len:]
-
- # configure GRUB
- print "** Configuring GRUB bootloader. Removing the selected kernel ..."
- remove_boot_grub(kernel, initramfs)
-
-
-
-if __name__ == "__main__":
-
- args = sys.argv[1:]
- if len(args) < 3:
- print_help()
- raise SystemExit(1)
-
- cmd = args[0]
- if cmd not in ("add", "remove",):
- print_help()
- raise SystemExit(1)
-
- kernel = args[1]
- initramfs = args[2]
-
- if initramfs == "none":
- initramfs = ''
-
- if cmd == "add":
- print "** Adding kernel '%s' and initramfs '%s'" % (kernel, initramfs,)
- add_kernel(kernel, initramfs)
- elif cmd == "remove":
- print "** Removing kernel '%s' and initramfs '%s'" % (kernel,
- initramfs,)
- remove_kernel(kernel, initramfs)
- raise SystemExit(0)
diff --git a/sys-boot/grub-handler/grub-handler-0.2-r6.ebuild b/sys-boot/grub-handler/grub-handler-0.2-r6.ebuild
deleted file mode 100644
index d312d1b2..00000000
--- a/sys-boot/grub-handler/grub-handler-0.2-r6.ebuild
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2009-2014 Sabayon Linux
-# Copyright 2015 Kogaion Linux
-# Distributed under the terms of the GNU General Public License v2
-
-inherit eutils
-
-DESCRIPTION="Kogaion Linux GRUB utilities"
-HOMEPAGE="http://www.rogentos.ro"
-SRC_URI=""
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="x86 amd64"
-IUSE=""
-
-RDEPEND=""
-DEPEND="${RDEPEND}"
-
-src_install () {
- exeinto /usr/sbin
- doexe "${FILESDIR}/${PN}"
-}