The Linux+FreeBSD mini-HOWTO Niels Kristian Bech Jensen nkbj@image.dk v1.11, 30 March 2000 Questo documento descrive come utilizzare FreeBSD e Linux sullo stesso sistema. Introduce FreeBSD e discute come i due sistemi operativi possono cooperare, ad esempio condividendo lo spazio di swap. Si dovrebbe avere un pò di esperienza con Linux e FreeBSD e con il par­ tizionamento dell'hard drive (fdisk) prima di leggere questo docu­ mento. I trucchi qui presenti sono stati testati utilizzando FreeBSD 2.2.2, ma dovrebbero essere validi anche per le versioni più recenti. Non esitate ad inviarmi una mail se avete commenti, domande o suggeri­ menti riguardo questo documento. Vorrei anche avere notizie da persone che hanno esperienza nell'utilizzare Linux con NetBSD o OpenBSD. Traduzione di Giovanni Benedetti. Aggiornamento a cura di Lorenzo Conti , ultima revisione 18 Dicembre 2001. ______________________________________________________________________ Indice Generale 1. Cosa è FreeBSD? 2. Il modo di FreeBSD di etichettare i dischi 2.1 FreeBSD ``slice'' e ``partizioni'' 2.2 Etichettatura di drive e partizioni Linux e FreeBSD 3. Condividere l'area di swap fra Linux e FreeBSD 3.1 Installare e preparare Linux 3.2 Installare FreeBSD 3.3 Impostare la partizione di swap di FreeBSD in Linux 4. Avviare FreeBSD usando LILO 5. Montare i filesystems 5.1 Montare il filesystem UFS sotto Linux 5.2 Montare il filesystem ext2fs sotto FreeBSD 6. Far girare programmi binari estranei 6.1 Far girare programmi binari di FreeBSD sotto Linux 6.2 Far girare programmi binari di Linux sotto FreeBSD 7. Fonti di informazione 8. Crediti e affari legali 8.1 Affari legali ______________________________________________________________________ 11.. CCoossaa èè FFrreeeeBBSSDD?? FreeBSD è un sistema operativo libero Unix- like un pò come Linux. La differenza principale è che, mentre il kernel di Linux è stato scritto da zero, FreeBSD è basato sulla parte liberamente ridistribuibile di 4.4BSD (Berkeley Software Distribution) conosciuta come 4.4BSD-lite. Questo fatto potrebbe portare alcune persone a suggerire che FreeBSD sia più vicino di Linux nell'essere un ``vero'' UNIX®. FreeBSD gira solo sulle piattaforme PC Intel (i386 e superiori); al momento sono in lavorazione le versioni per le piattaforme DEC Alpha e Sun Sparc. NetBSD e OpenBSD sono simili a FreeBSD, ed entrambi girano su diverse piattaforme. I requisiti hardware per tutti questi sistemi *BSD sono simili a quelli per Linux. Lo sviluppo di FreeBSD è gestito in modo diverso dallo sviluppo di Linux. Un gruppo ristretto di sviluppatori riveste le funzioni di arbitro e si occupa della guida del progetto. I grandi cambiamenti vengono prima discussi prima sulle mailing list. Il progetto FreeBSD ha due diramazioni di sviluppo (proprio come Linux): ````--CCUURRRREENNTT'''' e ````--SSTTAABBLLEE''''. La diramazione di sviluppo ``-CURRENT'' è dove avvengono gli sviluppi delle nuove caratteristiche. Gli sviluppi per l'albero ``-STABLE'' sono ristretti alla correzione di bug e ad alcune nuove caratteristiche accuratamente testate. FreeBSD può essere utilizzato e (ri-)distribuito proprio come Linux. La maggior parte del sistema è rilasciato sotto copyright BSD; il resto è sotto la GNU GPL o altre licenze open-source . 22.. IIll mmooddoo ddii FFrreeeeBBSSDD ddii eettiicchheettttaarree ii ddiisscchhii Linux e FreeBSD etichettano e poi partizionano i dischi in due modi diversi. Questa sezione spiega le principali differenze tra i due schemi. In effetti lo schema di etichettatura di FreeBSD è un adattamento del tradizionale stile BSD adatto a vivere nelle partizioni fdisk dei PC. Quindi è molto simile agli altri sistemi Unix basati su BSD come NetBSD, OpenBSD, Ultrix, Digital Unix, SunOS, e Solaris. 22..11.. FFrreeeeBBSSDD ````sslliiccee'''' ee ````ppaarrttiizziioonnii'''' FreeBSD necessita di una delle quattro entrate nella tabella delle partizioni del disco del vostro PC. Questa partizione primaria è chiamata ````sslliiccee'''' (fetta, porzione) nella terminologia FreeBSD. In seguito si usa il programma disklabel per creare più di otto partizioni in questa partizione primaria. Queste partizioni logiche sono chiamate ````ppaarrttiittiioonnss'''' (partizioni) nella terminologia FreeBSD. Questo concetto è simile al modo in cui Linux (e DOS) gestiscono le partizioni logiche in una partizione estesa. Non si può installare FreeBSD in una partizione estesa creata da Linux (o DOS). Notare che il programma Linux fdisk non mostra dal menu principale le partizioni BSD in uno slice FreeBSD, ma può mostrare le informazioni del disklabel FreeBSD se si fornisce il comando `b'. L'output è qualcosa simile a questo (/dev/hda4 è la slice FreeBSD): 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# Le lettere `a'...`f' nella prima colonna sono le stesse etichette come mostrato sotto nell'esempio per una slice FreeBSD. Nel linguaggio BSD esistono tre partizioni speciali. La lettera `a' designa la partizione di root, `b' designa la partizione di swap, mentre `c' designa l'intera slice. Vedere la documentazione su FreeBSD per ulteriori informazioni sulle modalità `standard'' di assegnare queste ai differenti tipi di partizione. 22..22.. EEttiicchheettttaattuurraa ddii ddrriivvee ee ppaarrttiizziioonnii LLiinnuuxx ee FFrreeeeBBSSDD I dischi sono etichettati nel seguente modo in Linux e FreeBSD: Linux FreeBSD Primo drive IDE /dev/hda /dev/wd0 Secondo drive IDE /dev/hdb /dev/wd1 Primo drive SCSI /dev/sda /dev/sd0 Secondo drive SCSI /dev/sdb /dev/sd1 Le partizioni (slice in FreeBSD) su un drive IDE sono etichettate nel seguente modo (/dev/hda è usato come esempio): Linux FreeBSD Prima partizione primaria /dev/hda1 /dev/wd0s1 Seconda partizione primaria /dev/hda2 /dev/wd0s2 Terza partizione primaria /dev/hda3 /dev/wd0s3 Quarta partizione primaria /dev/hda4 /dev/wd0s4 Le partizioni nel mio slice FreeBSD sono etichettate nel seguente modo. È l'etichettatura che si ottiene di default. Si possono cambiare le etichette se si esegue una installazione personalizzata di FreeBSD (/dev/hda4 è la slice FreeBSD nell'esempio): 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 Se si esegue dmesg in Linux si vedrà questo (Affinché funzioni il kernel Linux deve essere compilato con UUFFSS ffiilleessyysstteemm ssuuppppoorrtt. Vedere la sezione ``Installare e preparare Linux''): Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 > Se avete installato nella slice /dev/sd1s3 (/dev/sdb3 in terminologia Linux), e /dev/sdb2 è una partizione estesa Linux contenente due partizioni logiche (/dev/sdb5 e /dev/sdb6), l'esempio precedente dovrebbe apparire così: 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 Questo sarà mostrato come: Partition check: sdb: sdb1 sdb2 < sdb5 sdb6 > sdb3 < sdb7 sdb8 sdb9 sdb10 > nell'output di dmesg. Se avete una partizione estesa Linux _d_o_p_o la vostra slice FreeBSD avete dei problemi, perché la maggior parte dei floppy di installazione del kernel di Linux sono preparati senza il supporto UFS, i quali non riconosceranno le partizioni FreeBSD interne alla slice. Quello che avrebbe dovuto essere visto come (/dev/hda3 è la slice FreeBSD e /dev/hda4 è la partizione Linux estesa) Partition check: hda: hda1 hda2 hda3 < hda5 hda6 hda7 hda8 > hda4 < hda9 hda10 > è vista come: Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 > Questo può darvi una assegnazione sbagliata del disco e causare la perdita di dati. Il mio consiglio è di _m_e_t_t_e_r_e _s_e_m_p_r_e _l_a _v_o_s_t_r_a _s_l_i_c_e _F_r_e_e_B_S_D _d_o_p_o _q_u_a_l_s_i_a_s_i _p_a_r_t_i_z_i_o_n_e _L_i_n_u_x _e_s_t_e_s_a _e _n_o_n _c_a_m_b_i_a_r_e _n_e_s_s_u_n_a _p_a_r_t_i_z_i_o_n_e _l_o_g_i_c_a _n_e_l_l_a _v_o_s_t_r_a _p_a_r_t_i_z_i_o_n_e _L_i_n_u_x _e_s_t_e_s_a _d_o_p_o _a_v_e_r _i_n_s_t_a_l_l_a_t_o _F_r_e_e_B_S_D_! 33.. CCoonnddiivviiddeerree ll''aarreeaa ddii sswwaapp ffrraa LLiinnuuxx ee FFrreeeeBBSSDD Questa sezione descrive come ho ottenuto che Linux e FreeBSD condividessero una partizione di swap. Ci possono essere altri modi di ottenere lo stesso risultato. Potete installare FreeBSD prima di Linux se volete prestare attenzione all'ordine delle partizioni nella slice FreeBSD. 33..11.. IInnssttaallllaarree ee pprreeppaarraarree LLiinnuuxx Il primo passo è quello di installare Linux normalmente. Dovete lasciare spazio per la slice FreeBSD nel vostro disco. Non dovete creare una partizione Linux di swap, ma se ne volete una, mettetela nello spazio che volete allocare per FreeBSD. In questo modo potrete cancellare la partizione di swap Linux in seguito e usare lo spazio per FreeBSD. Quando avrete installato Linux dovrete compilare un nuovo kernel. Leggete TThhee LLiinnuuxx KKeerrnneell HHOOWWTTOO se questa è una cosa nuova per voi. _D_o_v_e_t_e includere sia UUFFSS ffiilleessyysstteemm ssuuppppoorrtt ((rreeaadd oonnllyy)) sia BBSSDD ddiisskkllaabbeell ((FFrreeeeBBSSDD ppaarrttiittiioonn ttaabblleess)) ssuuppppoorrtt: 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 Installate il nuovo kernel e riavviate. Rimuovete qualsiasi riga che include la parola _s_w_a_p dal vostro file /etc/fstab se avete creato una partizione Linux di swap. _A_c_c_e_r_t_a_t_e_v_i _d_i _a_v_e_r_e _u_n _f_l_o_p_p_y _d_i _b_o_o_t _d_i _L_i_n_u_x _f_u_n_z_i_o_n_a_n_t_e _c_o_n _i_l _n_u_o_v_o _k_e_r_n_e_l. Ora siete pronti per installare FreeBSD. 33..22.. IInnssttaallllaarree FFrreeeeBBSSDD Installate FreeBSD come descritto nella documentazione di FreeBSD. Rimuovete la partizione Linux di swap se ne avete creata una (potete usare il programma fdisk di FreeBSD). Prestate attenzione all'ordine delle partizioni nello slice FreeBSD. Se usate l'etichettatura predefinita, la seconda partizione sarà la partizione di swap. Completate l'installazione di FreeBSD e riavviate in Linux _u_s_a_n_d_o _i_l _n_u_o_v_o _f_l_o_p_p_y _d_i _b_o_o_t _d_i _L_i_n_u_x. 33..33.. IImmppoossttaarree llaa ppaarrttiizziioonnee ddii sswwaapp ddii FFrreeeeBBSSDD iinn LLiinnuuxx Lanciate dmesg quando avete riavviato in Linux. Nell'output dovreste vedere qualcosa del genere: Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 > Questo significa che /dev/hda4 è la vostra slice FreeBSD, mentre /dev/hda5, /dev/hda6, /dev/hda7 e /dev/hda8 sono le partizioni FreeBSD. Se la vostra partizione di swap è la seconda partizione nello slice, questa sarà /dev/hda6. Dovete inserire le linee seguenti nel vostro file /etc/fstab di Linux per abilitare la partizione di swap: /dev/hda6 none swap sw 0 0 Mentre FreeBSD può usare qualsiasi tipo di partizione come area di swap, Linux necessita di un tipo di marcatura particolare per la partizione di swap. Questa marcatura si ottiene con mkswap. FreeBSD rovina questa marcatura quando usa la partizione di swap condivisa, quindi dovete lanciare mkswap ogni volta che avviate con Linux. Per fare questo automaticamente dovete trovare lo script che lancia swapon al momento del boot. In Red Hat Linux questo è /etc/rc.d/rc.sysinit. Inserite la riga seguente in questo file appena _p_r_i_m_a _d_i swapon -a: awk -- '/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }' /etc/fstab Questo lancerà mkswap su qualsiasi partizione di swap in /etc/fstab ogni volta che avviate eccetto se queste sono commentate (aventi ``#'' come primo carattere della riga). Lanciate free per controllare le dimensioni della partizione di swap quando avrete riavviato in Linux. Dovreste anche riavviare in FreeBSD per accertarvi che tutto funzioni come ci si aspetta. Se non funziona, avete probabilmente usato una partizione sbagliata come partizione di swap. L'unica soluzione a questo problema è di reinstallare FreeBSD e riprovare ancora. L'esperienza è una grande maestra. :-) 44.. AAvvvviiaarree FFrreeeeBBSSDD uussaannddoo LLIILLOO Potete facilmente avviare FreeBSD con LILO. Non installate il boot selector di FreeBSD (Booteasy) se volete usare LILO. Aggiungete le seguenti righe al vostro file /etc/lilo.conf e lanciate lilo (assumendo che lo slice FreeBSD sia /dev/hda4): other=/dev/hda4 table=/dev/hda label=FreeBSD Se avete installato FreeBSD sul secondo disco SCSI, usate qualcosa del genere (assumendo che lo slice FreeBSD sia /dev/sdb2): other=/dev/sdb2 table=/dev/sdb loader=/boot/chain.b label=FreeBSD 55.. MMoonnttaarree ii ffiilleessyysstteemmss 55..11.. MMoonnttaarree iill ffiilleessyysstteemm UUFFSS ssoottttoo LLiinnuuxx Sfortunatamente il driver UFS nei kernel Linux 2.0.xx non include il supporto per FreeBSD. Quando provate a montare un filesystem FreeBSD, ottenete solo dei messaggi di errore (il filesystem di fatto viene montato, ma non potete farci niente). Questo problema è stato risolto con i nuovi kernel Linux (versione 2.1.87 e successive.) C'è un'altra versione del driver UFS per i kernel Linux 2.0.xx (xx <= 30) su metalab.unc.edu (in passato sunsite.unc.edu) . Si chiama UU22FFSS e la versione corrente è u2fs-0.4.3.tar.gz. Una versione di U2FS (ufs-0.4.4.tar.gz) per Linux 2.0.31 e successivi (2.0.xx; not 2.1.xx) si può trovare in questo sito insieme ad ulteriori informazioni riguardo U2FS (e UFS.) Ora dovete compilare un nuovo kernel con il supporto per U2FS filesystem e BSD disklabels. Vedere la sezione ``Installare e preparare Linux'' per maggiori informazioni in proposito. Potete lasciar perdere l'UUFFSS ffiilleessyysstteemm ssuuppppoorrtt nel kernel quando usate U2FS. Quando avrete installato il nuovo kernel, potrete montare i filesystem UFS (tutte le partizioni nella slice FreeBSD eccetto la partizione di swap) con un comando tipo questo: mount -t u2fs /dev/hda8 /mnt Dovrete usare un comando tipo mount -t ufs /dev/hda8 /mnt se usate un kernel Linux versione 2.1.87 o successivo. Dal kernel Linux versione 2.1.112 dovete aggiungere -o ufstype=44bsd ad un comando come questo: mount -t ufs -o ufstype=44bsd /dev/hda8 /mnt Il driver UFS (e U2FS) è di sola lettura (read-only). E così; potete leggere dai filesystem UFS ma non potete scriverci sopra. Un driver sperimentale lettura-scrittura (read-write) UFS ha rimpiazzato il driver read-only nel kernel Linux versione 2.1.112 e superiori; la scrittura su partizioni FreeBSD è supportata dalla versione 2.1.127. 55..22.. MMoonnttaarree iill ffiilleessyysstteemm eexxtt22ffss ssoottttoo FFrreeeeBBSSDD Per montare un filesystem ext2fs sotto FreeBSD, dovete prima compilare un nuovo kernel con supporto di ext2fs. Leggete the FreeBSD handbook per imparare come fare. Inserite la riga options "EXT2FS" nel vostro file di configurazione del kernel per il nuovo kernel. Quando avrete riavviato con il nuovo kernel, potrete montare un filesystem ext2fs dando un comando come: mount -t ext2fs /dev/wd0s3 /mnt A causa di un bug in FreeBSD 2.2.8 e precedenti dovrete smontare (unmount) tutti i filesystems ext2fs _p_r_i_m_a di chiudere FreeBSD se state usando queste versioni. Se chiudete FreeBSD con un filesystem ext2fs montato, FreeBSD non potrà sincronizzare (sync) i filesystem UFS. Questo risulterà in fsck quando verrà lanciato al successivo avvio di FreeBSD. Potete aggirare questo bug inserendo la riga: umount -a -t ext2fs nel file /etc/rc.shutdown. Il bug è stato corretto in FreeBSD-3.x. 66.. FFaarr ggiirraarree pprrooggrraammmmii bbiinnaarrii eessttrraanneeii 66..11.. FFaarr ggiirraarree pprrooggrraammmmii bbiinnaarrii ddii FFrreeeeBBSSDD ssoottttoo LLiinnuuxx Il pacchetto iBCS supporta l'esecuzione di binari FreeBSD sotto Linux; ma è vecchio e non più mantenuto. Io non sono riuscito a farlo funzionare. Per favore fatemi sapere se avete avuto migliore fortuna con questo pacchetto. 66..22.. FFaarr ggiirraarree pprrooggrraammmmii bbiinnaarrii ddii LLiinnuuxx ssoottttoo FFrreeeeBBSSDD FreeBSD ha la possibilità di far girare binari Linux, sia nei formati a.out che ELF. Per fare questo dovete seguire i seguenti tre passaggi: To do this you have to take the following three steps: 1. Dovete abilitare la compatibilità con Linux. Per fare questo (in FreeBSD 2.2.2 --- alcuni dettagli possono essere diversi in altre versioni) dovete editare il vostro file /etc/rc.conf e cambiare linux_enable="NO" in linux_enable="YES" e riavviare. Un altro modo per caricare il supporto binario con Linux è quello di eseguire il comando /usr/bin/linux. In questo modo non dovete riavviare e non avete il supporto binario di Linux sempre cari­ cato (cioè si risparmia memoria.) Ricordate di aggiungere la riga options COMPAT_LINUX nel file config del kernel FreeBSD se compilate un nuovo kernel FreeBSD. 2. Dovete installare le librerie condivise di Linux se i vostri binari Linux sono linkati dinamicamente. Le librerie sono incluse in FreeBSD 2.2.{2,5,6} come pacchetto linux_lib-2.4.tgz (nuove versioni potrebbero essere disponibili). Lanciate il comando seguente per installare il pacchetto: pkg_add /linux_lib-2.4.tgz è la directory che contiene il pacchetto. Potete anche scaricare il pacchetto dalla rete con: pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/packages-stable/All/linux_lib-2.4.tgz o rilanciando /stand/sysinstall. Entrate in ``Configure'', ``Pack­ ages'' e usate i menù. Dovrete eseguire il comando seguente se state lanciando binari Linux linkati staticamente: brandelf -t Linux 3. Installare i programmi Linux che volete lanciare. I programmi possono essere installati sia su filesystem UFS sia su filesystem ext2fs. Vedere la sezione ``Montare filesystems ext2fs sotto FreeBSD'' per maggiori informazioni riguardo l'uso di filesystems ext2fs sotto FreeBSD. Ho eseguito con successo le versioni Linux di Applixware 4.3 e Netscape 3.01 (ambedue in formato ELF) sotto FreeBSD 2.2.2 usando questo metodo (sì, so che esiste una versione nativa di Netscape 4 per FreeBSD). Anche le versioni Linux di acroread e StarOffice 3 e 4 lavorano bene sotto FreeBSD. StarOffice 5 dipende dai threads nativi di Linux e attualmente non funziona sotto FreeBSD. Leggete la documentazione FreeBSD per maggiori informazioni a questo riguardo. 77.. FFoonnttii ddii iinnffoorrmmaazziioonnee L'ultima versione di questo mini-HOWTO può essere scaricata da questo sito in diversi formati (incluso SGML e PostScript.) Il documento è stato tradotto in giapponese da Mr. Teruyoshi Fujiwara come parte di the JF project . Potete trovare alcuni articoli sulle differenze fra Linux e FreeBSD qui . Potete trovare altre informazioni riguardo FreeBSD (e scaricare l'intero sistema) in questo sito . Potete anche comprare il sistema su CDROM da Walnut Creek CDROM (I loro server girano con FreeBSD). Il Linux Kernel HOWTO (e questo mini-HOWTO) è realizzato come parte del The Linux Documentation Project . 88.. CCrreeddiittii ee aaffffaarrii lleeggaallii Grazie ai membri del *BSD user group in Danimarca per aver risposto alle domande di un novizio (newbie) di FreeBSD, a Mr. Takeshi Okazaki per avermi fatto conoscere U2FS, e a Mr. David O'Brien per suggerimenti importanti. 88..11.. AAffffaarrii lleeggaallii Trademarks are owned by their owners. Although the information given in this document is believed to be correct, the author will accept no liability for the content of this document. Use the tips and examples given herein at your own risk. Copyright © 1997-2000 by Niels Kristian Bech Jensen. This document may be distributed only subject to the terms and conditions set forth in the LDP License at http://www.linuxdoc.org/COPYRIGHT.html . Ovvero: I marchi sono proprietà dei loro possessori. Nonostante le informazioni date in questo documento si pensa siano corrette, l'autore non accetterà responsabilità per il contenuto di questo documento. Usate i suggerimenti e gli esempi qui contenuti a vostro rischio. Copyright © 1997-2000 by Niels Kristian Bech Jensen. Questo documento potrà essere distribuito solo sotto i termini e le condizioni esposte in nella Licenza LDP a http://www.linuxdoc.org/COPYRIGHT.html .