Script uitvoeren via initramfs
Hallo, Een klant vroeg me iets te doen via initramfs. Ik vertelde hem dat ik daar weinig verstand van had. En dat ik dat ook wel kon via een chroot. Toch wou hij graag dat ik eens ging kijken naar initramfs. En dat blijkt leuk ;-) Al vrij snel kon ik wat ik wou, maar dat doe ik door de initrd uit te pakken, het script "init" aan te passen, en de boel weer in te pakken. En dan rebooten. Dat hacken in "init" lijkt me niet echt de bedoeling. Ik heb geprobeerd mijn scriptje in /etc/initramfs-tools/conf.d/ te stoppen, maar het wordt dan uitgevoerd tijdens het maken van de initrd en dat is niet wat ik wil. Wat ik wil is dat mijn scriptje uitgevoerd wordt na een reboot voordat het filesystem gemount wordt. Wie weet een goede manier? Groet, Paul -- Paul van der Vlis Linux systeembeheer Groningen https://vandervlis.nl/
Re: Script uitvoeren via initramfs
On Sun, May 28, 2023 at 10:39:45AM +0200, Paul van der Vlis wrote: > Hallo, > > Een klant vroeg me iets te doen via initramfs. Ik vertelde hem dat ik daar > weinig verstand van had. En dat ik dat ook wel kon via een chroot. > > Toch wou hij graag dat ik eens ging kijken naar initramfs. > En dat blijkt leuk ;-) > > Al vrij snel kon ik wat ik wou, maar dat doe ik door de initrd uit te > pakken, het script "init" aan te passen, en de boel weer in te pakken. | $ file /sbin/update-initramfs | /sbin/update-initramfs: POSIX shell script, ASCII text executable | $ En `update-initramfs` heeft een manual page. > En dan rebooten. Hopelijk van een VM, of iets anders wat heel erg snel reboot. } Hacken in "initrd" lijkt me niet echt de bedoeling. Er is geen noodzaak voor die (zelf)restrictie. > Ik heb geprobeerd mijn scriptje in /etc/initramfs-tools/conf.d/ te stoppen, > maar het wordt dan uitgevoerd tijdens het maken van de initrd en dat is niet > wat ik wil. Wat ik wil is dat mijn scriptje uitgevoerd wordt na een reboot > voordat het filesystem gemount wordt. > > Wie weet een goede manier? Bootloader zorgt dat `kernel` en `initrd` in geheugen staan en dat kernel gestart wordt. Kernel weet `initrd` te vinden en zoekt daarin `init` om die te starten. Het is dan aan `init` om het script in kwestie te gaan uitvoeren. Nee, het zit niet bij mijn parate kennis waar dat gebeurd. Als het meezit komt er vervolginformatie voorbij. Groeten Geert Stappers -- Silence is hard to parse
Re: Script uitvoeren via initramfs
On Sun, May 28, 2023 at 10:39:45AM +0200, Paul van der Vlis wrote: > Hallo, > > Een klant vroeg me iets te doen via initramfs. Ik vertelde hem dat ik daar > weinig verstand van had. En dat ik dat ook wel kon via een chroot. > > Toch wou hij graag dat ik eens ging kijken naar initramfs. > En dat blijkt leuk ;-) > > Al vrij snel kon ik wat ik wou, maar dat doe ik door de initrd uit te > pakken, het script "init" aan te passen, en de boel weer in te pakken. En > dan rebooten. Dat hacken in "init" lijkt me niet echt de bedoeling. > > Ik heb geprobeerd mijn scriptje in /etc/initramfs-tools/conf.d/ te stoppen, > maar het wordt dan uitgevoerd tijdens het maken van de initrd en dat is niet > wat ik wil. Wat ik wil is dat mijn scriptje uitgevoerd wordt na een reboot > voordat het filesystem gemount wordt. > > Wie weet een goede manier? Je moet een script aanmaken in /usr/share/initramfs-tools/hooks dat de nodige bestanden kopiëert naar de "staging area" die mkinitramfs aanmaakt. Een voorbeeld (met uitgebreide commentaar als documentatie) vind je op https://salsa.debian.org/kernel-team/initramfs-tools/-/blob/master/docs/example_hook -- w@uter.{be,co.za} wouter@{grep.be,fosdem.org,debian.org} I will have a Tin-Actinium-Potassium mixture, thanks.
Re: Script uitvoeren via initramfs
On Sun May 28, 2023 at 7:53 PM CEST, Wouter Verhelst wrote: > On Sun, May 28, 2023 at 10:39:45AM +0200, Paul van der Vlis wrote: > > Een klant vroeg me iets te doen via initramfs. > > ... > > Ik heb geprobeerd mijn scriptje in /etc/initramfs-tools/conf.d/ te > > stoppen, maar het wordt dan uitgevoerd tijdens het maken van de initrd > > en dat is niet wat ik wil. Wat ik wil is dat mijn scriptje uitgevoerd > > wordt na een reboot voordat het filesystem gemount wordt. > > Je moet een script aanmaken in /usr/share/initramfs-tools/hooks dat de > nodige bestanden kopiëert naar de "staging area" die mkinitramfs > aanmaakt. > > Een voorbeeld (met uitgebreide commentaar als documentatie) vind je op > https://salsa.debian.org/kernel-team/initramfs-tools/-/blob/master/docs/ example_hook Is het niet beter om die scripts in /etc/initramfs-tools/hooks te stoppen ipv in /usr/share ? signature.asc Description: This is a digitally signed message part.
Re: Script uitvoeren via initramfs
Hallo Wouter en anderen, Op 28-05-2023 om 19:53 schreef Wouter Verhelst: On Sun, May 28, 2023 at 10:39:45AM +0200, Paul van der Vlis wrote: Hallo, Een klant vroeg me iets te doen via initramfs. Ik vertelde hem dat ik daar weinig verstand van had. En dat ik dat ook wel kon via een chroot. Toch wou hij graag dat ik eens ging kijken naar initramfs. En dat blijkt leuk ;-) Al vrij snel kon ik wat ik wou, maar dat doe ik door de initrd uit te pakken, het script "init" aan te passen, en de boel weer in te pakken. En dan rebooten. Dat hacken in "init" lijkt me niet echt de bedoeling. Ik heb geprobeerd mijn scriptje in /etc/initramfs-tools/conf.d/ te stoppen, maar het wordt dan uitgevoerd tijdens het maken van de initrd en dat is niet wat ik wil. Wat ik wil is dat mijn scriptje uitgevoerd wordt na een reboot voordat het filesystem gemount wordt. Wie weet een goede manier? Je moet een script aanmaken in /usr/share/initramfs-tools/hooks dat de nodige bestanden kopiëert naar de "staging area" die mkinitramfs aanmaakt. Een voorbeeld (met uitgebreide commentaar als documentatie) vind je op https://salsa.debian.org/kernel-team/initramfs-tools/-/blob/master/docs/example_hook Ik wou in elk geval hartelijk bedanken voor de tips. Ik heb het gelezen en er ook wel wat aan gehad. Maar uiteindelijk heb ik het (deze keer) toch gedaan op een iets minder nette manier. De initrd is namelijk maar voor eenmalig gebruik (een migratie). Normaal draaien de systemen zonder initrd. Het gaat om een hele vloot raspberry Pi's die op afstand moeten worden geupgraded van een 32-bit systeem naar een 64-bit systeem. Ik maak een mapje /new in het systeem, en vervang /boot (met daarin een initrd). Dan, tijdens de initrd, vervang ik het root filesystem, zoiets: mount -t ext4 /dev/mmcblk0p2 /mnt mv /mnt/* /mnt/old/ mv /mnt/old/new/* /mnt/ umount /mnt Daarna boot ik door naar het nieuwe systeem en ruim nog wat dingen op, zoals die initrd zodat hij niet nogmaals actief wordt. Werkt heel mooi ;-) Groet, Paul -- Paul van der Vlis Linux systeembeheer Groningen https://vandervlis.nl/