De Linux+FreeBSD mini-HOWTO

Niels Kristian Bech Jensen, [email protected]
Vertaald door Ellen Bokhorst, [email protected]

v1.11, 30 maart 2000


Dit document beschrijft hoe je Linux en FreeBSD op hetzelfde systeem kunt gebruiken. Het introduceert FreeBSD en bespreekt hoe de twee besturingssystemen kunnen samenwerken b.v. door het delen van swap space. Je zult waarschijnlijk wel enige ervaring nodig hebben met Linux of FreeBSD en het partitioneren (fdisk) van de harddisk voordat je dit document leest. De tips hierin zijn getest met FreeBSD 2.2.2, maar ze zouden ook voor nieuwe versies moeten gelden. Aarzel niet me te mailen als je opmerkingen, vragen of suggesties hebt over dit document. Ik zou ook graag iets willen horen van mensen die ervaring hebben met het gebruiken van Linux en NetBSD of OpenBSD.

1. Wat is FreeBSD?

FreeBSD is een vrij verkrijgbaar op Unix gelijkend besturingssysteem dat veel weg heeft van Linux. Het belangrijkste verschil is dat, terwijl de Linux kernel helemaal vanaf het begin is geschreven, FreeBSD is gebaseerd op de vrij verspreidbare delen van 4.4BSD (Berkeley Software Distribution) bekend als 4.4BSD-lite. Dit feit kan er toe leiden dat sommige mensen suggereren dat FreeBSD dichter bij de ``echte'' UNIX® staat dan Linux. FreeBSD draait alleen op het Intel PC platform (i386 en hoger); aan ports naar de DEC Alpha en Sun Sparc platformen wordt op het moment gewerkt. NetBSD en OpenBSD zijn gelijk aan FreeBSD, en beide draaien op diverse platformen. Hardware vereisten voor al deze *BSD systemen zijn gelijk aan die voor Linux.

De ontwikkeling van FreeBSD wordt op een andere manier beheerd dan de Linux ontwikkeling. Een vaste kern ontwikkelaars fungeert als scheidsrechter en leidt het project. Grote wijzigingen worden van te voren besproken via mailing lists. Het FreeBSD project heeft twee ontwikkelings takken (net als bij Linux): ``-CURRENT'' en ``-STABLE''. De ``-CURRENT'' ontwikkelingstak is waar de ontwikkeling van nieuwe mogelijkheden plaatsvindt. Ontwikkeling in de ``-STABLE'' tak is beperkt tot bug fixes en enkele grondig geteste nieuwe mogelijkheden.

FreeBSD kan net als Linux vrij worden ge(re-)distribueerd. De meeste onderdelen van het systeem zijn uitgegeven onder het BSD copyright; de rest onder het GNU GPL of andere open-source licenties.

2. De beste manier om FreeBSD's harddrives te labelen

Linux en FreeBSD labelen harddisks en partities volgens twee verschillende schema's. Deze sectie legt de belangrijkste verschillen tussen de twee schema's uit. In feite is het FreeBSD labelingsschema een overblijfsel van de traditionele BSD stijl van labelen in leven gehouden binnen de de PC's fdisk partities. Dus het is erg vergelijkbaar met andere op BSD-gebaseerde Unix systemen zoals NetBSD, OpenBSD, Ultrix, Digital Unix, SunOS, en Solaris.

2.1 FreeBSD ``slices'' en ``partities''

