projg2 / eclean-kernel

Installed kernel cleanup tool
GNU General Public License v2.0
31 stars 10 forks source link

No module named 'zstandard' #21

Closed reagentoo closed 2 years ago

reagentoo commented 2 years ago

Hi. This appears on latest app-admin/eclean-kernel-2.99.3. Please see logs:

# eclean-kernel -d -n2
eclean-kernel has met the following issue:

  MissingDecompressorError('Kernel file /boot/initramfs-5.10.57-gentoo-dist.img is compressed with zstandard, but the required decompressor is not installed')

If you believe that the mentioned issue is a bug, please report it
to https://github.com/mgorny/eclean-kernel/issues. If possible,
please attach the output of 'eclean-kernel --list-kernels' and your
regular eclean-kernel call with additional '--debug' argument.

eclean-kernel --list-kernels - same output.

# eclean-kernel -d -n2 --debug
DEBUG:root:Sorter: <ecleankernel.sort.VersionSort object at 0x7f0db6da4e20>
DEBUG:root:Layout failed: <class 'ecleankernel.layout.blspec.BlSpecLayout'>; exception: /boot/[EFI/]a70bb35d35ccc8619ddc93435fe66214 not found
DEBUG:root:Layout: <ecleankernel.layout.std.StdLayout object at 0x7f0db6da4d30>
DEBUG:root:Bootloader failed: <class 'ecleankernel.bootloader.lilo.LILO'>
DEBUG:root:Bootloader failed: <class 'ecleankernel.bootloader.grub2.GRUB2'>
DEBUG:root:Bootloader failed: <class 'ecleankernel.bootloader.grub.GRUB'>
DEBUG:root:Bootloader failed: <class 'ecleankernel.bootloader.yaboot.Yaboot'>
DEBUG:root:Bootloader: <ecleankernel.bootloader.symlinks.Symlinks object at 0x7f0db6da4e80>
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/ecleankernel/file.py", line 116, in decompress_raw
    mod = importlib.import_module(comp)
  File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'zstandard'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python-exec/python3.9/eclean-kernel", line 33, in <module>
    sys.exit(load_entry_point('eclean-kernel==2.99.3', 'console_scripts', 'eclean-kernel')())
  File "/usr/lib/python3.9/site-packages/ecleankernel/__main__.py", line 382, in setuptools_main
    sys.exit(main(sys.argv[1:]))
  File "/usr/lib/python3.9/site-packages/ecleankernel/__main__.py", line 227, in main
    kernels = layout.find_kernels(exclusions=exclusions)
  File "/usr/lib/python3.9/site-packages/ecleankernel/layout/std.py", line 94, in find_kernels
    kobj = KernelImage(path)
  File "/usr/lib/python3.9/site-packages/ecleankernel/file.py", line 97, in __init__
    self.internal_version = self.read_internal_version()
  File "/usr/lib/python3.9/site-packages/ecleankernel/file.py", line 160, in read_internal_version
    b = self.decompress_raw()
  File "/usr/lib/python3.9/site-packages/ecleankernel/file.py", line 118, in decompress_raw
    raise MissingDecompressorError(
ecleankernel.file.MissingDecompressorError: Kernel file /boot/initramfs-5.10.57-gentoo-dist.img is compressed with zstandard, but the required decompressor is not installed
# emerge -DuNq world
>>> Verifying ebuild manifests
>>> Emerging (1 of 1) app-admin/eclean-kernel-2.99.2::gentoo
>>> Installing (1 of 1) app-admin/eclean-kernel-2.99.2::gentoo
#
# eclean-kernel -d -n2
Legend:
[-] file being removed
[x] file does not exist (anymore)
[+] file being kept (used by other kernels

* Removing kernel 5.10.56-gentoo-dist (unwanted)
 [-] /boot/vmlinuz-5.10.56-gentoo-dist
 [-] /lib/modules/5.10.56-gentoo-dist
 [-] /boot/config-5.10.56-gentoo-dist
 [-] /boot/initramfs-5.10.56-gentoo-dist.img
 [-] /boot/System.map-5.10.56-gentoo-dist
Removed 1 kernels
#
# eclean-kernel --list-kernels
5.10.58-gentoo-dist [5.10.58-gentoo-dist]
- systemmap: /boot/System.map-5.10.58-gentoo-dist
- config: /boot/config-5.10.58-gentoo-dist
- initramfs: /boot/initramfs-5.10.58-gentoo-dist.img
- vmlinuz: /boot/vmlinuz-5.10.58-gentoo-dist
- modules: /lib/modules/5.10.58-gentoo-dist
- build: /lib/modules/5.10.58-gentoo-dist/../../../usr/src/linux-5.10.58-gentoo-dist
- last modified: 2021-08-12 19:32:06
5.10.57-gentoo-dist [5.10.57-gentoo-dist]
- systemmap: /boot/System.map-5.10.57-gentoo-dist
- config: /boot/config-5.10.57-gentoo-dist
- initramfs: /boot/initramfs-5.10.57-gentoo-dist.img
- vmlinuz: /boot/vmlinuz-5.10.57-gentoo-dist
- modules: /lib/modules/5.10.57-gentoo-dist
- last modified: 2021-08-09 17:56:02
mgorny commented 2 years ago

Are you actually using zstd compression or does it misdetect it?

implr commented 2 years ago

I'm seeing the same error, for an initramfs that is actually compressed with zstd. Fixed by emerge zstandard, so seems like a missing dependency.

mgorny commented 2 years ago

I suppose I could add USE flags for all kinds of compression into the ebuild.

mgorny commented 2 years ago

Ok, I'm pushing an update that adds USE flags for lz4, lzo and zstd. The other compression formats are built-in to Python.