# BSD-FAQ-it

### Matteo Riondato

Membro dello Staff del GUFI

`<rionda@gufi.org>`

### Massimiliano Stucchi

Membro dello Staff del GUFI

`<max@gufi.org>`

Copyright © 2003-2004 Il team di BSD-FAQ-it

Domande e risposte relative a BSD

BSD-FAQ-it è un progetto di documentazione nato con l'intento di creare un insieme di domande e risposte sul mondo BSD che possa dare una mano sia a chi si accosta da novizio a questo particolare tipo di sistemi operativi, sia agli esperti che cercano una soluzione ai propri problemi.

La ridistribuzione e l'uso come sorgente (SGML DocBook) e in forme 'compilate' (SGML, HTML, PDF, PostScript, RTF e cosí via) con o senza modifiche, sono permessi a patto che le seguenti condizioni vengano rispettate:

1. Le ridistribuzioni del codice sorgente (SGML DocBook) devono mantenere le suddette note sul copyright, questa lista di condizioni e il seguente avviso, non modificati, come prime linee di questo file.

2. Le ridistribuzioni in forma compilata (trasformazioni in altri DTD, conversioni in PDF, PostScript, RTF e altri formati) devono riportare le suddette note di copyright, questa lista di condizioni e il seguente avviso nella documentazione e/o in altri materiali forniti con la distribuzione.

