Constructie
Deze sectie is geschreven gebruik makend van ramdisk zeven
(/dev/ram7) om het root-image te bouwen. Er is niets speciaals
aan ramdisk zeven en het is ook mogelijk een van de andere beschikbare ramdisks
te gebruiken die nog niet in gebruik zijn.
Maak een ramdisk aan
bash# dd if=/dev/zero of=/dev/ram7 bs=1k count=4096
bash# mke2fs -m0 /dev/ram7 4096
bash# mount /dev/ram7 /mnt |
Herconfigureer en compileer de BASH-shell
bash# cd /usr/src/bash-3.0
bash# make distclean
bash# export CC="gcc -mcpu=i386"
bash# ./configure --enable-minimal-config --host=i386-pc-linux-gnu
bash# make
bash# strip bash |
Stel vast welke library's nodig zijn
Bekijk de uitvoer van de opdracht ldd. Het zou er ongeveer zo uit
moeten zien als in onderstaand voorbeeld.
bash# ldd bash
libdl.so.2 => /lib/libdl.so.2 (0x4001d000)
libc.so.6 => /lib/libc.so.6 (0x40020000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) |
 | Een aantal systemen heeft wellicht een iets andere library setup. Wellicht
dat je bijvoorbeeld ziet: libc.so.6 =>
/lib/tls/libc.so.6 in plaats van
libc.so.6 => /lib/libc.so.6 zoals weergeven in het
voorbeeld. Als de uitvoer van ldd niet overeenkomt met het voorbeeld,
gebruik dan het pad gegeven door de opdracht ldd bij het voltooien
van de volgende stap.
|
Kopieer BASH met bijbehorende library's naar ramdisk
bash# mkdir /mnt/bin
bash# cp bash /mnt/bin
bash# ln -s bash /mnt/bin/sh
bash# mkdir /mnt/lib
bash# strip --strip-unneeded -o /mnt/lib/libdl.so.2 /lib/libdl.so.2
bash# strip --strip-unneeded -o /mnt/lib/libc.so.6 /lib/libc.so.6
bash# strip --strip-unneeded -o /mnt/lib/ld-linux.so.2 /lib/ld-linux.so.2
bash# chmod +x /mnt/lib/ld-linux.so.2 |
 | Het gebruik van strip -o lijkt misschien wel een vreemde
manier om library bestanden vanaf het ontwikkelsysteem te kopiëren naar ramdisk.
Het stript de symbolen onderwijl het bestand wordt getransporteerd vanaf de
bronlokatie naar de bestemming. Dit heeft als effect dat de symbolen uit de
library op de ramdisk worden verwijderd zonder dat de library's op het
ontwikkelsysteem worden aangepast. Helaas gaan de bestandspermissies bij het
op deze wijze kopiëren van de library's verloren en daarom wordt
gebruik gemaakt van de opdracht chmod +x om de execute vlag
in te stellen voor de dynamische loader van de rootdisk.
|
Maak een console device aan
bash# mkdir /mnt/dev
bash# mknod /mnt/dev/console c 5 1 |
Comprimeer de ramdisk-image
bash# cd /
bash# umount /dev/ram7
bash# dd if=/dev/ram7 of=~/fase2-image bs=1k count=4096
bash# gzip -9 ~/fase2-image |
Kopieer het gecomprimeerde image naar diskette
Doe de diskette met het label "rootdisk" in station fd0.
bash# dd if=~/fase2-image.gz of=/dev/fd0 bs=1k |