From 08d16574fc8f0e604cafb4044ec001e16eea2a22 Mon Sep 17 00:00:00 2001 From: Mike Gerber Date: Sun, 24 May 2015 19:30:37 +0200 Subject: [PATCH] Support Debian --- check_kernel | 27 ++++++++++++++++++++++++--- check_kernel_test.py | 10 ++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/check_kernel b/check_kernel index c19a003..423a22c 100755 --- a/check_kernel +++ b/check_kernel @@ -14,13 +14,20 @@ def proc_version(): def running_kernel_version(): + m = re.findall('(?<=Debian )\S+', proc_version()) + if m: + # Note: it's the _second_ match + version = clean_kernel_version(m[1]) + return version + m = re.search('(?<=Linux version )\S+', proc_version()) if m: version = clean_kernel_version(m.group(0)) - else: - version = None + return version - return version + +def is_debian(): + return posixpath.exists('/etc/debian_version') def is_fedora(): @@ -28,10 +35,24 @@ def is_fedora(): def installed_kernel_versions(): + if is_debian(): + return installed_kernel_versions_debian() if is_fedora(): return installed_kernel_versions_fedora() +def installed_kernel_versions_debian(): + dpkg_out = subprocess.check_output( + ['dpkg-query', '--show', '--showformat', '${Package} ${Version}\n', 'linux-image*']) + dpkg_out = dpkg_out.strip() + + versions = dpkg_out.split('\n') + versions = [v for v in versions if re.search('^linux-image-\d', v)] + versions = [clean_kernel_version(v.split(' ')[1]) for v in versions] + + return versions + + def installed_kernel_versions_fedora(): rpm_out = subprocess.check_output( ['rpm', '--queryformat=%{VERSION}-%{RELEASE}\n', '-q', 'kernel']) diff --git a/check_kernel_test.py b/check_kernel_test.py index 61aaf29..9c4f85d 100644 --- a/check_kernel_test.py +++ b/check_kernel_test.py @@ -16,6 +16,11 @@ import check_kernel class CleanKernelVersionTestCase(unittest.TestCase): + def testDebian(self): + versions = [('3.16.7-ckt9-3~deb8u2', '3.16.7-ckt9-3~deb8u2')] + for dirty, clean in versions: + self.assertEqual(clean_kernel_version(dirty), LooseVersion(clean)) + def testFedora(self): versions = [('4.0.4-301.fc22.x86_64', '4.0.4-301'), ('4.0.0-1.fc22', '4.0.0-1')] @@ -29,6 +34,11 @@ class RunningKernelVersionTestCase(unittest.TestCase): self.assertEqual(check_kernel.running_kernel_version(), LooseVersion('4.0.3-301')) + def testDebian(self): + with unittest.mock.patch.object(check_kernel, 'proc_version', return_value='Linux version 3.16.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24)'): + self.assertEqual(check_kernel.running_kernel_version(), + LooseVersion('3.16.7-ckt9-3~deb8u1')) + if __name__ == '__main__': unittest.main()