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
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))
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([])
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()
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()
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))
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, [])