projg2 / eclean-kernel Goto Github PK
View Code? Open in Web Editor NEWInstalled kernel cleanup tool
License: GNU General Public License v2.0
Installed kernel cleanup tool
License: GNU General Public License v2.0
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
Version: 2.99.2
When /boot
isn't mounted, I get this error message:
eclean-kernel has met the following issue:
SystemError('No vmlinuz found. This seems ridiculous, aborting.')
When /boot
is mounted, it works. It automatically mounted with 0.4.3. eclean-kernel --help
lists the --no-mount
option, which indicates that it should automatically mount by default.
Debug output:
$ sudo eclean-kernel --list-kernels
5.10.49-gentoo-r1-x86_64 [None]
- modules: /lib/modules/5.10.49-gentoo-r1-x86_64
- build: /usr/src/linux-5.10.49-gentoo-r1
- last modified: 2021-07-17 11:58:31
$ sudo eclean-kernel -n 2 --destructive --debug
DEBUG:root:Layout failed: <class 'ecleankernel.layout.blspec.BlSpecLayout'>; exception: /boot/[EFI/]918b823714be1082a7eebebf5ac4ea54 not found
DEBUG:root:Layout: <ecleankernel.layout.std.StdLayout object at 0x7f5e22b7bb50>
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 0x7f5e22b7bb20>
DEBUG:root:Sorter: <ecleankernel.sort.VersionSort object at 0x7f5e22b7bbb0>
DEBUG:root:in get_removal_list()
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.2', '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 242, in main
removals = get_removal_list(
File "/usr/lib/python3.9/site-packages/ecleankernel/process.py", line 83, in get_removal_list
raise SystemError(
SystemError: No vmlinuz found. This seems ridiculous, aborting.
Hello.
I've found rather critical bug that caused my server malfunction for several hours (time needed to recompile a kernel).
Steps to reproduce:
After the second compilation you have the following layout:
lily ~ # eclean-kernel -l
5.17.9-gentoo-x86_64 [5.17.9-gentoo-x86_64]
- systemmap: /boot/System.map-5.17.9-gentoo-x86_64
- initramfs: /boot/initramfs-5.17.9-gentoo-x86_64.img
- vmlinuz: /boot/vmlinuz-5.17.9-gentoo-x86_64
- modules: /lib/modules/5.17.9-gentoo-x86_64
- build: /usr/src/linux-5.17.9-gentoo
- last modified: 2022-09-12 09:37:10
5.17.9-gentoo-x86_64.old [5.17.9-gentoo-x86_64]
- systemmap: /boot/System.map-5.17.9-gentoo-x86_64.old
- initramfs: /boot/initramfs-5.17.9-gentoo-x86_64.img.old
- vmlinuz: /boot/vmlinuz-5.17.9-gentoo-x86_64.old
- modules: /lib/modules/5.17.9-gentoo-x86_64
- build: /usr/src/linux-5.17.9-gentoo
- last modified: 2022-09-12 09:37:10
lily ~ # ls -l /boot /lib/modules/*
/boot:
total 56888
drwxr-xr-x 6 root root 4096 Sep 12 15:50 grub
-rw-r--r-- 1 root root 11716484 Sep 12 15:12 initramfs-5.17.9-gentoo-x86_64.img
-rw-r--r-- 1 root root 11716484 Sep 12 15:12 initramfs-5.17.9-gentoo-x86_64.img.old
-rw-r--r-- 1 root root 10798080 May 22 22:15 intel-uc.img
-rw-r--r-- 1 root root 5093296 Sep 12 12:37 System.map-5.17.9-gentoo-x86_64
-rw-r--r-- 1 root root 5093296 Sep 12 12:37 System.map-5.17.9-gentoo-x86_64.old
-rw-r--r-- 1 root root 6906112 Sep 12 12:38 vmlinuz-5.17.9-gentoo-x86_64
-rw-r--r-- 1 root root 6906112 Sep 12 12:38 vmlinuz-5.17.9-gentoo-x86_64.old
/lib/modules/5.17.9-gentoo-x86_64:
total 4724
lrwxrwxrwx 1 root root 28 May 21 22:12 build -> /usr/src/linux-5.17.9-gentoo
drwxr-xr-x 14 root root 4096 Sep 12 15:12 kernel
-rw-r--r-- 1 root root 1183583 Sep 12 15:12 modules.alias
-rw-r--r-- 1 root root 1153484 Sep 12 15:12 modules.alias.bin
-rw-r--r-- 1 root root 7051 Sep 12 15:11 modules.builtin
-rw-r--r-- 1 root root 18808 Sep 12 15:12 modules.builtin.alias.bin
-rw-r--r-- 1 root root 9415 Sep 12 15:12 modules.builtin.bin
-rw-r--r-- 1 root root 57485 Sep 12 15:11 modules.builtin.modinfo
-rw-r--r-- 1 root root 431094 Sep 12 15:12 modules.dep
-rw-r--r-- 1 root root 587075 Sep 12 15:12 modules.dep.bin
-rw-r--r-- 1 root root 453 Sep 12 15:12 modules.devname
-rw-r--r-- 1 root root 138549 Sep 12 15:11 modules.order
-rw-r--r-- 1 root root 1144 Sep 12 15:12 modules.softdep
-rw-r--r-- 1 root root 551107 Sep 12 15:12 modules.symbols
-rw-r--r-- 1 root root 665591 Sep 12 15:12 modules.symbols.bin
lrwxrwxrwx 1 root root 28 Sep 12 15:11 source -> /usr/src/linux-5.17.9-gentoo
Now run eclean-kernel:
lily ~ # eclean-kernel -p -n 1
Legend:
[-] file being removed
[+] file being kept (used by other kernels)
These are the kernels which would be removed:
- 5.17.9-gentoo-x86_64.old: not referenced by bootloader (grub2)
[-] /boot/vmlinuz-5.17.9-gentoo-x86_64.old
[+] /usr/src/linux-5.17.9-gentoo
[+] /lib/modules/5.17.9-gentoo-x86_64
[-] /boot/System.map-5.17.9-gentoo-x86_64.old
[-] /boot/initramfs-5.17.9-gentoo-x86_64.img.old
kernel-install will be called to perform prerm tasks.
Bootloader grub2 config will be updated.
lily ~ # eclean-kernel -n 1
Legend:
[-] file being removed
[x] file does not exist (anymore)
[+] file being kept (used by other kernels)
* Removing kernel 5.17.9-gentoo-x86_64.old (not referenced by bootloader (grub2))
[-] /boot/vmlinuz-5.17.9-gentoo-x86_64.old
[+] /usr/src/linux-5.17.9-gentoo
[+] /lib/modules/5.17.9-gentoo-x86_64
[-] /boot/System.map-5.17.9-gentoo-x86_64.old
[-] /boot/initramfs-5.17.9-gentoo-x86_64.img.old
Removed 1 kernels
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.17.9-gentoo-x86_64
Found initrd image: /boot/intel-uc.img /boot/initramfs-5.17.9-gentoo-x86_64.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done
And you end up with this:
lily ~ # eclean-kernel -l
5.17.9-gentoo-x86_64 [5.17.9-gentoo-x86_64]
- systemmap: /boot/System.map-5.17.9-gentoo-x86_64
- initramfs: /boot/initramfs-5.17.9-gentoo-x86_64.img
- vmlinuz: /boot/vmlinuz-5.17.9-gentoo-x86_64
- modules: /lib/modules/5.17.9-gentoo-x86_64
- build: /usr/src/linux-5.17.9-gentoo
- last modified: 2022-09-12 09:37:10
lily ~ # ls -l /boot /lib/modules/*
/boot:
total 33720
drwxr-xr-x 6 root root 4096 Sep 12 15:59 grub
-rw-r--r-- 1 root root 11716484 Sep 12 15:12 initramfs-5.17.9-gentoo-x86_64.img
-rw-r--r-- 1 root root 10798080 May 22 22:15 intel-uc.img
-rw-r--r-- 1 root root 5093296 Sep 12 12:37 System.map-5.17.9-gentoo-x86_64
-rw-r--r-- 1 root root 6906112 Sep 12 12:38 vmlinuz-5.17.9-gentoo-x86_64
/lib/modules/5.17.9-gentoo-x86_64:
total 208
lrwxrwxrwx 1 root root 28 May 21 22:12 build -> /usr/src/linux-5.17.9-gentoo
drwxr-xr-x 14 root root 4096 Sep 12 15:12 kernel
-rw-r--r-- 1 root root 7051 Sep 12 15:11 modules.builtin
-rw-r--r-- 1 root root 57485 Sep 12 15:11 modules.builtin.modinfo
-rw-r--r-- 1 root root 138549 Sep 12 15:11 modules.order
lrwxrwxrwx 1 root root 28 Sep 12 15:11 source -> /usr/src/linux-5.17.9-gentoo
For some reason, eclean-kernel removed most of the /lib/modules/5.17.9-gentoo-x86_64/modules.* files, leaving only modules.builtin, modules.builtin.modinfo and modules.order.
This makes the system unable to load any modules. I've accidentally found this after a reboot - hardware attached to my server wasn't working because the modules were not loaded.
Haven't seen this before? Is the issue on my end?
➜ eclean-kernel -An2
eclean-kernel has met the following issue:
NotADirectoryError(20, 'Not a directory')
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 --debug
DEBUG:root:Sorter: <ecleankernel.sort.VersionSort object at 0x7f89db1faad0>
DEBUG:root:Layout failed: <class 'ecleankernel.layout.blspec.BlSpecLayout'>; exception: /boot/[EFI/]a85f29c445c0b751729c47a963650897 not found
DEBUG:root:Layout: <ecleankernel.layout.std.StdLayout object at 0x7f89db1fa680>
DEBUG:root:Bootloader failed: <class 'ecleankernel.bootloader.lilo.LILO'>
DEBUG:root:/boot/grub/grub.cfg found
DEBUG:root:Bootloader: <ecleankernel.bootloader.grub2.GRUB2 object at 0x7f89db1fa500>
6.0.8-gentoo [6.0.8-gentoo]
- systemmap: /boot/System.map-6.0.8-gentoo
- config: /boot/config-6.0.8-gentoo
- vmlinuz: /boot/vmlinuz-6.0.8-gentoo
- modules: /lib/modules/6.0.8-gentoo
- build: /usr/src/linux-6.0.8-gentoo
- last modified: 2022-11-10 23:06:43
6.0.7-gentoo [6.0.7-gentoo]
- systemmap: /boot/System.map-6.0.7-gentoo
- config: /boot/config-6.0.7-gentoo
- vmlinuz: /boot/vmlinuz-6.0.7-gentoo
- modules: /lib/modules/6.0.7-gentoo
- build: /usr/src/linux-6.0.7-gentoo
- last modified: 2022-11-07 11:37:12
6.0.7-gentoo.old [6.0.7-gentoo]
- systemmap: /boot/System.map-6.0.7-gentoo.old
- config: /boot/config-6.0.7-gentoo.old
- vmlinuz: /boot/vmlinuz-6.0.7-gentoo.old
- modules: /lib/modules/6.0.7-gentoo
- build: /usr/src/linux-6.0.7-gentoo
- last modified: 2022-11-05 05:07:24
➜ l /boot
Permissions Size User Date Modified Name
drwxr-xr-x - root 5 Nov 00:57 EFI
drwxr-xr-x - root 10 Nov 16:37 grub
.rwxr-xr-x 144k root 7 Nov 03:37 config-6.0.7-gentoo
.rwxr-xr-x 144k root 4 Nov 22:07 config-6.0.7-gentoo.old
.rwxr-xr-x 144k root 10 Nov 15:06 config-6.0.8-gentoo
.rwxr-xr-x 5.6M root 7 Nov 03:37 System.map-6.0.7-gentoo
.rwxr-xr-x 5.6M root 4 Nov 22:07 System.map-6.0.7-gentoo.old
.rwxr-xr-x 5.6M root 10 Nov 15:06 System.map-6.0.8-gentoo
.rwxr-xr-x 10M root 7 Nov 03:37 vmlinuz-6.0.7-gentoo
.rwxr-xr-x 10M root 4 Nov 22:07 vmlinuz-6.0.7-gentoo.old
.rwxr-xr-x 10M root 10 Nov 15:06 vmlinuz-6.0.8-gentoo
➜ l /boot/EFI/gentoo/grubx64.efi
Permissions Size User Date Modified Name
.rwxr-xr-x 135k root 5 Nov 00:57 /boot/EFI/gentoo/grubx64.efi
Getting this message:
sandra /usr/src/linux # eclean-kernel -n3
* Removing kernel 5.2.11-sandra (not referenced by bootloader (grub2))
- /boot/vmlinuz-5.2.11-sandra
- /boot/System.map-5.2.11-sandra
- /boot/config-5.2.11-sandra
- /lib/modules/5.2.11-sandra
- /usr/src/linux-5.2.11
* Removing kernel 5.2.9-sandra (not referenced by bootloader (grub2))
- /boot/vmlinuz-5.2.9-sandra
- /boot/System.map-5.2.9-sandra
- /boot/config-5.2.9-sandra
- /lib/modules/5.2.9-sandra
- /usr/src/linux-5.2.9
* Removing kernel 5.2.8-sandra (not referenced by bootloader (grub2))
- /boot/vmlinuz-5.2.8-sandra
- /boot/System.map-5.2.8-sandra
- /boot/config-5.2.8-sandra
- /lib/modules/5.2.8-sandra
- /usr/src/linux-5.2.8
* Removing kernel 5.2.1-sandra (not referenced by bootloader (grub2))
- /boot/vmlinuz-5.2.1-sandra
- /boot/System.map-5.2.1-sandra
- /boot/config-5.2.1-sandra
- /lib/modules/5.2.1-sandra
- /usr/src/linux-5.2.1
Removed 4 kernels
eclean-kernel has met the following issue:
NameError("name 'errno' is not defined",)
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.
sandra /usr/src/linux #
root@gentooserver /media/store/Data/VM/gnu-hurd/cross-hurd-smp # ls /boot
EFI System.map-5.3.12-gentoo-x86_64 vmlinuz-5.4.28-gentoo-x86_64
grub System.map-5.3.12-gentoo-x86_64.old vmlinuz-5.4.28-gentoo-x86_64.old
initramfs-5.3.12-gentoo-x86_64.img System.map-5.4.28-gentoo-x86_64 vmlinuz-5.4.38-gentoo-x86_64
initramfs-5.3.12-gentoo-x86_64.img.old System.map-5.4.28-gentoo-x86_64.old vmlinuz-5.4.38-gentoo-x86_64.old
initramfs-5.4.28-gentoo-x86_64.img System.map-5.4.38-gentoo-x86_64 vmlinuz-5.4.48-gentoo-x86_64
initramfs-5.4.28-gentoo-x86_64.img.old System.map-5.4.38-gentoo-x86_64.old vmlinuz-5.4.48-gentoo-x86_64.old
initramfs-5.4.38-gentoo-x86_64.img System.map-5.4.48-gentoo-x86_64 vmlinuz-5.4.60-gentoo-x86_64
initramfs-5.4.38-gentoo-x86_64.img.old System.map-5.4.48-gentoo-x86_64.old vmlinuz-5.4.60-gentoo-x86_64.old
initramfs-5.4.48-gentoo-x86_64.img System.map-5.4.60-gentoo-x86_64 vmlinuz-5.4.66-gentoo-x86_64
initramfs-5.4.48-gentoo-x86_64.img.old System.map-5.4.60-gentoo-x86_64.old vmlinuz-5.4.66-gentoo-x86_64.old
initramfs-5.4.60-gentoo-x86_64.img vmlinuz-5.3.12-gentoo-x86_64
initramfs-5.4.60-gentoo-x86_64.img.old vmlinuz-5.3.12-gentoo-x86_64.old
root@gentooserver /media/store/Data/VM/gnu-hurd/cross-hurd-smp # eclean-kernel --debug -dn 2
Traceback (most recent call last):
File "/usr/lib/python-exec/python3.7/eclean-kernel", line 26, in <module>
sys.exit(main(sys.argv))
File "/usr/lib/python3.7/site-packages/ecleankernel/cli.py", line 156, in main
kernels = find_kernels(exclusions=exclusions)
File "/usr/lib/python3.7/site-packages/ecleankernel/kernel.py", line 275, in find_kernels
realkv = newk.real_kv
File "/usr/lib/python3.7/site-packages/ecleankernel/kernel.py", line 156, in real_kv
+ ' %s (!= HdrS)' % vmlinuz)
NotImplementedError: Invalid magic for kernel file /boot/vmlinuz-5.4.66-gentoo-x86_64 (!= HdrS)
root@gentooserver /media/store/Data/VM/gnu-hurd/cross-hurd-smp # eclean-kernel --list-kernels
eclean-kernel has met the following issue:
NotImplementedError('Invalid magic for kernel file /boot/vmlinuz-5.4.66-gentoo-x86_64 (!= HdrS)')
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.
I stopped calling my kernel files “vmlinuz” a long time ago, because it doesn’t fit modern systems and formats.
And eclean-kernel just removed ALL my kernels! If the config files hadn’t been saved somewhere else too, they’d be gone and I would have had to re-install from backups before rebooting, or been left with a broken system. :/
My layout is as follows: In /boot, there are symlinks
.config -> /boot/.config-$currentVersion
.config.stable -> /boot/.config-$lastVersion
System.map -> /boot/System.map-$currentVersion
System.map.stable -> /boot/System.map-$lastVersion
kernel -> /boot/kernel-$currentVersion
kernel.stable -> /boot/kernel-$lastVersion
E.g.
currentVersion=5.13.10-zen1.0
lastVersion=5.13.4-zen1.0
eclean-kernel deleted every System.map-* and every kernel-* and then all /etc/src/linux-* directories too, including the .config files therein.
Looking at its, frankly, gigantic amount of source code for such a simple program, I cannot even locate where to alter what it looks for to determine which kernels are still in use. It seems to all be much too generic code. So I’m even more surprised it failed for my case. (Did it fail because of the symlinks?)
So can you please enable people to specify how they named their stuff inside /boot?
Because like this, eclean-kernel is not only useless for all but “I don’t care, just do it the standard way” cases… when the whole point of Gentoo is that you care and customize… but it also can be out-performed by a 5-line bash script. (Or a Haskell one-liner, albeit in write-only code ;)
sys-kernel/installkernel-28 with USE=refind set, app-admin/eclean-kernel-2.99.7
Running eclean-kernel -n 2
results in
Legend:
[-] file being removed
[x] file does not exist (anymore)
[+] file being kept (used by other kernels)
* Removing kernel other 6.8.0-gentoo.png (vmlinuz does not exist)
[-] /boot/vmlinuz-6.8.0-gentoo.png
* Removing kernel other 6.7.9-gentoo.png (vmlinuz does not exist)
[-] /boot/vmlinuz-6.7.9-gentoo.png
* Removing kernel other 6.7.8-gentoo (not referenced by bootloader (symlinks))
[-] /boot/vmlinuz-6.7.8-gentoo
[-] /usr/src/linux-6.7.8-gentoo
[-] /lib/modules/6.7.8-gentoo
[-] /boot/config-6.7.8-gentoo
[-] /boot/System.map-6.7.8-gentoo
* Removing kernel other 6.7.7-gentoo (not referenced by bootloader (symlinks))
[-] /boot/vmlinuz-6.7.7-gentoo
[-] /usr/src/linux-6.7.7-gentoo
[-] /lib/modules/6.7.7-gentoo
[-] /boot/System.map-6.7.7-gentoo
[-] /boot/config-6.7.7-gentoo
Removed 4 kernels
End content of /boot is
config-6.7.9-gentoo config-6.8.0-gentoo EFI lost+found refind_linux.conf System.map-6.7.9-gentoo System.map-6.8.0-gentoo vmlinuz-6.7.9-gentoo vmlinuz-6.8.0-gentoo
As png files have same names as accompanying kernel images, their removal should be done only when vmlinux file is deleted.
I'm willing to take a shot at a patch for this, but wanted to see if someone else had already been working on this.
eclean-kernel -n 3
makes a list of the 3 most recent versions to preserve.eclean-kernel -N 3
could make a list of kernel versions X.Y.Z where X and Y are fixed and Z is maximized.eclean-kernel -n3 -N3
could make both lists and preserve any kernel which is a member of either set.For example, say you have the following kernels on disk: 5.11.16, 5.11.15, 5.11.14, 5.11.13, 5.11.12, 5.10.16, 5.10.15, 5.10.10, 5.9.14, 5.9.12, 4.20.5 (a subset of my actual current situation)
-n3
would remove all but 5.11.16, 5.11.15, 5.11.14
-N3
would remove all but 5.11.16, 5.10.16, 5.9.14
-n3 -N3
would remove all but 5.11.16, 5.11.15, 5.11.14, 5.10.16, 5.9.14
Thoughts?
However, emerge --info emerge app-arch/lzop shows:
...
=================================================================
Package Settings
=================================================================
app-arch/lzop-1.04::gentoo was built with the following:
USE="" ABI_X86="(64)"
FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs ccache clean-logs config-protect-if-modified distlocks ebuild-locks fail-clean fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
I recently installed gentoo and it comes with /etc/kernel/entry-token
set to gentoo
. In this case, machine-id
is replaced by gentoo
and kernels end up in directories like /boot/gentoo/6.1.8-gentoo-dist/{linux, initrd}
Note this is tested with v0.4.3 but I didn't spot any significant changes in current master so I assume this is still happening in current master:
eclean-kernel --ask --destructive --all
.Remove 5.11.15-gentoo-x86_64 (unwanted)? [Yes/No]
- Removing kernel 5.11.15-gentoo-x86_64 (unwanted)
- /boot/vmlinuz-5.11.15-gentoo-x86_64
- /boot/System.map-5.11.15-gentoo-x86_64
- /boot/initramfs-5.11.15-gentoo-x86_64.img
- /lib/modules/5.11.15-gentoo-x86_64
- /usr/src/linux-5.11.15-gentoo
This could be unexpected. How about indicating default action like known from make oldconfig
? I.e. instead of
[Yes/No]
show
[YES/no]
so it should be clear that pressing Enter without any further input will proceed with removal.
I have the following inside my /boot.
ls -1 /boot
amd-uc.img
EFI
grub
initramfs-5.8.1-gentoo-x86_64.img
initramfs-5.8.1-gentoo-x86_64.old.img
initramfs-5.8.2-gentoo-x86_64.img
intel-uc.img
lost+found
System.map-5.8.1-gentoo-x86_64
System.map-5.8.1-gentoo-x86_64.old
System.map-5.8.2-gentoo-x86_64
vmlinuz-5.8.1-gentoo-x86_64
vmlinuz-5.8.1-gentoo-x86_64.old
vmlinuz-5.8.2-gentoo-x86_64
If I perform the following command I can see that only the .old
kernel and related files will be removed.
eclean-kernel -d -n 2 -p
These are the kernels which would be removed:
- 5.8.1-gentoo-x86_64.old: unwanted
kernel-install will be called to perform prerm tasks.
In order to be sure, I run the following command.
eclean-kernel -l
5.8.2-gentoo-x86_64 [5.8.2-gentoo-x86_64]:
- vmlinuz: /boot/vmlinuz-5.8.2-gentoo-x86_64
- systemmap: /boot/System.map-5.8.2-gentoo-x86_64
- initramfs: /boot/initramfs-5.8.2-gentoo-x86_64.img
- modules: /lib/modules/5.8.2-gentoo-x86_64
- build: /usr/src/linux-5.8.2-gentoo
- last modified: 2020-08-20 16:21:44
5.8.1-gentoo-x86_64 [5.8.1-gentoo-x86_64]:
- vmlinuz: /boot/vmlinuz-5.8.1-gentoo-x86_64
- systemmap: /boot/System.map-5.8.1-gentoo-x86_64
- initramfs: /boot/initramfs-5.8.1-gentoo-x86_64.img
- modules: /lib/modules/5.8.1-gentoo-x86_64
- build: /usr/src/linux-5.8.1-gentoo
- last modified: 2020-08-18 18:35:56
5.8.1-gentoo-x86_64.old [5.8.1-gentoo-x86_64]:
- vmlinuz: /boot/vmlinuz-5.8.1-gentoo-x86_64.old
- systemmap: /boot/System.map-5.8.1-gentoo-x86_64.old
- initramfs: /boot/initramfs-5.8.1-gentoo-x86_64.old.img
- modules: /lib/modules/5.8.1-gentoo-x86_64
- build: /usr/src/linux-5.8.1-gentoo
- last modified: 2020-08-18 18:35:56
If I run the following command, it seems to perform what it is expected.
eclean-kernel -d -n 2
* Removing kernel 5.8.1-gentoo-x86_64.old (unwanted)
- /boot/vmlinuz-5.8.1-gentoo-x86_64.old
- /boot/System.map-5.8.1-gentoo-x86_64.old
- /boot/initramfs-5.8.1-gentoo-x86_64.old.img
Removed 1 kernels
But if I double check, actually, eclean-kernel also removed the /boot/initramfs-5.8.1-gentoo-x86_64.img
file. I didn't asked for that!
ls -1 /boot
amd-uc.img
EFI
grub
initramfs-5.8.2-gentoo-x86_64.img
intel-uc.img
lost+found
System.map-5.8.1-gentoo-x86_64
System.map-5.8.2-gentoo-x86_64
vmlinuz-5.8.1-gentoo-x86_64
vmlinuz-5.8.2-gentoo-x86_64
It seems that initramfs management is buggy. 😢
Repository description says „Old version of kernel cleanup tool (unmaintained, bugs will be fixed only if patch is provided)”, which doesn't seem to be the case now.
This is a followup of #41 .
Briefly, with the following LILO configuration (all bootloaders are affected, but I only have LILO installed):
image=/boot/vmlinuz
label=default
read-write
root=/dev/sda1
append="net.ifnames=0 init=/sbin/openrc-init sysrq_always_enabled=1"
image=/boot/vmlinuz.old
label=old
read-write
root=/dev/sda1
append="net.ifnames=0 init=/sbin/openrc-init sysrq_always_enabled=1"
and these files in /boot
:
-rw-r--r-- 1 root root 512 Jan 3 2022 boot.0800
lrwxrwxrwx 1 root root 18 Aug 13 11:49 config -> config-6.4.10-test
-rw-r--r-- 1 root root 109325 Aug 13 11:49 config-6.4.10-test
-rw-r--r-- 1 root root 109229 Aug 4 08:24 config-6.4.8-test
-rw-r--r-- 1 root root 109324 Aug 10 16:45 config-6.4.9-test
lrwxrwxrwx 1 root root 17 Aug 10 16:45 config.old -> config-6.4.9-test
-rw-r--r-- 1 root root 0 Jan 2 2022 .keep
-rw------- 1 root root 23040 Aug 13 11:49 map
lrwxrwxrwx 1 root root 22 Aug 13 11:49 System.map -> System.map-6.4.10-test
-rw-r--r-- 1 root root 4288104 Aug 13 11:49 System.map-6.4.10-test
-rw-r--r-- 1 root root 4286603 Aug 4 08:24 System.map-6.4.8-test
-rw-r--r-- 1 root root 4287870 Aug 10 16:45 System.map-6.4.9-test
lrwxrwxrwx 1 root root 21 Aug 10 16:45 System.map.old -> System.map-6.4.9-test
lrwxrwxrwx 1 root root 19 Aug 13 11:49 vmlinuz -> vmlinuz-6.4.10-test
-rw-r--r-- 1 root root 7913168 Aug 13 11:49 vmlinuz-6.4.10-test
-rw-r--r-- 1 root root 7909136 Aug 4 08:24 vmlinuz-6.4.8-test
-rw-r--r-- 1 root root 7911952 Aug 10 16:45 vmlinuz-6.4.9-test
lrwxrwxrwx 1 root root 18 Aug 10 16:45 vmlinuz.old -> vmlinuz-6.4.9-test
then running eclean-kernel -a
, the expectation is that only the following files would be deleted (everything else is used by the bootloader):
-rw-r--r-- 1 root root 109229 Aug 4 08:24 config-6.4.8-test
-rw-r--r-- 1 root root 4286603 Aug 4 08:24 System.map-6.4.8-test
-rw-r--r-- 1 root root 7909136 Aug 4 08:24 vmlinuz-6.4.8-test
Instead, the regex substitution here fails and only the currently running kernel is preserved, which means at least one more kernel is deleted.
I get ValueError: embedded null byte
when running eclean-kernel
version 2.99.3:
* Removing kernel 5.13.16-gentoo-dist (not referenced by bootloader (grub2))
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 332, in main
p = subprocess.Popen(scmd)
File "/usr/lib/python3.9/subprocess.py", line 951, in __init__ self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib/python3.9/subprocess.py", line 1754, in _execute_child
self.pid = _posixsubprocess.fork_exec(
ValueError: embedded null byte
Using pdb
shows the null byte:
* Removing kernel 5.13.15-gentoo-dist (not referenced by bootloader (grub2))
> /usr/lib/python3.9/site-packages/ecleankernel/__main__.py(332)main()
-> p = subprocess.Popen(scmd)
(Pdb)
[-] /boot/vmlinuz-5.13.15-gentoo-dist
[-] /lib/modules/5.13.15-gentoo-dist
[-] /boot/System.map-5.13.15-gentoo-dist
[-] /boot/config-5.13.15-gentoo-dist
* Removing kernel 5.13.15-gentoo-dist (not referenced by bootloader (grub2))
> /usr/lib/python3.9/site-packages/ecleankernel/__main__.py(332)main()-> p = subprocess.Popen(scmd)
(Pdb) p scmd
['kernel-install', 'remove', '\x00CIFS', '/boot/initramfs-5.13.15-gentoo-dist.img']
(Pdb) p kf.internal_version
'\x00CIFS'
(Pdb) p kf
KernelImage(PosixPath('/boot/initramfs-5.13.15-gentoo-dist.img'))
Maybe a bug in KernelImage.read_internal_version()
?
Thought I'd try this out and I came across:
$ eclean-kernel -l
eclean-kernel has met the following issue:
LZMAError('Compressed data ended before the end-of-stream marker was reached')
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 -lD
DEBUG:root:Sorter: <ecleankernel.sort.VersionSort object at 0x7fbda67a0f10>
DEBUG:root:Layout failed: <class 'ecleankernel.layout.blspec.BlSpecLayout'>; exception: /boot/[EFI/]18b34b2f29fbc54b6dd357085a1b8972 not found
DEBUG:root:Layout: <ecleankernel.layout.std.StdLayout object at 0x7fbda67cd130>
DEBUG:root:Bootloader failed: <class 'ecleankernel.bootloader.lilo.LILO'>
DEBUG:root:/boot/grub/grub.cfg found
DEBUG:root:Bootloader: <ecleankernel.bootloader.grub2.GRUB2 object at 0x7fbda67cd160>
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 135, in decompress_raw
return getattr(mod, 'decompress')(f.read())
File "/usr/lib/python3.9/lzma.py", line 350, in decompress
raise LZMAError("Compressed data ended before the "
_lzma.LZMAError: Compressed data ended before the end-of-stream marker was reached
Now algorithm preserving currently running kernel. But if a new kernel is installed, but the system has not yet been booted into it, then it will be removed after running this script.
Hi,
If I understand the source code correctly, the kernel source directory (/usr/src/linux-xxx
) is tied to the module directory (/lib/modules/xxx
) because it is read from a link (named build
).
On one of my server, I have a kernel where CONFIG_MODULES
is disabled. In this case, there is no modules directory and so, eclean-kernel
is never removing my old sources.
Is there currently a way to say to eclean-kernel
to remove the source directories without looking for the modules? Or could that be an option?
Thank you.
> eclean-kernel -l
6.1.38-gentoo [6.1.38-gentoo]
- systemmap: /boot/System.map-6.1.38-gentoo
- vmlinuz: /boot/vmlinuz-6.1.38-gentoo
- last modified: 2023-07-14 13:09:46
6.1.31-gentoo [6.1.31-gentoo]
- systemmap: /boot/System.map-6.1.31-gentoo
- vmlinuz: /boot/vmlinuz-6.1.31-gentoo
- last modified: 2023-06-03 12:47:53
Trying to remove old kernels, I get
# eclean-kernel -n 1 --debug
DEBUG:root:Sorter: <ecleankernel.sort.VersionSort object at 0x7f9cca7da030>
DEBUG:root:Layout: <ecleankernel.layout.blspec.BlSpecLayout object at 0x7f9cca7fffe0>
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 0x7f9cca8edeb0>
DEBUG:root:Unrecognized potential kernel image: Kernel file /boot/EFI/Linux/4ef3f0726da6cb6044514cac5e1c8c75-6.6.4-gentoo-dist.efi not recognized as any special format and unable to find version string in it
DEBUG:root:Unrecognized potential kernel image: Kernel file /boot/EFI/Linux/4ef3f0726da6cb6044514cac5e1c8c75-6.6.3-gentoo-dist.efi not recognized as any special format and unable to find version string in it
DEBUG:root:in get_removal_list()
Traceback (most recent call last):
File "/usr/lib/python-exec/python3.12/eclean-kernel", line 8, in <module>
sys.exit(setuptools_main())
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/ecleankernel/__main__.py", line 392, in setuptools_main
sys.exit(main(sys.argv[1:]))
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/ecleankernel/__main__.py", line 252, in main
removals = get_removal_list(
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/ecleankernel/process.py", line 82, in get_removal_list
raise SystemError(
SystemError: No vmlinuz found. This seems ridiculous, aborting.
importantly: these kernels have been produced with systemd's ukify
, not with dracut.
Debug output:
# eclean-kernel --list-kernels --debug
DEBUG:root:Sorter: <ecleankernel.sort.VersionSort object at 0x7f893193a900>
DEBUG:root:Layout: <ecleankernel.layout.blspec.BlSpecLayout object at 0x7f89318f4230>
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 0x7f89319e9dc0>
DEBUG:root:Unrecognized potential kernel image: Kernel file /boot/EFI/Linux/4ef3f0726da6cb6044514cac5e1c8c75-6.6.4-gentoo-dist.efi not recognized as any special format and unable to find version string in it
DEBUG:root:Unrecognized potential kernel image: Kernel file /boot/EFI/Linux/4ef3f0726da6cb6044514cac5e1c8c75-6.6.3-gentoo-dist.efi not recognized as any special format and unable to find version string in it
uki 6.6.4-gentoo-dist [None]
- vmlinuz: /boot/EFI/Linux/4ef3f0726da6cb6044514cac5e1c8c75-6.6.4-gentoo-dist.efi
- modules: /lib/modules/6.6.4-gentoo-dist
- build: /lib/modules/6.6.4-gentoo-dist/../../../src/linux-6.6.4-gentoo-dist
- last modified: 2023-12-04 10:48:53
uki 6.6.3-gentoo-dist [None]
- vmlinuz: /boot/EFI/Linux/4ef3f0726da6cb6044514cac5e1c8c75-6.6.3-gentoo-dist.efi
- last modified: 2023-12-03 16:30:48
# eclean-kernel -p
eclean-kernel has met the following issue:
SystemError('No vmlinuz found. This seems ridiculous, aborting.')
I believe this is due to the fact that my kernels, initramfs's and friends are in /, not /boot. Can anybody confirm?
I stopped calling my kernel files “vmlinuz” a long time ago, and eclean-kernel just removed ALL my kernels! If the config files hadn’t been saved somewhere else too, they’d be gone and I would have had to re-install from backups before rebooting, or been left with a broken system. :/
My layout is as follows: In /boot, there are symlinks
.config -> /boot/.config-$currentVersion
.config.stable -> /boot/.config-$lastVersion
. -> /boot/-$currentVersion
..stable -> /boot/-$lastVersion
Sorry if my question is silly, but I'm a a bit puzzled. I'm using genkernel to create and install my kernels. I tried to use eclean-kernel to remove old kernels and I noticed that it does not find any kernel referenced in grub.cfg (believe me, they are :) ).
It seems that is due to the line 30 of grub2.py, where the file is tested for the header "...DO NOT EDIT THIS FILE...". Is this the intended behavior? I'm not sure why this is done, as basically this could lead eclean-kernel to remove all kernel files even without -d parameter, that does not seems to be really safe.
It would be nice to have EFI Stub kernel support with plain UEFI bootloader.
https://wiki.gentoo.org/wiki/EFI_stub
https://wiki.gentoo.org/wiki/EFI_System_Partition
It'd be nice if systemd-boot, former gummiboot, was supported.
Hi,
For me it does nothing...
eclean-kernel -n 1 -p
No outdated kernels found.
eclean-kernel -l
genkernel-x86_64-4.19.44-gentoo [4.19.44-gentoo]:
- vmlinuz: /boot/kernel-genkernel-x86_64-4.19.44-gentoo
- systemmap: /boot/System.map-genkernel-x86_64-4.19.44-gentoo
- initramfs: /boot/initramfs-genkernel-x86_64-4.19.44-gentoo
- modules: /lib64/modules/4.19.44-gentoo
- build: /usr/src/linux-4.19.44-gentoo
- last modified: 2019-06-15 13:39:08
genkernel-x86_64-4.14.83-gentoo [4.14.83-gentoo]:
- vmlinuz: /boot/kernel-genkernel-x86_64-4.14.83-gentoo
- systemmap: /boot/System.map-genkernel-x86_64-4.14.83-gentoo
- initramfs: /boot/initramfs-genkernel-x86_64-4.14.83-gentoo
- modules: /lib64/modules/4.14.83-gentoo
- build: /usr/src/linux-4.14.83-gentoo
- last modified: 2019-01-26 11:51:00
genkernel-x86_64-4.14.78-gentoo [4.14.78-gentoo]:
- vmlinuz: /boot/kernel-genkernel-x86_64-4.14.78-gentoo
- systemmap: /boot/System.map-genkernel-x86_64-4.14.78-gentoo
- initramfs: /boot/initramfs-genkernel-x86_64-4.14.78-gentoo
- modules: /lib64/modules/4.14.78-gentoo
- build: /usr/src/linux-4.14.78-gentoo
- last modified: 2018-11-20 17:28:22
genkernel-x86_64-4.14.65-gentoo [4.14.65-gentoo]:
- vmlinuz: /boot/kernel-genkernel-x86_64-4.14.65-gentoo
- systemmap: /boot/System.map-genkernel-x86_64-4.14.65-gentoo
- initramfs: /boot/initramfs-genkernel-x86_64-4.14.65-gentoo
- modules: /lib64/modules/4.14.65-gentoo
- build: /usr/src/linux-4.14.65-gentoo
- last modified: 2018-10-24 21:14:48
genkernel-x86_64-4.9.76-gentoo-r1 [4.9.76-gentoo-r1]:
- vmlinuz: /boot/kernel-genkernel-x86_64-4.9.76-gentoo-r1
- systemmap: /boot/System.map-genkernel-x86_64-4.9.76-gentoo-r1
- initramfs: /boot/initramfs-genkernel-x86_64-4.9.76-gentoo-r1
- modules: /lib64/modules/4.9.76-gentoo-r1
- build: /usr/src/linux-4.9.76-gentoo-r1
- last modified: 2018-03-06 23:25:02
Can you please comment?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.