#!/usr/bin/env python3 """ Print if the running kernel is the latest available. Should work on Debian-based systems. Needs the packaging package installed, pip install packaging """ import argparse import glob import os import sys try: from packaging.version import parse except ImportError: sys.exit(12) if sys.version_info.major == 3 and sys.version_info.minor <= 6: sys.exit(13) LINUZ_PREFIX = "/boot/vmlinuz-" parser = argparse.ArgumentParser(description="Show if running kernel is outdated") parser.add_argument( "--minimal", "-m", action="store_true", help="Minimal output (for prompt)" ) args = parser.parse_args() def get_installed_versions(): kernels = [ linuz.replace(LINUZ_PREFIX, "") for linuz in glob.glob(f"{LINUZ_PREFIX}*") ] return [parse(kernel) for kernel in kernels] def report(minimal=False): installed_versions = get_installed_versions() if not installed_versions: if minimal: sys.stdout.write("[🐧💥]") else: sys.stderr.write("PANIC. No kernels installed?\n") sys.exit(4) running_version = parse(os.uname().release) latest_version = max(installed_versions) is_latest = running_version == latest_version is_installed = running_version in installed_versions if is_latest and is_installed: if minimal is False: sys.stdout.write(f"{running_version} is the latest installed kernel\n") sys.exit(0) if not is_installed: if minimal: sys.stdout.write("[🐧😟]") else: sys.stderr.write(f"{running_version} is not installed\n") sys.exit(1) if not is_latest: if minimal: sys.stdout.write(f"[{latest_version}]") else: sys.stderr.write( f"{running_version} is not the latest kernel, {latest_version} is\n" ) sys.exit(2) sys.exit(3) if __name__ == "__main__": report(args.minimal)