From 31b1271d60bb87f1c0779259f8f02a6f71a396ea Mon Sep 17 00:00:00 2001 From: Massimiliano Adamo <maxadamo@gmail.com> Date: Sun, 1 May 2022 20:42:44 +0200 Subject: [PATCH] use python apt instead of subprocess --- README.md | 2 +- README.txt | 2 +- ubuntu-kernel-cleanup.py | 28 +++++++++------------------- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 73a7b76..a982497 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Purge unused Ubuntu kernels ### Setup -I havent' created a release process yet. +I did not create a release process yet. Meanwhile I use Git LFS to upload the package in the folder [deb/](https://gitlab.com/maxadamo/ubuntu-kernel-cleanup/-/tree/master/deb) directory. diff --git a/README.txt b/README.txt index d182fe3..dc22180 100644 --- a/README.txt +++ b/README.txt @@ -15,7 +15,7 @@ Table of Contents Setup -I havent’ created a release process yet. +I did not create a release process yet. Meanwhile I use Git LFS to upload the package in the folder deb/ directory. diff --git a/ubuntu-kernel-cleanup.py b/ubuntu-kernel-cleanup.py index 39cdeca..25f470f 100755 --- a/ubuntu-kernel-cleanup.py +++ b/ubuntu-kernel-cleanup.py @@ -36,24 +36,15 @@ except ModuleNotFoundError as err: def get_packages_list(pkg_match): """ - run a shell command like this one: - dpkg --list linux-image-[1-9]* | awk '/^ii /&&/linux-image-/{print $2}' - and create a sorted list of installed kernels. - Or if we need the version only it could be: - dpkg-query -f '${Status} ${Version}\n' -W linux-image-[1-9]* | awk '/ok installed/{print $NF}' + return a list of kernel package versions installed on the system """ - installed = sp.Popen( - "dpkg --list %s[1-9]* | awk \'/^ii /&&/%s/{print $2}\'" % ( - pkg_match, pkg_match), - stdout=sp.PIPE, stderr=sp.PIPE, shell=True - ) - installed_out, _ = installed.communicate() - installed_list = installed_out.decode('utf-8').split('\n') - kernels = [x for x in installed_list if x != ''] # delete empty items - kernel_versions = [get_version(item) for item in kernels] + c_list = list(CACHE) + c_list_names = [element.name for element in c_list if CACHE[element].is_installed] + c_list_installed = [element for element in c_list_names if element.startswith( + pkg_match) and any(chr.isdigit() for chr in element)] + c_list_installed_versions = [re.sub(r"(^\D+-|-\D+)", r"", x) for x in c_list_installed] - # sort by version and unique - return natsorted(list(set(kernel_versions))) + return natsorted(c_list_installed_versions) def process_packages(version_number, prefix, execution_type): @@ -165,7 +156,6 @@ if __name__ == '__main__': # we are running the latest kernel sanitized_kernel_list = kern_list del kern_list[-1] - try: sanitized_kernel_list except NameError: @@ -180,9 +170,9 @@ if __name__ == '__main__': for kernel_version in purged_list: process_packages(kernel_version, kernel_pkg, EXECUTION) - CACHE.close() # it returns always true... keeps closing :) + CACHE.close() # it returns always true... keeps closing like swivel doors :) - # purge empty packages + # purge empty packages (it doesn't remove kernel but orphan packages without files) if EXECUTION == 'real': CMD = "dpkg-query -f \'${Package} ${Status}\\n\' -W linux-* | awk \'/deinstall ok/{print $1}\' | xargs apt-get purge -y" # pylint: disable=C0301 else: -- GitLab