13.3. De bootmanager en opstartstadia

13.3.1. De bootmanager

De code in de MBR of bootmanager wordt soms ook wel stage zero van het opstartproces genoemd. In dit onderdeel worden twee eerder genoemde bootmanagers beschreven: boot0 en LILO.

De boot0 bootmanager: De MBR die standaard door de FreeBSD installer of boot0cfg(8) wordt geïnstalleerd is gebaseerd op /boot/boot0. Het programma boot0 is erg eenvoudig, omdat MBR maar 446 bytes lang mag zijn vanwege de slicetabel en de 0x55AA identificatie aan het einde van de MBR. Als de FreeBSD MBR is geïnstalleerd en er staan andere besturingssystemen op een harde schijf, dan is bij het opstarten een scherm te zien dat er ongeveer zo uitziet:

Voorbeeld 13-1. boot0 schermafbeelding

F1 DOS
F2 FreeBSD
F3 Linux
F4 ??
F5 Drive 1

Default: F2

Andere besturingssystemen, Windows® in het bijzonder, staan er om bekend dat zij bestaande MBRs overschrijven met die van zichzelf. Als dit is gebeurd of als het bestaande MBR vervangen moet worden door het FreeBSD MBR:

# fdisk -B -b /boot/boot0 apparaat

Waar apparaat het apparaat is waar de computer van boot, zoals ad0 voor de eerste IDE-schijf ad2 voor de eerste IDE-schijf op de tweede IDE-controller, da0 voor de eerste SCSI-schijf, enzovoort. Als het wenselijk is een aangepaste instelling te gebruiken voor de MBR, dan kan boot0cfg(8) gebruikt worden.

De LILO bootmanager: Start, om deze bootmanager te installeren zodat er ook FreeBSD mee gestart kan worden, eerst Linux® en voeg het volgende toe aan het bestaande instellingenbestand /etc/lilo.conf:

other=/dev/hdXY
table=/dev/hdX
loader=/boot/chain.b
label=FreeBSD

Geef in de bovenstaande regels de primaire partitie en schijf van FreeBSD op met Linux instellingen, waarbij X vervangen wordt door de Linux schijfletter en Y door het primaire partitienummer van Linux. Wijzig bij gebruik van een SCSI-schijf /dev/hd in iets als /dev/sd. De regel loader=/boot/chain.b kan achterwege blijven als de besturingssystemen op dezelfde schijf staan. Voer daarna /sbin/lilo -v uit om de wijzigingen vast te leggen. Controleer het vastleggen door controle van de schermberichten.

13.3.2. Fase één /boot/boot1 en fase twee /boot/boot2

Conceptueel zijn de eerste en tweede fase onderdeel van hetzelfde programma op hetzelfde stukje schijf. Door ruimtebeperkingen zijn ze in twee stukken gesplitst. Ze worden echter altijd samen geïnstalleerd. Ze worden gekopieerd uit het gecombineerde bestand /boot/boot door het installatieprogramma of bsdlabel (zie verderop).

Ze staan buiten bestandssystemen in de eerste track van de opstartslice, beginnend bij de eerste sector. Dit is waar boot0 en iedere andere bootmanager een programma verwacht om door te gaan met het opstartproces. Het aantal gebruikte sectoren kan eenvoudig bepaald worden uit de grootte van /boot/boot.

boot1 is erg simpel omdat dit slechts 512 bytes groot kan zijn en net genoeg weet over het FreeBSD bsdlabel, dat informatie bevat over de slice om boot2 te vinden en te starten.

boot2 is iets verfijnder en begrijpt het FreeBSD bestandssysteem genoeg om er bestanden op te vinden en geeft een simpele interface om de kernel of loader te kiezen die gestart moet worden.

boot2 start meestal de loader, doordat deze veel slimmer is en gebruikersvriendelijke opstartinstellingen heeft. Voorheen was het zijn taak direct de kernel te starten.

Voorbeeld 13-2. boot2 schermafbeelding

>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/boot/loader
boot:

Als ooit eens de geïnstalleerde boot1 en boot2 vervangen moeten worden kan dat met bsdlabel(8):

# bsdlabel -B schijfslice

In het voorbeeld hierboven is schijfslice de schijf en slice waarvan opgestart wordt, zoals ad0s1 voor de eerste slice op de eerste IDE-schijf.

Gevaarlijk toegewijde modusAls alleen een schijfnaam als ad0 gebruikt wordt in bsdlabel(8) wordt er een gevaarlijk toegewijde schijf zonder slices gemaakt. Dit is niet aan te raden en daarom wordt aangeraden voor het uivoeren van bsdlabel(8) de commandoregel nog een keer te controleren voordat er op Return wordt gedrukt.

13.3.3. Fase drie, /boot/loader

De loader is de laatse fase van de drietraps-bootstrap en deze bevindt zich op het bestandssysteem, meestal als /boot/loader.

De loader is bedoeld als een gebruikersvriendelijke manier voor de instelling, door gebruik te maken van een makkelijke commandoverzameling, gesteund door een krachtige vertaler met een wat complexere commandoverzameling.

13.3.3.1. Loader programmaverloop

