Breve introduzione a Gentoo/FreeBSD
1.
Introduzione a FreeBSD
Cos'è FreeBSD?
FreeBSD è un sistema operativo libero
Unix-like (
licenza). Nel 1993, quando è stato bloccato lo sviluppo di 386BSD, sono nati due progetti: NetBSD, comunemente conosciuto per la
sua capacità di funzionare su un vasto numero di architetture, e FreeBSD il
quale supporta architetture x86, amd64, ia64, sparc64 e alpha. FreeBSD è molto
apprezzato per la sua stabilità, prestazioni e sicurezza, pertanto viene
utilizzato da piccole e grandi aziende in tutto il mondo.
Al momento l'ultima release di FreeBSD è la versone 6.2. Gentoo/FreeBSD si basa
su tale versione: le vecchie versioni di Gentoo/FreeBSD non sono più sviluppate
nè supportate.
Cos'è Gentoo/FreeBSD?
Gentoo/FreeBSD è un
sottoprogetto del progetto Gentoo/Alt,
che ha l'obiettivo di fornire un sistema operativo FreeBSD completo, dotato
inoltre di alcune peculiarità progettuali tratte da Gentoo Linux, come il
sistema di init e il sistema di gestione dei pacchetti, Portage.
FreeBSD e Linux
Chi migra da Linux a FreeBSD solitamente considera i due sistemi operativi
"praticamente identici". In effetti, FreeBSD condivide molte analogie con le
distribuzioni Linux. Tuttavia vi sono alcune fondamentali differenze:
-
Contrariamente a Linux, termine che indica unicamente il kernel, FreeBSD è
un sistema operativo completo, composto da librerie C, strumenti per
l'utente e molto altro. Tale approccio allo sviluppo garantisce un sistema
generalmente molto consistente.
-
Contrariamente al kernel Linux, lo sviluppo di FreeBSD non è guidato da
una sola persona ma da un piccolo gruppo di persone chiamato il
Core Team.
Inoltre, FreeBSD ha alcune differenze tecniche che lo distinguono da Linux.
Alcune sono molto importanti da conoscere anche se non si ha intenzione di
partecipare allo sviluppo del progetto Gentoo/FreeBSD:
-
Per sfruttare le funzioni di dynamic linking tipo dlopen(), i
programmi non hanno bisogno di essere linkati alle libdl come su GNU/Linux
ma alle libc.
-
FreeBSD non ha uno strumento ufficiale per compilare il kernel, pertanto si
devono risolvere a mano le dipendenze tra le varie caratteristiche a
disposizione.
-
FreeBSD usa UFS e UFS-2 come filesystem e non supporta nativamente nè
ReiserFS nè XFS. Tuttavia ci sono progetti che hanno come scopo aggiungere
il supporto, almeno in sola lettura, a questi filesystem. E' già possibile
invece accedere a partizioni ext2 o ext3, senza però poter installare il
sistema su di esse.
2.
Installare Gentoo/FreeBSD
Effettuare il boot da CD
Dopo questa breve introduzione, è giunta finalmente l'ora di installare
Gentoo/FreeBSD. Sfortunatamente, il progetto non offre ancora un proprio CD
per l'installazione, perciò si dovrà scegliere tra 2 diversi metodi di
installazione. Il primo consiste nel partire da un'installazione preesistente di
FreeBSD per partizionare il proprio hard disk, usandola poi come base per
installare Gentoo/FreeBSD. Questa guida invece descriverà come usare il
FreeSBIE LiveCD come supporto di
installazione di Gentoo/FreeBSD.
Nota:
Se si ha intenzione di usare FreeSBIE per installare Gentoo/FreeBSD, assicurarsi
di usarne una versione basata su FreeBSD 6.x, come ad esempio FreeSBIE 2.0 (o
una delle sue release candidates). E' possibile scaricarla tramite bittorrent
mediante il tracker ufficiale del
progetto FreeSBIE.
|
Per cominciare l'installazione effettuare il boot dal CD. Ci si troverà davanti
ad una schermata di login. Il nome utente da inserire è freesbie, e non
c'è password. Una volta loggati, lanciate il comando sudo su per
diventare root, ed eventualmente impostare una password. Se si desidera passare
un po' il tempo durante il processo di installazione, si può lanciare
startx in modo da entrare nell'ambiente grafico Xfce, ideale per navigare
un po', chiaccherare tramite Instant Messaging, e così via. A differenza di
Linux, FreeBSD assegna i nomi alle interfaccie di rete a seconda del driver
usato. Ad esempio, una scheda Intel EtherExpress verrà identificata come fxp0
(driver fxp, prima interfaccia di rete). Per identificare la propria
interfaccia, usare ifconfig:
Codice 2.1: Identificare il nome dell'interfaccia di rete usando ifconfig |
# ifconfig
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet6 fe80::2d0::b7ff:febc:4fe3%fxp0 prefixlen 64 scopeid 0x1
inet 192.168.0.106 netmask 0xffffff00 broadcast 192.168.0.255
ether 00:d0:b7:bc:4f:e3
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
lo0: flags=8007<LOOPBACK,MULTICAST> mtu 16384
|
Se, durante l'avvio del CD, la richiesta iniziale DHCP è fallita, è possibile
usare il comando dhclient per ottenere un indirizzo IP:
Codice 2.2: Ottenere un indirizzo tramite DHCP mediante dhclient |
# dhclient fxp0
DHCPDISCOVER on fxp0 to 255.255.255.255 port 67 interval 9
DHCPOFFER from 192.168.0.1
DHCPREQUEST on fxp0 to 255.255.255.255 port 67
DHCPACK from 192.168.0.1
bound to 192.168.0.106 -- renewal in 302400 seconds
|
Nota:
L'output qui illustrato è puramente indicativo e potrà variare a seconda della
propria struttura di rete.
|
Partitizionare il Disco
Una volta definito il punto di mount, è il momento di partizionare il disco,
tramite il comando sysinstall :
Codice 2.3: Lanciare il comando sysinstall per preparare il disco |
# sysinstall diskPartitionEditor diskPartitionWrite
|
E' consigliabile usare le impostazioni predefinite. Premere Invio nella finestra
di dialogo, quindi premere a e poi q per accettare le impostazioni
predefinite. La prossima schermata mostrerà una finestra di dialogo con alcune
opzioni relative al bootloader. Per il momento scegliere "None": il bootloader
verrà installato in seguito. Il prossimo passo sarà invece quello di creare le
partizioni e definire i punti di mount.
Il prossimo passo richiede sempre l'uso di sysinstall, ma con diversi
parametri:
Codice 2.4: Lanciare il comando sysinstall per definire le partizioni ed i punti di mount |
# sysinstall diskLabelEditor diskLabelCommit
|
Scartare lo schema proposto e creare invece una partizione di root capiente,
seguita da una partizione di swap. Premere c per creare una nuova
partizione. Una finestra di dialogo chiederà di inserire la dimensione della
partizione. Inserirla ed andare avanti, specificando MB/GB come unità di misura,
oppure C se si inserisce la dimensione in cilindri. Specificare quindi come FS
la tipologia della partizione di root, ed indicare /mnt/ come punto
di mount. Se il punto di mount non fosse specificato correttamente,
l'ambiente FreeSBIE verrebbe sovrascritto! Dal momento che
/boot non è una partizione separata, sarà necessario disabilitare i
soft-updates, o il sistema non sarà in grado di effettuare il boot! Per
effettuare questa modifica, usare le frecce per evidenziare la partizione appena
creata, premere quindi s fino a quando "Newfs" non conterrà più
+S. Ora, sempre muovendosi con le frecce, evidenziare la prima riga,
indicante l'intero disco, e premere c nuovamente per creare la partizione
di swap. E' consigliabile creare una partizione di dimensioni doppie rispetto
alla quantità di RAM che si ha a disposizione. Scegliere SWAP come tipo di
partizione, non curandosi dei soft-updates, dato che questi non si applicano
alla swap. Per concludere il partizionamento, non rimane altro da fare che
premere q.
Avendo scelto un punto di mount diverso da / per la partizione di
root, sysinstall creerà una slice di tipo 'd', dalla quale il bootloader
non può effettuare il boot. Per correggere questa situazione eseguire il
seguente comando a partizione smontata.
Codice 2.5: Correggere la lettera della partizione di root |
# umount /mnt
# disklabel ad0s1 | sed 's/^ d:/ a:/' | disklabel -R ad0s1 /dev/stdin
# mount /dev/ad0s1a /mnt
|
Fatto ciò il processo di partizionamento sarà completato, si avrà il disco
formattato in UFS, filesystem nativo di FreeBSD, e si avrà la partizione montata
nel punto di mount specificato in precedenza (/mnt/). Per
verificare che tutto sia andato a buon fine, lanciare il comando mount:
Codice 2.6: Verificare che la partizione sia stata montata tramite mount |
# mount
...
/dev/ad0s1a on /mnt (ufs, local)
|
Ora che la partizione è stata montata, passare all'installazione vera e propria.
Installazione di Gentoo
Innanzitutto bisogna scaricare un archivio contenente lo stage3 e scompattarlo
nell'ambiente chroot. Puntare il browser su
http://gentoo.osuosl.org/experimental/x86/freebsd/stages/, scaricare
lo snapshot più recente e decomprimerlo nel punto di mount:
Codice 2.7: Scaricare e decomprimere l'archivio dello stage3 |
# cd /mnt/
# wget http://gentoo.osuosl.org/experimental/x86/freebsd/stages/stage3-x86-freebsd-6.2-r1.tar.bz2
# tar -jxvpf stage3-x86-freebsd-6.2-r1.tar.bz2
# rm stage3-x86-freebsd-6.2-r1.tar.bz2
|
Nota:
E' possibile utilizzare l'overlay di transizione che contiene ebuild
semi-sperimentali con patch non ancora presenti nel Portage tree, che aumentano
la base dei pacchetti installabili. Per approfondimenti fare riferimento alla
documentazione dell'overlay del progetto Gentoo/ALT. Attenzione: l'overlay
non è affatto necessario per installare ed usare Gentoo/FreeBSD.
|
Perchè l'installazione abbia successo, la directory /dev del
sistema attualmente in uso va montata nel punto di mount dentro Gentoo/FreeBSD,
prima di effettuare il chroot.
Codice 2.8: Montaggio del filesystem sotto /dev e chrooting |
# mount -t devfs none /mnt/dev/
# cp /etc/resolv.conf /mnt/etc/
# chroot /mnt/ /bin/bash
# env-update && source /etc/profile
|
Dopo aver fatto eventualmente il sync con l'overlay di Gentoo/FreeBSD, collegare
/etc/make.profile al profilo corretto e modificare il file
/etc/make.conf con le impostazioni per Gentoo/FreeBSD.
Scaricare quindi una copia del Portage tree. A seconda della propria connessione
questa operazione potrebbe impiegare più o meno tempo.
Codice 2.9: Scaricare l'alberatura di Portage |
# emerge --sync
# cd /
# wget http://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2
# tar -xjf portage-latest.tar.bz2 -C /usr/
# rm portage-latest.tar.bz2
# emerge --metadata
|
Codice 2.10: Impostare il profilo e modificare /etc/make.conf |
# ln -sf /usr/portage/profiles/default-bsd/fbsd/6.2/x86/ /etc/make.profile
# nano /etc/make.conf
CHOST="i686-gentoo-freebsd6.2"
FEATURES="collision-protect"
|
Nota:
La keyword ~x86-fbsd non copre in modo completo tutto il Portage tree
come ~x86, tuttavia NON IMPOSTARE MAI la keyword ~x86 in
ACCEPT_KEYWORDS. Meglio usare /etc/portage/package.keywords per
testare i singoli pacchetti. Riportare poi i pacchetti funzionanti su Bugzilla.
|
Se lo si desidera, ora è possibile ricompilare i pacchetti basilari di sistema.
Codice 2.11: Ricompilare i pacchetti basilari di FreeBSD (opzionale) |
# emerge -e system
|
3.
Configurazione per il Boot
Impostare il fuso orario (Timezone)
Assicurarsi che la data e l'ora del sistema siano corrette usando date
yyyymmddHHMM. Indicare l'ora nel formato UTC.
Codice 3.1: Impostare la data e l'ora in formato UTC |
# date
Mon Mar 6 00:14:13 UTC 2006
# date 200603060016
Mon Mar 6 00:16:00 UTC 2006
|
Ora, impostare il proprio fuso orario (timezone) usando il file adeguato
presente in /usr/share/zoneinfo.
Codice 3.2: Impostare il proprio fuso orario |
# ls /usr/share/zoneinfo
# cp /usr/share/zoneinfo/Europe/Brussels /etc/localtime
# date
Wed Mar 8 00:46:05 CET 2006
|
Modificare /etc/conf.d/clock in modo da rispecchiare il fuso orario
scelto.
Codice 3.3: Modificare il file /etc/conf.d/clock |
# nano -w /etc/conf.d/clock
TIMEZONE="Europe/Brussels"
|
Installazione del Kernel
Se in precedenza è stato eseguito emerge -e system, i sorgenti del kernel
FreeBSD saranno già stati installati in /usr/src/sys. Se invece
quel passaggio è stato omesso, è possibile installarli così:
Codice 3.4: Ottenere i sorgenti del kernel FreeBSD |
# emerge freebsd-sources
|
Configurare ed installare un kernel personalizzato su FreeBSD è abbastanza
diverso dal compilarne uno su Linux: se tale operazione non è familiare al
lettore, si suggerisce la lettura del
capitolo 8 del manuale di FreeBSD. Per il momento è sufficiente installare
il kernel GENERIC, che funziona sulla maggior parte dei sistemi. Per cominciare,
posizionarsi nella directory dei sorgenti del kernel:
Importante:
Al momento su Gentoo/FreeBSD viene supportata solo la modalità "Tradizionale" di
compilazione del kernel!
|
Codice 3.5: Spostarsi nella directory dei sorgenti del kernel |
# cd /usr/src/sys/
|
Al suo interno, notare le diverse architetture con le rispettive sottodirectory
per le diverse parti del kernel. Per cominciare con l'installazione, spostarsi
nella directory i386/conf/:
Codice 3.6: Spostarsi nella directory di configurazione del kernel |
# cd i386/conf/
# ls
.cvsignore GENERIC Makefile PAE
DEFAULTS GENERIC.hints NOTES SMP
|
I file di interesse sono GENERIC e GENERIC.hints.
Copiare il file GENERIC.hints, necessario per l'installazione del
kernel, in /boot/device.hints:
Codice 3.7: Copiare il file GENERIC.hints |
# cp GENERIC.hints /boot/device.hints
|
Questo file è usato dai driver del kernel per ottenere delle semplici
informazioni di configurazione come le impostazioni di IRQ. Procedere quindi con
la configurazione del kernel. FreeBSD usa il comando config per questo
scopo. config legge da un file specificato (in questo caso GENERIC) quali
sono i file da compilare che devono essere copiati nella directory
compile, quest'ultima presente nel livello immediatamente superiore
del filesystem. GENERIC è simile al file .config per
il kernel Linux. Eseguire config per generare la directory di
compilazione:
Codice 3.8: Configurazione dell'ambiente di compilazione del kernel |
# config GENERIC
Kernel build directory is ../compile/GENERIC
Don't forget to ''make cleandepend; make depend''
|
config ha creato in automatico una directory di compilazione chiamata
GENERIC. Spostarsi dentro quest'ultima, ed eseguire successivamente i seguenti
comandi per effettuare una compilazione completa:
Codice 3.9: Compilare ed installare il kernel |
# cd ../compile/GENERIC
# make cleandepend && make depend && make && make install
|
Fatto ciò si avrà un kernel completamente funzionante. Ora si dovrà installare
il bootloader per permettere al kernel di effettuare il boot. Il prossimo
capitolo tratterà dei due bootloader che si hanno a disposizione: boot0 e
grub.
Configurazione del bootloader (boot0)
Importante:
boot0 è il bootloader di FreeBSD. In passato è stato l'unico bootloader
supportato finchè una versione di grub con il supporto alle slice UFS non
è stato inserito tra i ports. Per installare e configurare boot0,
eseguire i seguenti comandi. Ricordarsarsi di sostituire a adXsY il
numero del proprio disco e della propria slice.
|
Codice 3.10: Installazione e configurazione di boot0 |
# emerge boot0
# exit
# fdisk -B -b /mnt/boot/boot0 /dev/adX
# chroot /mnt/ /bin/bash
# disklabel -B adXsY
|
Se si ha bisogno di ulteriori informazioni sulla configurazione di boot0,
consultare il
capitolo 12 del manuale di FreeBSD. Ora non rimane altro da fare che
qualche veloce modifica ad alcuni file di configurazione del sistema.
La prossima parte illustrerà l'uso di grub, il bootloader alternativo.
Configurazione del bootloader (grub)
A partire dalla versione 0.97-r1, grub è in grado di leggere slice UFS.
Questo permette di usare grub come bootloader, scelta preferita dagli
utenti Linux. Per cominciare, emergere grub e configurare la label della
slice come bootabile. Ricordarsi di sostituire a adXsY il numero del
proprio disco e della propria slice.
Codice 3.11: Installazione di grub |
# emerge grub
# disklabel -B adXsY
|
Ora lanciare grub per entrare nel prompt dei comandi e configurare la
partizione come segue:
Codice 3.12: Configurazione di grub |
# sysctl kern.geom.debugflags=16
# grub
grub> root (hd0,0,d)
Filesystem type is ufs2, partition type 0xa5
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/ufs2_stage1_5" exists... yes
Running "embed /boot/grub/ufs2_stage1_5 (hd0)"... 14 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+14 p (hd0,0,d)/boot/grub/stage
2 /boot/grub/menu.lst"... succeeded
Done.
grub> quit
|
Per permettere al loader di trovare il kernel su una specifica slice (viene
cercato come impostazione predefinita solo nella slice 'a') aggiungere la
seguente riga vfs.root.mountfrom al file /boot/loader.conf:
Codice 3.13: Così il bootloader cercarà il kernel nella slice d |
# echo 'vfs.root.mountfrom="ufs:ad0s1d"' >> /boot/loader.conf
|
La prima volta che si farà bootare il sistema, potrebbe accadere che il menù di
grub non venga mostrato. Se ciò dovesse accadere, eseguire i seguenti comandi al
prompt:
Codice 3.14: In caso di boot senza menù |
grub> find /boot/grub/stage1
(hd0,0,d)
grub> kernel (hd0,0,d)/boot/loader
[FreeBSD-a.out, loadaddr=0x200000, text=0x1000, data=0x3a000, bss=0x0, entry=0x200000]
grub> boot
|
Nota:
Per maggiori informazione su come configurare grub, fare riferimento al Manuale di
Gentoo Linux.
|
Avvertenza:
Grub non è in grado di seguire i link simbolici di UFS: assicurarsi perciò di
cancellare il link /boot/grub/menu.lst e di usare
menu.lst per la configurazione di Grub (grub.conf non
è usato).
|
Configurazione del Sistema
Per prima cosa impostare i vari mount point in /etc/fstab.
Codice 3.15: Configurare i filesystem in /etc/fstab |
# nano /etc/fstab
#Device Mountpoint Fstype Options Dump Pass
/dev/adXsYb none swap sw 0 0
/dev/adXsYa / ufs rw 1 1
/dev/adXsYe /usr/home ufs rw 2 2
/dev/adXsYd /tmp ufs rw 2 2
/dev/acdX /cdrom cd9660 ro,noauto 0 0
|
Prima del riavvio è opportuno configurare la propria connessione di rete. E'
possibile trovare tutte le informazioni a riguardo nel Manuale di Gentoo
Linux. Aggiungere al runlevel di default l'interfaccia di rete appena
configurata così da attivarla automaticamente al boot:
Codice 3.16: Aggiungere la scheda di rete al runlevel di default |
# rc-update add net.fxp0 default
|
E' possibile impostare l'hostname del proprio sistema modificando il file
/etc/conf.d/hostname.
Codice 3.17: Impostare l'hostname del sistema |
# nano /etc/conf.d/hostname
HOSTNAME="tux"
|
Se si necessita di un nome di dominio, specificarlo nel file
/etc/conf.d/domainname :
Codice 3.18: Impostare il nome di dominio |
# nano /etc/conf.d/domainname
dns_domain_lo="homenetwork"
|
Se si utilizza un dominio NIS (se non si sa cosa sia la risposta è no), è
necessario specificarlo nel file /etc/conf.d/domainname :
Codice 3.19: Impostare il nome di dominio NIS |
# nano /etc/conf.d/domainname
nis_domain_lo="my-nisdomain"
|
Nota:
Per maggiori informazioni su nomi di dominio e sulle reti, fare riferimento al
Manuale di
Gentoo Linux, e leggere anche la documentazione presente nel file
/etc/conf.d/net.example.
|
Nel caso in cui si debba usare un'altro layout della tastiera per la propria
lingua, va impostato il valore corretto nel file
/etc/conf.d/syscons. L'esempio seguente mostra l'uso del layout
spagnolo, modificare opportunamente le impostazioni a seconda delle proprie
esigenze.
Codice 3.20: Cambiare il layout della tastiera (Facoltativo) |
# nano /etc/conf.d/syscons
KEYMAP="spanish.iso.acc"
|
A questo punto è buona cosa impostare la password per l'utente root e
aggiungere un altro account utente per il lavoro quotidiano.
Codice 3.21: Cambiare la password di root e aggiungere un nuovo utente |
# passwd
# adduser
Username: fred
Full Name: Fred Smith
Uid (Leave empty for default):
Login group [fred]:
Login group is fred. Invite fred into other groups? []: wheel portage
Login class [default]:
Shell (sh bash tcsh csh esh ksh zsh sash nologin) [sh] bash
User password-based authentication [yes]
Use an empty password (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password: password goes here
Enter password again: retype it
Lock out the account after creation? [no]:
Username : fred
Password : *****
Full Name : Fred Smith
Uid : 1002
Class :
Groups : fred wheel portage
Home : /home/fred
Shell : /bin/bash
Locked : no
OK? (yes/no): yes
adduser: INFO: Sucessfully added (fred) to the user database
Add another user? (yes/no): no
Goodbye!
#
|
Congratulazioni, l'installazione della propria Gentoo/FreeBSD è terminata, si
potrà cominciare ad esplorarla dopo aver riavviato il sistema. Buon
divertimento!
Codice 3.22: Riavviare il sistema |
# exit
# reboot
|
4.
Sviluppare per Gentoo/FreeBSD
Come dare una mano
Ci sono molti modi attraverso cui si può contribuire, a seconda delle proprie
capacità e del proprio tempo libero:
-
Manutenzione sugli ebuild: ciò significa lavorare a stretto contatto con i
mantenitori degli ebuid, creando patch o modicando ebuild così da renderli
pronti per il portage tree ufficiale.
-
Sicurezza: Anche se gli advisory di sicurezza segnalati dal progetto FreeBSD
vengano tracciati e corretti, può essere sempre utile avere un mano in
quest'area.
-
Contatti: c'è bisogno di persone che mantengano i contatti tra gli
sviluppatori del progetto originario e quelli di Gentoo/FreeBSD, per
scambiare patch, discutere dei problemi riscontrati e confrontarne le
rispettive soluzioni. Attenzione: con ciò non si intende spammare su
mailing list o canali IRC.
-
Testing: più persone usano attivamente Gentoo/FreeBSD, più bug saranno
scoperti, a tutto vantaggio della qualità del progetto. Persone abili e
precise nel descrivere malfunzionamenti o problemi saranno di grande aiuto.
-
Altri ambiti dove c'è bisogno di una mano sono: gli ebuild di sistema, la
creazione dei CD di installazione, la documentazione, sviluppo del kernel.
Problemi Noti
Al momento sono presenti alcuni problemi noti. Qui di seguito sono elencati
quelli degni di nota:
-
Alcuni script di init hanno come dipendenza il servizio clock il quale non è
ancora disponibile su Gentoo/FreeBSD. E' possibile rimuovere senza problemi
tale dipendenza dagli script di init e riportare la cosa sul Bugzilla di Gentoo. Specificare sempre
"Gentoo/Alt" come progetto di riferimento per ogni bug report che si aprirà.
5.
Contatti
Una lista di sviluppatori di Gentoo/FreeBSD può essere trovata sulla pagina del progetto. Altri modi per
contattare gli sviluppatori sono tramite il canale IRC #gentoo-bsd su
Freenode, o tramite la mailing list gentoo-bsd
.
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|