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