Miért nem frissült a grub.cfg kernel frissítéskor?

Jó ideje fennállt az a probléma a gépemen, hogy kernel upgrade után a grub.cfg-t manuálisan kellett frissítenem, mert nem frissítette a grubby, noha fel van telepítve. Ma szántam rá időt, debugoltam. A kernel-core csomagban lévő install scriptek egyike hívja a kernel-install nevű scriptet. Ebbe ideiglenesen írtam debugot, hogy lássam, hol jár, mit csinál. Meghívja a /usr/lib/kernel/install.d/20-grub.install plugin-t, szerencsére ez is shell script, így tudtam tovább debugolni.

Innen hívódik a /sbin/new-kernel-pkg amelynek szerencsére van man page-e, még ha nem is túl részletes, valamint -v kapcsolója, amellyel bőbeszédűvé válik. A mondandóját aztán logba írtam, s kiderült, azért nem módosítja a /boot/grub2/grub.cfg file-t, mert a /etc/grub2.cfg-t akarta módosítani. Tehát hiányzik nekem egy symlink ezek szerint.

Az öcsém gépe tudom, hogy jól működik, szerencsére épp használta, így ssh-ztam rá, s megnéztem, neki volt ott egy symlink. Ezt követően:

rpm -qf /etc/grub2.cfg
grub2-pc-2.02-36.fc28.x86_64

Nézem, nálam nincs ilyen csomag feltelepítve. Gyorsan fel is tettem a gépemre a grub2-pc-modules csomaggal együtt. Nekem miért nem volt? Lehet, hogy kifelejtették függőségként. Tehát ez megoldva.

További problémám, hogy szükségem volna a picike Acer notebook-omon a /usr/lib/kernel/install.d/20-grub.install futását követően a módosított file más helyre másolására, azaz saját script futtatására. Erre elvileg lehetőség van, ha elhelyezek scriptet a /etc/kernel/install.d/ alá. Ugyanakkor a kernel-install nem hívja tovább a plugin scripteket, ha valamelyik 77-es exit kóddal jött vissza.

A Fedora fejlesztői pedig magabiztosan ezt csinálták, különös tekintettel a megjegyzésre:

        /sbin/new-kernel-pkg --package "kernel${flavor}" --install "$KERNEL_VERSION" || exit $?
        /sbin/new-kernel-pkg --package "kernel${flavor}" --mkinitrd --dracut --depmod --update "$KERNEL_VERSION" || exit $?
        /sbin/new-kernel-pkg --package "kernel${flavor}" --rpmposttrans "$KERNEL_VERSION" || exit $?
        # If grubby is used there's no need to run other installation plugins
        exit 77

Egyem a szívüket! Előtte futhatna a saját scriptem - csak minek -, ám akkor még nem lett módosítva a grub.cfg. Tehát nekem ez után kellene. Tudom, hogy beleírhatnék a scriptbe, sőt, úgy tudom, magasabb prioritása van a custom scriptnek, de akkor gányolni kell: a Fedora saját scriptjét kicsit módosítva kell használnom. Ez azért eléggé gány, hiszen nem csak a saját scriptemet kell a megfelelő alkönyvtárba tennem.

Szomorú vagyok. Mindegy, megoldom gányolva.

Hozzászólások

Csináltam workaround-ot. Tekintve, hogy a kernel-install script úgy van megcsinálva, hogy azonos nevű scriptek esetén a /etc/kernel/install.d-ben lévő fog futni, a /usr/lib/kernel/install.d-ben lévő nem, azaz le lehet fedni a telepített scriptet custom scripttel, azt csináltam, hogy a /usr/lib/kernel/install.d/20-grub.install scriptet a /etc/kernel/install.d-be másoltam, majd itt módosítottam rajta úgy, hogy include-olja az eredeti saját scriptemet, ha az létezik, s utána már hagyom 77-es exit code-dal visszatérni. Előnye, hogy a Grub frissítése nem fogja elrontani ezt. Egy dologra kell figyelni az include miatt, hogy nem lehet az include-olt scriptben exit. Return-t sem írtam bele, egyetlen ":" karakterrel zárom a scriptet, elérve, hogy 0 legyen a visszatérési értéke.

Ronda megoldás, de működik. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE