Exemple #1
0
def get_kernel_version_list():
    """Get a list of installed kernel versions.

    :return: a list of kernel versions
    """
    files = []
    efi_dir = conf.bootloader.efi_dir

    # Find all installed RPMs that provide 'kernel'.
    ts = rpm.TransactionSet(conf.target.system_root)
    mi = ts.dbMatch('providename', 'kernel')

    for hdr in mi:
        unicode_fnames = (decode_bytes(f) for f in hdr.filenames)

        # Find all /boot/vmlinuz- files and strip off vmlinuz-.
        files.extend(
            (f.split("/")[-1][8:] for f in unicode_fnames
             if fnmatch.fnmatch(f, "/boot/vmlinuz-*")
             or fnmatch.fnmatch(f, "/boot/efi/EFI/%s/vmlinuz-*" % efi_dir)))

    # Sort the kernel versions.
    sort_kernel_version_list(files)

    return files
Exemple #2
0
    def kernel_version_list(self):
        # Find all installed rpms that provide 'kernel'

        # If a PackagePayload is in use, rpm needs to be available
        try:
            import rpm
        except ImportError:
            raise PayloadError(
                "failed to import rpm-python, cannot determine kernel versions"
            )

        files = []

        ts = rpm.TransactionSet(conf.target.system_root)
        mi = ts.dbMatch('providename', 'kernel')
        for hdr in mi:
            unicode_fnames = (decode_bytes(f) for f in hdr.filenames)
            # Find all /boot/vmlinuz- files and strip off vmlinuz-
            files.extend((f.split("/")[-1][8:] for f in unicode_fnames
                          if fnmatch(f, "/boot/vmlinuz-*") or fnmatch(
                              f, "/boot/efi/EFI/%s/vmlinuz-*" %
                              conf.bootloader.efi_dir)))

        return sorted(files,
                      key=functools.cmp_to_key(payload_utils.version_cmp))
Exemple #3
0
 def test_decode_bytes(self):
     assert "STRING" == util.decode_bytes("STRING")
     assert "BYTES" == util.decode_bytes(b"BYTES")
     with pytest.raises(ValueError):
         util.decode_bytes(None)
     with pytest.raises(ValueError):
         util.decode_bytes(0)
     with pytest.raises(ValueError):
         util.decode_bytes([])
Exemple #4
0
def _write_sysconfig_kernel(sysroot, storage):
    """Write to /etc/sysconfig/kernel.

    :param sysroot: a path to the root of the installed system
    :param storage: an instance of the storage
    """
    log.debug("Writing to /etc/sysconfig/kernel.")

    # get the name of the default kernel package based on the version
    kernel_basename = "vmlinuz-" + storage.bootloader.default.version
    kernel_file = "/boot/%s" % kernel_basename
    if not os.path.isfile(sysroot + kernel_file):
        efi_dir = conf.bootloader.efi_dir
        kernel_file = "/boot/efi/EFI/%s/%s" % (efi_dir, kernel_basename)
        if not os.path.isfile(sysroot + kernel_file):
            log.error("failed to recreate path to default kernel image")
            return

    try:
        import rpm
    except ImportError:
        log.error("failed to import rpm python module")
        return

    ts = rpm.TransactionSet(sysroot)
    mi = ts.dbMatch('basenames', kernel_file)
    try:
        h = next(mi)
    except StopIteration:
        log.error("failed to get package name for default kernel")
        return

    kernel = decode_bytes(h.name)

    f = open(sysroot + "/etc/sysconfig/kernel", "w+")
    f.write("# UPDATEDEFAULT specifies if kernel-install should make\n"
            "# new kernels the default\n")
    # only update the default if we're setting the default to linux (#156678)
    if storage.bootloader.default.device == storage.root_device:
        f.write("UPDATEDEFAULT=yes\n")
    else:
        f.write("UPDATEDEFAULT=no\n")
    f.write("\n")
    f.write("# DEFAULTKERNEL specifies the default kernel package type\n")
    f.write("DEFAULTKERNEL=%s\n" % kernel)
    f.close()
Exemple #5
0
def _write_sysconfig_kernel(sysroot, storage):
    """Write to /etc/sysconfig/kernel.

    :param sysroot: a path to the root of the installed system
    :param storage: an instance of the storage
    """
    log.debug("Writing to /etc/sysconfig/kernel.")

    # get the name of the default kernel package based on the version
    kernel_basename = "vmlinuz-" + storage.bootloader.default.version
    kernel_file = "/boot/%s" % kernel_basename
    if not os.path.isfile(sysroot + kernel_file):
        efi_dir = conf.bootloader.efi_dir
        kernel_file = "/boot/efi/EFI/%s/%s" % (efi_dir, kernel_basename)
        if not os.path.isfile(sysroot + kernel_file):
            log.error("failed to recreate path to default kernel image")
            return

    try:
        import rpm
    except ImportError:
        log.error("failed to import rpm python module")
        return

    ts = rpm.TransactionSet(sysroot)
    mi = ts.dbMatch('basenames', kernel_file)
    try:
        h = next(mi)
    except StopIteration:
        log.error("failed to get package name for default kernel")
        return

    kernel = decode_bytes(h.name)

    f = open(sysroot + "/etc/sysconfig/kernel", "w+")
    f.write("# UPDATEDEFAULT specifies if new-kernel-pkg should make\n"
            "# new kernels the default\n")
    # only update the default if we're setting the default to linux (#156678)
    if storage.bootloader.default.device == storage.root_device:
        f.write("UPDATEDEFAULT=yes\n")
    else:
        f.write("UPDATEDEFAULT=no\n")
    f.write("\n")
    f.write("# DEFAULTKERNEL specifies the default kernel package type\n")
    f.write("DEFAULTKERNEL=%s\n" % kernel)
    f.close()
Exemple #6
0
    def kernel_version_list(self):
        # Find all installed rpms that provide 'kernel'

        # If a PackagePayload is in use, rpm needs to be available
        try:
            import rpm
        except ImportError:
            raise PayloadError("failed to import rpm-python, cannot determine kernel versions")

        files = []

        ts = rpm.TransactionSet(util.getSysroot())
        mi = ts.dbMatch('providename', 'kernel')
        for hdr in mi:
            unicode_fnames = (decode_bytes(f) for f in hdr.filenames)
            # Find all /boot/vmlinuz- files and strip off vmlinuz-
            files.extend((f.split("/")[-1][8:] for f in unicode_fnames
                         if fnmatch(f, "/boot/vmlinuz-*") or
                         fnmatch(f, "/boot/efi/EFI/%s/vmlinuz-*" % conf.bootloader.efi_dir)))

        return sorted(files, key=functools.cmp_to_key(payload_utils.version_cmp))
Exemple #7
0
 def decode_bytes_test(self):
     self.assertEqual("STRING", util.decode_bytes("STRING"))
     self.assertEqual("BYTES", util.decode_bytes(b"BYTES"))
     self.assertRaises(ValueError, util.decode_bytes, None)
     self.assertRaises(ValueError, util.decode_bytes, 0)
     self.assertRaises(ValueError, util.decode_bytes, [])
Exemple #8
0
 def decode_bytes_test(self):
     self.assertEqual("STRING", util.decode_bytes("STRING"))
     self.assertEqual("BYTES", util.decode_bytes(b"BYTES"))
     self.assertRaises(ValueError, util.decode_bytes, None)
     self.assertRaises(ValueError, util.decode_bytes, 0)
     self.assertRaises(ValueError, util.decode_bytes, [])