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

bash# ldd bash

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)

Opmerking

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

Opmerking

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