FreeBSD heeft één van de vier ingangen in de partitietabel van de harddisk van je PC nodig. Deze primaire partitie wordt een ``slice'' genoemd in FreeBSD's terminologie. Het maakt vervolgens gebruik van het disklabel programma om tot acht partities in deze primaire partitie aan te maken. Deze logische partities worden in FreeBSD's terminologie ``partities'' genoemd. Dit principe is vergelijkbaar met de manier waarop Linux (en DOS) met logische partities in een extended partitie omgaan. Je kunt FreeBSD niet in een extended partitie installeren die door Linux (of DOS) is aangemaakt. Merk op dat het Linux fdisk programma de BSD partities in een FreeBSD slice vanaf het hoofdmenu niet laat zien, het kan de BSD disklabel informatie wel tonen als je het commando `b' geeft. De uitvoer ziet er ongeveer als volgt uit (/dev/hda4 is de FreeBSD slice):

bash# fdisk /dev/hda

Command (m for help): p

Disk /dev/hda: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes

   Device Boot   Begin    Start      End   Blocks   Id  System
/dev/hda1   *        1        1       27    54400+  83  Linux native
/dev/hda2           28       28       55    56448   83  Linux native
/dev/hda3           56       56      403   701568   83  Linux native
/dev/hda4          404      404      621   439488   a5  BSD/386

Command (m for help): b
Reading disklabel of /dev/hda4 at sector 1624897.

BSD disklabel command (m for help): p

8 partitions:
#        size   offset    fstype   [fsize bsize   cpg]
  a:    64512  1624896    4.2BSD        0     0     0   # (Cyl.  404 - 419)
  b:   104832  1689408      swap                        # (Cyl.  420 - 445)
  c:   878976  1624896    unused        0     0         # (Cyl.  404 - 621)
  e:    64512  1794240    4.2BSD        0     0     0   # (Cyl.  446 - 461)
  f:   645120  1858752    4.2BSD        0     0     0   # (Cyl.  462 - 621)

BSD disklabel command (m for help): q
bash#

De letters `a'...`f' in de eerste kolom zijn dezelfde labels als die hieronder in het voorbeeld voor een FreeBSD slice worden getoond. Er zijn in BSD's terminologie drie speciale partities. De letter `a' duidt de root partitie aan, `b' duidt de swap partitie aan, terwijl `c' de volledige slice aanduidt. Zie de FreeBSD documentatie voor meer informatie over de ``standaard'' wijze waarop deze letters aan de verschillende partitietypes worden toegewezen.

2.2 Drive en partitie labeling in Linux en FreeBSD

De harddisks zijn op de volgende wijze in Linux en FreeBSD gelabeld:

                        Linux           FreeBSD
Eerste IDE drive        /dev/hda        /dev/wd0
Tweede IDE drive        /dev/hdb        /dev/wd1
Eerste SCSI drive       /dev/sda        /dev/sd0
Tweede SCSI drive       /dev/sdb        /dev/sd1

De partities (FreeBSD slices) op een IDE drive worden op de volgende manier gelabeld, (/dev/hda is als een voorbeeld gebruikt):

                                Linux           FreeBSD
Eerste primaire partitie        /dev/hda1       /dev/wd0s1
Tweede primaire partitie        /dev/hda2       /dev/wd0s2
Derde primary partitie          /dev/hda3       /dev/wd0s3
Vierde primaire partitie        /dev/hda4       /dev/wd0s4

De partities in mijn FreeBSD slice zijn op de volgende manier gelabeld. Het zijn de labels die je standaard krijgt. Het is mogelijk de labels te wijzigen als je kiest voor een aangepaste installatie van FreeBSD (/dev/hda4 is de FreeBSD slice in het voorbeeld):

Linux label     FreeBSD label   FreeBSD mount point 
/dev/hda5       /dev/wd0s4a             /
/dev/hda6       /dev/wd0s4b             swap
/dev/hda7       /dev/wd0s4e             /var
/dev/hda8       /dev/wd0s4f             /usr

Als je dmesg opstart onder Linux, zul je dit te zien krijgen als (De linux kernel moet zijn aangemaakt met ondersteuning voor het UFS bestandssysteem wil dit werken. Zie sectie Installeren en voorbereiden van Linux):

Partition check:
 hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >

Als je FreeBSD in de /dev/sd1s3 slice hebt geïnstalleerd (/dev/sdb3 in Linux termen ), en /dev/sdb2 is een Linux extended partitie met twee logische partities (/dev/sdb5 en /dev/sdb6), dan zal het voorgaande voorbeeld er ongeveer zo uitzien:

Linux label     FreeBSD label   FreeBSD mount point 
/dev/sdb7       /dev/sd1s3a             /
/dev/sdb8       /dev/sd1s3b             swap
/dev/sdb9       /dev/sd1s3e             /var
/dev/sdb10      /dev/sd1s3f             /usr

Dit zal worden getoond als

Partition check:
 sdb: sdb1 sdb2 < sdb5 sdb6 > sdb3 < sdb7 sdb8 sdb9 sdb10 >
in de uitvoer van dmesg.

Als je een Linux extended partitie na je FreeBSD slice hebt, haal je je moeilijkheden op de hals, omdat de meeste Linux kernel installatie diskettes zonder UFS ondersteuning zijn aangemaakt, ze zullen de FreeBSD partities binnenin de slice niet herkennen. Wat je zou moeten zien als de FreeBSD slice (/dev/hda3 en /dev/hda4 als de Linux extended partitie)

Partition check:
 hda: hda1 hda2 hda3 < hda5 hda6 hda7 hda8 > hda4 < hda9 hda10 >
wordt gezien als:
Partition check:
 hda: hda1 hda2 hda3 hda4 < hda5 hda6 >

