[b]Voorwoord[/b]
GRUB (GRand Unified Bootloader) is een Multiboot bootloader geschikt voor FreeBSD. Een multiboot bootloader maakt het mogelijk om bij het starten van de computer te kiezen tussen de verschillende besturingssysteem op uw computer. Hierbij kan dan vervolgens een keuze worden gemaakt om b.v. Windows‚ Linux of FreeBSD te starten. In het FreeBSD handboek wordt niet gesproken over een ‘Multiboot bootloader ‘ maar over een ‘Boot Manager’. Deze wordt bijna vanzelf mee geïnstalleerd wanneer u FreeBSD voor het eerst op uw systeem zet. Eigenlijk voldoet deze Boot Manager in bijna alle gevallen‚ mocht u toch tekortkomening tegenkomen of wilt u uw bootloader verfraaien dan is GRUB een goed alternatief. Een andere veelbesproken bootloader is LILO‚ deze Linux bootloader is niet compatible met het filesysteem van FreeBSD en is daarmee niet geschikt.
Toch een kleine waarschuwing vooraf.
Ook GRUB heeft nog geen volledige ondersteuning voor UFS2 partitie (FreeBSD 5.x) maar is bij gebrek aan een beter alternatief ronduit de beste. De beperking die dit overigens met zich mee neemt zijn te omzeilen (‘work around’). Uitleg hierover kunt u vinden in stap 2 en 3 van dit document
[b]Benodigdheden[/b]
1. FreeBSD 4.x of hoger
2. Een ander besturingssysteem zou handig zijn
3. Basis kennis van Unix en een root shell
4. Floppy drive en een diskette
[b]Welke GRUB versie moet ik nemen?[/b]
Voordat wordt gestart met de installatie en configuratie van GRUB moet u eest beslissen of u dit met of zonder ondersteuning van ‘Splash Image’ wilt. Met ‘Splash Image’ is het mogelijk om een afbeelding van 14 kleuren met een resolutie van 640×480 op de achtergrond te plaatsten. Nadeel is dat deze optie geen onderdeel uitmaakt van de standaard distributie van GRUB. Mede hierdoor wordt deze optie niet ondersteund door de GRUB versie uit de port collectie. Om toch ‘Splash Image’ mogelijk te maken moet een aangepaste versie van GRUB worden geïnstalleerd.
In deze documentatie wordt ervan uitgegaan dat u kiest voor de aangepaste GRUB versie inclusief de ondersteuning van ‘Splash Image’. Mocht u dit niet willen dan kan GRUB vanuit de port collectie van FreeBSD worden geïnstalleerd en kunt u door naar stap 2 van dit document.
[b]Stap 1 Installatie GRUB[/b]
Bij deze installatie van GRUB wordt een installatie directory aangemaakt. Deze is na de installatie niet direct meer nodig maar kan wel van pas komen wanneer GRUB weer van het systeem moet worden verwijderd. Door vanuit deze directory het commando ‘gmake uninstall’ uit te voeren wordt de installatie weer ongedaan gemaakt.
Voer de volgende handelingen uit om GRUB te installeren:
[shell]#cd ~
#mkdir grub_install
#cd grub_install
#fetch http://machiel.generaal.net/files/grub/grub-0.93_splashimages.tar.gz
#tar -xvzf grub-0.93_splashimages.tar.gz
#cd grub-0.93
#./configure
#gmake
#gmake install[/shell]
[b]Stap 2 Informatie[/b]
De configuratie van GRUB is aanmerkelijk lastiger dan de tot nu toe genomen 1e stap. Als eerst wordt in het kort uiteen gezet hoe en waarom GRUB werkt zoals het werk en wat je moet weten bij FreeBSD 5.0 of hoger.
Achtergrond informatie:
GRUB moet straks in de ‘Master Boot Record’ (MBR) van de hardeschijf worden gezet. Deze MBR bevindt zich in de eerste fysieke sector (ter grote van 512 bytes) van de hardeschijf en wordt gelezen door de BIOS. Aangezien GRUB niet volledig in deze sector past is GRUB opgesplitst in 2 delen. Het ‘1e’ deel bevind zich in het MBR en het ‘2e’ deel ergens op een nader te bepalen partitie van één van de besturingssystemen. Nadat de computer is gestart en de BIOS het systeem wil starten levert dit een fraai GRUB menu op waarbij een besturingssysteem kan worden gekozen. De configuratie van dit GRUB menu bevindt zich in het bestand ‘menu.lst’ op één van de partities. Bij wijziging van het menu hoeft hierdoor het MBR niet te worden aangepast. Ook de splash images die in stap 6 worden opgenomen zullen niet in het MBR worden opgenomen maar worden op een partitie geplaatst.
Probleemstelling:
Hierbij zijn we direct aangekomen bij de beperkte ondersteuning van ‘UFS2’ partities door GRUB. UFS2 is het filesysteem van FreeBSD 5.x en wordt standaard gebruikt vanaf versie 5.1. Met een kleine aanpassing in het bestand menu.lst is het geen probleem om FreeBSD 5.x (geïnstalleerd op een UFS2 partitie) vanuit GRUB te starten. Maar wat GRUB momenteel nog niet kan is vanuit de MBR het 2e deel van GRUB laden als deze zich op een UFS2 partitie bevindt.
Om dit probleem te omzeilen worden hierbij de volgende 2 oplossingen aangedragen.
Oplossing 1:
Aangezien het voor de hand ligt dat er naast FreeBSD nog een ander besturingssysteem aanwezig is kan hier het 2e deel van GRUB worden geplaatst. Dit kan verder zonder problemen omdat GRUB platform onafhankelijk is en daarmee niet gebonden is aan FreeBSD.
Oplossing 2:
Maak speciaal voor GRUB alsnog een UFS1 partitie aan ter grote van ongeveer 10 Mb. Dit kan relatief eenvoudig gerealiseerd worden door b.v. de bestaande SWAP partitie met 10 Mb te verkleinen. Deze oplossing wordt verder uitgewerkt is ‘Stap 3’.
Wanneer er geen sprake is van een UFS2 partitie (b.v. bij FreeBSD 4.x of lager) is het zojuist genoemde probleem niet van toepassing.
[b]Stap 3 GRUB partitie maken (optioneel).[/b]
Om niet in herhaling te vallen wordt er vanuit gegaan dat de rede van deze stap bekend is. (Zie stap 2)
In deze stap zal de bestaande SWAP partitie met 10 Mb worden verkleind. De beschikbare ruimte die hierbij vrij komt is ruim voldoende om vervolgens een UFS1 partitie voor GRUB aan te maken.
In tegenstelling tot het vergroten van een partitie kan FreeBSD een bestaande partitie niet verkleinen. Meer informatie hierover is te lezen in het handboek van FreeBSD.
Om toch de SWAP partitie te verkleinen wordt deze eerst verwijderd. Van de ongepartitioneerde ruimte die hierbij vrij komt wordt een UFS1 partitie gemaakt van 10MB met als mount point ‘/grub’. Vervolgens kan de resterende ruimte worden gebruikt om opnieuw de SWAP partitie aan te maken. (Deze wordt automatisch op dezelfde locatie teruggeplaatst.)
Voer het programma sysinstall uit:
[shell]#sysinstall[/shell]
Doorloop de volgende menu structuur om de ‘Label editor’ te starten.
[img]http://www.bsdfreaks.nl/images/grub_table_1.png[/img]
De volgende Label editor stappen moeten worden doorlopen.
[img]http://www.bsdfreaks.nl/images/grub_table_2.png[/img]
Vervolgens kan het programma sysinstall weer worden verlaten. Als het goed is is de nieuwe partitie van 10Mb direct bereikbaar onder de directory ‘/grub. Om dit te controleren kan het commando ‘df -h’ worden uitgevoerd. Om ervoor te zorgen dat in het vervolg deze partitie direct toegankelijk is moet hiervoor een extra regel in het bestand ‘/etc/fstab’ worden opgenomen. Het device zoals genoteerd na stap I kan hierbij ingevuld worden. Als Mountpoint moet de directory ‘/grub’ ingevuld worden. De overige instellingen zoals b.v. “FStype” of “Options” kunnen worden overgenomen van de ‘/usr’ Mountpoint. Controleer alvorens het systeem opnieuw te starten of de zojuist opgenomen mountpoint naar behoren werkt.
Voer hiervoor de volgende 2 commando’s uit.
[shell]#umount /grub
#mount /grub
[/shell]
Wanneer het mount commando succesvol is verlopen is de GRUB partitie goed opgenomen in het /etc/fstab bestand.
[b]Stap 4 GRUB configureren.[/b]
Het 2e deel van GRUB moet nu op één van de beschikbare partities geplaatst worden. Dit moet gezien vanuit de root van de desbetreffende partitie gebeuren in de directory ‘/grub’ of de directory ‘/boot/grub’. Deze directory wordt de ‘GRUB directory’ genoemd. Het aanmaken van de ‘GRUB directory’ kan‚ afhankelijk van de situatie op de volgende locatie gemaakt worden.
[img]http://www.bsdfreaks.nl/images/grub_table_3.png[/img]
Kopieer vervolgens alle bestanden uit de directory ‘/usr/local/share/grub/i386-unknown/’ naar de zojuist aangemaakte GRUB directory. Maak in deze directory het bestand ‘menu.lst’ aan. In dit bestand moet worden aangeven welk besturingssysteem zich waar op de hardeschijf bevindt. Aangezien dit voor iedere computer anders kan zijn is het op dit punt niet mogelijk om aan te geven hoe deze configuratie er uiteindelijk uit komt te zien. Hiervoor zal de documentatie van GRUB moeten worden geraadpleegd (zie Bronnen). Om toch een eerste algemene opzet te geven kan de volgende invulling aan dit bestand worden gegeven.
menu.lst:
[filel]timeout 5 # timeout na 5 seconden
# FreeBSD
title FreeBSD
root (hd0‚1‚a)
kernel /boot/loader
[/file]
Van belang is te weten op welke hardeschijf en op welke locatie binnen de hardeschijf (o.a. partitie) zicht het besturingssysteem FreeBSD bevind. Dit wordt in de configuratie file van GRUB aangeven met het ‘GRUB root commando’. Om de locatie van FreeBSD te kunnen bepalen moeten de volgende handelingen worden verricht. De overige besturingssystemen zullen naar eigen inzicht moeten worden ingevuld.
Kijk in het bestand /etc/fstab welke device het Mountpoint ‘/’ heeft. Om af te kunnen lezen welke waardes waar bij horen is het volgende voorbeeld gegeven. Deze informatie is overigens ook beschreven in hoofdstuk 2.5.2 “Disk Organization” van het FreeBSD handboek.
[img]http://www.bsdfreaks.nl/images/grub_table_4.png[/img]
Nog een voorbeeld:
Het root device ‘/dev/ad2s3a’ wordt onder GRUB genoteerd als root (hd2‚2‚a)
Bepaal aan de hand van het zojuist gegeven voorbeeld de waardes van het GRUB root commando voor FreeBSD en pas deze toe in het bestand menu.lst. Wanneer het gaat om FreeBSD op een UFS2 partitie dan moet de regel ‘kernel /boot/loader’ worden vervangen voor de volgende 2 regels.
menu.lst:
[file]chainloader +1
boot
[/file]
[b]Stap 5 GRUB in MBR plaatsen[/b]
De laatste stap die genomen moet worden is het daadwerkelijk plaatsen van GRUB in de MBR. Hiervoor moet eerst een GRUB diskette worden gecreëerd. Plaats een lege diskette in de floppy drive en voer vanuit de GRUB directory de volgende 2 commando’s uit.
[shell]#dd if=stage1 of=/dev/fd0 bs=512 count=1
#dd if=stage2 of=/dev/fd0 bs=512 seek=1
[/shell]
Als de GRUB directory op de loctie ‘/boot/grub’ staat kunnen de waardes van het GRUB root commando uit de vorige stap worden genoteerd. Wanneer er voor de extra GRUB partitie is gekozen moet wederom aan de hand van het device de waardes (Zie /etc/fstab) van het GRUB root commando worden berekend. Start hierna de computer opnieuw op en boot daarbij vanaf de GRUB diskette. Nadat de computer gestart is en de GRUB Shell geladen moeten de volgende commando’s worden uitgevoerd.
Hierbij moeten de waardes van het GRUB root commando worden voorzien van de zojuist genoteerde waardes.
[shell]#root (hd0‚2‚g)
#setup (hd0)[/shell]
Bekijk vervolgens of de output van het GRUB setup commando in overeenstemming zijn met de hieronder geplaatste tekst.
Let er op of hierbij ieder stap eindigt met de tekst ‘yes’ of ‘succeeded’
[shell]
grub> root (hd1‚0‚a)
Filesystem type is ffs‚ partition type 0xa5
grub> setup (hd0)
Checking if “/boot/grub/stage1” exists… yes
Checking if “/boot/grub/stage2” exists… yes
Checking if “/boot/grub/ffs_stage1_5” exists… yes
Running “embed /boot/grub/ffs_stage1_5 (hd0)”… 14 sectors are embedded.
succeeded
Running “install /boot/grub/stage1 d (hd0) (hd0)1+14 p (hd1‚0‚a)/boot/grub/stage2″… succeeded
Done.
[/shell]
Verwijder na een succesvolle installatie de diskette uit de floppy drive en herstart de computer. Deze zal als de voorgaande stap succesvol is verlopen in het GRUB menu uitkomen waar vanuit FreeBSD kan worden gestart. Vanuit het GRUB menu kan er ook gekozen worden voor de GRUB shell. Deze kan worden gestart door op de ‘c’ van command-line in te drukken. Van hieruit kunnen alle besturingssystemen worden gestart mits de locatie bened is. Dit biedt hiermee een uitstekende mogelijkheid om uit te proberen of dit lukt. Wanneer voor een ander besturingssysteem de juiste waarde voor het GRUB root commando bekend is kan deze een volgende keer opgenomen worden in menu.lst.
[b]Tip[/b]: In de GRUB Shell is de optie ‘command completion’ onder de TAB toets en een ‘history’ d.m.v. de pijltjes toetsen aanwezig.
[b]Stap 6 GRUB splash images (optioneel).[/b]
In deze stap wordt uitgelegd hoe een splash image ofwel een achtergrond in het GRUB menu geplaatst kan worden. Download hiervoor één of meerdere splash images en plaats deze in de GRUB directory. Hieronder zijn een 5 tal splash images afzonderlijk‚ maar ook als geheel te downloaden.
[url=http://www.bsdfreaks.nl/files/grub/xray.xpm.gz][img]http://www.bsdfreaks.nl/images/grub_xray_small.png[/img][/url]
[url=http://www.bsdfreaks.nl/files/grub/calvin.xpm.gz][img]http://www.bsdfreaks.nl/images/grub_calvin_small.png[/img][/url]
[url=http://www.bsdfreaks.nl/files/grub/homer_brain.xpm.gz][img]http://www.bsdfreaks.nl/images/grub_homer_brains_small.png[/img][/url]
[url=http://www.bsdfreaks.nl/files/grub/homer_donuts.xpm.gz][img]http://www.bsdfreaks.nl/images/grub_homer_donuts_small.png[/img][/url]
[url=http://www.bsdfreaks.nl/files/grub/bike_gua.xpm.gz][img]http://www.bsdfreaks.nl/images/grub_bike_small.png[/img][/url]
[url=http://www.bsdfreaks.nl/files/grub/splashimages.tar.gz]Download alle 5 splash images.[/url]
Vervolgens moet door middel van het GRUB splashimage commando de locatie van de splash image worden aangegeven. Dit commando moet vervolgens worden opgenomen in het bestand ‘menu.lst’.
De syntax van dit commando is als volgt:
[shell]
splashimage
b.v.
splashimage /boot/grub/calvin.xpm.gz
[/shell]
Het GRUB splashimage commando kan ook vanuit de GRUB Shell worden gebruikt. Om syntax fouten of anderen fouten te voorkomen is het aan te raden om eerst dit commando vanuit de GRUB Shell te testen. Een bijkomend voordeel is dat hierdoor verschillende achtergronden achtereenvolgend kunnen worden getest zonder hiervoor het systeem opnieuw te hoeven starten. Er vanuit gaand dat de splash images in de GRUB Directory zijn geplaatst kan de computer opnieuw worden gestart. Vervolgens kan na verschijnen van het GRUB menu de GRUB Shell worden gestart door op de ‘c’ van command-line in te drukken.
Probeer van hieruit het GRUB splashimage commando en neem deze vervolgens alsnog op in menu.lst.
[b]Wat te doen bij configuratie/installatie problemen?[/b]
De configuratie van GRUB (denk hierbij vooral aan de invulling van menu.lst) zal vaak nooit in 1 keer slagen. Dit is verder allemaal nog niet zo erg zolang het mogelijk is terug te vallen naar het besturingsysteem. Maar nadat GRUB in de MBR zit is deze afhankelijk van o.a. het bestand menu.lst. Wanneer deze niet goed is geconfigureerd kan het gebeuren dat er niet het gewenste besturingssysteem kan worden gestart. Van dit besturingssysteem kan normaal gesproken weer de configuratie fout in menu.lst worden hersteld.
Voor dit probleem kan er vanuit GRUB te aller tijden naar de ‘GRUB Shell’ worden teruggegaan. Van hieruit kan vervolgens ieder gewenst besturingssysteem alsnog worden gestart.
Mocht het om wat voor reden dan ook zo zijn dat GRUB het in zijn geheel niet meer doet‚ dan kan GRUB altijd nog gestart worden vanaf de GRUB diskette. Mede hierdoor moet er eerst een GRUB Diskette worden gemaakt voordat GRUB in de master boor record wordt geplaatst.
Mocht ook deze het niet meer doen dan zal vanaf een ander medium naar een oplossing moeten worden gezocht. Dit kan een ander besturingssysteem zijn op een andere harde schijf of een besturingssysteem vanaf Cd-rom. Hiervoor kan de 2e FreeBSD Cd-rom worden geladen om van hieruit een shell te starten.
Hiervoor moet de volgende menu structuur worden doorlopen:
[img]http://www.bsdfreaks.nl/images/grub_table_5.png[/img]
Een ander optie is om gebruik te maken van de Linux distributie Knopix die volledig vanaf Cd-rom kan worden gestart. Verdere ondersteuning voor dit doom scenario’s is niet mogelijk i.v.m. de zeer uiteenlopende configuraties van computers. Wanneer er zich toch nog andere problemen voordoen moet het probleem eigenlijk altijd op te lossen zijn door vakkundig en gestructureerd te werk te gaan. Ook kan het nog eens aandachtig lezen van Stap 2 een beter inzicht geven hoe GRUB werkt.
De meest recente versie van dit document is te vinden op mijn [url=http://machiel.generaal.net]website[/url] . Verder kunt u hier een F.A.Q over dit betreffende onderwerp vinden.