'GRUB' voor FreeBSD

Dit document beschrijft hoe de multiboot bootloader GRUB geïnstalleerd en geconfigureerd kan worden onder FreeBSD.

GRand Unified Bootloader logo
Geschreven door M.Mastenbroek Januari 2004 / Document versie 1.1 (Updated 20 April 2004)
Met dank aan Sander Smid die verbeteringen en uitbreidingen voor deze GRUB documentatie heeft aangeleverd.

Inhoud:

Voorwoord

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 daarom niet geschikt.

Een kleine waarschuwing vooraf.
Ook GRUB heeft nog geen volledige ondersteuning voor UFS2 partitie. (FreeBSD 5.x) De beperkingen die dit met zich mee brengt zijn te omzeilen (‘work around’). Uitleg hierover kunt u vinden in stap 2 en 3 van dit document.

Benodigdheden

  • FreeBSD 4.x of hoger
  • Een ander besturingssysteem zou handig zijn
  • Basis kennis van Unix en een root shell
  • Floppy drive en een diskette
  • FreeBSD installatie Cd-rom
  • Welke GRUB versie moet ik nemen?

    Beslist u voordat u start met de installatie van GRUB of u dit wilt met of zonder ondersteuning voor ‘Splash Image’. Met 'Splash Image' is het mogelijk om een afbeelding van 14 kleuren met een resolutie van 640x480 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 voor '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.

    Stap 1 Installatie GRUB

    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

    Stap 2 Informatie

    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 werkt 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:
    Hier zijn we direct aangekomen bij het probleem: 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.

    Stap 3 GRUB partitie maken (optioneel).

    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.)

    Herstart de computer en boot het systeem vanaf de FreeBSD installatie Cd-rom.

    Doorloop de volgende menu structuur om de 'Label editor' te starten.

    1. Configure Do post-install configuration of FreeBSD
    2. Label The disk Label editor

    De volgende Label editor stappen moeten worden doorlopen.

    Stap A t/m J van de label editor.
    Stap A) Selecteer je SWAP partitie en druk op 'D' (D = Delete)
    Stap B) Selecteer de beschikbare ruimte die is vrij gekomen en druk op 'C' (C = Create)
    Stap C) Geef vervolgens de tekst '10M' op en druk op '[ OK ]'
    Stap D) Selecteer de optie 'FS A file system' en druk op '[ OK ]'
    Stap E) Geef de tekst '/grub' en druk op '[ OK ]'
    Stap F) Selecteer de '/grub' partitie en druk op '1'
    (Hiermee veranderd de geplande UFS2 partitie in een UFS1 partitie)
    Stap G) Selecteer de beschikbare ruimte die over is en druk op 'C' (C = Create)
    Stap H) Druk op '[ OK ]'
    Stap I) Selecteer de optie 'Swap A swap partition.' en druk op '[ OK ]'
      Noteer even welk device de '/grub' partitie gebruikt.
    Lijkt verder alles in orde dan kunnen de instellingen worden opgeslagen.
    Stap J) Druk op 'W' (W = Write) gevolgd door '[ Yes ]'.

    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

    Wanneer het mount commando succesvol is verlopen is de GRUB partitie goed opgenomen in het /etc/fstab bestand.

    Stap 4 GRUB configureren.

    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.

    Lokatie van de 'GRUB directory'
    Optie Omschrijving / Directory locatie
    UFS1 Wanner het FreeBSD besturingssysteem geplaatst is op een UFS1 partitie is de meest voor de hand liggende locatie /boot/grub. Hierbij hoeft alleen nog maar de grub directory in de al bestaande /boot directory gemaakt te worden.
    UFS2 + Stap 3 Wanneer het gaat om FreeBSD 5.x op een UFS2 partitie en de extra GRUB partitie uit Stap 3 is aangemaakt zal er voor deze speciale partitie worden gekozen. Ook op deze partitie moet vervolgens de directory grub of de directory boot/grub worden gecreëerd.

    Let op !! De root van deze partitie begint onder het huidige besturingssysteem met '/grub' en niet met '/', wanneer er voor de directory boot/grub word gekozen zal de directory structuur onder FreeBSD er als volgt uitzien '/grub/boot/grub'.
    UFS2 + Ander O.S. Wanneer is gekozen voor een ander filesysteem van een ander besturingssysteem moet ook hier de /grub of /boot/grub worden aangemaakt.

    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:
    timeout 5 # timeout na 5 seconden

    # FreeBSD
    title FreeBSD
    root  (hd0,1,a)


    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.



    In dit voorbeeld bevindt FreeBSD zich op de 1e harde schijf, daarvan op de 2e Slice en daarbinnen op de 1e partitie. Deze worden bij het GRUB root commando genoteerd als (hd0,1,a). Merk op dat de bij GRUB de 1e waarde als het cijfer 0 wordt genoteerd en niet het cijfer 1.

    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.
    Voeg afhankelijk van de FreeBSD versie het volgende aan menu.lst toe.

    menu.lst (FreeBSD 4.x en ouder):
    chainloader +1
    boot

    menu.lst (FreeBSD 5.x):
    kernel /boot/loader
    chainloader +1
    boot


    Stap 5 GRUB in MBR plaatsen

    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

    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.

    GRUB Shell:
    root (hd0,1,a)
    setup (hd0)

    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'


    GRUB 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.

    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 te drukken. Van hieruit kunnen alle besturingssystemen worden gestart mits de locatie bekend is. 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.

    Tip: In de GRUB Shell is de optie 'command completion' onder de TAB toets en een 'history' d.m.v. de pijltjes toetsen aanwezig.

    Stap 6 GRUB splash images (optioneel).

    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 verzameling te downloaden.

    Download GRUB splash images
    Klik hier om te vergroten.
    download
    Klik hier om te vergroten.
    download
    Klik hier om te vergroten.
    download
    Klik hier om te vergroten.
    download
    Klik hier om te vergroten.
    download

    Download alle 5 splash images.

    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:

    GRUB splashimage:
    splashimage <locatie spalshimage>
    b.v.
    splashimage /boot/grub/calvin.xpm.gz


    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.

    Wat te doen bij configuratie/installatie problemen?

    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:

    1. F ixit Repair mode with CDROM/DVD/floppy or start shell
    2. 2 CDROM/DVD Use the "live" filesystem CDROM/DVD

    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 is niet mogelijk i.v.m. de zeer uiteenlopende configuraties van computers. Wanneer er zich toch nog andere problemen voordoen moet het probleem 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.
    F.A.Q.

    Bronnen

    http://www.gnu.org/software/grub/
    GNU GRUB
    http://www.gnu.org/software/grub/manual/html_mono/grub.html
    Originele GRUB Manual
    http://ruslug.rutgers.edu/~mcgrof/grub-images/
    GRUB Splash Image Howto (Voor Linux/Debian gebruikers.)
    http://www.daemonnews.org/200102/grub.html
    Artikel over GRUB onder FreeBSD.
    http://www.gomor.org/FreeBSD/installer_grub.html
    Spaans talig artikel over GRUB onder FreeBSD.
    http://geodsoft.com/howto/dualboot/grub.htm
    GRUB Howto voor diverse Unix/Linux platformen.
    http://www.google.com/bsd
    En natuurlijk mijn favoriete zoekmachine www.google.com of www.google.com/bsd.

    Back