Dit kan de verkeerde device aanwijzing opleveren en verlies van gegevens veroorzaken. Mijn advies is om je FreeBSD slice altijd achter een Linux extended te plaatsen, en geen wijzigingen meer aan te brengen in je Linux extended partities nadat je FreeBSD hebt geïnstalleerd!

3. Swap space delen tussen Linux en FreeBSD

Deze sectie beschrijft hoe ik Linux en FreeBSD zover kreeg om een swap partitie te delen. Het kan zijn dat er andere manieren zijn om hetzelfde resultaat te verkrijgen. Je kunt FreeBSD vóór Linux installeren als je dat wilt, let alleen op de volgorde van de partities in de FreeBSD slice.

3.1 Installeren en voorbereiden van Linux

De eerste stap is om Linux net als anders te installeren. Je moet ruimte op je harddisk openlaten voor de FreeBSD slice. Je hoeft geen Linux swap partitie aan te maken, maar als je er een wilt, plaats deze dan in de ruimte die je wilt inruimen voor FreeBSD. Op die manier kun je de Linux swap partitie later verwijderen en de ruimte voor FreeBSD gebruiken.

Als je Linux hebt geïnstalleerd dan moet je een nieuwe kernel aanmaken. Lees de Linux Kernel HOWTO als dit nieuw voor je is. Je moet zowel de ondersteuning voor het UFS bestandssysteem (alleen lezen) als ondersteuning voor BSD disklabel (FreeBSD partitie tabellen) insluiten:

UFS filesystem support (read only) (CONFIG_UFS_FS) [N/y/m/?] y
BSD disklabel (FreeBSD partition tables) support (CONFIG_BSD_DISKLABEL) [N/y/?]
(NEW) y

Installeer de nieuwe kernel en reboot. Verwijder iedere regel uit je /etc/fstab waarin het woord swap voorkomt als je een Linux swap partitie hebt aangemaakt. Zorg ervoor dat je een werkende Linux opstartdiskette hebt met de nieuwe kernel. Nu ben je er klaar voor om FreeBSD te installeren.

3.2 FreeBSD installeren

Installeer FreeBSD zoals beschreven staat in de FreeBSD documentatie. Verwijder de Linux swap partitie als je er één hebt aangemaakt (je kunt hiervoor het programma fdisk van FreeBSD gebruiken). Let op de volgorde van de partities in de FreeBSD slice. Als je de standaard labeling gebruikt dan zal de tweede partitie de swap partitie zijn. Maak de installatie van FreeBSD af en start Linux weer op met gebruik van de nieuwe Linux opstartdiskette.

3.3 De FreeBSD swap partitie instellen onder Linux

Start dmesg op als je Linux hebt geboot. In de uitvoer zal je iets dergelijks als het volgende te zien moeten krijgen:

Partition check:
 hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >

Dit betekent dat /dev/hda4 je FreeBSD slice is, terwijl /dev/hda5, /dev/hda6, /dev/hda7 en /dev/hda8 de FreeBSD partities zijn. Als je swap partitie de tweede partitie is in de slice, dan zal dit /dev/hda6 zijn.

Je moet de volgende regel in Linux /etc/fstab bestand zetten om de swap partitie te activeren:

/dev/hda6       none            swap            sw              0       0

Terwijl FreeBSD elk type partitie als swap space kan gebruiken, heeft Linux een speciaal teken in de swap partitie nodig. Dit teken wordt aangemaakt door mkswap. FreeBSD vernielt dit teken zodra het gebruik maakt van de gedeelde swap partitie, dus je moet iedere keer dat je Linux boot mkswap uitvoeren. Om dit automatisch te laten uitvoeren, zul je uit moeten zoeken waar het script zich bevindt dat tijdens het booten swapon uitvoert. In Red Hat Linux is dit /etc/rc.d/rc.sysinit. Zet de volgende regel in dat bestand net voor swapon -a:

awk -- '/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }' /etc/fstab

Hiermee zal iedere keer als je opnieuw opstart mkswap voor iedere swap partitie in /etc/fstab worden uitgevoerd, behalve als de regels als commentaar in het bestand staan geplaatst (``#'' staat als eerste teken in de regel).

Start free op om de grootte van de swap space te controleren als je Linux opnieuw hebt opgestart. Je zal ook FreeBSD opnieuw op moeten starten om er zeker van te zijn dat alles werkt zoals je mag verwachten. Als het niet zo is, dan heb je waarschijnlijk de verkeerde partitie als swap partitie aangegeven. De enige oplossing voor dat probleem is om FreeBSD opnieuw te installeren en het nog eens te proberen. Ervaring is een goede leermeester :-)

4. FreeBSD booten met behulp van LILO

