Script uitvoeren via initramfs

2023-05-28 Thread Paul van der Vlis

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

2023-05-28 Thread Geert Stappers
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

2023-05-28 Thread 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

-- 
 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

2023-05-31 Thread Diederik de Haas
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

2023-06-01 Thread Paul van der Vlis

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/