FreeBSD come desktop OS

Di Gianluca Sordiglioni
Gruppo Utenti FreeBSD Italia (GUFI)
inzet at gufi dot org
30/11/2001

La versione più recente di questo documento si trova alla URL http://www.gufi.org/~inzet/articoli/freebsd_workstation.html
L'autore si riserva tutti i diritti e ne ammette la pubblicazione in quasiasi forma solo con autorizzazione.

Premessa

È possibile utilizzare FreeBSD come sistema operativo principale del proprio personal computer? Certamente, ma non è semplice configurarlo.
A differenza di altri sistemi operativi, FreeBSD nasce come sistema operativo per server: l'attenzione verso l'utente ed in particolare verso tutto ciò che necessita di una interfaccia grafica è generalmente scarsa.
Questa scarsa attenzione porta ad un maggior lavoro di configurazione perchè, come si dice, non si trova mai la "pappa pronta". Allora perchè usare FreeBSD invece di altri Unix o altri sistemi operativi più "comodi"?
In primo luogo, perchè sotto l'apparente complessità di FreeBSD si cela un sistema operativo logico, prevedibile e quindi semplice da configurare una volta compresi pochi concetti fondamentali.
In secondo luogo per gli obiettivi di progetto: FreeBSD è stato progettato per essere efficiente.
In terzo luogo, credo che il motivo principale risieda proprio nel non trovarsi tutto pronto: vi è ancora un tocco personale alla configurazione del sistema che appaga di tutte le fatiche. È facile copiare un file eseguibile e vedere che va, ma non è soddisfacente come compilarlo, testarlo con diverse opzioni, verificarlo, rigirarlo a piacimento e vederlo funzionare. Le considerazioni esposte poch'anzi valgono sia per l'hobbista che per il professionista.

Questo documento descrive il mio sistema e, a grandi linee, come ho risolto le mie esigenze di utente desktop: non è una guida esaustiva alla configurazione di FreeBSD, nè un manuale online. Consultate i rispettivi manuali delle applicazioni e l'handbook di FreeBSD se avete dei dubbi.
Si presuppone una discreta conoscenza di FreeBSD da parte le lettore.

AVVERTENZA: data la velocità di evoluzione di questo settore, alcune informazioni potrebbero risultare obsolete o incorrette.

Indice

L'hardware

Si tratta di un assemblato composto da motherboard Asus A7V, 128MB di RAM PC100, processore AMD K7 (Athlon) a 500 Mhz, scheda grafica ATI All-In-Wonder 128, scheda audio Creative SoundBlaster Live! 1024, DVD-ROM Creative 6x, controller SCSI Adaptec 29160 Ultra160 LVD, disco rigido Fujitsu 18GB Ultra 160, LS120 (SuperDisk), removibile Jaz 1GB SCSI2, tastiera italiana AST, Logitech Cordless Wheel Mouse PS/2, TA ISDN Motorola BitSurfr Pro.
L'hardware non è nuovissimo, ma è di qualità e ben supportato. Il software è ottimizzato e adattato a questa configurazione, dal kernel alle applicazioni.

Ne risulta un sistema equilibrato, senza particolari velleità velocistiche ma stabile perchè costruito con componenti di qualità : l'ideale per una workstation per la produttività quotidiana.

Il sistema operativo

A titolo di esempio fornisco alcuni file di configurazione fondamentali del mio sistema che risultano molto utili come esempi per configurare ex-novo una workstation FreeBSD.

Files di configurazione
/sys/i386/conf/PLUTO Il file di configurazione del kernel. Cambiate il filename PLUTO con il nome della vostra macchina e editate alla riga ident
/etc/rc.conf Opzioni di sistema
/etc/make.conf Opzioni di compilazione
/usr/local/etc/cvsup/doc Aggiorna /usr/doc
/usr/local/etc/cvsup/ports Aggiorna /usr/ports
/usr/local/etc/cvsup/src-all Aggiorna /usr/src
/usr/sup/refuse Istruisce cvsup a non aggiornare alcune directory di sorgenti, documentazione o port che ritengo non necessari
~/.cshrc Configurazione del terminale utente usando la shell tcsh; con colori e autocompletamento comandi (da rinominare in .cshrc)
/etc/ppp/ppp.conf Per collegarsi ad Internet via modem
/etc/hosts Definisce host noti, tra cui la macchina stessa
/etc/X11/XF86Config Configurazione di Xfree86

Ribadisco che si tratta di file di configurazione customizzati per la mia macchina e quindi non devono essere copiati nella directory di appartenenza senza averli prima opportunamente modificati secondo le vostre esigenze. Come sempre, l'handbook e il comando man sono i vostri migliori consulenti.

Aggiornare il sistema

Per non avere problemi è fondamentale portare il sistema in -STABLE secondo la procedura descritta al capitolo 19 dell'handbook o seguendo le istruzioni fornite da Gianmarco Giovannelli nel suo articolo. Se avete utilizzato come esempio la mia configurazione basta collegarvi ad Internet e battere i comandi:
cd /usr/src
make update
La mia procedura differisce lievemente da quella di Gianmarco: prevede l'aggiornamento dei sorgenti, dell'albero dei port e della documentazione riferendosi ad un server mirror poco trafficato situato in Germania; utilizza inoltre un differente schema per accedere ai file di configurazione.

Preparare il kernel