Je kunt FreeBSD gemakkelijk met LILO booten. Installeer de FreeBSD's boot selector (Booteasy) niet als je LILO wilt gebruiken. Voeg de volgende regels toe aan het bestand /etc/lilo.conf en start lilo op. (ervan uitgaande dat de FreeBSD slice /dev/hda4) is:

other=/dev/hda4
        table=/dev/hda
        label=FreeBSD

Als je FreeBSD op de tweede drive hebt geïnstalleerd, gebruik dan iets als (als de FreeBSD slice /dev/sdb2) is:

other=/dev/sdb2
        table=/dev/sdb
        loader=/boot/chain.b
        label=FreeBSD

5. Mounten van bestandssystemen

5.1 Het mounten van UFS bestandssystemen onder Linux

Helaas bevat de UFS driver in de Linux 2.0.xx kernels geen ondersteuning voor FreeBSD. Als je een FreeBSD bestandssysteem probeert te mounten, krijg je slechts wat foutmeldingen. (Het bestandssysteem kan wel worden gemount, maar je kunt er niets mee doen). Dit probleem is opgelost in de nieuwere Linux kernels (versie 2.1.87 en hoger).

Er is nog een andere versie van de UFS driver voor Linux 2.0.xx kernels (xx <= 30) te verkrijgen bij metalab.unc.edu ( voormalige sunsite.unc.edu). Het wordt U2FS genoemd en de huidige versie is u2fs-0.4.3.tar.gz. Een versie van U2FS (ufs-0.4.4.tar.gz) voor Linux 2.0.31 en hoger (2.0.xx; niet 2.1.xx) is te vinden bij deze site samen met verdere informatie over U2FS (en UFS).

Nu moet je een nieuwe kernel aanmaken met ondersteuning voor het U2FS bestandssysteem en BSD disklabels. Zie sectie Installeren en voorbereiden van Linux voor meer informatie hierover. Je kun de ondersteuning voor het bestandssysteem UFS uit de kernel weglaten als je U2FS gebruikt.

Als je de nieuwe kernel hebt geïnstalleerd, kun je je UFS bestands systemen mounten (alle partities in de FreeBSD slice behalve de swap partitie) met een commando als:

mount -t u2fs /dev/hda8 /mnt

Je zult een commando als het volgende moeten gebruiken

mount -t ufs /dev/hda8 /mnt
als je een Linux kernel versie 2.1.87 of hoger gebruikt. Vanaf Linux-kernel versie 2.1.112 moet je als volgt -o ufstype=44bds toevoegen aan het commando:
mount -t ufs -o ufstype=44bsd /dev/hda8 /mnt

De UFS (en U2FS) driver is read-only. Dat wil zeggen; je kunt de UFS bestandssystemen wel lezen maar je kunt er niet naar toe schrijven. Een experimentele read-write UFS driver heeft de read-only driver in Linux kernels version 2.1.112 en hoger vervangen; het schrijven naar een FreeBSD partitie wordt vanaf versies vanaf 2.1.127 ondersteund.

5.2 Het mounten van ext2fs bestandssystemen onder FreeBSD

Om ext2fs bestandssystemen onder FreeBSD te kunnen mounten, moet je als eerste een nieuwe kernel aanmaken met ondersteuning voor ext2fs. Lees het FreeBSD handboek om te leren hoe je dat moet doen. Zet de volgende regel in je kernel configuratie bestand voor de nieuwe kernel:

options         "EXT2FS"

Zodra je je systeem met de nieuwe kernel hebt opgestart, kun je het ext2fs bestandssysteem mounten door een commando op te geven als:

mount -t ext2fs /dev/wd0s3 /mnt

Te wijten aan een bug in FreeBSD 2.2.8 en eerder zul je alle ext2fs bestandssystemen moeten unmounten voordat je FreeBSD afsluit als je van deze versies gebruikt maakt. Als je FreeBSD afsluit met een gemount ext2fs bestandssysteem, kan FreeBSD niet synchroon lopen met UFS bestandssystemen. Dit resulteert de volgende keer dat FreeBSD wordt opgestart, in het uitvoeren van fsck. Je kunt deze bug omzeilen door de volgende regel in het bestand /etc/rc.shutdown te plaatsen:

umount -a -t ext2fs

Deze bug is in FreeBDS 3.x gecorrigeerd.

6. Uitvoeren van externe binaire bestanden

6.1 Uitvoeren van FreeBSD binaire bestanden onder Linux

Het iBCS package geeft ondersteuning voor het uitvoeren van FreeBSD's uitvoerbare bestanden onder Linux; maar het is oud en onbeheerd. Ik krijg het niet werkend Laat me alsjeblieft weten als je hiermee meer geluk hebt.