Tijdens de start zoekt de loader naar een console en schijven en kijkt van welke schijf er opgestart wordt. Variabelen worden hiernaar gezet en er wordt een vertaler gestart zodat gebruikercommando's interactief of via een script kunnen worden doorgegeven.

Dan leest de loader /boot/loader.rc, die dan standaard /boot/defaults/loader.conf leest. Deze plaatst redelijke standaarden in variabelen en leest /boot/loader.conf voor lokale wijzigingen op deze variabelen. loader.rc reageert op deze variabelen door de geselecteerde modules en kernel te laden.

Als laatste wordt standaard door de loader 10 seconden gewacht op toetsinvoer en als dit niet wordt onderbroken laadt loader de kernel. Als het wel wordt onderbroken krijgt de gebruiker een prompt aangeboden die een eenvoudige commandoverzameling begrijpt. Hier kan de gebruiker variabelen wijzigen, alle modules stoppen en/of starten en uiteindelijk opstarten of herstarten.

13.3.3.2. Ingebouwde loadercommando's

Hieronder worden de meest gebruikte loadercommando's besproken. Een volledige omschrijving van alle beschikbare commando's staat in loader(8).

autoboot seconden

Gaat door met het opstarten van de kernel als deze niet wordt onderbroken binnen de opgegeven tijd in seconden. Er wordt een aftelproces getoond dat standaard op 10 seconden staat.

boot [-opties] [kernelnaam]

Start direct de kernel op met de opgegeven opties en naam, indien meegegeven. Het opgeven van een kernelnaam op de opdrachtregel is alleen van toepassing nadat een unload-commando is gegeven, anders wordt de kernel die hiervoor was geladen gebruikt.

boot-conf

Doorloopt hetzelfde automatische instellen van modules gebaseerd op variabelen zoals ook gebeurt bij het opstarten. Dit is alleen zinnig als eerst unload is gebruikt en enkele variabelen zijn gewijzigd, meestal kernel.

help [onderwerp]

Toont documentatie uit /boot/loader.help. Als het opgegeven onderwerp index is, wordt een lijst met beschikbare onderwerpen getoond.

include bestandsnaam

Verwerkt het bestand met de opgegeven naam. Het bestand wordt ingelezen en regel voor regel vertaald. Iedere foutmelding stopt direct het include-commando.

load [-t type] bestandsnaam

Laadt de kernel, kernel-module of bestand van opgegeven type en naam. Ieder argument achter de bestandsnaam wordt doorgegeven aan het bestand.

ls [-l] [padnaam]

Toont de lijst bestanden in het opgegeven pad of van de rootmap als geen pad wordt opgegeven. Als -l wordt meegegeven wordt ook de bestandsgrootte weergegeven.

lsdev [-v]

Toont de lijst met alle apparaten waarvan het mogelijk is om modules te kunnen laden. Als -v wordt meegegeven worden meer details getoond.

lsmod [-v]

Toont geladen modules. Als -v wordt meegegeven worden meer details getoont.

more bestandsnaam

Toont de inhoud van het opgegeven bestand met een pauze na iedere LINES regels.

reboot

Herstart het systeem onmiddelijk.

set variabele, set variabele=waarde

Vult de omgevingsvariabele van de loader.

unload

Verwijdert alle geladen modules.

13.3.3.3. Loader voorbeelden

Hier zijn wat practische voorbeelden van het gebruik van loader:

  • De kernel opstarten in single-user modus:

    boot -s
    
  • De gebruikelijke kernel en modules ontladen om daarna de oude (of een andere) kernel te laden:

    unload
    load kernel.old
    

    kernel.GENERIC kan gebruikt worden als de algemene kernel die meegeleverd is bij de installatieschijf of kernel.old om de vorige geïnstalleerde kernel te gebruiken (als bijvoorbeeld de kernel is vervangen).

    Opmerking: Zo worden de bekende modules geladen met een andere kernel:

    unload
    set kernel="kernel.old"
    boot-conf
    
  • Voor het laden van een kernelinstellingenscript (een script dat dingen doet die anders met de hand ingegeven zouden worden):

    load -t userconfig_script /boot/kernel.conf
    

13.3.3.4. Splash-schermen tijdens het opstarten

Bijgedragen door Joseph J. Barbish.

Het splash-scherm creëert een visueel aantrekkelijker scherm in vergelijking met de originele opstartberichten. Dit scherm zal worden afgebeeld totdat een aanmeldprompt op de console verschijnt of een X-schermbeheerder een aanmeldprompt aanbiedt.

Er zijn twee basisomgevingen beschikbaar in FreeBSD. De eerste is de verouderde standaardomgeving met de opdrachtregel op de virtuële console. Nadat het systeem klaar is met opstarten, wordt er een aanmeldprompt op de console gepresenteerd. De tweede omgeving is de grafische omgeving van het X11 Bureaublad. Nadat X11 en één van de grafische bureaubladomgevingen, zoals GNOME, KDE, of XFce zijn geïnstalleerd, kan het X11-bureaublad worden gestart door startx te gebruiken.