Prima di ricompilare il sistema con make world è necessario creare un file di configurazione del kernel e modificare, se li avete usati, i miei file di esempio.
Rinominate PLUTO nel nome della vostra macchina .
In /etc/make.conf modificate KERNCONF=PLUTO ed eventualmente CPUTYPE=pentiumpro se avete un Pentium II, Pro, III o IV (man gcc vi sarà di aiuto per conoscere le opzioni dei specifici processori supportati).

Ricompilare il sistema

Per ricompilare e ottimizzare il sistema seguite la procedura per il make world descritta nell'handbook, capitolo 19.
In breve:

fsck -p
mount -u /
mount -a -t ufs
swapon -a
cd /usr/obj
chflags -R noschg *
rm -rf *
cd /usr/src
make -j4 buildworld
make -j4 buildkernel
make -j4 installkernel
make -j4 installworld
mergemaster
ed infine reboot.
Se qualcosa va storto provate a levare l'opzione -j4 e riprovate.

Aggiornare i port

Se avete seguito la procedura di aggiornamento dei sorgenti descritta nel paragrafo precedente, vi ritrovate l'albero dei port aggiornato. Se non volete aggiornare i sorgenti e vi interessa soltanto avere l'ultima versione dei port, andate in cd /usr/ports e eseguite make update.
Per ricostruire l'indice dei port /usr/ports/INDEX, in /usr/ports date make index, ma di solito non è necessario perchè se aggiornate tutto l'albero dei port questo file viene scaricato e aggiornato di conseguenza.
Per verificare quali port necessitano di essere aggiornati, pkg_version -L\=.
Capita a volte di avere installate due versioni dello stesso port, o volere aggiornare un port specifico. Consiglio di installare /usr/ports/sysutils/portupgrade. Per verificare il database eseguite pkgdb -F e per aggiornare tutti i port installati all'ultima versione eseguite portupgrade -ar da root.
Una buona documentazione ed altri comandi relativi ai tool distribuiti con portupgrade la trovate su http://www.onlamp.com/pub/a/bsd/2001/11/29/Big_Scary_Daemons.html e su http://www.freebsddiary.org/portupgrade.php

Connessioni

In /etc/hosts modificate 'pluto' e 'pluto.paperopoli.org' con le vostre preferenze. Se non disponete di un dominio potete metterne uno di fantasia, come ho fatto io. Per informazioni aggiuntive sulle opzioni del kernel consultate il file /sys/i386/conf/LINT e il capitolo 9 dell'handbook.

Per usare ppp via modem modificate /etc/ppp/ppp.conf aggiungendo il numero di telefono del provider, username e password. Aggiungevi al gruppo dialer in /etc/group accodando la login sul vostro sistema.
Da notare che il file /etc/resolv.conf viene riscritto ad ogni connessione dal ppp: non modificatelo, sarebbe un lavoro inutile.
Per collegarvi al provider usate il comando

ppp -auto internet

Per usare un modem ADSL o un modem-router vi sono molti articoli su Internet, a cominciare da un articolo di Gianmarco Giovannelli.

Silo overflow

In alcuni sistemi capita di vedere sulla console questo fastidioso messaggio di errore.
Cito qui la soluzione di Allen Campbell:

Date:      Fri, 15 Sep 2000 22:38:19 -0600
From:      Allen Campbell 
To:        Joseph Jacobson 
Cc:        freebsd-stable@FreeBSD.ORG
Subject:   Re: silo overflow

Joseph Jacobson wrote:
>
> Just got this error, doing a 'make fetch' over ppp, while running mpg123.
> Kernel config can be provided if needed.
>
> sio0: 1 more silo overflow (total 1)
> sio0: 1 more silo overflow (total 2)
> sio0: 1 more silo overflow (total 3)
> sio0: 1 more silo overflow (total 4)
> sio0: 1 more silo overflow (total 5)
> sio0: 1 more silo overflow (total 6)

This is a frequently reported problem.  It is, for the most part,
harmless.  You will find an abundance of history by searching the mail
archives.  Apparently some recent changes involving 'fast' interrupt
handling will cause FreeBSD to neglect a serial port for a bit too long,
and incoming data isn't read from the device before it is lost.

The following patch seems to help.  It lowers the fifo threshold a bit
causing more frequent reads from the device.  It also increases
interrupt frequency which, to some, seems rather tragic.  I've never
felt any pain as a result of 'too many' interrupts from a serial port,
but I like not getting the silo overflows.  This hack isn't Right(tm),
but it does work.

--- sio.c.orig  Wed Aug 16 09:29:34 2000
+++ sio.c       Fri Sep  1 14:53:47 2000
@@ -2345,7 +2345,7 @@
                 * latencies are larger.
                 */
                com->fifo_image = t->c_ospeed <= 4800
