I've got Gentoo installed on a macbook pro which uses UEFI and Grub2 to boot. My grub.cfg is in /boot/GRUB2/grub.cfg but eclean-kernel looks for /boot/grub2 so it removes all my kernels since it thinks they are not listed in the config. Since my /boot is FAT, it is case-insensitive so 'cd /boot/grub2' works but eclean-kernel doesn't want to be case-insensitive apparently: doug-mac boot # pwd /boot doug-mac boot # ls EFI System.map-3.7.7-gentoo config-3.7.7-gentoo vmlinuz-3.7.7-gentoo GRUB2 System.map-3.7.8-gentoo config-3.7.8-gentoo vmlinuz-3.7.8-gentoo doug-mac boot # grep vmlinuz /boot/grub2/grub.cfg linux /vmlinuz-3.7.8-gentoo root=/dev/sda3 ro linux /vmlinuz-3.7.8-gentoo root=/dev/sda3 ro linux /vmlinuz-3.7.8-gentoo root=/dev/sda3 ro single linux /vmlinuz-3.7.7-gentoo root=/dev/sda3 ro linux /vmlinuz-3.7.7-gentoo root=/dev/sda3 ro single doug-mac boot # eclean-kernel -a -p Preserving currently running kernel (3.7.7-gentoo) These are the kernels which would be removed: - 3.7.8-gentoo: not referenced by bootloader (grub2) Bootloader grub2 config will be updated. doug-mac boot # doug-mac boot # eix eclean-kernel [I] app-admin/eclean-kernel Available versions: (~)0.3.1 (~)0.3.2{tbz2} **9999 {PYTHON_TARGETS="pypy1_9 python2_6 python2_7 python3_1 python3_2 python3_3"} Installed versions: 0.3.2{tbz2}(09:00:43 PM 02/02/2013)(PYTHON_TARGETS="python2_7 python3_2 -pypy1_9 -python2_6 -python3_1 -python3_3") Homepage: https://bitbucket.org/mgorny/eclean-kernel/ Description: Remove outdated built kernels doug-mac boot #
As a temporary workaround you can mount with iocharset=utf8 so the filesystem becomes case sensitive. Keep in mind however that Windows does not handle well if two files' filenames differ only in case.
(In reply to comment #1) > As a temporary workaround you can mount with iocharset=utf8 so the > filesystem becomes case sensitive. I'll try this, thanks > Keep in mind however that Windows does not handle well if two files' > filenames differ only in case. No other OS on this machine (I even nuked OSX completely) so that's not much of a concern thankfully
It appears that the mount option recommended doesn't help: doug-mac ~ # mount|grep /boot /dev/sda1 on /boot type vfat (rw,iocharset=utf8) doug-mac ~ # grep vmlinuz /boot/grub2/grub.cfg grep: /boot/grub2/grub.cfg: No such file or directory doug-mac ~ # grep vmlinuz /boot/GRUB2/grub.cfg linux /vmlinuz-3.8.0-gentoo root=/dev/sda3 ro linux /vmlinuz-3.8.0-gentoo root=/dev/sda3 ro linux /vmlinuz-3.8.0-gentoo root=/dev/sda3 ro single linux /vmlinuz-3.7.8-gentoo root=/dev/sda3 ro linux /vmlinuz-3.7.8-gentoo root=/dev/sda3 ro single doug-mac ~ # eclean-kernel -a -p Preserving currently running kernel (3.7.8-gentoo) These are the kernels which would be removed: - 3.8.0-gentoo: not referenced by bootloader (symlinks) - 3.7.7-gentoo: vmlinuz does not exist, not referenced by bootloader (symlinks) Note that the 'grep' that used to work, now fails with this mount option :(
I don't really see where something could fail here. Could you run with '--debug' please? And please also paste 'eclean-kernel --list-kernels'.
doug-mac ~ # mount|grep boot /dev/sda1 on /boot type vfat (rw,iocharset=utf8) doug-mac ~ # ls /boot EFI System.map-3.7.8-gentoo config-3.7.8-gentoo vmlinuz-3.7.8-gentoo GRUB2 System.map-3.8.0-gentoo config-3.8.0-gentoo vmlinuz-3.8.0-gentoo doug-mac ~ # eclean-kernel --list-kernels 3.8.0-gentoo: - vmlinuz: /boot/vmlinuz-3.8.0-gentoo - systemmap: /boot/System.map-3.8.0-gentoo - config: /boot/config-3.8.0-gentoo - modules: /lib64/modules/3.8.0-gentoo - build: /usr/src/linux-3.8.0-gentoo 3.7.8-gentoo: - vmlinuz: /boot/vmlinuz-3.7.8-gentoo - systemmap: /boot/System.map-3.7.8-gentoo - config: /boot/config-3.7.8-gentoo - modules: /lib64/modules/3.7.8-gentoo - build: /usr/src/linux-3.7.8-gentoo doug-mac ~ # eclean-kernel -a -p --debug * Trying bootloader lilo * Trying bootloader grub2 * Trying bootloader grub * Trying bootloader yaboot * Trying bootloader symlinks * In get_removal_list() Preserving currently running kernel (3.7.8-gentoo) These are the kernels which would be removed: - 3.8.0-gentoo: not referenced by bootloader (symlinks) doug-mac ~ #
It looks like it doesn't realize Grub2 is in use, so I tried to force it: doug-mac ~ # eclean-kernel -a -p --bootloader=grub2 Traceback (most recent call last): File "/usr/bin/eclean-kernel-python3.2", line 26, in <module> sys.exit(main(sys.argv)) File "/usr/lib64/python3.2/site-packages/ecleankernel/cli.py", line 142, in main debug = debug) File "/usr/lib64/python3.2/site-packages/ecleankernel/process.py", line 39, in get_removal_list % bootloader) SystemError: Unable to get kernels from bootloader config (None) doug-mac ~ # eclean-kernel -a -p --bootloader=grub2 --debug * Trying bootloader grub2 * In get_removal_list() Traceback (most recent call last): File "/usr/bin/eclean-kernel-python3.2", line 26, in <module> sys.exit(main(sys.argv)) File "/usr/lib64/python3.2/site-packages/ecleankernel/cli.py", line 142, in main debug = debug) File "/usr/lib64/python3.2/site-packages/ecleankernel/process.py", line 39, in get_removal_list % bootloader) SystemError: Unable to get kernels from bootloader config (None) doug-mac ~ #
Well, since you set iocharset, the filesystem became case-insensitive and eclean-kernel behaves properly now. You can either: a) try to debug it further -- unmount, mount it again *without* the iocharset thing so it becomes case-insensitive and show me debug then, b) or just mv /boot/{GRUB2,grub2} while it is mounted case-sensitive and it should work from now on. Also, from your first paste it seems that eclean-kernel was actually reading the config file but didn't match kernels from it for some reason.
doug-mac ~ # mount|grep boot /dev/sda1 on /boot type vfat (rw) doug-mac ~ # eclean-kernel -a -p --debug * Trying bootloader lilo * Trying bootloader grub2 ** /boot/grub2/grub.cfg found * In get_removal_list() ** Config is autogenerated, ignoring Preserving currently running kernel (3.7.8-gentoo) These are the kernels which would be removed: - 3.8.0-gentoo: not referenced by bootloader (grub2) Bootloader grub2 config will be updated. doug-mac ~ # !grep grep vmlinuz /boot/GRUB2/grub.cfg linux /vmlinuz-3.8.0-gentoo root=/dev/sda3 ro linux /vmlinuz-3.8.0-gentoo root=/dev/sda3 ro linux /vmlinuz-3.8.0-gentoo root=/dev/sda3 ro single linux /vmlinuz-3.7.8-gentoo root=/dev/sda3 ro linux /vmlinuz-3.7.8-gentoo root=/dev/sda3 ro single doug-mac ~ #
Sorry for answering that late. (In reply to Douglas J Hunley from comment #8) > ** Config is autogenerated, ignoring This is the key note. When config is autogenerated, grub automatically adds and removes kernels from it. eclean-kernel can't really make any useful info out of that as usually all kernels will be there. You need to use '-nX' to decide how many recent kernels you want to keep. However, I could also add some kind of failsafe to prevent removing the last kernel.
I don't think this is going to happen with most recent version (2.99.*). Please reopen if you still hit it though.