De Linux+FreeBSD mini-HOWTO Niels Kristian Bech Jensen, nkbj@image.dk Vertaald door Ellen Bokhorst, bokkie@nl.linux.org 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 bes turingssystemen 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. ______________________________________________________________________ Inhoudsopgave 1. Wat is FreeBSD? 2. De beste manier om FreeBSD's hard drives te labelen. 2.1 FreeBSD ``slices'' en ``partities'' 2.2 Drive en partitie labeling in Linux en FreeBSD 3. Swap space delen tussen Linux en FreeBSD 3.1 Installeren en voorbereiden van Linux 3.2 FreeBSD installeren 3.3 De FreeBSD swap partitie instellen onder Linux 4. FreeBSD booten met behulp van LILO 5. Mounten van bestandssystemen 5.1 Het mounten van UFS bestandssystemen onder Linux 5.2 Het mounten van ext2fs bestandssystemen onder FreeBSD 6. Uitvoeren van externe binaire bestanden 6.1 Uitvoeren van FreeBSD binaire bestanden onder Linux 6.2 Uitvoeren van Linux binaire bestanden onder FreeBSD 7. Informatiebronnen 8. Verdiensten en rechtsgeldige zaken 8.1 Rechtsgeldige zaken ______________________________________________________________________ 1. Wat is FreeBSD? FreeBSD <http://www.freebsd.org/> 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 <http://www.netbsd.org/> en OpenBSD <http://www.openbsd.org/> 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 <http://www.opensource.org/> licenties. 2. De beste manier om FreeBSD's hard drives 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 labelling 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) <ftp://metalab.unc.edu/pub/Linux/ALPHA/ufs/>. 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 <http://www.mathi.uni- heidelberg.de/~flight/projects/u2fs/> 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 <http://www.freebsd.org/handbook/> 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 heeft de mogelijkheid om de uitvoerbare bestanden van Linux te draaien, zowel in a.out als in het ELF formaat. Om dit te kunnen doen moet je de volgende drie stappen volgen: 1. You 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 binaries niet altijd geladen (i.e. je bespaart geheugen.) Denk er aan om de volgende regel toe te voegen options COMPAT_LINUX aan het FreeBSD kernel configuratie bestand als je een nieuwe FreeBSD kernel aanmaakt. 2. Je moet de Linux shared libraries installeren als je Linux binaries dynamisch zijn gelinkt. De libraries worden bij FreeBSD 2.2.{2,5,6} meegeleverd, als het package linux_lib-2.4.tgz (wellicht zijn er nieuwere versies beschikbaar). Geef het volgende commando om het package te installeren: pkg_add <path_to_package>/linux_lib-2.4.tgz <path_to_package> is de directory waar het package is opgeslagen. Je kunt het ook van het net afhalen door: 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 ``Config ure'', ``Packages'' en de menu's te gebruiken. Je zal het volgende commando uit moeten voeren als je statisch gelinkte Linux binaries 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 gebruiken 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 <http://www.image.dk/~nkbj/> 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 <ftp://jf.linux.or.jp/pub/JF/other-formats/>. Een aantal artikelen over het verschil tussen Linux en FreeBSD zijn hier <http://www.futuresouth.com/~fullermd/freebsd/bsdvlin.html> te vinden. Je kunt meer informatie over FreeBSD vinden (en het volledige systeem downloaden bij deze site <http://www.freebsd.org/>. Je kunt het systeem ook op CDROM's kopen van Walnut Creek CDROM <http://www.cdrom.com> (hun servers draaien FreeBSD.) De Linux Kernel HOWTO (en deze mini-HOWTO) zijn uitgegeven als onderdeel van Het Linux Documentatie Project <http://www.linuxdoc.org/LDP/>. 8. Verdiensten en rechtsgeldige zaken Met dank aan de leden van de *BSD gebruikers groep in Denemarken <http://www.bsd-dk.dk/> 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 <http://www.linuxdoc.org/LDP-COPYRIGHT.html>.