-                                 ? FIFO_ENABLE : FIFO_ENABLE |
FIFO_RX_HIGH;
+                                 ? FIFO_ENABLE : FIFO_ENABLE |
FIFO_RX_MEDH;
 #ifdef COM_ESP
                /*
                 * The Hayes ESP card needs the fifo DMA mode bit set

No promises about whether this patch will apply to your version of
src/sys/isa/sio.c.  I usually just change the one line by hand.

Orologio

Per sincronizzare la data e l'ora usate il comando:
ntpdate tempo.ien.it
dove tempo.ien.it è il sito dell'Istituto Galileo Ferraris di Torino. Potete specificare un qualsiasi altro time server, ovviamente.

Potete aggiungere questo comando in /etc/crontab ed eseguirlo periodicamente se siete collegati permantemente ad Internet, altrimenti potete sfruttare il ppp e lanciare automaticamente il comando ogni volta che vi collegate. Aggiugete in /etc/ppp/ppp.linkup la riga:

MYADDR:
 !bg ntpdate tempo.ien.it

XFree86

Se si vuole installare una interfaccia grafica sotto Unix la tendenza comune è utilizzare le specifiche del protocollo grafico X: alcuni produttori di Unix, come Apple su OSX, hanno sviluppato protocolli alternativi altrettanto validi ma, sfortunatamente, proprietari.
: XFree86 è una implementazione gratuita del protocollo X che gira praticamente su qualsiasi macchina Unix e non. È una implementazione in costante evoluzione e l'ultima versione, la 4.2 nel dicembre 2001, non è affatto male.
Vi sono alternative commerciali quali www.xig.com e www.metrolink.com che offrono una maggiore aderenza allo standard e driver accellerati specifici per particolari schede video, ma io non ne ho esperienza.

In passato per interagire con X era disponibile solo qualche scarno Window Manager, ma da qualche anno a questa parte sono disponibili ambienti completi, KDE e Gnome in primis, che hanno il vantaggio di offrire un ambiente integrato con una interfaccia uniforme per le applicazioni. Questi ambienti stanno via via diventando sempre piè potenti, facili da installare e da usare, tanto da competere con i migliori sistemi operativi grafici e, a mio avviso, superarli in personalizzazione. Sono disponibili anche per FreeBSD e li trovate in /usr/ports/x11. Personalmente uso KDE (/usr/ports/x11/kde2) perchè trovo che sia l'ambiente più pulito, sviluppato principalmente in Europa, con codice non Linux-centrico molto portabile e stabile.
A molti puristi questo ambiente non piace perche' utilizza molte risorse di sistema, ma io non sono un purista e non mi interessa se il mio Athlon 500 perde qualche ciclo di clock per l'interfaccia grafica o spreca qualche MB di RAM. Riconosco che KDE non è un missile ma a me pare sufficiententemente veloce. Purtroppo la relativa lentezza è un problema che affligge XFree86 in generale, dovuta alla scarsa ottimizzazione dei driver video per mancanza di specifiche rilasciate dai costruttori.


Per installare la KDE, prima dovete installate XFree86. Rispondete YES a tutte le domande se non sapete cosa fare.

cd /usr/ports/x11/XFree86-4
make install
cd /usr/ports/x11/kde2
make install
A questo punto modificate il file .xinitrc e aggiungete
imwheel &
exec startkde

Mouse con rotella

Per abilitare il mouse si aggiunge a /etc/rc.conf l'opzione moused_enable="YES" e nel vostro .xinitrc aggiungete come prima riga imwheel & (l'ampersand [&] finale serve per eseguire il comando in background e non bloccare il flusso dello script). Per sfruttare la rotella centrale utilizzandola come controllo di scorrimento, bisogna aggiungere anche l'opzione moused_flags="-z 4" e alcune opzioni in /etc/X11/XF86Config ; per dettagli vedere i miei file di configurazione o l'handbook, che contiene una sezione apposita sull'argomento. I flag appena descritti assegnano alla rotella il controllo dell'asse Z. Installando il port /usr/ports/x11/imwheel i movimenti rilevati sull'asse Z vengono tradotti in pageup/pagedown, ovvero come se si fossero premuti i tasti, ottenendo l'effetto di scorrimento desiderato. Non sarà uno scorrimento dal movimento fluido come visto su altri sistemi, ma funziona.

cd /usr/ports/x11/imwheel

make install
cd /dev
ln -s sysmouse mouse

Talvolta capita che all'avvio del sistema il demone moused non venga inizializzato correttamente: muovendo il mouse si comporta come se fosse impazzito. Per riportarlo alla ragione eseguite questo comando da root:

kill -HUP `cat /var/run/moused.pid`
Notare gli apici obliqui. Il problema può essere parzialmente risolto aggiungendo al file di configurazione del kernel /sys/i386/conf/PLUTO degli appositi flag al device del mouse che disabilitino il controllo del sincronismo. Per maggiori informazioni, man psm.
Per configurare il driver in modo da usare la massima risoluzione (bit 0..3), nessun check del sincronismo (bit 8) e lasciare gli altri parametri al valore di default, la riga :
device          psm0    at atkbdc? irq 12
va modificata in
device          psm0    at atkbdc? irq 12 flags 0x104

Partire con interfaccia grafica

L'interfaccia grafica ha diversi vantaggi anche per l'utente abituato alle interfaccie testuali, se non altro perchè è disponibile una maggiore risoluzione e si possono visualizzare più colonne sul terminale. Per partire direttamente in questa modalità dovete prima installare XFree86 e ovviamente configurarlo, dopodichè modificate /etc/ttys e modificare la riga

ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off  secure
In
ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   on  secure

Nei ports sono disponibili diversi login manager se xdm non incontra i vostri gusti.
Una volta che siete nel vostro ambiente grafico e lanciate il programma di terminale (nella KDE, Konsole) noterete che alcuni tasti non corrispondono. Per esempio se editate un file con vi i tasti pageup/pagedown non funzionano. Il motivo risiede nel fatto che il terminale di default è cons25 mentre voi state usando xterm. Per cambiare terminale eseguite da shell:
set term=xterm-color
Questo settaggio dura solo il tempo della sessione in corso.
Visto che uso sempre XFree86 e quasi mai l'interfaccia a carattere, ho preferito rendere il settaggio definitivo modificando il mio file .cshrc nella mia home directory aggiungendo:
setenv  TERM            xterm-color

Porre il tipo di terminale a xterm-color ha anche il vantaggio di permettere la visualizzazione a colori del terminale previa impostazione della shell (settaggi CLICOLOR nel mio file .cshrc). È possibile utilizzare xterm al posto di xterm-color, ma non saranno visualizzati i colori.

Tempo fa ero solito collegarmi sempre in modo testo e battere startx per far partire XFree86. Dalla versione 4 in poi il server X gira come root e si è reso necessario installare un wrapper dai port (/usr/ports/x11/wrapper) per far partire X come utente. Questa soluzione solleva importanti questioni sulla sicurezza ed è anche in virtù di queste ragioni che ho deciso di usare xdm per partire direttamente in modalità grafica e chiedere login/password. Inizialmente non riuscivo a collegarmi come utente ma poi ho scoperto che non doveva essere installato il wrapper.

Per rimuoverlo:

cd /usr/ports/x11/wrapper

make deinstall

Ottimizzare XFree86

Ottimizzare XFree86 significa abilitare alcune estensioni che permettono una gestione più efficiente di stream di dati. Tra queste le più importanti sono:
Direct Rendering Interface (DRI) - implementa l'accellerazione grafica 3D in hardware. Giochi e OpenGL ne traggono benefici enormi.
DGA - permette alle applicazioni un accesso diretto al frame buffer della scheda video. Alcune API che effettuano direttamente il rendering, come OpenGL, possono avere un accesso completo all'hardware senza richiedere l'utilizzo di una ulteriore API.
XVideo (Xv) - gestisce le schede video per ogni display X in modo trasparente all'applicazione, determinando quali risorse video sono disponibili. È un componente importantissimo e dovrebbe essere abilitato. Per sapere se è attivo, usare il comando xvinfo.
Driver video - è importante specificare il corretto driver per la propria scheda grafica per ottenere il massimo delle prestazioni. La mia ATI All-In-Wonder 128 funziona anche con il driver 'vga' ma consiglio di usare il driver 'r128'. Il driver ati.2 contiene accellerazioni supplementari per TV e DVD sviluppate dal progetto GATOS ma ora dovrebbe essere stato integrato in r128.

Sono possibili diverse personalizzazioni di X anche se io non ne sento il bisogno. In questa pagina trovate il .Xdefaults di Gianmarco Giovannelli che potete usare come punto di partenza.

Internet

Browser

La KDE fornisce tutto il supporto per Internet senza installare nessuna applicazione aggiuntiva. Per collegarsi si può usare KPPP e come browser si può usare Konqueror, lo stesso browser utilizzato per navigare tra i file locali. Questa integrazione tra file browser e internet browser è molto comoda, veloce e funziona particolarmente bene. Il rendering delle pagine è completo e non soffre più delle limitazioni del passato quando non supportava frame e JavaScript.
Nonostante queste belle cose io rimango fedele al ppp di FreeBSD perchè è completo, efficiente, stabile; a Netscape perchè lo trovo su tutti i sistemi e mi permette di trasportare senza problemi la posta e i file di configurazione da una piattaforma all'altra. Purtroppo Netscape non supporta più FreeBSD: il Communicator è fermo alla versione 4.7 ed è marcato Forbidden quando si tenta di installarlo. Per installare Netscape 4.79 o Netscape 6 bisogna usare la versione Linux, che funziona bene ed ha il vantaggio di poter usare i plug-in scritti per Linux, così mi sono rassegnato. I plug-ins non mi interessano, ma effettivamente per Linux ce ne sono parecchi: uno tra tutti, RealAudio. Date uno sguardo in /usr/ports/www/

Squid + AdZap

Squid è un proxy http e ftp e risulta molto comodo per velocizzare la navigazione quando si à collegati via modem. Le immagini e le pagine più comuni sono prese dalla sua cache non sprecando banda preziosa.
Squid ha anche la capacità di filtrare ciò che passa dal proxy, così si può usarlo in modo creativo applicando dei filtri che eliminano quei fastidiosi banner pubblicitari che sono pure pesantissimi e consumano banda quando si è collegati via modem. Per saperne di più leggete le mie note sull'argomento.
Dopo aver installato Squid, su Netscape andate in Edit->Preferences->Advanced->Proxies e scegliete Manual Proxy Configuration: alla voce HTTP mettete localhost sulla porta 3128.

Multimedia

Suono

A seconda del tipo di scheda audio vi sono diversi driver disponibili: in /sys/i386/conf/LINT trovate parecchie descrizioni. Consiglio tuttavia di provare il driver newpcm di Luigi Rizzo. Nel vostro file del kernel in /sys/i386/conf/PLUTO aggiungete device pcm . Per sapere lo stato del driver, da shell battete cat /dev/sndstat .
Può essere necessario creare i seguenti link simbolici:

cd /dev
ln -s dsp0 dsp
ln -s dspW0.0 dspW0
ln -s dspW0 dspW
ln -s music0 music
ln -s sequencer0 sequencer
ln -s mixer0 mixer
ln -s audio0 audio0.0
ln -s audio0.0 audio

Il driver pcm supporta la maggior parte delle schede audio in commercio, comprese alcune molto vecchie. Tuttavia non aspettatevi prestazioni eccezionali con quadrifonia e simili: pcm supporta due canali stereo con codifica PCM, punto. Io ho una SoundBlaster Live! 1024, ed è uno spreco non sentire sfruttato l'hardware alla sua piena potenza. Quando rilascerai le specifiche, Creative?

Per un utilizzo che non sia sentire qualche CD, bisogna installare qualche port.
/usr/ports/audio/liba52 , conosciuto anche come audio AC-3, per l'audio DVD
/usr/ports/audio/sdl_mixer , un mixer audio multicanale

Se non si sente alcun suono o SDL non riesce a inizializzarsi perchè trova /dev/dsp busy, probabilmente il busy (occupato) è dovuto al fatto che avete fatto partire artsd all'avvio della KDE: artsd è il sound server di default e impostato in questa modalità tiene occupato il device finchè la sessione KDE non finisce invece di lanciarsi e terminare secondo necessità. Disabilitatelo andando su KDE Control Center -> Sound -> Sound Server e disabilitate l'opzione 'Start aRts soundserver on KDE startup'. Questo dovrebbe risolvere il problema.

MP3

Una volta che l'audio funziona suonare mp3 è questione di installare qualche applicazione dai port.
Se non volete un ambiente grafico e vi piacciono le cose spartane, /usr/ports/audio/mpg123 fa per voi.
Se volete suonare gli mp3 in modalità testo e vi piacciono i menu, provate /usr/ports/audio/ksmp3play che usa le librerie courses. Questo è il mio preferito.
Se volete un player grafico potete usare quello di serie della KDE, kaiman, oppure installare /usr/ports/audio/freeamp. Quest'ultimo è molto carino, è basato su librerie GTK e sembra che faccia anche il caffè, ma quando tenta di indicizzare molti file va in crash rendendolo di fatto un programma inutilizzabile. Come al solito, invece di badare alla stabilità si guarda solo alle feature.
L'ultimo player che vi propongo è Xmms: è grafico, è carino, funziona bene. Da provare /usr/ports/audio/xmms anche in abbinamento ai diversi skin disponibili.

TV in-out-capture

Per sfruttare il tuner TV delle schede video sono necessari dei programmi che permettano di pilotare le schede. Per quanto ne so non esiste un vero e proprio standard, né esistono dei veri e propri driver del sistema operativo. Ci si riduce quindi ad usare delle applicazioni specifiche allo scopo, che per le schede ATI sono riassunte nel progetto GATOS, in particolare xavitv. Alcune informazioni aggiuntive si possono trovare nelle FAQ.

Una volta scaricati i sorgenti l'installazione risulta piuttosto semplice anche se non è stato fatto un port.

cd 
./configure
make
make install
Una applicazione più generica adatta a diversi chipset è xawtv.

QuickCam

Questo capitolo appartiene al video capture, ma io non ho mai fatto esperimenti in tal senso.

CD Audio

I CD audio hanno un normale filesystem ISO 9660 quindi basta un mount_cd9660 /dev/acd0c /mnt per montarli in /mnt. Per suonare il CD, nella KDE esiste preinstallato kscd ma qualunque programma che riesca a leggere i CD va bene. Per controllare il cd player si può usare il comando cdcontrol, nel sistema base. Munitevi di un paio di cuffie, inserite lo spinotto sul frontale e buon ascolto.

Se si intende recuperare le traccie audio bisogna installare il port /usr/ports/sysutils/cdrtools e usare cdda2wav nel seguente modo:

cdda2wav -v255 -D/dev/acd0c -S32 -x -Oraw  -E little -B
L'opzione -B inverte i byte da Big Endian a Little Endian. Per masterizzare i file appena recuperati:
burncd -s12 -f/dev/acd0c raw *.raw fixate
nel caso si abbia un masterizzatore ATAPI.

CD Video

Ogle e Xine, due programmi che trovate nei port in /usr/ports/graphics, hanno il supporto i VideoCD ma io non ne posseggo neanche uno quindi non so dire se funzionano. Mi riportano che mplayer funziona.

DVD

La visione di film in DVD con il mio sistema è improponibile: sono costretto ad usare l'Innominabile. Purtroppo per FreeBSD non esistono driver che sfruttano i chip di decompressione hardware MPEG2 della All-In-Wonder 128 (ATI mi senti?) ed un Athlon 500 è troppo lento per decodificare via software e visualizzare a 30fps uno stream MPEG2. Il massimo che ho ottenuto sono 20fps e buon audio, non sufficiente per ottenere una visione ottimale.
Dalle mailing list ho appreso che nessuno sa esattamente quale sia la velocità minima che deve avere il processore per visualizzare decentemente i DVD, ma l'idea che mi sono fatto dalle diverse persone che mi hanno risposto è che 800MHz sono sufficienti.
Non si tratta di colli di bottiglia sul DVD in DMA o altro, non fatevi abbindolare: dal DVD Player esce uno stream MPEG2 compresso, assolutamente gestibile da una interfaccia ATA: è il processore che nella maggioranza dei casi non riesce a decodificare con sufficiente rapidità l'algoritmo MPEG2.
La morale è: se volete vedere i DVD su FreeBSD e state per comprare un PC nuovo, non siate parchi di MHz! In questo caso il processore viene sfruttato al 100% ed è meglio andare sul sicuro.
Link simbolici

cd /dev
ln -s acd0c dvd
ln -s racd0c rdvd
ln -s racd0c cdrom
Per saperne di più sui DVD, leggete la faq alla URL http://eon.law.harvard.edu/openlaw/DVD/dvd-discuss-faq.html e visitate il sito OpenDVD

Per montare un DVD-RAM che contenga files e per vedere stream video non crittati con l'algoritmo css-auth, montarlo come un normale CD:

mount -t cd9660 /dev/acd0c /mnt

CSS-AUTH

Per chi volesse cimentarsi con l'algoritmo decss, disponibile qui (l'Italia è un paese civile, non esiste copyright sugli algoritmi), riassumo brevemente i passi necessari per autenticare un DVD:

mount -t cd9660 /dev/acd0c /cdrom
./tstdvd /dev/acd0c /cdrom/video_ts/vts_01_1.vob
cp title-key title1-key
cat /cdrom/video_ts/vts_01_1.vob | ./css-cat -v1P - | mplayer -
Utilizzando la libreria libdvdread.so (cd /usr/ports/graphics/libdvdread && make install) non si devono autenticare manualmente le tracce per vedere i film: se il lettore MPEG2 è predisposto questa operazione viene effettuata in automatico. I sorgenti che fornisco li ho compilati personalmente su FreeBSD, garantisco che vanno, ma hanno scopo puramente didattico in quanto scomodi da usare: ogni CD ed ogni traccia va autenticata singolarmente cambiando "vts_01_1.vob" nel numero di traccia preferito e naturalmente potete usare il player MPEG2 che volete al posto di mplayer. Se siete appassionati di crittazione e DVD, vale la pena dargli una occhiata.

Codec e formati file

QuickTime

Molti codec di questo formato sono supportati, tra cui il popolare Cinepak e Motion JPEG. Il codec Sorenson non è supportato perchè l'algoritmo è proprietario e non è stato rilasciato.
Le applicazioni usate sono Aktion, di serie nella KDE; XMovie, MPlayer e altri.

AVI

Sotto questo nome vi sono miriadi di codec, dei quali forse il più alla moda in questi giorni è il DivX. Varie applicazioni supportano l'Avi, tra cui Aktion, Avifile, MPlayer, xanim. Per il DivX bisogna installare divx4linux, nei port, oppure mplayer che utilizza le librerie win32-codecs che includono già il codec.

MPEG

È il formato più diffuso e standard. Praticamente tutte le applicazioni lo supportano.
Tra queste, Xine, Ogle e MPlayer supportano anche MPEG2.

Xine

L'installazione del port non presenta particolarità di rilievo. L'applicazione necessita di queste impostazioni da digitare da shell oppure da inserire nel file /etc/sysctl.conf

sysctl -w kern.ipc.shmmax=67108864
sysctl -w kern.ipc.shmall=32768

mplayer

Questo player supporta molti formati ed è discretamente veloce nel caricarsi e nella esecuzione. Questa è la procedura di installazione che consiglio.
- Installare singolarmente tutte le librerie dipendenti in sequenza, con gli specifici parametri di ottimizzazione: win32-codecs, svgalib, sdl, png, libaudiofile, imake, gtk, glib, gettext, freetype2, esound, aalib, XFree86, Mesa, libdvdread, libdvdcss
- cd /usr/ports/graphics/mplayer, poi installare con:

make WITH_MMX=YES WITH_3DNOW=YES WITH_DSP=YES WITH_GUI=YES WITH_SVGALIB=YES \
WITH_OPTIMIZED_CFLAGS=YES WITH_CSS=YES WITH_DVD=YES WITH_XANIM=YES WITH_VORBIS=YES install

Per vedere un DVD, date il comando mplayer -dvd 1 /dev/acd0c ma se vedete questo messaggio di errore:

libdvdread: Can't open path /dev/acd0c.
Couldn't open DVD device: /dev/acd0c
significa che avete una versione di dvdread inferiore alla 0.9.2, probabilmente la 0.8: il port ha un bug noto e va aggiornato.

Il comando:

ldd /usr/local/bin/mplayer
dovrebbe listare tra le altre librerie una stringa simile:
 ...
         libdvdread.so.2 => /usr/local/lib/libdvdread.so.2 (0x28454000)
 ...
Se così non è, va proprio aggiornato.
Una opzione non documentata e disponibile solo nelle ultimissime release di mplayer è l'opzione -cache che permette di migliorare le performance di riproduzione. Il default è 512, ma alcuni usano -cache 20480 come valore ottimale. La mia esperienza è agnostica: non ho notato nulla di diverso, ma riporto ugualmente.

Office Automation

Vi sono tre alternative per office automation su FreeBSD: StarOffice sviluppato da Sun Microsystems, OpenOffice sviluppato dalla comunità open-source, KOffice sviluppato dal team della KDE.
StarOffice 6.0 e OpenOffice 6.0 sono marcati Broken, quindi rimangono StarOffice 5.2 e KOffice 1.1. Il primo è un ambiente integrato, completo e indipendente al punto da creare un proprio desktop; il secondo è perfettamente integrato nella KDE. A seconda dei casi preferisco uno o l'altro, con leggera preferenza verso StarOffice perchè sembra più maturo, ma tengo d'occhio KOffice perchè evolve velocemente. Provateli entrambi e decidete voi stessi.
Tra i programmi stand-alone vi sono diversi spreadsheet che trovate in /usr/ports/math. Provateli, però a mio avviso sono di qualità inferiore allo spreadsheet di StarOffice come interfaccia e calcoli generici. A volte riescono a risolvere problemi specifici essendo sviluppati da matemateci o fisici: in questi casi, dateci una occhiata.
Come word processor potreste provare /usr/ports/editors/AbiWord /usr/ports/editors/wordperfect, ma io non li uso molto e non posso dare informazioni precise.
Se vi interessa soltanto visualizzare file Word provato /usr/ports/textproc/wv: converte in HTML,PDF e altri formati anche se il documento contiene figure e tabelle.

Montare altri dischi

Naturalmente una lettura a man mount non fa mai male, ma in questo caso voglio ricordare che per montare un filesystem non bisogna solo dare il comando giusto, ma bisogna avere anche il supporto nel kernel.

options  MSDOS
options  NTFS
...
Per montare un floppy o qualsiasi altro device si deve usare il filesystem corretto.
mount /dev/fd0.0.1440 /mnt monta un floppy UFS in /mnt;
mount_msdos /dev/fd0.0.1440 /mnt monta un floppy formattato MSDOS (FAT) in /mnt;
mount_msdos /dev/afd0 /mnt monta un floppy o un superdisk FAT in /mnt usando un drive superdisk.

Per l'automounting leggete questo articolo di Deamon News:
http://ezine.daemonnews.org/200202/automounting.html

Se avete una partizione FAT su un hard disk e volete utilizzarla, potete montarla per esempio con il comando mount_msdos /dev/ad0s1 /mnt oppure montarla automaticamente al boot aggiungendo in /etc/fstab la riga

/dev/da0s1c             /dos            msdos   rw,-uinzet              2       2
Le partizioni DOS non supportano i permessi di Unix, quindi il comando mount assegna di default all'utente root tutti i file e directory della partizione a meno di diversa indicazione. Con questa opzione i files avranno come owner l'utente inzet (cambiatelo con la vostra login) e vi eviterà seccature di accesso negato quando dovete scrivere all'interno.
Le partizioni NTFS dovrebbero essere montate read-only perchè il supporto in lettura-scrittura non è ancora perfetto e rischiate di danneggiare il filesystem.
/dev/da0s1c             /dos            ntfs   ro,-uinzet              0        0 
Gli ultimi due parametri dovrebbero essere a zero perchè non è necessario controllare la partizione in caso di crash: se l'avete marcata read-only, nessun file era aperto in scrittura.

Condividere i files

Netatalk

Netatalk è una implementazione del protocollo AppleTalk di Apple Computer. Si trova nei ports in /usr/ports/net/netatalk ed è composto da un client e da un server. L'ultima versione include le modifiche apportate da A. Sun che precedentemente costituivano un pacchetto separato.
La configurazione di questo port esula dallo scopo di questo documento, ma vorrei comunque aggiungere un paio di suggerimenti specifici per FreeBSD:
- montare il filesystem con l'opzione suiddir in /etc/fstab (man fstab per maggiori informazioni)
- aggiungete options SUIDDIR nel file di configurazione del kernel e modificate opportunamente i flag delle directory che volete mettere in comune tra diversi utenti (cercate in /sys/i386/conf/LINT per maggiori dettagli)
- i resource fork vengono messi in directory nascoste chiamate .AppleDouble. È opportuno che ne teniate conto se accedete alle stesse directory da un altro client che non sia un Macintosh.

Samba

Samba è un server che implementa il protocollo NetBEUI di Microsoft. Si trova nei ports in /usr/ports/net/samba.
La configurazione di questo port esula dallo scopo di questo documento.
Di sistema viene incluso il client, smbfs, che permette di montare volumi remoti da rete. È disponibile anche tra i port in /usr/ports/net/smbfs.
Per montare un volume condiviso Windows si usa il comando mount_smbfs. Per maggiori informazioni, man mount_smbfs.

Stampanti

Ci sono decine di modi per configurare le stampanti, ma sostanzialmente si deve configurare il file /etc/printcap e attivare il demone di stampa; solitamente è lpd ma esistono demoni alternativi.
Il modo più semplice è installare apsfilter.

cd /usr/ports/print/apsfilter6
make && make install clean

Una volta terminata l'installazione configurate le stampanti:
cd /usr/local/share/apsfilter
./SETUP 
Se non volete usare apsfilter, volendo ci sarebbe CUPS che ha un sacco di filtri. Da provare.

PDF

Se avete installato XFree86 viene installato xpdf, una semplice applicazione per leggere file .pdf. Se desiderate l'"originale", potete installare Acrobat Reader 4.0 , in /usr/ports/print/acroread4. Si tratta purtroppo di una versione nativa per Linux, ma se la cava bene anche in FreeBSD in emulazione.
GhostView (/usr/ports/print/ghostview) è l'interfaccia X11 di Ghostscript, un emulatore Postscript. Tra le altre cose, è in grado di leggere e visualizzare file .ps e .pdf. Lo uso ancora anche se è piuttosto datato. Una versione piè aggiornata di visualizzatore è gv, nella stessa directory print.

Giochi

Non sono un giocatore e non mi interessa molto l'argomento. Segnalo che Quake 2 è disponibile alla URL:
ftp://ftp.idsoftware.com/idstuff/source/quake2.zip
In /usr/ports/games e /usr/games trovate parecchio materiale ma attenzione: se siete dei videogiocatori forse FreeBSD non è la piattaforma che fa per voi. Compratevi una Playstation.

Emulazioni

Ci sono diversi tipi di emulazione disponibili per FreeBSD.
La più comune è sicuramente la possibilità di esecuzione di applicazioni Linux, che ricrea l'ambiente di una distribuzione Red Hat 6 o 7.
Una parziale emulazione DOS è garantita da doscmd, nel sistema base.
Una emulazione DOS più completa è fornita da pcemu, in /usr/ports/emulators/pcemu/.
L'emulazione Windows viene ottenuta installando Wine in /usr/ports/emulators/wine
L'emulazione Macintosh viene gestita da Basilisk II e vMac, rispettivamente in /usr/ports/emulators/basiliskII e /usr/ports/emulators/vMac
Molti altri emulatori sono disponibili in /usr/ports/emulators.

Sicurezza

Anche se il nostro sistema è un personal computer non significa che non sia vulnerabile agli hacker o appetibile. Si tratta pur sempre di una macchina Unix collegata ad Internet, quindi esposta ad un potenziale attaccante.
Se siete collegati permanentemente ad Internet leggete l'articolo di Stefano Riva sui firewall e le regole di accesso.
Se avete una connessione dialup, sul sito ufficiale FreeBSD trovate un articolo sull'argomento.

Ottimizzazione delle prestazioni

Come tutti i sistemi Unix, FreeBSD consente notevoli impostazioni per ottimizzare le prestazioni.
Il primo settore in cui agire è la compilazione, in modo da produrre codice altamente ottimizzato per la propria architettura. Le opzioni che ho inserito nel mio /etc/make.conf non sono che la punta dell'iceberg delle possibilità che gcc offre: naturalmente, tali raffinate impostazioni cambiano da processore a processore, quindi vi rimando al classico man gcc per i dettagli.
Il secondo punto su cui si può intervenire sono i dischi. Abilitare le SoftUpdates migliora sensibilmente le prestazioni in scrittura: consultate /usr/src/sys/ufs/ffs/README.softupdates per informazioni, oppure lanciate /stand/sysinstall e sotto Post Configuration -> FDisk abilitatele da lí. L'operazione sottintende aver smontato i volumi e aggiunto nella configurazione del kernel l'opzione SOFTUPDATES.
Il terzo punto è come i volumi vengono montati. Per esempio, un volume che contenga la cache di Squid potrebbe essere montato in modo asincrono aggiungendo l'opzione async in /etc/fstab: in caso di crash i dati vengono persi ma sono facilmente recuperabili e di contro vengono garantite ottime prestazioni in scrittura. Un altro suggerimento è di usare l'opzione noatime dove non c'è necessità di conoscere da data e ora dell'ultimo accesso ad un file, come nel caso di volume che contenga i file di un database. La mancata scrittura di queste informazioni evita un overhead ogni volta che si accede al file, migliorando le prestazioni di lettura/scrittura.
Il quarto punto dove si può intervenire è nei buffer interni di sistema, modificando il file di configurazione del kernel e/o al runtime tramite /etc/sysctl.conf. In questi casi è impossibile dare dei suggerimenti precisi: bisogna valutare caso per caso. Per esempio una applicazione potrebbe richiedere un numero maggiore di semafori allocati, ma normalmente questo numero di default è impostato molto basso perchè mantenere queste strutture costa parecchie risorse di sistema. Ripeto che bisogna valutare caso per caso ed è impossibile dare delle regole generali. L'unico modo per conoscere è sperimentare.

Conclusioni

Questo articolo dovrebbe servire da esempio per la vostra workstation personale che quasi certamente privilegerà aspetti che io non ho considerato. Ricordatevi che in FreeBSD, come qualsiasi macchina Unix, la configurazione dipende molto dalle esigenze dell'amministratore del sistema. Se avete qualche esigenza specifica il consiglio è di dare prima una occhiata tra i ports ove troverete circa 5000 applicazioni Unix portate su FreeBSD. Per cercare qualcosa di specifico:

cd /usr/ports
make search key=qualcosa

Vi ricordo infine che i siti web di FreeBSD e GUFI mettono a disposizione un completo motore di ricerca per trovare le applicazioni, scorrere nell'albero delle categorie, consultare la documentazione e i messaggi delle mailing list archiviati.

Dove trovare altre informazioni

Gruppo Utenti FreeBSD Italia (GUFI) e sulle mailing list
FreeBSD handbook
FreeBSD Diary
Daemon News


Ringraziamenti

Un sentito ringraziamento a Riccardo "Vic" Torrini per l'accurata analisi di questo articolo e la correzione delle imprecisioni. Un grazie a Stefano Riva per i commenti sulle bozze; a Gianmarco Giovannelli per l'incoraggiamento ed i notevoli spunti presi dalla sua homepage.