LinuxlivingOS

Uit xliving

Ik wil wat meer snappen hoe een Linux distro wat ineen zit. Ik ben begonnen met Alpine Linux te installeren en een beetje mee te spelen. Zie ook de blog die ik ervoor bij hou: https://blog.ilja.space/~/PokingAtDistros.

Op deze pagina kan ik ook wat nota's bijhouden.

Een shell starten vanuit het boot process[bewerken | brontekst bewerken]

Ik installeerde Alpine. De rootfs was sda3. Ik kopieerde de boel naar sda4 en pastte extlinux.conf aan om sda4 te mounten. Dat werkte! Dan maakte ik op sda3 wat folders dat Linux nodig heeft.

mkdir /mnt/sda3 /mnt/sda4
mount /dev/sda3 /mnt/sda3
mount /dev/sda4 /mnt/sda4
cd /mnt/sda3
mkdir sys dev proc

Ik wil dan ook busybox overzetten, dus check met `which busybox` en zie dat het op /bin/busybox zit. Ik check ook de libs `ldd /bin/busybox`. Zowel de libs als busybox zet ik over naar sda3.

Dan maak ik een executable /sbin/init. Dit is de file die door de kernel wordt opgestart. In de file zet ik volgende inhoud

mkdir sbin
touch sbin/init
chmod +x sbin/init

echo '#!/bin/busybox sh' >> sbin/init
echo "echo 'linuxlivingOS'" >> sbin/init
echo '/bin/busybox sh' >> sbin/init

Zorg dat we terug /dev/sda3 gebruiken, reboot de boel en we krijgen een scherm

linuxlivingOS
sh: can't access tty: job control turned off
/ # _

En we kunnen werken!

De rootfs is wel readonly, maar kunnen hermounten als rw met `busybox mount -o remount,rw /`. Wanneer we `exit` doen, gaan we uit de shell en krijgen we kernel panic. In plaats daarvan, kunnen we ook de pc af zetten met `/bin/busybox poweroff -f`. Een net iets mooiere /sbin/init is dan

#!/bin/busybox sh
/bin/busybox mount -o remount,rw /
echo 'linuxlivingOS'
/bin/busybox sh
/bin/busybox poweroff -f

Door `exit` te doen, gaan we dan uit de shell en het volgende commando zet meteen de PC uit.

BusyBox zelf is een binary die verschillende tools omvat. We kunnen dus de tools gebruiken van busybox. Je kan ook symbolic links gebruiken (bvb `ln -s /bin/busybox /bin/ls`). Als je dan busybox via een symbolic link aanroept, dan zal busybox direct dat commando gebruiken. Als je alle commandos wil zien dat je busybox kan, dan kan je `busybox --list` doen. Om te zien waar verwacht wordt dat je de tools plaatst, kan je `busybox --list-full` doen. Met een beetje scripten, kan je zelfs alle links met een for loop vanzelf laten maken.

for link in $(busybox --list-full)
do
folder=$(busybox echo "$link" | busybox sed -E 's@(.*/)[^/]*$@\1@')
busybox mkdir -p "$folder"
busybox ln -s /bin/busybox "$link"
done

Busybox bevat ook een init commando. Die moet je als PID 1 aanroepen. We kunnen dat dus niet vanuit het script aanroepen, maar moeten we aanroepen in plaats van het script (door een symbolic link te leggen van init naar busybox). Daar is wel extra configuratie voor nodig. In hun FAQ verwijst Busybox daarvoor naar andere resources. Of je kan mss proberen uitvissen hoe een andere distro zoals bv Alpine het doet.