aboutsummaryrefslogtreecommitdiff
path: root/it_IT.ISO8859-15/articles
diff options
context:
space:
mode:
Diffstat (limited to 'it_IT.ISO8859-15/articles')
-rw-r--r--it_IT.ISO8859-15/articles/Makefile12
-rw-r--r--it_IT.ISO8859-15/articles/Makefile.inc5
-rw-r--r--it_IT.ISO8859-15/articles/committers-guide/Makefile21
-rw-r--r--it_IT.ISO8859-15/articles/committers-guide/article.xml1818
-rw-r--r--it_IT.ISO8859-15/articles/explaining-bsd/Makefile19
-rw-r--r--it_IT.ISO8859-15/articles/explaining-bsd/article.xml615
-rw-r--r--it_IT.ISO8859-15/articles/filtering-bridges/Makefile18
-rw-r--r--it_IT.ISO8859-15/articles/filtering-bridges/article.xml429
-rw-r--r--it_IT.ISO8859-15/articles/new-users/Makefile18
-rw-r--r--it_IT.ISO8859-15/articles/new-users/article.xml1073
-rw-r--r--it_IT.ISO8859-15/articles/vm-design/Makefile22
-rw-r--r--it_IT.ISO8859-15/articles/vm-design/article.xml1036
12 files changed, 0 insertions, 5086 deletions
diff --git a/it_IT.ISO8859-15/articles/Makefile b/it_IT.ISO8859-15/articles/Makefile
deleted file mode 100644
index ef1a5ebb3e..0000000000
--- a/it_IT.ISO8859-15/articles/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-# $FreeBSD$
-
-SUBDIR =
-SUBDIR+= committers-guide
-SUBDIR+= explaining-bsd
-SUBDIR+= filtering-bridges
-SUBDIR+= new-users
-SUBDIR+= vm-design
-
-DOC_PREFIX?= ${.CURDIR}/../..
-
-.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/it_IT.ISO8859-15/articles/Makefile.inc b/it_IT.ISO8859-15/articles/Makefile.inc
deleted file mode 100644
index 0ff2b6dcad..0000000000
--- a/it_IT.ISO8859-15/articles/Makefile.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# $FreeBSD$
-#
-
-DESTDIR?= ${DOCDIR}/it_IT.ISO8859-15/articles/${.CURDIR:T}
diff --git a/it_IT.ISO8859-15/articles/committers-guide/Makefile b/it_IT.ISO8859-15/articles/committers-guide/Makefile
deleted file mode 100644
index 692b28fedb..0000000000
--- a/it_IT.ISO8859-15/articles/committers-guide/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# $FreeBSD$
-#
-# Articolo: Guida del Committer
-
-MAINTAINER=ale@FreeBSD.org
-
-DOC?= article
-
-FORMATS?= html
-WITH_ARTICLE_TOC?= YES
-
-INSTALL_COMPRESSED?= gz
-INSTALL_ONLY_COMPRESSED?=
-
-SRCS= article.xml
-
-URL_RELPREFIX?= ../../../..
-DOC_PREFIX?= ${.CURDIR}/../../..
-
-.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/it_IT.ISO8859-15/articles/committers-guide/article.xml b/it_IT.ISO8859-15/articles/committers-guide/article.xml
deleted file mode 100644
index c3806a24fb..0000000000
--- a/it_IT.ISO8859-15/articles/committers-guide/article.xml
+++ /dev/null
@@ -1,1818 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-15"?>
-<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
- "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
-<!--
- The FreeBSD Italian Documentation Project
-
- $FreeBSD$
- Original revision: 1.219
--->
-<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="it">
- <info><title>Guida del Committer</title>
-
-
- <authorgroup>
- <author><personname><surname>The FreeBSD Italian Documentation Project</surname></personname></author>
- </authorgroup>
-
- <copyright>
- <year>1999</year>
-
- <year>2000</year>
-
- <year>2001</year>
-
- <year>2002</year>
-
- <year>2003</year>
-
- <year>2004</year>
-
- <holder>The FreeBSD Italian Documentation Project</holder>
- </copyright>
-
- <legalnotice xml:id="trademarks" role="trademarks">
- &tm-attrib.freebsd;
- &tm-attrib.cvsup;
- &tm-attrib.ibm;
- &tm-attrib.intel;
- &tm-attrib.sparc;
- &tm-attrib.general;
- </legalnotice>
-
- <pubdate>$FreeBSD$</pubdate>
-
- <releaseinfo>$FreeBSD$</releaseinfo>
-
- <abstract>
- <para>Questo documento fornisce informazioni per la comunità dei
- committer di FreeBSD. Tutti i nuovi committer dovrebbero leggere
- questo documento prima di iniziare, e i committer già esistenti
- sono fortemente incoraggiati a riguardarselo di tanto in tanto.</para>
-
- &trans.it.alex;
- </abstract>
- </info>
-
- <sect1 xml:id="admin">
- <title>Dettagli Amministrativi</title>
-
- <informaltable frame="none" orient="port" pgwide="1">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><emphasis>Host con il Repository
- Principale</emphasis></entry>
-
- <entry><systemitem class="fqdomainname">ncvs.FreeBSD.org</systemitem></entry>
- </row>
-
- <row>
- <entry><emphasis>Metodi di Accesso</emphasis></entry>
-
- <entry>&man.ssh.1;, solo protocollo 2</entry>
- </row>
-
- <row>
- <entry><emphasis>CVSROOT Principale</emphasis></entry>
-
- <entry><systemitem class="fqdomainname">ncvs.FreeBSD.org</systemitem><literal>:</literal><filename>/home/ncvs</filename>
- (guarda anche la <xref linkend="cvs.operations"/>).</entry>
- </row>
-
- <row>
- <entry><emphasis>&a.cvsadm; Principali</emphasis></entry>
-
- <entry>&a.peter; e &a.markm;, così come &a.joe; e &a.marcus;
- per i <filename>ports/</filename></entry>
- </row>
-
- <row>
- <entry><emphasis>Mailing List</emphasis></entry>
-
- <entry>&a.doc-developers;, &a.doc-committers;;
- &a.ports-developers;, &a.ports-committers;;
- &a.src-developers;, &a.src-committers;. (Ogni repository di
- progetto ha le sue mailing list -developers e -committers. Gli
- archivi per queste liste possono essere trovati nei file
- <filename>/home/mail/repository-name-developers-archive</filename>
- e
- <filename>/home/mail/repository-name-committers-archive</filename>
- sul cluster di <systemitem class="fqdomainname">FreeBSD.org</systemitem>.)</entry>
- </row>
-
- <row>
- <entry><emphasis>Report mensili del Core Team</emphasis></entry>
- <entry><filename>/home/core/public/monthly-report</filename>
- sul cluster di <systemitem class="fqdomainname">FreeBSD.org</systemitem>.</entry>
- </row>
-
- <row>
- <entry><emphasis>Tag CVS Degni di Nota</emphasis></entry>
-
- <entry><literal>RELENG_4</literal> (4.X-STABLE),
- <literal>RELENG_5</literal> (5.X-STABLE),
- <literal>HEAD</literal> (-CURRENT)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>È richiesto l'uso di &man.ssh.1; o &man.telnet.1; con
- Kerberos 5 per connettersi agli host del progetto. Per &man.ssh.1;
- è permesso solo il protocollo 2.
- Questi sono generalmente più sicuri che un semplice &man.telnet.1;
- o &man.rlogin.1; visto che la negoziazione delle credenziali
- avverrà sempre in modo cifrato.
- Tutto il traffico è cifrato di default
- con &man.ssh.1;. Insieme a programmi di utilità come
- &man.ssh-agent.1; e &man.scp.1;, anch'essi disponibili, &man.ssh.1;
- è di gran lunga più conveniente. Se non sai nulla di
- &man.ssh.1;, guarda la <xref linkend="ssh.guide"/>.</para>
- </sect1>
-
- <sect1 xml:id="committer.types">
- <title>Tipi di Bit di Commit</title>
-
- <para>Il repository CVS di FreeBSD ha un numero di componenti che, se
- combinati, supportano i sorgenti di base del sistema operativo, la
- documentazione, l'infrastruttura dei port delle applicazioni di terze
- parti, e vari programmi di utilità. Quando vengono assegnati i bit
- di commit di FreeBSD, vengono specificate le aree dell'albero dove il bit
- può essere usato. Solitamente, le aree associate a un bit
- corrispondono a quelle di chi ha autorizzato l'assegnamento del bit di
- commit. Ulteriori aree di autorità possono essere aggiunte in
- seguito: se occorrerà, il committer dovrà seguire le
- normali procedure di allocazione del bit di commit per quell'area
- dell'albero, chiedendo l'approvazione all'entità appropriata e
- possibilmente prendendo un mentore per quell'area per un po' di
- tempo.</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="3">
- <tbody>
- <row>
- <entry><emphasis>Tipo di Committer</emphasis></entry>
-
- <entry><emphasis>Responsabile</emphasis></entry>
-
- <entry><emphasis>Componenti dell'Albero</emphasis></entry>
- </row>
-
- <row>
- <entry>src</entry>
-
- <entry>core@</entry>
-
- <entry>src/, doc/ soggetta ad appropriata revisione</entry>
- </row>
-
- <row>
- <entry>doc</entry>
-
- <entry>doceng@</entry>
-
- <entry>doc/, www/, documentazione src/</entry>
- </row>
-
- <row>
- <entry>ports</entry>
-
- <entry>portmgr@</entry>
-
- <entry>ports/</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>I bit di commit assegnati prima dello sviluppo della nozione di aree
- di autorità possono essere usati in molte parti dell'albero.
- Tuttavia, il buon senso dice che un committer che non ha mai lavorato
- precedentemente in un'area dell'albero chieda una revisione del proprio
- lavoro prima di effettuare il commit, chieda l'approvazione del
- responsabile appropriato, e/o lavori d'accordo con un mentore. Dato che
- le regole sulla manutenzione del codice differiscono a seconda dell'area
- dell'albero, questo è per il bene del committer che lavora in
- un'area poco familiare tanto quanto per gli altri che lavorano
- sull'albero.</para>
-
- <para>I committer sono incoraggiati a chiedere la revisione del proprio
- lavoro come parte del normale processo di sviluppo, indifferentemente
- dall'area dell'albero in cui stanno lavorando.</para>
-
- <sect2>
- <title>Regolamento dell'attività del <filename>doc/</filename>
- committer in <filename>src/</filename></title>
-
- <itemizedlist>
- <listitem>
- <para>I doc committer possono effettuare commit riguardanti modifiche
- alla documentazione sui file src, come pagine man, README,
- database dei fortune, file dei calendari, e correzioni sui commenti
- senza l'approvazione di un src committer, prestando la solita
- attenzione e cura ai commit.</para>
- </listitem>
-
- <listitem>
- <para>I doc committer possono effettuare commit riguardanti piccole
- modifiche e correzioni ai sorgenti, come correzioni per la
- compilazione, piccole funzionalità, ecc., con un
- <quote>Approved by</quote> di un src committer.</para>
- </listitem>
-
- <listitem>
- <para>I doc committer possono cercare di ottenere il commit bit sui
- src acquisendo un mentore, che proporrà il doc committer al
- core. Una volta approvato, verrà aggiunto al file
- <filename>access</filename> ed inizierà il normale periodo
- sotto la guida del mentore, che implica l'aggiunta di
- <quote>Approved by</quote> per un certo periodo.</para>
- </listitem>
-
- <listitem>
- <para><quote>Approved by</quote> può essere usato solamente
- se l'approvazione è di un src committer senza mentore &mdash;
- i committer ancora sotto la guida di un mentore possono fornire al
- più un <quote>Reviewed by</quote> ma non un
- <quote>Approved by</quote>.</para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
-
- <sect1 xml:id="cvs.operations">
- <title>Operazioni sul CVS</title>
-
- <para>Si assume che tu abbia già familiarità con le operazioni
- di base di CVS.</para>
-
- <para>I &a.cvsadm; sono i <quote>proprietari</quote> del repository CVS e
- sono responsabili delle sue modifiche dirette allo scopo di ripulire o
- sistemare dei gravi abusi di CVS da parte di un committer.
- Nel caso dovessi causare qualche problema al repository,
- diciamo una errata operazione di <command>cvs import</command> o
- <command>cvs tag</command>, invia un messaggio al membro responsabile
- fra i &a.cvsadm;, come stabilito nella tabella qui sotto, (o chiama uno
- di loro) ed esponi il problema. Per questioni molto importanti che
- interessano l'intero albero CVS&mdash;non solo un'area
- specifica&mdash;puoi contattare i &a.cvsadm;. <emphasis>Non</emphasis>
- contattare i &a.cvsadm; per copie di repository o altre cose che possono
- gestire i team più specifici.</para>
-
- <para>Gli unici che hanno il
- permesso di manipolare direttamente i bit del repository sono i
- <quote>repomeister</quote>. Per questo non ci sono shell di login
- disponibili sulle macchine del repository, tranne che per i
- repomeister.</para>
-
- <note>
- <para>A seconda dell'area interessata del repository CVS, dovresti
- mandare la tua richiesta a uno dei seguenti indirizzi email:</para>
-
- <itemizedlist>
- <listitem>
- <para>ncvs@ - a proposito di <filename>/home/ncvs</filename>, il repository dei
- src</para>
- </listitem>
-
- <listitem>
- <para>pcvs@ - a proposito di <filename>/home/pcvs</filename>, il repository dei
- port</para>
- </listitem>
-
- <listitem>
- <para>dcvs@ - a proposito di <filename>/home/dcvs</filename>, il repository dei
- doc</para>
- </listitem>
-
- <listitem>
- <para>projcvs@ - a proposito di <filename>/home/projcvs</filename>, il repository dei
- progetti di terze parti</para>
- </listitem>
- </itemizedlist>
- </note>
-
- <para>L'albero CVS è attualmente diviso in quattro repository
- differenti, ovvero <literal>doc</literal>, <literal>ports</literal>,
- <literal>projects</literal> e <literal>src</literal>. Questi vengono
- ricomposti sotto un unico <literal>CVSROOT</literal> quando vengono
- distribuiti tramite <application>CVSup</application> per la convenienza
- dei nostri utenti.</para>
-
- <note>
- <para>Nota che il modulo <literal>www</literal> che contiene i sorgenti
- del <link xlink:href="http://www.FreeBSD.org">sito web di FreeBSD</link>
- è contenuto all'interno del repository
- <literal>doc</literal>.</para>
- </note>
-
- <para>I repository CVS sono ospitati sulle macchine repository.
- Attualmente, ognuno dei repository elencati qui sopra risiede sulla stessa
- macchina fisica, <systemitem class="fqdomainname">ncvs.FreeBSD.org</systemitem>, ma
- per permettere la possibilità di averne ognuno su una macchina
- diversa in futuro, ci sono diversi nomi di host che i committer
- dovrebbero utilizzare. Inoltre, ogni repository risiede in una
- directory differente. La seguente tabella racchiude la situazione.</para>
-
- <table frame="none" xml:id="cvs-repositories-and-hosts">
- <title>Repository CVS, Host e Directory di &os;</title>
-
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Repository</entry>
-
- <entry>Host</entry>
-
- <entry>Directory</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>doc</entry>
-
- <entry>dcvs.FreeBSD.org</entry>
-
- <entry>/home/dcvs</entry>
- </row>
-
- <row>
- <entry>ports</entry>
-
- <entry>pcvs.FreeBSD.org</entry>
-
- <entry>/home/pcvs</entry>
- </row>
-
- <row>
- <entry>projects</entry>
-
- <entry>projcvs.FreeBSD.org</entry>
-
- <entry>/home/projcvs</entry>
- </row>
-
- <row>
- <entry>src</entry>
-
- <entry>ncvs.FreeBSD.org</entry>
-
- <entry>/home/ncvs</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Le operazioni sul CVS sono fatte da remoto impostando la variabile di
- ambiente <envar>CVSROOT</envar> a <systemitem class="fqdomainname">ncvs.FreeBSD.org</systemitem><literal>:</literal><filename>/home/ncvs</filename>
- e la variabile <envar>CVS_RSH</envar> a <command>ssh</command>, e
- quindi effettuando le appropriate operazioni di check-out/check-in.
- Molti committer definiscono degli alias che si espandono nella corretta
- invocazione di <application>cvs</application> per il repository
- appropriato. Per esempio, un utente di &man.tcsh.1; può aggiungere
- le seguenti righe al suo <filename>.cshrc</filename> per questo
- scopo:</para>
-
- <programlisting>alias dcvs env CVS_RSH=ssh cvs -d <replaceable>user</replaceable>@dcvs.FreeBSD.org:/home/dcvs
-alias pcvs env CVS_RSH=ssh cvs -d <replaceable>user</replaceable>@pcvs.FreeBSD.org:/home/pcvs
-alias projcvs env CVS_RSH=ssh cvs -d <replaceable>user</replaceable>@projcvs.FreeBSD.org:/home/projcvs
-alias scvs env CVS_RSH=ssh cvs -d <replaceable>user</replaceable>@ncvs.FreeBSD.org:/home/ncvs</programlisting>
-
- <para>In questo modo è possibile fare tutte le operazioni di
- CVS localmente ed usare <command>Xcvs
- commit</command> per effettuare il commit sull'albero CVS ufficiale.
- Se desideri aggiungere qualcosa di totalmente nuovo (ad esempio dei
- sorgenti in contrib, ecc.), deve essere usato <command>cvs
- import</command>. Guarda come riferimento la pagina man di &man.cvs.1;
- per l'utilizzo.</para>
-
- <note>
- <para>Per favore <emphasis>non</emphasis> usare <command>cvs
- checkout</command> o <command>update</command> con la macchina con il
- repository ufficiale impostata come CVS Root per tenere aggiornato il
- tuo albero dei sorgenti. CVS da remoto non è ottimizzato per la
- distribuzione via rete e richiede un grande sovraccarico di lavoro e di
- amministrazione sul lato server. Utilizza il nostro metodo di
- distribuzione avanzato <command>cvsup</command> per ottenere i bit del
- repository, ed esegui solamente l'operazione di
- <command>commit</command> sull'host con il repository.
- Forniamo un'estesa rete di mirror cvsup per questo scopo, così
- come diamo accesso al <systemitem>cvsup-master</systemitem> se hai veramente
- bisogno di essere aggiornato alle ultime modifiche.
- Il <systemitem>cvsup-master</systemitem> ha la potenza necessaria a gestire
- questa cosa, il repository principale no. &a.kuriyama; è a capo
- del <systemitem>cvsup-master</systemitem>.</para>
- </note>
-
- <para>Se devi usare le operazioni <command>add</command> e
- <command>delete</command> di CVS come se fosse un'operazione &man.mv.1;,
- allora va effettuata una copia nel repository piuttosto che usare
- <command>add</command> e <command>delete</command> di CVS. In una
- copia nel repository, un <link linkend="conventions">CVS Meister</link>
- copierà il/i file nei loro nuovi nomi e/o locazioni e ti
- avviserà ad operazione avvenuta. Lo scopo di una copia del
- repository è di preservare la cronologia dei cambiamenti del file,
- o i log. Noi del FreeBSD Project diamo molta importanza alla cronologia
- dei cambiamenti che CVS fornisce al progetto.</para>
-
- <para>Informazioni di riferimento, tutorial, e FAQ su CVS possono
- essere trovate su: <uri xlink:href="http://www.cvshome.org/docs/">http://www.cvshome.org/docs/</uri>.
- Anche le informazioni contenute nei <link xlink:href="http://cvsbook.red-bean.com/cvsbook.html">capitoli di Karl Fogel
- da <quote>Open Source Development with CVS</quote></link> sono molto
- utili.</para>
-
- <para>&a.des; ha fornito inoltre il seguente <quote>mini manuale</quote> su
- CVS.</para>
-
- <orderedlist>
- <listitem>
- <para>Effettua il check out di un modulo con il comando
- <command>co</command> o <command>checkout</command>.</para>
-
- <screen>&prompt.user; <userinput>cvs checkout shazam</userinput></screen>
-
- <para>Questo estrae una copia del modulo <filename>shazam</filename>. Se
- non c'è alcun modulo <filename>shazam</filename> nel file dei
- moduli, cercherà allora una directory di primo livello chiamata
- <filename>shazam</filename>.</para>
-
- <table frame="none">
- <title>Opzioni utili con <command>cvs checkout</command></title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><option>-P</option></entry>
-
- <entry>Non crea le directory vuote</entry>
- </row>
-
- <row>
- <entry><option>-l</option></entry>
-
- <entry>Estrae solo un livello, non le sottodirectory</entry>
- </row>
-
- <row>
- <entry><option>-r<replaceable>ver</replaceable></option></entry>
-
- <entry>Estrai la versione, il ramo, o il tag
- <replaceable>ver</replaceable></entry>
- </row>
-
- <row>
- <entry><option>-D<replaceable>data</replaceable></option></entry>
-
- <entry>Estrai i sorgenti com'erano in data
- <replaceable>data</replaceable></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Esempi pratici su FreeBSD:</para>
-
- <itemizedlist>
- <listitem>
- <para>Estrai il modulo <filename>miscfs</filename>, che
- corrisponde a <filename>src/sys/miscfs</filename>:</para>
-
- <screen>&prompt.user; <userinput>cvs co miscfs</userinput></screen>
-
- <para>Ora hai una directory chiamata <filename>miscfs</filename>
- con le sottodirectory <filename>CVS</filename>,
- <filename>deadfs</filename>, <filename>devfs</filename>, e
- così via. Una di queste (<filename>linprocfs</filename>)
- è vuota.</para>
- </listitem>
-
- <listitem>
- <para>Estrai gli stessi file, ma con il percorso completo:</para>
-
- <screen>&prompt.user; <userinput>cvs co src/sys/miscfs</userinput></screen>
-
- <para>Ora hai una directory chiamata <filename>src</filename>,
- con le sottodirectory <filename>CVS</filename> e
- <filename>sys</filename>. La directory
- <filename>src/sys</filename> ha le
- sottodirectory <filename>CVS</filename> e
- <filename>miscfs</filename>, ecc.</para>
- </listitem>
-
- <listitem>
- <para>Estrai gli stessi file, ma elimina le directory vuote:</para>
-
- <screen>&prompt.user; <userinput>cvs co -P miscfs</userinput></screen>
-
- <para>Ora hai una directory chiamata <filename>miscfs</filename>
- con le sottodirectory <filename>CVS</filename>,
- <filename>deadfs</filename>, <filename>devfs</filename>... ma nota
- che non c'è nessuna sottodirectory
- <filename>linprocfs</filename>, perché non contiene alcun
- file.</para>
- </listitem>
-
- <listitem>
- <para>Estrai la directory <filename>miscfs</filename>, ma nessuna
- delle sue sottodirectory:</para>
-
- <screen>&prompt.user; <userinput>cvs co -l miscfs</userinput></screen>
-
- <para>Ora hai una a directory chiamata <filename>miscfs</filename>
- con solo una sottodirectory chiamata
- <filename>CVS</filename>.</para>
- </listitem>
-
- <listitem>
- <para>Estrai il modulo <filename>miscfs</filename> com'è nel
- ramo 4.X:</para>
-
- <screen>&prompt.user; <userinput>cvs co -rRELENG_4 miscfs</userinput></screen>
-
- <para>Puoi modificare i sorgenti ed effettuare il commit su questo
- ramo.</para>
- </listitem>
-
- <listitem>
- <para>Estrai il modulo <filename>miscfs</filename> com'era nella
- 3.4-RELEASE.</para>
-
- <screen>&prompt.user; <userinput>cvs co -rRELENG_3_4_0_RELEASE miscfs</userinput></screen>
-
- <para>Non potrai effettuare il commit delle modifiche, visto che
- <literal>RELENG_3_4_0_RELEASE</literal> corrisponde ad un
- preciso istante di tempo, non a un ramo.</para>
- </listitem>
-
- <listitem>
- <para>Estrai il modulo <filename>miscfs</filename> com'era il 15
- gennaio 2000.</para>
-
- <screen>&prompt.user; <userinput>cvs co -D'01/15/2000' miscfs</userinput></screen>
-
- <para>Non potrai effettuare modifiche.</para>
- </listitem>
-
- <listitem>
- <para>Estrai il modulo <filename>miscfs</filename> com'era una
- settimana fa.</para>
-
- <screen>&prompt.user; <userinput>cvs co -D'last week' miscfs</userinput></screen>
-
- <para>Non potrai effettuare modifiche.</para>
- </listitem>
- </itemizedlist>
-
- <para>Tieni presente che cvs salva i metadati in sottodirectory chiamate
- <filename>CVS</filename>.</para>
-
- <para>Gli argomenti di <option>-D</option> e <option>-r</option>
- sono fissi, che vuol dire che cvs se li ricorderà in seguito,
- ad esempio quando farai un <command>cvs update</command>.</para>
- </listitem>
-
- <listitem>
- <para>Controlla lo stato dei file estratti con il comando
- <command>status</command>.</para>
-
- <screen>&prompt.user; <userinput>cvs status shazam</userinput></screen>
-
- <para>Questo visualizza lo stato del file <filename>shazam</filename> o
- di ogni file nella directory <filename>shazam</filename>. Per ogni
- file, lo stato è uno fra:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry>Up-to-date</entry>
-
- <entry>Il file à aggiornato e non è stato
- modificato.</entry>
- </row>
-
- <row>
- <entry>Needs Patch</entry>
-
- <entry>Il file non è stato modificato, ma c'è una
- nuova versione nel repository.</entry>
- </row>
-
- <row>
- <entry>Locally Modified</entry>
-
- <entry>Il file è aggiornato, ma è stato
- modificato.</entry>
- </row>
-
- <row>
- <entry>Needs Merge</entry>
-
- <entry>Il file è stato modificato, e c'è una nuova
- versione nel repository.</entry>
- </row>
-
- <row>
- <entry>File had conflicts on merge</entry>
-
- <entry>Ci sono stati conflitti l'ultima volta che il file
- è stato aggiornato, e non sono ancora stati
- risolti.</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Vedrai anche la versione e la data locale, il numero dell'ultima
- versione appropriata (<quote>ultima appropriata</quote> perché
- se hai una data, un tag o un ramo fissati, può non essere
- l'ultima versione), e i tag, le date o le opzioni applicate.</para>
- </listitem>
-
- <listitem>
- <para>Dopo avere estratto qualcosa, puoi aggiornarlo con il comando
- <command>update</command>.</para>
-
- <screen>&prompt.user; <userinput>cvs update shazam</userinput></screen>
-
- <para>Questo aggiorna il file <filename>shazam</filename> o il contenuto
- della directory <filename>shazam</filename> all'ultima versione sul
- ramo che hai estratto. Se hai estratto un <quote>preciso instante di
- tempo</quote>, non fa nulla a meno che i tag non siano stati
- spostati nel repository o qualche altra strana cosa sia in
- corso.</para>
-
- <para>Opzioni utili, in aggiunta a quelle elencate sopra, con
- <command>checkout</command>:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><option>-d</option></entry>
-
- <entry>Estrae ogni directory aggiuntiva mancante.</entry>
- </row>
-
- <row>
- <entry><option>-A</option></entry>
-
- <entry>Scarica l'ultima versione del ramo principale.</entry>
- </row>
-
- <row>
- <entry><option>-j<replaceable>ver</replaceable></option></entry>
-
- <entry>Altre magie (guarda sotto).</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Se hai estratto un modulo con <option>-r</option> o
- <option>-D</option>, l'esecuzione di <command>cvs update</command>
- con un argomento differente di <option>-r</option> o
- <option>-D</option> o con <option>-A</option> selezionerà un
- nuovo ramo, una nuova versione o una nuova data.
- L'opzione <option>-A</option> elimina tutti i tag, le date o le
- versioni fissate mentre <option>-r</option> e <option>-D</option> ne
- impostano di nuove.</para>
-
- <para>Teoricamente, specificando <literal>HEAD</literal> come argomento
- di <option>-r</option> avrai lo stesso risultato di
- <option>-A</option>, ma è solo in teoria.</para>
-
- <para>L'opzione <option>-d</option> è utile se:</para>
-
- <itemizedlist>
- <listitem>
- <para>qualcuno ha aggiunto delle sottodirectory al modulo che hai
- estratto dopo averlo estratto.</para>
- </listitem>
-
- <listitem>
- <para>hai estratto con <option>-l</option>, e dopo cambi idea e
- vuoi estrarre anche le sottodirectory.</para>
- </listitem>
-
- <listitem>
- <para>hai cancellato delle sottodirectory e vuoi estrarle
- nuovamente.</para>
- </listitem>
- </itemizedlist>
-
- <para><emphasis>Osserva l'output di <command>cvs update</command> con
- cura</emphasis>. La lettera all'inizio di ogni file indica cosa
- è stato fatto su di esso:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><literal>U</literal></entry>
-
- <entry>Il file è stato aggiornato senza problemi.</entry>
- </row>
-
- <row>
- <entry><literal>P</literal></entry>
-
- <entry>Il file è stato aggiornato senza problemi (vedrai
- questo solo quando lavorerai su un repository remoto).</entry>
- </row>
-
- <row>
- <entry><literal>M</literal></entry>
-
- <entry>Il file è stato modificato, ed è stato
- fuso senza conflitti.</entry>
- </row>
-
- <row>
- <entry><literal>C</literal></entry>
-
- <entry>Il file è stato modificato, ed è stato
- fuso con dei conflitti.</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>La fusione è ciò che avviene quando estrai una copia
- di qualche codice sorgente, lo modifichi, quindi qualcun altro
- effettua il commit di un'altra modifica, e tu esegui <command>cvs
- update</command>. CVS nota che tu hai fatto dei cambiamenti locali, e
- cerca di fondere le tue modifiche con quelle fatte tra la versione che
- hai originariamente estratto e quella che stai aggiornando. Se i
- cambiamenti sono a due parti separate del file, solitamente non ci
- saranno problemi (sebbene il risultato possa non essere
- sintatticamente o semanticamente corretto).</para>
-
- <para>CVS stamperà una <literal>M</literal> davanti ad ogni file
- modificato localmente anche se non c'è una nuova versione nel
- repository, quindi <command>cvs update</command> è adatto
- per avere un resoconto di quello che hai cambiato in locale.</para>
-
- <para>Se appare una <literal>C</literal>, allora le tue modifiche sono
- in conflitto con i cambiamenti presenti nel repository (le modifiche
- sono sulle stesse righe, o righe vicine, o hai cambiato così
- tanto il file locale che <command>cvs</command> non è in grado
- di applicare le modifiche al repository). Dovrai allora andare a
- modificare il file a mano e risolvere i conflitti; questi saranno
- evidenziati da righe di simboli <literal>&lt;</literal>,
- <literal>=</literal> e <literal>&gt;</literal>. Per ogni conflitto,
- ci sarà una linea di demarcazione formata da sette
- <literal>&lt;</literal> e il nome del file, seguita da una porzione di
- quello che il tuo file locale conteneva, seguita da una riga di
- separazione con sette <literal>=</literal>, seguita dalla porzione
- corrispondente presente nella versione del repository, seguita da una
- riga di separazione con sette <literal>&gt;</literal> e il numero di
- versione che stai aggiornando.</para>
-
- <para>L'opzione <option>-j</option> è un po' voodoo. Aggiorna
- il file locale alla versione specificata come se avessi usato
- <option>-r</option>, ma non cambia il numero di versione o il ramo
- registrato del file locale. Non è realmente utile tranne
- quando usata due volte, nel qual caso fonderà le modifiche
- tra le due versioni specificate nella copia su cui stai
- lavorando.</para>
-
- <para>Per esempio, supponiamo che ti abbia effettuato il commit di una
- modifica a <filename>shazam/shazam.c</filename> in &os.current; e che
- più tardi tu voglia effettuare l'MFC. Le modifiche che vuoi
- fondere sono nella versione 1.15:</para>
-
- <itemizedlist>
- <listitem>
- <para>Estrai la versione &os.stable; del modulo
- <filename>shazam</filename>:</para>
-
- <screen>&prompt.user; <userinput>cvs co -rRELENG_5 shazam</userinput></screen>
- </listitem>
-
- <listitem>
- <para>Applica le modifiche tra la ver 1.14 e la 1.15:</para>
-
- <screen>&prompt.user; <userinput>cvs update -j1.14 -j1.15 shazam/shazam.c</userinput></screen>
- </listitem>
- </itemizedlist>
-
- <para>Quasi certamente avrai un conflitto a causa delle righe
- <literal>$Id$</literal> (o nel caso di FreeBSD, <literal>$FreeBSD$</literal>),
- quindi dovrai modificare a mano il file per risolvere il conflitto
- (rimuovi le righe di separazione e la seconda linea
- <literal>$Id$</literal>, lasciando la linea <literal>$Id$</literal>
- originale intatta).</para>
- </listitem>
-
- <listitem>
- <para>Guarda le differenze tra la versione locale e quella sul
- repository con il comando <command>diff</command>.</para>
-
- <screen>&prompt.user; <userinput>cvs diff shazam</userinput></screen>
-
- <para>mostra ogni modifica che hai fatto al file o al modulo
- <filename>shazam</filename>.</para>
-
- <table frame="none">
- <title>Opzioni utili con <command>cvs diff</command></title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><option>-u</option></entry>
-
- <entry>Utilizza il formato diff unificato.</entry>
- </row>
-
- <row>
- <entry><option>-c</option></entry>
-
- <entry>Utilizza il formato diff contestuale.</entry>
- </row>
-
- <row>
- <entry><option>-N</option></entry>
-
- <entry>Visualizza i file mancanti o aggiunti.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Vorrai sempre utilizzare <option>-u</option>, visto che le diff
- unificate sono molto più semplici da leggere rispetto a quasi
- tutti gli altri formati (in alcune circostanze, le diff contestuali
- generate con l'opzione <option>-c</option> possono essere meglio, ma
- sono molto più voluminose). Una diff unificata consiste di una
- serie di parti. Ogni parte inizia con una riga con due caratteri
- <literal>@</literal> e specifica dove si trovano le differenze nel
- file e su quante linee si estendono. Questa è seguita da un
- certo numero di righe; alcune (precedute da uno spazio) fanno parte
- del contesto; altre (precedute da un <literal>-</literal>) sono quelle
- eliminate e altre ancora (precedute da un <literal>+</literal>) sono
- quelle aggiunte.</para>
-
- <para>Puoi anche effettuare una diff con una versione differente
- rispetto a quella che hai estratto specificando la versione con
- <option>-r</option> o <option>-D</option> come per il
- <command>checkout</command> o l'<command>update</command>,
- o anche visualizzare le differenze tra due versioni arbitrarie
- (indipendentemente da quella che hai localmente) specificando
- <emphasis>due</emphasis> versioni con <option>-r</option> o
- <option>-D</option>.</para>
- </listitem>
-
- <listitem>
- <para>Guarda le righe di log con il comando
- <command>log</command>.</para>
-
- <screen>&prompt.user; <userinput>cvs log shazam</userinput></screen>
-
- <para>Se <filename>shazam</filename> è un file, questo
- stamperà un'<emphasis>intestazione</emphasis> con le
- informazioni sul file, come la locazione nel repository dove il file
- è salvato, a quale versione è l'<literal>HEAD</literal>
- per questo file, in quali rami si trova il file, e qualsiasi tag
- valido per questo file. Quindi, per ogni versione del file, viene
- stampato un messaggio di log. Questo include la data e l'ora del
- commit, chi ha fatto il commit, quante righe sono state aggiunte e/o
- tolte, e alla fine il messaggio di log che il committer ha scritto
- quando ha inviato la modifica.</para>
-
- <para>Se <filename>shazam</filename> è una directory, allora le
- informazioni di log descritte sopra vengono stampate a turno per ogni
- file presente nella directory. A meno che tu abbia dato l'opzione
- <option>-l</option> a <command>log</command>, vengono stampati anche
- i log per tutte le sottodirectory di <filename>shazam</filename>, in
- maniera ricorsiva.</para>
-
- <para>Usa il comando <command>log</command> per vedere la storia di uno
- o più file, come è salvata nel repository CVS. Puoi
- anche usarlo per vedere il messaggio di log di una versione specifica,
- se aggiungi <option>-r<replaceable>ver</replaceable></option> al
- comando <command>log</command>:</para>
-
- <screen>&prompt.user; <userinput>cvs log -r1.2 shazam</userinput></screen>
-
- <para>Questo stamperà solamente il messaggio di log per la
- versione <literal>1.2</literal> del file <filename>shazam</filename>
- se è un file, oppure i messaggi di log per le versioni 1.2 di
- ogni file sotto <filename>shazam</filename> se è una
- directory.</para>
- </listitem>
-
- <listitem>
- <para>Guarda chi ha fatto cosa con il comando
- <command>annotate</command>. Questo comando visualizza ogni riga del
- file o dei file specificati, insieme all'utente che ha modificato
- più recentemente quella riga.</para>
-
- <screen>&prompt.user; <userinput>cvs annotate shazam</userinput></screen>
- </listitem>
-
- <listitem>
- <para>Aggiungi nuovi file con il comando <command>add</command>.</para>
-
- <para>Crea il file, usa <command>cvs add</command> su di esso, quindi
- <command>cvs commit</command>.</para>
-
- <para>In modo analogo, puoi aggiungere nuove directory creandole e poi
- utilizzando <command>cvs add</command> su di esse. Nota che non
- c'è bisogno di usare il commit sulle directory.</para>
- </listitem>
-
- <listitem>
- <para>Rimuovi i file obsoleti con il comando
- <command>remove</command>.</para>
-
- <para>Rimuovi il file, quindi usa <command>cvs rm</command> su di esso,
- ed infine <command>cvs commit</command>.</para>
- </listitem>
-
- <listitem>
- <para>Effettua il commit con il comando <command>commit</command> o
- <command>checkin</command>.</para>
-
- <table frame="none">
- <title>Opzioni utili con <command>cvs commit</command></title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><option>-f</option></entry>
-
- <entry>Forza il commit di un file non modificato.</entry>
- </row>
-
- <row>
- <entry><option>-m<replaceable>msg</replaceable></option></entry>
-
- <entry>Specifica un messaggio di commit sulla riga di comando
- anziché invocare un editor.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Usa l'opzione <option>-f</option> se ti accorgi che hai lasciato
- fuori informazioni importanti dal messaggio di commit.</para>
-
- <para>Buoni messaggi di commit sono importanti. Dicono agli altri
- perché hai fatto le modifiche che hai fatto, non solo qui ed
- ora, ma per mesi o anni quando qualcuno si chiederà
- perché dei pezzi di codice all'apparenza illogici o
- inefficienti sono entrati nel file sorgente. È inoltre un
- aiuto inestimabile per decidere su quali modifiche va effettuato
- l'MFC e su quali no.</para>
-
- <para>I messaggi di commit devono essere chiari, concisi, e fornire
- un ragionevole sommario per dare un'indicazione di cosa è stato
- cambiato e perché.</para>
-
- <para>I messaggi di commit devono fornire abbastanza informazioni
- affinché una terza parte possa decidere se la modifica è
- rilevante per lei e se debba leggere la modifica stessa.</para>
-
- <para>Evita di effettuare il commit di più modifiche scollegate
- in una volta sola. Questo rende difficile la fusione, e inoltre rende
- più complicato determinare quale modifica è colpevole
- se salta fuori un bug.</para>
-
- <para>Evita di effettuare il commit di correzioni di stile o di
- spaziatura insieme a correzioni di funzionalità. Questo rende
- difficile la fusione, e inoltre rende più complicato capire
- quali modifiche alle funzionalità sono state fatte. Nel caso
- di file di documentazione, può rendere il lavoro dei gruppi
- di traduzione più complicato, visto che diventa difficile per
- loro determinare esattamente quali modifiche al contenuto vanno
- tradotte.</para>
-
- <para>Evita di effettuare il commit di cambiamenti a più file
- con un unico messaggio generico o vago. Invece, effettua il commit
- di un file alla volta (o di piccoli gruppi di file correlati) con un
- messaggio di commit appropriato.</para>
-
- <para>Prima di effettuare il commit, devi
- <emphasis>sempre</emphasis>:</para>
-
- <itemizedlist>
- <listitem>
- <para>verificare su che ramo stai effettuando il commit, tramite
- <command>cvs status</command>.</para>
- </listitem>
-
- <listitem>
- <para>revisionare i tuoi cambiamenti, con
- <command>cvs diff</command></para>
- </listitem>
- </itemizedlist>
-
- <para>Inoltre, devi SEMPRE specificare esplicitamente sulla riga di
- comando su quali file deve essere effettuato il commit, in modo da non
- toccare incidentalmente altri file non voluti - <command>cvs
- commit</command> senza argomenti effettuerà il commit di ogni
- modifica nella directory corrente ed ogni sottodirectory.</para>
- </listitem>
- </orderedlist>
-
- <para>Suggerimenti e trucchi aggiuntivi:</para>
-
- <orderedlist>
- <listitem>
- <para>Puoi inserire le opzioni più comunemente usate nel tuo
- <filename>~/.cvsrc</filename>, come in questo caso:</para>
-
- <programlisting>cvs -z3
-diff -Nu
-update -Pd
-checkout -P</programlisting>
-
- <para>Questo esempio dice:</para>
-
- <itemizedlist>
- <listitem>
- <para>usa sempre il livello di compressione 3 quando si parla con un
- server remoto. Questo è un salvavita quando si lavora su
- una connessione lenta.</para>
- </listitem>
-
- <listitem>
- <para>usa sempre le opzioni <option>-N</option> (visualizza i file
- aggiunti o rimossi) e <option>-u</option> (formato diff unificato)
- con &man.diff.1;.</para>
- </listitem>
-
- <listitem>
- <para>usa sempre le opzioni <option>-P</option> (elimina le
- directory vuote) e <option>-d</option> (estrai le nuove directory)
- quando si effettua l'update.</para>
- </listitem>
-
- <listitem>
- <para>usa sempre l'opzione <option>-P</option> (elimina le
- directory vuote) quando si estrae.</para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para>Usa lo script <command>cdiff</command> di Eivind Eklund per
- visualizzare le diff unificate. È un wrapper per &man.less.1;
- che aggiunge i codici colore ANSI per far risaltare le intestazioni
- delle sezioni, le righe rimosse e quelle aggiunte; il contesto rimane
- invariato. Inoltre espande i tab correttamente (i tab spesso appaiono
- errati nelle diff a causa del carattere aggiuntivo all'inizio di ogni
- riga).</para>
-
- <para><package>textproc/cdiff</package></para>
-
- <para>Semplicemente usalo al posto di &man.more.1; o
- &man.less.1;:</para>
-
- <screen>&prompt.user; <userinput>cvs diff -Nu shazam | cdiff</userinput></screen>
-
- <para>Alternativamente alcuni editor come &man.vim.1;
- (<package>editors/vim5</package>) hanno il supporto
- al colore e quando vengono usati con l'evidenziazione della sintassi
- attiva evidenzieranno molti tipi di file, incluse le diff, le patch,
- e i log CVS/RCS.</para>
-
- <screen>&prompt.user; <userinput>echo "syn on" &gt;&gt; ~/.vimrc </userinput>
-&prompt.user; <userinput>cvs diff -Nu shazam | vim -</userinput>
-&prompt.user; <userinput>cvs log shazam | vim -</userinput> </screen>
- </listitem>
-
- <listitem>
- <para>CVS è vecchio, arcano, complesso e buggato, e a volte
- esibisce comportamenti non deterministici che qualcuno sostiene siano
- la prova che CVS non sia niente di più di una manifestazione
- Newtoniana di una entità ultradimensionale sensibile.
- Non è umanamente possibile conoscere ogni dettaglio di CVS,
- quindi non essere dispiaciuto di chiedere aiuto all'Intelligenza
- Artificiale (&a.cvsadm;).</para>
- </listitem>
-
- <listitem>
- <para>Non lasciare il comando <command>cvs commit</command> nella
- modalità di inserimento del messaggio di commit per troppo
- tempo (più di 2&ndash;3 minuti). Questo blocca la directory in
- cui stai lavorando ed impedirà ad altri sviluppatori di
- effettuare commit nella stessa directory. Se devi digitare un
- messaggio di commit lungo, scrivilo prima di eseguire
- <command>cvs commit</command> e inseriscilo successivamente oppure
- salvalo in un file prima di effettuare il commit ed usa l'opzione
- <option>-F</option> di CVS per leggere il messaggio di commit da
- quel file, cioè:</para>
-
- <screen>&prompt.user; <userinput>vi logmsg</userinput>
-&prompt.user; <userinput>cvs ci -F logmsg shazam</userinput></screen>
-
- <para>Questo è il metodo più veloce per passare un
- messaggio di commit a CVS ma devi stare attento quando modifichi
- il file <filename>logmsg</filename> prima del commit, perché
- CVS non ti darà la possibilità di modificare il
- messaggio quando effettuerai realmente il commit.</para>
- </listitem>
- </orderedlist>
- </sect1>
-
- <sect1 xml:id="conventions">
- <title>Convenzioni e Tradizioni</title>
-
- <para>Come nuovo committer ci sono alcune cose che dovresti fare
- all'inizio.</para>
-
- <itemizedlist>
- <listitem>
- <para>Aggiungi la tua entity di autore in
- <filename>doc/en_US.ISO8859-1/share/xml/authors.ent</filename>;
- questo dovrebbe essere fatto per prima cosa, visto che l'omissione
- di questo commit farà in modo che i prossimi commit
- romperanno la compilazione del ramo doc/.</para>
-
- <para>Questo è un compito relativamente semplice, ma rimane una
- buona prima prova delle tue abilità con CVS.</para>
- </listitem>
-
- <listitem>
- <para>Aggiungi te stesso alla sezione <quote>Developers</quote> della
- <link xlink:href="&url.articles.contributors.en;/index.html">Contributors
- List</link> e
- rimuovere te stesso dalla sezione <quote>Additional
- Contributors</quote>.</para>
- </listitem>
-
- <listitem>
- <para>Aggiungi una voce per te stesso in
- <filename>www/en/news/news.xml</filename>. Guarda le altre voci che
- assomigliano a <quote>A new committer</quote> e segui il
- formato.</para>
- </listitem>
-
- <listitem>
- <para>Dovresti aggiungere la tua chiave PGP o GnuPG in
- <filename>doc/share/pgpkeys</filename> (e se non ce l'hai, dovresti
- creartene una). Non dimenticare di effettuare il commit del file
- <filename>doc/share/pgpkeys/pgpkeys.ent</filename> aggiornato.</para>
-
- <para>&a.des; ha scritto uno script di shell per rendere questa
- operazione molto semplice. Guarda il file <link xlink:href="http://cvsweb.FreeBSD.org/doc/share/pgpkeys/README">README</link>
- per maggiori informazioni.</para>
-
- <note>
- <para>È importante avere una chiave PGP/GnuPG aggiornata nel
- Manuale, visto che potrà essere richiesta per
- l'identificazione del committer, ad esempio dai &a.admins; per
- il recupero dell'account. Un portachiavi completo degli utenti
- <systemitem class="fqdomainname">FreeBSD.org</systemitem> è disponibile
- su <link xlink:href="&url.base;/doc/pgpkeyring.txt">http://www.FreeBSD.org/doc/pgpkeyring.txt</link>.</para>
- </note>
- </listitem>
-
- <listitem>
- <para>Alcune persone aggiungono una voce per se stessi in
- <filename>ports/astro/xearth/files/freebsd.committers.markers</filename>.</para>
- </listitem>
-
- <listitem>
- <para>Alcune persone aggiungono una voce per se stessi in
- <filename>src/usr.bin/calendar/calendars/calendar.freebsd</filename>.</para>
- </listitem>
-
- <listitem>
- <para>Presentati agli altri committer, altrimenti nessuno avrà
- idea di chi tu sia o di cosa ti occupi. Non devi scrivere una
- biografia completa, basta un paragrafo o due su chi sei e su quello
- di cui hai intenzione di occuparti come committer di FreeBSD.
- Invialo alla &a.developers; e sarai sulla strada giusta!</para>
- </listitem>
-
- <listitem>
- <para>Loggati su <systemitem>hub.FreeBSD.org</systemitem> e crea un file
- <filename>/var/forward/utente</filename>
- (dove <replaceable>utente</replaceable> è il tuo nome utente)
- contenente l'indirizzo e-mail dove vuoi che i messaggi indirizzati a
- <replaceable>tuonomeutente</replaceable>@FreeBSD.org siano inoltrati.
- Questo include tutti i messaggi di commit così come ogni altro
- messaggio inviato alla &a.committers; e alla &a.developers;. Caselle
- di posta veramente grandi che hanno preso residenza fissa su
- <systemitem>hub</systemitem> spesso vengono <quote>accidentalmente</quote>
- troncate senza preavviso, quindi inoltra o leggi i messaggi in modo da
- non perderli.</para>
-
- <para>A causa dell'intenso carico per la gestione dello SPAM che
- arriva ai server di posta centrali che processano le mailing list, i
- server front-end fanno alcuni controlli e non fanno passare alcuni
- messaggi in base a questi controlli. Al momento l'unico controllo
- attivo è la verifica sulla correttezza delle informazioni DNS
- dell'host che si connette, ma questo potrebbe cambiare. Alcune
- persone accusano questi controlli di respingere email valide. Se
- vuoi disabilitare questi controlli per la tua email puoi creare
- un file chiamato <filename>~/.spam_lover</filename> nella tua
- directory home su <systemitem class="fqdomainname">freefall.FreeBSD.org</systemitem>.</para>
- </listitem>
-
- <listitem>
- <para>Se sei iscritto alla &a.cvsall;, probabilmente vorrai
- disiscriverti per evitare di ricevere copie doppie dei messaggi di
- commit e della loro evoluzione.</para>
- </listitem>
- </itemizedlist>
-
- <para>Tutti i nuovi committer hanno un mentore assegnato a loro per i primi
- mesi. Il tuo mentore è responsabile di insegnarti le regole e le
- convenzioni del progetto e guidare i tuoi primi passi nella
- comunità dei committer. È anche personalmente responsabile
- delle tue azioni durante questo periodo iniziale. Fino a quando il tuo
- mentore non decide (e lo annuncia con un commit forzato su
- <filename>access</filename>) che sei diventato pratico e pronto per
- effettuare commit da solo, non dovresti effettuare commit senza aver
- prima ottenuto la revisione e l'approvazione del tuo mentore, e dovresti
- documentare l'approvazione con una riga <literal>Approved by:</literal>
- nel messaggio di commit.</para>
-
- <para>Tutti i commit <filename>src</filename> dovrebbero andare
- su &os.current; prima di essere
- fusi in &os.stable;. Nessuna nuova caratteristica importante o modifica
- ad alto rischio dovrebbe essere fatta sul ramo &os.stable;.</para>
- </sect1>
-
- <sect1 xml:id="pref-license">
- <title>Licenza Preferita per i Nuovi File</title>
-
- <para>Attualmente il &os; Project suggerisce di usare il seguente testo
- come schema di licenza preferito:</para>
-
-<programlisting>Copyright &copy; &lt;Year&gt; &lt;Author&gt;. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.</programlisting>
-
- <para>Il progetto &os; scoraggia fortemente la cosiddetta clausola
- pubblicitaria nel nuovo codice. A causa del grande numero di
- contributi al progetto &os;, osservare questa clausola per molti
- fornitori commerciali è diventato difficile. Se hai codice
- nell'albero con la clausola pubblicitaria, pensa a rimuoverla.
- In pratica, considera di usare la licenza qui sopra per il tuo
- codice.</para>
-
- <para>Il progetto &os; scoraggia completamente nuove licenze e variazioni
- sulle licenze standard. Nuove licenze richiedono l'approvazione di
- <email>core@FreeBSD.org</email> per risiedere nel repository principale.
- Più licenze differenti vengono usate nell'albero, più
- problemi possono essere causati a chi desidera utilizzare questo codice,
- tipicamente da conseguenze non previste di una licenza strutturata
- male.</para>
- </sect1>
-
- <sect1 xml:id="developer.relations">
- <title>Relazioni tra Sviluppatori</title>
-
- <para>Se stai lavorando direttamente sul tuo codice o su codice che è
- già stabilito essere di tua responsabilità, allora
- c'è probabilmente poca necessità di confrontarsi con altri
- committer prima di effettuare un commit. Se vedi un bug in un'area del
- sistema che è chiaramente orfana (e ce n'è qualcuna di
- queste aree, per nostra vergogna), agisci allo stesso modo. Se, tuttavia,
- stai per modificare qualcosa che è chiaramente mantenuto
- attivamente da qualcun'altro (ed è solo guardando la mailing list
- <literal>cvs-committers</literal> che puoi veramente sapere cosa è
- e cosa non è) allora invia le modifiche a lui, come avresti
- fatto prima di diventare committer. Per i port, dovresti contattare il
- <varname>MAINTAINER</varname> specificato nel
- <filename>Makefile</filename>. Per altre parti del repository, se non sei
- sicuro di chi possa essere il maintainer attivo, potrebbe essere utile
- scorrere l'output di <command>cvs log</command> per vedere chi ha
- effettuato delle modifiche in passato. &a.fenner; ha scritto un utile
- script di shell che può aiutare a determinare chi sia il
- maintainer attivo. Questo elenca ogni persona che ha effettuato commit
- su un file specifico con il numero di commit che ha fatto. Può
- essere trovato su <systemitem>freefall</systemitem> in
- <filename>~fenner/bin/whodid</filename>. Se alle tue richieste non
- corrisponde una risposta o se il committer in altro modo dimostra uno
- scarso interesse nell'area oggetto della modifica, vai avanti ed effettua
- il commit tu stesso.</para>
-
- <para>Se non sei sicuro di un commit per qualunque motivo, fallo revisionare
- da <literal>-hackers</literal> prima di effettuare il commit. Meglio
- che sia criticato lì piuttosto che quando è parte del
- repository CVS. Se ti capita di effettuare un commit che provoca
- controversie, potresti voler considerare l'annullamento delle modifiche
- finché il problema sia chiarito. Ricorda &ndash; con CVS possiamo
- sempre tornare indietro.</para>
-
- <para>Non mettere in dubbio le intenzioni di qualcuno che non è
- d'accordo con te. Se vedono una soluzione differente dalla tua per un
- problema, o anche un problema diverso, non è perché sono
- stupidi, perché hanno una dubbia origine, o perché stanno
- cercando di distruggere il tuo duro lavoro, la tua immagine personale, o
- FreeBSD, ma semplicemente perché hanno una visione differente del
- mondo. La diversità è una buona cosa.</para>
-
- <para>Dissenti onestamente. Argomenta la tua posizione con i suoi meriti,
- sii onesto sui difetti che può avere, e sii disponibile a guardare
- le loro soluzioni, o anche le loro visioni del problema, con mente
- aperta.</para>
-
- <para>Accetta le correzioni. Possiamo tutti sbagliare. Se hai fatto un
- errore, scusati e vai avanti con la tua vita. Non picchiarti, e
- sicuramente non picchiare gli altri per il tuo sbaglio. Non sprecare
- tempo imbarazzandoti o recriminando, risolvi solo il problema e vai
- avanti.</para>
-
- <para>Chiedi aiuto. Cerca (e dai) revisioni dagli altri. Uno delle cose
- in cui dovrebbe eccellere il software open source è il numero di
- occhi che lo scrutano; questo non è vero se nessuno
- revisionerà il codice.</para>
- </sect1>
-
- <sect1 xml:id="gnats">
- <title>GNATS</title>
-
- <para>Il FreeBSD Project utilizza <application>GNATS</application> per
- gestire i bug e le richieste di cambiamenti. Assicurati di usare
- <command>edit-pr numero-pr</command> su
- <systemitem>freefall</systemitem> quando effettui il commit di una correzione o di
- un suggerimento trovato in un PR <application>GNATS</application> per
- chiuderlo. È inoltre considerato gentile se trovi il tempo di
- chiudere ogni PR associato al tuo commit, se esistono. Puoi anche usare
- &man.send-pr.1; tu stesso per proporre qualsiasi cambiamento che pensi
- debba essere fatto, a seguito di una maggiore revisione da parte di altre
- persone.</para>
-
- <para>Puoi trovare di più su <application>GNATS</application>
- su:</para>
-
- <itemizedlist>
- <listitem>
- <para><link xlink:href="http://www.cs.utah.edu/csinfo/texinfo/gnats/gnats.html">http://www.cs.utah.edu/csinfo/texinfo/gnats/gnats.html</link></para>
- </listitem>
-
- <listitem>
- <para><link xlink:href="&url.base;/support.html">http://www.FreeBSD.org/support.html</link></para>
- </listitem>
-
- <listitem>
- <para>&man.send-pr.1;</para>
- </listitem>
- </itemizedlist>
-
- <para>Puoi far girare una copia locale di GNATS, e poi integrare l'albero
- GNATS di FreeBSD in esso tramite CVSup. In seguito puoi usare i comandi
- GNATS localmente, o usare altre interfacce, come
- <command>tkgnats</command>. Questo ti permette di interrogare il database
- dei PR senza bisogno di essere connesso a Internet.</para>
-
- <procedure>
- <title>Utilizzo di un albero GNATS locale</title>
-
- <step>
- <para>Se non stai già scaricando l'albero GNATS, aggiungi questa
- riga al tuo <filename>supfile</filename>, e riesegui &man.cvsup.1;.
- Nota che siccome GNATS non è sotto
- il controllo di CVS non ha tag, quindi se lo stai aggiungendo al tuo
- <filename>supfile</filename> esistente deve apparire prima di ogni
- voce <quote>tag=</quote> dato che queste rimangono attive una volta
- impostate.</para>
-
- <programlisting>gnats release=current prefix=/usr</programlisting>
-
- <para>Questo metterà l'albero GNATS di FreeBSD in
- <filename>/usr/gnats</filename>. Puoi usare un file
- <emphasis>refuse</emphasis> per controllare quali categorie ricevere.
- Per esempio, per ricevere solo i PR <literal>docs</literal>, metti
- questa riga in <filename>/usr/local/etc/cvsup/sup/refuse</filename>
- <footnote>
- <para>Il percorso preciso dipende dall'impostazione
- <literal>*default base</literal> nel tuo
- <filename>supfile</filename>.</para>
- </footnote>.</para>
-
- <programlisting>gnats/[a-ce-z]*</programlisting>
-
- <para>Il resto di questi esempi assume che tu abbia scaricato solo la
- categoria <literal>docs</literal>. Modificali quando è
- necessario, a seconda delle categorie che tieni in sincronia.</para>
- </step>
-
- <step>
- <para>Installa il port GNATS da
- <filename>ports/databases/gnats</filename>. Questo metterà le
- varie directory GNATS sotto
- <filename>$PREFIX/share/gnats</filename>.</para>
- </step>
-
- <step>
- <para>Crea un symlink per le directory GNATS che aggiorni tramite CVSup
- sotto la versione di GNATS che hai installato.</para>
-
- <screen>&prompt.root; <userinput>cd /usr/local/share/gnats/gnats-db</userinput>
-&prompt.root; <userinput>ln -s /usr/gnats/docs</userinput></screen>
-
- <para>Ripeti tante volte quanto necessario, a seconda di quante
- categorie GNATS tieni in sincronia.</para>
- </step>
-
- <step>
- <para>Aggiorna il file <filename>categories</filename> di GNATS con
- queste categorie. Il file è
- <filename>$PREFIX/share/gnats/gnats-db/gnats-adm/categories</filename>.</para>
-
- <programlisting># Questa categoria è obbligatoria
-pending:Categoria per i PR errati:gnats-admin:
-#
-# Categorie di FreeBSD
-#
-docs:Bug di Documentazione:freebsd-doc:</programlisting>
- </step>
-
- <step>
- <para>Esegui <filename>$PREFIX/libexec/gnats/gen-index</filename> per
- ricreare l'indice GNATS. L'output deve essere reindirizzato su
- <filename>$PREFIX/share/gnats/gnats-db/gnats-adm/index</filename>.
- Puoi fare questo periodicamente da &man.cron.8;, o eseguire
- &man.cvsup.1; da uno script di shell che fa anche questo.</para>
-
- <screen>&prompt.root; <userinput>/usr/local/libexec/gnats/gen-index \
- &gt; /usr/local/share/gnats/gnats-db/gnats-adm/index</userinput></screen>
- </step>
-
- <step>
- <para>Verifica la configurazione interrogando il database dei PR.
- Questo comando visualizza i PR <literal>docs</literal> aperti.</para>
-
- <screen>&prompt.root; <userinput>query-pr -c docs -s open</userinput></screen>
-
- <para>Anche altre interfacce, come quella fornita dal port <package>databases/tkgnats</package>, dovrebbero funzionare
- correttamente.</para>
- </step>
-
- <step>
- <para>Prendi un PR e chiudilo.</para>
- </step>
- </procedure>
-
- <note>
- <para>Questa procedura funziona solo per permetterti di visualizzare ed
- interrogare i PR localmente. Per modificarli o chiuderli dovrai ancora
- loggarti su <systemitem>freefall</systemitem> e farlo da lì.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="people">
- <title>Chi è Chi</title>
-
- <para>Oltre ai meister del repository, ci sono altri membri e team del
- FreeBSD Project che probabilmente arriverai a conoscere nel tuo ruolo di
- committer. Brevemente, e senza pretesa di elencarli tutti, questi
- sono:</para>
-
- <variablelist>
- <varlistentry>
- <term>&a.jhb;</term>
-
- <listitem>
- <para>John è il manager dell'SMPng Project, e ha
- autorità sulla progettazione architetturale e
- sull'implementazione del passaggio a un sistema di threading e
- locking del kernel a grana fine. È anche l'autore
- dell'SMPng Architecture Document. Se stai lavorando sullo stesso
- sistema, coordinati con John.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.jake;, &a.tmm;</term>
-
- <listitem>
- <para>Jake e Thomas sono i maintainer del port sull'architettura
- &sparc64;.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.doceng;</term>
-
- <listitem>
- <para>doceng è il gruppo responsabile dell'infrastruttura
- per la realizzazione della documentazione, approva i nuovi committer
- della documentazione, e assicura che il sito web di FreeBSD e la
- documentazione sul sito FTP siano aggiornati rispetto all'albero
- CVS. Non è un organo di risoluzione dei conflitti.
- La maggior parte delle discussioni relative alla documentazione
- prendono posto sulla &a.doc;. Maggiori dettagli riguardanti il
- team doceng possono essere trovati nel suo <link xlink:href="http://www.FreeBSD.org/internal/doceng.html">statuto</link>.
- I committer interessati a contribuire
- alla documentazione dovrebbero familiarizzare con il <link xlink:href="&url.books.fdp-primer.en;/index.html">Documentation
- Project Primer</link>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.ru;</term>
-
- <listitem>
- <para>Ruslan è Mister &man.mdoc.7;. Se stai scrivendo una
- pagina man e hai bisogno di qualche suggerimento sulla struttura,
- o sul linguaggio di markup, chiedi a Ruslan.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.bde;</term>
-
- <listitem>
- <para>Bruce è lo Style Police-Meister. Quando fai un commit
- che poteva essere fatto meglio, Bruce sarà lì a
- dirtelo. Ringrazia che qualcuno lo sia. Bruce conosce anche molto
- bene gli standard applicabili a FreeBSD.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.gallatin;</term>
- <term>&a.mjacob;</term>
- <term>&a.dfr;</term>
- <term>&a.obrien;</term>
-
- <listitem>
- <para>Questi sono gli sviluppatori e i supervisori primari della
- piattaforma DEC Alpha AXP.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.dg;</term>
-
- <listitem>
- <para>David è il supervisore del sistema VM. Se hai in mente
- una modifica al sistema VM, coordinala con David.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.dfr;</term>
- <term>&a.marcel;</term>
- <term>&a.peter;</term>
- <term>&a.ps;</term>
-
- <listitem>
- <para>Questi sono i principali sviluppatori e supervisori della
- piattaforma Intel IA-64, ufficialmente conosciuta come l'&itanium;
- Processor Family (IPF).</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.murray;</term>
- <term>&a.steve;</term>
- <term>&a.rwatson;</term>
- <term>&a.jhb;</term>
- <term>&a.scottl;</term>
- <term>&a.kensmith;</term>
- <term>&a.hrs;</term>
-
- <listitem>
- <para>Questi sono i membri del &a.re;. Questo team è
- responsabile di decidere i tempi delle release e controllare il
- processo di release. Durante i periodi di congelamento del
- codice, gli ingegneri di release hanno l'autorità finale su
- tutte le modifiche al sistema per quel ramo di cui si sta preparando
- la release. Se c'è qualcosa che vuoi sia fuso da
- &os.current; a &os.stable; (qualsiasi valore queste possano avere
- in un dato momento), queste sono le persone con cui devi
- parlare.</para>
-
- <para>Hiroki è anche l'autore della documentazione di
- release (<filename>src/release/doc/*</filename>). Se effettui il
- commit di una modifica che pensi sia degna di menzione nelle note
- di release, assicurati che lo sappia. Meglio ancora, inviagli
- una patch con il tuo commento.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.benno;</term>
-
- <listitem>
- <para>Benno è il maintainer ufficiale del port per
- &powerpc;.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.brian;</term>
-
- <listitem>
- <para>Maintainer ufficiale di
- <filename>/usr/sbin/ppp</filename>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.nectar;</term>
-
- <listitem>
- <para>Jacques è il <link xlink:href="&url.base;/security/">FreeBSD
- Security Officer</link> e supervisiona il
- &a.security-officer;.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.wollman;</term>
-
- <listitem>
- <para>Se hai bisogno di consigli sulle oscure parti interne delle reti
- o non sei sicuro di qualche eventuale modifica al sottosistema di
- rete che hai in mente, Garrett è qualcuno con cui parlare.
- Garret è inoltre molto esperto sui vari standard applicabili
- a FreeBSD.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.committers;</term>
-
- <listitem>
- <para>cvs-committers è l'entità che CVS usa per inviarti
- tutti i messaggi di commit. Non devi <emphasis>mai</emphasis>
- inviare email direttamente a questa lista. Puoi solamente
- rispondere a questa lista quando i messaggi sono brevi e
- direttamente correlati a un commit.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.developers;</term>
-
- <listitem>
- <para>Tutti i committer sono iscritti a -developers. Questa lista
- è stata creata per essere un forum sulle questioni della
- <quote>comunità</quote> dei committer. Esempi sono le
- votazioni per il Core, annunci, ecc. Questa lista
- <emphasis>non</emphasis> è intesa come posto per la revisione
- del codice o come rimpiazzo della &a.arch; o della &a.audit;.
- Infatti usarla in questo modo urta il FreeBSD Project dato che
- dà l'impressione di una lista privata dove vengono prese le
- decisioni generali che influenzano tutta la comunità che usa
- FreeBSD senza essere rese <quote>pubbliche</quote>.
- Ultimo, ma non per importanza <emphasis>mai e poi mai invia un
- messaggio alla &a.developers; mettendo in CC:/BCC: un'altra lista
- FreeBSD</emphasis>.
- Mai e poi mai invia un messaggio su un'altra mailing list mettendo
- in CC:/BCC: la &a.developers;. Fare questo può diminuire
- enormemente i benefici di questa lista. Inoltre, non pubblicare o
- inoltrare mai email inviate alla &a.developers;. L'atto di inviare
- un messaggio alla &a.developers; anziché a una lista
- pubblica significa che le informazioni contenute non sono ad uso
- pubblico.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect1>
-
- <sect1 xml:id="ssh.guide">
- <title>Guida Rapida a SSH</title>
-
- <procedure>
- <step>
- <para>Se stai usando FreeBSD 4.0 o successivo, OpenSSH è incluso
- nel sistema base. Se stai usando una release precedente, aggiorna
- ed installa uno dei port di SSH. In generale, probabilmente vorrai
- prendere OpenSSH dal port <package>security/openssh</package>. Potresti anche voler
- estrarre l'ssh1 originale dal port <package>security/ssh</package>, ma sii certo di porre la
- dovuta attenzione alla sua licenza. Nota che questi port non possono
- essere installati contemporaneamente.</para>
- </step>
-
- <step>
- <para>Se non vuoi digitare la tua password ogni volta che usi
- &man.ssh.1;, e usi chiavi RSA o DSA per autenticarti,
- &man.ssh-agent.1; è lì per la tua comodità.
- Se vuoi usare &man.ssh-agent.1;, assicurati di eseguirlo prima di
- utilizzare altre applicazioni. Gli utenti X, per esempio, solitamente
- fanno questo dal loro file <filename>.xsession</filename> o
- <filename>.xinitrc</filename>. Guarda &man.ssh-agent.1; per i
- dettagli.</para>
- </step>
-
- <step>
- <para>Genera un paio di chiavi con &man.ssh-keygen.1;. Le chiavi
- finiranno nella tua directory
- <filename>$HOME/.ssh/</filename>.</para>
- </step>
-
- <step>
- <para>Invia la tua chiave pubblica
- (<filename>$HOME/.ssh/id_dsa.pub</filename> o
- <filename>$HOME/.ssh/id_rsa.pub</filename>)
- alla persona che ti sta configurando come committer in modo che possa
- inserirla nel file
- <filename>tualogin</filename> su
- <systemitem>freefall</systemitem>.</para>
- </step>
- </procedure>
-
- <para>Ora dovresti essere in grado di usare &man.ssh-add.1; per autenticarti
- una volta a sessione. Ti verrà richiesta la pass phrase della tua
- chiave privata, e quindi verrà salvata nel tuo agente di
- autenticazione (&man.ssh-agent.1;). Se non vuoi più avere la tua
- chiave salvata nell'agente, l'esecuzione di <command>ssh-add -d</command>
- la rimuoverà.</para>
-
- <para>Verifica facendo qualcosa come <command>ssh freefall.FreeBSD.org ls
- /usr</command>.</para>
-
- <para>Per maggiori informazioni, guarda <package>security/openssh</package>, &man.ssh.1;,
- &man.ssh-add.1;, &man.ssh-agent.1;, &man.ssh-keygen.1;, e
- &man.scp.1;.</para>
- </sect1>
-
- <sect1 xml:id="rules">
- <title>Il Lungo Elenco di Regole dei Committer di FreeBSD</title>
-
- <para>Traduzione in corso</para>
- </sect1>
-
- <sect1 xml:id="archs">
- <title>Supporto per Diverse Architetture</title>
-
- <para>Traduzione in corso</para>
- </sect1>
-
- <sect1 xml:id="ports">
- <title>FAQ Specifiche sui Port</title>
-
- <para>Traduzione in corso</para>
- </sect1>
-
- <sect1 xml:id="perks">
- <title>Benefici del Lavoro</title>
-
- <para>Sfortunatamente, non ci sono molti benefici derivanti dall'essere un
- committer. Il riconoscimento di essere un progettista di software
- competente è probabilmente l'unica cosa che sarà di tuo
- vantaggio a lungo termine. Ciononostante, ci sono comunque alcuni
- benefici:</para>
-
- <variablelist>
- <varlistentry>
- <term>Accesso diretto al <systemitem>cvsup-master</systemitem></term>
-
- <listitem>
- <para>Come committer, puoi chiedere a &a.kuriyama; accesso diretto
- a <systemitem class="fqdomainname">cvsup-master.FreeBSD.org</systemitem>,
- fornendo l'output della tua chiave pubblica tramite
- <command>cvpasswd
- yourusername@FreeBSD.org
- freefall.FreeBSD.org</command>. Nota: devi specificare
- <systemitem>freefall.FreeBSD.org</systemitem> sulla riga di comando si
- <command>cvpasswd</command> anche se il server attuale è
- <systemitem>cvsup-master</systemitem>. L'accesso al
- <systemitem>cvsup-master</systemitem> non dovrebbe essere abusato visto che
- è una macchina carica di lavoro.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Un abbonamento gratuito al set da 4 CD o DVD</term>
-
- <listitem>
- <para><link xlink:href="http://www.freebsdmall.com">FreeBSD Mall,
- Inc.</link> offre un abbonamento gratuito al set da 4 CD o DVD a
- tutti i committer di FreeBSD. Le informazioni su come ottenere il
- prodotto gratuitamente vengono spedite a
- <email>developers@FreeBSD.org</email> dopo ogni release.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect1>
-
- <sect1 xml:id="misc">
- <title>Domande Generali</title>
-
- <para>Traduzione in corso</para>
- </sect1>
-</article>
diff --git a/it_IT.ISO8859-15/articles/explaining-bsd/Makefile b/it_IT.ISO8859-15/articles/explaining-bsd/Makefile
deleted file mode 100644
index 39733a2b9e..0000000000
--- a/it_IT.ISO8859-15/articles/explaining-bsd/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# $FreeBSD$
-#
-# Articolo: Panoramica su BSD
-
-DOC?= article
-
-FORMATS?= html
-WITH_ARTICLE_TOC?= YES
-
-INSTALL_COMPRESSED?=gz
-INSTALL_ONLY_COMPRESSED?=
-
-SRCS= article.xml
-
-URL_RELPREFIX?= ../../../..
-DOC_PREFIX?= ${.CURDIR}/../../..
-
-.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/it_IT.ISO8859-15/articles/explaining-bsd/article.xml b/it_IT.ISO8859-15/articles/explaining-bsd/article.xml
deleted file mode 100644
index 7d6d3ac4ea..0000000000
--- a/it_IT.ISO8859-15/articles/explaining-bsd/article.xml
+++ /dev/null
@@ -1,615 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-15"?>
-<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
- "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
-<!--
- The FreeBSD Italian Documentation Project
-
- $FreeBSD$
- Original revision: 1.22
--->
-<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="it">
- <info><title>Panoramica su BSD</title>
-
-
- <author><personname><firstname>Greg</firstname><surname>Lehey</surname></personname><affiliation>
- <address><email>grog@FreeBSD.org</email></address>
- </affiliation></author>
-
- <legalnotice xml:id="trademarks" role="trademarks">
- &tm-attrib.freebsd;
- &tm-attrib.amd;
- &tm-attrib.apple;
- &tm-attrib.linux;
- &tm-attrib.opengroup;
- &tm-attrib.sun;
- &tm-attrib.xfree86;
- &tm-attrib.general;
- </legalnotice>
-
- <pubdate>$FreeBSD$</pubdate>
-
- <releaseinfo>$FreeBSD$</releaseinfo>
-
- <abstract>
- <para>Nel mondo open source, la parola <quote>Linux</quote> è quasi
- sinonimo di <quote>Sistema Operativo</quote>, ma non si tratta del solo
- sistema operativo &unix; open source. Secondo
- l'<link xlink:href="http://www.leb.net/hzo/ioscount/data/r.9904.txt">Internet
- Operating System Counter</link>, ad Aprile del 1999 il 31.3% delle
- macchine connesse in rete ha in esecuzione Linux.
- Il 14.6% fa girare BSD &unix;.
- Alcuni dei più grandi operatori del web, come <link xlink:href="http://www.yahoo.com/">Yahoo!</link>, usano BSD. Il server
- FTP più affollato del mondo nel 1999 (ora defunto), <link xlink:href="ftp://ftp.cdrom.com/">ftp.cdrom.com</link>, usa BSD per
- trasferire 1.4 TB di dati al giorno. Chiaramente questo non è
- un mercato di nicchia: BSD è un segreto ben mantenuto.</para>
-
- <para>Dunque, qual è il segreto? Perché BSD non è
- conosciuto meglio? Questo documento risponde a questa e ad altre
- domande.</para>
-
- <para>In questo documento, le differenze tra BSD e Linux verranno
- evidenziate <emphasis>così</emphasis>.</para>
-
- &trans.it.surrender;
- </abstract>
- </info>
-
- <sect1 xml:id="what-is-bsd">
- <title>Cos'è BSD?</title>
-
- <para>BSD sta per <quote>Berkeley Software Distribution</quote>. È
- il nome delle distribuzioni di codice sorgente dell'Università
- della California, Berkeley, che erano originariamente estensioni al
- sistema operativo &unix; del settore Ricerca della AT&amp;T.
- Molti progetti open source di sistemi operativi sono basati
- su una versione di questo codice sorgente noto come
- 4.4BSD-Lite. Inoltre, essi comprendono un gran numero di
- pacchetti provenienti da altri progetti Open Source, incluso, in
- particolare, il progetto GNU. L'intero sistema operativo
- comprende:</para>
-
- <itemizedlist>
- <listitem>
- <para>Il kernel BSD, che gestisce lo scheduling dei processi, l'utilizzo
- della memoria, il supporto multiprocessore (SMP), i driver dei
- vari dispositivi, ecc.</para>
-
- <para><emphasis>Diversamente dal kernel Linux, ci sono differenti
- kernel BSD con differenti caratteristiche.</emphasis></para>
- </listitem>
-
- <listitem>
- <para>La libreria C, le API di base per il sistema.</para>
-
- <para><emphasis>La libreria C BSD è basata su codice proveniente
- da Berkeley, non dal progetto GNU.</emphasis></para>
- </listitem>
-
- <listitem>
- <para>Utilità come shell, file manager, compilatori e
- linker.</para>
-
- <para><emphasis>Alcune delle applicazioni derivano dal
- progetto GNU, altre no.</emphasis></para>
- </listitem>
-
- <listitem>
- <para>L'X Window System, che gestisce la visualizzazione grafica.</para>
-
- <para>L'X Window System usato nella maggior parte delle versioni di
- BSD viene mantenuto da uno dei due progetti separati, il
- <link xlink:href="http://www.XFree86.org/">progetto &xfree86;</link> e il
- <link xlink:href="http://www.X.org/">progetto X.Org</link>.
- Questo è lo stesso codice usato da Linux. BSD in genere non
- specifica un <quote>desktop grafico</quote> come GNOME o KDE,
- anche se questi sono disponibili.</para>
- </listitem>
-
- <listitem>
- <para>Molti altri programmi ed utilità.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 xml:id="what-a-real-unix">
- <title>Cosa, un vero &unix;?</title>
-
- <para>I sistemi operativi BSD non sono cloni, ma derivati open source
- del sistema operativo &unix; dell'AT&amp;T Research, che è anche
- l'antenato del moderno &unix; System V. Questo potrebbe sorprendere.
- Come è potuto accadere questo, se la AT&amp;T non ha mai rilasciato
- il suo codice come open source?</para>
-
- <para>È vero che lo &unix; AT&amp;T non è open source, e nel
- senso del copyright BSD in definitiva <emphasis>non è</emphasis>
- &unix;, ma d'altro canto l'AT&amp;T ha importato sorgenti da altri
- progetti, in maniera rilevante dal Computer Sciences Research Group
- dell'Università della California a Berkeley, CA. Iniziato nel
- 1976, il CSRG ha iniziato a rilasciare nastri con il loro software,
- chiamandolo <emphasis>Berkeley Software Distribution</emphasis> o
- <emphasis>BSD</emphasis>.</para>
-
- <para>Le versioni iniziali di BSD consistevano principalmente di programmi
- utente, ma questo cambiò drammaticamente quando il CSRG
- sottoscrisse un contratto con la
- Defense Advanced Projects Research Agency (DARPA) per migliorare
- i protocolli di comunicazione della loro rete, ARPANET. I nuovi
- protocolli furono conosciuti come <emphasis>Internet Protocols</emphasis>,
- e in seguito come <emphasis>TCP/IP</emphasis>, ai nomi dei protocolli
- più importanti. La prima implementazione distribuita in maniera
- estesa fu parte di 4.2BSD, nel 1982.</para>
-
- <para>Nel corso degli '80, sorsero un certo numero di compagnie
- che producevano workstation. Molti preferirono usare &unix; su licenza
- piuttosto che sviluppare da soli un nuovo sistema operativo.
- In particolare, la Sun Microsystems rilicenziò &unix; ed
- implementò una versione commerciale di 4.2BSD, che chiamò
- SunOS. Quando alla AT&amp;T stessa fu permesso di vendere &unix;
- commercialmente, cominciarono con una implementazione ridotta all'osso
- nota come System III, presto seguita da System V.
- Il codice fondamentale di System V non comprendeva la parte di rete,
- dunque tutte le implementazioni includevano software addizionale tratto
- da BSD, incluso il software legato al TCP/IP, ma anche utilità come
- la shell <emphasis>csh</emphasis> e l'editor <emphasis>vi</emphasis>.
- Complessivamente, questi miglioramenti furono conosciuti
- come le <emphasis>Estensioni Berkeley</emphasis>.</para>
-
- <para>Il nastro BSD conteneva codice AT&amp;T e dunque richiedeva
- una licenza per il sorgente &unix;. Dal 1990, il finanziamento del CSRG
- si stava esaurendo, e se ne stava per affrontare la chiusura.
- Alcuni membri del gruppo decisero di rilasciare il codice BSD,
- che era Open Source, senza il codice proprietario della AT&amp;T.
- Ciò accadde infine con il <emphasis>Networking Tape 2</emphasis>,
- in genere noto come <emphasis>Net/2</emphasis>. Net/2 non era un sistema
- operativo completo: mancava circa il 20% del codice del kernel. Uno dei
- membri del CSRG, William F. Jolitz, scrisse il codice rimanente e lo
- rilasciò all'inizio del 1992 come <emphasis>386BSD</emphasis>.
- Allo stesso tempo, un altro gruppo di ex membri del CSRG formò una
- compagnia chiamata <link xlink:href="http://www.bsdi.com/">Berkeley Software
- Design Inc.</link> e rilasciò una versione beta di un sistema
- operativo chiamato <link xlink:href="http://www.bsdi.com/">BSD/386</link>,
- che era basato sugli stessi sorgenti. Il nome del sistema operativo
- è cambiato di recente in BSD/OS.</para>
-
- <para>386BSD non divenne mai un sistema operativo stabile. Invece, due
- altri progetti se ne distaccarono nel 1993:
- <link xlink:href="http://www.NetBSD.org/">NetBSD</link> e
- <link xlink:href="&url.base;/index.html">FreeBSD</link>.
- I due progetti presero inizialmente direzioni divergenti, a causa della
- differente pazienza nell'attendere miglioramenti a
- 386BSD: la gente di NetBSD cominciò all'inizio dell'anno,
- e la prima versione di FreeBSD non fu pronta fino alla fine
- dell'anno. Nel frattempo, i codici erano diventati abbastanza differenti
- da renderne difficile la fusione. Inoltre, i progetti avevano obiettivi
- differenti, come vedremo in seguito. Nel 1996,
- <link xlink:href="http://www.OpenBSD.org/">OpenBSD</link> si ramificò
- da NetBSD, e nel 2003,
- <link xlink:href="http://www.dragonflybsd.org/">DragonFlyBSD</link> si
- ramificò da FreeBSD.</para>
- </sect1>
-
- <sect1 xml:id="why-is-bsd-not-better-known">
- <title>Perché BSD non è più conosciuto?</title>
-
- <para>Per un certo numero di ragioni, BSD è relativamente
- sconosciuto:</para>
-
- <orderedlist>
- <listitem>
- <para>Gli sviluppatori BSD sono spesso più interessati
- a ripulire il loro codice che a fagli pubblicità.</para>
- </listitem>
-
- <listitem>
- <para>Molta della popolarità di Linux è dovuta a fattori
- esterni al progetto Linux, come la stampa, e le compagnie formate per
- fornire servizi relativi a Linux. Fino a poco tempo fa,
- la varie versioni di BSD open source non avevano tali spinte.</para>
- </listitem>
-
- <listitem>
- <para>Gli sviluppatori BSD tendono ad avere più esperienza
- di quelli di Linux, ed hanno meno interesse nel rendere il sistema
- facile da usare.
- I nuovi arrivati tendono a sentirsi più a loro agio con
- Linux.</para>
- </listitem>
-
- <listitem>
- <para>Nel 1992, l'AT&amp;T citò in giudizio
- <link xlink:href="http://www.bsdi.com/">BSDI</link>,
- il produttore di BSD/386, sostenendo che il prodotto conteneva
- codice sotto copyright della AT&amp;T. Il caso fu risolto in
- tribunale nel 1994, ma lo spettro della causa continua a perseguitare
- alcune persone. Nel marzo 2000 un articolo pubblicato sul web
- sosteneva che il caso era stato <quote>concluso
- recentemente</quote>.</para>
-
- <para>Un dettaglio che venne chiarito dall'azione legale fu il nome:
- negli anni '80, BSD era stato conosciuto come <quote>BSD
- &unix;</quote>.
- Con l'eliminazione delle ultima vestigia del codice AT&amp;T da BSD,
- si era perso anche il diritto di usare il nome &unix;. Per questo
- noterete riferimenti nei libri al <quote>sistema operativo 4.3BSD
- &unix;</quote> ed al <quote>sistema operativo 4.4BSD</quote>.</para>
- </listitem>
-
- <listitem>
- <para>C'è una certa percezione che il progetto BSD sia
- frammentato e belligerante. Il <link xlink:href="http://interactive.wsj.com/bin/login?Tag=/&amp;URI=/archive/retrieve.cgi%253Fid%253DSB952470579348918651.djm&amp;">Wall
- Street Journal</link> parlò di
- <quote>balcanizzazione</quote> dei progetti BSD. Come per l'azione
- legale, questa percezione si basa principalmente su vecchie
- storie.</para>
- </listitem>
- </orderedlist>
- </sect1>
-
- <sect1 xml:id="comparing-bsd-and-linux">
- <title>Paragone tra BSD e Linux</title>
-
- <para>Dunque qual'è l'effettiva differenza tra, diciamo, Debian
- Linux e FreeBSD? Per l'utente medio, la differenza è
- sorprendentemente piccola: entrambi sono sistemi operativi tipo &unix;.
- Entrambi vengono sviluppati da progetti non commerciali (questo non si
- applica a molte altre distribuzioni di Linux, ovviamente). Nella sezione
- seguente, daremo un'occhiata a BSD e lo paragoneremo a Linux.
- La descrizione si applica molto da vicino a FreeBSD, che conta per un 80%
- delle installazioni BSD, ma le differenza da NetBSD, OpenBSD e DragonFlyBSD
- sono piccole.</para>
-
- <sect2>
- <title>Chi possiede BSD?</title>
-
- <para>Nessuna persona o società possiede BSD. Esso è creato
- e distribuito da una comunità di persone con grande preparazione
- tecnica e voglia di fare che contribuiscono da tutto il mondo.
- Alcuni dei componenti di BSD sono progetti open source a se stanti gestiti
- da diversi responsabili.</para>
- </sect2>
-
- <sect2>
- <title>Come viene sviluppato ed aggiornato BSD?</title>
-
- <para>I kernel BSD vengono sviluppati ed aggiornati
- seguendo il modello di sviluppo open source. Ogni progetto mantiene
- un <emphasis>albero dei sorgenti</emphasis> liberamente accessibile in
- un <link xlink:href="http://www.cvshome.org/">Concurrent Versions
- System</link>, un sistema di gestione delle versioni concorrenti,
- che contiene tutti i file sorgenti del progetto,
- inclusa la documentazione ed altri file inerenti. Il CVS
- permette agli utenti di <quote>estrarre</quote> (in sostanza,
- estrarre una copia di) ogni versione desiderata del sistema.</para>
-
- <para>Un grande numero di sviluppatori da tutto il mondo contribuisce al
- miglioramento di BSD. Essi sono divisi in tre grandi gruppi:</para>
-
- <itemizedlist>
- <listitem>
- <para>I <firstterm>contributor</firstterm> scrivono codice o
- documentazione. Non gli è permesso di effettuare il commit
- (aggiungere codice) direttamente all'albero dei sorgenti.
- Affinché il loro codice sia incluso nel sistema, esso
- deve essere rivisto e controllato da uno sviluppatore registrato,
- noto come <emphasis>committer</emphasis>.</para>
- </listitem>
-
- <listitem>
- <para>I <firstterm>committer</firstterm> sono sviluppatori
- con accesso in scrittura all'albero dei sorgenti.
- Per poter divenire un committer, un individuo deve dimostrare
- abilità nell'area nella quale è attivo.</para>
-
- <para>
- È a discrezione del committer la volontà di
- confrontarsi con qualcuno prima di effettuare cambiamenti. In
- generale, un committer con esperienza può effettuare
- cambiamenti che sono ovviamente corretti senza interrogare nessuno.
- Ad esempio, un committer del progetto di documentazione può
- correggere errori tipografici o grammaticali senza un confronto con
- altri. D'altro canto, dagli sviluppatori che stanno per effettuare
- cambiamenti profondi o complessi ci si aspetta che sottopongano i
- cambiamenti a revisione prima di renderli effettivi. In casi
- estremi, un membro del core team, con una funzione simile a un Capo
- Architetto, può ordinare che i cambiamenti siano rimossi
- dall'albero, un processo noto come <firstterm>marcia
- indietro</firstterm>.
- Tutti i committer ricevono una lettera che descrive ogni
- modifica individuale, dunque non è possibile effettuare un
- commit segretamente.</para>
- </listitem>
-
- <listitem>
- <para>Il <firstterm>Core Team</firstterm>. FreeBSD e NetBSD
- hanno ognuno un core team che gestisce il progetto. I
- core team si sono modificati nel corso del progetto, ed i loro
- ruoli non sempre sono ben definiti. Non è necessario essere
- uno sviluppatore per far parte del core team, anche se è
- normale che sia così. Le regole
- per il core team variano da un progetto ad un altro, ma in
- generale chi ne fa parte ha più autorità
- nell'indirizzamento del progetto rispetto agli altri membri.</para>
- </listitem>
- </itemizedlist>
-
- <para>Questa organizzazione differisce da Linux in vari modi:</para>
-
- <orderedlist>
- <listitem>
- <para>Nessuna persona controlla il contenuto del sistema. In
- pratica, questa differenza è sopravvalutata, poiché
- il Capo Architetto può richiedere che il codice sia
- rimosso, ed anche nel progetto Linux viene permesso a
- molte persone di effettuare cambiamenti.</para>
- </listitem>
-
- <listitem>
- <para>D'altra parte, <emphasis>c'è</emphasis> un deposito
- centrale, un punto singolo dove è possibile trovare i
- sorgenti dell'intero sistema, incluse tutte le vecchie
- versioni.</para>
- </listitem>
-
- <listitem>
- <para>I progetti BSD mantengono l'intero <quote>Sistema
- Operativo</quote>, non solo il kernel. Questa distinzione
- è utile solo marginalmente: né BSD né Linux
- sono utili senza applicazioni. Le applicazioni usate su BSD sono
- spesso le stesse usate su Linux.</para>
- </listitem>
-
- <listitem>
- <para>Come risultato di un mantenimento formalizzato
- di un singolo CVS per l'albero dei sorgenti, lo sviluppo di BSD
- è chiaro, ed è possibile accedere ad ogni versione del
- sistema dal numero di release o dalla data.
- Il CVS permette anche aggiornamenti incrementali del sistema: ad
- esempio, il repository di FreeBSD viene aggiornato più o meno
- 100 volte al giorno. La maggior parte dei cambiamenti sono
- piccoli.</para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2>
- <title>Release di BSD</title>
-
- <para>FreeBSD, NetBSD and OpenBSD forniscono il sistema in tre
- <quote>release</quote> differenti. Come per Linux, alle release
- vengono assegnati dei numeri come 1.4.1 o 3.5. Inoltre, il numero di
- versione ha un suffisso che indica il suo scopo:</para>
-
- <orderedlist>
- <listitem>
- <para>la versione di sviluppo del sistema è chiamata
- <firstterm>CURRENT</firstterm>. FreeBSD assegna un numero
- alla CURRENT, ad esempio FreeBSD 5.0-CURRENT. NetBSD usa uno
- schema di denominazione leggermente differente
- ed aggiunge un suffisso di una singola lettera che indica
- i cambiamenti nell'interfaccia interna, ad esempio NetBSD
- 1.4.3G. OpenBSD non assegna un numero
- (<quote>OpenBSD-current</quote>).
- Tutti gli sviluppi del sistema vanno in questo ramo.</para>
- </listitem>
-
- <listitem>
- <para>A intervalli regolari, tra le due e le quattro volte all'anno, i
- progetti fanno uscire una versione <firstterm>RELEASE</firstterm>
- del sistema, disponibile su CD-ROM e come libero download da siti
- FTP, ad esempio OpenBSD 2.6-RELEASE o NetBSD 1.4-RELEASE.
- La versione RELEASE è intesa per gli utenti finali ed
- è la versione normale del sistema. NetBSD fornisce anche
- <emphasis>patch release</emphasis>, versioni con solo piccole
- correzioni, con una terza cifra, ad esempio NetBSD 1.4.2.</para>
- </listitem>
-
- <listitem>
- <para>Quando vengono trovati dei bug in una versione RELEASE,
- vengono corretti, e le correzioni vengono aggiunte all'albero del
- CVS. In FreeBSD, la versione risultante viene detta
- <firstterm>STABLE</firstterm>, mentre in NetBSD ed OpenBSD continua
- a chiamarsi RELEASE. Caratteristiche minori possono essere aggiunte
- a questo ramo dopo un periodo di test nel ramo CURRENT.</para>
- </listitem>
- </orderedlist>
-
- <para><emphasis>In contrasto, Linux mantiene due alberi di codice
- differenti: la versione stabile e la versione di sviluppo.
- Le versioni stabili hanno un numero di versione pari, come 2.0, 2.2 o
- 2.4. Le versioni di sviluppo hanno numero di versione dispari, come
- 2.1, 2.3 o 2.5. In ogni caso, il numero è seguito da un
- ulteriore numero che indica la versione esatta. Inoltre, ogni
- venditore aggiunge i suoi programmi utente o le sue utilità,
- dunque anche il nome della distribuzione è importante. Ogni
- venditore di distribuzione assegna anche un numero di versione alla
- distribuzione, dunque una descrizione completa dovrebbe essere una
- cosa del tipo <quote>TurboLinux 6.0 con kernel
- 2.2.14</quote></emphasis></para>
- </sect2>
-
- <sect2>
- <title>Quali versioni di BSD sono disponibili?</title>
-
- <para>In contrasto alle numerose distribuzioni Linux, ci sono solo
- quattro BSD open source. Ogni progetto BSD mantiene il suo albero dei
- sorgenti ed il suo kernel. In pratica, comunque, ci sono meno
- divergenze tra i codici dei programmi utente dei vari progetti di quante
- ce ne siano in Linux.</para>
-
- <para>È difficile catalogare gli obiettivi di ogni progetto:
- le differenze sono molto soggettive. Di base,</para>
-
- <itemizedlist>
- <listitem>
- <para>FreeBSD punta alle alte prestazioni e alla facilità d'uso
- per l'utente finale, ed è molto usato dai fornitori di
- contenuti web. Funziona su diverse piattaforme, inclusi i sistemi
- basati su i386 (<quote>PC</quote>), i sistemi basati sui processori
- AMD a 64-bit, i sistemi basati su &ultrasparc;, i sistemi basati su
- processori Alpha della Compaq e i sistemi basati sulle specifiche
- NEC PC-98. Il progetto FreeBSD ha nettamente più utenti degli
- altri.</para>
- </listitem>
-
- <listitem>
- <para>NetBSD punta alla massima portabilità: <quote>of course
- it runs NetBSD</quote>, ovviamente ci gira NetBSD.
- Funziona su macchine che vanno dai palmtop ai grossi
- server, ed è anche stato usato dalla NASA in alcune missioni
- spaziali. È una scelta particolarmente buona per il vecchio
- hardware non Intel.</para>
- </listitem>
-
- <listitem>
- <para>OpenBSD punta alla sicurezza e alla purezza del codice: usa una
- combinazione dei concetti open source e un rigoroso controllo
- del codice per creare un sistema la cui correttezza sia
- dimostrabile, rendendolo la scelta di organizzazioni attente alla
- sicurezza come banche, borse e dipartimenti del governo
- statunitense.
- Come NetBSD, funziona su un gran numero di piattaforme.</para>
- </listitem>
-
- <listitem>
- <para>DragonFlyBSD punta ad alte prestazioni e scalabilità sotto
- qualsiasi sistema dal singolo sistema mono-processore al sistema
- massicciamente clasterizzato. DragonFlyBSD ha diversi obbiettivi a
- lungo termine, anche se è concentrato nel fornire un'infrastruttura
- SMP facile da capire, mantenere e sviluppare.</para>
- </listitem>
- </itemizedlist>
-
- <para>Ci sono anche altri due sistemi operativi BSD che non sono open
- source, BSD/OS e il &macos; X della Apple:</para>
-
- <itemizedlist>
- <listitem>
- <para>BSD/OS fu il pù antico dei derivati di 4.4BSD.
- Non fu open source, anche se le licenze per il codice sorgente
- erano disponibili ad un costo relativamente basso.
- Per molti aspetti assomiglia a FreeBSD. Due anni dopo
- l'acquisizione di BSDi da parte di Wind River Systems,
- BSD/OS non riuscii a sopravvivere come prodotto indipendete.
- Supporto e codice sorgente sono ancora disponibili da Wind River,
- anche se tutto il nuovo sviluppo è concentrato sul
- sistema operativo embedded VxWorks.</para>
- </listitem>
-
- <listitem>
- <para><link xlink:href="http://www.apple.com/macosx/server/">&macos;
- X</link> è l'ultima versione del sistema operativo per
- la linea &macintosh; della <link xlink:href="http://www.apple.com/">Apple
- Computer Inc.</link>. L'anima BSD &unix; di questo sistema
- operativo, <link xlink:href="http://developer.apple.com/darwin/">Darwin</link>, è
- disponibile come un sistema operativo open source completamente
- funzionante per computer x86 e PPC. Il sistema grafico Aqua/Quartz
- e molti altri aspetti proprietari di &macos; X rimangono comunque
- closed source. Numerosi sviluppatori di Darwin sono anche
- committer di FreeBSD, e viceversa.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2>
- <title>Come differisce la licenza BSD dalla GNU Public?</title>
-
- <para>Linux è disponibile con licenza <link xlink:href="http://www.fsf.org/copyleft/gpl.html">GNU General Public
- License</link> (GPL), che è pensata per eliminare il software
- closed source. In particolare, ogni lavoro derivante da un prodotto
- rilasciato sotto GPL deve essere fornito anche con il codice sorgente,
- se richiesto. Al contrario, la <link xlink:href="http://www.opensource.org/licenses/bsd-license.html">licenza
- BSD</link> è meno restrittiva: le distribuzioni dei soli
- binari sono permesse. Ciò è particolarmente attraente per
- le applicazioni embedded.</para>
- </sect2>
-
- <sect2>
- <title>Cos'altro dovrei sapere?</title>
-
- <para>Poiché sono disponibili meno applicazioni per BSD che per
- Linux, gli sviluppatori BSD hanno creato un pacchetto di
- compatibilità con Linux, che permette ai programmi per Linux di
- funzionare su BSD. Il pacchetto include sia modifiche al kernel, in
- modo da permettere l'esecuzione corretta di chiamate di sistema
- Linux, che file di compatibilità, come la libreria C. Non
- c'è una differenza notevole nella velocità di esecuzione
- tra una applicazione in esecuzione su una macchina Linux ed una
- applicazione in esecuzione su una macchina BSD con pari
- caratteristiche.</para>
-
- <para>La natura <quote>tutto da una sola fonte</quote> di BSD fa sì
- che gli aggiornamenti siano molto più semplici da gestire
- rispetto alla maggior parte dei casi in Linux. BSD gestisce gli
- aggiornamenti della versione di libreria fornendo moduli di
- compatibilità per le versioni precedenti, dunque è
- possibile eseguire binari di parecchi anni prima senza problemi.</para>
- </sect2>
-
- <sect2>
- <title>Cosa dovrei usare, BSD o Linux?</title>
-
- <para>Cosa significa tutto questo in pratica? Chi dovrebbe usare BSD, chi
- dovrebbe usare Linux?</para>
-
- <para>Questa è una domanda molto difficile a cui rispondere. Qui
- ci sono alcune linee guida:</para>
-
- <itemizedlist>
- <listitem>
- <para><quote>Se non è rotto, non aggiustarlo</quote>: se usi
- già un sistema operativo open source, e ne sei soddisfatto,
- probabilmente non c'è ragione di cambiare.</para>
- </listitem>
-
- <listitem>
- <para>I sistemi BSD, in particolare FreeBSD, possono avere prestazioni
- notevolmente migliori di Linux. Ma questo non avviene in tutti i
- campi. In molti casi, c'è una differenza minima nelle
- prestazioni. In alcuni casi, Linux può comportarsi meglio di
- FreeBSD.</para>
- </listitem>
-
- <listitem>
- <para>In generale, i sistemi BSD hanno una reputazione migliore di
- affidabilità, principalmente come risultato di una base di
- codice più maturo.</para>
- </listitem>
-
- <listitem>
- <para>I progetti BSD hanno una reputazione migliore per quanto
- concerne qualità e completezza della loro documentazione.
- I diversi progetti di documentazione mirano a fornire attivamente
- documentazione aggiornata, in molte lingue, e coprendo tutti
- gli aspetti del sistema.</para>
- </listitem>
-
- <listitem>
- <para>La licenza BSD può essere più attraente della
- GPL.</para>
- </listitem>
-
- <listitem>
- <para>BSD può eseguire la maggior parte dei binari Linux,
- mentre Linux non può eseguire i binari BSD. Molte
- implementazioni di BSD possono anche eseguire i binari di altri
- sistemi di tipo &unix;. Come risultato, BSD può
- rappresentare un percorso di migrazione più semplice da
- altri sistemi rispetto a Linux.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2>
- <title>Chi fornisce supporto, servizi, e training su BSD?</title>
-
- <para>BSDi / <link xlink:href="http://www.freebsdmall.com">FreeBSD
- Mall, Inc.</link> forniscono contratti di supporto per
- FreeBSD da quasi un decennio.</para>
-
- <para>Inoltre, ognuno dei progetti ha una lista di consulenti a pagamento:
- <link xlink:href="&url.base;/commercial/consult_bycat.html">FreeBSD</link>,
- <link xlink:href="http://www.netbsd.org/gallery/consultants.html">NetBSD</link>,
- e <link xlink:href="http://www.openbsd.org/support.html">OpenBSD</link>.</para>
- </sect2>
- </sect1>
-</article>
diff --git a/it_IT.ISO8859-15/articles/filtering-bridges/Makefile b/it_IT.ISO8859-15/articles/filtering-bridges/Makefile
deleted file mode 100644
index 25cdb8103e..0000000000
--- a/it_IT.ISO8859-15/articles/filtering-bridges/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-# Articolo: Filtering Bridges
-
-DOC?= article
-
-FORMATS?= html
-
-INSTALL_COMPRESSED?=gz
-INSTALL_ONLY_COMPRESSED?=
-
-SRCS= article.xml
-
-URL_RELPREFIX?= ../../../..
-DOC_PREFIX?= ${.CURDIR}/../../..
-
-.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/it_IT.ISO8859-15/articles/filtering-bridges/article.xml b/it_IT.ISO8859-15/articles/filtering-bridges/article.xml
deleted file mode 100644
index 3d15c380c4..0000000000
--- a/it_IT.ISO8859-15/articles/filtering-bridges/article.xml
+++ /dev/null
@@ -1,429 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-15"?>
-<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
- "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
-<!--
- The FreeBSD Italian Documentation Project
-
- $FreeBSD$
- Original revision: 1.21
--->
-<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="it">
- <info><title>Filtering Bridges</title>
-
-
- <authorgroup>
- <author><personname><firstname>Alex</firstname><surname>Dupre</surname></personname><affiliation>
- <address><email>ale@FreeBSD.org</email></address>
- </affiliation></author>
- </authorgroup>
-
- <legalnotice xml:id="trademarks" role="trademarks">
- &tm-attrib.freebsd;
- &tm-attrib.3com;
- &tm-attrib.intel;
- &tm-attrib.general;
- </legalnotice>
-
- <pubdate>$FreeBSD$</pubdate>
-
- <releaseinfo>$FreeBSD$</releaseinfo>
-
- <abstract>
- <para>Spesso è utile dividere una rete fisica (come una Ethernet)
- in due segmenti separati, senza dover creare sottoreti e usare un router
- per collegarli assieme. Il dispositivo che collega due reti insieme in
- questo modo è chiamato bridge. Un sistema FreeBSD con due
- interfacce di rete è sufficiente per raggiungere lo scopo.</para>
-
- <para>Un bridge funziona individuando gli indirizzi del livello
- <acronym>MAC</acronym> (indirizzi Ethernet) dei dispositivi collegati ad
- ognuna delle sue interfacce di rete e inoltrando il traffico tra le due
- reti solo se il mittente e il destinatario si trovano su segmenti
- differenti. Sotto molti punti di vista un brigde è simile a uno
- switch Ethernet con solo due porte.</para>
- </abstract>
- </info>
-
- <sect1 xml:id="filtering-bridges-why">
- <title>Perché usare un filtering bridge?</title>
-
- <para>Sempre più frequentemente, grazie all'abbassamento dei costi
- delle connessioni a banda larga (xDSL) e a causa della riduzione del
- numero di indirizzi IPv4 disponibili, molte società si ritrovano
- collegate ad Internet 24 ore su 24 e con un numero esiguo (a volte nemmeno
- una potenza di 2) di indirizzi IP. In situazioni come queste spesso
- è desiderabile avere un firewall che regoli i permessi di ingresso
- e uscita per il traffico da e verso Internet, ma una soluzione basata
- sulle funzionalità di packet filtering dei router può non
- essere applicabile, vuoi per problemi di suddivisione delle sottoreti,
- vuoi perché il router è di proprietà del fornitore di
- accesso (<acronym>ISP</acronym>), vuoi perché il router non
- supporta tali funzionalità. È in questi casi che l'utilizzo
- di un filtering bridge diventa altamente consigliato.</para>
-
- <para>Un firewall basato su bridge può essere configurato e inserito
- direttamente tra il router xDSL e il vostro hub/switch Ethernet senza
- alcun problema di assegnazione di indirizzi IP.</para>
-
- <note>
- <para>La traduzione italiana di <quote>firewall</quote> è
- <quote>muro anti incendio</quote>, <emphasis>non</emphasis>
- <quote>muro di fuoco</quote> come molti pensano. Nel corso
- dell'articolo, comunque, manterrò i termini tecnici nella loro
- lingua originale in modo da non creare confusione o
- ambiguità.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="filtering-bridges-how">
- <title>Metodi d'installazione</title>
-
- <para>Aggiungere le funzionalità di bridge a una macchina FreeBSD non
- è difficile. Dalla release 4.5 è possibile caricare tali
- funzionalità come moduli anziché dover ricompilare il
- kernel, semplificando di gran lunga la procedura. Nelle prossime
- sottosezioni spiegherò entrambi i metodi di installazione.</para>
-
- <important>
- <para><emphasis>Non</emphasis> seguite entrambe le istruzioni: le
- procedure sono <emphasis>a esclusione</emphasis>. Scegliete
- l'alternativa che meglio si adatta alle vostre esigenze e
- capacità.</para>
- </important>
-
- <para>Prima di continuare è necessario assicurarsi di avere almeno
- due schede di rete Ethernet che supportino la modalità promiscua
- sia in ricezione che in trasmissione, difatti devono essere in grado di
- inviare pacchetti Ethernet con qualunque indirizzo, non solo il loro.
- Inoltre, per avere un buon rendimento, le schede dovrebbero essere di
- tipo PCI bus mastering. Le scelte migliori sono ancora le Intel
- &etherexpress; Pro seguite dalle &tm.3com; 3c9xx subito dopo. Per
- comodità nella configurazione del firewall può essere
- utile avere due schede di marche differenti (che usino drivers
- differenti) in modo da distinguere chiaramente quale interfaccia sia
- collegata al router e quale alla rete interna.</para>
-
- <sect2 xml:id="filtering-bridges-kernel">
- <title>Configurazione del Kernel</title>
-
- <para>Così avete deciso di utilizzare il più vecchio e
- collaudato metodo di installazione. Per prima cosa bisogna
- aggiungere le seguenti righe al file di configurazione del
- kernel:</para>
-
- <programlisting>options BRIDGE
-options IPFIREWALL
-options IPFIREWALL_VERBOSE</programlisting>
-
- <para>La prima riga serve a compilare il supporto per il bridge, la
- seconda il firewall e la terza le funzioni di logging del firewall.
- </para>
-
- <para>Adesso è necessario compilare e installare il nuovo kernel.
- Si possono trovare le istruzioni nella sezione <link xlink:href="&url.books.handbook;/kernelconfig-building.html">
- Building and Installing a Custom Kernel</link> dell'handbook.</para>
- </sect2>
-
- <sect2 xml:id="filtering-bridges-modules">
- <title>Caricamento dei Moduli</title>
-
- <para>Se avete deciso di usare il nuovo e più semplice metodo di
- installazione, l'unica cosa da fare è aggiungere la seguente riga
- al file <filename>/boot/loader.conf</filename>:</para>
-
- <programlisting>bridge_load="YES"</programlisting>
-
- <para>In questo modo all'avvio della macchina verrà caricato
- insieme al kernel anche il modulo <filename>bridge.ko</filename>. Non
- è necessario invece aggiungere una riga per il modulo
- <filename>ipfw.ko</filename> in quanto verrà caricato in
- automatico dallo script <filename>/etc/rc.network</filename> dopo aver
- seguito i passi della prossima sezione.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="filtering-bridges-finalprep">
- <title>Preparativi finali</title>
-
- <para>Prima di riavviare per caricare il nuovo kernel o i moduli richiesti
- (a seconda del metodo che avete scelto in precedenza), bisogna effettuare
- alcune modifiche al file <filename>/etc/rc.conf</filename>. La regola di
- default del firewall è di rifiutare tutti i pacchetti IP. Per
- iniziare attiviamo il firewall in modalità <option>open</option>,
- in modo da verificare il suo funzionamento senza alcun problema di
- filtraggio pacchetti (nel caso stiate eseguendo questa procedura da
- remoto, tale accorgimento vi consentirà di non rimanere
- erroneamente tagliati fuori dalla rete).
- Inserite queste linee nel file <filename>/etc/rc.conf</filename>:</para>
-
- <programlisting>firewall_enable="YES"
-firewall_type="open"
-firewall_quiet="YES"
-firewall_logging="YES"</programlisting>
-
- <para>La prima riga serve ad attivare il firewall (e a caricare il modulo
- <filename>ipfw.ko</filename> nel caso non fosse già compilato nel
- kernel), la seconda a impostarlo in modalità
- <option>open</option> (come descritto nel file
- <filename>/etc/rc.firewall</filename>), la terza a non
- visualizzare il caricamento delle regole e la quarta ad abilitare il
- supporto per il logging.</para>
-
- <para>Per quanto riguarda la configurazione delle interfacce di rete, il
- metodo più utilizzato è quello di assegnare un IP a solo una
- delle schede di rete, ma il bridge funziona egualmente anche se entrambe o
- nessuna delle interfacce ha IP settati. In quest'ultimo caso (IP-less) la
- macchina bridge sarà ancora più nascosta in quanto
- inaccessibile dalla rete: per configurarla occorrerà quindi entrare
- da console o tramite una terza interfaccia di rete separata dal bridge. A
- volte all'avvio della macchina qualche programma richiede di accedere alla
- rete, per esempio per una risoluzione di dominio: in questo caso è
- necessario assegnare un IP all'interfaccia esterna (quella collegata a
- Internet, dove risiede il server <acronym>DNS</acronym>), visto che il
- bridge verrà attivato alla fine della procedura di avvio. Questo
- vuol dire che l'interfaccia <filename>fxp0</filename> (nel nostro
- caso) deve essere menzionata nella sezione ifconfig del file
- <filename>/etc/rc.conf</filename>, mentre la <filename>xl0</filename>
- no. Assegnare IP a entrambe le schede di rete non ha molto senso, a meno
- che durante la procedura di avvio non si debba accedere a servizi presenti
- su entrambi i segmenti Ethernet.</para>
-
- <para>C'è un'altra cosa importante da sapere. Quando si utilizza IP
- sopra Ethernet ci sono due protocolli Ethernet in uso: uno è IP,
- l'altro è <acronym>ARP</acronym>. <acronym>ARP</acronym> permette
- la conversione dell'indirizzo IP di una macchina nel suo indirizzo
- Ethernet (livello <acronym>MAC</acronym>). Affinché due macchine
- separate dal bridge riescano a comunicare tra loro è necessario che
- il bridge lasci passare i pacchetti <acronym>ARP</acronym>. Tale
- protocollo non fa parte del livello IP, visto che è presente solo
- con IP sopra Ethernet. Il firewall di FreeBSD agisce esclusivamente sul
- livello IP e quindi tutti i pacchetti non IP (compreso
- <acronym>ARP</acronym>) verranno inoltrati senza essere filtrati, anche se
- il firewall è configurato per non lasciar passare nulla.</para>
-
- <para>Ora è arrivato il momento di riavviare la macchina e usarla
- come in precedenza: appariranno dei nuovi messaggi riguardo al bridge e al
- firewall, ma il bridge non sarà attivato e il firewall, essendo in
- modalità <option>open</option>, non impedirà nessuna
- operazione.</para>
-
- <para>Se ci dovessero essere dei problemi, è il caso di scoprire ora
- da cosa derivino e risolverli prima di continuare.</para>
- </sect1>
-
- <sect1 xml:id="filtering-bridges-enabling">
- <title>Attivazione del Bridge</title>
-
- <para>A questo punto, per attivare il bridge, bisogna eseguire i seguenti
- comandi (avendo l'accortezza di sostituire i nomi delle due interfacce di
- rete <filename>fxp0</filename> e <filename>xl0</filename> con i
- propri):</para>
-
- <screen>&prompt.root; <userinput>sysctl net.link.ether.bridge.config=fxp0:0,xl0:0</userinput>
-&prompt.root; <userinput>sysctl net.link.ether.bridge.ipfw=1</userinput>
-&prompt.root; <userinput>sysctl net.link.ether.bridge.enable=1</userinput></screen>
-
- <para>La prima riga specifica tra quali interfacce va attivato il bridge,
- la seconda abilita il firewall sul bridge ed infine la terza attiva il
- bridge.</para>
-
- <note>
- <para>Se hai &os;&nbsp;5.1-RELEASE o precedenti le variabili sysctl
- sono chiamate in modo differente. Guarda &man.bridge.4; per i
- dettagli.</para>
- </note>
-
- <para>A questo punto dovrebbe essere possibile inserire la macchina tra
- due gruppi di host senza che venga compromessa qualsiasi
- possibilità di comunicazione tra di loro. Se è così,
- il prossimo passo è quello di aggiungere le parti
- <literal>net.link.ether.bridge.[blah]=[blah]</literal>
- di queste righe al file <filename>/etc/sysctl.conf</filename>, in modo che
- vengano eseguite all'avvio della macchina.</para>
- </sect1>
-
- <sect1 xml:id="filtering-bridges-ipfirewall">
- <title>Configurazione del Firewall</title>
-
- <para>Ora è arrivato il momento di creare il proprio file con le
- regole per il firewall, in modo da rendere sicura la rete interna.
- Ci sono delle complicazioni nel fare questo, perché non tutte le
- funzionalità del firewall sono disponibili sui pacchetti inoltrati
- dal bridge. Inoltre, c'è una differenza tra i pacchetti che stanno
- per essere inoltrati dal bridge e quelli indirizzati alla macchina locale.
- In generale, i pacchetti che entrano nel bridge vengono processati dal
- firewall solo una volta, non due come al solito; infatti vengono filtrati
- solo in ingresso, quindi qualsiasi regola che usi <option>out</option>
- oppure <option>xmit</option> non verrà mai eseguita. Personalmente
- uso <option>in via</option> che è una sintassi più antica,
- ma che ha un senso quando la si legge.
- Un'altra limitazione è che si possono usare solo i comandi
- <option>pass</option> e <option>drop</option> per i pacchetti filtrati
- dal bridge. Cose avanzate come <option>divert</option>,
- <option>forward</option> o <option>reject</option> non sono disponibili.
- Queste opzioni possono ancora essere usate, ma solo per il traffico da
- e verso la macchina bridge stessa (sempre che le sia stato assegnato
- un IP).</para>
-
- <para>Nuovo in FreeBSD 4.0 è il concetto di stateful filtering.
- Questo è un grande miglioramento per il traffico
- <acronym>UDP</acronym>, che consiste tipicamente di una richiesta in
- uscita, seguita a breve termine da una risposta con la stessa coppia di
- indirizzi IP e numeri di porta (ma con mittente e destinatario invertiti,
- ovviamente). Per i firewall che non supportano il mantenimento di stato,
- non c'è modo di gestire questo breve scambio di dati come una
- sessione unica. Ma con un firewall che può
- <quote>ricordarsi</quote> di un pacchetto <acronym>UDP</acronym> in
- uscita e permette una risposta nei minuti successivi, gestire i
- servizi <acronym>UDP</acronym> è semplice.
- L'esempio seguente mostra come fare. La stessa cosa è
- possibile farla con i pacchetti <acronym>TCP</acronym>. Questo
- permette di evitare qualche tipo di attacco denial of service e altri
- sporchi trucchi, ma tipicamente fa anche crescere velocemente la
- tabella di stato.</para>
-
- <para>Vediamo un esempio di configurazione. Bisogna notare che all'inizio
- del file <filename>/etc/rc.firewall</filename> ci sono già delle
- regole standard per l'interfaccia di loopback
- <filename>lo0</filename>, quindi non ce ne occuperemo più ora.
- Le regole personalizzate andrebbero messe in un file a parte (per esempio
- <filename>/etc/rc.firewall.local</filename>) e caricate all'avvio
- modificando la riga del file <filename>/etc/rc.conf</filename> dove era
- stata definita la modalità <option>open</option> con:</para>
-
- <programlisting>firewall_type="/etc/rc.firewall.local"</programlisting>
-
- <important>
- <para>Bisogna specificare il path <emphasis>completo</emphasis>
- del file, altrimenti non verrà caricato con il rischio di
- rimanere tagliati fuori dalla rete.</para>
- </important>
-
- <para>Per il nostro esempio immaginiamo di avere l'interfaccia
- <filename>fxp0</filename> collegata all'esterno (Internet) e la
- <filename>xl0</filename> verso l'interno (<acronym>LAN</acronym>).
- La macchina bridge ha assegnato l'IP
- <systemitem class="ipaddress">1.2.3.4</systemitem>
- (è impossibile che il vostro <acronym>ISP</acronym> vi assegni un
- indirizzo simile a questo, ma per l'esempio va bene).</para>
-
- <programlisting># Le connessioni di cui abbiamo mantenuto lo stato vengono fatte passare subito
-add check-state
-
-# Esclude le reti locali definite nell'RFC 1918
-add drop all from 10.0.0.0/8 to any in via fxp0
-add drop all from 172.16.0.0/12 to any in via fxp0
-add drop all from 192.168.0.0/16 to any in via fxp0
-
-# Permette alla macchina bridge di connettersi con chi vuole
-# (se la macchina è IP-less non includere questi comandi)
-add pass tcp from 1.2.3.4 to any setup keep-state
-add pass udp from 1.2.3.4 to any keep-state
-add pass ip from 1.2.3.4 to any
-
-# Permette agli host della rete interna di connettersi con chi vogliono
-add pass tcp from any to any in via xl0 setup keep-state
-add pass udp from any to any in via xl0 keep-state
-add pass ip from any to any in via xl0
-
-# Sezione TCP
-# Permette SSH
-add pass tcp from any to any 22 in via fxp0 setup keep-state
-# Permette SMTP solo verso il mail server
-add pass tcp from any to relay 25 in via fxp0 setup keep-state
-# Permette i trasferimenti di zona solo dal name server secondario [dns2.nic.it]
-add pass tcp from 193.205.245.8 to ns 53 in via fxp0 setup keep-state
-# Lascia passare i controlli ident:
-# è meglio che aspettare che vadano in timeout
-add pass tcp from any to any 113 in via fxp0 setup keep-state
-# Permette connessioni nel range di "quarantena".
-add pass tcp from any to any 49152-65535 in via fxp0 setup keep-state
-
-# Sezione UDP
-# Permette DNS solo verso il name server
-add pass udp from any to ns 53 in via fxp0 keep-state
-# Permette connessioni nel range di "quarantena".
-add pass udp from any to any 49152-65535 in via fxp0 keep-state
-
-# Sezione ICMP
-# Abilita le funzioni di 'ping'
-add pass icmp from any to any icmptypes 8 keep-state
-# Permette il passaggio dei messaggi di errori del comando 'traceroute'
-add pass icmp from any to any icmptypes 3
-add pass icmp from any to any icmptypes 11
-
-# Tutto il resto è sospetto
-add drop log all from any to any</programlisting>
-
- <para>Coloro che hanno configurato un firewall in precedenza potrebbero aver
- notato che manca qualcosa. In particolare, non ci sono regole contro lo
- spoofing, difatti <emphasis>non</emphasis> abbiamo aggiunto:</para>
-
- <programlisting>add deny all from 1.2.3.4/8 to any in via fxp0</programlisting>
-
- <para>Ovvero, non far entrare dall'esterno pacchetti che affermano di venire
- dalla rete interna. Questa è una cosa che solitamente viene fatta
- per essere sicuri che qualcuno non provi a eludere il packet filter,
- generando falsi pacchetti che sembrano venire dall'interno. Il problema
- è che c'è <emphasis>almeno</emphasis> un host
- sull'interfaccia esterna che non si può ignorare: il router.
- Solitamente, però, gli <acronym>ISP</acronym> eseguono il controllo
- anti-spoof sui loro router e quindi non ce ne dobbiamo preoccupare.</para>
-
- <para>L'ultima riga sembra un duplicato della regola di default, ovvero non
- far passare nulla che non sia stato specificatamente permesso. In
- verità c'è una differenza: tutto il traffico sospetto
- verrà loggato.</para>
-
- <para>Ci sono due regole per permettere il traffico <acronym>SMTP</acronym>
- e <acronym>DNS</acronym> verso il mail server e il name server, se ne
- avete. Ovviamente l'intero set di regole deve essere personalizzato
- per le proprie esigenze, questo non è altro che uno specifico
- esempio (il formato delle regole è spiegato dettagliatamente nella
- man page &man.ipfw.8;). Bisogna notare che, affinché
- <quote>relay</quote> e <quote>ns</quote>
- siano interpretati correttamente, la risoluzione dei nomi deve funzionare
- <emphasis>prima</emphasis> che il bridge sia attivato. Questo è un
- chiaro esempio che dimostra l'importanza di settare l'IP sulla corretta
- scheda di rete. In alternativa è possibile specificare
- direttamente l'indirizzo IP anziché il nome host (cosa necessaria
- se la macchina è IP-less).</para>
-
- <para>Le persone che sono solite configurare un firewall probabilmente
- avranno sempre usato una regola <option>reset</option> o
- <option>forward</option> per i pacchetti
- ident (porta 113 <acronym>TCP</acronym>). Sfortunatamente, questa non
- è una scelta applicabile con il bridge, quindi la cosa migliore
- è lasciarli passare fino alla destinazione. Finché la
- macchina di destinazione non ha un demone ident attivo, questa tecnica
- è relativamente sicura. L'alternativa è proibire le
- connessioni sulla porta 113, creando qualche problema con servizi tipo
- <acronym>IRC</acronym> (le richieste ident devono andare in
- timeout).</para>
-
- <para>L'unica altra cosa un po' particolare che potete aver notato è
- che c'è una regola per lasciar comunicare la macchina bridge e
- un'altra per gli host della rete interna. Ricordate che questo è
- dovuto al fatto che i due tipi di traffico prendono percorsi differenti
- attraverso il kernel e di conseguenza anche dentro il packet filter. La
- rete interna passerà attraverso il bridge, mentre la macchina
- locale userà il normale stack IP per le connessioni. Perciò
- due regole per gestire due casi differenti. Le regole <literal>in via
- fxp0</literal> funzionano in entrambi i casi.
- In generale, se usate regole <option>in via</option> attraverso il
- packet filter, dovrete fare un'eccezione per i pacchetti generati
- localmente, in quanto non entrano tramite nessuna interfaccia.</para>
- </sect1>
-
- <sect1 xml:id="filtering-bridges-contributors">
- <title>Contributi</title>
-
- <para>Alcune parti di questo articolo sono state prese, tradotte e
- adattate da testi sui bridge, appartenenti alla documentazione di FreeBSD
- in lingua inglese, a cura di Nick Sayer e Steve Peterson.</para>
-
- <para>Un grosso ringraziamento va a Luigi Rizzo per l'implementazione
- delle funzionalità di bridging in FreeBSD e per il tempo che mi ha
- dedicato rispondendo ad alcune mie domande a riguardo.</para>
- </sect1>
-</article>
diff --git a/it_IT.ISO8859-15/articles/new-users/Makefile b/it_IT.ISO8859-15/articles/new-users/Makefile
deleted file mode 100644
index 9254148082..0000000000
--- a/it_IT.ISO8859-15/articles/new-users/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# $FreeBSD$
-#
-# Articolo: Per chi e' alle Prime Armi sia con FreeBSD che con Unix
-
-DOC?= article
-
-FORMATS?= html
-
-INSTALL_COMPRESSED?=gz
-INSTALL_ONLY_COMPRESSED?=
-
-SRCS= article.xml
-
-URL_RELPREFIX?= ../../../..
-DOC_PREFIX?= ${.CURDIR}/../../..
-
-.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/it_IT.ISO8859-15/articles/new-users/article.xml b/it_IT.ISO8859-15/articles/new-users/article.xml
deleted file mode 100644
index 35a3de90cb..0000000000
--- a/it_IT.ISO8859-15/articles/new-users/article.xml
+++ /dev/null
@@ -1,1073 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-15"?>
-<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
- "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
-<!--
- The FreeBSD Italian Documentation Project
-
- $FreeBSD$
- Original revision: 1.48
--->
-<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="it">
- <info><title>Per chi è alle Prime Armi sia con FreeBSD che con
- &unix;</title>
-
-
- <authorgroup>
- <author><personname><firstname>Annelise</firstname><surname>Anderson</surname></personname><affiliation>
- <address><email>andrsn@andrsn.stanford.edu</email></address>
- </affiliation></author>
- </authorgroup>
-
- <pubdate>15 Agosto 1997</pubdate>
-
- <legalnotice xml:id="trademarks" role="trademarks">
- &tm-attrib.freebsd;
- &tm-attrib.ibm;
- &tm-attrib.microsoft;
- &tm-attrib.netscape;
- &tm-attrib.opengroup;
- &tm-attrib.general;
- </legalnotice>
-
- <releaseinfo>$FreeBSD$</releaseinfo>
-
- <abstract>
- <para>Congratulazioni per aver installato FreeBSD! Questa introduzione
- é per chi é alle prime armi con FreeBSD
- <emphasis>e</emphasis> &unix;&mdash;perciò comincia dalle basi.
- Stai certamente usando la versione 2.0.5 o una più recente di
- &os; distribuita da &os;.org, il tuo sistema ha (per il momento) un
- solo utente (te stesso)&mdash;e sei probabilmente abbastanza bravo
- con DOS/&windows; o &os2;.</para>
-
- &trans.it.max;
- </abstract>
- </info>
-
- <sect1>
- <title>Entrare ed Uscire dal Sistema</title>
-
- <para>Entra (quando vedi <prompt>login:</prompt>) come l'utente che
- hai creato durante l'installazione oppure come
- <systemitem class="username">root</systemitem>. (La tua installazione di FreeBSD dovrebbe
- già avere un account di <systemitem class="username">root</systemitem>; che può
- andare ovunque e fare qualsiasi cosa, anche cancellare file essenziali,
- perciò stai attento!) I simboli &prompt.user; e &prompt.root;
- che incontrerai più avanti simboleggiano il prompt (i tuoi
- potrebbero essere differenti), dove &prompt.user; indica un utente
- ordinario e &prompt.root; indica <systemitem class="username">root</systemitem>.</para>
-
- <para>Per uscire (e ritrovarsi con un nuovo prompt <prompt>login:</prompt>)
- scrivi</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>exit</userinput></screen>
- </informalexample>
-
- <para>tante volte quanto serve. Sì, premi
- <keysym>invio</keysym> dopo ogni comando, e ricordati che &unix; fa
- distinzione tra maiuscole e minuscole&mdash;perciò
- <command>exit</command>, non <command>EXIT</command>.</para>
-
- <para>Per spegnere il computer digita</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>/sbin/shutdown -h now</userinput></screen>
- </informalexample>
-
- <para>O per riavviarlo digita</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>/sbin/shutdown -r now</userinput></screen>
- </informalexample>
-
- <para>oppure</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>/sbin/reboot</userinput></screen>
- </informalexample>
-
- <para>Puoi anche riavviarlo premendo
- <keycombo><keycap>Ctrl</keycap><keycap>Alt</keycap><keycap>Canc</keycap></keycombo>.
- Lasciagli un po' di tempo per compiere il suo lavoro. Questo equivale a
- <command>/sbin/reboot</command> nelle versioni più recenti di
- FreeBSD ed è molto meglio che premere il bottone di reset.
- Non vorrai mica reinstallare tutto da capo, vero?</para>
- </sect1>
-
- <sect1>
- <title>Aggiungere un Utente con Privilegi di Root</title>
-
- <para>Se non hai creato un utente durante l'installazione e quindi
- sei entrato nel sistema come <systemitem class="username">root</systemitem>, dovresti
- probabilmente crearne uno ora tramite</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>adduser</userinput></screen>
- </informalexample>
-
- <para>La prima volta che aggiungi un utente, il sistema dovrebbe chiederti
- di inserire delle impostazioni di default da applicare. Potresti volere
- come shell &man.csh.1; invece di &man.sh.1;, se ti viene consigliato
- <command>sh</command> come default. Altrimenti premi solo invio
- per accettare i valori proposti. Questi dati vengono salvati in
- <filename>/etc/adduser.conf</filename>, un file modificabile
- successivamente a mano.</para>
-
- <para>Supponiamo che tu voglia creare l'utente <systemitem class="username">jack</systemitem> di
- nome reale <emphasis>Jack Benimble</emphasis>. Assegna a
- <systemitem class="username">jack</systemitem> una password per ragioni di sicurezza (anche i
- bambini che gironzolano per casa potrebbero mettere le mani sulla
- tastiera). Quando ti viene chiesto se vuoi invitare
- <systemitem class="username">jack</systemitem> in un altro gruppo, digita
- <systemitem class="groupname">wheel</systemitem></para>
-
- <informalexample>
- <screen>Login group is ``jack''. Invite jack into other groups: <userinput>wheel</userinput></screen>
- </informalexample>
-
- <para>Questo ti permetterà di entrare come l'utente
- <systemitem class="username">jack</systemitem> e usare il comando &man.su.1;
- per diventare <systemitem class="username">root</systemitem>. A quel punto non sarai
- più preso in giro per essere entrato direttamente come
- <systemitem class="username">root</systemitem>.</para>
-
- <para>Puoi uscire da <command>adduser</command> in qualsiasi momento
- premendo <keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo>,
- e alla fine avrai l'opportunità di approvare il nuovo utente oppure
- premere <keycap>n</keycap> per non farlo. Potresti voler creare un
- secondo utente cosicché quando andrai a modificare i file
- di <systemitem class="username">jack</systemitem> avrai un'ancora di salvezza in caso qualcosa
- vada male.</para>
-
- <para>Una volta fatto questo, usa <command>exit</command> per tornare al
- prompt di login ed entrare come <systemitem class="username">jack</systemitem>.
- In generale è meglio cercare di lavorare da utente normale
- in modo da non avere il potere&mdash;e il rischio&mdash;di
- <systemitem class="username">root</systemitem>.</para>
-
- <para>Se hai già creato un utente e vuoi che quell'utente sia in
- grado di usare <command>su</command> per diventare
- <systemitem class="username">root</systemitem>, puoi entrare come <systemitem class="username">root</systemitem> e
- modificare il file <filename>/etc/group</filename>, aggiungendo
- <systemitem class="username">jack</systemitem> alla prima linea (il gruppo
- <systemitem class="groupname">wheel</systemitem>). Ma prima devi fare pratica con
- &man.vi.1;, l'editor di testo&mdash;oppure usa il più semplice
- &man.ee.1;, installato sulle recenti versioni di FreeBSD.</para>
-
- <para>Per cancellare un utente, usa il comando
- <command>rmuser</command>.</para>
- </sect1>
-
- <sect1>
- <title>Diamoci un'occhiata in giro</title>
-
- <para>Una volta avuto accesso come utente normale, guardati in giro e prova
- alcuni dei comandi che ti daranno accesso alle fonti di aiuto e di
- informazioni su FreeBSD.</para>
-
- <para>Ecco qui una lista di comandi e le loro funzioni:</para>
-
- <variablelist>
- <varlistentry>
- <term><command>id</command></term>
-
- <listitem>
- <para>Ti dice chi sei!</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>pwd</command></term>
-
- <listitem>
- <para>Ti mostra dove sei&mdash;la directory in cui stai
- lavorando.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ls</command></term>
-
- <listitem>
- <para>Ti mostra una lista dei file contenuti nella directory.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ls -F</command></term>
-
- <listitem>
- <para>Ti mostra un elenco dei file contenuti nella directory ponendo
- <literal>*</literal> dopo i file eseguibili,
- <literal>/</literal> dopo le directory, e
- <literal>@</literal> dopo i collegamenti simbolici.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ls -l</command></term>
-
- <listitem>
- <para>Mostra un elenco di file nel formato lungo&mdash;grandezza,
- data, permessi.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ls -a</command></term>
-
- <listitem>
- <para>Mostra una lista dei file nascosti, cioè con un
- <quote>punto</quote> davanti al nome, insieme agli altri.
- Se sei <systemitem class="username">root</systemitem>, i file <quote>puntati</quote>
- vengono mostrati anche senza l'opzione <option>-a</option>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>cd</command></term>
-
- <listitem>
- <para>Cambia la directory di lavoro. <command>cd
- ..</command> torna alla directory
- superiore; nota lo spazio dopo <command>cd</command>. <command>cd
- /usr/local</command> va nella directory
- specificata. <command>cd ~</command> va
- nella directory home dell'utente collegato in quel
- momento&mdash;per esempio, <filename>/usr/home/jack</filename>.
- Prova <command>cd /cdrom</command>, e poi
- <command>ls</command>, per scoprire se il tuo CDROM è
- montato e funziona.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>view
- nomefile</command></term>
-
- <listitem>
- <para>Mostra il contenuto del file (chiamato
- <replaceable>nomefile</replaceable>) senza modificarlo.
- Prova <command>view
- /etc/fstab</command>.
- Digita <command>:q</command> per uscire.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>cat nomefile</command></term>
-
- <listitem>
- <para>Mostra <replaceable>nomefile</replaceable> sullo schermo.
- Se è troppo lungo e ne puoi vedere solo la fine,
- premi <keycap>BlocScorr</keycap> e usa
- <keycap>freccia-su</keycap> per muoverti in alto; puoi usare
- <keycap>BlocScorr</keycap> anche con le pagine man. Premi ancora
- <keycap>BlocScorr</keycap> per uscire dallo scorrimento. Potresti
- provare <command>cat</command> con alcuni dei file
- nascosti presenti nella tua directory home&mdash;<command>cat
- .cshrc</command>, <command>cat
- .login</command>, <command>cat
- .profile</command>.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>Noterai degli alias in <filename>.cshrc</filename> per
- alcuni dei comandi <command>ls</command> (sono molto
- convenienti). Puoi creare degli altri alias modificando
- <filename>.cshrc</filename>. Puoi far sì che questi alias
- diventino disponibili a tutti gli utenti mettendoli nel file
- di configurazione generale di <command>csh</command>,
- <filename>/etc/csh.cshrc</filename>.</para>
- </sect1>
-
- <sect1>
- <title>Ottenere Aiuto e Informazioni</title>
-
- <para>Ecco alcune risorse utili per ottenere aiuto.
- <replaceable>Testo</replaceable> è qualcosa che puoi
- digitare a tuo piacere&mdash;normalmente si tratta di un comando
- o del nome di un file.</para>
-
- <variablelist>
- <varlistentry>
- <term><command>apropos
- testo</command></term>
-
- <listitem>
- <para>Tutto ciò che contiene la stringa
- <replaceable>testo</replaceable> nel <database>database
- whatis</database>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>man
- testo</command></term>
-
- <listitem>
- <para>Mostra la pagina man di <replaceable>testo</replaceable>,
- la maggior risorsa di documentazione per i sistemi Un*x.
- <command>man ls</command> ti dirà
- tutti i modi possibili per usare il comando <command>ls</command>.
- Premi <keycap>Invio</keycap> per muoverti nel testo,
- <keycombo><keycap>Ctrl</keycap><keycap>B</keycap></keycombo>
- per andare indietro di una pagina,
- <keycombo><keycap>Ctrl</keycap><keycap>F</keycap></keycombo>
- per andare avanti, <keycap>q</keycap> oppure
- <keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo>
- per uscire.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>which
- testo</command></term>
-
- <listitem>
- <para>Ti dice dove si trova il comando
- <replaceable>testo</replaceable> nel path dell'utente.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>locate
- testo</command></term>
-
- <listitem>
- <para>Ti dice tutte le directory nei path dell'utente in cui si trova
- il comando <replaceable>testo</replaceable>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>whatis
- testo</command></term>
-
- <listitem>
- <para>Ti dice che cosa fa il comando
- <replaceable>testo</replaceable> e la sua pagina man.
- Digitando <command>whatis *</command> ti verranno presentate tutte
- le pagine man associate agli eseguibili presenti nella directory
- corrente.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>whereis
- testo</command></term>
-
- <listitem>
- <para>Trova il file <replaceable>testo</replaceable>, dandoti il suo
- percorso completo.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>Potresti voler provare ad usare <command>whatis</command> con
- alcuni comandi utili come <command>cat</command>,
- <command>more</command>, <command>grep</command>,
- <command>mv</command>, <command>find</command>,
- <command>tar</command>, <command>chmod</command>,
- <command>chown</command>, <command>date</command>, e
- <command>script</command>. <command>more</command> ti permette
- di leggere una pagina alla volta come in DOS, ad esempio, <command>ls -l |
- more</command> oppure <command>more
- nomefile</command>.
- <literal>*</literal> ha valore assoluto&mdash;per esempio, <command>ls
- w*</command> mostra tutti i file che cominciano con
- <literal>w</literal>.</para>
-
- <para>Per caso alcuni di questi comandi non funzionano correttamente? Sia
- &man.locate.1;, sia &man.whatis.1; dipendono da
- un database che viene ricostruito settimanalmente. Se la tua macchina
- non sarà lasciata accesa per il fine settimana (usando FreeBSD),
- può darsi che tu voglia usare i comandi per la manutenzione
- giornaliera, settimanale, e mensile ogni tanto. Falli partire come
- <systemitem class="username">root</systemitem> e lascia loro il tempo di finire il lavoro
- prima di farne partire un altro.</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>periodic daily</userinput>
-<lineannotation>output tralasciato</lineannotation>
-&prompt.root; <userinput>periodic weekly</userinput>
-<lineannotation>output tralasciato</lineannotation>
-&prompt.root; <userinput>periodic monthly</userinput>
-<lineannotation>output tralasciato</lineannotation></screen>
- </informalexample>
-
- <para>Se ti stufi di aspettare, premi
- <keycombo><keycap>Alt</keycap><keycap>F2</keycap></keycombo> per
- avere un'altra <firstterm>console virtuale</firstterm>, e poterti loggare
- nuovamente. Dopotutto è un sistema multi-utente, e multi-tasking.
- Probabilmente questi comandi produrranno dei messaggi sullo
- schermo quando lavorano; puoi digitare
- <command>clear</command> per pulire lo schermo.
- Quando hanno finito, dovresti dare un'occhiata a
- <filename>/var/mail/root</filename> e
- <filename>/var/log/messages</filename>.</para>
-
- <para>Usare tali comandi fa parte dell'amministrazione di
- sistema&mdash;e come utente singolo di un sistema &unix;,
- sei tu l'amministratore del sistema. Praticamente l'unica cosa
- per la quale è necessario che tu sia <systemitem class="username">root</systemitem>
- è l'amministrazione. Queste responsabilità non vengono
- trattate bene nemmeno in quei grossi libri su &unix;, che sembrano
- dedicare troppo spazio all'uso dei menu nei windows manager. Potresti
- voler leggere uno dei più interessanti libri sull'amministrazione
- di sistema, come <citetitle>UNIX System Administration
- Handbook</citetitle> di Evi Nemeth et.al. (Prentice-Hall, 1995,
- ISBN 0-13-15051-7)&mdash;la seconda edizione con la copertina rossa;
- oppure <citetitle>Essential System Administration</citetitle> di
- &AElig;leen Frisch (O'Reilly &amp; Associates, 2002, ISBN 0-596-00343-9).
- Io ho usato quello di Nemeth.</para>
- </sect1>
-
- <sect1>
- <title>Modificare File di Testo</title>
-
- <para>Per poter configurare il tuo sistema, devi modificare dei file. Molti
- di questi saranno in <filename>/etc</filename>; e avrai bisogno
- del comando <command>su</command> per diventare <systemitem class="username">root</systemitem>
- e poter così modificarli. Puoi usare il semplice editor
- <command>ee</command>, ma alla lunga risulta più utile imparare
- <command>vi</command>. C'é un eccellente tutorial su
- <command>vi</command> in
- <filename>/usr/src/contrib/nvi/docs/tutorial</filename> se hai installato
- i sorgenti di sistema.</para>
-
- <para>Prima di modificare un file, dovresti farne una copia.
- Supponiamo tu voglia modificare <filename>/etc/rc.conf</filename>. Puoi
- semplicemente usare <command>cd /etc</command> per andare in
- <filename>/etc</filename> e fare:</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>cp rc.conf rc.conf.orig</userinput></screen>
- </informalexample>
-
- <para>Questo copierà <filename>rc.conf</filename> in
- <filename>rc.conf.orig</filename>, e potrai successivamente copiare
- <filename>rc.conf.orig</filename> in
- <filename>rc.conf</filename> per tornare all'originale. Ma ancora meglio
- sarà spostare (rinominare) il file per poi ricopiarlo con il nome
- originale:</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>mv rc.conf rc.conf.orig</userinput>
-&prompt.root; <userinput>cp rc.conf.orig rc.conf</userinput></screen>
- </informalexample>
-
- <para>perché il comando <command>mv</command> mantiene
- la data e il proprietario originali del file. Puoi ora modificare
- <filename>rc.conf</filename>. Se vuoi tornare all'originale,
- potresti fare <userinput>mv rc.conf rc.conf.myedit</userinput>
- (assumendo che vuoi tenere la versione modificata) e
- quindi fare</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>mv rc.conf.orig rc.conf</userinput></screen>
- </informalexample>
-
- <para>per tornare allo stato iniziale.</para>
-
- <para>Per modificare un file, digita</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>vi nomefile</userinput></screen>
- </informalexample>
-
- <para>Muoviti nel testo con i tasti freccia.
- <keycap>Esc</keycap> mette <command>vi</command>
- in modalità comando. Ecco qui alcuni dei comandi:</para>
-
- <variablelist>
- <varlistentry>
- <term><command>x</command></term>
-
- <listitem>
- <para>cancella la lettera su cui si trova il cursore</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>dd</command></term>
-
- <listitem>
- <para>cancella l'intera riga (anche se va a capo sullo schermo)</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>i</command></term>
-
- <listitem>
- <para>inserisci del testo nella posizione del cursore</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>a</command></term>
-
- <listitem>
- <para>inserisci del testo dopo il cursore</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>Quando digiti <command>i</command> o <command>a</command>,
- puoi inserire del testo. <command>Esc</command> ti riporta in
- modalità comando dove puoi digitare</para>
-
- <variablelist>
- <varlistentry>
- <term><command>:w</command></term>
-
- <listitem>
- <para>per salvare le modifiche sul disco e continuare a
- modificare il file</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>:wq</command></term>
-
- <listitem>
- <para>per salvare le modifiche e uscire</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>:q!</command></term>
-
- <listitem>
- <para>per uscire senza salvare le modifiche</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>/testo</command></term>
-
- <listitem>
- <para>per spostare il cursore su <replaceable>testo</replaceable>;
- <command>/Invio</command>
- per trovare la prossima occorrenza di
- <replaceable>testo</replaceable>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>G</command></term>
-
- <listitem>
- <para>per andare alla fine del file</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>nG</command></term>
-
- <listitem>
- <para>per andare alla riga <replaceable>n</replaceable> del
- file, dove <replaceable>n</replaceable> è un numero</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><keycombo><keycap>Ctrl</keycap><keycap>L</keycap></keycombo></term>
-
- <listitem>
- <para>per ridisegnare lo schermo</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><keycombo><keycap>Ctrl</keycap><keycap>b</keycap></keycombo> e
- <keycombo><keycap>Ctrl</keycap><keycap>f</keycap></keycombo></term>
-
- <listitem>
- <para>vai avanti e indietro di una pagina, come succede con
- <command>more</command> e <command>view</command>.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>Fai un po' di pratica con <command>vi</command> nella tua directory
- home creando un nuovo file digitando <command>vi
- nomefile</command> e aggiungendo
- e cancellando del testo, salvando il file, e riaprendolo di nuovo.
- <command>vi</command> è pieno di sorprese perché è
- abbastanza complesso, e ti capiterà di digitare un comando che
- farà di sicuro qualcosa che non ti aspetti. (Alcune persone
- preferiscono <command>vi</command>&mdash;è più potente
- dell'EDIT del DOS&mdash;scopri il comando <command>:r</command>)
- Usa <keycap>Esc</keycap> una o più volte per essere sicuro di
- essere in modalità comando e continua da lì quando hai dei
- problemi, salva spesso con <command>:w</command>, e usa
- <command>:q!</command> per uscire e ricominciare (dal tuo ultimo
- <command>:w</command>) quando ne hai bisogno.</para>
-
- <para>Ora puoi usare <command>cd</command> per andare in
- <filename>/etc</filename>, <command>su</command> per diventare
- <systemitem class="username">root</systemitem>, <command>vi</command> per modificare il file
- <filename>/etc/group</filename>, e aggiungere un utente al gruppo
- <systemitem class="groupname">wheel</systemitem> cosicché possa avere privilegi di
- <systemitem class="username">root</systemitem>. Aggiungi solo una virgola e il nome di login
- dell'utente alla fine della prima riga del file, premi
- <keycap>Esc</keycap>, e usa <command>:wq</command> per salvare
- il file su disco e uscire. La modifica ha effetto immediato. (Non hai
- lasciato uno spazio dopo la virgola, vero?)</para>
- </sect1>
-
- <sect1>
- <title>Stampa di File da DOS</title>
-
- <para>A questo punto la tua stampante non funzionerà ancora sotto
- FreeBSD, ecco quindi un sistema per creare un file da una pagina man,
- metterlo su un floppy, e quindi stamparlo da DOS. Supponiamo che tu
- voglia leggere attentamente come cambiare i permessi sui file (abbastanza
- importante). Puoi usare <command>man chmod</command> per leggere come
- fare. Il comando</para>
-
- <informalexample>
- <screen>&prompt.user; <userinput>man chmod | col -b &gt; chmod.txt</userinput></screen>
- </informalexample>
-
- <para>toglierà gli elementi di formattazione e manderà il
- tutto sul file <filename>chmod.txt</filename> al posto di mostrare il
- contenuto sullo schermo. Ora metti un dischetto formattato DOS nel
- lettore, digita <command>su</command> per diventare
- <systemitem class="username">root</systemitem>, e scrivi</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>/sbin/mount -t msdos /dev/fd0 /mnt</userinput></screen>
- </informalexample>
-
- <para>per montare il floppy su <filename>/mnt</filename>.</para>
-
- <para>Ora (non hai più bisogno di essere <systemitem class="username">root</systemitem>,
- e puoi digitare <command>exit</command> per tornare ad essere l'utente
- <systemitem class="username">jack</systemitem>) puoi andare nella directory in cui hai creato
- <filename>chmod.txt</filename> e copiare il file sul floppy
- digitando:</para>
-
- <informalexample>
- <screen>&prompt.user; <userinput>cp chmod.txt /mnt</userinput></screen>
- </informalexample>
-
- <para>e usare <command>ls /mnt</command> per vedere il
- contenuto di <filename>/mnt</filename>, che dovrebbe contenere il file
- <filename>chmod.txt</filename>.</para>
-
- <para>In particolare potresti voler creare un file con l'output di
- <filename>/sbin/dmesg</filename> digitando</para>
-
- <informalexample>
- <screen>&prompt.user; <userinput>/sbin/dmesg &gt; dmesg.txt</userinput></screen>
- </informalexample>
-
- <para>e copiare <filename>dmesg.txt</filename> sul floppy.
- <command>/sbin/dmesg</command> è il file di log di avvio, ed
- è importante comprenderlo perché ti mostra cosa ha trovato
- FreeBSD all'avvio. Se poni delle domande sulla &a.questions;
- o su un gruppo USENET&mdash;del tipo <quote>FreeBSD non trova il mio drive
- per i nastri, che cosa faccio?</quote>&mdash;la gente vorrà
- sapere cosa mostra il tuo <command>dmesg</command>.</para>
-
- <para>Ora devi smontare il floppy (da <systemitem class="username">root</systemitem>) per poter
- togliere il disco</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>/sbin/umount /mnt</userinput></screen>
- </informalexample>
-
- <para>e riavviare per tornare in DOS. Copia questo file in una
- directory DOS, richiamali con l'EDIT del DOS, Notepad o Wordpad di
- &windows;, o un editor di testi, fai una piccola modifica in modo che
- il file debba essere salvato, e stampa come faresti da DOS o
- &windows;. Spera che funzioni! Le pagine man vengono meglio se
- stampate con il comando DOS <command>print</command>. (Copiare i file
- da FreeBSD su una partizione DOS montata è ancora in alcuni casi
- rischioso.)</para>
-
- <para>Far funzionare la stampante sotto FreeBSD consiste nel creare
- un opportuno elemento in <filename>/etc/printcap</filename> e
- creare una directory di spool corrispondente in
- <filename>/var/spool/output</filename>. Se la tua stampante è su
- <hardware>lpt0</hardware> (ciò che DOS chiama
- <hardware>LPT1</hardware>), devi solo andare in
- <filename>/var/spool/output</filename> e (da <systemitem class="username">root</systemitem>)
- creare la directory <filename>lpd</filename> digitando: <command>mkdir
- lpd</command>, se non è già presente. A quel punto la
- stampante dovrebbe rispondere quando il sistema parte, e
- <command>lp</command> o <command>lpr</command> dovrebbero mandare un
- file alla stampante. Che il file venga stampato o meno è solo
- questione di configurazione, che è discussa nel <link xlink:href="&url.books.handbook;/index.html">Manuale di FreeBSD</link>.</para>
- </sect1>
-
- <sect1>
- <title>Altri Comandi Utili</title>
-
- <variablelist>
- <varlistentry>
- <term><command>df</command></term>
-
- <listitem>
- <para>mostra lo spazio disponibile e tutte le partizioni
- montate.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ps aux</command></term>
-
- <listitem>
- <para>mostra i processi in esecuzione. <command>ps ax</command>
- è una forma contratta.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>rm nomefile</command></term>
-
- <listitem>
- <para>cancella <replaceable>nomefile</replaceable>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>rm -R dir</command></term>
-
- <listitem>
- <para>cancella la directory <replaceable>dir</replaceable> e tutte le
- sottodirectory&mdash;attenzione!</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>ls -R</command></term>
-
- <listitem>
- <para>mostra il contenuto della directory e delle sue
- sottodirectory; io usavo una variante, <command>ls -AFR &gt;
- where.txt</command>, per avere una lista dei file in
- <filename>/</filename> e (separatamente)
- <filename>/usr</filename> prima che scoprissi dei metodi migliori
- per cercare i file.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>passwd</command></term>
-
- <listitem>
- <para>per cambiare la password dell'utente (o di
- <systemitem class="username">root</systemitem>)</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>man hier</command></term>
-
- <listitem>
- <para>pagina man sul file system di &unix;</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>Usa <command>find</command> per trovare <filename>nomefile</filename>
- in <filename>/usr</filename> o nelle sue sottodirectory digitando</para>
-
- <informalexample>
- <screen>&prompt.user; <userinput>find /usr -name "nomefile"</userinput></screen>
- </informalexample>
-
- <para>Puoi usare <literal>*</literal> come identificatore universale in
- <parameter>"<replaceable>nomefile</replaceable>"</parameter>
- (che dovrebbe essere tra virgolette). Se dici a
- <command>find</command> di cercare in <filename>/</filename>
- anziché <filename>/usr</filename> cercherà il/i file su
- tutti i file system montati, inclusi i CDROM e le partizioni DOS.</para>
-
- <para>Un libro eccellente che tratta i comandi e le utility di &unix;
- è <citetitle>Unix for the Impatient</citetitle> di Abrahams &amp;
- Larson (2nd ed., Addison-Wesley, 1996).
- Ci sono anche un sacco di informazioni su &unix; su Internet.</para>
- </sect1>
-
- <sect1>
- <title>Prossimi Passi</title>
-
- <para>Dovresti ora avere gli strumenti necessari per girare nel sistema e
- modificare i file, così da poter rendere tutto funzionante. Ci
- sono un sacco di informazioni nel Manuale di FreeBSD (che è
- probabilmente sul tuo disco rigido) e sul <link xlink:href="&url.base;/it/index.html">sito web di FreeBSD</link>. Una
- grande scelta di package e port è presente sul CDROM così
- come sul sito web. Il manuale ti spiega come usarli
- (prendi il package se esiste, con <command>pkg_add
- /cdrom/packages/All/nomepackage</command>,
- dove <replaceable>nomepackage</replaceable> è il nome del file del
- package). Il CDROM ha una lista di package e di port
- con delle brevi descrizioni in <filename>cdrom/packages/index</filename>,
- <filename>cdrom/packages/index.txt</filename>, e
- <filename>cdrom/ports/index</filename>, e con descrizioni più ampie
- in <filename>/cdrom/ports/*/*/pkg/DESCR</filename>, dove
- <literal>*</literal> rappresenta rispettivamente sottodirectory di tipi di
- programmi e nomi di programmi.</para>
-
- <para>Se trovi il manuale troppo difficile su come installare i port dal
- CDROM (con il sistema di <command>lndir</command> e altro), ecco come
- funziona normalmente:</para>
-
- <para>Trova il port che vuoi, supponiamo <command>kermit</command>.
- Ci sarà una directory per lui sul CDROM. Copia la
- sottodirectory in <filename>/usr/local</filename> (un buon posto
- perché il software che aggiungi sia disponibile a tutti gli utenti)
- con:</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>cp -R /cdrom/ports/comm/kermit /usr/local</userinput></screen>
- </informalexample>
-
- <para>Questo dovrebbe portarti ad avere la sottodirectory
- <filename>/usr/local/kermit</filename> che contiene tutti i file
- presenti nella sottodirectory <command>kermit</command> del CDROM.</para>
-
- <para>Ora, crea la directory
- <filename>/usr/ports/distfiles</filename> se non esiste ancora,
- usando <command>mkdir</command>. Poi controlla
- <filename>/cdrom/ports/distfiles</filename> cercando un file
- con il nome che indica che si tratta del port esatto. Copia quel file in
- <filename>/usr/ports/distfiles</filename>; nelle versioni più
- recenti puoi saltare questo passo, perché FreeBSD lo farà
- per te. Nel caso di <command>kermit</command>, non c'è nessun
- distfile.</para>
-
- <para>Quindi entra con <command>cd</command> nella sottodirectory di
- <filename>/usr/local/kermit</filename> che contiene il file
- <filename>Makefile</filename>. Digita</para>
-
- <informalexample>
- <screen>&prompt.root; <userinput>make all install</userinput></screen>
- </informalexample>
-
- <para>Durante questo processo il port userà FTP per scaricare
- i file compressi che non ha trovato sul CDROM o in
- <filename>/usr/ports/distfiles</filename>. Se la tua connessione
- non funziona ancora e non c'è nessun file per il port in
- <filename>/cdrom/ports/distfiles</filename>, dovrai
- recuperare il distfile usando un'altra macchina e poi copiarlo in
- <filename>/usr/ports/distfiles</filename> da un dischetto o dalla
- partizione DOS. Leggi <filename>Makefile</filename> (usando
- <command>cat</command> o <command>more</command> oppure
- <command>view</command>) per scoprire dove andare (il sito principale
- di distribuzione) per trovare il file e conoscere il suo nome. Il nome
- verrà troncato quando scaricato da DOS, e dopo averlo trasferito
- in <filename>/usr/ports/distfiles</filename> dovrai
- rinominarlo (usando il comando <command>mv</command>) nel suo
- nome originale cosicché possa essere trovato. (Usa il
- trasferimento di file binario!)
- Quindi torna in <filename>/usr/local/kermit</filename>, trova la
- directory contenente <filename>Makefile</filename>, e digita
- <command>make all install</command>.</para>
-
- <para>Un'altra cosa che può succedere quando si installa un port o un
- package è che questi abbiano bisogno di un altro programma. Se
- l'installazione si ferma con un messaggio <errorname>can't find
- unzip</errorname> o simile, potresti dover installare il
- package o il port di unzip prima di proseguire.</para>
-
- <para>Una volta installato, digita <command>rehash</command> per far
- sì che FreeBSD rilegga i file contenuti nel path e sappia quali
- sono presenti.
- (Se trovi un sacco di messaggi <errorname>path not found</errorname>
- quando usi <command>whereis</command> o which, dovresti
- fare delle aggiunte all'elenco delle directory nel
- file <filename>.cshrc</filename> nella tua directory home.
- L'elenco dei path in &unix; fa la stessa
- cosa che fa in DOS, tranne che la directory corrente (di
- default) non si trova nel path per ragioni di sicurezza; se il comando
- che vuoi eseguire è nella directory in cui ti trovi, devi digitare
- <filename>./</filename> prima del nome del comando; niente
- spazio dopo la barra.)</para>
-
- <para>Potresti volere la versione più recente di &netscape;
- dal loro <link xlink:href="ftp://ftp.netscape.com/">sito FTP</link>.
- (&netscape; necessita dell'X Window System.) Ora c'é una versione
- per FreeBSD, quindi dà un'occhiata in giro. Usa solo
- <command>gunzip nomefile</command> e
- <command>tar xvf nomefile</command> sul file,
- sposta il binario in <filename>/usr/local/bin</filename> o qualche altro
- posto in cui vengono tenuti i binari, esegui <command>rehash</command>, e
- quindi aggiungi le seguenti linee a <filename>.cshrc</filename> in tutte
- le directory home degli utenti oppure (più semplicemente) in
- <filename>/etc/csh.cshrc</filename>, il file di configurazione globale di
- <command>csh</command>:</para>
-
- <informalexample>
- <programlisting>setenv XKEYSYMDB /usr/X11R6/lib/X11/XKeysymDB
-setenv XNLSPATH /usr/X11R6/lib/X11/nls</programlisting>
- </informalexample>
-
- <para>Questo assume che il file <filename>XKeysymDB</filename>
- e la directory <filename>nls</filename> siano in
- <filename>/usr/X11R6/lib/X11</filename>; se non lo sono, trovale
- e mettile lì.</para>
-
- <para>Se hai originariamente installato &netscape; dal CDROM (o via
- FTP), non sostituire <filename>/usr/local/bin/netscape</filename>
- con il nuovo binario di netscape; questo è solo uno script di shell
- che imposta le variabili di ambiente per te. Rinomina invece
- il nuovo binario in <filename>netscape.bin</filename> e rimpiazza il
- vecchio binario, che dovrebbe essere
- <filename>/usr/local/netscape/netscape</filename>.</para>
- </sect1>
-
- <sect1>
- <title>Il tuo Ambiente di Lavoro</title>
-
- <para>La shell è la parte più importante del tuo ambiente
- di lavoro. In DOS, la shell è solitamente command.com. La shell
- è ciò che interpreta i comandi che digiti sulla linea di
- comando, e quindi comunica con il resto del sistema operativo.
- Puoi anche scrivere script di shell, che sono come i file batch di
- DOS: una serie di comandi che devono essere eseguiti senza il tuo
- intervento.</para>
-
- <para>Due shell vengono normalmente installate con FreeBSD:
- <command>csh</command> e <command>sh</command>.
- <command>csh</command> è buona per lavoro da linea di comando, ma
- gli script dovrebbero essere scritti usando <command>sh</command> (o
- <command>bash</command>). Puoi scoprire che shell hai
- digitando <command>echo $SHELL</command>.</para>
-
- <para><command>csh</command> è una buona shell, ma
- <command>tcsh</command> fa tutto ciò che <command>csh</command>
- fa e anche altro. Ti permette di richiamare i comandi usando
- le frecce e ti permette di modificarli. Ha l'auto-completamento dei nomi
- di file con tab (<command>csh</command> usa <keycap>Esc</keycap>), e
- ti permette di tornare alla directory in cui eri digitando
- <command>cd -</command>. È anche più semplice alterare il
- prompt con <command>tcsh</command>. Ti rende la vita più
- facile.</para>
-
- <para>Ecco tre semplici passi per installare una nuova shell:</para>
-
- <procedure>
- <step>
- <para>Installa la shell tramite port o package, come faresti
- con un qualsiasi altro port o package. Usa
- <command>rehash</command> e <command>which tcsh</command>
- (assumendo che tu stia installando <command>tcsh</command>) per
- essere sicuro di averla installata.</para>
- </step>
-
- <step>
- <para>Da <systemitem class="username">root</systemitem>, modifica
- <filename>/etc/shells</filename>, aggiungendo una riga nel file per
- la nuova shell, in questo caso
- <filename>/usr/local/bin/tcsh</filename>, e salva il file.
- (Alcuni port lo fanno per te.)</para>
- </step>
-
- <step>
- <para>Usa il comando <command>chsh</command> per cambiare
- permanentemente la tua shell in <command>tcsh</command>, o digita
- <command>tcsh</command> al prompt per cambiare la shell senza
- dover uscire dal sistema per poi rientrare.</para>
- </step>
- </procedure>
-
- <note>
- <para>Può essere pericoloso cambiare la shell di
- <systemitem class="username">root</systemitem> in qualcosa di diverso da
- <command>sh</command> o <command>csh</command> su versioni più
- recenti di FreeBSD e di &unix;; potresti non avere una shell
- funzionante se il sistema entra in modalità singolo utente.
- La soluzione è usare <command>su -m</command> per diventare
- <systemitem class="username">root</systemitem>, che ti dà <command>tcsh</command> come
- shell di <systemitem class="username">root</systemitem>, poiché la shell è
- parte del tuo ambiente. Puoi rendere tutto ciò permanente
- aggiungendo al tuo <filename>.tcshrc</filename> un alias con:</para>
- <programlisting>alias su su -m</programlisting>
- </note>
-
- <para>Quando <command>tcsh</command> parte, legge i file
- <filename>/etc/csh.cshrc</filename> e
- <filename>/etc/csh.login</filename>, come farebbe
- <command>csh</command>. Leggerà anche il file
- <filename>.login</filename> nella tua directory home ed anche
- <filename>.cshrc</filename>, a meno che tu non abbia un file
- <filename>.tcshrc</filename>. Puoi crearlo copiando
- <filename>.cshrc</filename> in <filename>.tcshrc</filename>.</para>
-
- <para>Ora che hai installato <command>tcsh</command>, puoi sistemare
- il tuo prompt. Puoi trovare i dettagli nella pagina man di
- <command>tcsh</command>, ma ecco qui una linea da mettere nel tuo
- <filename>.tcshrc</filename> che ti dirà quanti comandi hai
- digitato, che ore sono, e in che directory
- ti trovi. Produce anche un <literal>&gt;</literal> se sei un
- utente normale e un <literal>#</literal> se sei <systemitem class="username">root</systemitem>,
- ma <command>tcsh</command> lo farebbe in ogni caso:</para>
-
- <para>set prompt = "%h %t %~ %# "</para>
-
- <para>Questa dovrebbe andare nella stessa posizione della linea di
- prompt corrente se ce n'è una, o sotto "if($?prompt) then" in caso
- contrario. Commenta la vecchia riga; così potrai tornare a quella
- vecchia se la preferirai. Non dimenticare gli spazi e le virgolette.
- Puoi far rileggere <filename>.tcshrc</filename> digitando
- <command>source .tcshrc</command>.</para>
-
- <para>Puoi avere una lista delle variabili di sistema che sono state
- impostate digitando <command>env</command> al prompt.
- Il risultato ti mostrerà il tuo editor di default, il pager, e il
- tipo di terminale, tra le altre possibili variabili. Un comando
- utile se ti connetti al sistema da una postazione remota e non riesci ad
- eseguire un programma perché il terminale non ne è capace
- è <command>setenv TERM vt100</command>.</para>
- </sect1>
-
- <sect1>
- <title>Altro</title>
-
- <para>Da <command>tcsh</command> puoi smontare il CDROM con
- <command>/sbin/umount /cdrom</command>, toglilo dal lettore,
- inseriscine un altro, e montalo con
- <command>/sbin/mount_cd9660 /dev/cd0a /cdrom</command> assumendo che
- <hardware>cd0a</hardware> sia il nome di dispositivo del tuo lettore di
- CDROM. La versione più recente di FreeBSD ti permette di montare
- il CDROM solo con <command>/sbin/mount /cdrom</command>.</para>
-
- <para>Usare il <quote>live file system</quote>&mdash;il secondo cd del set
- di FreeBSD&mdash;è
- utile se hai poco spazio a disposizione. Ciò che si trova
- sul live file system cambia da release a release. Potresti
- provare ad eseguire dei giochi dal CDROM. Questo comporta l'uso di
- <command>lndir</command>, che viene installato con l'X Window
- System, per dire ai programmi dove trovare i file necessari, poiché
- questi si trovano nel file system <filename>/cdrom</filename>
- anziché <filename>/usr</filename> e le sue
- sottodirectory, che è dove dovrebbero essere. Leggi
- <command>man lndir</command> per avere più informazioni.</para>
- </sect1>
-
- <sect1>
- <title>I Commenti sono Benvenuti</title>
-
- <para>Se usi questa guida, sarei interessata a sapere dove non è
- chiara, ciò che è stato tralasciato e che vorresti venisse
- incluso, e sapere se tutto ciò è stato utile. I miei
- ringraziamenti vanno a Eugene W. Stark, professore di informatica a
- SUNY-Stony Brook, e John Fieber per i suoi utili commenti.</para>
-
- <para>Annelise Anderson, <email>andrsn@andrsn.stanford.edu</email></para>
-
- <para>Per questioni legate alla traduzione, o se avete commenti da poter
- esprimere solo in italiano, non esitate a contattarmi. Come per l'autrice
- originale, ogni genere di commenti è ben accetto.</para>
-
- <para>Massimiliano Stucchi, <email>stucchi@willystudios.com</email></para>
- </sect1>
-</article>
diff --git a/it_IT.ISO8859-15/articles/vm-design/Makefile b/it_IT.ISO8859-15/articles/vm-design/Makefile
deleted file mode 100644
index f4d95d0958..0000000000
--- a/it_IT.ISO8859-15/articles/vm-design/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# $FreeBSD$
-#
-# Articolo: Elementi di progettazione del sistema di VM di FreeBSD
-
-DOC?= article
-
-FORMATS?= html
-WITH_ARTICLE_TOC?= YES
-
-SRCS= article.xml
-IMAGES_EN = fig1.eps
-IMAGES_EN+= fig2.eps
-IMAGES_EN+= fig3.eps
-IMAGES_EN+= fig4.eps
-
-INSTALL_COMPRESSED?=gz
-INSTALL_ONLY_COMPRESSED?=
-
-
-DOC_PREFIX?= ${.CURDIR}/../../..
-.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/it_IT.ISO8859-15/articles/vm-design/article.xml b/it_IT.ISO8859-15/articles/vm-design/article.xml
deleted file mode 100644
index 1b30d5b48e..0000000000
--- a/it_IT.ISO8859-15/articles/vm-design/article.xml
+++ /dev/null
@@ -1,1036 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-15"?>
-<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
- "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
-<!--
- The FreeBSD Italian Documentation Project
-
- $FreeBSD$
- Original revision: 1.16
--->
-<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="it">
- <info><title>Elementi di progettazione del sistema di VM di FreeBSD</title>
-
-
- <authorgroup>
- <author><personname><firstname>Matthew</firstname><surname>Dillon</surname></personname><affiliation>
- <address>
- <email>dillon@apollo.backplane.com</email>
- </address>
- </affiliation></author>
- </authorgroup>
-
- <legalnotice xml:id="trademarks" role="trademarks">
- &tm-attrib.freebsd;
- &tm-attrib.linux;
- &tm-attrib.microsoft;
- &tm-attrib.opengroup;
- &tm-attrib.general;
- </legalnotice>
-
- <pubdate>$FreeBSD$</pubdate>
-
- <releaseinfo>$FreeBSD$</releaseinfo>
-
- <abstract>
- <para>Il titolo è in realtà solo un modo complicato per dire
- che cercherò di descrivere l'intera enchilada della memoria
- virtuale (VM), sperando di farlo in una maniera che chiunque possa
- seguire.
- Nell'ultimo anno mi sono concentrato su un certo numero di sottosistemi
- principali del kernel in FreeBSD, trovando quelli della VM (la memoria
- virtuale) e dello Swap i più interessanti, e considerando quello
- di NFS <quote>un lavoretto necessario</quote>.
- Ho riscritto solo piccole porzioni di quel codice. Nell'arena
- della VM la sola grossa riscrittura che ho affrontato è stata
- quella del sottosistema di swap.
- La maggior parte del mio lavoro è stato di pulizia e
- mantenimento, con solo alcune moderate riscritture di codice e
- nessuna correzione rilevante a livello algoritmico nel sottosistema
- della VM. Il nocciolo della base teorica del sottosistema
- rimane immutato ed un bel po' del merito per gli sforzi di
- modernizzazione negli ultimi anni appartiene a John Dyson e David
- Greenman. Poiché non sono uno storico come Kirk non
- tenterò di marcare tutte le varie caratteristiche con i nomi
- delle relative persone, perché sbaglierei
- invariabilmente.</para>
-
- &trans.it.surrender;
- </abstract>
-
- <legalnotice xml:id="legalnotice">
- <para>Questo articolo è stato pubblicato in origine nel numero di
- gennaio 2000 di <link xlink:href="http://www.daemonnews.org/">DaemonNews</link>.
- Questa versione dell'articolo può includere aggiornamenti da
- parte di Matt e di altri autori per riflettere i cambiamenti
- nell'implementazione della VM di FreeBSD.</para>
- </legalnotice>
- </info>
-
- <sect1 xml:id="introduction">
- <title>Introduzione</title>
-
- <para>Prima di andare avanti con la descrizione del progetto effettivo
- della VM spendiamo un po' di tempo sulla necessità di mantenere
- e modernizzare una qualunque base di codice longeva.
- Nel mondo della programmazione, gli algoritmi tendono ad essere più
- importanti del codice ed è dovuto alle radici accademiche
- di BSD che si è prestata grande attenzione alla progettazione
- algoritmica sin dal principio.
- Una maggiore attenzione al design in genere conduce ad una base di codice
- flessibile e pulita che può essere modificata abbastanza
- semplicemente, estesa, o rimpiazzata nel tempo.
- Mentre BSD viene considerato un sistema operativo <quote>vecchio</quote>
- da alcune persone, quelli di noi che lavorano su di esso tendono
- a considerarlo come una base di codice <quote>matura</quote>
- che ha vari componenti modificati, estesi, o rimpiazzati con codice
- moderno. Questa si è evoluta, e FreeBSD è all'avanguardia,
- non importa quanto possa essere vecchio qualche pezzo di codice.
- Questa è una distinzione importante da fare ed una di quelle che
- sfortunatamente sfuggono alla maggior parte delle persone. Il più
- grande errore che un programmatore possa fare è non imparare
- dalla storia, e questo è precisamente l'errore che molti sistemi
- operativi moderni hanno commesso. &windowsnt; è il miglior esempio
- di questo, e le conseguenze sono state disastrose. Anche Linux commette
- questo errore a un certo livello&mdash;abbastanza perché noi
- appassionati di BSD possiamo scherzarci su ogni tanto, comunque.
- Il problema di Linux è semplicemente la mancanza di esperienza e
- di una storia con la quale confrontare le idee, un problema che sta
- venendo affrontato rapidamente dalla comunità Linux nello stesso
- modo in cui è stato affrontato da quella BSD&mdash;con il continuo
- sviluppo di codice. La gente di &windowsnt;, d'altro canto, fa
- ripetutamente gli stessi errori risolti da &unix; decadi fa e poi impiega
- anni nel risolverli. E poi li rifanno, ancora, e ancora.
- Soffrono di un preoccupante caso di <quote>non è stato progettato
- qui</quote> e di <quote>abbiamo sempre ragione perché il nostro
- dipartimento marketing dice così</quote>. Io ho pochissima
- tolleranza per chiunque non impari dalla storia.</para>
-
- <para>La maggior parte dell'apparente complessità di progettazione di
- FreeBSD, specialmente nel sottosistema VM/Swap, è una conseguenza
- diretta dell'aver dovuto risolvere importanti problemi di prestazioni
- legati a varie condizioni. Questi problemi non sono dovuti a cattivi
- progetti algoritmici ma sorgono invece da fattori ambientali.
- In ogni paragone diretto tra piattaforme, questi problemi
- diventano più evidenti quando le risorse di sistema cominciano ad
- essere stressate.
- Mentre descrivo il sottosistema VM/Swap di FreeBSD il lettore
- dovrebbe sempre tenere a mente almeno due punti. Primo, l'aspetto
- più importante nel design prestazionale è ciò che
- è noto come <quote>Ottimizzazione del Percorso Critico</quote>.
- Accade spesso che le ottimizzazioni prestazionali aggiungano
- un po di impurità al codice per far migliorare il percorso critico.
- Secondo, un progetto solido e generalizzato, funziona meglio di
- un progetto pesantemente ottimizzato, alla lunga. Mentre un progetto
- generale può alla fin fine essere più lento di un sistema
- pesantemente ottimizzato quando vengono implementati inizialmente, il
- progetto generalizzato tende ad essere più semplice da adattare
- alle condizioni variabili mentre quello pesantemente ottimizzato finisce
- per dover essere gettato via. Ogni base di codice che dovrà
- sopravvivere ed essere mantenibile per anni deve dunque essere progettata
- con attenzione fin dall'inizio anche se questo può portare a
- piccoli peggioramenti nelle prestazioni.
- Vent'anni fa c'era ancora gente che sosteneva che programmare in assembly
- era meglio che programmare in linguaggi di alto livello, perché
- si poteva produrre codice che era dieci volte più veloce. Oggi,
- la fallacia di tale argomento è ovvia&mdash;così come i
- paralleli con il design algoritmico e la generalizzazione del
- codice.</para>
- </sect1>
-
- <sect1 xml:id="vm-objects">
- <title>Oggetti VM</title>
-
- <para>Il modo migliore per iniziare a descrivere il sistema di VM di FreeBSD
- è guardandolo dalla prospettiva di un processo a livello
- utente. Ogni processo utente vede uno spazio di indirizzamento della VM
- singolo, privato e contiguo, contenente molti tipi di oggetti di memoria.
- Questi oggetti hanno varie caratteristiche.
- Il codice del programma e i dati del programma sono effettivamente
- un singolo file mappato in memoria (il file binario che è stato
- eseguito), ma il codice di programma è di sola lettura mentre i
- dati del programma sono copy-on-write <footnote>
- <para>I dati copy on write sono dati che vengono copiati solo al momento
- della loro effettiva modifica</para>
- </footnote>. Il BSS del programma è solamente una zona di memoria
- allocata e riempita con degli zero su richiesta, detta in inglese
- <quote>demand zero page fill</quote>.
- Nello spazio di indirizzamento possono essere mappati anche file
- arbitrari, che è in effetti il meccanismo con il quale funzionano
- le librerie condivise. Tali mappature possono richiedere modifiche per
- rimanere private rispetto al processo che le ha effettuate.
- La chiamata di sistema fork aggiunge una dimensione completamente nuova
- al problema della gestione della VM in cima alla complessità
- già data.</para>
-
- <para>Una pagina di dati di un programma (che è una basilare pagina
- copy-on-write) illustra questa complessità. Un programma binario
- contiene una sezione di dati preinizializzati che viene inizialmente
- mappata direttamente in memoria dal file del programma.
- Quando un programma viene caricato nello spazio di memoria virtuale di un
- processo, questa area viene inizialmente copiata e mappata in memoria dal
- binario del programma stesso, permettendo al sistema della VM di
- liberare/riusare la pagina in seguito e poi ricaricarla dal binario.
- Nel momento in cui un processo modifica questi dati, comunque, il
- sistema della VM deve mantenere una copia privata della pagina per quel
- processo. Poiché la copia privata è stata modificata, il
- sistema della VM non può più liberarlo, poiché non ci
- sarebbe più nessuna possibilità di recuperarlo in
- seguito.</para>
-
- <para>Noterai immediatamente che quella che in origine era soltanto
- una semplice mappatura di un file è diventata qualcosa di
- più complesso.
- I dati possono essere modificati pagina per pagina
- mentre una mappatura di file coinvolge molte pagine alla volta.
- La complessità aumenta ancora quando un processo esegue una fork.
- Quando un processo esegue una fork, il risultato sono due
- processi&mdash;ognuno con il proprio spazio di indirizzamento privato,
- inclusa ogni modifica fatta dal processo originale prima della chiamata a
- <function>fork()</function>. Sarebbe stupido per un sistema di VM creare
- una copia completa dei dati al momento della <function>fork()</function>
- perché è abbastanza probabile che almeno uno dei due
- processi avrà bisogno soltanto di leggere da una certa pagina da
- quel momento in poi, permettendo di continuare ad usare la
- pagina originale. Quella che era una pagina privata viene di nuovo
- resa una copy-on-write, poiché ogni processo (padre e figlio) si
- aspetta che i propri cambiamenti rimangano privati per loro e non abbiano
- effetti sugli altri.</para>
-
- <para>FreeBSD gestisce tutto ciò con un modello a strati di oggetti
- VM. Il file binario originale del programma risulta come lo strato di
- Oggetti VM più basso.
- Un livello copy-on-write viene messo sopra questo per mantenere quelle
- pagine che sono state copiate dal file originale.
- Se il programma modifica una pagina di dati appartenente al file originale
- il sistema dell VM prende un page fault <footnote>
- <para>Un page fault, o <quote>mancanza di pagina</quote>,
- corrisponde ad una mancanza di una determinata pagina di memoria a un
- certo livello, ed alla necessità di copiarla da un livello
- più lento. Ad esempio se una pagina di memoria è stata
- spostata dalla memoria fisica allo spazio di swap su disco, e viene
- richiamata, si genera un page fault e la pagina viene di nuovo copiata
- in ram.</para>
- </footnote> e fa una copia della pagina nel livello più alto.
- Quando un processo effettua una fork, vengono aggiunti altri livelli di
- Oggetti VM. Tutto questo potrebbe avere un po' più senso con un
- semplice esempio.
- Una <function>fork()</function> è un'operazione comune per ogni
- sistema *BSD, dunque questo esempio prenderà in considerazione un
- programma che viene avviato ed esegue una fork. Quando il processo viene
- avviato, il sistema della VM crea uno starto di oggetti, chiamiamolo
- A:</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="fig1"/>
- </imageobject>
-
- <textobject>
- <literallayout class="monospaced">+---------------+
-| A |
-+---------------+</literallayout>
- </textobject>
-
- <textobject>
- <phrase>Un'immagine</phrase>
- </textobject>
- </mediaobject>
-
- <para>A rappresenta il file&mdash;le pagine possono essere
- spostate dentro e fuori dal mezzo fisico del file se necessario.
- Copiare il file dal disco è sensato per un programma,
- ma di certo non vogliamo effettuare il page out <footnote>
- <para>La copia dalla memoria al disco, l'opposto del page in, la
- mappatura in memoria.</para>
- </footnote> e sovrascrivere l'eseguibile.
- Il sistema della VM crea dunque un secondo livello, B, che verrà
- copiato fisicamente dallo spazio di swap:</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="fig2"/>
- </imageobject>
-
- <textobject>
- <literallayout class="monospaced">+---------------+
-| B |
-+---------------+
-| A |
-+---------------+</literallayout>
- </textobject>
- </mediaobject>
-
- <para>Dopo questo, nella prima scrittura verso una pagina, viene creata una
- nuova pagina in B, ed il suo contenuto viene inizializzato con i dati di
- A. Tutte le pagine in B possono essere spostate da e verso un dispositivo
- di swap. Quando il programma esegue la fork, il sistema della VM crea
- due nuovi livelli di oggetti&mdash;C1 per il padre e C2 per il
- figlio&mdash;che restano sopra a B:</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="fig3"/>
- </imageobject>
-
- <textobject>
- <literallayout class="monospaced">+-------+-------+
-| C1 | C2 |
-+-------+-------+
-| B |
-+---------------+
-| A |
-+---------------+</literallayout>
- </textobject>
- </mediaobject>
-
- <para>In questo caso, supponiamo che una pagina in B venga modificata dal
- processo genitore. Il processo subirà un fault di copy-on-write e
- duplicherà la pagina in C1, lasciando la pagina originale in B
- intatta.
- Ora, supponiamo che la stessa pagina in B venga modificata dal processo
- figlio. Il processo subirà un fault di copy-on-write e
- duplicherà la pagina in C2.
- La pagina originale in B è ora completamente nascosta poiché
- sia C1 che C2 hanno una copia e B potrebbe teoricamente essere distrutta
- (se non rappresenta un <quote>vero</quote> file);
- comunque, questo tipo di ottimizzazione non è triviale da
- realizzare perché è di grana molto fine.
- FreeBSD non effettua questa ottimizzazione.
- Ora, supponiamo (come è spesso il caso) che
- il processo figlio effettui una <function>exec()</function>. Il suo
- attuale spazio di indirizzamento è in genere rimpiazzato da un
- nuovo spazio di indirizzamento rappresentante il nuovo file.
- In questo caso il livello C2 viene distrutto:</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="fig4"/>
- </imageobject>
-
- <textobject>
- <literallayout class="monospaced">+-------+
-| C1 |
-+-------+-------+
-| B |
-+---------------+
-| A |
-+---------------+</literallayout>
- </textobject>
- </mediaobject>
-
- <para>In questo caso, il numero di figli di B scende a uno, e tutti gli
- accessi a B avvengono attraverso C1. Ciò significa che B e C1
- possono collassare insieme in un singolo strato.
- Ogni pagina in B che esista anche in C1 viene cancellata da
- B durante il crollo. Dunque, anche se l'ottimizzazione nel passo
- precedente non era stata effettuata, possiamo recuperare le pagine morte
- quando il processo esce o esegue una <function>exec()</function>.</para>
-
- <para>Questo modello crea un bel po' di problemi potenziali. Il primo
- è che ci si potrebbe ritrovare con una pila abbastanza profonda di
- Oggetti VM incolonnati che costerebbe memoria e tempo per la ricerca
- quando accadesse un fault. Può verificarsi un ingrandimento della
- pila quando un processo esegue una fork dopo l'altra (che sia il padre o
- il figlio). Il secondo problema è che potremmo ritrovarci con
- pagine morte, inaccessibili nella profondità della pila degli
- Oggetti VM. Nel nostro ultimo esempio se sia il padre che il figlio
- modificano la stessa pagina, entrambi hanno una loro copia della pagina e
- la pagina originale in B non è più accessibile
- da nessuno. Quella pagina in B può essere liberata.</para>
-
- <para>FreeBSD risolve il problema della profondità dei livelli con
- un'ottimizzazione speciale detta <quote>All Shadowed Case</quote> (caso
- dell'oscuramento totale).
- Questo caso accade se C1 o C2 subiscono sufficienti COW fault (COW
- è l'acronimo che sta per copy on write) da oscurare completamente
- tutte le pagine in B.
- Ponimo che C1 abbia raggiunto questo livello. C1 può ora
- scavalcare B del tutto, dunque invece di avere C1-&gt;B-&gt;A e C2-&gt;B-&gt;A adesso
- abbiamo C1-&gt;A e C2-&gt;B-&gt;A.
- ma si noti cos'altro è accaduto&mdash;ora B ha solo un riferimento
- (C2), dunque possiamo far collassare B e C2 insieme.
- Il risultato finale è che B viene cancellato
- interamente e abbiamo C1-&gt;A e C2-&gt;A. Spesso accade che B contenga un
- grosso numero di pagine e ne' C1 ne' C2 riescano a oscurarlo
- completamente. Se eseguiamo una nuova fork e creiamo un insieme di
- livelli D, comunque, è molto più probabile che uno dei
- livelli D sia eventualmente in grado di oscurare completamente l'insieme
- di dati più piccolo rappresentato da C1 o C2. La stessa
- ottimizzazione funzionerà in ogni punto nel grafico ed il
- risultato di ciò è che anche su una macchina con
- moltissime fork le pile degli Oggetti VM tendono a non superare una
- profondità di 4. Ciò è vero sia per il padre che per
- il figlio ed è vero nel caso sia il padre a eseguire la fork ma
- anche se è il figlio a eseguire fork in cascata.</para>
-
- <para>Il problema della pagina morta esiste ancora nel caso C1 o C2 non
- oscurino completamente B. A causa delle altre ottimizzazioni questa
- eventualità
- non rappresenta un grosso problema e quindi permettiamo semplicemente
- alle pagine di essere morte. Se il sistema si trovasse con poca memoria
- le manderebbe in swap, consumando un po' di swap, ma così
- è.</para>
-
- <para>Il vantaggio del modello ad Oggetti VM è che
- <function>fork()</function> è estremamente veloce, poiché
- non deve aver luogo nessuna copia di dati effettiva. Lo svantaggio
- è che è possibile costruire un meccanismo a livelli di
- Oggetti VM relativamente complesso che rallenterebbe la gestione dei page
- fault, e consumerebbe memoria gestendo le strutture degli Oggetti VM.
- Le ottimizazioni realizzate da FreeBSD danno prova di ridurre
- i problemi abbastanza da poter essere ignorati, non lasciando
- nessuno svantaggio reale.</para>
- </sect1>
-
- <sect1 xml:id="swap-layers">
- <title>Livelli di SWAP</title>
-
- <para>Le pagine di dati private sono inizialmente o pagine
- copy-on-write o pagine zero-fill.
- Quando avviene un cambiamento, e dunque una copia, l'oggetto di copia
- originale (in genere un file) non può più essere utilizzato
- per salvare la copia quando il sistema della VM ha bisogno di
- riutilizzarla per altri scopi. A questo punto entra in gioco lo SWAP. Lo
- SWAP viene allocato per creare spazio dove salvare memoria che altrimenti
- non sarebbe disponibile. FreeBSD alloca la struttura di gestione di
- un Oggetto VM solo quando è veramente necessario.
- Ad ogni modo, la struttura di gestione dello swap ha avuto storicamente
- dei problemi.</para>
-
- <para>Su FreeBSD 3.X la gestione della struttura di swap prealloca un
- array che contiene l'intero oggetto che necessita di subire
- swap&mdash;anche se solo poche pagine di quell'oggetto sono effettivamente
- swappate questo crea una frammentazione della memoria del kernel quando
- vengono mappati oggetti grandi, o processi con grandi dimensioni
- all'esecuzione (large runsizes, RSS). Inoltre, per poter tenere traccia
- dello spazio di swap, viene mantenuta una <quote>lista dei buchi</quote>
- nella memoria del kernel, ed anche questa tende ad essere pesantemente
- frammentata. Poiché la <quote>lista dei buchi</quote> è una
- lista lineare, l'allocazione di swap e la liberazione hanno prestazioni
- non ottimali O(n) per ogni pagina.
- Questo richiede anche che avvengano allocazioni di memoria
- durante il processo di liberazione dello swap, e questo crea
- problemi di deadlock, blocchi senza uscita, dovuti a scarsa memoria.
- Il problema è ancor più esacerbato dai buchi creati a causa
- dell'algoritmo di interleaving.
- Inoltre il blocco di swap può divenire frammentato molto facilmente
- causando un'allocazione non contigua. Anche la memoria del Kernel deve
- essere allocata al volo per le strutture aggiuntive di gestione dello
- swap quando avviene uno swapout. È evidente che c'era molto spazio
- per dei miglioramenti.</para>
-
- <para>Per FreeBSD 4.X, ho completamente riscritto il sottosistema di swap.
- Con questa riscrittura, le strutture di gestione dello swap vengono
- allocate attraverso una tabella di hash invece che con un array lineare
- fornendo una dimensione di allocazione fissata e una granularità
- molto maggiore.
- Invece di usare una lista lineare collegata per tenere traccia delle
- riserve di spazio di swap, essa usa una mappa di bit di blocchi di swap
- organizzata in una struttura ad albero radicato con riferimenti allo
- spazio libero nelle strutture nei nodi dell'albero. Ciò rende in
- effetti l'operazione di allocazione e liberazione delle risorse
- un'operazione O(1).
- L'intera mappa di bit dell'albero radicato viene anche preallocata in modo
- da evitare l'allocazione di memoria kernel durante le operazioni di swap
- critiche nei momenti in cui la memoria disponibile è ridotta.
- Dopo tutto, il sistema tende a fare uso dello swap quando ha poca memoria
- quindi dovremmo evitare di allocare memoria per il kernel in quei momenti
- per poter evitare potenziali deadlock. Infine, per ridurre la
- frammentazione l'albero radicato è in grado di allocare grandi
- spezzoni contigui in una volta, saltando i pezzetti frammentati.
- Non ho ancora compiuto il passo finale di avere un <quote>puntatore di
- supportoall'allocazione</quote> che scorra su una porzione di swap nel
- momento in cui vengano effettuate delle allocazioni, in modo da garantire
- ancor di più le allocazioni contigue o almeno una località
- nel riferimento, ma ho assicurato che un'aggiunta simile possa essere
- effettuata.</para>
- </sect1>
-
- <sect1 xml:id="freeing-pages">
- <title>Quando liberare una pagina</title>
-
- <para>Poiché il sistema della VM usa tutta la memoria disponibile
- per il caching del disco, in genere ci sono pochissime pagine veramente
- libere. Il sistema della VM dipende dalla possibilità di
- scegliere in maniera appropriata le pagine che non sono in uso per
- riusarle in nuove allocazioni. Selezionare le pagine ottimali da liberare
- è forse la funzione singola più importante che possa essere
- eseguita da una VM perché se si effettua una selezione non
- accurata, il sistema della VM può essere forzato a recuperare
- pagine dal disco in modo non necessari, degradando seriamente le
- prestazioni del sistema.</para>
-
- <para>Quanto sovraccarico siamo disposti a sopportare nel percorso critico
- per evitare di liberare la pagina sbagliata? Ogni scelta sbagliata che
- facciamo ci costerà centinaia di migliaia di cicli di CPU ed uno
- stallo percettibile nei processi coinvolti, dunque permettiamo un
- sovraccarico significativo in modo da poter avere la certezza che la
- pagina scelta sia quella giusta.
- Questo è il motivo per cui FreeBSD tende ad avere prestazioni
- migliori di altri sistemi quando le risorse di memoria vengono
- stressate.</para>
-
- <para>L'algoritmo di determinazione della pagina da liberare
- è costruito su una storia di uso delle pagine di memoria.
- Per acquisire tale storia, il sistema si avvantaggia di una
- caratteristica della maggior parte dell'hardware moderno, il bit che
- indica l'attività di una pagina (page-used bit).</para>
-
- <para>In qualsiasi caso, il page-used bit viene azzerato e in un momento
- seguente il sistema della VM passa di nuovo sulla pagina e vede che il
- page-used bit è stato di nuovo attivato. Questo indica che la
- pagina viene ancora usata attivamente.
- Il bit ancora disattivato è un indice che quella pagina non viene
- usata attivamente.
- Controllando questo bit periodicamente, viene sviluppata una storia
- d'uso (in forma di contatore) per la pagina fisica. Quando il sistema
- della VM avrà bisogno di liberare delle pagine, controllare questa
- storia diventa la pietra angolare nella determinazione del candidato
- migliore come pagina da riutilizzare.</para>
-
- <sidebar>
- <title>E se l'hardware non ha un page-used bit?</title>
-
- <para>Per quelle piattaforme che non hanno questa caratteristica, il
- sistema in effetti emula un page-used bit. Esso elimina la mappatura di
- una pagina, o la protegge, forzando un page fault se c'è un
- accesso successivo alla pagina.
- Quando avviene il page fault, il sistema segnala semplicemente
- la pagina come usata e la sprotegge in maniera che possa essere usata.
- Mentre prendere tale page fault solo per determinare se una pagina
- è in uso può apparire una scelta costosa, in realtà
- essa lo è molto meno che riusare la pagina per altri scopi, per
- dover poi scoprire che un processo ne aveva ancora bisogno e dovere
- andare a cercarla di nuovo su disco.</para>
- </sidebar>
-
- <para>FreeBSD fa uso di parecchie code per le pagine per raffinare
- ulteriormente la selezione delle pagine da riutilizzare, come anche per
- determinare quando le pagine sporche devono essere spostate dalla memoria
- e immagazzinate da qualche parte. Poiché le tabelle delle pagine
- sono entità dinamiche in FreeBSD, non costa praticamente nulla
- eliminare la mappatura di una pagina dallo spazio di indirizzamento di un
- qualsiasi processo che la stia usando. Quando una pagina candidata
- è stata scelta sulla base del contatore d'uso, questo è
- esattamente quello che viene fatto.
- Il sistema deve effettuare una distinzione tra pagine pulite che
- possono essere teoricamente liberate in qualsiasi momento, e pagine
- sporche che devono prima essere scritte (salvate) per poter essere
- riutilizzabili.
- Quando una pagina candidata viene trovata viene spostata nella coda
- delle pagine inattive, se è una pagina sporca, o nella coda di
- cache se è pulita.
- Un algoritmo separato basato su un rapporto sporche/pulite
- determina quando le pagine sporche nella coda inattiva devono essere
- scritte su disco. Una volta che è stato fatto questo, le pagine
- ormai salvate vengono spostate dalla coda delle inattive alla coda di
- cache. A questo punto, le pagine nella coda di cache possono ancora
- essere riattivate da un VM fault ad un costo relativamente basso.
- Ad ogni modo, le pagine nella coda di cache vengono considerate
- <quote>immediatamente liberabili</quote> e verranno riutilizzate con un
- metodo LRU (least-recently used <footnote>
- <para>Usate meno recentemente. Le pagine che non vengono usate da molto
- tempo probabilmente non saranno necessarie a breve, e possono essere
- liberate.</para>
- </footnote>) quando il sistema avrà bisogno di allocare nuova
- memoria.</para>
-
- <para>È importante notare che il sistema della VM di FreeBSD tenta
- di separare pagine pulite e sporche per l'espressa ragione di evitare
- scritture non necessarie di pagine sporche (che divorano banda di I/O), e
- non sposta le pagine tra le varie code gratuitamente quando il
- sottosistema non viene stressato. Questo è il motivo per cui
- dando un <command>systat -vm</command> vedrai sistemi con contatori della
- coda di cache bassi e contatori della coda delle pagine attive molto alti.
- Quando il sistema della VM diviene maggiormente stressato, esso fa un
- grande sforzo per mantenere le varie code delle pagine ai livelli
- determinati come più efficenti.
- Per anni è circolata la leggenda urbana che Linux facesse un lavoro
- migliore di FreeBSD nell'evitare gli swapout, ma in pratica questo non
- è vero. Quello che stava effettivamente accadendo era che FreeBSD
- stava salvando le pagine inutilizzate proattivamente per fare spazio
- mentre Linux stava mantendendo le pagine inutilizzate lasciando meno
- memoria disponibile per la cache e le pagine dei processi.
- Non so se questo sia vero ancora oggi.</para>
- </sect1>
-
- <sect1 xml:id="prefault-optimizations">
- <title>Pre-Faulting e Ottimizzazioni di Azzeramento</title>
-
- <para>Subire un VM fault non è costoso se la pagina sottostante
- è già nella memoria fisica e deve solo essere mappata di
- nuovo nel processo, ma può divenire costoso nel caso se ne
- subiscano un bel po' su base regolare. Un buon esempio di ciò si
- ha eseguendo un programma come &man.ls.1; o &man.ps.1; ripetutamente.
- Se il binario del programma è mappato in memoria ma non nella
- tabella delle pagine, allora tutte le pagine che verranno accedute dal
- programmma dovranno generare un page fault ogni volta che il programma
- viene eseguito.
- Ciò non è necessario quando le pagine in questione sono
- già nella cache della VM, quindi FreeBSD tenterà di
- pre-popolare le tabelle delle pagine di un processo con quelle pagine che
- sono già nella VM Cache. Una cosa che FreeBSD non fa ancora
- è effettuare il pre-copy-on-write di alcune pagine nel caso di una
- chiamata a exec.
- Ad esempio, se esegui il programma &man.ls.1; mentre stai eseguendo
- <command>vmstat 1</command> noterai che subisce sempre un certo numero
- di page fault, anche eseguendolo ancora e ancora. Questi sono
- zero-fill fault, legati alla necessità di azzerare memoria,
- non program code fault, legati alla copia dell'eseguibile in memoria
- (che erano già stati gestiti come pre-fault).
- Pre-copiare le pagine all'exec o alla fork è un'area che potrebbe
- essere soggetta a maggior studio.</para>
-
- <para>Una larga percentuale dei page fault che accadono è composta di
- zero-fill fault. In genere è possibile notare questo fatto
- osservando l'output di <command>vmstat -s</command>.
- Questi accadono quando un processo accede a pagine nell'area del BSS.
- Ci si aspetta che l'area del BSS sia composta inizialmente da zeri
- ma il sistema della VM non si preoccupa di allocare nessuna memoria
- finché il processo non ne ha effettivamente bisogno.
- Quindi nel momento in cui accade un fault il sistema della VM non
- deve solo allocare una nuova pagina, ma deve anche azzerarla.
- Per ottimizzare l'operazione di azzeramento, il sistema della VM
- ha la capacità di pre-azzerare le pagine e segnalarle come tali,
- e di richiedere pagine pre-azzerate quando avvengono zero-fill fault.
- Il pre-azzeramento avviene quando la CPU è inutilizzata ma il
- numero di pagine che vengono pre-azzerate dal sistema è limitato
- per evitare di spazzare via la cache della memoria. Questo è un
- eccellente esempio di complessità aggiunta al sistema della VM per
- ottimizare il percorso critico.</para>
- </sect1>
-
- <sect1 xml:id="page-table-optimizations">
- <title>Ottimizzazioni della Tabella delle Pagine </title>
-
- <para>Le ottimizzazioni alla tabella delle pagine costituiscono
- La parte più controversa nel design della VM di FreeBSD ed ha
- mostrato un po' di affanno con l'avvento di un uso pesante di
- <function>mmap()</function>.
- Penso che questa sia una caratteristiche della maggior parte dei
- BSD anche se non sono sicuro di quando è stata introdotta
- la prima volta. Ci sono due ottimizzazioni maggiori. La prima è
- che le tabelle della pagine hardware non contengono uno stato persistente
- ma possono essere gettate via in qualsiasi momento con un sovraccarico di
- gestione minimo.
- La seconda è che ogni pagina attiva nel sistema ha una struttura di
- controllo <literal>pv_entry</literal> che è integrata con la
- struttura <literal>vm_page</literal>. FreeBSD può semplicemente
- operare attraverso quelle mappature di cui è certa l'esistenza,
- mentre Linux deve controllare tutte le tabelle delle pagine che
- <emphasis>potrebbero</emphasis> contenere una mappatura specifica per
- vedere se lo stanno effettivamente facendo, il che può portare ad
- un sovraccarico computazionale O(n^2) in alcune situazioni.
- È per questo che FreeBSD tende a fare scelte migliori su quale
- pagina riutilizzare o mandare in swap quando la memoria è messa
- sotto sforzo, fornendo una miglior performance sotto carico. Comunque,
- FreeBSD richiede una messa a punto del kernel per accomodare situazioni
- che richiedano grandi spazi di indirizzamento condivisi, come quelli che
- possono essere necessari in un sistema di news perché potrebbe
- esaurire il numero di struct <literal>pv_entry</literal>.</para>
-
- <para>Sia Linux che FreeBSD necessitano di lavoro in quest'area.
- FreeBSD sta cercando di massimizzare il vantaggio di avere un modello di
- mappatura attiva potenzialmente poco denso (non tutti i processi hanno
- bisogno di mappare tutte le pagine di una libreria condivisa, ad esempio),
- mentre linux sta cercando di semplificare i suoi algoritmi. FreeBSD
- generalmente ha dei vantaggi prestazionali al costo di un piccolo spreco
- di memoria in più, ma FreeBSD crolla nel caso in cui un grosso file
- sia condiviso massivamente da centinaia di processi.
- Linux, d'altro canto, crolla nel caso in cui molti processi mappino a
- macchia di leopardo la stessa libreria condivisa e gira in maniera non
- ottimale anche quando cerca di determinare se una pagina deve essere
- riutilizzata o no.</para>
- </sect1>
-
- <sect1 xml:id="page-coloring-optimizations">
- <title>Colorazione delle Pagine</title>
-
- <para>Concluderemo con le ottimizzazioni di colorazione delle pagine.
- La colorazione delle pagine è un'ottimizzazione prestazionale
- progettata per assicurare che gli accessi a pagine contigue nella memoria
- virtuale facciano il miglior uso della cache del processore. Nei
- tempi antichi (cioè più di 10 anni fa) le cache dei
- processori tendevano a mapparela memoria virtuale invece della memoria
- fisica. Questo conduceva ad un numero enorme di problemi inclusa la
- necessità di ripulire la cache ad ogni cambio di contesto, in
- alcuni casi, e problemi con l'aliasing dei dati nella cache.
- Le cache dei processori moderni mappano la memoria fisica proprio per
- risolvere questi problemi.
- Questo significa che due pagine vicine nello spazio di indirizzamento
- dei processi possono non corrispondere a due pagine vicine nella cache.
- In effetti, se non si è attenti pagine affiancate nella memoria
- virtuale possono finire con l'occupare la stessa pagina nella cache del
- processore&mdash;portando all'eliminazione prematura di dati
- immagazzinabili in cache e riducendo le prestazioni della cache.
- Ciò è vero anche con cache set-associative <footnote>
- <para>set-associative sta per associative all'interno di un insieme, in
- quanto c'è un insieme di blocchi della cache nei quale puo
- essere mappato un elemento della memoria fisica.</para>
- </footnote> a molte vie (anche se l'effetto viene in qualche maniera
- mitigato).</para>
-
- <para>Il codice di allocazione della memoria di FreeBSD implementa
- le ottimizizzazioni di colorazione delle pagine, ciò significa che
- il codice di allocazione della memoria cercherà di trovare delle
- pagine libere che siano vicine dal punto di vista della cache.
- Ad esempio, se la pagina 16 della memoria fisica è assegnata
- alla pagina 0 della memoria virtuale di un processo e la cache può
- contenere 4 pagine, il codice di colorazione delle pagine non
- assegnerà la pagina 20 di memoria fisica alla pagina 1 di
- quella virtuale.
- Invece, gli assegnerà la pagina 21 della memoria fisica.
- Il codice di colorazione delle pagine cerca di evitare l'assegnazione
- della pagina 20 perché questa verrebbe mappata sopra lo stesso
- blocco di memoria cache della pagina 16 e ciò causerrebbe un uso
- non ottimale della cache.
- Questo codice aggiunge una complessità significativa
- al sottosistema di allocazione memoria della VM, come si può ben
- immaginare, ma il gioco vale ben più della candela. La colorazione
- delle pagine rende la memoria virtuale deterministica quanto la memoria
- fisica per quel che riguarda le prestazioni della cache.</para>
- </sect1>
-
- <sect1 xml:id="conclusion">
- <title>Conclusione</title>
-
- <para>La memoria virtuale nei sistemi operativi moderni deve affrontare
- molti problemi differenti efficientemente e per molti diversi tipi di uso.
- L'approccio modulare ed algoritmico che BSD ha storicamente seguito ci
- permette di studiare e comprendere l'implementazione attuale cosi come di
- poter rimpiazzare in maniera relativamente pulita grosse sezioni di
- codice. Ci sono stati un gran numero di miglioramenti al sistema della
- VM di FreeBSD negli ultimi anni, ed il lavoro prosegue.</para>
- </sect1>
-
- <sect1 xml:id="allen-briggs-qa">
- <title>Sessione Bonus di Domande e Risposte di Allen Briggs
- <email>briggs@ninthwonder.com</email></title>
-
- <qandaset>
- <qandaentry>
- <question>
- <para>Cos'è <quote>l'algoritmo di interleaving</quote> a cui
- fai riferimento nell'elenco delle debolezze della gestione dello
- swap in FreeBSD 3.X ?</para>
- </question>
-
- <answer>
- <para>FreeBSD usa un intervallo tra zone di swap fissato, con un
- valore predefinito di 4. Questo significa che FreeBSD riserva
- spazio per quattro aree di swap anche se ne hai una sola o due o
- tre. Poiché lo swap è intervallato lo spazio di
- indirizzamento lineare che rappresenta le <quote>quattro aree di
- swap</quote> verrà frammentato se non si possiedono
- veramente quattro aree di swap. Ad esempio, se hai due aree di
- swap A e B la rappresentazione dello spazio di FreeBSD per
- quell'area di swap verrà interrotta in blocchi di 16
- pagine:</para>
-
- <literallayout>A B C D A B C D A B C D A B C D</literallayout>
-
- <para>FreeBSD 3.X usa una <quote>lista sequenziale delle
- regioni libere </quote> per registrare le aree di swap libere.
- L'idea è che grandi blocchi di spazio libero e lineare
- possano essere rappresentati con un nodo singolo
- (<filename>kern/subr_rlist.c</filename>).
- Ma a causa della frammentazione la lista sequenziale risulta
- assurdamente frammentata.
- Nell'esempio precedente, uno spazio di swap completamente non
- allocato farà si che A e B siano mostrati come
- <quote>liberi</quote> e C e D come <quote>totalmente
- allocati</quote>. Ogni sequenza A-B richiede un nodo per essere
- registrato perché C e D sono buchi, dunquei nodi di lista non
- possono essere combinati con la sequenza A-B seguente.</para>
-
- <para>Perché organizziamo lo spazio in intervalli invece di
- appiccicare semplicemente le area di swap e facciamo qualcosa di
- più carino? Perché è molto più semplice
- allocare strisce lineari di uno spazio di indirizzamento ed ottenere
- il risultato già ripartito tra dischi multipli piuttosto che
- cercare di spostare questa complicazione altrove.</para>
-
- <para>La frammentazione causa altri problemi. Essendoci una lista
- lineare nella serie 3.X, ed avendo una tale quantità di
- frammentazione implicita, l'allocazione e la liberazione dello swap
- finisce per essere un algoritmo O(N) invece di uno O(1).
- Combinalo con altri fattori (attività di swap pesante)
- e comincerai a trovarti con livelli di overhead come O(N^2) e
- O(N^3), e ciò è male. Il sistema dela serie 3.X
- può anche avere necessità di allocare KVM durante
- un'operazione di swap per creare un nuovo nodo lista, il che
- può portare ad un deadlock se il sistema sta cercando di
- liberare pagine nella memoria fisica in un momento di
- scarsità di memoria.</para>
-
- <para>Nella serie 4.X non usiamo una lista sequenziale. Invece usiamo
- un albero radicato e mappe di bit di blocchi di swap piuttosto che
- nodi lista.
- Ci prendiamo il peso di preallocare tutte le mappe di bit richieste
- per l'intera area di swap ma ciò finisce per consumare meno
- memoria grazie all'uso di una mappa di bit (un bit per blocco)
- invece di una lista collegata di nodi. L'uso di un albero radicato
- invece di una lista sequenziale ci fornisce una performance quasi
- O(1) qualunque sia il livello di frammentazione dell'albero.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Non ho capito questo:</para>
-
- <blockquote>
- <para>È importante notare che il sistema della VM di FreeBSD
- tenta di separare pagine pulite e sporche per l'espressa ragione di
- evitare scritture non necessarie di pagine sporche (che divorano
- banda di I/O), e non sposta le pagine tra le varie code
- gratuitamente se il sottosistema non viene stressato. Questo
- è il motivo per cui dando un <command>systat -vm</command>
- vedrai sistemi con contatori della coda di cache bassi e contatori
- della coda delle pagine attive molto alti.</para>
- </blockquote>
-
- <para>Come entra in relazione la separazione delle pagine pulite e
- sporche (inattive) con la situazione nella quale vediamo contatori
- bassi per la coda di cache e valori alti per la coda delle pagine
- attive in <command>systat -vm</command>? I dati di systat derivano
- da una fusione delle pagine attive e sporche per la coda delle
- pagine attive?</para>
- </question>
-
- <answer>
- <para>Si, questo può confondere. La relazione è
- <quote>obiettivo</quote> contro <quote>realtà</quote>. Il
- nostro obiettivo è separare le pagine ma la realtà
- è che se non siamo in crisi di memoria, non abbiamo bisogno
- di farlo.</para>
-
- <para>Questo significa che FreeBSD non cercherà troppo di
- separare le pagine sporche (coda inattiva) da quelle pulite
- (code della cache), ne cercherà di disattivare le pagine
- (coda pagine attive -&gt; coda pagine inattive) quando il sistema non
- è sotto sforzo, anche se non vengono effettivamente
- usate.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para> Nell'esempio di &man.ls.1; / <command>vmstat 1</command>,
- alcuni dei page fault non potrebbero essere data page faults
- (COW da file eseguibili a pagine private)? Cioè, io mi
- aspetterei che i page fault fossero degli zero-fill e dei dati di
- programma. O si implica che FreeBSD effettui il pre-COW per i dati
- di programma?</para>
- </question>
-
- <answer>
- <para>Un fault COW può essere o legato a uno zero-fill o a dati
- di programma.
- Il meccanismo è lo stesso in entrambi i casi poiché
- i dati di programma da copiare sono quasi certamente già
- presenti nella cache. E infatti li tratto insieme. FreeBSD non
- effettua preventivamentela copia dei dati di programma o lo
- zero-fill, <emphasis>effettua</emphasis> la mappatura preventiva
- delle pagine che sono presenti nella sua cache.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Nella sezione sull'ottimizzazione della tabella delle pagine,
- potresti fornire maggiori dettagli su <literal>pv_entry</literal> e
- <literal>vm_page</literal> (forse vm_page dovrebbe essere
- <literal>vm_pmap</literal>&mdash;come in 4.4, cf. pp. 180-181 di
- McKusick, Bostic, Karel, Quarterman)? Specificamente, che tipo di
- operazioni/reazioni richiederebbero la scansione delle
- mappature?</para>
-
- <para>Come funziona Linux nel caso in cui FreeBSD fallisce
- (la condivisione di un grosso file mappato tra molti
- processi)?</para>
- </question>
-
- <answer>
- <para>Una <literal>vm_page</literal> rappresenta una tupla
- (oggetto,indice#).
- Una <literal>pv_entry</literal> rappresenta una voce nella tabella
- delle pagine hardware (pte). Se hai cinque processi che condividono
- la stessa pagina fisica, e tre delle tabelle delle pagine di questi
- processi mappano effettivamente la pagina, questa pagina
- verrà rappresentata da una struttura
- <literal>vm_page</literal> singola e da tre strutture
- <literal>pv_entry</literal>.</para>
-
- <para>Le strutture <literal>pv_entry</literal> rappresentano solo
- le pagine mappate dalla MMU (una <literal>pv_entry</literal>
- rappresenta un pte). Ciò significa che è necessario
- rimuovere tutti i riferimenti hardware a <literal>vm_page</literal>
- (in modo da poter riutilizzare la pagina per qualcos'altro,
- effettuare il page out, ripulirla, sporcarla, e così via)
- possiamo semplicemente scansionare la lista collegata di
- <literal>pv_entry</literal> associate con quella
- <literal>vm_page</literal> per rimuovere o modificare i pte
- dalla loro tabella delle pagine.</para>
-
- <para>Sotto Linux non c'è una lista collegata del genere. Per
- poter rimuovere tutte le mappature della tabella delle pagine
- hardware per una <literal>vm_page</literal> linux deve indicizzare
- ogni oggetto VM che <emphasis>potrebbe</emphasis> aver mappato la
- pagina. Ad esempio, se si hanno 50 processi che mappano la stessa
- libreria condivisa e si vuole liberarsi della pagina X in quella
- libreria, sarà necessario cercare nella tabella delle pagine
- per ognuno dei 50 processi anche se solo 10 di essi ha
- effettivamente mappato la pagina. Così Linux sta barattando
- la semplicità del design con le prestazioni. Molti algoritmi
- per la VM che sono O(1) o (piccolo N) in FreeBSD finiscono per
- diventare O(N), O(N^2), o anche peggio in Linux.
- Poiché i pte che rappresentano una particolare pagina in un
- oggetto tendono ad essere allo stesso offset in tutte le tabelle
- delle pagine nelle quali sono mappati, la riduzione del numero di
- accessi alla tabela delle pagine allo stesso offset eviterà
- che la la linea di cache L1 per quell'offset venga cancellata,
- portando ad una performance migliore.</para>
-
- <para>FreeBSD ha aggiunto complessità (lo schema
- <literal>pv_entry</literal>) in modo da incrementare le prestazioni
- (per limitare gli accessi alla tabella delle pagine
- <emphasis>solo</emphasis> a quelle pte che necessitino di essere
- modificate).</para>
-
- <para>Ma FreeBSD ha un problema di scalabilità che linux non ha
- nell'avere un numero limitato di strutture
- <literal>pv_entry</literal> e questo provoca problemi quando si
- hanno condivisioni massicce di dati. In questo caso c'è la
- possibilità che finiscano le strutture
- <literal>pv_entry</literal> anche se c'è ancora una grande
- quantità di memoria disponibile.
- Questo può essere risolto abbastanza facilmente
- aumentando il numero di struttre <literal>pv_entry</literal> nella
- configurazione del kernel, ma c'è veramente bisogno di
- trovare un modo migliore di farlo.</para>
-
- <para>Riguardo il sovrapprezzo in memoria di una tabella delle pagine
- rispetto allo schema delle <literal>pv_entry</literal>: Linux usa
- tabelle delle pagine <quote>permanenti</quote> che non vengono
- liberate, ma non necessita una <literal>pv_entry</literal> per ogni
- pte potenzialmente mappato.
- FreeBSD usa tabelle delle pagine <quote>throw away</quote>,
- eliminabili, ma aggiunge una struttura <literal>pv_entry</literal>
- per ogni pte effettivamente mappato. Credo che l'utilizzo della
- memoria finisca per essere più o meno lo stesso, fornendo a
- FreeBSD un vantaggio algoritmico con la capacità di
- eliminare completamente le tabelle delle pagine con un
- sovraccarico prestazionale minimo.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Infine, nella sezione sulla colorazione delle pagine, potrebbe
- esser d'aiuto avere qualche descrizione in più di quello che
- intendi. Non sono riuscito a seguire molto bene.</para>
- </question>
-
- <answer>
- <para>Sai come funziona una memoria cache hardware L1? Spiego:
- Considera una macchina con 16MB di memoria principale ma solo 128K
- di cache L1. In genere il modo in cui funziona la cache è
- che ogni blocco da 128K di memoria principale usa gli
- <emphasis>stessi</emphasis> 128K di cache.
- Se si accede all'offset 0 della memoria principale e poi al 128K si
- può finire per cancellare i dati che si erano messi nella
- cache dall'offset 0!</para>
-
- <para>Ora, sto semplificando di molto. Ciò che ho appena
- descritto è quella che viene detta memoria cache a
- <quote>corrispondenza diretta</quote>, o direct mapped.
- La maggior parte delle cache moderne sono quelle che
- vengono dette set-associative a 2 o 4 vie.
- L'associatività di questo tipo permette di accedere fino ad N
- regioni di memoria differenti che si sovrappongano sulla stessa
- cache senza distruggere i dati preventivamente immagazzinati.
- Ma solo N.</para>
-
- <para>Dunque se ho una cache set associativa a 4 vie posso accedere
- agli offset 0, 128K, 256K 384K ed essere ancora in grado di
- accedere all'offset 0 ritrovandolo nella cache L1. Se poi accedessi
- all'offset 512K, ad ogni modo, uno degli oggetti dato immagazzinati
- precedentemente verrebbero cancellati dalla cache.</para>
-
- <para>È estremamente importante &hellip;
- <emphasis>estremamente</emphasis> importante che la maggior parte
- degli accessi del processore alla memoria vengano dalla cache L1,
- poiché la cache L1 opera alla stessa frequenza del
- processore. Nel momento in cui si ha un miss <footnote>
- <para>Un miss nella cache è equivalente a un page fault per
- la memoria fisica, ed allo stesso modo implica un accesso a
- dispositivi molto più lenti, da L1 a L2 come da RAM a
- disco.</para>
- </footnote> nella cache L1 si deveandare a cercare nella cache L2 o
- nella memoria principale, il processore andrà in stallo, e
- potenzialmente potrà sedersi a girarsi i pollici per un tempo
- equivalente a <emphasis>centinaia</emphasis> di istruzioni
- attendendo che la lettura dalla memoria principale venga
- completata. La memoria principale (la RAM che metti nel tuo
- computer) è <emphasis>lenta</emphasis>, se comparata alla
- velocità del nucleo di un moderno processore.</para>
-
- <para>Ok, ora parliamo della colorazione dele pagine:
- tutte le moderne cache sono del tipo noto come cache
- <emphasis>fisiche</emphasis>. Esse memorizzano indirizzi di memoria
- fisica, non indirizzi di memoria virtual. Ciò permette alla
- cache di rimanere anche nel momento in cui ci sia un cambio di
- contesto tra processi, e ciò è molto
- importante.</para>
-
- <para>Ma nel mondo &unix; devi lavorare con spazi di indirizzamento
- virtuali, non con spazi di indirizzamento fisici. Ogni programma
- che scrivi vedrà lo spazio di indirizzamento virtuale
- assegnatogli. Le effettive pagine <emphasis>fisiche</emphasis>
- nascoste sotto quello spazio di indirizzi virtuali
- non saranno necessariamente contigue fisicamente! In effetti,
- potresti avere due pagine affiancate nello spazio di
- indirizzamento del processo cge finiscono per trovarsi agli
- offset 0 e 128K nella memoria <emphasis>fisica</emphasis>.</para>
-
- <para>Un programma normalmente assume che due pagine
- affiancate verranno poste in cache in maniera ottimale.
- Cioè, che possa accedere agli oggetti dato in
- entrambe le pagine senza che esse si cancellino a vicenda le
- rispettiva informazioni in cache.
- Ma ciò è vero solo se le pagine fisiche sottostanti lo
- spazio di indirizzo virtuale sono contigue (per quel che riguarda
- la cache).</para>
-
- <para>Questo è ciò che viene fatto dalla colorazione
- delle pagine.
- Invece di assegnare pagine fisiche <emphasis>casuali</emphasis> agli
- indirizzi virtuali, che potrebbe causare prestazioni non ottimali
- della cache, la colorazione dele pagine assegna pagine fisiche
- <emphasis>ragionevolmente contigue</emphasis>.
- Dunque i programmi possono essere scritti assumendo che
- le caratteristiche per lo spazio di indirizzamento virtuale del
- programma della cache hardware sottostante siano uguali a come
- sarebbero state se avessero usato lo spazio di indirizzamento
- fisico.</para>
-
- <para>Si note ho detto <quote>ragionevolmente</quote> contigue invece
- che semplicemente <quote>contigue</quote>. Dal punto di vista di
- una cache di 128K a corrispondenza diretta, l'indirizzo fisico 0
- è lo stesso che l'indirizzo fisico 128K.
- Dunque due agine affiancate nello spzio di indirizzamento virtuale
- potrebbero finire per essere all'offset 128K e al 132K nella memoria
- fisica, ma potrebbero trovarsi tranquillamente anche agli offset
- 128K e 4K della memoria fisica e mantenera comunque le stesse
- caratteristiche prestazionali nei riguardi della cache. Dunque la
- colorazione delle pagine <emphasis>non</emphasis> deveassegnare
- pagine di memoria fisica veramente contigue a pagine di memoria
- virtuale contigue, deve solo assicurarsi che siano assegnate pagine
- contigue dal punto di vista delle prestazioni/operazioni della
- cache.</para>
- </answer>
- </qandaentry>
- </qandaset>
- </sect1>
-</article>