Constructie

In plaats van het direct kopiëren van de bestanden naar ramdisk, kunnen we het ons makkelijker maken door een fasengebied op te zetten. Het fasengebied geeft ons de ruimte om te werken zonder ons druk te hoeven maken over de ruimtebeperkingen van de ramdisk. Het geeft ons tevens een manier om ons werk op te slaan en het maakt het makkelijker om de rootdisk in latere fasen van het project uit te breiden.

De fasen procedure werkt ongeveer als volgt:

  1. Maak een directorystructuur aan zoals gedefinieerd in de FHS.

  2. Kopieer de bestanden vanaf de rootdisk uit fase 2.

  3. Bouw het nieuwe pakket vanuit de broncode.

  4. Installeer de bestanden in de correcte FHS directory's.

  5. Strip de binaire bestanden om ruimte te besparen.

  6. Controleer de library afhankelijkheden.

  7. Kopieer de volledige directorystructuur naar de ramdisk.

  8. Comprimeer de ramdisk en schrijf het weg naar diskette.

Aanmaken van het fasengebied

bash# mkdir ~/fasen
bash# cd ~/fasen
bash# mkdir bin boot dev etc home lib mnt opt proc root sbin tmp usr var
bash# mkdir var/log var/run

Kopieer de inhoud van de rootdisk uit fase 2

bash# dd if=~/fase2-image.gz | gunzip -c > /dev/ram7
bash# mount /dev/ram7 /mnt
bash# cp -dpR /mnt/* ~/fasen
bash# umount /dev/ram7
bash# rmdir ~/fasen/lost+found

Installeer binaire bestanden uit GNU coreutils

Download een recente versie van coreutils vanaf ftp://ftp.gnu.org/gnu/coreutils/

bash# cd /usr/src/coreutils-5.2.1
bash# export CC="gcc -mcpu=i386"
bash# ./configure --host=i386-pc-linux-gnu
bash# make
bash# cd src
bash# cp cat chgrp chmod chown cp date dd df ~/fasen/bin
bash# cp hostname ln ls mkdir mkfifo mknod ~/fasen/bin
bash# cp mv rm rmdir stty su sync uname ~/fasen/bin

Kopieer extra library's

Conroleer welke library's nodig zijn met behulp van ldd voor een aantal van de nieuwe binary's.

bash# ldd ~/fasen/bin/cat
bash# ldd ~/fasen/bin/ls
bash# ldd ~/fasen/bin/su
bash# ls ~/fasen/lib

Let op de verschillen in de vereiste library's, zoals getoond in de uitvoer van de opdracht ldd, en de library's die reeds aanwezig zijn in het fasengebied, zoals getoond in de uitvoer van de opdracht ls, en kopieer vervolgens eventuele ontbrekende library's naar het fasengebied.

bash# cp /lib/librt.so.1 ~/fasen/lib
bash# cp /lib/libpthread.so.0 ~/fasen/lib
bash# cp /lib/libcrypt.so.1 ~/fasen/lib

Strip binaire bestanden en library's

bash# strip ~/fasen/bin/*
bash# strip --strip-unneeded ~/fasen/lib/*

Maak een gecomprimeerd rootdisk-image aan

bash# cd /
bash# dd if=/dev/zero of=/dev/ram7 bs=1k count=4096
bash# mke2fs -m0 /dev/ram7 4096
bash# mount /dev/ram7 /mnt
bash# cp -dpR ~/fasen/* /mnt
bash# umount /dev/ram7
bash# dd if=/dev/ram7 of=~/fase3-image bs=1k count=4096
bash# gzip -9 ~/fase3-image

Opmerking

Het proces voor het aanmaken van de gecomprimeerde rootdisk-image zal iets wijzigen in de loop van de resterende hoofdstukken. Het schrijven van een klein script om deze functie af te handelen bespaart ons veel tijd.

Schrijf het rootdisk-image weg naar diskette

Doe de diskette met het label "rootdisk" in diskettestation fd0.

bash# dd if=~/fase3-image.gz of=/dev/fd0 bs=1k