diff options
Diffstat (limited to 'it_IT.ISO8859-15/articles')
-rw-r--r-- | it_IT.ISO8859-15/articles/Makefile | 12 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/Makefile.inc | 5 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/committers-guide/Makefile | 21 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/committers-guide/article.xml | 1818 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/explaining-bsd/Makefile | 19 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/explaining-bsd/article.xml | 615 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/filtering-bridges/Makefile | 18 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/filtering-bridges/article.xml | 429 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/new-users/Makefile | 18 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/new-users/article.xml | 1073 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/vm-design/Makefile | 22 | ||||
-rw-r--r-- | it_IT.ISO8859-15/articles/vm-design/article.xml | 1036 |
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 — - 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—non solo un'area - specifica—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><</literal>, - <literal>=</literal> e <literal>></literal>. Per ogni conflitto, - ci sarà una linea di demarcazione formata da sette - <literal><</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>></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" >> ~/.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–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 © <Year> <Author>. 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 – 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 \ - > /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&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&T Research, che è anche - l'antenato del moderno &unix; System V. Questo potrebbe sorprendere. - Come è potuto accadere questo, se la AT&T non ha mai rilasciato - il suo codice come open source?</para> - - <para>È vero che lo &unix; AT&T non è open source, e nel - senso del copyright BSD in definitiva <emphasis>non è</emphasis> - &unix;, ma d'altro canto l'AT&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&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&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&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&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&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&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=/&URI=/archive/retrieve.cgi%253Fid%253DSB952470579348918651.djm&">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 - ðerexpress; 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; 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;—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)—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—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—e il rischio—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—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—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—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—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—<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—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—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—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)—la seconda edizione con la copertina rossa; - oppure <citetitle>Essential System Administration</citetitle> di - Æleen Frisch (O'Reilly & 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>—è più potente - dell'EDIT del DOS—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 > 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 > 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—del tipo <quote>FreeBSD non trova il mio drive - per i nastri, che cosa faccio?</quote>—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—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 > - 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 & - 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>></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>—il secondo cd del set - di FreeBSD—è - 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—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—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—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—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—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—C1 per il padre e C2 per il - figlio—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->B->A e C2->B->A adesso - abbiamo C1->A e C2->B->A. - ma si noti cos'altro è accaduto—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->A e C2->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—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—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 -> 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>—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 … - <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> |