def addNewKernel(grub, version, root): """ Adds new kernel entry to GRUB. Arguments: grub: GRUB configuration instance version: Kernel version, in version-release(-suffix) format. Suffix is optional. root: Root device """ # get version and suffix version, suffix = parseVersion("kernel-%s" % version) groups, versions = groupEntries(grub, root) group_name = "pardus%s" % suffix default_index = grub.getOption("default", 0) if default_index != "saved": try: default_index = int(default_index) except ValueError: default_index = 0 if group_name in versions and any( [x == version for x in versions[group_name].values()]): # Version is already in list, do nothing entry_index = -1 for i in versions[group_name]: if versions[group_name][i] == version: entry_index = i break else: if group_name in groups: entry_index = min(groups[group_name]) # Get kernel options of first entry in group kernel = grub.getEntry(entry_index).getCommand("kernel") options = kernel.value.split(" ", 1)[1] else: entry_index = -1 # Get kernel options from /proc/cmdline options = bootParameters(root) release = open("/etc/pardus-release", "r").readline().strip() title = "%s [%s%s]" % (release, version, suffix) entry = grubEntry(title) entry.setCommand("root", grubAddress(root)) entry.setCommand("kernel", "/boot/kernel-%s%s %s" % (version, suffix, options)) entry.setCommand("initrd", "/boot/initramfs-%s%s" % (version, suffix)) if default_index == "saved": entry.setCommand("savedefault", "") grub.addEntry(entry, entry_index) # update default index, if it's after last entry if default_index != "saved": if default_index > entry_index and entry_index != -1: default_index += 1 grub.setOption("default", default_index)
def addNewKernel(grub, version, root): """ Adds new kernel entry to GRUB. Arguments: grub: GRUB configuration instance version: Kernel version, in version-release(-suffix) format. Suffix is optional. root: Root device """ # get version and suffix version, suffix = parseVersion("kernel-%s" % version) groups, versions = groupEntries(grub, root) group_name = "pardus%s" % suffix default_index = grub.getOption("default", 0) if default_index != "saved": try: default_index = int(default_index) except ValueError: default_index = 0 if group_name in versions and any([x == version for x in versions[group_name].values()]): # Version is already in list, do nothing entry_index = -1 for i in versions[group_name]: if versions[group_name][i] == version: entry_index = i break else: if group_name in groups: entry_index = min(groups[group_name]) # Get kernel options of first entry in group kernel = grub.getEntry(entry_index).getCommand("kernel") options = kernel.value.split(" ", 1)[1] else: entry_index = -1 # Get kernel options from /proc/cmdline options = bootParameters(root) release = open("/etc/pardus-release", "r").readline().strip() title = "%s [%s%s]" % (release, version, suffix) entry = grubEntry(title) entry.setCommand("root", grubAddress(root)) entry.setCommand("kernel", "/boot/kernel-%s%s %s" % (version, suffix, options)) entry.setCommand("initrd", "/boot/initramfs-%s%s" % (version, suffix)) if default_index == "saved": entry.setCommand("savedefault", "") grub.addEntry(entry, entry_index) # update default index, if it's after last entry if default_index != "saved": if default_index > entry_index and entry_index != -1: default_index += 1 grub.setOption("default", default_index)
def setOption(option, value): # Main menu configuration grub = grubConf() if os.path.exists(CONF_GRUB): grub.parseConf(CONF_GRUB) # Alternate menu configuration grub_alt = grubConf() if os.path.exists(CONF_GRUB_ALT): grub_alt.parseConf(CONF_GRUB_ALT) if option == 'default': grub.setOption("default", value) for index, entry in enumerate(grub.entries): if value == "saved": entry.setCommand("savedefault", "") else: entry.unsetCommand("savedefault") default_entry = os.path.join(GRUB_DIR, "default") if not os.path.exists(default): file(default_entry, "w").write("\x00\x30\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a") elif option in 'timeout': grub.setOption("timeout", value) elif option == 'password': #grub.setOption("password", "--md5 %s" % md5crypt(value)) grub.setOption("password", value) elif option == 'background': grub.setOption("background", value) elif option == 'splash': root = getRoot() root_grub = grubAddress(root) grub.setOption("splashimage", "%s%s" % (root_grub, value)) # Copy options to alternative configuration. copyOptions(grub, grub_alt) # Save changes to both files. grub.write(CONF_GRUB) grub_alt.write(CONF_GRUB_ALT) # Notify all COMAR clients notify("Boot.Loader", "Changed", "option")
def setOption(option, value): # Main menu configuration grub = grubConf() if os.path.exists(CONF_GRUB): grub.parseConf(CONF_GRUB) # Alternate menu configuration grub_alt = grubConf() if os.path.exists(CONF_GRUB_ALT): grub_alt.parseConf(CONF_GRUB_ALT) if option == 'default': grub.setOption("default", value) for index, entry in enumerate(grub.entries): if value == "saved": entry.setCommand("savedefault", "") else: entry.unsetCommand("savedefault") default_entry = os.path.join(GRUB_DIR, "default") if not os.path.exists(default_entry): file(default_entry, "w").write("\x00\x30\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a") elif option in 'timeout': grub.setOption("timeout", value) elif option == 'password': #grub.setOption("password", "--md5 %s" % md5crypt(value)) grub.setOption("password", value) elif option == 'background': grub.setOption("background", value) elif option == 'splash': root = getBoot() root_grub = grubAddress(root) grub.setOption("splashimage", "%s%s" % (root_grub, value)) # Copy options to alternative configuration. copyOptions(grub, grub_alt) # Save changes to both files. grub.write(CONF_GRUB) grub_alt.write(CONF_GRUB_ALT) # Notify all COMAR clients notify("Boot.Loader", "Changed", "option")