We kunnen gebruik maken van het Filesystem Hierarchy Standard (FHS) document om achter de namen van de utility's die we nodig hebben te komen en waar deze in de directorystructuur thuis horen. In de FHS /sbin directory worden de opdrachten fsck en iets met de naam fsck.* aangegeven voor het controleren van bestandssystemen. Gezien we gebruik maken van een Second Extended (ext2) filesystem wordt fsck.* fsck.ext2 voor ons doel. Het mounten van bestandssystemen wordt bewerkstelligd met de opdrachten mount en umount in de directory /bin. Echter de naam van een script om automatisch lokale bestandssystemen te mounten is niet te vinden. Op de meeste systemen is dit type script te vinden in de directory /etc, maar ondanks dat FHS vereisten voorschrijft voor /etc, doet het thans geen aanbevelingen voor opstartscripts. Verscheidene GNU/Linux distributies maken gebruik van /etc/init.d als lokatie voor opstartscripts, dus zullen we ons script voor het mounten van bestandssystemen daar plaatsen.
In het vorige hoofdstuk gebruikten we de manpages als hulpmiddel om achter de lokatie van de broncode te komen. In dit hoofdstuk zullen we gebruik maken van een hulpmiddel genaamd de Linux Software Map (LSM). LSM is een database met GNU/Linux software dat zaken zoals de pakketnaam, auteur, namen van binary's waaruit het pakket is samengesteld en download sites bijhoudt. Gebruik makend van een LSM zoekmachine kunnen we pakketten lokaliseren door opdrachtnamen als trefwoorden te gebruiken.
Als we de Linux Software Map (LSM) van Ibiblio doorzoeken op http://www.ibiblio.org/pub/Linux/ op het sleutelwoord "fsck" krijgen we een groot aantal overeenkomsten. Gezien we gebruik maken van het Second Extended filesystem, kortweg ext2 genoemd, kunnen we de zoekopdracht met "ext2" als trefwoord verfijnen. Beide trefwoorden opgevend aan de LSM zoekmachine levert een pakket op met de naam e2fsprogs. Het LSM record bekijkend van e2fsprogs komen we er achter dat in het pakket de utility's e2fsck, mke2fs, dumpe2fs, fsck en meer zijn opgenomen. We komen er ook achter dat het LSM record voor e2fsprogs al een tijdje niet is bijgewerkt. Er is vrijwel zeker ergens een nieuwere versie van. Een andere prima Internetbron voor broncode is SourceForge op http://sourceforge.net/. Gebruik makend van het trefwoord "e2fsprogs" in de zoekmachine van SourceForge resulteert in een veel nieuwere versie van e2fsprogs.
Op zoek gaan naar fsck was nogal een avontuur, maar nu kunnen we verder gaan met het zoeken naar mount en umount. Een zoekopdracht in de LSM levert een aantal overeenkomsten op, maar daarvan verwijzen de meesten naar diverse versies van een pakket met de naam util-linux. We hoeven hier alleen maar doorheen te scrollen en de meest recente release uit te kiezen. Het LSM record voor util-linux geeft heel wat meer utility's te zien dan slechts mount en umount. We kunnen deze lijst scannen om te bekijken of er enig andere util-linux opdrachten zijn die in de FHS vereisten voor /bin en /sbin staan.
Hieronder staat een lijst met pakketten die we tot dusverre hebben verzameld en die overeenkomen met de FHS.
e2fsprogs -- fsck, fsck.ext2 (e2fsck), mkfs.ext2 (mke2fs)
util-linux -- dmesg, getty (agetty), kill, login, mount, swapon, umount
Nu we de opdrachten fsck en mount hebben, zullen we met een shellscript moeten komen om het controleren en mounten van de lokale bestandssystemen te automatiseren. Een makkelijke manier om dat te doen zou zijn een beknopt, tweeregelig script te schrijven waarin fsck en vervolgens mount wordt aangeroepen. Maar wat als de bestandssystemen niet zuiver zijn? Het systeem zal beslist niet proberen een beschadigd bestandssysteem te mounten. Daarom moeten we een manier bedenken hoe we de status van bestandssysteem voor ze worden gemount kunnen vaststellen. De manpage voor fsck geeft wat inzicht in hoe dit kan worden bewerkstelligd met behulp van returncodes. In principe is het zo dat als fsck een code nul of één retourneert dan betekent dit dat het bestandssysteem in orde werd bevonden en een returncode met de waarde twee of groter betekent dat een handmatige tussenkomst nodig is. Met een simpele if-then opdracht zou de returncode van fsck kunnen worden geëvalueerd om vast te stellen of het bestandssysteem wel of niet gemount kan worden. Voor hulp bij het schrijven van shellscripts kunnen we ons wenden tot de BASH(1) manpage en de Advanced-BASH-Scripting-Guide. Beide referenties zijn vrij beschikbaar vanaf de website van het Linux Documentatie Project op http://www.tldp.org/.
Het laatste wat we moeten doen is uitzoeken of er behalve de binary's nog andere bestanden nodig zijn. We leerden over het gebruik van ldd om te controleren op library afhankelijkheden in de laatste fase van het project en zullen het ook gebruiken om de utility's in deze fase te controleren. Er zijn tevens andere bestanden nodig die fsck en mount nodig hebben en de manpages fsck(8) en mount(8) geven enig inzicht in welke bestanden dit zijn. Zo is er /etc/fstab waarin apparaten worden vermeld met bijbehorende mountpoints, /etc/mtab waarin wordt bijgehouden wat er is gemount, en een aantal /dev bestanden die diverse disks vertegenwoordigen. We zullen deze allen op moeten nemen om alles correct werkend te krijgen.
Het bestand /etc/fstab is gewoon een simpel tekstbestand dat met elke editor kan worden aangemaakt. We zullen een regel in moeten voegen voor het root bestandssysteem en voor het proc bestandssysteem. Informatie over de opmaak van dit bestand is te vinden in de manpage van fstab(5) of door het bestand /etc/fstab te bekijken van een van de populaire GNU/Linux distributies.
Het bestand /etc/mtab presenteert een unieke uitdaging, omdat er geen statische informatie in staat zoals in fstab. Het bestand mtab houdt bij welke bestandssystemen zijn gemount en daarom wijzigt zo nu en dan de inhoud. We zijn in het bijzonder geïnteresseerd in de status van mtab wanneer het systeem voor het eerst opstart, voordat enige bestandssystemen zijn gemount. Op dit punt zou /etc/mtab leeg moeten zijn, dus we moeten een opstartscript gaan configureren voor het aanmaken van een leeg /etc/mtab bestand voordat enige bestandssystemen zijn gemount. Maar het is niet mogelijk om bestanden in de directory /etc aan te maken, omdat / tijdens de systeemstart alleen kan worden gelezen. Dit creëert een paradox. We kunnen geen lege mtab aanmaken, omdat het / bestandssysteem niet schrijfbaar is gemount en we kunnen geen bestandssystemen mounten totdat we een lege mtab hebben aangemaakt. Om dit probleem te ontwijken, doen we het volgende:
Mount / opnieuw voor lezen en schrijven, maar gebruik de optie -n zodat mount niet zal trachten een record toe te voegen aan /etc/mtab dat op dit punt alleen kan worden gelezen.
Maak nu het bestandssysteem schrijfbaar is, een leeg /etc/mtab bestand aan.
Mount / nogmaals opnieuw voor lezen en schrijven, dit keer gebruik makend van de optie -f zodat een record wordt ingevoegd in /etc/mtab, maar / niet daadwerkelijk een tweede keer wordt gemount.
Het enige dat overblijft om te doen is het aanmaken van apparaatbestanden. We zullen /dev/ram0 nodig hebben, omdat daar het root bestandssysteem is te vinden. We hebben tevens /dev/fd0 nodig om andere diskettes te kunnen mounten en /dev/null voor gebruik door een aantal van de systeemopdrachten.