Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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")
Exemple #4
0
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")