6.2 Uitvoeren van Linux binaire bestanden onder FreeBSD

FreeBSD biedt de mogelijkheid de uitvoerbare bestanden van Linux, zowel in a.out als in het ELF formaat, uit te voeren. Hiervoor moet je de volgende drie stappen volgen:

  1. Je moet Linux compatibiliteit aanzetten. Om dit te kunnen doen (in FreeBSD 2.2.2 --- details kunnen in andere versies variëren) moet je je /etc/rc.conf bestand wijzigen en
    linux_enable="NO"
    
    veranderen in
    linux_enable="YES"
    
    en opnieuw opstarten. Een andere manier om Linux binaire ondersteuning te verkrijgen is door het commando /usr/bin/linux uit te voeren. Op deze manier hoef je niet te rebooten, en je hebt de ondersteuning voor Linux binary's niet altijd geladen (i.e. je bespaart geheugen.) Denk er aan de volgende regel toe te voegen
    options         COMPAT_LINUX
    
    aan het FreeBSD kernel configuratiebestand als je een nieuwe FreeBSD kernel aanmaakt.
  2. Je moet de Linux shared library's installeren als je Linux binary's dynamisch zijn gelinkt. De library's worden bij FreeBSD 2.2.{2,5,6} meegeleverd, als het package linux_lib-2.4.tgz (wellicht zijn er nieuwere versies beschikbaar). Geef de volgende opdracht om het package te installeren:
    pkg_add <path_naar_package>/linux_lib-2.4.tgz
    
    <path_naar_package> is de directory waar het package is opgeslagen. Je kunt het ook van het net afhalen:
    pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/packages-stable/All/linux_lib-2.4.tgz
    
    of door het nog eens opstarten van /stand/sysinstall. Enter ``Configure'', ``Packages'' en de menu's te gebruiken. Je zal het volgende commando uit moeten voeren als je statisch gelinkte Linux binary's gebruikt:
    brandelf -t Linux <name_of_statically_linked_linux_binary>
    
  3. Installeer de Linux programma('s) die je wilt gebruiken. De programma('s) kunnen op zowel de UFS als de ext2fs bestandssystemen worden geïnstalleerd. Zie sectie Mounten van ext2fs bestandssystemen onder FreeBSD voor meer informatie over het gebruik van ext2fs bestandssystemen onder FreeBSD.

Ik heb de Linux versies Applixware 4.3 en Netscape 3.01 (beide ELF formaat) onder FreeBSD 2.2.2 met gebruik van deze methode met succes gedraaid (ja, ik weet dat er een gedegen FreeBSD versie van Netscape 4 is). De Linux versies acroread en StarOffice 3 en 4 werken ook goed onder FreeBSD. StarOffice 5 rekent op de native Linux treads en werkt thans niet onder FreeBSD. Lees de FreeBSD documentatie voor meer informatie over dit onderwerp.

7. Informatiebronnen

De laatste versie van deze mini-HOWTO kan worden gedownload van deze site in diverse formaten (inclusief SGML en PostScript). Het document is vertaald naar de Japanse taal door Mr. Teruyoshi Fujiwara als een onderdeel van het JF project.

Een aantal artikelen over het verschil tussen Linux en FreeBSD zijn hier te vinden.

Je kunt meer informatie over FreeBSD vinden (en het volledige systeem downloaden bij deze site. Je kunt het systeem ook op CDROM's kopen van Walnut Creek CDROM (hun servers draaien FreeBSD.)

De Linux Kernel HOWTO (en deze mini-HOWTO) zijn uitgegeven als onderdeel van Het Linux Documentatie Project.

8. Verdiensten en rechtsgeldige zaken

Met dank aan de leden van de *BSD gebruikers groep in Denemarken voor het beantwoorden van vragen van een FreeBSD newbie, aan Mr. Takeshi Okazaki voor het onder mijn aandacht brengen van het bestaan van U2FS, en aan Mr. David O'Brien voor de waardevolle suggesties.

8.1 Rechtsgeldige zaken

Handelsmerken zijn in eigendom bij hun eigenaren.

Alhoewel wordt verondersteld dat de informatie die in dit document is gegeven, correct is, zal de auteur geen aansprakelijkheid aanvaarden voor de inhoud van dit document. Gebruik de tips en voorbeelden hierin gegeven op eigen risico.

Copyright © 1997-2000 door Niels Kristian Bech Jensen. Dit document mag slechts worden gedistribueerd onder de voorwaarden en condities zoals staat beschreven in de LDP licentie.