> Importante: QUESTA DOCUMENTAZIONE È FORNITA DAL BSD-FAQ-it TEAM "COSÌ COM'È" E NON VIENE RICONOSCIUTA NESSUNA GARANZIA ESPLICITA O IMPLICITA, INCLUSE, MA NON SOLO, LE GARANZIE IMPLICITE DI COMMERCIABILITÀ E IDONEITÀ PER UNO SCOPO PARTICOLARE. IN NESSUN CASO IL FREEBSD ITALIAN DOCUMENTATION PROJECT POTRÀ ESSERE RITENUTO RESPONSABILE DI QUALSIASI DANNO DIRETTO, INDIRETTO, ACCIDENTALE, SPECIALE, SIMBOLICO, O CONSEGUENTE (INCLUSI, MA NON SOLO, L'ACQUISIZIONE DI BENI O SERVIZI SOSTITUTIVI; LA PERDITA D'USABILITÀ, DI DATI O DI PROFITTI; O L'INTERRUZIONE DEL LAVORO) COMUNQUE CAUSATO E SULLA BASE DI QUALUNQUE TEORIA DI RESPONSABILITÀ, SIA CONTRATTUALE, SIA OGGETTIVA, SIA FONDATA SULL'ILLECITO CIVILE (INCLUSA NEGLIGENZA O QUANT'ALTRO) DERIVANTE IN OGNI MODO DALL'USO DI QUESTA DOCUMENTAZIONE, ANCHE SE AVVISATO DELLA POSSIBILITÀ DI DETTO DANNO.

Apple, FireWire, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Computer, Inc., registered in the United States and other countries.

CVSup is a registered trademark of John D. Polstra.

Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

Linux is a registered trademark of Linus Torvalds.

Microsoft, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media and Windows NT are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.

Motif, OSF/1, and UNIX are registered trademarks and IT DialTone and The Open Group are trademarks of The Open Group in the United States and other countries.

XFree86 is a trademark of The XFree86 Project, Inc.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the ``™'' or the ``®'' symbol.

[ Split HTML / Single HTML ]

# Benvenuti a BSD-FAQ-it

Come è solito fare con le FAQ (o Frequently Asked Questions, domande poste più di sovente), questo documento cerca di coprire le domande che più frequentemente sono state poste su mailing list o su IRC da utenti spesso considerati 'inesperti' nel mondo BSD, mentre altre arrivano dalle esperienze personali dei partecipanti al progetto. Come punto di partenza abbiamo deciso di tradurre le FAQ di FreeBSD, anche se il progetto ha come intento quello di riunire documentazione riguardante tutti e tre i sistemi operativi della famiglia. Questo sarà utile per avere una base consistente dalla quale partire per fornire un insieme completo di domande con le relative risposte.

Un ringraziamento speciale va al GUFI (Gruppo Utenti FreeBSD Italia) che supporta ufficialmente questo progetto, offrendo continuo supporto e risorse.

Questo insieme di domande e risposte è in continua evoluzione e non sarebbe mai stato possibile crearlo senza l'aiuto di tutte quelle persone che con la loro costanza e passione, ma soprattutto con una grande curiosità hanno posto domande a tutti coloro che erano pronti ad ascoltarle e fornire una risposta esaustiva. Saremmo dunque grati se, trovando una domanda alla quale non viene data risposta nel nostro documento, ci mandaste una email comunicandola. L'indirizzo è `<bsdfaqit@willystudios.com>`.

# I. FAQ di FreeBSD

I capitoli che seguono sono la traduzione delle FAQ ufficiali del progetto FreeBSD, che si trovano all'indirizzo http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/

# Capitolo 1. Introduzione a FreeBSD

## 1.1. Cosa è FreeBSD?

In parole povere, FreeBSD è un sistema operativo di tipo UN*X per le architetture i386, PC-98, Alpha/AXP, e le piattaforme UltraSPARC basato sulla release ``4.4BSD-Lite'', con alcuni miglioramenti provenienti da ``4.4BSD-Lite2''. È anche basato indirettamente sul port di William Jolitz di ``Net/2'' dell'università di Berkeley su i386, conosciuto come ``386BSD'', anche se rimane poco del codice di 386BSD. Una descrizione più completa riguardo a cosa sia FreeBSD e cosa potrebbe fare per te la trovi sul sito del GUFI, Gruppo Utenti FreeBSD Italia.

FreeBSD è usato da aziende, Internet Service Providers, ricercatori, professionisti dell'informatica, studenti e utenti casalinghi in tutto il mondo per lavoro, educazione e ricreazione.

Per informazioni più dettagliate su FreeBSD, prova a dare un'occhiata all'handbook, di cui esiste una parziale traduzione in italiano.

## 1.2. Qual è lo scopo del progetto FreeBSD?

L'obiettivo del progetto FreeBSD è fornire del software che può essere usato per qualsiasi scopo e senza fronzoli. Molti di noi hanno investito significativamente nel codice (e nel progetto) e non importa ricevere riconoscimenti economici di tanto in tanto, pur non insistendo su questo fatto. Crediamo che la nostra ``missione'' primaria sia fornire codice a chiunque, per qualsiasi scopo, cosicchè il codice trovi il suo ampio spazio di utilizzo e produca i benefici maggiori. Questo, crediamo, è uno degli obiettivi fondamentali del Software Libero, un'idea che supportiamo con entusiasmo.

Quel codice che è nel nostro albero dei sorgenti che si trova sotto la GNU General Public License (GPL) o sotto la GNU Library General Public License (LGPL) viene distribuito con dei fronzoli in più, sebbene si tratti di un accesso più restrittivo, piuttosto che l'esatto contrario di quello che pensiamo noi. Date le generali complessità che possono scaturire dall'utilizzo commerciale di software GPL, consigliamo di rimpiazzare tale software con prodotti rilasciati sotto la più rilassata FreeBSD license quando possibile.

## 1.3. La FreeBSD license ha qualche restrizione?

Certo. Quelle restrizioni non controllano come usi il codice, piuttosto come tratti il progetto FreeBSD stesso. Se hai delle serie preoccupazioni riguardo la licenza, leggi la licenza attuale. Per i più curiosi, la licenza può essere riassunta in questo modo.

- Non assumerti i meriti per aver scritto questo.

- Non farci causa se si rompe o non funziona.

## 1.4. Può FreeBSD rimpiazzare il mio attuale sistema operativo?

Per molte persone sì. Ma questa domanda non ha una risposta generica.

Molte persone non usano realmente un sistema operativo. Usano applicazioni. Sono le applicazioni che in realtà usano il sistema operativo. FreeBSD è disegnato per fornire un ambiente robusto e pienamente attrezzato per le applicazioni. Supporta una varietà infinita di Browser per internet, Suite per ufficio, client di posta elettronica, programmi di grafica, ambienti di programmazione, server di rete, e qualsiasi altra cosa si potrebbe volere. Molte di queste applicazioni possono essere utilizzate attraverso l'uso dei Ports .

Se hai bisogno di una applicazione che è disponibile solo su un determinato sistema operativo, non puoi rimpiazzare quel sistema operativo. La possibilità è che ci sia un'applicazione simile per FreeBSD. Se vuoi un server solido per internet o per il tuo ufficio, una workstation su cui fare affidamento, o solo la possibilità di lavorare senza interruzioni, FreeBSD farà certamente al caso tuo. Molti possessori di computer al Mondo, inclusi sia novizi che esperti amministratori UNIX® usano FreeBSD come loro unico sistema operativo.

Se stai migrando a FreeBSD da qualche altro tipo di ambiente UNIX, di sicuro saprai molte delle cose che ti serve sapere. Se il tuo background è un sistema operativo grafico, come Windows e versioni non recenti di Mac OS, preparati ad investire tempo per imparare il modo di fare le cose tipico di UNIX. Questo documento e il FreeBSD Handbook, in parte tradotto in italiano rappresentano eccellenti punti di partenza.

## 1.5. Perché è chiamato FreeBSD?

- Può essere usato gratuitamente, anche da utenti commerciali.

- I sorgenti di tutto il sistema operativo sono liberamente a disposizione, e sono state poste le minori restrizioni possibili sul loro uso, sulla loro distribuzione e sulla loro incorporazione in altri lavori (commerciali o non commerciali).

- Chiunque abbia un miglioramento o la soluzione ad un problema od errore del sistema è libero di sottoporre il proprio codice e far sì che venga aggiunto all'albero dei sorgenti. (I cambiamenti sono soggetti a una o due ovvie revisioni).

Vale il caso di notare che la parola ``free'' qui viene considerata in due modi, uno che significa ``senza costi'', l'altro ``puoi farci ciò che vuoi''. A parte una o due cose che non puoi fare con il codice di FreeBSD, per esempio far finta di averlo scritto tu, puoi realmente farci tutto quello che vuoi.

## 1.6. Qual è l'ultima versione di FreeBSD?

A questo punto nello sviluppo di FreeBSD, ci sono due rami di sviluppo paralleli; le release vengono tratte da tutti e due i rami. Le release della serie 4.X vengono prese da -STABLE e le 5.X da -CURRENT.

La versione 5.2-RELEASE è l'ultima release del ramo -CURRENT; è stata rilasciata il 12 Gennaio 2004. La versione 4.9-RELEASE è l'ultima release del ramo -STABLE; è stata rilasciata il 28 Ottobre 2003

In parole povere, -STABLE è mirata agli ISP, agli utenti aziendali, o qualsiasi utente che voglia stabilità e un minimo numero di modifiche alle nuove (e potenzialmente instabili) features dell'ultimo sviluppo di -CURRENT. Le release possono arrivare da ciascuno dei due rami, ma -CURRENT dovrebbe essere usata solo se sei sicuro di essere pronto per la maggior volatilità (relativamente a -STABLE).

Le release vengono fatte a distanza di pochi mesi l'una dall'altra. Sebbene molte persone stanno molto più aggiornate rispetto alle release grazie ai sorgenti (guarda le domande su FreeBSD-CURRENT e FreeBSD-STABLE), farlo è più una scelta, poichè i sorgenti sono un bersaglio mobile.

Più informazioni sulle release di FreeBSD possono essere reperite sulla Pagina di Release Engineering sul sito web di FreeBSD.

## 1.7. Che cos'è FreeBSD-CURRENT?

FreeBSD-CURRENT è la versione di sviluppo del sistema operativo, che nel suo corso diverrà 6.0-RELEASE. Come tale, è di interesse solamente agli sviluppatori che lavorano sul sistema e agli hobbisti considerati duri a morire. Guarda la sezione relativa nell'handbook per dettagli su come utilizzare -CURRENT.

Se non hai familiarità con il sistema operativo o non sei capace di capire la differenza tra un problema momentaneo e un problema reale, non dovresti utilizzare FreeBSD-CURRENT. Questo ramo spesso si evolve velocemente e può accadere che non lo si possa compilare per giorni. Ci si aspetta che la gente che usa FreeBSD-CURRENT sia capace di analizzare qualsiasi problema e riportarli se si capisce che sono errori piuttosto che ``scatti''. Domande come ``make world produce un errore a proposito dei gruppi'' sulla mailing list -CURRENT potrebbero non essere viste di buon occhio.

Ogni giorno, degli snapshot di release vengono creati in base allo stato corrente dei rami -CURRENT e -STABLE. Le distribuzioni degli snapshot occasionali vengono resi disponibili. Gli obiettivi di ciascuno snapshot sono:

- Per provare l'ultima versione del software di installazione.

- Per dare l'opportunità a persone che vorrebbero utilizzare -CURRENT o -STABLE, ma non hanno tempo o banda disponibile per seguirle su base giornaliera, un sistema facile e veloce per poterle installare sul proprio sistema.

- Per preservare un punto fisso di riferimento per il codice in questione, solo in caso rompessimo qualcosa in futuro. (Sebbene CVS evita che qualcosa di così orribile possa accadere)

- Per essere sicuri che tutte le nuove funzionalità e tutte le correzioni al codice possano avere il maggior numero possilbe di potenziali tester.

Non c'è nessuna pretesa che alcuno snapshot di -CURRENT possa essere considerato di ``qualità di produzione'' per qualsiasi scopo. Se vuoi avere un sistema stabile e completamente testato, devi rimanere con le release, oppure puoi utilizzare gli snapshot di -STABLE.

Le release di snapshot sono disponibili direttamente da current.FreeBSD.org/pub/FreeBSD/ per la 5.2-CURRENT, e releng4.freebsd.org per gli snapshot di 4-STABLE. Gli snapshot di 3-STABLE non vengono più prodotti nel momento in cui viene scritto questo documento.

Gli snapshot vengono generati, in genere, giornalmente per tutti i rami di sviluppo su cui si lavora al momento.

## 1.8. Qual è il concetto di FreeBSD-STABLE?

Quando FreeBSD 2.0.5 venne rilasciato, lo sviluppo di FreeBSD si divise in due parti. Una parte (o ramo) chiamata ``-STABLE'' e una chiamata ``-CURRENT''. FreeBSD-STABLE è intesa per gli Internet Service Provider e altre imprese commerciali per le quali cadute improvvise o features sperimentali sono cose indesiderate. Riceve solamente le soluzioni già testate e altri piccoli cambiamenti incrementali. FreeBSD-CURRENT, invece, è una linea interrotta che ha portato a 5.2.1 (e oltre) fin dai tempi in cui la versione 2.0 venne rilasciata. Se una `ASCII art` può aiutare a capire, ecco come sarebbe:

                 2.0
                  |
                  |
                  |  [2.1-STABLE]
     *BRANCH*   2.0.5 -> 2.1 -> 2.1.5 -> 2.1.6 -> 2.1.7.1  [2.1-STABLE fine]
                  |
                  |
                  |
                  |  [2.2-STABLE]
     *BRANCH*   2.2.1 -> 2.2.2-RELEASE -> 2.2.5 -> 2.2.6 -> 2.2.7 -> 2.2.8 [fine]
                  |
                  |
                  |
               3.0-SNAPs  (inizio Q1 1997)
                  |
                  |
               3.0-RELEASE (Ott 1998)
                  |
                  |  [3.0-STABLE]
     *BRANCH*  3.1-RELEASE  (Feb 1999) -> 3.2 -> 3.3 -> 3.4 -> 3.5 -> 3.5.1
                  |
                  |
                  |  [4.0-STABLE]
     *BRANCH*    4.0  (Mar 2000) -> 4.1 -> 4.1.1 -> 4.2 -> [SNIP] ->  4.9
                  |
                  |
                 \|/
                  +
          [5.2-RELEASE] continua...

Il ramo 2.2-STABLE è stato ritirato con la release 2.2.8. Il ramo 3-STABLE è finito con la release 3.5.1, la release finale della serie 3.X. Le uniche modifiche che verranno effettuate su questi rami saranno, per la maggior parte, correzioni a problemi di sicurezza.

4-STABLE è il ramo su cui si sta sviluppando in questo momento. L'ultima release della serie 4-STABLE è la 4.9-RELEASE

Il ramo 5-CURRENT procederà lentamente verso 5.3-RELEASE ed oltre. Leggi "Cos'è FreeBSD-CURRENT" (Sezione 1.7) per avere maggiori informazioni su questo ramo.

## 1.9. Quando vengono fatte le release di FreeBSD?

Release Engineering rilascia una nuova versione di FreeBSD in media ogni quattro mesi. Le date di rilascio vengono annunciate tempo prima, cosicchè la gente che lavora al sistema possa sapere quando il proprio progetto deve essere finito e testato. Un periodo di test precede ogni release, in modo da assicurarsi che l'aggiunta di nuove features non comprometta la stabilità della release. Molti utenti pensano che questa premura sia una delle parti migliori di FreeBSD, sebbene aspettare che tutte le novità migliori arrivino su -STABLE possa essere un pò frustrante.

Altre informazioni sul processo di release engineering possono essere trovate sulla pagina di release engineering all'interno del sito web di FreeBSD.

Per coloro che volessero più divertimento, degli snapshot binari vengono creati giornalmente, come precedentemente detto.

## 1.10. Chi è responsabile per FreeBSD?

Le decisioni chiave che riguardano il progetto FreeBSD, come la direzione generale da seguire e chi è abilitato ad aggiungere codice all'albero dei sorgenti, vengono prese dal core team, composto da 9 persone. C'è un team più grande, composto da circa 200 committers, che sono autorizzati a fare dei cambiamenti direttamente all'albero dei sorgenti di FreeBSD.

Ad ogni modo, cambiamenti secondari vengono decisi anticipatamente sulle mailing list , e non ci sono restrizioni su chi possa prendere parte alla discussione.

## 1.11. Dove posso trovare FreeBSD?

Ogni release significativa di FreeBSD è disponibile via FTP anonimo dal sito FTP di FreeBSD:

- Per la release corrente del ramo 3.X-STABLE, 3.5.1-RELEASE, guarda la directory 3.5.1-RELEASE.

- L'ultima release del ramo 5.X, 5.2-RELEASE può essere trovata nella directory 5.2-RELEASE.

- L'ultima release di 4-STABLE, 4.9-RELEASE può essere trovata nella directory4.9-RELEASE.

- Glisnapshot 4.X vengono fatti giornalmente.

- Gli snapshot 5-CURRENT vengono fatte giornalmente per il ramo -CURRENT pur essendo utili solo a sviluppatori e testers.

Informazioni su come ottenere FreeBSD su CD, DVD, ed altri supporti, possono essere reperite nell'handbook.

## 1.12. Come posso preparare un mirror di FreeBSD?

Informazioni su come settare un mirror di FreeBSD possono essere reperite nell'articolo Mirroring FreeBSD, non ancora tradotto in italiano.

## 1.13. Come posso avere accesso al database dei Problem Report?

Il database dei Problem Report può essere interrogato (o vi si può sottomettere una informazione) usando le due interfacce, di sottomissione e query. Il comando send-pr(1) può essere utilizzato per spedire dei problem report usando la posta elettronica.

Prima di spedire un problem report si prega di leggere Writing FreeBSD Problem Reports, un articolo su come scrivere dei buoni problem reports, non ancora tradotto in italiano.

## 1.14. Come divento un mirror web di FreeBSD?

Ci sono diversi modi per fare il mirror delle pagine Web.

- Puoi scaricare i files formattati dal server CVSup di FreeBSD usando l'applicazione `net/cvsup`. Il file `/usr/share/examples/cvsup/www-supfile` contiene un esempio di file di configurazione per i mirror web.

- Puoi scaricare i sorgenti del sito web da qualsiasi FTP server di FreeBSD usando il tuo client FTP preferito. Ricordati che devi compilare questi sorgenti prima di pubblicarli. Comincia il download da ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/www.

## 1.15. Quali altre fonti di informazione ci sono?

Controlla la lista della documentazione sul sito web principale di FreeBSD, oppure consulta il sito del GUFI, il Gruppo Utenti FreeBSD Italiano.

# Capitolo 2. Documentazione e Supporto

## 2.1. Che bei libri ci sono che parlano di FreeBSD?

Il progetto produce una ampia gamma di documentazione, disponibile online all'indirizzo: http://www.FreeBSD.org/docs.html. La stessa documentazione è disponibile come package, che puoi facilmente installare sul tuo sistema FreeBSD. Altri dettagli sui packages di documentazione possono essere trovati nei prossimi paragrafi.

In aggiunta, la Bibliografia alla fine di questa FAQ, e quella dell'handbook refernziano alcuni libri raccomandati.

# II. Domande e Risposte

Nei prossimi capitoli si trovano le risposte alle domande che un utente alle prime armi, ma anche un amministratore già esperto potrebbero porsi utilizzando FreeBSD

# Capitolo 3. Amministrazione del Sistema

Sarebbe stato difficile cominciare con qualcosa di diverso dall'Amministrazione di Sistema, perché è praticando questa sana attività che ci si pone domande più o meno serie.

## 3.1. Come posso usare le accentate in console?

Per utilizzare le lettere accentate in console, occorre impostare in `/etc/rc.conf` i caratteri che andranno caricati all'avvio del sistema:

    font8x8="iso15-8x8"
    font8x14="iso15-8x14"
    font8x16="iso15-8x16"

Inoltre potrebbe essere necessario esportare la variabile d'ambiente TERM con valore cons25l1 e questo può essere fatto sia da ogni utente nel file di configurazione della propria shell, sia l'amministratore di sistema tramite `/etc/ttys`.

Un altro sistema consiste nel creare nella propria home directory il file `.inputrc` ed editarlo nel seguente modo:

    set meta-flag on
    set convert-meta off
    set output-meta on

Eseguiamo nuovamente il login e potremo ora usare le vocali accentate anche in console. Questo ultimo metodo funziona però solo con la shell bash e le versioni di FreeBSD precedenti alla 5.x.

## 3.2. Come posso eseguire un comando a una determinata ora di un determinato giorno?

Può capitare la necessità di dover eseguire un comando in uno specifico momento della giornata, quando magari non saremo nei pressi della nostra macchina ma dovremmo compiere un'importante operazione. Il comando at(1) serve proprio a questo, ed ha una sintassi molto semplice:

`at` {ORA} {GIORNO}

    % at 0:00 14/02/2003
    mail $indirizzofidanzata < ~/sanvalentino.txt

Per uscire dalla modalità di inserimento comandi basta premere CTRL+D. Per verificare la coda di comandi che abbiamo impostato con at(1), possiamo usare il comando atq(1).

## 3.3. Il prompt di default della shell è bruttino, come posso cambiarlo?

Cambiando la variabile d'ambiente PS1 è possibile modificare il prompt della shell. Ci sono alcuni caratteri di escape che possono essere utili per personalizzare ulteriormente il prompt. Questi sono solo alcuni per la shell bash:

    \u : l'user corrente
    \h : l'hostname
    \w : la directory corrente
    \@ : l'ora corrente, in formato 12H am/pm
    \t : l'ora corrente, in formato 24-ore HH:MM:SS
    \d : la data, in formato Giorno della Settimana Mese Data

Per la shell tcsh, ovvero quella di default, è necessario impostare la variabile prompt, che accetta i seguenti caratteri di escape:

    %n : l'user corrente
    %m : l'hostname
    %/ o %~ : la directory corrente
    %@ : l'ora corrente in formato 12H am/pm
    %T : l'ora corrente in formato 24-ore HH:MM
    "%d %w %D" : sequenza per la data corrente in formato Giorno della Settimana Mese Data

Per ulteriori sequenze di escape, le man page delle due shell, bash(1) e tcsh(1), sono più che esaustive.Un PS1 tipico è user@hostname$ corrisponde a

    \u@\h$

in bash e a

    %n@%m$

per quanto riguarda la variabile prompt di tcsh. A volte può essere utile visualizzare l'ora o la directory corrente quindi un prompt adatto sarebbe [ora][directory corrente]$ che è la risultante di

    [\@][\w]$

e di

    [%@][%~]$

rispettivamente in bash e in tcsh. Per la shell sh(1) non esistono caratteri di escape, tuttavia è possibile modificare il prompt agendo sempre sulla variabile PS1, assegnandole quindi qualsiasi valore si voglia anche facendo uso di espressioni come in

    ~paperoga% exportPS1=$(/usr/bin/whoami)$;
    paperoga$

per settare il prompt con il nome utente attuale.

## 3.4. Come posso fare eseguire un comando ogni determinato lasso di tempo?

Il comando crontab(1) è utile per eseguire un comando o una serie di comandi a ogni determinato periodo. Per inserire comandi nella lista occorre lanciare

    %crontab -e

che ci consente di editare un file con l'editor definito dalla variabile d'ambiente $EDITOR (di default questa variabile punta a vi(1). Le righe di questo file devono avere il seguente formato:

    minuti ore giorno del mese mese giorno_della_settimana comando

Con questa riga il comando viene eseguito ogni e solo ogni Martedì 1 gennaio alle 12,15:

    15 12 1 Jan Tue echo "buon anno!

È possibile usare anche il carattere jolly *. Ad esempio:

    15 * * * * /usr/local/bin/fetchmail

esegue il comando ogni 15 minuti di un'ora: alle 0:15, 1:15 ecc. Per eseguire il comando ogni quarto d'ora, la linea del file dovrà essere:

    00,15,30,45 * * * * /usr/local/bin/fetchmail

Per visualizzare il file di crontab(1) lanciamo

    % crontab -l

## 3.5. Esiste un modo per evitare di scrivere un intero comando molto lungo ogni volta?

Gli alias sono delle scorciatoie per risparmiare tempo associando una breve parola a un comando molto lungo. alias(1) serve proprio a questo e la sua sintassi è:

    % alias ALIAS='COMANDO'

dove COMANDO è il comando con le sue opzioni che vogliamo associare ad ALIAS. Gli alias settati in questo modo però sono validi solo per la sessione corrente e per definirli una volta per tutte, basta aggiungerli nel file di configurazione della propria shell.

## 3.6. Come posso aggiornare il sistema?

FreeBSD permette di scaricare i sorgenti aggiornati e di ricompilare tutto il sistema base e il kernel in modo da avere un sistema perfettamente aggiornato. L'utility fondamentale per compiere quest'operazione si chiama cvsup(1) ed è compreso nell'albero dei ports sotto `net/cvsup-without-gui`. Abbiamo la possibilità di installarlo sia con i ports sia con i packages, opzione sicuramente più veloce, dal momento che cvsup-without-gui dipende da pacchetti che impiegano abbastanza tempo a compilarsi. Mentre viene effettuata l'installazione, cominciamo a editare i file di configurazione per essere subito operativi. Creiamo la directory `/usr/local/etc/cvsup` e, aperto il nostro editor preferito, cominciamo a scrivere il file `cvsup.stable`:

    *default host=cvsup.it.freebsd.org
    *default prefix=/usr
    *default release=cvs tag=RELENG_5
    *default delete use-rel-suffix
    *default umask=0022
    *default compress
    src-all

Questo file serve per aggiornare i sorgenti del sistema base, occupiamoci ora di quello per aggiornare i ports, `cvsup.ports`:

    *default host=cvsup.it.freebsd.org
    *default prefix=/usr
    *default release=cvs tag=.
    *default delete use-rel-suffix
    *default umask=0022
    *default compress
    ports-all

Si nota subito che è quasi identico al precedente, salvo per l'ultima riga che è quella che identifica quale "collezione" di fil3 vogliamo scaricare, e per il valore di tag=, la cui funzione spiegheremo più oltre.

Per aggiornare anche la documentazione creiamo un file `cvsup.docs` uguale ai precedenti eliminando solo la riga *default umask=0022 e sostituendo l' ultima riga con doc-all.

Le uniche altre righe importanti da tenere in considerazione sono: *default host=cvsup.it.freebsd.org che identifica l'host da cui vogliamo scaricare i sorgenti (l'elenco completo dei mirror è disponibile all'indirizzo http://www.freebsd.org/doc/handbook/cvsup.html#CVSUP-MIRRORS ), e *default release=cvs tag=, dove viene indicato che ramo di sviluppo vogliamo seguire nell'aggiornamento del sistema. Come spiegato alla domanda "Qual è l'ultima versione di FreeBSD?" (Sezione 1.6), FreeBSD viene sviluppata in settori diversi e ognuno può scegliere quale ramo seguire a seconda delle preferenze personali e dell'ambiente di utilizzo della macchina. Nel nostro esempio abbiamo scelto di seguire il ramo di sviluppo -STABLE, specificando quindi RELENG_5 per quanto riguarda i sorgenti, mentre per i ports e i documenti abbiamo messo . (punto), che identifica l'ultima versione possibile per quanto riguarda questi due componenti; se avessimo specificato . (punto) anche per i sorgenti avremmo seguito il ramo di sviluppo -CURRENT, molto più instabile, che richiede maggiore esperienza e capacità di risolvere i problemi per contro proprio. La spiegazione dettagliata di ogni riga dei file di configurazione di CVSup si trova in una pagina dell'handbook di FreeBSD.

Se eseguissimo l'aggiornamento del sistema con solo questi file, otterremmo una grande quantità di materiale di cui non faremmo utilizzo, come ad esempio i ports localizzati in lingue asiatiche o differenti dall'italiano e inglese; per evitare questo, creiamo la directory `/usr/local/etc/cvsup/sup` e il file `/usr/local/etc/cvsup/sup/refuse`:

    ports/arabic/*
    ports/chinese/*
    ports/french/*
    ports/german/*
    ports/hebrew/*
    ports/hungarian/*
    ports/japanese/*
    ports/korean/*
    ports/russian/*
    ports/polish/*
    ports/portuguese/*
    ports/russian/*
    ports/ukrainian/*
    ports/vietnamese/*
    doc/bn*
    doc/da*
    doc/de*
    doc/el*
    doc/es*
    doc/fi*
    doc/fr*
    doc/ja*
    doc/no*
    doc/nl*
    doc/pl*
    doc/po*
    doc/pt*
    doc/ru*
    doc/sr*
    doc/tr*
    doc/zh*

Un ultimo file è necessario per poter finalmente compiere l'aggiornamento del sistema: `make.conf`, da posizionare in `/etc`:

    USA_RESIDENT=NO
    SUP_UPDATE=yes
    SUP=/usr/local/bin/cvsup
    SUPFLAGS= -g -L 2
    SUPFILE=/usr/local/etc/cvsup/cvsup.stable
    PORTSSUPFILE=/usr/local/etc/cvsup/cvsup.ports
    DOCSUPFILE=/usr/local/etc/cvsup/cvsup.docs
    SUPHOST=cvsup10.freebsd.org
    XFREE86_VERSION=4

Cosa significa ogni riga di questo file? La prima rende noto al server che noi non siamo residenti negli Stati Uniti, cosicchè i sorgenti di quei programmi che per motivi legali non possono uscire dagli USA, non verranno scaricati sul nostro computer. SUP_UPDATE indica che vogliamo servirci del sistema CVSup per l'aggiornamento dei sorgenti. La riga seguente segnala il percorso completo dell'eseguibile cvsup. Dopo la specificazione delle flag da passare a `cvsup`, troviamo le locazioni dei file di configurazione, rispettivamente quello dei sorgenti, dei ports e della documentazione, infine la versione di XFree86 che vogliamo usare, tipicamente la 4.

Portiamoci ora in `/usr/src` ed eseguiamo

    # make update

per aggiornare i sorgenti, i ports e la documentazione. Qualora volessimo aggiornare solo i ports, eseguiamo la stessa operazione da /usr/ports.

Ora i nostri sorgenti sono equivalenti a quelli sul CVS di FreeBSD ma per avere il sistema "up to date" dobbiamo ricompilare world (ovvero il sistema base) e kernel (il nocciolo del sistema operativo) come spiegato alla domanda "Come ricompilo il sistema?" (Sezione 3.7)

## 3.7. Come ricompilo il sistema?

Capita spesso di voler ricompilare il sistema base e il kernel e i motivi sono i più disparati: si passa dal volerli semplicemente aggiornare per motivi di sicurezza o per poter usufruire delle ultime versioni di alcuni driver fino al voler semplicemente ricompilare perché si è aggiunta un'opzione nel kernel e vogliamo verificarne il funzionamento.

La prima cosa da fare è impostare le opzioni per del compilatore così da ottenere un sistema ottimizzato per le caratteristiche della nostra macchina; editiamo `/etc/make.conf` (le seguenti righe vanno aggiunte a quelle eventualmente già presenti):

    CFLAGS= -O2 -pipe
    #CXXFLAGS+= -fmemoize-lookups -fsave-memoized <= temporaneamente non supportata
    COPTFLAGS= -O2 -pipe

La compilazione si svolge in più fasi:

1. aggiornamento dei sorgenti (opzionale)

2. lettura del file UPDATING

3. compilazione del world

4. compilazione del kernel

5. installazione del kernel

6. reboot in single-user mode

7. installazione del world

8. aggiornamento dei file di configurazione

9. riavvio del sistema

Cominciamo a vederli uno per uno.

1. Vedere la domanda "Come posso aggiornare il sistema?" (Sezione 3.6)

2. Importante è anche la lettura del file `/usr/src/UPDATING` che contiene alcune informazione riguardo gli aggiornamenti dell'albero dei sorgenti di FreeBSD e contiene indicazioni quali la necessità di aggiungere utenti, gruppi o altre opzioni per avere un sistema funzionante.

3. Per compilare il world entriamo in `/usr/src` e lanciamo

       # make buildworld

   Il tempo di compilazione varia a seconda della frequenza del processore e della quantità di memoria del sistema.

4. La compilazione del kernel non è diversa da quella del word, in quanto è sufficiente lanciare, sempre da `/usr/src`

       # make buildkernel

   Non viene qui trattata la configurazione del kernel, perché un argomento che dipende molto dalle esigenze personali di ognuno. Si veda il capitolo Configuring the FreeBSD Kernel dell'handbook per maggiori informazioni.

5. Dopo aver effettuato la compilazione del world e del kernel si passa alla fase di installazione, che avviene in ordine contrario rispetto alla compilazione:

       # make installkernel

   Verranno così installati il file del nuovo kernel ovvero `/boot/kernel/kernel`, i nuovi moduli sotto `/boot/kernel/`, inoltre il vecchio kernel sarà rinominato in `boot/kernel.old/kernel` .

   > AvvertimentoNelle versioni precedenti alla 5.0-RELEASE, il kernel è `/kernel`, i moduli si trovano in `/modules` e il kernel precedente è `/kernel.OLD` .

6. Prima di installare il world è necessario passare in single-user mode, ovvero in modalità utente singolo, con i soli servizi di base attivi e la possibilità per il solo utente `root` di usare il sistema. Per passare in single user mode, occorre eseguire il comando

       # shutdown now

7. Naturalmente avere un kernel aggiornato non è sufficiente e anzi la discrasia tra kernel e world porta spesso gravi problemi. Per installare il sistema base:

       # make installworld

8. Il processo di sviluppo di FreeBSD coinvolge anche i file di configurazione, aggiungendo o togliendo opzioni, utenti, gruppi. È importante, per avere un sistema aggiornato in maniera corretta, che anche questi file vengano installati; tuttavia molti di questi sono oggetto di modifiche e personalizzazioni da parte di ognuno per ottimizzare il sistema ed è quindi necessario prestare molta attenzione nella scelta dei file da aggiornare. Fortunatamente FreeBSD mette a disposizione mergemaster(8), uno script di shell che, utilizzando `/usr/src/etc/Makefile` crea un ambiente temporaneo e lo riempe dei nuovi file di configurazione; fatto ciò li confronta uno ad uno con quelli installati nel nostro sistema e ci chiede se vogliamo installare il nuovo file, lasciare intoccato quello installato oppure effettuare un merge dei due file, ovvero una loro fusione. Lanciamo quindi:

       # mergemaster -cvs

   (mergemaster(8) ha moltissime opzioni, la man page è il luogo dove trovare la spiegazione di ognuna). Ora avremo lo schermo diviso in due parti uguali orizzontalmente: in alto troveremo il contenuto del file attuale, in basso quello del nuovo file di configurazione. Ecco quindi che avremo la possibilità di scegliere cosa fare del nuovo file:

       Use 'd' to delete the temporary ./etc/mail/mailer.conf
       Use 'i' to install the temporary ./etc/mail/mailer.conf
       Use 'm' to merge the temporary and installed versions
       Use 'v' to view the diff results again

   È chiaro a cosa corrisponde ogni opzione. Una sola nota sull'opzione m: se scegliamo questa possibilità, lo schermo si dividerà verticalmente e a sinistra troveremo il file attuale, a destra il nuovo e per ogni differenza tra i due potremo scegliere se tenere la vecchia o la nuova riga corrispondente, selezionando tramite la pressione di r per la parte destra (quella nuova) e l per la parte sinistra, ovvero quella attualmente installata, per finire e installare il file così fatto, premiamo i. La procedura di confronto si ripete per ogni file del sistema che abbiamo cambiato o è stato modificato nella versione CVS e potrebbe durare un po' di tempo, anche perché è necessario prestare molta attenzione: un errore in questa fase potrebbe portare alcuni problemi.

9. Alla fine di tutto, per poter utilizzare il sistema aggiornato riavviamo la macchina con

       # reboot

   Ora il nostro sistema è aggiornato e lo si può verificare dall risultato di

       # uname -a
       FreeBSD pdp.paperopoli 4.8-STABLE FreeBSD 4.8-STABLE #4: Wed Jul
       23 09:32:03 CEST 2003 root@pdp.paperopoli:/usr/obj/usr/src/sys/DEPOSITO  i386

   La risposta a eventuali problemi si trova alla domanda "Ho ricompilato il sistema ma al riavvio ci sono dei problemi. Cosa posso fare?" (Sezione 3.8).

## 3.8. Ho ricompilato il sistema ma al riavvio ci sono dei problemi. Cosa posso fare?

I problemi che si possono riscontrare al riavvio del sistema dopo aver effettuato la ricompilazione possono essere di vario genere: si va dalla mancanza di qualche supporto fondamentale nel kernel a qualche errore durante la fase di mergemaster. La via più comoda e veloce per risolvere questi problemi è il caricamento del kernel precedente e una nuova ricompilazione del sistema dopo aver accertato la causa del danno che sarà da rilevarsi quindi o nel file di configurazione del kernel o nei file di configurazione del sistema, e in quest'ultimo caso è sufficiente rieffettuare il mergemaster o cercare un eventuale errore di battitura in un file di configurazione quale `/etc/rc.conf` Per caricare il kernel precedente dobbiamo, al boot del sistema, effettuare i seguenti passi:

    Loading /boot/defaults/loader.conf
    /kernel text=0x161db8 data=0x218ac+0x223fc syms=[0x4+0x23040+0x4+0x243e4]
    /modules/splash_bmp.ko text=0x10f9 data=0xc8+0x66c syms=[0x4+0x420+0x4+0x230]
    /modules/vesa.ko text=0x2330 data=0xea0+ox23c syms=[0x4+0x7a0+0x4+0x585]
    Hit [Enter] to boot immediately, or any other key for command prompt. Invio
    unload
    load /boot/kernel.old/kernel
    boot

Fatto questo, il sistema caricherà il kernel precedente (funzionante) e potremo ora risolvere l'errore come spiegato sopra.

## 3.9. Come posso ottenere i sorgenti relativi a una data precisa?

L'utilizzo di CVS come base per il sistema di aggiornamento di FreeBSD consente di effettuare un "passo indietro" nello sviluppo del sistema ed ottenere l'albero dei sorgenti esattamente com'era in una certa data. Prendiamo il file di configurazione di cvsup per i sorgenti, `/usr/local/etc/cvsup/cvsup.stable`, e cambiamo la riga:

    *default release=cvs tag=RELENG_5_2

in

    *default release=cvs tag=RELENG_5_2 date=2004.02.05.17.30.00

I numeri divisi da punti significano che vogliamo ricevere l'albero dei sorgenti com'era in quel momento esatto. Come è intuibile, il formato è il seguente anno.mese.giorno.ora.minuti.secondi. Naturalmente si possono ottenere anche i ports e i doc relativi ad un certo istante, è sufficiente modificare i file di configurazione corrispondenti.

## 3.10. Come mai ogni 497 giorni uptime(1) riazzera il conteggio dei giorni?

Sulle macchine a 32 bit, ogni 497 giorni il conteggio dell'uptime viene riazzerato. Ciò è dovuto all'architettura stessa della macchina e al fatto che il sistema operativo registra l'uptime in jiffy [1] in una variabile a 32 bit e quindi risulta la seguente equazione: 232 ÷ (100 jiffy × 60 secondi × 60 minuti × 24 giorni) ≅ 497.1 ovvero: il numero massimo contenibile da una variabile a 32 bit (232), diviso per i jiffy di un giorno, da come risultato circa 497 giorni. Nelle macchine con processore/i a 64 bit non si riscontra questo problema se non dopo 5.845.420.460 anni di uptime.

## 3.11. Come formatto i floppy disk?

La formattazione dei floppy disk si svolge in tre fasi:

1. Formattazione a basso livello

2. Scrittura dell'etichetta[2] del floppy

3. Creazione del filesystem

Procediamo con la prima fase: come utente `root`, dopo aver inserito un floppy nel lettore, lanciamo

    # fdformat -n /dev/fd0

L'opzione -n evita il controllo dei settori del floppy dopo aver completato la formattazione. Ora dobbiamo editare l'etichetta del floppy, specificando che si tratta di un floppy a 1440 Kb; per fare questo utilizzeremo disklabel(8):

    # disklabel -r -w /dev/fd0 fd1440

Ultima fase: la creazione del filesystem. Solitamente, il filesystem dei floppy disk è FAT12, quindi creiamo il filesystem nel seguente modo:

    # newfs_msdos -f 1440 /dev/fd0

L'opzione -f serve naturalmente a specificare la capacità del dischetto. Molto utili nella gestione dei floppy sono gli mtools (`emulators/mtools`), una suite di comandi per interagire con periferiche removibili (e non) formattate con filesystem FAT senza bisogno di montarle, utilizzando la sintassi tipica dei comandi DOS.

## 3.12. Come aggiungo un utente a un gruppo?

A volte può essere necessario che un utente appartenga a più gruppi; ad esempio occorre aggiungere un utente al gruppo `wheel` affinchè abbia la possibilità di elevarsi a `root` mediante su(1) oppure se abbiamo molti utenti, creare un nuovo gruppo `utenti` può semplificare l'amministrazione degli stessi. Il file che contiene le informazioni riguardo ai gruppi è `/etc/group`, il cui formato è

    wheel:*:0:root

Sono 4 campi separati da il segno ":". Il primo campo identifica il nome del gruppo, in questo caso `wheel` ovvero il gruppo a cui di default appartiene `root` e gruppo proprietario della maggior parte dei binari e dei file del sistema. Il secondo campo è la password di sistema che, a detta della stessa man di group(5) è molto raramente usata ed è infatti normalmente presente un asterisco per indicare l'assenza di password. Successivamente troviamo il gid ovvero il numero identificativo corrispondente al gruppo. Infine ci sono i membri del gruppo, separati da virgole. Per aggiungere l'utente `paperino` al gruppo `wheel`, dovremo quindi editare `/etc/group` nel seguente modo:

    wheel:*:0:root,paperino

La presenza dei gruppi è utilissima quando, in sistemi con molti utenti, si vuole avere molta flessibilità nella gestione degli stessi, concedendo permessi e mettendo divieti a seconda del gruppo di appartenenza.

## 3.13. Come cambio l'hostname?

L'hostname ovvero il nome della macchina, viene di solito settato all'avvio del sistema tramite la lettura di un riga del file `/etc/rc.conf`, precisamente una linea simile alla seguente:

    hostname="deposito.pdp.paperopoli"

Modificando la riga corrispondente, l'hostname sarà cambiato al prossimo riavvio, mentre se vogliamo modificarlo "al volo", usiamo il comando hostname(1), usato anche per sapere l'hostname attuale:

    # hostname
    paperino.peropoli
    # hostname paperoga.paperopoli
    # hostname
    paperoga.paperopoli;

Una raccomandazione, probabilmente superflua: non usare nomi di host già esistenti per il proprio hostname, in quanto questo potrebbe creare problemi di vario genere.

## 3.14. Come faccio a sapere il mio indirizzo IP?

Le informazioni riguardanti le interfaccie di rete vengono fornite dal comando ifconfig(8):

    # ifconfig
    fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
            inet6 fe80::203:47ff:fee1:ccd4%fxp0 prefixlen 64 scopeid 0x1
            inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
            ether 00:03:47:e1:cc:d4
            media: Ethernet autoselect (10baseT/UTP)
            status: active
    lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
            inet6 ::1 prefixlen 128
            inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
            inet 127.0.0.1 netmask 0xff000000
    ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
    sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552
    tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492
            inet 123.45.67.89 --> 192.168.100.1 netmask 0xffffffff
            Opened by PID 71

Senza spiegare il significato di ogni riga e ogni elemento in quanto sarebbe troppo lungo, notiamo subito che l'indirizzo IP di ogni interfaccia che ne ha uno, è specificato nella riga che comincia con inet, quindi nel caso dell'intefaccia `tun0`, tipicamente utilizzata per la connessione a Internet, l'indirizzo IP si trova alla linea:

    inet 123.45.67.89 --> 192.168.100.1 netmask 0xffffffff

ed è 123.45.67.89. Se vogliamo avere solo l'indirizzo IP, dobbiamo concatenare una serie di comandi con i pipe:

    ifconfig tun0 |awk '{if ($1 == "inet") print$2;}'

L'output di questo comando può essere passato come argomento per uno script.come ipcheck.py (`net/ipcheck`) o qualsiasi altro.

## 3.15. Come posso sapere quali utenti hanno effettuato il login ultimamente?

A volte può essere utile sapere quali utenti hanno effettuato il login negli ultimi tempi, soprattutto se offriamo servizi SSH a parecchi utenti. Il comando usato per avere queste informazioni è last(1) che ha un output del tipo:

    paperoga           ttyv2                    Ven 14 Mar 21:51 - 21:33 (1+23:41)
    qui                ttyp2    123.45.6.123   Ven 14 Mar 15:12 - 15:17  (00:05)
    qui                ttyp1    123.45.6.123    Ven 14 Mar 15:01 - 15:08  (00:07)
    qui                ttyp1    123.45.6.123    Ven 14 Mar 14:52 - 14:59  (00:07)
    gastone            ttyv2                    Ven 14 Mar 14:51 - 21:51  (07:00)
    archimede          ttyv1                    Gio 13 Mar 19:46   still logged in
    qua                ttyv0                    Gio 13 Mar 19:46   still logged in

La prima colonna da, com'è facile intuire, il nome dell'utente, la seconda indica il terminale al quale l'utente si è collegato; quindi, qualora l'utente abbia effettuato il login via rete, troviamo l'indirizzo IP del pc da cui è partita la richiesta di login; la quarta colonna indica la data di login e quella di logout, mentre tra parentesi si trova la durata della connessione. last(1) ha moltissime opzioni, di cui la man page fornisce una accurata descrizione.

## 3.16. Come posso sapere quali utenti sono connessi al momento?

Da sempre il comando per sapere chi è connesso al sistema è who(1) che da come output rispettivamente il nome dell'utente, il terminale al quale è collegato e la data e l'ora di login:

    qui              ttyv0    13 Mar 19:46
    quo              ttyv1    13 Mar 19:46
    quo              ttyp0    18 Mar 12:38 (:0.0)

Se vogliamo avere altre informazioni riguardo agli utenti collegati e un minimo di statistiche riguardanti il sistema, si può usare w(1):

     2:32pm  up 4 days, 18:53, 4 users, load averages: 0,30 0,26 0,19
    USER             TTY      FROM              LOGIN@  IDLE WHAT
    qui              v0       -                Gio07pm  1:00 -bash (bash)
    quo              v1       -                Gio07pm 4days xinit /home/quo/.xinitrc -- -nolisten tcp
    quo              p0       :0.0             12:38pm     - w
    qua              p1       123.4.56.123    Ven03am  2:52 -bash (bash)

w(1) ci fornisce anche l'indirizzo IP della macchina dalla quale si è collegato l'utente, il tempo di inattività e cosa sta facendo in questo momento. Inoltre nella prima riga ci informa dell'ora corrente, dell'uptime del sistema, del numero di utenti collegati e infine la media del carico del sistema calcolata in un periodo di 1, 5, 15 minuti.

## 3.17. Come si caricano i moduli del kernel?

Può accadere che, per motivi di licenza, non sia possibile includere staticamente il supporto per una periferica nel kernel, oppure, per motivi di ottimizzazione delle risorse, può essere conveniente non includere il supporto staticamente. Si ricorre dunque ai moduli, che possono essere inseriti e rimossi "al volo" a seconda del bisogno. La locazione standard dei moduli è `/boot/kernel/` e la loro estensione è `.ko`.

> Avvertimento: Nelle versioni di FreeBSD precedenti alla 5.0-RELEASE i moduli si trovano in `/boot/kernel/`.

kldload(8) serve a caricare i moduli e solo `root` ha i permessi di esecuzione su questo comando:

    # kldload msdos

I nomi dei moduli identificano chiaramente il loro utilizzo: quello dell'esempio, `msdos.ko` fornisce il supporto per il filesystem FAT, usato da MS-DOS® e Windows®. I moduli del kernel possono essere caricati anche all'avvio del sistema tramite il file `/boot/loader.conf`, le cui righe relative al caricamento dei moduli hanno il formato seguente:

    linux_load="YES"
    agp_load="YES"

Le righe precedenti caricano rispettivamente il modulo per l'esecuzione dei binari Linux e il modulo per l'AGP[3].

Per rimuovere i moduli caricati si usa kldunload(8):

    # kldunload linux

rimuove il modulo relativo alla compatibilità dei binari Linux.

## 3.18. Come faccio a sapere quali moduli del kernel sono caricati?

kldstat(8) serve a conoscere quali moduli sono stati caricati:

    Id Refs Address    Size     Name
     1    9 0xc0100000 2b6c10   kernel
     2    1 0xc03b7000 18a88    linux.ko
     3    1 0xc03d0000 ac8c     agp.ko
     4    1 0xc03db000 149f44   nvidia.ko
     5    4 0xc16f8000 9000     netgraph.ko
     6    1 0xc1706000 3000     ng_ether.ko
     7    1 0xc170b000 5000     ng_pppoe.ko
     8    1 0xc1711000 3000     ng_socket.ko
     9    1 0xc178c000 2000     star_saver.ko

Ci viene mostrato, da destra a sinistra, non solo il nome del modulo caricato, ma anche il suo indirizzo in memoria, la sua grandezza e il numero di moduli che dipendono da questo.

## 3.19. Come posso usare la lingua italiana nei programmi che la supportano?

Moltissimi programmi, sia tra quelli compresi nel sistema base sia tra i ports, hanno il supporto per la lingua italiana. Tuttavia per utilizzarla è necessario mettere mano ad alcuni file di configurazione e aggiungere una variabile d'ambiente. Il file da editare è `/etc/login.conf` se si desidera che ogni utente segua le impostazioni definite dall'amministratore di sistema, oppure `$HOME/.login_conf` qualora si voglia lasciare libertà di configurazione agli utenti. Nel primo caso il file dovrà contenere le seguenti righe:

    italian:paperino:\
            :charset=iso-8859-15:\
            :lang=it_IT.ISO8859-15:\

mentre nel secondo caso bisogna cambiare la prima delle precedenti righe in

    me:\

Fatto questo occorre esportare la variabile d'ambiente

    LANG=it_IT.ISO_8859-15

da shell o mettendola nel file di configurazione della vostra shell.

## 3.20. Cosa sono i permessi di un file?

Tutti i file hanno dei permessi, come ben si può verificare analizzando l'output di

    % ls -l
    total 122
    -rw-r--r--  1 paperino  paperino   2015 31 Mar 21:03 debiti
    -rw-r--r--  1 paperino  paperino   1513 16 Feb 17:21 sfortune
    drwxr-xr-x  2 paperino  paperino    512  1 Apr 17:02 paperina
    -rw-r--r--  1 paperino  paperino    325 24 Mar 12:56 debitiPDP
    -rw-r--r--  1 paperino  paperino   2839  1 Apr 17:02 lettera
    -rw-r--r--  1 paperino  paperino   2015 31 Mar 13:03 paperinik
    -rw-r--r--  1 paperino  paperino  65058  2 Apr 15:07 Avviso
    -rw-r--r--  1 paperino  paperino  22805 24 Mar 21:54 ciccio.jpg
    -rw-r--r--  1 paperino  paperino    909 26 Mar 14:25 deposito.html
    drwxr-xr-x  2 paperino  paperino   1536  1 Apr 17:00 quiquoqua
    -rwxr--r--  1 paperino  paperino    253 20 Mar 20:55 dormire.sh
    -rw-r--r--  1 paperino  paperino   4234  6 Mar 21:58 mailbox
    -rw-r--r--  1 paperino  paperino   3417  3 Mar 14:27 DaFare
    -rw-r--r--  1 paperino  paperino   1436 23 Mar 14:05 mailtopolino
    drwxr-xr-x  8 paperino  paperino    512 10 Mar 18:12 foto_nonna

Senza spiegare il significato di ogni colonna, reperibile comunque dalla man page di ls(1), diciamo che la prima colonna è quella dei permessi, la terza identifica l'utente proprietario e la quarta il gruppo proprietario. La prima colonna contiene 10 spazi, che possono contenere ognuno un carattere, a loro volta suddivisi in 4 sezioni rispettivamente da 1, 3, 3, 3 spazi ognuna; la prima sezione identifica se la entry in questione è una directory, un link, un socket o un altro tipo di file, la seconda i permessi del proprietario di questo file o directory, la terza i permessi del gruppo proprietario e la quarta i permessi di tutti gli altri utenti. Ogni spazio può contenere uno solo tra i seguenti caratteri:

    d : identifica le directory e può stare solo nella prima sezione
    l : il file in questione e' un link ad un altro file ,solo nella prima sezione
    s : UNIX socket, solo nella prima sezione
    r : permesso di lettura (read), si trova al primo posto della seconda,
        terza e quarta sezione
    w : permesso di scrittura (write), al secondo posto di tutte le
        sezioni tranne la prima
    x : permesso di esecuzione (execution) (o di attraversamento per le
        directory), al terzo posto.

Ad esempio sul file

    -rw-r--r--  1 paperino  paperino   1513 16 Feb 17:21 sfortune

hanno il permesso di lettura sia il proprietario, sia il gruppo, sia tutti gli altri utenti, mentre solo il proprietario può modificarlo in quanto è l'unico ad avere il permesso di scrittura.

## 3.21. Come cambio i permessi di un file?

Il comando chmod(1) serve a cambiare i permessi di un file. Occorre specificare al comando se vogliamo cambiare i permessi per il proprietario, il gruppo, o il "resto del mondo", specificare se vogliamo aggiungere o togliere permessi e quali siano questi permessi. Per identificare l'utente proprietario, il gruppo e gli altri utenti si usano i seguenti caratteri:

    u : proprietario
    g : gruppo
    o : altri utenti

Se vogliamo aggiungere permessi useremo il simbolo + mentre se vogliamo toglierne, il simbolo -. I permessi si identificano con la lettera che corrisponde ad ognuno di essi: r per la lettura, w per la scrittura e x per l'esecuzione. Per cambiare i permessi di un ipotetico file

    -rw-r--r--  1 paperino  paperino   1513 16 Feb 17:21 sfortune

e aggiungere il permesso di scrittura anche per il gruppo proprietario, dovremo lanciare il seguente comando:

    % chmod g+w sfortune

oppure, per togliere il permesso di lettura a tutti gli altri utenti:

    % chmod o-r sfortune

Vi è anche un altro sistema per cambiare i permessi, basato su cifre incece che su caratteri: è sempre presente la divisione in 4 sezioni, ma ognuna di esse può contenere solo un numero, risultato della somma dei permessi che si vogliono assegnare o 0 se non si vogliono assegnare permessi. Tralasciando la prima sezione, che assume valori particolari, ritrovabili nella man di chmod(1), queste sono le valenze di ogni permesso:

    4 : permesso in lettura
    2 : permesso in scrittura
    1 : permesso di esecuzione

Ad esempio per ripristinare i permessi del file `sfortune`, dovremo eseguire il seguente comando:

    % chmod 0644 sfortune

in quanto:

    0 : prima sezione vuota
    6 = 4 + 2 : permesso in lettura e scrittura per il proprietario
    4 : permesso in lettura per il gruppo
    4 : permesso in lettura per tutti gli utenti

Un permesso in lettura, scrittura ed esecuzione avrà naturalmente valore 7, uno in lettura ed esecuzione valore 5 e così via. L'utilizzo dei permessi è un ottimo modo per aumentare la riservatezza personale e un'attenta politica consente di non correre il rischio di trovare compromessi i nostri dati importanti.

## 3.22. Posso aumentare la risoluzione dello schermo in console?

Ovviamente sì! In tre semplici passi, possiamo cambiare le dimensioni dei terminali:

1. Ricompiliamo il kernel con le seguenti opzioni:

       options SC_PIXEL_MODE
       options VGA_WIDTH90
       options VESA

2. Dopo aver riavviato, proviamo ad usare la nuova risoluzione con

       # vidcontrol VESA_132x25

   VESA_132x25 indica la modalità prescelta (colonne x righe) in questo caso. Tutti gli altri valori sono disponibili in vidcontrol(1)

3. Questo passo è opzionale e riguarda solo la modifica di `/etc/rc.conf` per utilizzare la modalità prescelta su tutti i terminali. Il file in questione deve contenere la riga:

       allscreens_flags="VESA_132x25"

   Dal prossimo riavvio, tutti i terminali avranno la risoluzione specificata.

## 3.23. Come configuro il mio sistema FreeBSD affinché faccia da gateway tra la mia rete locale e Internet?

Quasi sicuramente, uno degli utilizzi più frequenti di FreeBSD è come sistema gateway tra due reti, solitamente tra un rete locale e Internet. Bastano pochi passi per impostare il sistema. Occorre sapere che gli indirizzi ip usati sulle reti locali non possono essere usati in Internet, per una questione di standard e tuttavia è difficile avere a disposizione un indirizzo IP pubblico per ogni macchina, occorre quindi effettuare un mascheramento degli indirizzi privati in modo che vengano visti come un solo indirizzo pubblico, quello del gateway; il termine tecnico di quest'operazione è NAT [4]. Ci sono due modi di effettuare il NAT: utilizzando l'opzione -nat del PPP[5] di sistema oppure facendo uso del demone natd. Ma andiamo con ordine: prima di tutto occorre abilitare la trasmissione dei pacchetti da una rete all'altra (forwarding), inserendo la seguente riga nel file `/etc/rc.conf`:

    gateway_enable="yes"

Al prossimo riavvio il forwarding sarà abilitato; tuttavia, se non possiamo riavviare il sistema in quanto esso offre dei servizi che non possono essere interrotti, possiamo cambiare il valore di una sysctl:

    # sysctl net.inet.ip.forwarding=1

In questo modo possiamo utilizzare subito la trasmissione dei pacchetti tra due reti. Fatto questo possiamo scegliere se usare il NAT offertoci fa ppp(8) oppure se usare il natd(8). Vediamo come agire in entrambi i casi. Prima di tutto però occorre ricompilare il kernel con l'opzione

    options         IPDIVERT

per abilitare il NAT, sia quello del PPP sia natd.

### 3.23.1. Utilizzare il NAT di PPP

Configurare la propria connessione in modo che utilizzi il NAT offerto da PPP è semplicissimo. Basta specificare l'opzione -nat quando lanciamo la connessione a Internet oppure inserire nel file di configurazione di PPP, `/etc/ppp/ppp.conf`, la riga

    nat enable yes

Se facciamo partire la connessione all'avvio del sistema, è sufficiente aggiungere`/etc/rc.conf` la riga

    ppp_nat="YES"

### 3.23.2. Utilizzare natd(8)

Usare natd è facile quanto utilizzare il NAT del PPP, tuttavia di solito si preferisce quest'ultimo quando non si ha a che fare con più reti locali. Per prima cosa apriamo `/etc/rc.conf` in un editor e aggiungiamo le righe:

    natd_enable="YES"
    natd_interface="fxp0"

fxp0 indica l'interfaccia connessa ad Internet. Creiamo inoltre il file `/etc/natd.conf`:

    interface fxp0
    use_sockets yes
    same_ports yes

La prima riga indica nuovamente l'interfaccia di rete connessa ad Internet, mentre le altre due servono per assicurare il funzionamento di FTP e delle DCC[6] di IRC. Dal prossimo riavvio del sistema il natd sarà funzionante. Ovviamente bisogna configurare appropriatamente anche i client della rete locale, in modo che usino la macchina su cui è in esecuzione natd come gateway principale per uscire in Internet.

## 3.24. Come cambio l'utente e/o il gruppo proprietario di un file?

Ogni file ha un utente proprietario e un gruppo proprietario. Questi sono indicati rispettivamente nella terza e nella quarta colonna dell'output di

    % ls -l
    total 60
    -rw-r--r--  1 paperino  paperino   2015 31 Mar 21:03 debiti
    -rw-r--r--  1 paperino  paperino   1513 16 Feb 17:21 sfortune
    drwxr-xr-x  2 paperino  paperino    512  1 Apr 17:02 paperina
    -rw-r--r--  1 paperino  paperino    325 24 Mar 12:56 debitiPDP
    -rw-r--r--  1 paperino  paperino   2839  1 Apr 17:02 letteraPaperina
    -rw-r--r--  1 paperino  paperino   2015 31 Mar 13:03 paperinik

Il comando usato per cambiare proprietario e gruppo è chown(8), da sempre presente in UNIX. La sua sintassi è semplicissima:

    % chown gastone letteraPaperina

per cambiare il proprietario da `paperino` a `gastone`, oppure

    % chown :gastone letteraPaperina

se vogliamo cambiare il gruppo proprietario. Ovviamente si possono sommare le due sintassi per cambiare contemporaneamente utente e gruppo proprietari:

    % chown gastone:gastone letteraPaperina

Posssiamo utilizzare l'opzione -R per cambiare proprietario e/o gruppo a tutti i file di una directory e delle sue sottodirectory. Piccola nota finale: per cambiare solo il gruppo si può usare anche il comando chgrp(1), che ha la seguente sintassi:

    % chgrp gastone letteraPaperina

.

## 3.25. Come regolo l'orologio di sistema?

Il sistema utilizza un orologio software che serve, oltre ad informare l'utente dell'ora corrente, anche per la corretta gestione del sistema Cron e quindi di tutto il sistema di pianificazione dei processi. Tuttavia questo orologio non è precisissimo e dev'essere quindi sincronizzato con quello di alcuni server che hanno proprio questo compito specifico: tenere l'ora esatta. È stato scritto un protocollo specifico per questo: NTP[7] e ovviamente non poteva mancare un corrispondente demone: ntpd(8). Questo demone si occupa di collegarsi a un server da noi specificato nel file `/etc/ntp.conf` e aggiornare l'ora dell'orologio di sistema. Il formato del file di configurazione dev'essere il seguente, come specificato nella man page di `ntp.conf`:

    server time.ien.it prefer
    server tempo.ien.it
    driftfile /var/db/ntp.drift

Vediamo di analizzarlo riga per riga: la prime due indicano i server NTP da usare, e quelli specificati sono quelli normalmente usati in Italia, gestiti dal CNR di Torino; tra l'altro la prima riga contiene anche la parola prefer per specificare il server da usare preferibilmente. L'ultima riga indica il file che dev'essere usato per indicare la frequenza delle oscillazioni dell'orologio di sistema, e viene aggiornato ogni volta che viene eseguito ntpd(8). Possiamo lanciare ntpd(8) manualmente oppure ad ogni avvio del sistema, specificando, nel file `/etc/rc.conf`, la riga:

    xntpd_enable="YES"

Bisogna notare che ntpd(8) lascia dei messaggi di questo tipo nel syslog, facendoci sapere di quanto era sbagliato l'orologio di sistema:

    Apr 22 16:47:33 localhost ntpd[19103]: time reset 0.154413 s

Per aggiornare l'orologio solo di tanto in tanto si può usare anche ntpdate(8), specificandogli come argomento il server NTP che vogliamo usare. Tuttavia bisogna evidenziare che ntpdate(8) verrà tolto dal sistema tra un po' di tempo.

## 3.26. Come vengono identificati i dischi rigidi e i lettori cdrom in FreeBSD?

FreeBSD assegna i nomi alle periferiche in maniera diversa da Linux o da altri sistemi UNIX e questo è particolarmente evidente con i dischi rigidi e i lettori di CD-ROM.

### 3.26.1. Denominazione dei dischi rigidi sotto FreeBSD

Prima di tutto bisogna fare una distinzione tra dischi rigidi ATA-EIDE e dischi rigidi SCSI: i primi utilizzano il driver ad(4) mentre i secondi da(4). In linea con la tradizione BSD di nominare le periferiche in base al driver utilizzato, gli hard disk ATA-EIDE saranno identificati con `adN` con `N` numero positivo intero compreso tra 0 e 3 mentre i dischi SCSI avranno nome `daN`, con N numero positivo intero:

    /dev/ad0
    /dev/ad1
    /dev/da0

Dopo il driver e il numero identificativo, si trovano le slice ovvero le suddivisioni del disco, che vengono chiamate "partizioni" dagli utenti di altri sistemi operativi. Le slice vengono identificate con `sN`, con N numero intero positivo compreso tra 1 e 4 per le slice primarie e tra 5 e 21 per le logiche:

    /dev/ad0s1 #prima slice primaria sul primo disco ATA/IDE
    /dev/ad0s6 #seconda slice logica sul primo disco ATA/IDE
    /dev/da1s4 #quarta slice primaria sul secondo disco SCSI

Oltre alle slice, FreeBSD fa un ulteriore suddivisione logica delle slice formattate in UFS[8]: le partitions che vengono indicate con le lettere dell'alfabeto a partire dalla a e fino alla h. Solitamente ogni partition rappresenta un punto di mount di un filesystem, eccezion fatta per la partition c che individua l'intera slice. È facile capire questo guardando all'interno del file `/etc/fstab`, che contiene la tabella dei filesystem che possono essere montati sul sistema:

    # Device                Mountpoint      FStype  Options         Dump    Pass#
    /dev/ad0s3b             none            swap    sw              0       0
    /dev/ad0s4a             /               ufs     rw              1       1
    /dev/ad0s4e             /tmp            ufs     rw              2       2
    /dev/ad0s4f             /usr            ufs     rw              2       2
    /dev/ad0s4d             /var            ufs     rw              2       2
    /dev/acd0               /cdrom          cd9660  ro,noauto       0       0
    /dev/acd1               /cdrom1         cd9660  ro,noauto       0       0
    /dev/fd0                /mnt/floppy     msdos   rw,noauto       0       0
    /dev/ad1s1              /archivio2      msdos   rw,noauto       0       0
    /dev/ad0s1              /mnt/win        ntfs    rw,noauto       0       0
    /dev/ad0s4              /archivio1      msdos   rw,noauto       0       0
    /dev/ad0s3g             /oldusr         ufs     rw              2       2

Quindi, per esemplificare la cosa:

    /dev/ad0s3b #seconda partition della terza slice del primo disco ATA/IDE
    /dev/ad1s4d #quarta partition della quarta slice del primo disco ATA/IDE
    /dev/da1s3g #sesta partition della terza slice del secondo disco SCSI

Se uno schema può aiutare a capire, ecco come viene suddiviso un disco:

    ----------------------------------------------------------------
    | disco ad0                                                     |
    -----------------------------------------------------------------
    | s1               | s2           | s3           | s4           |
    |------------------|--------------|--------------|--------------|
    | sliceFreeBSD     | NTFS         | Ext3 FS      | FAT32        |
    |------------------|--------------|--------------|--------------|
    | /| / | / | / | s |              |              |              |
    |  | u | v | t | w |              |              |              |
    |  | s | a | m | a |              |              |              |
    |  | r | r | p | p |              |              |              |
    |--|---|---|---|---|--------------|--------------|--------------|
    | a| b | c | d | e |              |              |              |
    ----------------------------------------------------------------|

### 3.26.2. Denominazione dei lettori CDROM sotto FreeBSD

Anche i lettori di CDROM usano una denominazione differente a seconda del driver utilizzato e, dipendendo il driver quasi sempre dall'interfaccia utilizzata, i nomi delle device che identificano i drive CDROM cominciano con acd per le periferiche ATAPI, e cd per i lettori SCSI. Dopo l'identificativo del driver si trova il numero progressivo di drive a partire da 0:

    /dev/acd0 #primo lettore CDROM su interfaccia ATAPI
    /dev/cd0 #primo lettore CDROM su SCSI

Solitamente i CDROM non hanno le partitions, quindi il numero di identificazione è l'ultimo componente del nome del device.

## 3.27. Come partiziono un disco per FreeBSD?

Il partizionamento di un disco in un sistema FreeBSD è un processo un pò complesso se paragonato con quello relativo ad altri sistemi UNIX like come GNU/Linux, la procedura di partizionamento del disco può essere suddivisa in due parti.

1. La prima parte è quella relativa alla suddivisione della nuova unità a disco in partizioni fisiche che, come abbiamo visto in precedenza, prendono il nome di slice, una di queste partizioni o più slice possono essere assegnate a FreeBSD.

2. La slice che abbiamo dedicato a FreeBSD deve essere a sua volta suddivisa in ulteriori partizioni nelle quali verranno creati i relativi filesystem UFS oltre che alla partizione dedicata allo spazio per il file di swap.

Per suddividere il disco e creare le partizioni fisiche, le slide, può essere utilizzata l'utility di installazione /stand/sysinstall, in alternativa può anche essere utilizzata l'utility fdisk(8) che ci aiuterà a suddividere fisicamente il disco in slices. Nell'esempio sottostante creiamo una slice che include l'intero disco

    # fdisk -i /dev/ad1

La slice è pronta a ricevere una label, una label BSD consente di creare sino ad 8 partitions. Il comando disklabel ci aiuterà a creare le partizioni FreeBSD all'interno della slice, il parametro auto consente di generare un layout di default per questa slice

    # disklabel -r -w ad1 auto

Il flag -r consente di accedere al disco in modo diretto, il flag -w richiede anche di indicare il dispositivo del disco (ad1 nel nostro caso). grazie al comando disklabel -e è ora possibile editare le label impostate di default, l'opzione -e specifica la variabile editor con la quale si avvia una sessione testuale che consentirà di editare e modificare il partizionamento. Dopo aver creato le partizioni possiamo finalmente generare il filesystem UFS utilizzando il comando newfs

    # newfs /dev/ad1s1a

Con il comando fsck possiamo verificare che il filesystem sia realmente funzionante

    # fsck /dev/ad1s1a

ora è possibile montare il filesystem con:

    # mount /dev/ad1s1a /

per abilitare lo spazio disco dedicato al file di paginazione della memoria (file di swap) dovremmo utilizzare il comando swapon(8)

    # swapon /dev/ad1s1b

le entry contenute nel file `/etc/fstab` consentiranno di caricare automaticamente tutti i filesystems all'abbiamento del sistema, a questo punto riassumiamo come FreeBSD vede le device disco:

    ad0    # primo disco IDE
    ad0s1e # partizione "e" della slice1 del primo disco IDE
    ad1    # secondo disco IDE
    ad1s1a # partizione "a" della slice1 del secondo disco IDE
    ad2    # terzo disco IDE
    ad2s1c # partizione "c" della slice1 del terzo disco IDE
    ad3    # quarto disco IDE
    ad3s1f # partizione "f" della slice1 del quarto disco IDE

dopo aver analizzato come utilizzare le unità a disco possiamo concludere questo paragrafo affermando che un semplice errore in fase di creazione di una slice può compromettere per sempre il funzionamento del Vostro sistema, è quindi sempre una buona idea utilizzare il comando sysinstall(8).

## 3.28. Come posso sapere quali porte sono aperte nel mio sistema?

Sapere quali porte di rete siano aperte sul nostro sistema è fondamentale per la sicurezza del sistema stesso. Vi sono diversi modi per identrificare le porte aperte e le eventuali connessioni ad esse ed il primo e più conosciuto di questi è:

    # netstat -an -f inet
    Active Internet connections (including servers)
    Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
    tcp4       0      0  12.123.45.67.50033    195.22.198.15.80       ESTABLISHED
    tcp4       0      0  12.123.45.67.50018    195.22.198.15.80       ESTABLISHED
    tcp4       0      0  192.168.0.1.65232      217.220.29.16.6667     ESTABLISHED
    tcp4       0      0  192.168.0.1.65231      213.92.8.4.6667        ESTABLISHED
    tcp4       0      0  192.168.0.1.139        *.*                    LISTEN
    tcp4       0      0  127.0.0.1.3493         127.0.0.1.49154        ESTABLISHED
    tcp4       0      0  127.0.0.1.49154        127.0.0.1.3493         ESTABLISHED
    tcp4       0      0  127.0.0.1.3493         127.0.0.1.49153        ESTABLISHED
    tcp4       0      0  127.0.0.1.49153        127.0.0.1.3493         ESTABLISHED
    tcp4       0      0  *.3493                 *.*                    LISTEN
    tcp46      0      0  *.80                   *.*                    LISTEN
    tcp4       0      0  *.25                   *.*                    LISTEN
    tcp4       0      0  *.22                   *.*                    LISTEN
    tcp6       0      0  *.22                   *.*                    LISTEN
    tcp4       0      0  *.515                  *.*                    LISTEN
    tcp6       0      0  *.515                  *.*                    LISTEN
    tcp4       0      0  127.0.0.1.53           *.*                    LISTEN
    tcp4       0      0  192.168.0.1.53         *.*                    LISTEN
    udp4       0      0  192.168.0.1.138        *.*
    udp4       0      0  192.168.0.1.137        *.*
    udp4       0      0  *.138                  *.*
    udp4       0      0  *.137                  *.*
    udp4       0      0  *.3493                 *.*
    udp4       0      0  127.0.0.1.123          *.*
    udp4       0      0  192.168.0.1.123        *.*
    udp4       0      0  *.123                  *.*
    udp4       0      0  *.49152                *.*
    udp4       0      0  127.0.0.1.53           *.*
    udp4       0      0  192.168.0.1.53         *.*
    udp4       0      0  *.514                  *.*

L'output di netstat può sembrare un po' oscuro a prima vista: dopo l'identificazione del protocollo si trovano il numero dei pacchetti nelle code di ricezione e di invio, quindi l'indirizzo locale, composto da 4 campi per l'indirizzo IP e un quinto per la porta utlizzata. Un eventuale * (asterisco) in sostituzione dell'indirizzo IP evidenzia che la porta è attiva in ogni indirizzo locale. La quinta colonna indica l'host remoto e la porta dell'host remoto qualora ci sia una connessione, oppure *.* in caso la porta sia in ascolto e in attesa di una connessione. L'ultima colonna mostra lo stato della connessione: ESTABLISHED se è attiva e pronta a trasmettere e/o ricevere, LISTEN se il sistema è in attesa di una connessione su quella porta. Ci sono altri stati possibili e la consultazione della man page di netstat(1) può chiarire tutti i dubbi. L'output di netstat è utile per sapere le connessioni attive, tuttavia se vogliamo chiuderne una e impedire che vengano effettuate altre connessione da/a quella porta occorre sapere almeno quali applicazioni e/o servizi utilizzano quella porta e il modo più veloce per venirne a conoscenza è l'analisi del file `/etc/services`:

    # cat /etc/services | grep 3493
    nut             3493/tcp   #Network UPS Tools
    nut             3493/udp   #Network UPS Tools

Un altro tool molto utile per conoscere le porte che stiamo utilizzando in questo momento è sockstat, che ci fornisce anche utente, comando e processo di ogni connessione e di ogni porta in ascolto:

    # sockstat -46
    USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
    bind     named      59998 3  udp4   *:58314               *:*
    paperino evolution- 59406 26 tcp4   12.123.45.67:51970    216.136.204.117:80
    paperino evolution- 59406 27 tcp4   12.123.45.67:51971    63.236.73.26:80
    paperino evolution- 59406 28 tcp4   12.123.45.67:51972    204.152.186.46:80
    paperino ssh        56858 3  tcp4   12.123.45.67:50565    212.171.15.152:22
    paperino irssi      14717 3  tcp4   192.168.0.1:65232     217.220.29.16:6667
    paperino irssi      14717 5  tcp4   192.168.0.1:65231     213.92.8.4:6667
    www      httpd      56922 3  tcp46  *:80                  *:*
    www      httpd      56921 3  tcp46  *:80                  *:*
    www      httpd      56920 3  tcp46  *:80                  *:*
    www      httpd      5115  3  tcp46  *:80                  *:*
    www      httpd      791   3  tcp46  *:80                  *:*
    root     nmbd       639   8  udp4   *:137                 *:*
    root     nmbd       639   9  udp4   *:138                 *:*
    root     nmbd       639   10 udp4   192.168.0.1:137       *:*
    root     nmbd       639   11 udp4   192.168.0.1:138       *:*
    root     smbd       637   9  tcp4   192.168.0.1:139       *:*
    root     upslog     631   3  tcp4   127.0.0.1:49154       127.0.0.1:3493
    uucp     upsmon     630   3  tcp4   127.0.0.1:49153       127.0.0.1:3493
    uucp     upsd       626   3  udp4   *:3493                *:*
    uucp     upsd       626   4  tcp4   *:3493                *:*
    uucp     upsd       626   8  tcp4   127.0.0.1:3493        127.0.0.1:49153
    uucp     upsd       626   9  tcp4   127.0.0.1:3493        127.0.0.1:49154

I titoli sopra le colonne spiegano chiaramente i dati di ognuna. Tuttavia l'analisi non è ancora completa, in quanto sappiamo che porte sono aperte e quali sono in attesa di una connessione, però alcune potrebbero essere filtrate o chiuse da un firewall e quindi diventa importante sapere quali porte siano effettivamente raggiungibili dall'esterno.Un ottimo tool e probabilmente anche il più diffuso per conoscere eventuali "falle" è `security/nmap`, uno scanner che interroga tutte le porte dell'IP specificato e informa su quali siano aperte, filtrate o chiuse. Ovviamente è necessario eseguire nmap da una macchina posizionata su una rete esterna rispetto al sistema che vogliamo testare. Ad esempio, per fare una scansione di `target` da `base`:

    base# nmap -sS -O target
    Starting nmap 3.27 ( www.insecure.org/nmap/ ) at 2003-06-17 13:03 CEST
     Insufficient responses for TCP sequencing (3), OS detection may be less accurate
    Interesting ports on target (12.34.56.78):
    (The 1619 ports scanned but not shown below are in state: closed)
    Port       State       Service
    22/tcp     open        ssh
    25/tcp     open        smtp
    53/tcp     open        domain
    80/tcp     open        http
    Remote OS guesses: Mac OS X 10.1.4 (Darwin Kernel 5.4) on iMac, Mac OS X 10.1.5, FreeBSD 4.3 - 4.4PRERELEASE, FreeBSD 5.0-CURRENT (Jan 2003), FreeBSD 5.0-RELEASE (x86)
    Uptime 13.967 days (since Tue Jun  3 13:51:42 2003)

    Nmap run completed -- 1 IP address (1 host up) scanned in 16.704 seconds

nmap fornisce la porta e il protocollo, lo stato della porta stessa e il servizio che è attivo su quella porta. Inoltre cerca di individuare il sistema operativo che gira su `target`. Ovviamente l'essere a conoscenza delle porte aperte è solo un primo passo verso la sicurezza di un sistema.

## 3.29. Che differenza c'è tra APM e ACPI ?

Sia APM[9] sia ACPI[10] servono per monitorare le risorse della macchina in fatto di energia disponibile e consumo della stessa. Fino alla versione 4.x di FreeBSD veniva forntio il supporto solo per apm, mentre tra le novità della versione 5.x c'è ACPI, seppure al momento attuale (5.2-CURRENT) non sia prefetto, anche a causa dei produttori hardware che non seguono correttamente lo standard.

## 3.30. Come attivo APM su una 5.x ?

Di default le release di FreeBSD superiori alla 5.0 hanno acpi(4) attivo di default, ma ci sono alcuni sistemi più vecchi che non supportano questo standard e devono utilizzare apm(4). Per utilizzarlo è necessario inserire le seguenti righe nel nostro file di configurazione del kernel:

    device       pmtimer
    device       apm

Mentre il nostro nuovo kernel viene compilato, editiamo `/etc/rc.conf`, aggiungendo le opzioni

    apm_enable="YES"
    apmd_enable="YES"

L'ultima operazione da compiere prima di riavviare è disabilitare acpi(4) come spiegato alla domanda "Come disattivo ACPI ?" (Sezione 3.31).

## 3.31. Come disattivo ACPI ?

A causa dell'importante ruolo che riveste nella gestione del sistema, ACPI può essere disabilitato solo a boot time. Per far ciò effettuiamo un normale avvio del sistema, effettuiamo il login come root e aggiungiamo la seguente riga al file `/boot/loader.conf`:

    hint.acpi.0.disabled="1"

Al prossimo reboot, acpi(4) non entrerà in funzione. A partire dalla 5.1-RELEASE è presente un menu di start, che viene mostrato prima di effettuare il boot: possiamo scegliere che ACPI non sia avviato anche da qui, solitamente selezionando l'opzione 2.

## 3.32. Come posso utilizzare tutto lo spazio possibile della partizione?

Analizzando l'output di

    % df
    Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
    /dev/ad0s4a    257838    93228   143984    39%    /
    devfs               1        1        0   100%    /dev
    /dev/ad0s4e    257838    67010   170202    28%    /tmp
    /dev/ad0s4f   9541210  4636766  4141148    53%    /usr
    /dev/ad0s4d    257838    99172   138040    42%    /var
    /dev/ad0s3g   9172610  6273632  2165170    74%    /oldusr
    /dev/ad1s1   39076608 27335488 11741120    70%    /data

si può notare che la somma tra i blocchi usati e quelli disponibili non è uguale al numero di blocchi totali. Infatti 93228 + 143984 = 237212 e non 257838: ci sono 20626 blocchi di differenza, pari all'8% di spazio non usato. Questo spazio in più serve al sistema per impedire un effettivo riempimento totale del filesystem. Si può ridurre questo margine utilizzando il comando tunefs(8) :

    # tunefs -m5

tunefs(8) è l'utility principale per modificare le impostazioni di un certo filesystem.

## 3.33. Ho perso il file `/etc/master.passwd`, come lo ricreo?

Può capitare anche ad un esperto sysadmin di cancellare per errore il file delle password di sistema. Non c'è nessun problema, in quanto ricrearlo è molto semplice:

    # pwd_mkdb /etc/master.passwd

pwd_mkdb(8) ricrea il file in questione e altri 2 piccoli database contenenti le stesse informazioni `/etc/spwd.db` e `/etc/pwd.db` .

## 3.34. Perché non riesco ad avere l'output di ls(1) a colori?

Molti utenti provenienti da GNU/Linux, cercano di ottenere l'output di ls(1) a colori passando l'opzione --colour a `ls` stesso. In FreeBSD invece l'opzione corretta è -G.

## 3.35. Come posso sapere quanta memoria di swap sto usando?

La risposta è breve: swapinfo(8). Tuttavia anche top(1) nella quarta riga del suo output, fornisce informazioni riguardanti l'utilizzo della partizione di swap. Per ottenere solo questa riga possiamo reindirizzare l'output di top(1) come in

    # top | grep Swap

## 3.36. Come posso rivedere il messaggi di probe delle device al boot?

L'output completo che appare sulla console all'avvio del sistema è recuperabile in ogni momento nel file `/var/log/dmesg.boot`. Anche dmesg(8) contiene i messaggi del boot, almeno finché essi non vengono sostituiti da altri messaggi (infatti dmesg(8) prendere le sue informazioni da un buffer).

## 3.37. Come posso montare un immagine ISO?

Può capitare la situazione di voler montare un'immagine ISO per accedere ai dati in essa contenuti senza scrivere un CD, oppure per verificare la sua integrità Innanzi tutto bisogna creare un Memory Disk, tramite il comando mdconfig(8):

    # mdconfig -a -t vnode -f image.iso -u 0;

Questo comando creerà un nuovo device: `/dev/mdN`, che può essere montato con un normale

    # mount -t cd9660 /dev/md0 /mountpoint

Per eliminare il Memory Disk, si usano, dopo aver smontato l'immagine, le opzioni -d -u di mdconfig(8):

    # mdconfig -d -u 0

## 3.38. Mi si è rovinato l'MBR, come posso reinstallarlo?

Può capitare che il Master Boot Record del nostro disco venga sovrascritto da un sistema operativo possessivo, dall'installazione mal riuscita di un altro OS o da altri fattori. Ripristinarlo è molto semplice: bootiamo il sistema con un live cd come FreeSBIE oppure con il cd 2 della nostra -RELEASE, e lanciamo il comando

    # boot0cfg -B /dev/ad0

La man page di boot0cfg(8) fornisce moltissime informazioni riguardo le opzioni che possono essere passate a questo comando.

## 3.39. Chi è l'utente `toor`?

`toor` svolge le funzioni di "superuser di comodo" su un sistema FreeBSD. L'utente `toor` ha infatti tutti i privilegi di `root`, ma non è fondamentale per la sopravvivenza del sistema ed è quindi più atto ad essere configurabile secondo le preferenze dell'amministratore di sistema. Ad esempio, si potrebbe volere utilizzare la shell Bash invece della tcsh per amministrare il sistema: non essendo Bash inclusa di default in un sistema FreeBSD, non è opportuno sceglierla come shell di `root`, in quanto in caso di corruzione del filesystem `/usr`, si sarebbe impossibilitati (o quasi) ad effettuare il login come root senza essere fisicamente presenti alla console. È quindi preferibile impostare la shell di `toor` a `/usr/local/bin/bash`, non quella di `root`. Ovviamente questo è solo un esempio dell'utilità di `toor`.

## 3.40. Non riesco a diventare `root` utilizzando su(1). Come posso fare?

Per acquisire i privilegi di superuser è necessario che l'utente sia membro del gruppo `wheel` (gid 0). `root` dovrà dunque editare `/etc/groups`, aggiungendo gli utenti al gruppo `wheel`.

## 3.41. Posso cambiare il messaggio che viene mostrato ad ogni login?

Quel messaggio viene chiamato motd ossia Message of The Day. Per cambiare il testo visualizzato è sufficiente editare a piacimento il file `/etc/motd`.

## 3.42. Come installo le applicazioni? Cos'è un port? Cos'è un package?

Molta gente non usa un sistema operativo, ma usa applicazioni. È quindi fondamentale che un sistema operativo ben fatto consenta all'utente di installare, rimuovere, aggiornare, configurare facilmente i programmi che preferisce. FreeBSD ha un sistema di gestione pacchetti molto efficiente, denominato ports. Il sistema dei ports è costituito da un albero di directory che comincia in `/usr/ports` contententi `Makefile`: il software è suddiviso in diverse categorie a seconda della tipologia: audio, editors, net, security, x11, www...

Installare un port è molto semplice: innanzi tutti è necessario individuare in quale directory si trovi il port. Per fare questo spostiamoci in `/usr/ports/` ed eseguiamo la ricerca nel seguente modo:

    # make search name=wmnd
    Port:   wmnd-0.4.7
    Path:   /usr/ports/net/wmnd
    Info:   Improved network monitoring dock app (with tons of features)
    Maint:  flag@gufi.org
    Index:  net
    B-deps: XFree86-libraries-4.3.0_6 expat-1.95.6_1 fontconfig-2.2.90_3
    freetype2-2.1.5_1 gettext-0.12.1 gmake-3.80_1 imake-4.3.0_1
    libiconv-1.9.1_3 perl-5.6.1_15 pkgconfig-0.15.0

    R-deps: XFree86-libraries-4.3.0_6 expat-1.95.6_1 fontconfig-2.2.90_3
    freetype2-2.1.5_1 imake-4.3.0_1 perl-5.6.1_15 pkgconfig-0.15.0

Questo comando esegue la ricerca di wmnd tra i nomi di tutti i ports, e se trova risultati, li mostra indicandone:

  Nome e versione del software
  Percorso completo della directory del port
  Una brevissima descrizione del software
  L'indirizzo email del maintainer del port, ossia del responsabile del port, al quale vanno segnalati bug, aggiornamenti, patches, ecc.
  Le categorie di cui fa parte questo software
  I pacchetti necessari alla compilazione di questo software (più oltre si vedrà esattamente cosa significa ciò).
  I pacchetti necessari al corretto funzionamento di questo software.

È possibile sostituire la parola key a name per allargare la ricerca a tutti i campi e non solo al nome.

Entriamo quindi nella directory del port indicata dal campo Path: ed esaminiamo il suo contenuto:

    # cd /usr/ports/net/wmnd
    # ls
    Makefile        README.html     distinfo
    pkg-descr       pkg-message     pkg-plist

`Makefile` contiene le istruzioni per la compilazione e l'installazione del port. `README.html` e `pkg-descr` contengono una descrizione del port in una decina di righe. `pkg-message` è un messaggio per l'utente che viene visualizzato una volta completata l'installazione. L'impronta md5 del pacchetto sorgente è contenuta nel file `distinfo`.

L'installazione avviene con un semplice comando:

    # make install clean distclean

Ora saranno scaricati i sorgenti del programma, che verranno patchati se necessario, compilati ed installati. Quindi verrà rimossa la directory di lavoro `./work` e il pacchetto dei sorgenti che era posto in `/usr/ports/distfiles/`.

È molto importante che tutte le applicazioni vengano installate attraverso i ports, perché solo così si potrà garantire un perfetto funzionamento delle applicazioni stesse.

I packages non sono altro che ports già compilati dal cluster di FreeBSD.org. Sono utili in caso si voglia risparmiare il tempo di compilazione, quindi specialmente per le macchine più lente e/o i pacchetti più grossi (OpenOffice, KDE, Gnome). Per installare un package si agisce in questo modo:

    # pkg_add -r wmnd

Il pacchetto precompilato verrà scaricato ed installato. Se si ha già il pacchetto disponibile sul proprio computer è sufficiente

    # pkg_add pacchetto

## 3.43. Come rimuovo un port o un package?

Per rimuovere un'applicazione installata sul nostro sistema si usa pkg_delete(1); seguito dal nome del pacchetto. Il nome dev'essere composto nella forma nome-versione, ottenibile eseguendo pkg_info(1) e mandando l'output a grep(1):

    # pkg_info | grep wmnd
    wmnd-0.4.7          Improved network monitoring dock app (with tons of features
    # pkg_delete wmnd-0.4.7

Il pacchetto wmnd sarà completamente rimosso dal nostro sistema.

## 3.44. Come aggiorno i ports/packages installati?

Non è affatto utile mantenere vecchie versioni di programmi, in quanto solitamente le nuove contengono molti bugfixes. Per aggiornare i pacchetti installati, bisogna prima di tutto eseguire l'update dell'albero dei ports come spiegato in "Come posso aggiornare il sistema?" (Sezione 3.6). Fatto ciò si aprono due strade: possiamo utilizzare le utilità incluse nel sistema, oppure installare `sysutils/portupgrade`. Scelta una di queste due vie, bisogna capire quali pacchetti sono da aggiornare. Nel sistema base è compreso il programma pkg_version(1) mentre la suite portupgrade comprende anche un comando portversion. Per conoscere quali pacchetti aggiornare si usa

    # pkg_version |grep \

oppure

    # portversion -l "<"

Ora che sappiamo quali pacchetti aggiornare, vediamo come procedere all'aggiornamento in entrambi i modi, con portupgrade e con le utilità del sistema base.

### 3.44.1. Aggiornare i ports con `portupgrade`

Per aggiornare un singolo pacchetto con portupgrade, è sufficiente un

    # portupgrade wmnd

Il port in questione verrà scaricato, compilato, ed installato. In caso di errore in una qualsiasi di queste fasi, portupgrade ripristinerà la versione precedente di cui aveva fatto un backup. È possibile istruire portupgrade ad usate i packages specificando le opzioni -PP o -P. La differenza tra le due è che -PP utilizza solo i packages, mentre -P ricorre ai packages solo se è possibile, ossia solo se il package viene trovato in locale o sul repository remoto.

portupgrade basa il suo funzionamento sul database dei package `/var/db/pkg`, e per evitare inconsistenze nel database stesso, è utile sistemarlo prima di utilizzare portupgrade. Quest'operazione si esegue nel seguente modo:

    # pkgdb -F

Può risultare utile per il buon funzionamento di portupgrade anche mantenere aggiornato il database dei ports con

    # portsdb -uU

Questo comando creerà il file `/usr/ports/INDEX.db`, utilizzato da alcuni programmi forniti con portupgrade.

Si può ordinare a portupgrade di passare uno o più argomenti a make(1), se stiamo utilizzando i ports, tramite l'opzione -m, come in

    # portupgrade mplayer* -m WITH_GUI=yes

Molte altre opzioni, come -a per aggiornare tutti i pacchetti e -r per aggiornare i pacchetti che dipendono da quello specificato, sono disponibile nella man page di portupgrade.

### 3.44.2. Aggiornare i ports con le utility `pkg_*`

Il secondo modo per aggiornare i pacchetti è molto facile: si rimuove il pacchetto in questione e tutti i pacchetti da cui questo dipende e che da questo dipende e lo si reinstalla. Può non sembrare uan cosa sensata, eppure non ci si può fidare completamente di portupgrade, in quanto, seppur la situazione sia molto migliorata rispetto al passato, si verificano ancora alcuni casi di errore da parte di questa applicazione.

# Capitolo 4. XFree86

Il server grafico X svolge un ruolo ormai fondamentale: fornisce la base per l'interfaccia grafica delle applicazioni. Nonostante sia estremamente avanzato e supporti le schede video di ultimissima generazione, ha un architettura che potrebbe sembrare "antiquata" alla maggior parte di coloro che non lo conoscono bene. È quasi naturale imbattersi in problemi di vario genere durante l'utilizzo di questo sistema a finestre.

## 4.1. Come posso usare le applicazioni X via SSH?

Chiamiamo `locale` la macchina su cui stiamo lavorando e `remoto` la macchina a cui ci collegheremo e che sulla quale è installata l'applicazione che vogliamo visualizzare su `locale`. Per cominciare bisogna dire a `locale` di accettare le richieste di `remoto`:

    locale:~% xhost +remoto

Ora ci colleghiamo via SSH a `remoto` e, dopo aver effettuato il login, esportiamo la variabile DISPLAY in modo che punti al primo display di `locale`:

    remoto:~% export DISPLAY=locale:0

oppure, se usiamo una shell C:

    remoto:~% setenv DISPLAY locale:0

Ora, dopo aver lanciato X su `locale`, potremo lanciare l'applicazione da `remoto` e vederla sullo schermo di `locale`.

Può risultare utile anche un altro metodo utilizzato molte volte, specialmente se è presente un firewall che ci consente di utilizzare solo la porta 22, tipica di SSH. Su `remoto`, apriamo `/etc/ssh/sshd_config`, il file di configurazione di sshd e inseriamo la riga

    X11Forwarding yes

Fatto ciò aggiungiamo la riga

    ForwardX11 yes

al file di configurazione `/etc/ssh/ssh_config` di `locale` se vogliamo valga per tutti gli utenti, oppure possiamo usare il file `$HOME/.ssh/config` per solo un utente. Eseguiamo ora X su `locale` e, da `remoto`, lanciamo l'applicazione che vogliamo far apparire sul monitor di `locale`.

## 4.2. Come installo i driver proprietari per le schede grafiche NVIDIA®?

A partire dal Novembre 2002, NVIDIA® ha cominciato a distribuire i driver per l'accelerazione grafica delle sue schede video su FreeBSD. Effettivamente c'era bisogno di questi driver, perché quelli compresi in XFree86 non erano soddisfacenti, specialmente per un uso multimediale del sistema. Purtroppo questi driver sono rilasciati sotto licenza proprietaria e solo in formato binario.

> AvvertimentoI driver binari NVIDIA® sono disponibili anche nel port `x11/nvidia-drivers`

Dopo aver scaricato il pacchetto dal sito della NVIDIA®, possiamo procedere con la decompressione e l'installazione:

    #tar zxf NVIDIA_FreeBSD-X.Y-WZKH.tar.gz
    #cd NVIDIA_FreeBSD-X.Y-WZKH
    #make setup

L'ultimo comando compila i sorgenti, creando così un modulo per il kernel, installandolo e caricandolo subito. Crea inoltre il device `/dev/nvidia`, rimuove le librerie OpenGL che potrebbero creare conflitto con quelle NVIDIA OpenGL e modifica il file `/boot/loader.conf` in modo che carichi all'avvio del sistema il modulo dei driver e quello per la compatibilità dei binari Linux qualora non avessimo il supporto integrato nel kernel. Dopo l'installazione bisogna sistemare anche la configurazione di X tramite il file `/etc/XF86Config` e precisamente la sezione "Modules" e quella "Device" corrispondente al device NVIDIA. Importante nella sezione "Modules è la riga:

    Load  "glx"

mentre nella sezione "Device" della scheda video bisogna sostuire la riga

    Driver      "nv"

con

    Driver      "nvidia"

Ora potremo utilizzare tranquillamente i driver NVIDIA® ufficiali, però occorre fare un discorso a parte riguardo al driver per l'AGP, infatti si possono usare si quelli forniti da NVIDIA® sia quelli nativi di FreeBSD. Per specificare la nostra scelta dobbiamo aggiungere una riga nella stessa sezione "Device" di cui sopra:

    Option "NvAgp" "0"

se non vogliamo usare alcun driver AGP,

    Option "NvAgp" "1"

per usare il driver NVIDIA®,

    Option "NvAgp" "2"

per utilizzare il driver fornito da FreeBSD e infine

    Option "NvAgp" "3"

se vogliamo provare prima a utilizzare il driver di FreeBSD e poi, in caso il tentativo fallisca, quello ufficiale. Solitamente i driver AGP NVIDIA® vengono preferiti a quelli nativi. Qualora però si scelga di utilizzare quelli nativi occorre ricompilare il modulo con alcune opzioni particolari e caricare il modulo `agp.ko` all'avvio del sistema. Per maggiori informazioni si veda il file `README` compreso nella directory `NVIDIA_FreeBSD-X.Y-WZKH/doc`.

## 4.3. Come posso usare la rotella del mouse?

Ormai quasi tutti i mouse in commercio sono dotati della rotellina centrale per scorrere verticalmente la schermata, inoltre può essere usata anche come pulsante centrale del mouse. Per utilizzare questo comodo dispositivo sotto X (ricordiamo che per effettuare lo scroll in console è sufficiente premere Scroll Lock e utilizzare le frecce oppure PgUP e PgDOWN) bisogna avere la sezione "Device" di `/etc/XF86Config` simile alla seguente:

    Section "InputDevice"
           Identifier  "Mouse0"
           Driver      "mouse"
           Option      "Protocol" "auto"
           Option      "Device" "/dev/sysmouse"
           Option      "ZAxisMapping" "4 5"

La riga fondamentale è, facile da intuire, l'ultima.

## 4.4. Come configuro il server grafico X?

Il server grafico X fornisce il supporto per l'interfaccia grafica a FreeBSD (e a tutti gli UNIX®). Quello usato principalmente sugli UNIX® non commerciali è XFree86, discendente libero della sezione X386 del progetto X11 ([11]). Le versioni di FreeBSD successive alla 4.8-RELEASE contengono XFree86-4.3.0 installabile dai ports e una versione precedente può essere installata in fase di configurazione del sistema. Il meta-port di XFree86 è `x11/XFree86-4`. Una volta installato il pacchetto eseguiamo

    #XFree86 -configure

e troveremo ora un file `XF86Config.new` nella home directory dell'utente `root`; per testarlo basta lanciare

    #XFree86 -xf86config /root/XF86Config.new

Se il file di configurazione è corretto dovremmo vedere una schermata a sfondo grigio-bianco con il puntatore del mouse a forma di X. Per uscire da questa configurazione è necessario premere in combinazione Ctrl+Alt+Backspace. Il file di configurazione, così com'è ora non è ottimizzato e anzi contiene alcuni piccoli errori a cui occorre apportare le necessarie correzioni. Prima di tutto aggiungiamo nella sezione Monitor i valori di frequenza orizzontale e refresh verticale del nostro monitor:

    Section "Monitor"
            Identifier   "Monitor0"
            VendorName   "Monitor Vendor"
            ModelName    "Monitor Model"
            Horizsync       37-70
            Vertrefresh     50-120
    EndSection

Ora sistemiamo la profondità di colore e la risoluzine che desideriamo utilizzare:

    Section "Screen"
            Identifier "Screen0"
            Device     "Card0"
            Monitor    "Monitor0"
            DefaultDepth 24
            SubSection "Display"
                    Depth     24
                    Modes "1024x768"
            EndSubSection
    EndSection

X non utilizza la mappa caratteri che viene caricata dal sistema al boot, quindi è necessario specificarne una inserendo la riga

    Option  "XkbLayout" "it"

all'interno della sezione InputDevice che identifica la tastiera (Keyboard0). Ovviamente se non abbiamo una tastiera, dovremo specificare il codice appropriato. Bene, la configurazione di base è terminata, tuttavia si possono effettuare ulteriori "limature" per perfezionare il tutto a propria discrezione: installare ulteriori fonts, selezionare opzioni particolari per la scheda video e molto altro.

# Capitolo 5. Applicazioni e Varie

Durante il normale utilizzo del sistema si incontrano problemi di qualsiasi tipo: applicazioni che non funzionano come vorremmo (perché evidentemente non le abbiamo configurate bene), periferiche solo parzialmente supportate (perché non abbiamo spulciato le Hardware Notes prima di comprarlo?) e quant'altro. Di seguito si trovano le risposte e le soluzioni ad alcuni di questi problemi.

## 5.1. Come posso crackare le password del mio sistema per verificare se sono sicure?

Per aumentare la sicurezza del sistema si può cercare di crackare le password degli utenti, ovvero tentare di scoprirle per vedere se seguono una politica di sicurezza abbastanza efficace. È una pratica perfettamente legale, se svolta su un sistema di cui siamo gli amministratori, ma è penalmente perseguibile se tentiamo di farlo su altri sistemi senza l'autorizzazione dell'amministratore degli stessi. Installiamo `/usr/ports/security/crack`, un port adatto alle nostre esigenze. Entriamo in `/usr/local/crack` (si notino i particolari permessi di questa directory e del suo contenuto, accessibile solo da `root`) e lanciamo:

    #./Crack -fmt bsd /etc/master.passwd

Crack cercherà ora di scoprire le password di tutti gli utenti del sistema in base alle informazioni GECOS [12] . Eseguendo

    #./Reporter -quiet

sapremo quali password sono state individuate da Crack e potremo provvedere a cambiarle o a informare i corrispettivi utenti di cambiarle. Un ultimo passo è ancora necessario: occorre eliminiare tutti i workfile utilizzati da Crack, perché potrebbero essere utilizzati per indovinare le nostre password; per fare ciò diamo un

    #make tidy
    find . -name "*~" -print | xargs -n50 rm -f
    ( cd src; for dir in * ; do ( cd  ; make clean ) ; done )
    rm -f dawglib.o debug.o rules.o stringlib.o *~
    /bin/rm -f *.o tags core rpw destest des speed libdes.a .nfs* *.old  *.bak deste
    st rpw des speed
    rm -f *.o *~
    scripts/plaster
    + kill -TERM 26120
    + rm -f run/Klocalhost.26048
    + exit 0
    scripts/fbmerge
    rm -f run/[DIEGTKM]*
    rm -f run/dict/gecos.*
    rm -f run/dict/gcperm.*
    #rm /usr/local/crack/run/F-merged

Naturalmente questa è solo una delle precauzioni da prendere per evitare ospiti indesiderati nel nostro sistema.

## 5.2. Come posso vedere un DVD?

Per la visione dei DVD sotto FreeBSD ci sono molti ports utilizzabili: `multimedia/ogle-gui`, `multimedia/mplayer`, `/multimedia/xine`, solo per citare i più diffusi. Alcuni necessitano la ricompilazione del kernel con l'aggiunta di due opzioni particolari:

    options CPU_ENABLE_SSE
    option USER_LDT

La prima opzione serve per attivare uno speciale set di istruzioni del processore, mentre la seconda consente alle applicazioni a livello utente la gestione della Local Descriptor Table, che riguarda la gestione della memoria virtuale. Lanciamo la compilazione del kernel e, nell'attesa, aggiustiamo altri piccoli particolari che miglioreranno le prestazioni della nostra macchina durante l'utilizzo di programmi multimediali. Si tratta di alcuni valori di sysctl(8) e precisamente dovremmo inserire in `/boot/loader.conf`:

    hw.ata.atapi_dma="1"
    hw.ata.ata_dma="1"

Entrambe servono per attivare il DMA[13] dei dischi rigidi e dei cdrom ATA, quindi non sono necessari per chi ha periferiche SCSI. Inoltre in `/etc/sysctl.conf` scriviamo le seguenti espressioni:

    kern.ipc.shmmax=67108864
    kern.ipc.shmall=32768
    hw.snd.pcm0.vchans=4
    hw.snd.maxautovchans=4

Le prime due righe migliorano il valore della memoria condivisa minima e massima per il server X e le sue applicazioni. La terza riga, da inserire solo nel caso che la nostra scheda audio usi il device `pcm`, serve a far allocare 4 canali virtuali per la scheda audio, un valore accettabile per l'utilizzo quotidiano. hw.snd.maxautovchans alloca 4 canali virtuali per qualsiasi device sonora che sarà attaccata successivamente.Mentre avviene la ricompilazione del kernel, cambiamo i permessi alla device del lettore DVD, consentendo a tutti gli utenti del sistema di leggere i DVD stessi:

    #chmod 666 /dev/acd0c

quindi creiamo 2 link simbolici:

    #ln -s /dev/acd0c /dev/dvd
    #ln -s /dev/racd0c /dev/rdvd

Dopo aver effettuato l'installazione del kernel e il riavvio del sistema, installiamo il port `multimedia/ogle-gui` (o un qualsiasi player DVD tra i tanti presenti nei ports) e godiamoci lo spettacolo.

## 5.3. Come compilo ipfw2 su una 4.X?

ipfw2 è il nuovo sistema di firewall di FreeBSD, che rimpiazza ed estende ipfw(8). Di default ipfw2 non viene compilato nelle RELEASE precedenti alla 5.0, pur essendo tuttavia presente nei sorgenti, quindi per usufruire delle nuove potenzialità offerte da questo lavoro dell'italiano Luigi Rizzo, bisogna procedere con la compilazione diretta dai sorgenti: per prima cosa aggiungiamo nel file `/etc/make.conf` la riga

    ipfw2=true

Quindi, nel nostro file di configurazione del kernel, mettiamo

    options IPFW2

e ricompiliamo il kernel. Subito dopo il riavvio del sistema, entriamo nella directory `/usr/src/sbin/ipfw` e lanciamo

    #make  && make  install && make clean

poi passiamo in `/usr/src/lib/libalias` e ridiamo la stessa serie di comandi. ipfw2 ora è installato e potremo usufruirne utilizzando la stessa sintassi di ipfw(8)

## 5.4. Come aggiorno il database di locate(1)?

locate(1) è un potentissimo strumento per trovare file all'interno dei filesystem, però si basa su un database che ha bisogno di essere aggiornato periodicamente. Il sistema si occupa di aggiornarlo una volta alla settimana o meglio, ogni settimana di uptime, quindi chi necessita di un aggiornamento più frequente o non raggiunge tale periodo di uptime, può utilizzare locate.updatedb, che si trova in `/usr/libexec/`.

## 5.5. Come posso creare file MP3?

Partendo da cd audio è possibile creare file MP3 usando cdda2wav, compreso nel port `sysutils/cdrtools` e lame ( `audio/lame`). Installiamo questi ports e, dopo aver inserito il cd lanciamo:

    #cdda2wav -D /dev/acd0c -B

se vogliamo convertire in formato `wav` tutto il disco, oppure, per solo alcune brani:

    #cdda2wav -D /dev/acd0c -t 4

Il comando precedente converte solo il quarto brano. Ora, dopo aver registrato i brani in formato wav bisogna convertirli in mp3:

    #lame -h -b 160 audio.wav audio.mp3

Il numero che segue l'opzione -b indica il bitrate, ovvero l'indice della qualità degli mp3, e 160 Kbps (Kilobits per secondo) sono un valore medio accettabile nella gran parte dei casi.

## 5.6. Come creo un'immagine ISO?

Con immagine ISO si definiscono solitamente quei file che contengono un filesystem ISO9660 e sono l'immagine del contenuto di un CD o di quello che sarà contenuto in un CD. Sicuramente il tool più usato per la creazioni di filesystem ISO9660, è mkisofs, che trovate installando `sysutils/cdrtools`. Questa applicazione crea l'immagine di un albero di directory e verrà posta sul cd. L'utilizzo di base di mkisofs è

    #mkisofs -o immagine.iso /percorso/

A seconda che si voglia avere un'immagine Rock Ridge [14], Joliet [15] o HFS [16], precisamente nell'ordine:

- -R : Estensioni Rock Ridge

- -J : Estensioni Joliet

- -hfs : Filesystem HFS

- -D : toglie il limite degli 8 livelli di sottodirectory

- -T : crea il file TRANS.TBL per la transcodifica dei nomi lunghi (utile per la compatibilità con altri ambienti)

Queste immagini possono anche essere montate come normali filesystem, come spiegato alla domanda "Come posso montare un immagine ISO?" (???).

## 5.7. Come creo i cd di dati?

La procedura per la creazione di cd di dati è divisa in due, a seconda che si utilizzi un masterizzatore ATAPI oppure uno SCSI o un ATAPI con emulazione SCSI. Tuttavia il primo passaggio è identico per tutte e due le procedure: la creazione dell'immagine ISO, come spiegato nella domanda "Come creo un'immagine ISO" (Sezione 5.6).

Ora passiamo alla masterizzazione vera e propria.

### 5.7.1. Scrittura dei CD con masterizzatori ATAPI

Solitamente per scrivere cd con masterizzatori ATAPI si usa burncd(8) che è compreso nel sistema base. Questo programma può masterizzare sia CD di dati sia audio, per ora occupiamoci solo dei primi. Le opzioni principali di burncd(8) sono:

    -f /dev/acd0c/ : specifica il device del masterizzatore
    -s N : specifica la velocita di NX
    -v : stampa un numero maggiore di informazioni su ciò che sta eseguendo il programma
    -e : una volta finito di scrivere il cd, lo espelle

Per masterizzare quindi l'immagine `FreeBSD.iso` con il masterizzatore `/dev/acd0c`, a una velocità di 48x, con espulsione del CD a scrittura ultimata e maggiori informazioni durante la scrittura, dovremo eseguire il seguente comando:

    # burncd -f /dev/acd0c -e -v -s 48 data FreeBSD.iso fixate

La man page di burncd è molto chiara e saprà chiarire qualsiasi dubbio.

### 5.7.2. Scrittura dei CD con masterizzatori SCSI o ATAPI con emulazione SCSI

Se la nostra macchina ha un masterizzatore SCSI o ATAPI in emulazione SCSI, utilizzeremo cdrecord per la scrittura dei CD. Questo programma è compreso nel port `sysutils/cdrecord`. A volte dopo aver aggiornato il sistema, si possono avere problemi a usare cdrecord(1) ed è quindi consigliato aggiornare il pacchetto dopo aver ricompilato. Usare `cdrecord` è davvero facile:

    # cdrecord dev=device image.iso

L'unica parte da individuare è il valore di dev questo si può desumere dall'output di

    # cdrecord -scanbus
    Cdrecord 1.9 (i386-unknown-freebsd4.2) Copyright (C) 1995-2000 Jörg Schilling
        Using libscg version 'schily-0.1'
        scsibus0:
                0,0,0     0) 'SEAGATE ' 'ST39236LW       ' '0004' Disk
                0,1,0     1) 'SEAGATE ' 'ST39173W        ' '5958' Disk
                0,2,0     2) *
                0,3,0     3) 'iomega  ' 'jaz 1GB         ' 'J.86' Removable Disk
                0,4,0     4) 'NEC     ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
                0,5,0     5) *
                0,6,0     6) *
                0,7,0     7) *
        scsibus1:
                1,0,0   100) *
                1,1,0   101) *
                1,2,0   102) *
                1,3,0   103) *
                1,4,0   104) *
                1,5,0   105) 'YAMAHA  ' 'CRW4260         ' '1.0q' Removable CD-ROM
                1,6,0   106) 'ARTEC   ' 'AM12S           ' '1.06' Scanner
                1,7,0   107) *

Questo output elenca i possibili valori di dev e in questo caso il masterizzatore è rappresentato al numero 1,5,0 che sarà il valore da assegnare a dev. Ci sono altri modi per trovare questo valore e la man page ci fornisce queste e altre informazioni per un miglior uso di cdrecord(1).

## 5.8. Come creo i CD audio?

Per creare i CD musicali da ascoltare con i normali lettori CD, bisogna creare le tracce, estraendole da altri CD musicali oppure convertendo le canzoni da un formato all'altro.

### 5.8.1. Estrarre tracce musicali da CD audio

La procedura per ottenere le tracce è differente a seconda che si usi un lettore CD ATAPI o uno SCSI. Nel primo caso aver inserito il CD, è necessario creare il device corrispondente alla traccia e poi reindirizzare l'output del contenuto del device su un file, usando un opportuna dimensione dei blocchi. Per estrarre la prima traccia di un cd, ad esempio, bisogna lanciare i seguenti comandi:

    # cd /dev && sh MAKEDEV acd0t01
    # dd if=/dev/acd0t01 of=/audio/traccia1.cdr bs=2352

Naturalmente acd0t01 diventa acd0t02 per la seconda traccia, e così via.

Per i lettori CD SCSI invece si usa cdda2wav come spiegato alla domanda "Come posso creare file MP3?" (Sezione 5.5).

### 5.8.2. Convertire i file MP3 e WAV in tracce audio

Quando si vogliono creare compilation partendo da file MP3, bisogna convertire gli stess in tracce audio utilizzando il port `audio/lame`:

    # lame --decode -t file.mp3 file.cdr

oppure, partendo da file in formato WAV:

    # lame --decode -t file.wav file.cdr

Naturalmente questo serve solo per i masterizzatori ATAPI, in quanto i programmi per quelli SCSI accettano file in formato WAV.

### 5.8.3. Masterizzare i cd audio

Una volta ottenuti le tracce audio se si tratta di masterizzatori ATAPI, oppure i file WAV se si tratta di periferiche SCSI o ATAPI con emulazione SCSI, possiamo eseguire la scrittura del CD usando rispettivamente burncd(8) o cdrecord(1) (quest'ultimo viene installato dal port `sysutils/cdrtools`):

    # burncd -f /dev/acd0c audio traccia1.cdr traccia2.cdr ... fixate

oppure

    # cdrecord -v dev=2,0 -dao -useinfo  *.wav

e ovviamente il valore di dev si trova come spiegato in "Scrittura dei CD con masterizzatori SCSI o ATAPI con emulazione SCSI" (Sezione 5.7.2).

## 5.9. Posso giocare a Quake 3 Arena™ con FreeBSD?

La risposta è semplice: si, a patto di possedere un CD originale del gioco e avere attivo il layer di compatibilità dei binari Linux. Il modo più semplice per installare il gioco è usare il port `games/q3server`, oppure si può effettuare una installazione manuale. Vediamo come: IdSoftware® ha rilasciato il gioco in formato binario per Linux, disponibile sul ftp di Id Software®, quindi dopo averlo scaricato, eseguiamolo come utente `root`:

    # sh linuxq3point-X.YZ.x86.run

Specifichiamo il percorso in cui vogliamo installare (tipicamente `/usr/compat/linux/usr/games/`) e la directory in cui mettere gli eseguibili (di solito `/usr/local/bin`). Eseguita l'installazione del port o della cosidetta Point Release, montiamo il CD e copiamo i file necessari dal CD alla directory di installazione:

    # cp /mnt/cdrom/Quake3/baseq3/pak0.pk3 /usr/local/games/quake3/baseq3

e, se vogliamo giocare anche alla modalità Team Arena:

    # cp /mnt/cdrom/Setup/missionpack/pak0.pk3 /usr/local/games/quake3/missionpack

Fatto questo occorre ricompilare il kernel assicurandoci di avere la seguente opzione:

    options SYSVSHM

Durante la compilazione ci possiamo occupare dell configurazione grafica. Nel file di configurazione del server X, `/etc/XF86Config`, devono essere presenti le seguenti righe nella sezione "Modules":

    Load  "extmod"
    Load  "glx"
    Load  "dri"
    Load  "bitmap"

e naturalmente, se abbiamo una scheda grafica NVIDIA®, dobbiamo usarne i driver come spiegato alla domanda "Come installo i driver proprietari per le schede grafiche NVIDIA®?"(Sezione 4.2). I possessori di schede grafiche ATI, dovranno invece installare il port `graphics/linux_dri`. Il comando

    % quake3

serve per lanciare il gioco.

Seguendo gli stessi passi si può installare anche "Return To Castle Wolfenstein", i cui binari per Linux si trovano sempre sul server FTP di Id Software® oppure nel port `games/rtcw`.

> Avvertimento I possessori di schede grafica ATI dovranno anche creare un link simbolico da `/usr/compat/linux/usr/X11R6/lib/libGL.so.1` a `/usr/compat/linux/usr/games/rtcw/libGL.so`

## 5.10. Come posso ricevere la posta con fetchmail?

Il port `mail/fetchmail` è un'applicazione usatissima per la ricezione delle mail da server POP o altri da terminale. La sua sintassi fondamentale è

    % fetchmail pop.paperopoli.com -u paperino

nel caso la nostra mail fosse `<paperino@paperopoli.com>`. Possiamo anche specificare a fetchmail di eseguire la ricezione ogni tot secondi, specificando l'opzione -d SECONDI. Ovviamente se si hanno tanti account di posta elettronica, diventa scomodo dover lanciare il comando ogni volta e conviene quindi utilizzare il file di configurazione `.fetchmailrc` da mettere nella propria home directory. Questo file deve avere la seguente struttura:

    poll paperopoli.com protocol POP3 username paperino password paperinik

Ogni account deve avere la sua riga all'interno del file e ovviamente, per salvaguardare la nostra riservatezza, `.fetchmailrc` dovrà essere leggibile ed editabile solo da noi.

## 5.11. Come cambio shell?

Per cambiare la shell con la quale effettuiamo il login, possiamo usare chsh(1), specificando l'opzione -s e il percorso della nuova shell. Per passare da `sh` a `bash`, ad esempio:

    % chsh -s /usr/local/bin/bash
    chsh: updating the database...
    chsh: done

chsh(1) serve anche a molte altre cose: lanciato senza argomenti ci permette di modificare le informazioni GECOS dell'utente.

## 5.12. Come posso usare il mio modem Alcatel® Speedtouch USB?

Questo modem è tristemente famoso in quanto è stato il primo modem usb distribuito da Telecom Italia ai suoi clienti ADSL e per aver fatto impazzire quanti volevano usarlo sotto sistemi operativi diversi da Windows. Attualmente è l'unica periferica che usa PPPoA[17] supportata da FreeBSD, grazie ai driver scritti da Benoit Papillault. Un'ottima e completa guida per configuare questo modem si trova nella pagina ufficiale dei driver.

## 5.13. Posso usare l'OpenSSH incluso nei ports, invece di quello di sistema?

FreeBSD viene distribuito completo di una versione di OpenSSH, solitamente la più recente disponibile al momento dell'uscita della -RELEASE. Tuttavia OpenSSH è disponibile anche nei ports come `security/openssh-portable` e la versione del port è più recente di quella inclusa nel sistema. Se si ha dunque la necessità di installare l'ultimissima versione, si può sostituire l'OpenSSH di sistema con quello dei ports. Si procede nel seguente modo: prima di tutto installiamo il port come già spiegato nella sezione Sezione 3.42, quindi editiamo il file `/etc/rc.conf`, modificando la riga relativa a OpenSSH da

    sshd_enable="YES"

a

    sshd_enable="NO"

Così facendo impediremo l'avvio dell'sshd(8) di sistema al boot. Visto che abbiamo scelto di utilizzare quello dei port, possiamo evitare di compilare l'OpenSSH durante il buildworld, quindi inseriamo nel `/etc/make.conf` la riga

     NO_OPENSSH=true

L'opera di trasferimento è quasi finita, si tratta solo di rinominare `/usr/local/etc/rc.d/sshd.sh.sample` in `/usr/local/etc/rc.d/sshd.sh`.

# III. Appendici

# Appendice A. Suggeritori, Correttori, Critici, Supporters, Amici...

Sono di seguito elencati, in ordine puramente casuale, tutte le persone che ringraziamo perché hanno contribuito e/o supportato BSD-FAQ-it. Chiunque pensi di essere stato dimenticato può segnalarlo.

- Luigi Semenzato

- Alessandro de Manzano

- Cristiano Deana

- Dario Freni

- Davide D'Amico

- Simone Fonda

- Riccardo Torrini

- Marta Pagan

- Paolo Didonè

- Michele Marchetto

- Salvatore Ferrucci

- Francesco Mattia

- Francesco Levorato

- Ernesto Mudu

- Stefano Trentini

- Gianluca Trimarchi

- Oberon

- Giorgio Inglese

- Gianluigi Spagnuolo

- Guido Sintoni

... e ovviamente un grazie speciale a:

# Colophon

Questo libro è frutto del lavoro combinato di molte persone che hanno contribuito a ``BSD-FAQ-it''. Il testo è stato scritto in SGML seguendo le specifiche del DocBook DTD ed è stato formattato dall'SGML in molti formati di presentazione differenti usando Jade, un motore DSSSL open source. Sono stati usati i fogli di stile DSSSL di Norm Walsh con un livello aggiuntivo di personalizzazione per fornire a Jade le istruzioni di presentazione. La versione stampata di questo documento non sarebbe stata possibile senza il linguaggio di composizione TeX di Donald Knuth, LaTeX di Leslie Lamport, o il pacchetto di macro JadeTeX di Sebastian Rahtz.

### Note

[1] | Un jiffy è pari a 1/100 di secondo.
[2] | Per etichetta si intende quella parte interna del floppy, contenente varie informazioni riguardanti il floppy stesso
[3] | Accelerated Graphics Port: porta per le chede grafiche.
[4] | NAT: Network Addresses Translation (Traduzione degli indirizzi di rete). In ambiente Linux viene anche chiamato Masquerading IP.
[5] | PPP: Point to Point Protocol.
[6] | DCC: Direct Client Connection, particolari opzioni di IRC per lo scambio di file e altro.
[7] | NTP: Network Time Protocol
[8] | Unix File System: è il filesystem originario dei sistemi di derivazione UNIX
[9] | Advanced Power Management (Gestione avanzata del consumo): strumento per monitorare il consumo di energia di un sistema basandosi sull'attività dello stesso.
[10] | Advanced Configuration and Power Interface (Interfaccia Avanzata per la Configurazione e il Consumo): standard scritto da un insieme di produttori di hardware per fornire un'interfaccia standard per gestire le risorse hardware e la gestione del consumo.
[11] | In inglese, la pronuncia di XFree86 è molto simile a quella di X386. Effettivamente i fondatori del progetto XFree86, lavoravano alla sezione X386 di X11.
[12] | Acronimo di General Electric Comprehensive Operating System, sono le informazioni sugli utenti reperibili dal file `master.passwd`.
[13] | Direct Memory Access (Accesso Diretto alla Memoria): sistema che consente ai dispositivi che lo usano la scrittura diretta dei dati all'interno della memoria RAM.
[14] | Le estensioni Rock Ridge servono per creare un filesystem ISO9660 che segua le stesse regole dei normali filesystem UNIX.
[15] | Le estensioni Joliet sono usate per i cd che verranno utilizzati anche su sistemi Microsoft e impongono particolari limitazioni al filesystem.
[16] | Il filesystem HFS viene usato sui sistemi MacOS.
[17] | PPPoA: Point to Point Protocol over ATM.