Sommige gebruikers verkiezen het grafische aanmeldscherm van X11 boven de traditionele op tekst gebaseerde aanmeldprompt. Schermbeheerders zoals XDM voor Xorg, gdm voor GNOME, en kdm voor KDE (en anderen van de Portscollectie) bieden een grafisch aanmeldscherm in plaats van de aanmeldprompt op het console. Na succesvol aanmelden bieden ze de gebruiker een grafisch bureaublad.

In de opdrachtregelomgeving zou het splash-scherm alle berichten over aftasten tijdens het opstarten en het starten van taken verbergen voordat het de aanmeldprompt laat zien. In een X11-omgeving zouden gebruikers een visueel overzichtelijkere opstartervaring krijgen dat meer lijkt op wat een gebruiker van een (Microsoft® Windows of niet-Unix-systeem) zou ervaren.

13.3.3.4.1. Splash-schermfuncties

De splash-schermfunctie ondersteunt 256-kleuren-bitmaps ( .bmp), ZSoft PCX ( .pcx) en TheDraw (.bin) bestanden. Verder moeten de splash-afbeeldingsbestanden een resolutie van 320 bij 200 pixels of minder hebben om op de standaard VGA-adapters te werken.

Activeer de VESA-ondersteuning die in FreeBSD zit om grotere afbeeldingen, tot de maximale resolutie van 1024 bij 768 pixels, te gebruiken. Dit kan worden aangezet door de VESA-module tijdens het opstarten van het systeem te laden, of door de kernelconfiguratieoptie VESA toe te voegen en een eigen kernel te bouwen (zie Hoofdstuk 9). De ondersteuning voor VESA geeft gebruikers de mogelijkheid om een splash-schermafbeelding af te beelden dat het hele scherm vult.

Zolang het splash-scherm wordt afgebeeld tijdens het opstartproces, kan het ten alle tijden worden uitgezet door op een toetsenbordtoets te drukken.

Het splash-scherm is standaard ook een schermbeveiliging buiten X11. Na een periode van inactiviteit zal het scherm in het splash-scherm veranderen en herhaald door stappen van het veranderen van de intensiteit van de afbeelding lopen, van helder tot zeer donker. Dit standaardgedrag van het splash-scherm (schermbeveiliging) kan overruled worden door een regel met saver= toe te voegen aan /etc/rc.conf. De optie saver= heeft verschillende ingebouwde schermbeveiligingen om uit te kiezen, de volledige lijst staat in de handleidingpagina splash(4). De standaard schermbeveiliging heet “warp”. Merk op dat de optie saver= die in /etc/rc.conf is gespecificeerd alleen betrekking heeft op virtuele consoles. Het heeft geen effect op X11-schermbeheerders.

Enkele meldingen van de bootloader, inclusief de opties van het opstartmenu en een getimede wachtende aftelprompt worden afgebeeld tijdens het opstarten, zelfs als het splash-scherm aanstaat.

Voorbeelden van splash-schermen kunnen gedownload worden van de galerij op http://artwork.freebsdgr.org/. Door de port sysutils/bsd-splash-changer te installeren, kunnen de splash-afbeeldingen willekeurig elke keer dat er wordt opgestart uit een verzameling worden gekozen.

13.3.3.4.2. De splash-schermfunctie aanzetten

Het splash-schermbestand (.bmp, .pcx of .bin) moet op de rootpartitie staan, bijvoorbeeld in de map /boot.

Bewerk voor de standaardresolutie van het opstartscherm (256 kleuren, 320 bij 200 pixels, of minder) /boot/loader.conf zodat het volgende erin staat:

splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bmp"

Bewerk /boot/loader.conf voor grotere videoresoluties (tot maximaal 1024 bij 768 pixels) zodat dit bestand het volgende bevat:

vesa_load="YES"
splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bmp"

Het bovenstaande neemt aan dat /boot/splash.bmp voor het splash-scherm wordt gebruikt. Wanneer een PCX-bestand gewenst is, dienen de volgende opdrachten gebruikt te worden, en afhankelijk van de resolutie de regel vesa_load="YES".

splash_pcx_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.pcx"

In versie 8.3 is een andere mogelijkheid het gebruik van ASCII-kunst in TheDraw formaat.

splash_txt="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bin"

De bestandsnaam is niet beperkt tot “splash” zoals in het bovenstaande voorbeeld. Het kan van alles zijn zolang het een van de bovenstaande types is, zoals splash_640x400.bmp of bluewave.pcx.

Enkele andere interessante opties voor loader.conf:

beastie_disable="YES"

Dit zal het menu met opstartopties niet weergeven, maar de getimede wachtende aftelprompt zal nog steeds aanwezig zijn. Zelfs zonder dat het menu met opstartopties wordt afgebeeld, zal het invoeren van een optie in de getimede wachtende aftelprompt de actie van de overeenkomstige opstartoptie uitvoeren.

loader_logo="beastie"

Dit zal de standaardwoorden “FreeBSD”, welke rechts van het menu met opstartopties worden afgebeeld vervangen door het gekleurde beastie-logo zoals vroegere uitgaven die hadden.

Raadpleeg voor meer informatie de handleidingpagina's splash(4), loader.conf(5), en vga(4).