On 11/11/19 3:11 am, Arch Linux: Recent news updates: Giancarlo
Razzolini wrote:
All our official kernels: linux, linux-lts, linux-zen and linux-hardened, do not install the actual kernel to /boot anymore.
I would like to report an issue I faced due to this. Not an issue for
everyone but can be an issue in a certain special cases.
I have a custom package (in my custom repo) which modifies grub UI /
menus (cosmetic change only) by putting some files in /etc/grub.d/ and
regenerates /boot/grub/grub.cfg (by calling grub-mkconfig in package's
post install script). This has been working fine from 2 years or so.
Recently I released an update to that custom package but at the same
time, upgrades to linux as well as linux-lts packages were also
available in arch repository.
And after upgrade, grub.cfg lost linux and linux-lts menu entries
completely.
What happened is:
1. mkinitcpio hook first removed vmlinuz-linux, vmlinuz-linux-lts and
initrd files from /boot
2. My package got updated along with new versions of linux and linux-lts
3. My package's post install script ran grub-mkconfig but new vmlinuz
files did not exist yet in /boot. So grub entries were not created
for them.
4. mkinitcpio-install post transaction hook runs and copies kernel to
/boot (but its too late for my post install scripts)
So effectively this created an un-bootable system requiring manual booting.
This is going to happen every time my package plus linux / linux-lts
package get upgraded in the same pacman run. (i.e. this will not happen
always but only in certain conditions)
I know my issue is not common and I will also change my script to post
transaction hook.
But this is to warn anyone who has a custom package with post install
script which looks for / expects kernel files in /boot. (like
grub-mkconfig). Those scripts are going to break with the recent changes
to kernel package and it would be advisable to put them in post
transaction hook and that too after mkinitcpio-install scripts run.
Regards,
Amish