<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.slacky.eu/wikislack/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
		<id>http://www.slacky.eu/wikislack/api.php?action=feedcontributions&amp;user=Targzeta&amp;feedformat=atom</id>
		<title>Slacky.eu - Contributi utente [it]</title>
		<link rel="self" type="application/atom+xml" href="http://www.slacky.eu/wikislack/api.php?action=feedcontributions&amp;user=Targzeta&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Speciale:Contributi/Targzeta"/>
		<updated>2013-05-20T17:05:56Z</updated>
		<subtitle>Contributi utente</subtitle>
		<generator>MediaWiki 1.20.3</generator>

	<entry>
		<id>http://www.slacky.eu/slacky/Slackware_su_pennina_USB</id>
		<title>Slackware su pennina USB</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Slackware_su_pennina_USB"/>
				<updated>2013-04-30T12:37:58Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Per www.slacky.eu --&amp;gt;&lt;br /&gt;
[[Category:Install_e_Upgrade]]&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Questo wiki vuole essere una guida, il più completa possibile, sui passi da fare per crearsi un propria distribuzione Slackware su un dispositivo di archiviazione di massa USB (che da ora in poi chiameremo più semplicemente, pennina).&amp;lt;BR&amp;gt;&lt;br /&gt;
Affronteremo tutti i vari passaggi strettamente necessari a far partire un kernel installato sulla pennina ed a creare/configurare la distribuzione Slackware.&amp;lt;BR&amp;gt;&lt;br /&gt;
Ovviamente, benché pensata e testata sulla Slackware, la teoria che acquisiremo alla fine di questo wiki sarà tale da permetterci di installare una qualsivoglia distribuzione, la differenza sarà solo sugli strumenti che useremo.&lt;br /&gt;
&lt;br /&gt;
Tutti o quasi tutti i comandi che eseguiremo durante il wiki devono poter godere dei diritti dall'utente root, e per questo saranno caratterizzati dal carattere iniziale '#' che è tipico della shell del super-utente.&lt;br /&gt;
&lt;br /&gt;
I path e i comandi verranno evidenziati rispettivamente dallo stile corsivo e dal font grassetto in questo modo:&lt;br /&gt;
* ''/questo/è/un/path''&lt;br /&gt;
* '''questo è un comando'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Perché installare la distribuzione su una pennina?=&lt;br /&gt;
Alcuni esempi d'uso verranno esposti alla fine del wiki, ma facciamo comunque alcune considerazioni importanti.&amp;lt;BR&amp;gt;&lt;br /&gt;
Questa guida è rivolta a tutti coloro che sono curiosi, affamati di conoscenza, che usano il PC non solo come strumento di lavoro, ma anche con la voglia di portare alla luce ciò che sembra arcano. Lo scopo del wiki non è la creazione della distribuzione tascabile, bensì la divulgazione della conoscenza, è importante che il lettore tenga presente questo concetto, perché è quello che ci preme rimanga più a lungo nella mente di chi legge questo wiki.&amp;lt;BR&amp;gt;&lt;br /&gt;
Oltre ad avere una pennina da portare nei negozi di informatica per testare i PC che solitamente hanno installato solo lo scadente Windows, acquisiremo una conoscenza più o meno approfondita di tutti i programmi necessari all'avvio di una distribuzione GNU/Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Software usato=&lt;br /&gt;
Gli strumenti software che sono stati usati per testare questo wiki sono:&lt;br /&gt;
* Slackware 12 (sebbene alcuni utenti l'abbiano testato con successo anche sulla 13.0, 13.1, 13.37 e sulla 14.0)&lt;br /&gt;
* kernel huge, presente nella directory della serie ''a/'' della Slackware&lt;br /&gt;
* comandi linux che verranno citati man mano, tutti comunque presenti nella distribuzione Slackware&lt;br /&gt;
L'elenco sopra citato è da tenere a mente sia perché citeremo nomi di pacchetti Slackware, sia perché il kernel huge fornisce un sopporto tale che alcuni problemi che si potrebbero incontrare verranno solo citati, in quanto risolti grazie alla sua configurazione statica.&lt;br /&gt;
&lt;br /&gt;
=Fase 0: preparazione della pennina=&lt;br /&gt;
Noi installeremo la distribuzione Slackware direttamente sulla pennina, iniziamo allora preparando proprio il nostro supporto di archiviazione di massa USB.&amp;lt;BR&amp;gt;&lt;br /&gt;
L'unica cosa di cui abbiamo bisogno e di installarci dentro un file system ext3. Le pennine USB, proprio come gli hard disk, possono essere partizionate, supponiamo quindi che sulla pennina ci sia un unica partizione e che questa venga collegata dal kernel al device ''/dev/sda1''. Installiamoci dentro un file system ext3 con il seguente comando:&lt;br /&gt;
 # mkfs.ext3 -L minislack /dev/sda1&lt;br /&gt;
Da Slackware 13 in poi è possibile usare ext4:&lt;br /&gt;
 # mkfs.ext4 -L minislack /dev/sda1&lt;br /&gt;
bene, quella che abbiamo appena creato sarà la directory radice della nostra distribuzione.&lt;br /&gt;
&lt;br /&gt;
Per salvaguardare la salute della nostra perdrive è una buona idea disattivare il journaling, che è predefinitivamente attivo su questi filesystem, in modo da ridurre le scritture su disco:&lt;br /&gt;
 # tune2fs -O ^has_journal /dev/sda1&lt;br /&gt;
'''ATTENZIONE:''' tutti i file sulla pennina saranno ovviamente persi dopo l'esecuzione del comando '''mkfs.ext3''' o '''mkfs.ext4''', quindi facciamo in modo che la pennina sia vuota prima di lanciare il comando.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si noti l'uso dell'opzione -L per impostare un etichetta al file system appena creato, vedremo dopo a cosa ci servirà. L'etichetta del file system la si può impostare/modificare anche successivamente attraverso l'uso del comando '''e2label''' o '''tune2fs -L'''.&lt;br /&gt;
&lt;br /&gt;
=Fase 1: creazione dell'initrd=&lt;br /&gt;
Più in là nel wiki, vedremo come far caricare il kernel di linux installato su una pennina, qui invece ci apprestiamo ad affrontare un problema inerente proprio al fatto che la distribuzione si trova su una periferica USB.&lt;br /&gt;
&lt;br /&gt;
==Perché dobbiamo creare un initrd?==&lt;br /&gt;
Una volta caricato il kernel, esso si preoccupa di attivare tutti i driver che sono stati compilati in maniera statica al suo interno. L'attivazione avviene in maniera parallela, il kernel cioè non attiva un driver, aspetta che esso abbia finito di inizializzarsi e poi ne attiva un altro, ma li attiva tutti quanti &amp;quot;contemporaneamente&amp;quot;. Dopo questa fase di inizializzazione dei driver il kernel deve montare quella che è la root directory (o directory radice) della distribuzione, la famosa directory ''/''. Una volta montata la directory radice, esegue quello che sarà l'unico processo avviato direttamente dal kernel (che in generale è il processo '''/sbin/init''').&lt;br /&gt;
* Ma i driver (o controller) USB potrebbero non essere stati compilati in maniera statica nel kernel, e senza i driver il kernel non si accorge neanche della presenza della pennina, come possiamo risolvere questo problema?&lt;br /&gt;
* Non solo, ma anche ammesso che il kernel abbia i driver compilati in maniera statica, questi devono avere il tempo di accorgersi che al PC è collegata una pennina USB, come si può dire al kernel di aspettare visto che i driver sono attivati in maniera parallela?&lt;br /&gt;
* Ancora, come facciamo a sapere su quale device si verrà a trovare la directory radice? Il driver USB collegherà la pennina al device sda o sdb, oppure ad un altro?&lt;br /&gt;
* E infine, la directory radice che abbiamo creato sulla pennina usa il file system ext3 (o ext4), il kernel per poter riconoscere e di conseguenza usare questo file system ha bisogno del driver, e se questo driver non è compilato in maniera statica?&lt;br /&gt;
&lt;br /&gt;
Per tutti questi problemi esiste una soluzione unica, l'initrd. L'initrd fondamentalmente non è altro che una mini distribuzione la cui directory radice viene montata in ram, più precisamente collegata al device ''/dev/ram0'', con un programma o uno script (che si deve chiamare '''init''' o '''linuxrc''') che viene avviato dal kernel (il quale deve essere compilato con il supporto all'initrd) subito dopo aver inizializzato i driver. Il kernel in pratica non si occupa più di montare la root directory e di lanciare il processo '''/sbin/init''', ma semplicemente lancia il comando (o script) '''init''' che è nell'initrd e delega a lui tutto il resto.&amp;lt;BR&amp;gt;&lt;br /&gt;
Questo semplice meccanismo ci permette in pratica di creare uno script per risolvere tutti i problemi sopra citati.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Quando il kernel carica in memoria l'initrd e lancia il programma (o lo script) init, la root directory della nostra distribuzione non è ancora montata! Quindi la distribuzione non esiste, e con lei non esistono tutti i programmi usuali che uno pensa di usare nell'initrd. Se si vuole usare un programma, lo si deve copiare nell'ambiente dell'initrd e si devono copiare anche tutte quelle librerie condivise di cui il programma necessita.&lt;br /&gt;
&lt;br /&gt;
==Initrd come archivio cpio==&lt;br /&gt;
Uno dei modi più semplici per creare un initrd è quello di inserire tutto il necessario in una directory vuota (programmi che si voglio usare nell'initrd, librerie di cui necessitano questi programmi, eventuali moduli del kernel, etc...etc...) e poi di creare un archivio cpio, magari compresso con gzip, di questa directory. Il kernel sarà poi in grado di decomprimere (se era compresso) l'archivio e di estrarne il contenuto.&amp;lt;BR&amp;gt;&lt;br /&gt;
Creiamoci allora una directory vuota ed entriamoci dentro con:&lt;br /&gt;
 # mkdir /tmp/initrd&lt;br /&gt;
 # cd /tmp/initrd&lt;br /&gt;
&lt;br /&gt;
==Il pacchetto mkinitrd e la busybox==&lt;br /&gt;
Il pacchetto mkinitrd della Slackware (che si trova nella directory ''a/'') contiene lo script omonimo '''mkinitrd''', che generalmente viene usato da coloro che necessitano di un initrd e non vogliono (o non hanno le competenze adatte a) crearsene uno a mano.&amp;lt;BR&amp;gt;&lt;br /&gt;
Noi useremo il pacchetto, che quindi deve essere installato, non per lanciare l''''mkinitrd''' ma per prelevare il programma '''busybox''' che è al suo interno. Busybox è un programma che si può comportare in maniera diversa a seconda di come lo si invoca, se noi infatti creiamo un link simbolico chiamato mount a '''busybox''', allora questo si comporterà come '''mount'''. L'elenco di tutti i programmi che è in grado di simulare lo si può ottenere lanciando '''busybox''' senza parametri.&lt;br /&gt;
&lt;br /&gt;
Il pacchetto mkinitrd ha la '''busybox''' inserita all'interno di un archivio tar.gz il cui path completo è:&lt;br /&gt;
 ''/usr/share/mkinitrd/initrd-tree.tar.gz''&lt;br /&gt;
preleviamo la busybox con:&lt;br /&gt;
 # tar -C /tmp/initrd -zxf /usr/share/mkinitrd/initrd-tree.tar.gz './bin/busybox'&lt;br /&gt;
a questo punto la nostra directory ''/tmp/initrd'' avrà questa struttura:&lt;br /&gt;
 # tree /tmp/initrd&lt;br /&gt;
 /tmp/initrd&lt;br /&gt;
 `-- bin&lt;br /&gt;
     `-- busybox&lt;br /&gt;
&lt;br /&gt;
==Creiamo lo script init==&lt;br /&gt;
Ora dobbiamo creare lo script '''init''', ovvero lo script che verrà eseguito dal kernel dopo l'inizializzazione dei driver e che è incaricato di risolvere i problemi su citati, cioè:&lt;br /&gt;
* caricare eventualmente i moduli del kernel per i controller USB e per il file system ext3/4&lt;br /&gt;
* dare il tempo ai controller USB di rilevare la pennina e montare, dopo averla scovata, la root directory&lt;br /&gt;
* eseguire il vero processo init della distribuzione&lt;br /&gt;
&lt;br /&gt;
Prima di cimentarci nella risoluzione di questi problemi dobbiamo notare che '''init''', per come lo vogliamo utilizzare noi, è uno script, e in quanto tale ha bisogno di un interprete, la '''busybox''' può fare questo per noi visto che al suo interno ha anche una piccola shell. Andiamo nella directory ''/tmp/initrd/bin'' e creiamo un link simbolico a '''busybox''' in questo modo:&lt;br /&gt;
 # ln -s busybox ash&lt;br /&gt;
e quindi con un qualsiasi editor di testo creiamo il file ''/tmp/initrd/init'' e mettiamoci come prima riga:&lt;br /&gt;
 #!/bin/ash&lt;br /&gt;
&lt;br /&gt;
===Caricare i moduli del kernel necessari al rilevamento della periferica USB e del file system ext3/4===&lt;br /&gt;
Il kernel huge è compilato con il supporto sia alle periferiche USB, sia al file system ext3 (o ext4) in maniera statica, e quindi ci permette di superare in maniera trasparente questo problema.&amp;lt;BR&amp;gt;&lt;br /&gt;
Si fa notare che il fatto di avere il supporto compilato in maniera statica nel kernel è un fattore da non sottovalutare. Infatti l'ambiente dell'initrd dovrebbe essere il più generale possibile, se spettasse all'initrd (e quindi allo script '''init''') caricare qualche modulo del kernel, allora l'initrd non sarebbe più indipendente, ma al suo interno dovrebbe avere i moduli compilati per il kernel specifico che lo ha eseguito.&lt;br /&gt;
&lt;br /&gt;
===Dare il tempo ai controller USB di rilevare la pennina e montaggio della root directory===&lt;br /&gt;
Abbiamo installato sulla nostra pennina USB un file system del tipo ext3 (o ext4) che abbiamo anche etichettato con il nome di 'minislack'. Bene, grazie alla capacità del comando '''mount''' di utilizzare il nome di etichetta per identificare un file system, il problema può essere risolto semplicemente mettendo nello script '''init''' quanto segue:&lt;br /&gt;
 mount -n proc -t proc /proc&lt;br /&gt;
 while ! mount -n -r -L minislack /mnt 2&amp;gt; /dev/null;&lt;br /&gt;
  do&lt;br /&gt;
    sleep 1&lt;br /&gt;
  done&lt;br /&gt;
 umount -n /proc&lt;br /&gt;
Il &amp;quot;montaggio&amp;quot; del file system proc è necessario in quanto il comando '''mount''' fa uso di questo file system per scovare l'etichetta 'minislack'.&amp;lt;BR&amp;gt;&lt;br /&gt;
Il ciclo '''while''' con lo '''sleep''' non fa altro che dare il tempo necessario ai driver USB del kernel di rilevare la pennina.&lt;br /&gt;
Quindi la nostra root directory, o meglio il file system che noi abbiamo etichettato come 'minislack' sarà montato nella directory ''/mnt'' a prescindere dal device a cui il driver USB (e più precisamente il modulo che gestisce le periferiche di archiviazione di massa USB, l'usb_storage) lo ha collegato.&lt;br /&gt;
&lt;br /&gt;
Nelle sei righe di codice precedenti abbiamo:&lt;br /&gt;
* usato il comando mount&lt;br /&gt;
* caricato il file system proc nella directory /proc&lt;br /&gt;
* usato il device null per ridirigere lo standard error del comando mount&lt;br /&gt;
* usato il comando sleep per far attendere alla shell 1 secondo&lt;br /&gt;
* montato la root directory in /mnt&lt;br /&gt;
* utilizzato il comando umount&lt;br /&gt;
per quanto potevano sembrare innocenti, quelle sei righe implicano:&lt;br /&gt;
* che il kernel al momento dell'esecuzione di queste righe, abbia il supporto al procfs e al tipo di file system della root directory che montiamo su ''/mnt'' (nel nostro caso il kernel huge ce li ha entrambi in maniera statica)&lt;br /&gt;
* che esistano i programmi mount, umount e sleep&lt;br /&gt;
* che esistano il device ''/dev/null'' e quello al quale sarà collegata la pennina USB (è vero che mount può scovare il device grazie all'etichetta del suo file system, ma è altrettanto vero che poi '''mount''' dovrà montare questo device)&lt;br /&gt;
* che esistano le directory ''/proc'' e ''/mnt''&lt;br /&gt;
&lt;br /&gt;
La '''busybox''' può comportarsi come '''mount''' semplicemente facendo un link simbolico ad essa chiamato appunto ''mount'', il problema è che quello fornito dalla '''busybox''' non è in grado di scovare le etichette dei file system (non riconosce il flag -L). Abbiamo necessariamente bisogno del comando '''mount''' del pacchetto util-linux (dalla Slackware 12.1 e successive, il pacchetto si chiama util-linux-ng) contenuto&lt;br /&gt;
sempre nella directory della serie ''a/'' della Slackware.&amp;lt;BR&amp;gt;&lt;br /&gt;
Copiamo quindi il comando '''mount''' come segue:&lt;br /&gt;
 # cp -p /bin/mount /tmp/initrd/bin&lt;br /&gt;
ora però dobbiamo copiare anche le librerie condivise di cui necessita. Vediamo quali sono lanciando:&lt;br /&gt;
 # ldd /bin/mount&lt;br /&gt;
        linux-gate.so.1 =&amp;gt;  (0xffffe000)&lt;br /&gt;
        libblkid.so.1 =&amp;gt; /lib/libblkid.so.1 (0xb7f80000)&lt;br /&gt;
        libuuid.so.1 =&amp;gt; /lib/libuuid.so.1 (0xb7f7d000)&lt;br /&gt;
        libc.so.6 =&amp;gt; /lib/libc.so.6 (0xb7e4e000)&lt;br /&gt;
        /lib/ld-linux.so.2 (0x80000000)&lt;br /&gt;
&lt;br /&gt;
Creiamoci la directory ''lib'' all'interno del nostro initrd con:&lt;br /&gt;
 # mkdir /tmp/initrd/lib&lt;br /&gt;
e copiamoci dentro le librerie condivise con:&lt;br /&gt;
 # cp -p /lib/libblkid.so.1 /lib/libuuid.so.1 /lib/libc.so.6 /lib/ld-linux.so.2 /tmp/initrd/lib&lt;br /&gt;
Si noti che i file originali probabilmente sono link simbolici, ma il comando '''cp''' copierà il file al quale puntano e non il link.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** NOTA **&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su slackware 13.1 il comando '''mount''' necessita di altre librerie:&lt;br /&gt;
 # ldd /bin/mount&lt;br /&gt;
        linux-gate.so.1 =&amp;gt;  (0xffffe000)&lt;br /&gt;
        /usr/lib/libv4l/v4l1compat.so (0xb7838000)&lt;br /&gt;
        /usr/lib/libv4l/v4l2convert.so (0xb7836000)&lt;br /&gt;
        libblkid.so.1 =&amp;gt; /lib/libblkid.so.1 (0xb77eb000)&lt;br /&gt;
        libuuid.so.1 =&amp;gt; /lib/libuuid.so.1 (0xb77e7000)&lt;br /&gt;
        libc.so.6 =&amp;gt; /lib/libc.so.6 (0xb7683000)&lt;br /&gt;
        libv4l1.so.0 =&amp;gt; /usr/lib/libv4l1.so.0 (0xb767e000)&lt;br /&gt;
        libv4l2.so.0 =&amp;gt; /usr/lib/libv4l2.so.0 (0xb7674000)&lt;br /&gt;
        /lib/ld-linux.so.2 (0xb783b000)&lt;br /&gt;
        libpthread.so.0 =&amp;gt; /lib/libpthread.so.0 (0xb765b000)&lt;br /&gt;
        libv4lconvert.so.0 =&amp;gt; /usr/lib/libv4lconvert.so.0 (0xb75ef000)&lt;br /&gt;
        librt.so.1 =&amp;gt; /lib/librt.so.1 (0xb75e5000)&lt;br /&gt;
        libm.so.6 =&amp;gt; /lib/libm.so.6 (0xb75bf000)&lt;br /&gt;
&lt;br /&gt;
Quindi sarà necessario copiare anche le nuove librerie:&lt;br /&gt;
 # cp -p /usr/lib/libv4l/v4l1compat.so /usr/lib/libv4l/v4l2convert.so /usr/lib/libv4l1.so.0 /usr/lib/libv4l2.so.0 /tmp/initrd/lib&lt;br /&gt;
 # cp -p /lib/libpthread.so.0 /usr/lib/libv4lconvert.so.0 /lib/librt.so.1 /lib/libm.so.6 /tmp/initrd/lib&lt;br /&gt;
&lt;br /&gt;
Su Slackware 13.37 le dipendenze di '''mount''' sembrano essere le stesse della 12, ma anche se non risulta con '''ldd''', serve anche ''/lib/libm.so.6''.&lt;br /&gt;
Quindi rispetto alla 12 bisognerà copiare anche libm.so.6:&lt;br /&gt;
 # cp -p /lib/libm.so.6 /tmp/initrd/lib&lt;br /&gt;
&lt;br /&gt;
Su Slackware 14.0 le dipendenze diventano:&lt;br /&gt;
 # ldd /bin/mount&lt;br /&gt;
        linux-gate.so.1 (0xf771b000)&lt;br /&gt;
        libblkid.so.1 =&amp;gt; /lib/libblkid.so.1 (0xf76b3000)&lt;br /&gt;
        libmount.so.1 =&amp;gt; /lib/libmount.so.1 (0xf7687000)&lt;br /&gt;
        libuuid.so.1 =&amp;gt; /lib/libuuid.so.1 (0xf7683000)&lt;br /&gt;
        libc.so.6 =&amp;gt; /lib/libc.so.6 (0xf74fe000)&lt;br /&gt;
        /lib/ld-linux.so.2 (0xf771c000)&lt;br /&gt;
&lt;br /&gt;
Anche qui non risulta /lib/libm.so.6, ma è necessaria per far funzionare '''mount'''.&lt;br /&gt;
Vanno copiate tutte in questo modo:&lt;br /&gt;
 # cp -p /lib/libblkid.so.1 /lib/libmount.so.1 /lib/libuuid.so.1 /lib/libc.so.6 /lib/libm.so.6 /lib/ld-linux.so.2 /tmp/initrd/lib&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** FINE NOTA **&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per il comando '''umount''' e '''sleep''' invece possiamo tranquillamente usare quelli della '''busybox''', quindi andiamo nella directory ''/tmp/initrd/bin'' e facciamo:&lt;br /&gt;
 # ln -s busybox umount&lt;br /&gt;
 # ln -s busybox sleep&lt;br /&gt;
&lt;br /&gt;
Il programma '''mount''' l'abbiamo utilizzato passandogli anche il flag -n, dicendogli quindi di non scrivere quello che sarà il file ''/etc/mtab'', benché esso non lo scriva, vuole comunque leggerlo per controllare se il file system che si sta tentando di montare non sia già stato montato. Dobbiamo quindi creare il file vuoto ''/tmp/initrd/etc/mtab'':&lt;br /&gt;
 # mkdir /tmp/initrd/etc&lt;br /&gt;
 # touch /tmp/initrd/etc/mtab&lt;br /&gt;
&lt;br /&gt;
Proseguiamo quindi con la creazione del device null e dei possibili device a cui sarà collegata la pennina USB. In generale la pennina USB viene vista come una periferica SCSI disk e quindi sarà attaccata ad un device del tipo ''/dev/sdXY'' dove X varia a seconda di quante periferiche di archiviazione rilevate come SCSI (ad esempio i dischi sata) sono state trovate prima della pennina, mentre Y rappresenta una qualsiasi partizione.&amp;lt;BR&amp;gt;&lt;br /&gt;
Se, ad esempio, un PC non ha nessun disco rilevato come SCSI e ci si inserisce una pennina con tre partizioni, queste tre partizioni saranno collegate rispettivamente ai device: sda1, sda2  e sda3.&lt;br /&gt;
&lt;br /&gt;
Y allora la possiamo ricavare facilmente, infatti all'inizio abbiamo supposto che la nostra pennina avesse solo una partizione e che essa (la partizione) venisse attaccata ad device ''/dev/sda1'', allora Y=1 e la pennina sarà sempre collegata ad un device dal nome ''/dev/sdX1''.&amp;lt;BR&amp;gt;&lt;br /&gt;
Quindi creiamoci la directory in cui inserire i device:&lt;br /&gt;
 # mkdir /tmp/initrd/dev&lt;br /&gt;
e copiamoci subito dentro il device ''/dev/null'' con:&lt;br /&gt;
 # cp -R /dev/null /tmp/initrd/dev&lt;br /&gt;
&lt;br /&gt;
Al momento attuale gli SCSI disk sono gestiti dal device driver con major number 8. Questo device driver è in grado di gestire sino a 15 partizioni per ogni disco, questo vuol dire che due device con X consecutive e con uguale Y hanno una distanza (in termini di minor number) pari a 16. Ad esempio il device sda avrà un minor number uguale a 0 laddove il device sdb avrà invece minor number uguale a 16, e così via.&lt;br /&gt;
&lt;br /&gt;
Possiamo allora creare i device con:&lt;br /&gt;
 # mknod /tmp/initrd/dev/sda1 b 8 1&lt;br /&gt;
 # mknod /tmp/initrd/dev/sdb1 b 8 17&lt;br /&gt;
 # mknod /tmp/initrd/dev/sdc1 b 8 33&lt;br /&gt;
 # mknod /tmp/initrd/dev/sdd1 b 8 49&lt;br /&gt;
&lt;br /&gt;
Ora per rendere tutto coerente con quanto scritto sempre nelle sei innocenti righe di codice inserite nel file ''init'', non ci resta che creare due directory vuote nelle quali verranno montati i file system proc e quello contenente la nostra directory radice.&lt;br /&gt;
 # mkdir /tmp/initrd/proc /tmp/initrd/mnt&lt;br /&gt;
&lt;br /&gt;
===Eseguire il vero processo init===&lt;br /&gt;
L'ultimo passo che deve eseguire lo script '''init''' dell'initrd è quello di lanciare il vero processo '''init''' situato nella directory radice della distribuzione e poi liberare la memoria allocata.&amp;lt;BR&amp;gt;&lt;br /&gt;
I passi teorici da eseguire sono:&lt;br /&gt;
* spostare la directory radice dell'initrd sulla directory radice della distribuzione&lt;br /&gt;
* smontare l'initrd&lt;br /&gt;
* deallocare la memoria allocata dal kernel per l'initrd&lt;br /&gt;
* eseguire il vero processo '''init'''&lt;br /&gt;
Che poi praticamente, dato che per ognuno dei passi precedenti esiste uno specifico programma che lo esegue, diventa:&lt;br /&gt;
* cd /mnt; mkdir initrd; pivot_root . initrd&lt;br /&gt;
* umount /initrd&lt;br /&gt;
* blockdev --flushbufs /dev/ram0&lt;br /&gt;
* exec chroot . /sbin/init $@&lt;br /&gt;
&lt;br /&gt;
Il comando '''pivot_root''' ultimamente sembra non comportarsi bene nell'ambiente dell'initrd. Fortunatamente la '''busybox''' ha al suo interno un programma che dovrebbe eseguire tutti i passi precedenti, il comando si chiama '''switch_root ''' e come al solito quindi basta fare un link simbolico a '''busybox''' entrando in ''/tmp/initrd/bin''&lt;br /&gt;
ed eseguendo:&lt;br /&gt;
 # ln -s busybox switch_root&lt;br /&gt;
&lt;br /&gt;
Ora non resta che inserire nello script init quanto segue:&lt;br /&gt;
 exec switch_root /mnt /sbin/init $@&lt;br /&gt;
&lt;br /&gt;
'''NOTA:''' si noti il passaggio a '''/sbin/init''' dei parametri $@, questi sono i parametri che il kernel non ha riconosciuto nella sua riga di comando (quella passatagli dal loader), e che quindi passa al comando che esegue.&lt;br /&gt;
&lt;br /&gt;
===Lo script init nella sua interezza===&lt;br /&gt;
Riassumendo, lo script ''/tmp/initrd/init'' è questo:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
#!/bin/ash&lt;br /&gt;
# Aspetto finché i driver USB non rilevano la pennina e monto la vera directory radice&lt;br /&gt;
mount -n proc /proc -t proc&lt;br /&gt;
while ! mount -n -r -L minislack /mnt 2&amp;gt; /dev/null;&lt;br /&gt;
 do&lt;br /&gt;
    sleep 1;&lt;br /&gt;
 done&lt;br /&gt;
umount /proc&lt;br /&gt;
&lt;br /&gt;
# Avvio il vero /sbin/init&lt;br /&gt;
exec switch_root /mnt /sbin/init $@&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
questo script deve essere eseguito dal kernel è quindi dobbiamo assicurarci che abbia i diritti di esecuzione:&lt;br /&gt;
 # chmod u+x /tmp/initrd/init&lt;br /&gt;
&lt;br /&gt;
==Creazione dell'archivio cpio compresso initrd.gz==&lt;br /&gt;
La directory ''/tmp/initrd'' ora dovrebbe essere così strutturata:&lt;br /&gt;
 # tree /tmp/initrd&lt;br /&gt;
   /tmp/initrd/&lt;br /&gt;
   |-- bin&lt;br /&gt;
   |   |-- ash -&amp;gt; busybox&lt;br /&gt;
   |   |-- busybox&lt;br /&gt;
   |   |-- mount&lt;br /&gt;
   |   |-- sleep -&amp;gt; busybox&lt;br /&gt;
   |   |-- switch_root -&amp;gt; busybox&lt;br /&gt;
   |   `-- umount -&amp;gt; busybox&lt;br /&gt;
   |-- dev&lt;br /&gt;
   |   |-- null&lt;br /&gt;
   |   |-- sda1&lt;br /&gt;
   |   |-- sdb1&lt;br /&gt;
   |   |-- sdc1&lt;br /&gt;
   |   `-- sdd1&lt;br /&gt;
   |-- etc&lt;br /&gt;
   |   `-- mtab&lt;br /&gt;
   |-- init&lt;br /&gt;
   |-- lib&lt;br /&gt;
   |   |-- ld-linux.so.2&lt;br /&gt;
   |   |-- libblkid.so.1&lt;br /&gt;
   |   |-- libc.so.6&lt;br /&gt;
   |   `-- libuuid.so.1&lt;br /&gt;
   |-- mnt&lt;br /&gt;
   `-- proc&lt;br /&gt;
 &lt;br /&gt;
 6 directories, 17 files&lt;br /&gt;
Non resta altro da fare che creare un archivio cpio di questa directory, comprimerla con il comando '''gzip''' e renderla disponibile al loader di linux.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Partendo dal solito presupposto che la pennina sia collegata dal kernel al device sda1, la si monti ad esempio nella directory ''/mnt/memory'' con:&lt;br /&gt;
 # mount /dev/sda1 /mnt/memory&lt;br /&gt;
si crei poi una directory in cui inserire l'archivio cpio compresso che è l'initrd con:&lt;br /&gt;
 # mkdir /mnt/memory/boot&lt;br /&gt;
ed infine si crei l'archivio cpio compresso (il tanto sudato initrd):&lt;br /&gt;
 # cd /tmp/initrd&lt;br /&gt;
 # find . | cpio -o -H newc | gzip -9 -n &amp;gt; /mnt/memory/boot/initrd.gz&lt;br /&gt;
&lt;br /&gt;
Quando, più in là nel wiki, si configurerà il loader di linux, si vedrà come utilizzare questo file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Fase 2: installazione della distribuzione sulla pennina=&lt;br /&gt;
Ora ci si occuperà di installare e configurare una serie minimale ma importantissima di pacchetti Slackware.&amp;lt;BR&amp;gt;&lt;br /&gt;
Ovviamente non ci sono limitazioni, se non quelle fisiche della pennina, al numero di pacchetti che il lettore può installare, ma per lo scopo di questo wiki è sufficiente installare i pacchetti essenziali a far partire la distribuzione.&amp;lt;BR&amp;gt;&lt;br /&gt;
I pacchetti che verranno installati si trovano tutti nella directory ''a/'' della Slackware, quindi, supponendo che il CD o DVD della Slackware sia stato montato nella directory ''/mnt/dvd/'', per prima cosa ci si deve spostare dentro questa directory con:&lt;br /&gt;
 # cd /mnt/dvd/slackware/a&lt;br /&gt;
&lt;br /&gt;
==Un piccolo accorgimento==&lt;br /&gt;
I pacchetti verranno installati sfruttando l'opzione -root dello script '''installpkg''', alcuni dei pacchetti hanno uno script aggiuntivo, il famoso '''doinst.sh''', che viene avviato dopo l'installazione del pacchetto. Gli script '''doinst.sh''' sono &amp;quot;chrootati&amp;quot; sulla pennina e devono poter eseguire comandi, quali ad esempio '''cd''', '''rm''' o&lt;br /&gt;
'''ln'''. Questo implica che:&lt;br /&gt;
* il programma che il '''doinst.sh''' vuole eseguire deve essere presente sulla pennina&lt;br /&gt;
* si abbiano i diritti di esecuzione sulla pennina&lt;br /&gt;
&lt;br /&gt;
La prima implicazione è risolta installando i pacchetti in un ordine ben preciso, facendo in modo di installare prima i pacchetti che contengono i programmi usuali usati dai '''doinst.sh'''.&lt;br /&gt;
&lt;br /&gt;
La seconda implicazione viene verificata se si esegue un piccolo accorgimento, ovvero smontare la pennina e rimontarla con l'opzione 'exec' del '''mount''', in questo modo:&lt;br /&gt;
 # umount /mnt/memory&lt;br /&gt;
 # mount -o exec -rw /dev/sda1 /mnt/memory&lt;br /&gt;
&lt;br /&gt;
==I pacchetti da installare==&lt;br /&gt;
La domanda è semplice, come si determinano i pacchetti che si devono installare?&amp;lt;BR&amp;gt;&lt;br /&gt;
La risposta non è altrettanto semplice, sicuramente ci sarà il programma ''/sbin/init'' per avere un collegamento all'initrd creato nella 'Fase 1', ma poi? Poi bisogna seguire l''''init''' e capire cosa esegue, in modo da fargli trovare i programmi che tenta di eseguire. Se è necessario, bisogna anche seguire i programmi che '''init''' esegue per capire cosa fanno e se hanno bisogno di altri programmi o file di configurazione.&amp;lt;BR&amp;gt;&lt;br /&gt;
In generale quindi, il primo file da analizzare è ''/etc/inittab'', file di configurazione di '''init''', ci si accorge quindi che '''init''' esegue una serie di script di inizializzazione, e quindi bisogna seguire questi script per capire cosa fanno.&lt;br /&gt;
&lt;br /&gt;
Per lo scopo di questo wiki il lavoro è stato già fatto dall'autore e quindi verranno segnalati solo i passi fondamentali da fare affinché la distribuzione possa partire.&lt;br /&gt;
&lt;br /&gt;
Qui si riporta l'elenco dei pacchetti che devono essere installati nell'ordine di seguito riportato (l'ordine è importante solo per i primi tre pacchetti). Accanto al nome del pacchetto vi è una piccola descrizione di cosa contiene:&lt;br /&gt;
 a/aaa_base              ---&amp;gt;    Crea tutte le directory base&lt;br /&gt;
 a/coreutils             ---&amp;gt;    Programmi utilizzati dagli script '''doisnt.sh'''&lt;br /&gt;
 a/glibc-solibs          ---&amp;gt;    La libreria glibc, usata da molti eseguibili (tra cui '''init''')&lt;br /&gt;
 a/glibc-zoneinfo        ---&amp;gt;    Contiene lo script '''timeconfig''' che verrà usato in seguito&lt;br /&gt;
 a/dialog                ---&amp;gt;    Usato per visualizzare i box dei dialoghi da altri programmi&lt;br /&gt;
                                 (tra cui '''timeconfig''')&lt;br /&gt;
 a/bash                  ---&amp;gt;    La shell&lt;br /&gt;
 a/etc                   ---&amp;gt;    File di configurazione dei programmi utilizzati&lt;br /&gt;
 a/util-linux            ---&amp;gt;    Contiene, tra l'altro, il programma '''mount'''. Dalla Slackware 12.1 alla 13.1,&lt;br /&gt;
                                 il pacchetto si chiama util-linux-ng&lt;br /&gt;
 a/sysvinit              ---&amp;gt;    Contiene il programma '''init'''&lt;br /&gt;
 a/sysvinit-scripts      ---&amp;gt;    I famosi script '''rc.d''' della Slackware, invocati da '''init'''&lt;br /&gt;
 a/module-init-tools     ---&amp;gt;    '''modprobe''' e altri programmi per gestire i moduli&lt;br /&gt;
 a/e2fsprogs             ---&amp;gt;    Comandi per i filesystem ext2/3/4&lt;br /&gt;
 a/devs                  ---&amp;gt;    I device, senza di questi....&lt;br /&gt;
 a/findutils             ---&amp;gt;    '''find''', usato dagli script di inizializzazione&lt;br /&gt;
 a/aaa_elflibs           ---&amp;gt;    Libreria libtermcap per i terminali&lt;br /&gt;
 a/aaa_terminfo          ---&amp;gt;    File di informazione sui terminali usati dalla libreria libtermcap&lt;br /&gt;
 a/shadow                ---&amp;gt;    Contiene, tra l'altro, i programmi '''login''' e '''sulogin'''&lt;br /&gt;
 a/grep                  ---&amp;gt;    '''grep''', usato dagli script di inizializzazione&lt;br /&gt;
 a/procps                ---&amp;gt;    '''ps''', usato dagli script di inizializzazione&lt;br /&gt;
 a/kernel-huge           ---&amp;gt;    Il kernel...&lt;br /&gt;
 a/kernel-modules        ---&amp;gt;    ... i suoi moduli&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** NOTA **&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su slackware 13.1 è necessario anche il seguente pacchetto&lt;br /&gt;
 l/v4l-utils             ---&amp;gt;    Librerie necessarie ai programmi di sistema (ad es: '''mount''')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** FINE NOTA **&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per installare questi pacchetti si deve eseguire '''installpkg''' con l'opzione -root ''/mnt/memory'', ad esempio:&lt;br /&gt;
 # installpkg -root /mnt/memory aaa_base-12.0.0-noarch-1.tgz&lt;br /&gt;
&lt;br /&gt;
==Una facile configurazione==&lt;br /&gt;
Come per la domanda 'Quali pacchetti si devono installare?', così la risposta alla domanda 'Cosa si deve configurare?' dipende sempre dall'amministratore del sistema e da cosa esso intenda far eseguire all'avvio della macchina.&amp;lt;BR&amp;gt;&lt;br /&gt;
Nel wiki si intende lasciare intatti gli script di inizializzazione fatti da Patrick J. Volkerding, creatore della Slackware, e quindi si procederà nella minima configurazione necessaria proprio a questi script di inizializzazione.&lt;br /&gt;
&lt;br /&gt;
===/etc/fstab===&lt;br /&gt;
Si comincia con il creare il file ''/etc/fstab'' come segue:&lt;br /&gt;
 # echo -e &amp;quot;LABEL=minislack\t\t/\text3\trw,noatime\t0 1&amp;quot; &amp;gt; /mnt/memory/etc/fstab&lt;br /&gt;
Nel caso si abbia scelto ext4 diventa:&lt;br /&gt;
 # echo -e &amp;quot;LABEL=minislack\t\t/\text4\trw,noatime\t0 1&amp;quot; &amp;gt; /mnt/memory/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===/etc/hardwareclock===&lt;br /&gt;
Un altro file richiesto dagli script di inizializzazione della Slackware è il file ''/etc/hardwareclock'' che indica come è impostato l'orologio hardware. In effetti questo file non contiene granché, ma viene consigliato di editarlo/crearlo tramite lo script '''/usr/sbin/timeconfig''', quindi bisogna eseguire lo script spostandogli la directory root, in questo modo:&lt;br /&gt;
 # cd /mnt/memory&lt;br /&gt;
 # chroot . usr/sbin/timeconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Fase 3: impostare il boot loader e testare il tutto=&lt;br /&gt;
L'ultima cosa da fare è quella di rendere la pennina &amp;quot;bootabile&amp;quot;, ovvero di inserire nel suo primo settore, il famoso settore di boot. Per fare questo basta creare un file ''lilo.conf'' ad-hoc, e poi lanciare LILO passandogli il file appena creato.&amp;lt;BR&amp;gt;&lt;br /&gt;
Si crei quindi il file, ad esempio ''/mnt/memory/etc/lilo.conf'', direttamente sulla pennina in modo che rimanga con essa, con all'interno quanto segue:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
boot = /dev/sda&lt;br /&gt;
backup = &amp;quot;&amp;quot;&lt;br /&gt;
map=/mnt/memory/boot/map&lt;br /&gt;
&lt;br /&gt;
compact&lt;br /&gt;
lba32&lt;br /&gt;
large-memory&lt;br /&gt;
&lt;br /&gt;
image = /mnt/memory/boot/vmlinuz&lt;br /&gt;
  initrd = /mnt/memory/boot/initrd.gz&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si noti l'opzione 'initrd', con la quale si indica al kernel che deve usare l'initrd creato nella 'Fase 1'. Ora non resta quindi che lanciare LILO come segue:&lt;br /&gt;
 # lilo -C /mnt/memory/etc/lilo.conf&lt;br /&gt;
e riavviare il PC facendogli fare il boot dalla pennina USB.&amp;lt;BR&amp;gt;&lt;br /&gt;
Con la configurazione minimale che si è fatta nella 'Fase 2', basta, al momento del login, inserire l'username di 'root' per avere una shell con tutti i privilegi del super-utente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Esempi d'uso=&lt;br /&gt;
Una volta che si ha una pennina USB &amp;quot;bootabile&amp;quot;, con all'interno un intera distribuzione, serve solo la fantasia per farci quello che ci pare.&amp;lt;BR&amp;gt;&lt;br /&gt;
Esempi d'uso potrebbero essere quello di crearsi una distribuzione adatta alla lettura di contenuti multimediali, in questo modo basta trovare un PC per vedere un DVD o ascoltare della musica, senza preoccuparsi che il PC sia dotato di tutti i programmi o codec adatti.&lt;br /&gt;
&lt;br /&gt;
Un altro esempio è che si ha sempre a portata di mano un &amp;quot;disco di ripristino&amp;quot;. Se la distribuzione installata sul PC non dovesse partire perché ci si è divertiti un po' troppo con i file di configurazione, si può sempre fare il boot del PC con la pennina e provvedere a rimediare agli eventuali danni che si è combinati.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Appendice=&lt;br /&gt;
==A: altri pacchetti utili==&lt;br /&gt;
Se si vuole rendere la distribuzione che si è installata sulla pennina un po' più indipendente, bisogna essere in grado di manipolare i pacchetti della Slackware, non solo, ma sarebbe anche carino poter utilizzare tutta una serie di comandi utili ad un sistemista. Quindi, oltre all'insieme minimo di pacchetti menzionati nella sezione&lt;br /&gt;
'[[#I_pacchetti_da_installare|I pacchetti da installare]]', qui di seguito c'è un elenco dei pacchetti che rendono la distribuzione sulla pennina, più user-friendly:&lt;br /&gt;
 a/pkgtools           ---&amp;gt;    Per gestire i pacchetti della Slackware&lt;br /&gt;
 a/bin                ---&amp;gt;    Usato dagli script di pkgtools&lt;br /&gt;
 a/sed                ---&amp;gt;    Usato dagli script di pkgtools&lt;br /&gt;
 a/gzip               ---&amp;gt;    Usato dagli script di pkgtools&lt;br /&gt;
 a/tar                ---&amp;gt;    Usato dagli script di pkgtools&lt;br /&gt;
 a/xz                 ---&amp;gt;    Usato dagli script di pkgtools per il nuovo formato '.txz' della Slackware 13&lt;br /&gt;
&lt;br /&gt;
 ap/man               ---&amp;gt;    Il comando man più tornare molto utile&lt;br /&gt;
 ap/man-pages         ---&amp;gt;    Le pagine di manuale di molti comandi&lt;br /&gt;
 ap/groff             ---&amp;gt;    Il formattatore usato da man&lt;br /&gt;
 a/cxxlibs            ---&amp;gt;    Libreria c++ standard usata da groff&lt;br /&gt;
 a/less               ---&amp;gt;    Il comando che man usa per visualizzare le pagine di manuale&lt;br /&gt;
&lt;br /&gt;
 a/udev               ---&amp;gt;    Utile se si vogliono usare driver che necessitano di firmware&lt;br /&gt;
&lt;br /&gt;
 ap/nano              ---&amp;gt;    Il famoso e semplice editor di testo&lt;br /&gt;
&lt;br /&gt;
 a/bzip2              ---&amp;gt;    Sempre più spesso si trovano archivi bzip&lt;br /&gt;
&lt;br /&gt;
 a/reiserfsprogs      ---&amp;gt;    Per gestire il famoso file system reiser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ringraziamenti=&lt;br /&gt;
Ringrazio ZeroUno per i suoi consigli e le sue prove.&lt;br /&gt;
&lt;br /&gt;
Note per Slackware 13.1 a cura di [[Utente:Ansa89|Ansa89]].&lt;br /&gt;
&lt;br /&gt;
Integrazioni per Slackware 13.37-14.0, ext4 e tune2fs a cura di sya54M.&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi cosa scrivetemi pure:&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Utente:targzeta|targzeta]]&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Pagina_principale</id>
		<title>Pagina principale</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Pagina_principale"/>
				<updated>2013-03-31T17:34:18Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Test mobie&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;mf-home&amp;quot;&amp;gt;&lt;br /&gt;
__NOTITLE__&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{:Pagina_principale/Header}}&lt;br /&gt;
{|style=&amp;quot;width:100%;margin-top:10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;width:70%;margin:0;padding:0;&amp;quot;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;boxblue&amp;quot;&amp;gt;News&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;overflow-x:hidden; overflow-y:auto; position: relative; max-height: 350px; margin-top: 10px;background-color:#ebebeb;padding:10px;border-radius: 0.3em;&amp;quot;&amp;gt;&lt;br /&gt;
{{Template:Latest News}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; rowspan=&amp;quot;4&amp;quot; style=&amp;quot;width:30%; padding:0 10px 0;&amp;quot; class=&amp;quot;forumnews&amp;quot;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;boxblue&amp;quot;&amp;gt;Ultimi post dal forum&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;external&amp;quot;&amp;gt;&amp;lt;rss time=&amp;quot;300&amp;quot; number=&amp;quot;25&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/lastopic.xml&amp;lt;/rss&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:20px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Repository|Our packages for Slackware-14.0]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;8&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slacky-ChangeLog-32.xml&amp;lt;/rss&amp;gt;&lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:20px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Repository|Our packages for Slackware64-14.0]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;8&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slacky-ChangeLog-64.xml&amp;lt;/rss&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:10px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Slackware|ChangeLog Slackware-14.0]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;3&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-32.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:10px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Slackware|ChangeLog Slackware64-14.0]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;3&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-64.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:10px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Slackware|ChangeLog Slackware-current]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;3&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-current32.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:10px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Slackware|ChangeLog Slackware64-current]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;3&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-current64.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Redmine_e_apache_via_fcgi</id>
		<title>Redmine e apache via fcgi</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Redmine_e_apache_via_fcgi"/>
				<updated>2012-11-25T12:05:27Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Creata pagina con '&amp;lt;!-- Per http://www.slacky.eu/wikislack/index.php?title=Redmine_e_apache_via_fcgi --&amp;gt;  Category: Ufficio_e_Web = Introduzione = In questo articolo vedremo come installare ...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Per http://www.slacky.eu/wikislack/index.php?title=Redmine_e_apache_via_fcgi --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Ufficio_e_Web]]&lt;br /&gt;
= Introduzione =&lt;br /&gt;
In questo articolo vedremo come installare Redmine sulla Slackware (testato su Slackware 14.0 e 13.37 con gli accorgimenti riportati in seguito) e come configurare il server apache (httpd) in modo da renderlo accessibile via fcgi.&lt;br /&gt;
&lt;br /&gt;
Redmine salva i propri dati su di un database e può gestire diversi tipi di DBMS ma, dato che Slackware ha come DBMS di defaul MySQL, noi useremo quest'ultimo.&lt;br /&gt;
&lt;br /&gt;
= Installare Redmine =&lt;br /&gt;
L'installazione avviene senza problemi seguendo la [http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Installation-procedure guida ufficiale]. Di seguito, comunque, riporto un sunto di quello che va fatto per installarlo su Slackware.&lt;br /&gt;
&lt;br /&gt;
== Step 0: installare fcgi e mod_fcgi ==&lt;br /&gt;
Per poter usare httpd via fcgi (Fast CGI) va installata nel sistema sia la libreria '''fcgi''' che il modulo '''mod_fcgid''' (per httpd stesso).&lt;br /&gt;
&lt;br /&gt;
=== fcgi versione 2.4.1-SNAP-0910052249 ===&lt;br /&gt;
Il progetto è molto vecchio (2009), ma [http://www.fastcgi.com/ gli sviluppatori] dicono che le modifiche sono minime perché il protocollo è stabile. Il sorgente lo trovate [http://www.fastcgi.com/dist/ qui], ma noi creeremo il pacchetto per Slackware grazie ai comandi seguenti (l'ultimo va eseguito come root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
mkdir fcgi&lt;br /&gt;
cd fcgi&lt;br /&gt;
wget http://www.fastcgi.com/dist/fcgi-2.4.1-SNAP-0910052249.tar.gz&lt;br /&gt;
wget http://www.slacky.eu/wikislack/upload/1/13/Fcgi-SlackBuild.tar.bz2&lt;br /&gt;
tar -xf Fcgi-SlackBuild.tar.bz2&lt;br /&gt;
sh fcgi.SlackBuild&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il pacchetto verrà creato nella directory corrente (''/tmp/fcgi'').&lt;br /&gt;
&lt;br /&gt;
=== mod_fcgid versione 2.3.7 ===&lt;br /&gt;
Per controllare l'uscita di versioni più recenti si veda [https://httpd.apache.org/download.cgi#mod_fcgid questo link]. Di seguito, i comandi necessari alla costruzione del pacchetto per Slackware (al solito, l'ultimo va eseguito come root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
mkdir mod_fcgid&lt;br /&gt;
cd mod_fcgid&lt;br /&gt;
wget http://apache.panu.it//httpd/mod_fcgid/mod_fcgid-2.3.7.tar.bz2&lt;br /&gt;
wget http://www.slacky.eu/wikislack/upload/8/8a/Mod_fcgid-SlackBuild.tar.bz2&lt;br /&gt;
tar -xf Mod_fcgid-SlackBuild.tar.bz2&lt;br /&gt;
sh mod_fcgid.SlackBuild&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il pacchetto verrà creato nella directory corrente (''/tmp/mod_fcgid'').&lt;br /&gt;
&lt;br /&gt;
Una volta installato il pacchetto, va anche detto al server httpd di usarlo:&lt;br /&gt;
 echo 'LoadModule fcgid_module lib64/httpd/modules/mod_fcgid.so' &amp;gt;&amp;gt; /etc/httpd/httpd.conf&lt;br /&gt;
{{Information&lt;br /&gt;
|Note&lt;br /&gt;
|Una volta lanciato il server apache, noterete nel suo log ''/var/log/httpd/error_log'', se il modulo è stato caricato correttamente, una riga simile a questa:&lt;br /&gt;
 AH00489: Apache/2.4.3 (Unix) PHP/5.4.7 mod_fcgid/2.3.7 configured&lt;br /&gt;
Alternativamente, si può controllare tra i moduli caricati da apache con:&lt;br /&gt;
 httpd -M | grep fcgid&lt;br /&gt;
dovrebbe comparire la riga:&lt;br /&gt;
 fcgid_module (shared)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Step 1: scaricare Redmine ==&lt;br /&gt;
Scaricate redmine dal [http://www.redmine.org/projects/redmine/wiki/Download sito ufficiale] ed estraete l'archivio nella directory che preferite. Tenete conto che la sotto-directory ''public'' (contenuta nell'archivio) è quella che verrà gestita dal server web. Per questa wiki, l'archivio è stato scaricato nella directory ''/tmp'' ed è stato estratto sotto ''/var/www/htdocs/'' con i comandi (per Redmine 2.1.4):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://rubyforge.org/frs/download.php/76578/redmine-2.1.4.tar.gz&lt;br /&gt;
cd /var/www/htdocs/&lt;br /&gt;
tar -xf /tmp/redmine-2.1.4.tar.gz&lt;br /&gt;
mv redmine-2.1.4 redmine&lt;br /&gt;
chown root.root -R redmine&lt;br /&gt;
chmod go-w -R redmine/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Information&lt;br /&gt;
|Note&lt;br /&gt;
|Visto che abbiamo installato redmine sotto ''/var/www/htdocs/'', tutti i comandi vanno eseguiti con i diritti dell'utente root. In realtà, se si installa redmine in una directory accessibile all'utente non amministratore, i comandi possono anche essere eseguiti senza l'ausilio del superutente.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Step 2: installare i requisiti ==&lt;br /&gt;
Installate il pacchetto '''bundler''' per Ruby eseguendo, come root:&lt;br /&gt;
 gem install bundler&lt;br /&gt;
{{Warning&lt;br /&gt;
|Slackware 13.37 o precedenti&lt;br /&gt;
|Il pacchetto '''bundler''' necessita di una versione recente di '''gem''' non installata nel pacchetto Slackware di Ruby. Si può comunque provare ad installare la versione di Ruby presente nella Slackware 14.0 usando direttamente lo SlackBuild di Pat. Prima di compilare ed installare Ruby, comunque, va compilata e installata anche la libreria '''libyaml''', sempre presenta nella Slackware 14.0. Ecco i link agli SlackBuild ufficiali:&lt;br /&gt;
* [http://slackware.org.uk/slackware/slackware-14.0/source/l/libyaml/ libyaml]&lt;br /&gt;
* [http://slackware.org.uk/slackware/slackware-14.0/source/d/ruby/ ruby]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Information&lt;br /&gt;
|Note&lt;br /&gt;
|Dato che redmine necessita di tutta una serie di dipendenze per Ruby di cui è difficile trovare i pacchetti Slackware, qui useremo il package manager per Ruby di default, '''gem'''. Tutti i pacchetti installati, comunque, saranno inseriti da '''gem''' nella directory (su una slackware64-14.0) ''/usr/lib64/ruby/gems/1.9.1/gems''.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Ora, assicuratevi di essere all'interno della directory di redmine:&lt;br /&gt;
 cd /var/www/htdocs/redmine&lt;br /&gt;
&lt;br /&gt;
Tramite '''bundler''' e il file '''Gemfile''' fornito con redmine, si possono installare tutte le dipendenze necessarie a quest'ultimo. Prima però bisogna eseguire il comando:&lt;br /&gt;
 echo &amp;quot;gem 'fcgi'&amp;quot; &amp;gt; Gemfile.local&lt;br /&gt;
per dire a '''bundler''' che deve installare anche il pacchetto '''fcgi''' (per Ruby). Ora siamo pronti ad installare il tutto tramite il comando:&lt;br /&gt;
 bundle install --without development test postgresql sqlite&lt;br /&gt;
le opzioni dicono a '''bundler''' di non installare i pacchetti necessari al ramo di sviluppo, a quello di test, e di ignorare anche i pacchetti necessari ai DBMS PostgreSQL e SQLite.&lt;br /&gt;
&lt;br /&gt;
== Step 3: preparare il database MySQL ==&lt;br /&gt;
Ora dobbiamo creare sia un database che un utente per MySQL a cui garantire pieno accesso. Come suggerito nella [http://www.redmine.org/projects/redmine/wiki/RedmineInstall#MySQL guida ufficiale] creiamo il database '''redmine''' e l'utente '''redmine''' (con password '''redminepass''') via mysql:&lt;br /&gt;
 mysql -u'root' -p'root_pass'&lt;br /&gt;
 create database redmine character set utf8;&lt;br /&gt;
 create user 'redmine'@'localhost' identified by 'redminepass';&lt;br /&gt;
 grant all privileges on redmine.* to 'redmine'@'localhost';&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
== Step 4: configurare redmine all'uso del database ==&lt;br /&gt;
Per dire a redmine di usare il database creato al passo precedente bisogna creare il file ''config/database.yml'' con all'interno le seguenti righe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: mysql2&lt;br /&gt;
  database: redmine&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: redmine&lt;br /&gt;
  password: redminepass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Possiamo farlo eseguendo il comando seguente:&lt;br /&gt;
 echo -e 'production:\n  adapter: mysql2\n  database: redmine\n  host: localhost\n  username: redmine\n  password: redminepass' &amp;gt; config/database.yml&lt;br /&gt;
&lt;br /&gt;
== Step 5: generare il secret token ==&lt;br /&gt;
Questo passo genera una chiave random usata da '''Rails''' (il framework Ruby usato da Redmine) per codificare i cookie di sessione:&lt;br /&gt;
 rake generate_secret_token&lt;br /&gt;
&lt;br /&gt;
== Step 6: creare le tabelle del database ==&lt;br /&gt;
Ora create le tabelle di redmine con il comando:&lt;br /&gt;
 RAILS_ENV=production rake db:migrate&lt;br /&gt;
{{Information&lt;br /&gt;
|Note&lt;br /&gt;
|La variabile di ambiente RAILS_ENV serve a dire a '''Rails''' quale ramo deve usare, quello che abbiamo configurato noi (vedi file ''config/database.yml'') è quello di produzione (c'è anche quello di test e di sviluppo).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Step 7: popolare le tabelle con i dati di default ==&lt;br /&gt;
 RAILS_ENV=production REDMINE_LANG=it rake redmine:load_default_data&lt;br /&gt;
{{Information&lt;br /&gt;
|Note&lt;br /&gt;
|REDMINE_LANG=it dice a redmine di installare la traduzione in lingua italiana.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Step 8: permessi a file e directory ==&lt;br /&gt;
Ora dobbiamo garantire l'accesso al server httpd ad alcuni file e directory:&lt;br /&gt;
 mkdir -p tmp/pdf public/plugin_assets&lt;br /&gt;
 chown -R apache.apache files log tmp public/plugin_assets&lt;br /&gt;
&lt;br /&gt;
== Step 9: testare il tutto ==&lt;br /&gt;
Per controllare se redmine è stato installato correttamente, basta eseguire il comando:&lt;br /&gt;
 ruby script/rails server webrick -e production&lt;br /&gt;
e poi andare all'indirizzo http://localhost:3000/&lt;br /&gt;
&lt;br /&gt;
== Step 10: login ==&lt;br /&gt;
Nello step 7 redmine ha creato anche un utente amministratore di default con le seguenti credenziali:&lt;br /&gt;
* login: admin&lt;br /&gt;
* password: admin&lt;br /&gt;
&lt;br /&gt;
= Usare fcgi =&lt;br /&gt;
Una volta installato redmine, possiamo &amp;quot;integrarlo&amp;quot; nel server web apache ('''httpd''') via '''fcgi'''. Prima assicuriamoci di aver seguito lo [[#Step_0:_installare_fcgi_e_mod_fcgi|Step 0]] del paragrafo precedente e di aver installato via '''gem''' il pacchetto '''fcgi''' anche per Ruby ([[#Step_2:_installare_i_requisiti|Step 2]] del paragrafo precedente).&lt;br /&gt;
&lt;br /&gt;
Prima di eseguire i passi seguenti, assicuriamoci ancora una volta di stare nella directory in cui abbiamo decompresso redmine:&lt;br /&gt;
 cd /var/www/htdocs/redmine&lt;br /&gt;
&lt;br /&gt;
== Step 0: preparare redmine e apache ==&lt;br /&gt;
Redmine viene fornito di uno script FCGI che esegue il vero processo. Lo script si chiama ''public/dispatch.fcgi.example'', rinominiamolo (o copiamolo) eliminando l'estensione ''.example''.&lt;br /&gt;
 mv public/dispatch.fcgi.example public/dispatch.fcgi&lt;br /&gt;
&lt;br /&gt;
Ora che abbiamo il wrapper fcgi, abbiamo anche bisogno di istruire apache in modo che lo esegua. Anche per questo redmine ha un file htaccess di esempio, ''public/htaccess.fcgi.example''. Rinominiamo anche questo:&lt;br /&gt;
 mv public/htaccess.fcgi.example public/.htaccess&lt;br /&gt;
{{Information&lt;br /&gt;
|Note&lt;br /&gt;
|Se date uno sguardo al file ''public/.htaccess'' appena spostato, noterete che ci sono una serie di '''IfModule'''. Questo perché redmine può essere eseguito via fcgi sia con il modulo per apache '''mod_fcgid''' (il nostro caso) sia con '''mod_fastcgi'''. Per l'ultimo caso si veda [http://www.redmine.org/projects/redmine/wiki/HowTo_configure_Apache_to_run_Redmine#mod_fastcgi la guida sul sito di redmine]. Per le nostre esigenze, il file ''public/.htaccess'' potrebbe essere anche riscritto nel modo seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# General Apache options&lt;br /&gt;
AddHandler fcgid-script .fcgi&lt;br /&gt;
&lt;br /&gt;
Options +FollowSymLinks +ExecCGI&lt;br /&gt;
&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
&lt;br /&gt;
RewriteRule ^$ index.html [QSA]&lt;br /&gt;
RewriteRule ^([^.]+)$ $1.html [QSA]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
&lt;br /&gt;
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]&lt;br /&gt;
&lt;br /&gt;
ErrorDocument 500 &amp;quot;&amp;lt;h2&amp;gt;Application error&amp;lt;/h2&amp;gt;Rails application failed to start properly&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning&lt;br /&gt;
|Attenzione&lt;br /&gt;
|La Slackware non ha, di default, il modulo apache '''mod_rewrite''' attivo, necessario per poter usare i file ''.htaccess''. Per attivarlo assicuriamoci che la relativa riga nel file ''/etc/httpd/httpd.conf'' sia decommentata (qui la riga per la Slackware64 14.0):&lt;br /&gt;
 LoadModule rewrite_module lib64/httpd/modules/mod_rewrite.so&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Quello che resta da fare è dire a '''Rails''' di eseguire l'ambiente di produzione, altrimenti di default verrà eseguito l'ambiente di sviluppo. Per fare questo bisogna inserire all'inizio del file ''config/environment.rb'' le seguenti righe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Force the rails environment to production&lt;br /&gt;
ENV['RAILS_ENV'] ||= 'production'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Possiamo farlo direttamente eseguendo il seguente comando:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i '1i \&lt;br /&gt;
# Force the rails environment to production \&lt;br /&gt;
ENV[&amp;quot;RAILS_ENV&amp;quot;] ||= &amp;quot;production&amp;quot; \&lt;br /&gt;
' config/environment.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 1: configurare il virtual host di apache ==&lt;br /&gt;
Ci sono due modi per rendere disponibile redmine via apache. Possiamo settargli un virtual host dedicato, oppure renderlo disponibile come sotto-directory di un virtual host già esistente.&lt;br /&gt;
&lt;br /&gt;
=== Virtual host dedicato ===&lt;br /&gt;
Aggiungiamo al file che contiene le impostazioni sui virtual host, ''/etc/httpd/extra/httpd-vhosts.conf'', seguenti righe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Redmine&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  DocumentRoot &amp;quot;/var/www/htdocs/redmine/public&amp;quot;&lt;br /&gt;
  ServerName redmine&lt;br /&gt;
  &amp;lt;Directory &amp;quot;/var/www/htdocs/redmine/public&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride FileInfo Options&lt;br /&gt;
    Require all granted&lt;br /&gt;
  &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Information&lt;br /&gt;
|Note&lt;br /&gt;
|Le due direttive di '''AllowOverride''' servono rispettivamente, per abilitare l'uso del file ''.htaccess'' e per dare la possibilità a quest'ultimo di aggiungere le opzioni di cui necessita ('''+FollowSymLinks''' e '''+ExecCGI''').&lt;br /&gt;
}}&lt;br /&gt;
Dopo aver riavviato il server apache, basta collegarsi a http://redmine per vedere se il server è attivo (la prima volta ci vorrà un po' tempo affinché il framework '''Rails''' faccia il setup completo).&lt;br /&gt;
{{Warning&lt;br /&gt;
|Attenzione&lt;br /&gt;
|Affinché il link http://redmine funzioni, c'è bisogno che la richiesta venga rediretta al nostro server apache. Nel nostro caso, dato che stiamo provando tutto in locale, questo può essere fatto aggiungendo la riga seguente al file ''/etc/hosts'':&lt;br /&gt;
 127.0.0.1       redmine&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Usare un virtual host esistente ===&lt;br /&gt;
Possiamo installare redmine sotto un virtual host esistente. Per fare questo, però, dato che la directory pubblica è una sotto-directory di redmine (la directory ''public/''), per non dover scrivere nel URL ''/redmine/public/'' è più conveniente settare un alias.&lt;br /&gt;
&lt;br /&gt;
Supponiamo che ci sia già il seguente virtual host configurato nel file ''/etc/httpd/extra/httpd-vhosts.conf'' (notate il '''ServerName''' come '''localhost'''):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  DocumentRoot &amp;quot;/srv/httpd/htdocs&amp;quot;&lt;br /&gt;
  ServerName localhost&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per settare l'alias per redmine bisogna modificare la precedente configurazione, con questa:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  DocumentRoot &amp;quot;/srv/httpd/htdocs&amp;quot;&lt;br /&gt;
  ServerName localhost&lt;br /&gt;
&lt;br /&gt;
  # Redmine&lt;br /&gt;
  Alias &amp;quot;/redmine&amp;quot; &amp;quot;/var/www/htdocs/redmine/public&amp;quot;&lt;br /&gt;
  &amp;lt;Directory &amp;quot;/var/www/htdocs/redmine/public&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride FileInfo Options&lt;br /&gt;
    Require all granted&lt;br /&gt;
  &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ora però va modificato il file ''public/.htaccess'' settando la '''RewriteBase''' come ''/redmine'', altrimenti le richieste a http://localhost/redmine saranno riscritte in maniera errata (in particolare, non andranno verso ''public/dispatch.fcgi'' ma direttamente verso ''dispatch.fcgi''). Possiamo farlo con il comando seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i '/^RewriteEngine/a \&lt;br /&gt;
RewriteBase /redmine' public/.htaccess&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prima di testare il tutto, bisogna correggere [http://www.redmine.org/issues/12102 un piccolo bug] del framework '''Rails''' che gli impedisce di avviarsi in maniera corretta quando l'applicazione è un alias di un virtual host. Quindi modifichiamo il file ''config/environment.rb'' sostituendo le righe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Initialize the rails application&lt;br /&gt;
RedmineApp::Application.initialize!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Initialize the rails application&lt;br /&gt;
RedmineApp::Application.routes.default_scope =  { :path =&amp;gt; '/redmine', :shallow_path =&amp;gt; '/redmine' }&lt;br /&gt;
RedmineApp::Application.initialize!&lt;br /&gt;
Redmine::Utils::relative_url_root = '/redmine'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ora tutto dovrebbe essere pronto e redmine dovrebbe rispondere correttamente all'indirizzo http://localhost/redmine.&lt;br /&gt;
&lt;br /&gt;
== Possibili problemi ==&lt;br /&gt;
Se redmine non dovesse funzionare a dovere, potete provare a guardare il file di log ''log/production.log''.&lt;br /&gt;
&lt;br /&gt;
=== `require': no such file to load -- fcgi (LoadError) ===&lt;br /&gt;
Se trovate questo errore, provate a modificare il file ''public/dispatch.fcgi'' inserendovi all'inizio le seguenti righe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'rubygems'&lt;br /&gt;
require 'fcgi'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ovviamente dovete anche aver installato il pacchetto '''fcgi''' per Ruby, come visto nello [[#Step_2:_installare_i_requisiti|Step 2]] fatto durante l'installazione di redmine. Se non l'avete fatto, potete sempre farlo con:&lt;br /&gt;
 gem install fcgi&lt;br /&gt;
&lt;br /&gt;
= Rimuovere il tutto =&lt;br /&gt;
Durante l'installazione di redmine, abbiamo modificato qualche file di configurazione ed installato un bel po' di software. Vediamo come poter tornare indietro.&lt;br /&gt;
&lt;br /&gt;
== Rimozione pacchetti installati ==&lt;br /&gt;
I pacchetti da rimuovere, con removepkg, sono:&lt;br /&gt;
* mod_fcgid&lt;br /&gt;
* fcgi&lt;br /&gt;
(eventualmente anche ruby e libyaml).&lt;br /&gt;
 removepkg mod_fcgid fcgi&lt;br /&gt;
&lt;br /&gt;
Vanno anche cancellati, il file:&lt;br /&gt;
 /var/run/fcgid_shm&lt;br /&gt;
e la directory:&lt;br /&gt;
 /var/run/fcgidsock/&lt;br /&gt;
con:&lt;br /&gt;
 rm -r /var/run/fcgid_shm /var/run/fcgidsock/&lt;br /&gt;
&lt;br /&gt;
== Pacchetti per Ruby ==&lt;br /&gt;
Via '''gem''' e '''bundler''' abbiamo installato i seguenti pacchetti sotto (per Slackware64-14.0) ''/usr/lib64/ruby/gems/1.9.1/gems/'':&lt;br /&gt;
* actionmailer-3.2.8&lt;br /&gt;
* actionpack-3.2.8&lt;br /&gt;
* activemodel-3.2.8&lt;br /&gt;
* activerecord-3.2.8&lt;br /&gt;
* activeresource-3.2.8&lt;br /&gt;
* activesupport-3.2.8&lt;br /&gt;
* arel-3.0.2&lt;br /&gt;
* builder-3.0.0&lt;br /&gt;
* bundler-1.2.2&lt;br /&gt;
* coderay-1.0.8&lt;br /&gt;
* erubis-2.7.0&lt;br /&gt;
* fcgi-0.8.8&lt;br /&gt;
* hike-1.2.1&lt;br /&gt;
* i18n-0.6.1&lt;br /&gt;
* journey-1.0.4&lt;br /&gt;
* jquery-rails-2.0.3&lt;br /&gt;
* json-1.7.5&lt;br /&gt;
* mail-2.4.4&lt;br /&gt;
* mime-types-1.19&lt;br /&gt;
* multi_json-1.3.7&lt;br /&gt;
* mysql2-0.3.11&lt;br /&gt;
* net-ldap-0.3.1&lt;br /&gt;
* polyglot-0.3.3&lt;br /&gt;
* rack-1.4.1&lt;br /&gt;
* rack-cache-1.2&lt;br /&gt;
* rack-openid-1.3.1&lt;br /&gt;
* rack-ssl-1.3.2&lt;br /&gt;
* rack-test-0.6.2&lt;br /&gt;
* rails-3.2.8&lt;br /&gt;
* railties-3.2.8&lt;br /&gt;
* rake-10.0.2&lt;br /&gt;
* rdoc-3.12&lt;br /&gt;
* rmagick-2.13.1&lt;br /&gt;
* ruby-openid-2.1.8&lt;br /&gt;
* sprockets-2.1.3&lt;br /&gt;
* thor-0.16.0&lt;br /&gt;
* tilt-1.3.3&lt;br /&gt;
* treetop-1.4.12&lt;br /&gt;
* tzinfo-0.3.35&lt;br /&gt;
&lt;br /&gt;
Tutti questi pacchetti possono essere rimossi con il comando seguente (occhio che se qualche altro software per Ruby li usa ...):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/lib64/ruby/gems/1.9.1&lt;br /&gt;
rm -r */actionmailer-3.2.8* */actionpack-3.2.8* */activemodel-3.2.8* \&lt;br /&gt;
*/activerecord-3.2.8* */activeresource-3.2.8* */activesupport-3.2.8* \&lt;br /&gt;
*/arel-3.0.2* */builder-3.0.0* */bundler-1.2.2* */coderay-1.0.8* */erubis-2.7.0* \&lt;br /&gt;
*/fcgi-0.8.8* */hike-1.2.1* */i18n-0.6.1* */journey-1.0.4* */jquery-rails-2.0.3* \&lt;br /&gt;
*/json-1.7.5* */mail-2.4.4* */mime-types-1.19* */multi_json-1.3.7* \&lt;br /&gt;
*/mysql2-0.3.11* */net-ldap-0.3.1* */polyglot-0.3.3* */rack-1.4.1* \&lt;br /&gt;
*/rack-cache-1.2* */rack-openid-1.3.1* */rack-ssl-1.3.2* */rack-test-0.6.2* \&lt;br /&gt;
*/rails-3.2.8* */railties-3.2.8* */rake-10.0.2* */rdoc-3.12* */rmagick-2.13.1* \&lt;br /&gt;
*/ruby-openid-2.1.8* */sprockets-2.1.3* */thor-0.16.0* */tilt-1.3.3* \&lt;br /&gt;
*/treetop-1.4.12* */tzinfo-0.3.35*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redmine ==&lt;br /&gt;
Ovviamente va anche eliminato redmine stesso:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/www/htdocs/&lt;br /&gt;
rm -r redmine&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
Il database e l'utente creati si possono eliminare con:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mysql -u'root' -p'root_pass'&lt;br /&gt;
drop database redmine;&lt;br /&gt;
drop user redmine@localhost;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== File modificati ==&lt;br /&gt;
* ''/etc/httpd/httpd.conf'': eliminare la riga&lt;br /&gt;
 LoadModule fcgid_module lib64/httpd/modules/mod_fcgid.so&lt;br /&gt;
&lt;br /&gt;
* ''/etc/httpd/extra/httpd-vhosts.conf'': dipende se abbiamo settato [[#Virtual_host_dedicato|un virtual host dedicato]] o se abbiamo [[#Usare_un_virtual_host_esistente|usato un virtual host esistente]].&lt;br /&gt;
&lt;br /&gt;
* ''/etc/hosts'': solo se l'abbiamo modificato inserendo la riga:&lt;br /&gt;
 127.0.0.1       redmine&lt;br /&gt;
&lt;br /&gt;
= Autore =&lt;br /&gt;
[[Utente:Targzeta|Targzeta]] ([[Discussioni utente:Targzeta|discussioni]]) 13:05, 25 nov 2012 (CET)&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Fcgi-SlackBuild.tar.bz2</id>
		<title>File:Fcgi-SlackBuild.tar.bz2</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Fcgi-SlackBuild.tar.bz2"/>
				<updated>2012-11-23T16:45:24Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Targzeta ha caricato una nuova versione di &amp;amp;quot;File:Fcgi-SlackBuild.tar.bz2&amp;amp;quot;: Eliminato il '-j 3' nell'esecuzione del make.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contiene il necessari per compilare il pacchetto fcgi su Slackware&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Mod_fcgid-SlackBuild.tar.bz2</id>
		<title>File:Mod fcgid-SlackBuild.tar.bz2</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Mod_fcgid-SlackBuild.tar.bz2"/>
				<updated>2012-11-18T21:22:18Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Contiene il necessario per creare il pacchetto mod_fcgid su Slackware&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contiene il necessario per creare il pacchetto mod_fcgid su Slackware&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Fcgi-SlackBuild.tar.bz2</id>
		<title>File:Fcgi-SlackBuild.tar.bz2</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Fcgi-SlackBuild.tar.bz2"/>
				<updated>2012-11-18T21:13:12Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Contiene il necessari per compilare il pacchetto fcgi su Slackware&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contiene il necessari per compilare il pacchetto fcgi su Slackware&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Indice_delle_categorie</id>
		<title>Indice delle categorie</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Indice_delle_categorie"/>
				<updated>2012-11-16T22:39:17Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Eliminata categoria vuota &amp;quot;Configurazioni&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Image:configurazione.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Configurazione&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:installa e upgrade.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Install e Upgrade&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:laptop.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Laptop&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:multimediale.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Multimediale&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:networking.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Networking&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:packages.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Packages&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:periferiche.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Periferiche&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Image:slacky.png|center|56px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Slacky e Slackware&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:server x.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Server X&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:scritti misti.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Scritti misti&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:stampanti.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Stampanti&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:ufficio e web.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Ufficio e Web&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:script.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Script&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Image:kernel.png|center|48px|link=]]&amp;lt;categorytree mode=all showcount class=&amp;quot;&amp;quot;&amp;gt;Kernel&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Utente:Targzeta</id>
		<title>Utente:Targzeta</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Utente:Targzeta"/>
				<updated>2012-10-28T13:04:51Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Emanuele Tomasi aka targzeta &amp;lt;targzeta AT gmail DOT com&amp;gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Wallpapers</id>
		<title>Wallpapers</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Wallpapers"/>
				<updated>2012-10-28T13:01:08Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#sgallery:&lt;br /&gt;
|width=800&lt;br /&gt;
|height=600&lt;br /&gt;
|showarrows=true&lt;br /&gt;
|showcarousel=true&lt;br /&gt;
|showinfopane=false&lt;br /&gt;
|timed=true&lt;br /&gt;
|delay=6000&lt;br /&gt;
|imagelist=mayan-1024x768.jpg&lt;br /&gt;
Slackware_maja_kalendar.jpg&lt;br /&gt;
Maja_slack.jpg&lt;br /&gt;
Wallpaper_lampaaa.jpg&lt;br /&gt;
Wallpaper_slackgirl.jpg&lt;br /&gt;
Wallpaper_slackk.jpg&lt;br /&gt;
Wallpaper_slackware.jpg&lt;br /&gt;
Wallpaper_slackware-balon-1.jpg&lt;br /&gt;
Wallpaper_slackware-balon-2.jpg&lt;br /&gt;
Wallpaper_slackware-glass-break.jpg&lt;br /&gt;
Wallpaper_slackware-sace.jpg&lt;br /&gt;
Wallpaper_slackware-subgenius.jpg&lt;br /&gt;
Wallpaper_slackware_14.jpg&lt;br /&gt;
Higgs-slackware.jpg&lt;br /&gt;
My_black_slack_wallpaper.png&lt;br /&gt;
Onlyslackware.jpg&lt;br /&gt;
Slack14wall2.png&lt;br /&gt;
Slackwarecurrent2.png&lt;br /&gt;
Slackschoolwallpaper.png&lt;br /&gt;
Slackwallpaper.png&lt;br /&gt;
Slackware14_wallpaper1.png&lt;br /&gt;
Slackware_by_zealkane-d3bg6f9.jpg&lt;br /&gt;
}}&lt;br /&gt;
Per aggiungere un'immagine basta [[Speciale:Carica|caricarla]] e poi aggiungerla all'elenco. Tenete presente che il carousel ha uno sfondo nero, quindi non usate immagini trasparenti con scritte nere, piuttosto convertitele in JPEG.&lt;br /&gt;
&lt;br /&gt;
Lo staff.&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Wallpapers</id>
		<title>Wallpapers</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Wallpapers"/>
				<updated>2012-10-28T00:23:34Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#sgallery:&lt;br /&gt;
|width=800&lt;br /&gt;
|height=600&lt;br /&gt;
|showarrows=true&lt;br /&gt;
|showcarousel=true&lt;br /&gt;
|showinfopane=false&lt;br /&gt;
|timed=true&lt;br /&gt;
|delay=6000&lt;br /&gt;
|imagelist=mayan-1024x768.jpg&lt;br /&gt;
Slackware_maja_kalendar.jpg&lt;br /&gt;
Maja_slack.jpg&lt;br /&gt;
Wallpaper_lampaaa.jpg&lt;br /&gt;
Wallpaper_slackgirl.jpg&lt;br /&gt;
Wallpaper_slackk.jpg&lt;br /&gt;
Wallpaper_slackware.jpg&lt;br /&gt;
Wallpaper_slackware-balon-1.jpg&lt;br /&gt;
Wallpaper_slackware-balon-2.jpg&lt;br /&gt;
Wallpaper_slackware-glass-break.jpg&lt;br /&gt;
Wallpaper_slackware-sace.jpg&lt;br /&gt;
Wallpaper_slackware-subgenius.jpg&lt;br /&gt;
Wallpaper_slackware_14.jpg&lt;br /&gt;
}}&lt;br /&gt;
Per aggiungere un'immagine basta [[Speciale:Carica|caricarla]] e poi aggiungerla all'elenco. Tenete presente che il carousel ha uno sfondo nero, quindi non usate immagini trasparenti con scritte nere, piuttosto convertitele in JPEG.&lt;br /&gt;
&lt;br /&gt;
Lo staff.&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Wallpaper_slackware_14.jpg</id>
		<title>File:Wallpaper slackware 14.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Wallpaper_slackware_14.jpg"/>
				<updated>2012-10-28T00:16:29Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Wallpaper_slackware-subgenius.jpg</id>
		<title>File:Wallpaper slackware-subgenius.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Wallpaper_slackware-subgenius.jpg"/>
				<updated>2012-10-28T00:15:37Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Wallpaper_slackware-sace.jpg</id>
		<title>File:Wallpaper slackware-sace.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Wallpaper_slackware-sace.jpg"/>
				<updated>2012-10-28T00:14:56Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Wallpaper_slackware-glass-break.jpg</id>
		<title>File:Wallpaper slackware-glass-break.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Wallpaper_slackware-glass-break.jpg"/>
				<updated>2012-10-28T00:13:08Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Wallpaper_slackware-balon-2.jpg</id>
		<title>File:Wallpaper slackware-balon-2.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Wallpaper_slackware-balon-2.jpg"/>
				<updated>2012-10-28T00:11:18Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Wallpaper_slackware-balon-1.jpg</id>
		<title>File:Wallpaper slackware-balon-1.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Wallpaper_slackware-balon-1.jpg"/>
				<updated>2012-10-28T00:09:56Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Wallpaper_slackware.jpg</id>
		<title>File:Wallpaper slackware.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Wallpaper_slackware.jpg"/>
				<updated>2012-10-28T00:08:40Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Wallpaper_slackk.jpg</id>
		<title>File:Wallpaper slackk.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Wallpaper_slackk.jpg"/>
				<updated>2012-10-28T00:08:11Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Wallpaper_lampaaa.jpg</id>
		<title>File:Wallpaper lampaaa.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Wallpaper_lampaaa.jpg"/>
				<updated>2012-10-28T00:04:58Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Propaganda</id>
		<title>Propaganda</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Propaganda"/>
				<updated>2012-10-26T23:17:08Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Aggiunte le immagini di Zeljko f (thanks!!!)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#sgallery:&lt;br /&gt;
|width=700&lt;br /&gt;
|height=600&lt;br /&gt;
|showarrows=true&lt;br /&gt;
|showcarousel=true&lt;br /&gt;
|showinfopane=false&lt;br /&gt;
|timed=true&lt;br /&gt;
|delay=4000&lt;br /&gt;
|imagelist=Mistowhite.jpg&lt;br /&gt;
slackywhite.png&lt;br /&gt;
Latowhite.png&lt;br /&gt;
palla.jpg&lt;br /&gt;
mayan-1024x768.jpg&lt;br /&gt;
Slackware_maja_kalendar.jpg&lt;br /&gt;
Maja_slack.jpg&lt;br /&gt;
}}&lt;br /&gt;
Per aggiungere un'immagine basta [[Speciale:Carica|caricarla]] e poi aggiungerla all'elenco. Tenete presente che il carousel ha uno sfondo nero, quindi non usate immagini trasparenti con scritte nere, piuttosto convertitele in JPEG.&lt;br /&gt;
&lt;br /&gt;
Lo staff.&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Info_repository</id>
		<title>Info repository</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Info_repository"/>
				<updated>2012-10-24T21:50:16Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Cambiati gli rss.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L'Associazione Slacky mette a disposizione diversi repository contenenti centinaia di pacchetti precompilati e quindi già pronti per l'installazione. I repository partono dalla versione 11.0 e sono tutti corredati dei sorgenti di compilazione (SlackBuild &amp;amp; slack-desc). Chi pacchettizza, di solito, parte dalla compilazione in ambiente temporaneo per poi trascrivere tutte le operazioni eseguite su uno script con suffisso .SlackBuild, questo script sarà poi usato per compilare ed eventualmente ricompilare il pacchetto finale. Ulteriori informazioni sull'uso e la creazione dello SlackBuild si possono reperire [[Slackware &amp;amp; SlackBuild|qui]] e [[Creare pacchetti txz per Slackware|qui]]. Il nostro sistema di analisi dei pacchetti permette di eseguire ricerche semplificate solo sulle ultime due release stabili della Slackware a 32 o 64. Per accedere ai pacchetti delle versioni precedenti dovete procedere manualmente consultando le categorie oppure aiutandosi con il FILELIST.TXT presenti a questo indirizzo http://repository.slacky.eu/&lt;br /&gt;
&lt;br /&gt;
Se volete contribuire come pacchettizzatori inviate una mail all'indirizzo packages@slacky.it&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:33%; vertical-align: top;&amp;quot;|&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #89e589; background-color:#f2fff2; padding: 3px; margin: 3px; float:left;text-align:left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;rss max=20&amp;gt;rss/Slacky-ChangeLog-32.xml&amp;lt;/rss&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|style=&amp;quot;width:33%; vertical-align: top;&amp;quot;|&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #307aa9; background-color:#f5fbff; padding: 3px; margin: 3px; float:left;text-align:left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;rss max=20&amp;gt;rss/Slacky-ChangeLog-64.xml&amp;lt;/rss&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/ChangeLog_Slackware</id>
		<title>ChangeLog Slackware</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/ChangeLog_Slackware"/>
				<updated>2012-10-24T21:49:15Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Cambiati gli rss.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questa pagina raccoglie tutti i Changelog del ramo stabile e di sviluppo sia a 32 sia a 64 Bit.&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%; margin-top:10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;rssboxt&amp;quot;&amp;gt;ChangeLog Slackware-14.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;10&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-32.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
[http://www.slacky.eu/slackwarefeed/slackware-14.0/ChangeLog.rss Guarda tutto]&lt;br /&gt;
|&amp;lt;div class=&amp;quot;rssboxt&amp;quot;&amp;gt;ChangeLog Slackware64-14.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;10&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-64.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
[http://www.slacky.eu/slackwarefeed/slackware64-14.0/ChangeLog.rss Guarda tutto]&lt;br /&gt;
|- &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;rssboxt&amp;quot;&amp;gt;ChangeLog Slackware-current&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;10&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-current32.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
[http://www.slacky.eu/slackwarefeed/slackware-current/ChangeLog.rss Guarda tutto]&lt;br /&gt;
|&amp;lt;div class=&amp;quot;rssboxt&amp;quot;&amp;gt;ChangeLog Slackware64-current&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;10&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-current64.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
[http://www.slacky.eu/slackwarefeed/slackware64-current/ChangeLog.rss Guarda tutto]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/ChangeLog_Repository</id>
		<title>ChangeLog Repository</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/ChangeLog_Repository"/>
				<updated>2012-10-24T21:47:23Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Cambiati gli rss.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questa pagina raccoglie tutti i Changelog del repository Slacky.eu&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width:100%; margin-top:10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;rssboxt&amp;quot;&amp;gt;Our packages for Slackware-14.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;25&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slacky-ChangeLog-32.xml&amp;lt;/rss&amp;gt;&lt;br /&gt;
[http://repository.slacky.eu/slackware-14.0/ChangeLog.xml Guarda tutto]&lt;br /&gt;
|&amp;lt;div class=&amp;quot;rssboxt&amp;quot;&amp;gt;Our packages for Slackware64-14.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;25&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slacky-ChangeLog-64.xml&amp;lt;/rss&amp;gt;&lt;br /&gt;
[http://repository.slacky.eu/slackware64-14.0/ChangeLog.xml Guarda tutto]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Pagina_principale</id>
		<title>Pagina principale</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Pagina_principale"/>
				<updated>2012-10-24T21:37:28Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Cambiati gli rss.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTITLE__&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{:Pagina_principale/Header}}&lt;br /&gt;
{|style=&amp;quot;width:100%;margin-top:10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;width:70%;margin:0;padding:0;&amp;quot;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;boxblue&amp;quot;&amp;gt;News&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;overflow-x:hidden; overflow-y:auto; position: relative; max-height: 350px; margin-top: 10px;background-color:#ebebeb;padding:10px;border-radius: 0.3em;&amp;quot;&amp;gt;&lt;br /&gt;
{{Template:Latest News}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; rowspan=&amp;quot;4&amp;quot; style=&amp;quot;width:30%; padding:0 10px 0;&amp;quot; class=&amp;quot;forumnews&amp;quot;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;boxblue&amp;quot;&amp;gt;Ultimi post dal forum&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;external&amp;quot;&amp;gt;&amp;lt;rss time=&amp;quot;300&amp;quot; number=&amp;quot;25&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/lastopic.xml&amp;lt;/rss&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:20px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Repository|Our packages for Slackware-14.0]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;8&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slacky-ChangeLog-32.xml&amp;lt;/rss&amp;gt;&lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:20px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Repository|Our packages for Slackware64-14.0]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;8&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slacky-ChangeLog-64.xml&amp;lt;/rss&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:10px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Slackware|ChangeLog Slackware-14.0]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;3&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-32.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:10px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Slackware|ChangeLog Slackware64-14.0]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;3&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-64.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:10px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Slackware|ChangeLog Slackware-current]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;3&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-current32.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-top:10px;&amp;quot; class=&amp;quot;rssboxt&amp;quot;&amp;gt;[[ChangeLog_Slackware|ChangeLog Slackware64-current]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;rss number=&amp;quot;3&amp;quot; desc=&amp;quot;off&amp;quot; title=&amp;quot;off&amp;quot;&amp;gt;rss/Slackware-ChangeLog-current64.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Propaganda</id>
		<title>Propaganda</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Propaganda"/>
				<updated>2012-10-23T18:21:11Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Aggiunto testo informativo sull'aggiunta di una nuova immagine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#sgallery:&lt;br /&gt;
|width=600&lt;br /&gt;
|height=500&lt;br /&gt;
|showarrows=true&lt;br /&gt;
|showcarousel=true&lt;br /&gt;
|showinfopane=false&lt;br /&gt;
|timed=true&lt;br /&gt;
|delay=4000&lt;br /&gt;
|imagelist=Mistowhite.jpg&lt;br /&gt;
slackywhite.png&lt;br /&gt;
Latowhite.png&lt;br /&gt;
palla.jpg&lt;br /&gt;
mayan-1024x768.jpg&lt;br /&gt;
}}&lt;br /&gt;
Per aggiungere un'immagine basta [[Speciale:Carica|caricarla]] e poi aggiungerla all'elenco. Tenete presente che il carousel ha uno sfondo nero, quindi non usate immagini trasparenti con scritte nere, piuttosto convertitele in JPEG.&lt;br /&gt;
&lt;br /&gt;
Lo staff.&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Pagina_principale</id>
		<title>Pagina principale</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Pagina_principale"/>
				<updated>2012-10-18T16:20:47Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Installa_iwl4695_rev01.sh</id>
		<title>File:Installa iwl4695 rev01.sh</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Installa_iwl4695_rev01.sh"/>
				<updated>2012-10-08T22:18:32Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Targzeta ha caricato una nuova versione di &amp;amp;quot;File:Installa iwl4695 rev01.sh&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Xorg-Asus_M2N-E.conf</id>
		<title>File:Xorg-Asus M2N-E.conf</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Xorg-Asus_M2N-E.conf"/>
				<updated>2012-10-08T21:41:28Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Targzeta ha caricato una nuova versione di &amp;amp;quot;File:Xorg-Asus M2N-E.conf&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/MediaWiki:Sidebar</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/MediaWiki:Sidebar"/>
				<updated>2012-10-07T15:06:42Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Aggiunto il repository della 14.0 e tolto il 13.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Navigazione&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** Speciale:UltimeModifiche | Ultime Modifiche&lt;br /&gt;
 &lt;br /&gt;
* Slackware&lt;br /&gt;
** Slackware | Cos'è Slackware&lt;br /&gt;
** ChangeLog Slackware | ChangeLog &lt;br /&gt;
** Ottenere Slackware | Ottenere Slackware&lt;br /&gt;
** Open Source | Cos'è l'open source?&lt;br /&gt;
&lt;br /&gt;
* Associazione&lt;br /&gt;
** Associazione|Info Associazione&lt;br /&gt;
** http://www.slacky.eu/associazione/form.php | Richiesta iscrizione&lt;br /&gt;
** http://www.slacky.eu/associazione/modulo_iscrizione.pdf | Modulo iscrizione&lt;br /&gt;
** http://www.slacky.eu/associazione/statuto_slacky.pdf | Statuto&lt;br /&gt;
** Dettaglio uscite | Dettaglio uscite&lt;br /&gt;
** Donazione | Donazione&lt;br /&gt;
** Collabora | Collabora&lt;br /&gt;
** Propaganda | Propaganda&lt;br /&gt;
&lt;br /&gt;
* Documenti&lt;br /&gt;
** Documentazione | Info Documentazione&lt;br /&gt;
** http://docs.slackware.com | Documentazione ufficiale SlackDocs&lt;br /&gt;
** Indice_delle_categorie | Indice generale&lt;br /&gt;
** Nuovo_articolo | Nuovo articolo&lt;br /&gt;
** category:Slacky e Slackware | Slacky e Slackware&lt;br /&gt;
** category:Configurazione | Configurazione&lt;br /&gt;
** category:Install_e_Upgrade | Install e Upgrade&lt;br /&gt;
** category:Scritti_misti | Scritti misti&lt;br /&gt;
** category:Script | Script&lt;br /&gt;
** category:Networking | Networking&lt;br /&gt;
** category:Packages | Packages&lt;br /&gt;
** category:Periferiche | Periferiche&lt;br /&gt;
** category:Laptop | Laptop&lt;br /&gt;
** category:Multimediale | Multimediale&lt;br /&gt;
** category:Server_X | Server X&lt;br /&gt;
** category:Kernel | Kernel&lt;br /&gt;
** category:Stampanti | Stampanti&lt;br /&gt;
** category:Ufficio_e_Web | Ufficio e Web&lt;br /&gt;
&lt;br /&gt;
* Archivio Storico&lt;br /&gt;
** category:Archivio-Slackware-12.x | Slackware 12.x&lt;br /&gt;
** category:Archivio-Slackware-11.x | Slackware 11.x&lt;br /&gt;
** category:Archivio-Slackware-10.x | Slackware 10.x&lt;br /&gt;
** category:Archivio| Archivio (other)&lt;br /&gt;
&lt;br /&gt;
* Repository&lt;br /&gt;
** Info repository | Info repository&lt;br /&gt;
** http://www.slacky.eu/asche/pkgs/index.php?ver=16 | Slackware-14.0&lt;br /&gt;
** http://www.slacky.eu/asche64/pkgs/index.php?ver=16 | Slackware64-14.0&lt;br /&gt;
** http://www.slacky.eu/asche/pkgs/index.php?ver=15 | Slackware-13.37&lt;br /&gt;
** http://www.slacky.eu/asche64/pkgs/index.php?ver=15 | Slackware64-13.37&lt;br /&gt;
** ChangeLog Repository | ChangeLog Repository&lt;br /&gt;
** http://repository.slacky.eu | Tutti i repository&lt;br /&gt;
** Segnala un problema | Segnala un problema&lt;br /&gt;
** Mirror | Mirror&lt;br /&gt;
** Altre risorse | Altre risorse&lt;br /&gt;
** GPG Key | GPG Key&lt;br /&gt;
&lt;br /&gt;
* Nostri progetti&lt;br /&gt;
** Nostri progetti | Info nostri progetti&lt;br /&gt;
** Slackyd | Slackyd&lt;br /&gt;
** Gslacky | GSlacky&lt;br /&gt;
** Slackware4Dummies | Slackware 4 Dummies&lt;br /&gt;
&lt;br /&gt;
* Feed di Slacky&lt;br /&gt;
** Feed_di_Slacky | Feed RSS&lt;br /&gt;
&lt;br /&gt;
* Canale IRC&lt;br /&gt;
** Canale IRC | Info Canale IRC&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Pagina_principale</id>
		<title>Pagina principale</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Pagina_principale"/>
				<updated>2012-10-06T08:15:53Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/ChangeLog_Slackware</id>
		<title>ChangeLog Slackware</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/ChangeLog_Slackware"/>
				<updated>2012-10-06T08:13:36Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: passato alla 14.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Info_repository</id>
		<title>Info repository</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Info_repository"/>
				<updated>2012-10-06T08:07:17Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: passato alla 14.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/ChangeLog_Repository</id>
		<title>ChangeLog Repository</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/ChangeLog_Repository"/>
				<updated>2012-10-06T08:01:41Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: passato alla 14.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Discussione:Slackware_su_pennina_USB</id>
		<title>Discussione:Slackware su pennina USB</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Discussione:Slackware_su_pennina_USB"/>
				<updated>2012-10-02T23:01:33Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ma non sarebbe meglio usare un file-system ext2 per evitare le scritture e riscritture del giornale, che -- da quanto ho capito -- accorciano la vita della pennina?&lt;br /&gt;
&lt;br /&gt;
Ottima osservazione!!! -- targzeta&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Discussione:Slackware_su_pennina_USB</id>
		<title>Discussione:Slackware su pennina USB</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Discussione:Slackware_su_pennina_USB"/>
				<updated>2012-10-02T23:01:03Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ma non sarebbe meglio usare un file-system ext2 per evitare le scritture e riscritture del giornale, che -- da quanto ho capito -- accorciano la vita della pennina?&lt;br /&gt;
&lt;br /&gt;
Ottima osservazione!!!&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Find_external_SlackPkg_files</id>
		<title>Find external SlackPkg files</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Find_external_SlackPkg_files"/>
				<updated>2012-10-02T22:28:44Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Caricato i file esterni all'interno di wikislacky&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Per http://www.slacky.eu/wikislack/index.php?title=Find_external_SlackPkg_files --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;br /&gt;
= Introduzione =&lt;br /&gt;
I &amp;quot;maniaci delle pulizie&amp;quot; - come me - a volte hanno la&lt;br /&gt;
necessit&amp;amp;agrave; di scovare quei file, presenti nella root directory,&lt;br /&gt;
che non appartengono a nessun pacchetto installato. Questo infatti&lt;br /&gt;
permette di stabilire se quei file sono vecchi e vanno rimossi oppure&lt;br /&gt;
sono file di configurazione (o altro) creati dai programmi a run-time.&lt;br /&gt;
&lt;br /&gt;
Spesso e volentieri qualcuno installa un pacchetto ma poi si accorge&lt;br /&gt;
che non gli serviva, quindi lo rimuove. Il dubbio si insinua nella&lt;br /&gt;
mente di un &amp;quot;maniaco delle pulizie&amp;quot;: &amp;quot;ho rimosso tutto? il sistema&lt;br /&gt;
&amp;amp;egrave; ritornato come se il pacchetto non fosse mai stato&lt;br /&gt;
installato?&amp;quot;. Generalmente i dubbi sono infondati, quasi tutti i&lt;br /&gt;
pacchetti vengono rimossi completamente e non lasciano tracce, ma&lt;br /&gt;
&amp;amp;egrave; proprio quel 'quasi tutti' che non fa dormire sonni&lt;br /&gt;
tranquilli.&lt;br /&gt;
&lt;br /&gt;
Lo script find_external_SlackPkg_files.sh esegue una scansione di&lt;br /&gt;
tutta la root directory e controlla, file per file, se esso &amp;amp;egrave;&lt;br /&gt;
stato installato da un pacchetto Slackware oppure no. Quindi&lt;br /&gt;
visualizza in output tutti quei file &amp;quot;estranei&amp;quot; ai pacchetti.&lt;br /&gt;
&lt;br /&gt;
Lo script pu&amp;amp;ograve; essere eseguito sia come root che come utente&lt;br /&gt;
normale. In quest'ultimo caso, ovviamente, lo script non potr&amp;amp;agrave;&lt;br /&gt;
scandire quelle directory di propriet&amp;amp;agrave; di altri utenti, ma&lt;br /&gt;
dar&amp;amp;agrave; comunque dei buoni risultati.&lt;br /&gt;
&lt;br /&gt;
= L'algoritmo =&lt;br /&gt;
L'algoritmo &amp;amp;egrave; molto semplice, lo script esegue un '''find'''&lt;br /&gt;
sulla root directory filtrando alcuni path (si veda la sezione&lt;br /&gt;
[[#Filtrare dei percorsi]]).  Una volta creata questa 'file list', lo&lt;br /&gt;
script individua anche tutti i link simbolici creati dagli script&lt;br /&gt;
'''doinst.sh''' dei vari pacchetti. Quindi, controlla quali tra i file&lt;br /&gt;
presenti nella 'file list' non appartiene ad un pacchetto e non&lt;br /&gt;
&amp;amp;egrave; neanche un link simbolico creato da un '''doinst.sh'''.&lt;br /&gt;
&lt;br /&gt;
{{Information&lt;br /&gt;
|Informazione:&lt;br /&gt;
|L'algoritmo &amp;amp;egrave; semplice ma la sia esecuzione &amp;amp;egrave; bella lunga. Diciamo che la vostra CPU non vi ringrazier&amp;amp;agrave;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Filtrare dei percorsi ==&lt;br /&gt;
Lo script non scandisce tutta la root directory, ma filtra i seguenti&lt;br /&gt;
percorsi speciali:&lt;br /&gt;
* /dev&lt;br /&gt;
* /proc&lt;br /&gt;
* /root&lt;br /&gt;
* /sys&lt;br /&gt;
* /var/log/packages&lt;br /&gt;
* /var/log/scripts&lt;br /&gt;
* /var/log/removed_packages&lt;br /&gt;
* /var/log/removed_scripts&lt;br /&gt;
&lt;br /&gt;
Si possono inoltre (ed &amp;amp;egrave; consigliato farlo) impostare dei&lt;br /&gt;
filtri utente semplicemente creando il file&lt;br /&gt;
''~/.find_external_SlackPkg_files''. Il formato del file &amp;amp;egrave; il&lt;br /&gt;
seguente:&lt;br /&gt;
* tutte le righe vuote e le righe che iniziano con un '#' sono ignorate.&lt;br /&gt;
* ogni riga non ignorata deve contenere esattamente un percorso e, opzionalmente, un comando da controllare. In quest'ultimo caso, il comando deve essere separato dal percorso da almeno un carattere di spaziatura; il percorso associato sar&amp;amp;agrave; filtrato se, e solo se, il comando esiste nel PATH.&lt;br /&gt;
&lt;br /&gt;
Quindi ad esempio, se il file contiene le seguenti righe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# My comments&lt;br /&gt;
&lt;br /&gt;
/home&lt;br /&gt;
/mnt&lt;br /&gt;
/media&lt;br /&gt;
/usr/share/fonts/*/fonts.scale&lt;br /&gt;
/usr/share/mime                       update-mime-database&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Allora lo script ignorer&amp;amp;agrave;:&lt;br /&gt;
* la directory ''/home''&lt;br /&gt;
* le directory contenenti i filesystem montati, ma che sono estranei alla distribuzione (''/mnt'' e ''/media'').&lt;br /&gt;
* tutti i file generati dal comando '''mkfontscale'''&lt;br /&gt;
* la directory ''/usr/share/mime'' se, e solo se, esiste il comando '''update-mime-database'''&lt;br /&gt;
&lt;br /&gt;
{{Warning&lt;br /&gt;
|Nota:&lt;br /&gt;
|Se il path da filtrare contiene uno spazio, allora lo script penser&amp;amp;agrave; che ci&amp;amp;ograve; che si trova dopo lo spazio sia un comando da controllare. In questo caso, affinch&amp;amp;eacute; tutto funzioni, bisogna aggiungere un altro spazio e poi un comando sicuramente esistente (ad esempio la bash, visto che lo script &amp;amp;egrave; interpretato proprio da questa shell).&lt;br /&gt;
Es:&lt;br /&gt;
/my path with spaces  bash&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Hint&lt;br /&gt;
|Nota:&lt;br /&gt;
|I percorsi da filtrare sono passati al comando '''find''' tramite l'uso della sua opzione '''-path'''. Si veda il manuale di '''find''' per conoscere il formato accettato.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Le opzioni =&lt;br /&gt;
== -h ==&lt;br /&gt;
Mostra l'help ed esce.&lt;br /&gt;
&lt;br /&gt;
== -f ==&lt;br /&gt;
Mostra in output i percorsi filtrati ed esce.&lt;br /&gt;
&lt;br /&gt;
= I link simbolici alle librerie =&lt;br /&gt;
Alcuni link simbolici alle librerie, che lo script mostra in output,&lt;br /&gt;
vengono creati dal comando '''ldconfig'''. In generale eliminare&lt;br /&gt;
questi link non comporta danno poich&amp;amp;eacute; basta eseguire di nuovo&lt;br /&gt;
il comando citato (e la Slackware di default lo fa ad ogni avvio) per&lt;br /&gt;
ricrearli. E' ovvio per&amp;amp;ograve; che sarebbe meglio lasciarli.&lt;br /&gt;
&lt;br /&gt;
= Le glibc =&lt;br /&gt;
Le librerie '''glibc''' non sono installate in maniera canonica. Il&lt;br /&gt;
pacchetto installa queste librerie in una directory temporanea&lt;br /&gt;
chiamata ''incoming'' e poi lo script di post-installazione sposta&lt;br /&gt;
tutte le librerie nella locazione opportuna. Questo viene fatto&lt;br /&gt;
proprio per impedire che le librerie vengano eliminate insieme al&lt;br /&gt;
pacchetto. Se questo accadesse, infatti, un aggiornamento 'a caldo'&lt;br /&gt;
delle '''glibc''' farebbe s&amp;amp;igrave; che tutti i comandi linkati con le&lt;br /&gt;
vecchie librerie non funzionino pi&amp;amp;ugrave;. Questo vorrebbe dire un&lt;br /&gt;
blocco del sistema poich&amp;amp;eacute; non si avrebbero pi&amp;amp;ugrave; a&lt;br /&gt;
disposizione i comandi basilari come '''rm''', '''ls''', etc...&lt;br /&gt;
&lt;br /&gt;
{{Warning&lt;br /&gt;
|Attenzione:&lt;br /&gt;
|Lo script individua correttamente le librerie installate dal pacchetto '''glibc''', ma questo rappresenta comunque un classico caso di '''doinst.sh''' non banale (si veda la sezione [[#Bug]]). Si faccia quindi attenzione ad eliminare 'a priori' tutti i file segnalati dallo script.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= KDE =&lt;br /&gt;
KDE usa la directory ''/var/tmp'' per inserire le cache utenti. In&lt;br /&gt;
particolare, per ogni utente crea la directory&lt;br /&gt;
''/var/tmp/kdecache-username''. Essendo queste directory create a&lt;br /&gt;
run-time da KDE lo script le individuer&amp;amp;agrave; come &amp;quot;estranee&amp;quot; a&lt;br /&gt;
tutti i pacchetti.&lt;br /&gt;
&lt;br /&gt;
Si pu&amp;amp;ograve; quindi inserire la seguente regola di filtraggio per&lt;br /&gt;
evitare che lo script mostri in output tutte queste directory:&lt;br /&gt;
 /var/tmp/kdecache-*      kde-mv&lt;br /&gt;
il comando '''kde-mv''' viene installato con il pacchetto&lt;br /&gt;
'kdebase-runtime'. Grazie a questa regola, quindi, tutte le cache&lt;br /&gt;
utenti di KDE saranno ignorate sino a che si decide di mantenere nel&lt;br /&gt;
sistema tutto il desktop environment. Alla rimozione di KDE (e quindi&lt;br /&gt;
anche del comando '''kde-mv'''), lo script consiglier&amp;amp;agrave; di&lt;br /&gt;
eliminare anche tutte la sua cache.&lt;br /&gt;
&lt;br /&gt;
= Bug =&lt;br /&gt;
Per quanto lo script si sforzi di trovare tutti e soli quei file e&lt;br /&gt;
directory &amp;quot;estranei&amp;quot; ai pacchetti installati, alcuni '''doinst.sh'''&lt;br /&gt;
sono scritti in maniera particolare e fanno ben altro che creare&lt;br /&gt;
semplici link simbolici. Ad esempio uno script di post installazione&lt;br /&gt;
potrebbe creare nuove directory, oppure copiare e/o spostare dei file da&lt;br /&gt;
una directory ad un'altra. Tutti questi rappresentano casi non banali&lt;br /&gt;
che lo script non &amp;amp;egrave; in grado di individuare.&lt;br /&gt;
&lt;br /&gt;
= Lo script =&lt;br /&gt;
Bene, &amp;amp;egrave; ora giunto il momento di scaricare e provare lo script, che&lt;br /&gt;
pu&amp;amp;ograve; essere trovato [[Media:Find_external_SlackPkg_files.sh|qui]].&lt;br /&gt;
&lt;br /&gt;
Un buon file da usare come filtro invece lo potete trovare [[Media:Find_external_SlackPkg_files_filter.txt|qui]].&lt;br /&gt;
&lt;br /&gt;
una volta scaricato basta rinominarlo usando il comando seguente:&lt;br /&gt;
 mv find_external_SlackPkg_files_filter.txt  ~/.find_external_SlackPkg_files&lt;br /&gt;
Se secondo voi ci sono altri path che varrebbe la pena inserire in&lt;br /&gt;
questo file, non esitate a scrivermi.&lt;br /&gt;
&lt;br /&gt;
= Vedere anche =&lt;br /&gt;
[http://www.slacky.eu/wikislack/index.php?title=Unused_SlackPkg unused_SlackPkg.sh]&lt;br /&gt;
&lt;br /&gt;
= Copyright - License =&lt;br /&gt;
Autore (ultima modifica): [[Utente:targzeta|targzeta]] 00:54, 3 ott 2011 (CEST)&lt;br /&gt;
&lt;br /&gt;
Ringrazio gli utenti di Slacky.eu, Procopio e ZeroUno per i loro&lt;br /&gt;
feedback e suggerimenti. Se lo script &amp;amp;egrave; migliorato nel tempo&lt;br /&gt;
&amp;amp;egrave; soprattutto grazie a loro.&lt;br /&gt;
{{Information&lt;br /&gt;
|GNU Free Documentation Licence&lt;br /&gt;
|This article is released under the GNU Free Documentation Licence. You are welcome to copy and redistribute it (subject to certain conditions).&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Find_external_SlackPkg_files_filter.txt</id>
		<title>File:Find external SlackPkg files filter.txt</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Find_external_SlackPkg_files_filter.txt"/>
				<updated>2012-10-02T22:27:10Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Find_external_SlackPkg_files.sh</id>
		<title>File:Find external SlackPkg files.sh</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Find_external_SlackPkg_files.sh"/>
				<updated>2012-10-02T22:24:48Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Unused_SlackPkg</id>
		<title>Unused SlackPkg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Unused_SlackPkg"/>
				<updated>2012-10-02T22:23:23Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Caricato i file esterni all'interno di wikislacky&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Per http://www.slacky.eu/wikislack/index.php?title=Unused_SlackPkg --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;br /&gt;
= Introduzione =&lt;br /&gt;
La Slackware, come sappiamo, non ha un sistema per il controllo&lt;br /&gt;
automatico delle dipendenze. Questo vuol dire che se oggi installiamo&lt;br /&gt;
il pacchetto X che necessita del pacchetto Y, e domani eliminiamo il&lt;br /&gt;
pacchetto X, il pacchetto Y potrebbe non essere pi&amp;amp;ugrave; utilizzato&lt;br /&gt;
da nessun altro, diventando cos&amp;amp;igrave; un pacchetto orfano: installato&lt;br /&gt;
ma non utilizzato.&lt;br /&gt;
&lt;br /&gt;
Lo script unused_SlackPkg.sh si occupa di controllare tutti i&lt;br /&gt;
pacchetti presenti sulla nostra Slackware in cerca di quelli&lt;br /&gt;
orfani. Per fare questo, lo script verifica la data di ultimo accesso&lt;br /&gt;
di tutti i file installati da ogni pacchetto e, se questa data&lt;br /&gt;
risulta essere troppo vecchia, allora desume che il pacchetto &amp;amp;egrave;&lt;br /&gt;
inutilizzato e stampa in output il suo nome.&lt;br /&gt;
&lt;br /&gt;
= Le opzioni =&lt;br /&gt;
== -h ==&lt;br /&gt;
Questa opzione ha il solo scopo di mostrare l'help.&lt;br /&gt;
&lt;br /&gt;
== -d &amp;lt;date&amp;gt; ==&lt;br /&gt;
Lo script controlla la data di ultimo accesso dei file installati da&lt;br /&gt;
un pacchetto e la confronta con una data di riferimento che di default&lt;br /&gt;
&amp;amp;egrave; un mese nel passato. Ovvero, lo script decide che un&lt;br /&gt;
pacchetto &amp;amp;egrave; inutilizzato se la data di ultimo accesso di tutti&lt;br /&gt;
i file installati &amp;amp;egrave; pi&amp;amp;ugrave; vecchia di un mese (cio&amp;amp;eacute;,&lt;br /&gt;
il pacchetto non &amp;amp;egrave; stato utilizzato per un mese).&lt;br /&gt;
&lt;br /&gt;
Con questa opzione si pu&amp;amp;ograve; modificare la data di riferimento. Il&lt;br /&gt;
parametro &amp;amp;egrave; lo stesso parametro dell'opzione '''-d''' del&lt;br /&gt;
comando '''date(1)'''.&lt;br /&gt;
&lt;br /&gt;
== -s ==&lt;br /&gt;
Se viene specificata questa opzione, lo script, oltre a stampare a&lt;br /&gt;
video il nome del pacchetto ritenuto inutilizzato, ne stampa anche la&lt;br /&gt;
dimensione su disco.&lt;br /&gt;
&lt;br /&gt;
= Filtrare i pacchetti =&lt;br /&gt;
Lo script a volte potrebbe indicare come inutilizzato un pacchetto&lt;br /&gt;
fondamentale della Slackware. Uno tra tutti il pacchetto&lt;br /&gt;
'''aaa_base''', il quale contiene solo la struttura della root&lt;br /&gt;
directory e non fa altro che creare tutte le directory necessarie. Il&lt;br /&gt;
pacchetto '''aaa_base''' contiene solo due file:&lt;br /&gt;
 /etc/slackware-version&lt;br /&gt;
 /var/spool/mail/root.new&lt;br /&gt;
e va da se che diventer&amp;amp;agrave; presto inutilizzato.&lt;br /&gt;
&lt;br /&gt;
Per ovviare a questo tipo di inconveniente, specie se si utilizza&lt;br /&gt;
l'output dello script per eseguire una pulitura automatica del&lt;br /&gt;
sistema, si pu&amp;amp;ograve; creare il file ''~/.unused_SlackPkg'' ed&lt;br /&gt;
inserirvi, uno per ogni riga, i nomi dei pacchetti che si vogliono&lt;br /&gt;
filtrare. Cos&amp;amp;igrave;, ad esempio, se vogliamo filtrare il pacchetto&lt;br /&gt;
'''aaa_base''' baster&amp;amp;agrave; eseguire questo comando:&lt;br /&gt;
 $&amp;gt; echo aaa_base &amp;gt;&amp;gt; ~/.unused_SlackPkg&lt;br /&gt;
&lt;br /&gt;
= Lo script =&lt;br /&gt;
Bene, &amp;amp;egrave; ora giunto il momento di scaricare e provare lo script, che&lt;br /&gt;
pu&amp;amp;ograve; essere trovato [[Media:Unused_SlackPkg.sh‎|qui]].&lt;br /&gt;
&lt;br /&gt;
= Non-Bug =&lt;br /&gt;
Lo script si rifiuta di funzionare se la root directory viene montata con&lt;br /&gt;
l'opzione '''noatime'''. Infatti, come cita mount(8):&lt;br /&gt;
 '''noatime'''&lt;br /&gt;
    Do not update inode access times on this filesystem (e.g, for faster access on the news spool to speed up news servers).&lt;br /&gt;
con questa opzione la data di ultimo accesso ai file non viene mai&lt;br /&gt;
modificata, quindi l'algoritmo seguito dallo script non funziona.&lt;br /&gt;
&lt;br /&gt;
= Vedere anche =&lt;br /&gt;
[http://www.slacky.eu/wikislack/index.php?title=Find_external_SlackPkg_files find_external_SlackPkg_files.sh]&lt;br /&gt;
&lt;br /&gt;
= Copyright - License =&lt;br /&gt;
Autore (ultima modifica): [[Utente:targzeta|targzeta]] 13:49, 18 set 2011 (CEST)&lt;br /&gt;
{{Information&lt;br /&gt;
|GNU Free Documentation Licence&lt;br /&gt;
|This article is released under the GNU Free Documentation Licence. You are welcome to copy and redistribute it (subject to certain conditions).&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Unused_SlackPkg.sh</id>
		<title>File:Unused SlackPkg.sh</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Unused_SlackPkg.sh"/>
				<updated>2012-10-02T22:22:23Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Check_For_Updated</id>
		<title>Check For Updated</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Check_For_Updated"/>
				<updated>2012-10-02T22:19:41Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Caricato i file esterni all'interno di wikislacky&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Per http://www.slacky.eu/wikislack/index.php?title=Check_For_Updates --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Script]]&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Lo script '''check_for_updates.sh''' controlla se una determinata pagina internet &amp;amp;egrave; stata modificata. Lo si pu&amp;amp;ograve; pensare come un'alternativa ai feed RSS.&lt;br /&gt;
&lt;br /&gt;
Lo script &amp;amp;egrave; stato creato con lo scopo di scoprire se un determinato progetto &amp;amp;egrave; stato modificato oppure no, dall'ultima volta che lo si &amp;amp;egrave; controllato.&lt;br /&gt;
&lt;br /&gt;
=Download=&lt;br /&gt;
Lo script lo potete trovare [[Media:Check_for_updates.sh‎|qui]].&lt;br /&gt;
&lt;br /&gt;
==NOTA per le versioni dalla 1.5 in poi==&lt;br /&gt;
Se si passa da una versione precedente ad una &amp;gt;= della 1.5, dato che lo script ha cambiato nome (da '''check_upgrade.sh''' a '''check_for_updates.sh'''), si dovrebbero anche rinominare tutte le sottodirectory ''.check_upgrade'' in ''.check_for_updates''. Ecco uno script che potrebbe essere d'aiuto:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for file in *;&lt;br /&gt;
  do&lt;br /&gt;
    if [ -d $file ] &amp;amp;&amp;amp; [ -d ${file}/.check_upgrade ];&lt;br /&gt;
      then&lt;br /&gt;
        mv ${file}/.check_upgrade ${file}/.check_for_updates;&lt;br /&gt;
    fi;&lt;br /&gt;
  done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Se invece &amp;amp;egrave; la prima volta che si usa lo script, questo non &amp;amp;egrave; necessario!!'''&lt;br /&gt;
&lt;br /&gt;
=L'ambiente di lavoro=&lt;br /&gt;
Lo script lavora su directory, l'idea &amp;amp;egrave; che per ogni progetto che l'utente segue, ci sia una directory associata, ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; ls -1F software/&lt;br /&gt;
FileZilla/&lt;br /&gt;
a52dec/&lt;br /&gt;
aircrack-ng/&lt;br /&gt;
amrnb/&lt;br /&gt;
amrwb/&lt;br /&gt;
audacity/&lt;br /&gt;
...&lt;br /&gt;
check_for_updates.sh*&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
come si nota, lo script &amp;amp;egrave; all'interno della directory ''software'', la quale contiene una directory per ogni progetto che si vuole seguire (FileZilla, aicrack-ng, etc...).&lt;br /&gt;
&lt;br /&gt;
=Lo script e le varie modalit&amp;amp;agrave;=&lt;br /&gt;
Lo script opera in diversi modi a seconda di quale modalit&amp;amp;agrave; si scelga di eseguire. L'elenco delle modalit&amp;amp;agrave; lo si trova con l'uso dell'opizione ''--help''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh --help&lt;br /&gt;
Uso: check_for_updates.sh [opzioni] MODALITA [mod_opzioni] arg1...&lt;br /&gt;
     check_for_updates.sh MODALITA -h|--help&lt;br /&gt;
     check_for_updates.sh -v|--version&lt;br /&gt;
&lt;br /&gt;
Opzioni:&lt;br /&gt;
  -c    Non colora l'output&lt;br /&gt;
&lt;br /&gt;
MODALITA e' una tra:&lt;br /&gt;
        check&lt;br /&gt;
        db&lt;br /&gt;
        init&lt;br /&gt;
        not_conform&lt;br /&gt;
        update&lt;br /&gt;
        url&lt;br /&gt;
&lt;br /&gt;
by Emanuele Tomasi aka targzeta &amp;lt;targzeta@gmail.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modalit&amp;amp;agrave; init==&lt;br /&gt;
Questa &amp;amp;egrave; la prima modalit&amp;amp;agrave; che si usa per iniziare a seguire un progetto. L'help per questa&lt;br /&gt;
modalit&amp;amp;agrave; &amp;amp;egrave; il seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh init --help&lt;br /&gt;
Uso: check_for_updates.sh init [opzioni] dir URL&lt;br /&gt;
&lt;br /&gt;
Inizializza la directory dir tramite l'URL passatogli.&lt;br /&gt;
&lt;br /&gt;
Opzioni:&lt;br /&gt;
-g      forza l'uso del protocollo git&lt;br /&gt;
-q      quiet&lt;br /&gt;
-s      forza l'uso del protocollo svn&lt;br /&gt;
-v      verbose&lt;br /&gt;
&lt;br /&gt;
L'URL va quotato se contiene caratteri speciali per la shell,&lt;br /&gt;
come ad esempio il carattere '&amp;amp;'.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gli argomenti sono quindi soltanto due:&lt;br /&gt;
* Il nome della directory associata al progetto da seguire;&lt;br /&gt;
* L'URL della pagina web in cui vengono annunciati i cambiamenti o nuove release;&lt;br /&gt;
{{Be Careful|Nota|Come dice anche l'help, l'URL va quotato se contiene caratteri che la shell pu&amp;amp;ograve;  interpretare o espandere. Vedi appunto il carattere '&amp;amp;' che per la shell significa: &amp;quot;manda in background&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
Ad esempio, per il progetto FileZilla si ha:&lt;br /&gt;
* Il nome della directory == ''FileZilla/''&lt;br /&gt;
* URL = http://filezilla-project.org/download.php?type=client&lt;br /&gt;
&lt;br /&gt;
quindi per iniziare a seguire il progetto basta eseguire:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh init FileZilla/ http://filezilla-project.org/download.php?type=client&lt;br /&gt;
# Directory: FileZilla&lt;br /&gt;
INIZIALIZZATA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Hint|Nota|Il nome della directory non deve finire necessariamente con il carattere '/'.}}&lt;br /&gt;
&lt;br /&gt;
Una volta che la directory &amp;amp;egrave; stata inizializzata la si definisce &amp;quot;conforme&amp;quot; allo script, ovvero lo script al suo interno ha creato una sottodirectory di nome ''.check_for_updates'' con all'interno due file:&lt;br /&gt;
; page : la pagina web indirizzata dall'URL (scaricata tramite il comando '''wget''');&lt;br /&gt;
; url : l'URL che si &amp;amp;egrave; passato come parametro;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; tree FileZilla/.check_for_updates/&lt;br /&gt;
FileZilla/.check_for_updates/&lt;br /&gt;
|-- page&lt;br /&gt;
`-- url&lt;br /&gt;
&lt;br /&gt;
0 directories, 2 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Protocolli===&lt;br /&gt;
Ci sono vari tipi di protocolli accettati dallo script, il protocollo da usare viene individuato analizzando l'inizio dell'URL oppure attraverso l'uso delle opzioni '''-g''' e '''-s''' della modalit&amp;amp;agrave; '''init'''.&lt;br /&gt;
&lt;br /&gt;
====http(s) o ftp====&lt;br /&gt;
Il download delle pagine per questi protocolli avviene tramite il comando:&lt;br /&gt;
  wget --no-check-certificate&lt;br /&gt;
&lt;br /&gt;
L'uso di questi protocolli &amp;amp;egrave; di default quando l'URL inizia con http(s):// oppure ftp.&lt;br /&gt;
&lt;br /&gt;
====svn====&lt;br /&gt;
L'uso di subversion avviene scaricando, come pagina da confontare, il log, e viene fatto usando:&lt;br /&gt;
 svn info -r HEAD&lt;br /&gt;
&lt;br /&gt;
L'uso di questo protocollo &amp;amp;egrave; di default quando l'URL inizia con svn://. Poich&amp;amp;egrave; per&amp;amp;ograve; subversion si appoggia anche su altri protocolli, si pu&amp;amp;ograve; forzare l'uso di questo protocollo anche con URL che non iniziano con svn://. Per fare questo basta semplicemente usare l'opzione '''-s''' della modalit&amp;amp;agrave; '''init'''.&lt;br /&gt;
&lt;br /&gt;
====git====&lt;br /&gt;
L'uso di git avviene scaricando, come pagina da confrontare, il log, e viene fatto usando:&lt;br /&gt;
 git ls-remote HEAD&lt;br /&gt;
&lt;br /&gt;
L'uso di questo protocollo &amp;amp;egrave; di default quando l'URL inizia con git://. Poich&amp;amp;egrave; per&amp;amp;ograve; git si appoggia anche su altri protocolli, si pu&amp;amp;ograve; forzare l'uso di questo protocollo anche con URL che non iniziano con git://. Per fare questo basta semplicemente usare l'opzione '''-g''' della modalit&amp;amp;agrave; '''init'''.&lt;br /&gt;
&lt;br /&gt;
==Modalit&amp;amp;agrave; check==&lt;br /&gt;
Una volta inizializzata la directory, si pu&amp;amp;ograve; seguire il progetto facendo un '''check''' su di essa. L'help per questa modalit&amp;amp;agrave; &amp;amp;egrave;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check --help&lt;br /&gt;
Uso: check_for_updates.sh check [opzioni] dir1...&lt;br /&gt;
&lt;br /&gt;
Controlla se la pagina e' aggiornata.&lt;br /&gt;
&lt;br /&gt;
Opzioni:&lt;br /&gt;
-d      mostra l'output di 'diff' quando controlla l'aggiornamento&lt;br /&gt;
-e      non mostra gli errori di download&lt;br /&gt;
-f      mostra la pagina filtrata (non effettua controlli sull'aggiornamento)&lt;br /&gt;
-k      non elimina i file temporanei all'uscita&lt;br /&gt;
-n      mostra l'output di 'diff' stampando solo le nuove righe. Ignora '-d'&lt;br /&gt;
-o      produce output solo se la pagina e' stata aggiornata. Implica '-s'&lt;br /&gt;
-q      quiet. Implica '-s'&lt;br /&gt;
-s      non stampa errori sulle directory non conformi&lt;br /&gt;
-v      verbose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
come si vede, si pu&amp;amp;ograve; fare il '''check''' anche su pi&amp;amp;ugrave; directory contemporaneamente, in effetti lo si pu&amp;amp;ograve; fare anche su directory non conformi o file, lo script salter&amp;amp;agrave; i file, e tramimte l'opzione '-s' non stamper&amp;amp;agrave; nulla neanche sulle directory non conformi. Questo &amp;amp;egrave; utile se si vuole eseguire il check su di un'intera directory con:&lt;br /&gt;
 $&amp;gt; check_for_updates.sh check *&lt;br /&gt;
&lt;br /&gt;
Lo script, quando &amp;amp;egrave; invocato con questa modalit&amp;amp;agrave; segue il seguente algoritmo (a meno che non venga eseguito con l'opzione '-f'):&lt;br /&gt;
* scarica la pagina web (identificata dall'indirizzo trovato nel file ''.check_for_updates/url'') in un file temporaneo;&lt;br /&gt;
* fa una copia della pagina web ''.check_for_updates/page'' in un altro file temporaneo;&lt;br /&gt;
* se ci sono filtri, allora filtra entrambe le pagine temporanee;&lt;br /&gt;
* esegue il comando '''diff''' per vedere se ci sono differenze tra le due pagine temporanee;&lt;br /&gt;
&lt;br /&gt;
Un esempio di invocazione &amp;amp;egrave; il seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check FileZilla/&lt;br /&gt;
# Directory: FileZilla&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
il valore di ritorno 'OK' indica che la pagina ''.check_for_updates/page'' (filtrata) non differisce dalla pagina internet (filtrata).&lt;br /&gt;
&lt;br /&gt;
===Opzione -d===&lt;br /&gt;
Tramite questa opzione, lo script mostrer&amp;amp;agrave; l'output del comando '''diff''' sulle pagine temporanee. Questo &amp;amp;egrave; utile per vedere se effettivamente la differenza &amp;amp;egrave; significativa oppure no. Se non &amp;amp;egrave; significativa, si pu&amp;amp;ograve; migliorare il controllo creando appositi filtri (si vedr&amp;amp;agrave; in seguito l'uso dei filtri).&lt;br /&gt;
&lt;br /&gt;
===Opzione -f===&lt;br /&gt;
In questo caso lo script non esegue l'algoritmo spiegato in precedenza, ma si limita a filtrare la pagina '''.check_for_updates/page'' e a mostrare l'esito dei filtri e, quindi, la porzione di pagina che si verr&amp;amp;agrave; controllata.&lt;br /&gt;
&lt;br /&gt;
===Opzione -k===&lt;br /&gt;
Con questa opzione, lo script non eliminer&amp;amp;agrave; i file temporanei creati per il confronto.&lt;br /&gt;
&lt;br /&gt;
===Opzione -n===&lt;br /&gt;
Questa opzione &amp;amp;egrave; simile (e ne &amp;amp;egrave; un alternativa) all'opzione '''-d''', con la differenza che mostra soltanto le nuove righe. E' utile nel caso la pagina che si tiene sotto controllo sia effettivamente un log con entry che vengono eliminate in favore di nuove.&lt;br /&gt;
&lt;br /&gt;
===Opzione -o===&lt;br /&gt;
Lo script, per ogni directory che gli si passa, produce una serie di output tipo quello visto negli esempi precedenti. Questa opzione inibisce lo script a produrre output se il comando '''diff''' torna che le due pagine temporanee sono identiche. Nell'esempio, dato che la directory FileZilla viene trovata 'OK', lo script, con questa opzione, non produce output. E' molto utile se si invoca lo script passandogli molte directory, o addirittuta '*'.&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check -o FileZilla/ amrwb/&lt;br /&gt;
# Directory: amrwb&lt;br /&gt;
DA AGGIORNARE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Information|NOTA|L'uso di questa opzione implica l'opzione '-s'.}}&lt;br /&gt;
&lt;br /&gt;
===Opzione -q (caso particolare)===&lt;br /&gt;
Questa opzione inibisce lo script a produrre output, in pratica rende incompresibile l'uso dello script. L'unico motivo per cui esiste ancora &amp;amp;egrave; che in associazione con l'opzione '-o', si ha l'elenco delle directory per le quali lo script produrrebbe 'DA AGGIORNARE'.&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check -qo FileZilla/ amrwb/&lt;br /&gt;
amrwb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Information|NOTA|L'uso di questa opzione implica l'opzione '-s'.}}&lt;br /&gt;
&lt;br /&gt;
===Opzione -s===&lt;br /&gt;
Normalmente se allo script gli si passa una directory non conforme esso produrra in output una scritta simile a questa:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check Kernel/&lt;br /&gt;
# Directory: Kernel&lt;br /&gt;
  Attenzione: Kernel non ha:&lt;br /&gt;
        * o la sottodirectory .check_for_updates&lt;br /&gt;
        * o il file .check_for_updates/url&lt;br /&gt;
        * o il file .check_for_updates/page&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tramite l'uso di questa opzione, lo script salta queste directory e quindi non produce nessun output. Questa opzione &amp;amp;egrave; utile se si invoca lo script su pi&amp;amp;ugrave; directory in contemporanea o su '*'.&lt;br /&gt;
&lt;br /&gt;
==Modalit&amp;amp;agrave; update==&lt;br /&gt;
L'unico modo per far sapere allo script che una directory &amp;amp;egrave; di nuovo aggiornata, &amp;amp;egrave; quello di invocarlo con questa modalit&amp;amp;agrave;. Lo script scaricher&amp;amp;agrave; la nuova pagina web e la sostituir&amp;amp;agrave; con quella in ''.check_for_updates/page''. L'help &amp;amp;egrave; il seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt;check_for_updates.sh update --help&lt;br /&gt;
Uso: check_for_updates.sh update [opzioni] dir1...&lt;br /&gt;
&lt;br /&gt;
Aggiorna, riscaricando la pagina, la directory dir.&lt;br /&gt;
&lt;br /&gt;
Opzioni:&lt;br /&gt;
-q      quiet&lt;br /&gt;
-v      verbose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ad esempio, se si aggiorna la directory ''amrwb'', per il quale lo script ha ritornato 'DA AGGIORNARE', invocando lo script con questa modalit&amp;amp;agrave; si ottiene:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh update amrwb/&lt;br /&gt;
# Directory: amrwb&lt;br /&gt;
AGGIORNATA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modalit&amp;amp;agrave; not_conform==&lt;br /&gt;
La modalit&amp;amp;agrave; si limita ad elencare, tra le directory passategli, quelle non conformi. L'help &amp;amp;egrave; il seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh not_conform --help&lt;br /&gt;
Uso: check_for_updates.sh not_conform dir1...&lt;br /&gt;
&lt;br /&gt;
Stampa il nome delle dir non conformi (non inizializzate).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh not_conform FileZilla/ amrwb/ Kernel/&lt;br /&gt;
Kernel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modalit&amp;amp;agrave; url==&lt;br /&gt;
Per ogni directory passatagli, se la directory &amp;amp;egrave; conforme, lo script stampa l'URL trovato nel file ''.check_for_updates/url''. L'help &amp;amp;egrave; il seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh url --help&lt;br /&gt;
Uso: check_for_updates.sh url dir1...&lt;br /&gt;
&lt;br /&gt;
Stampa l'URL impostato per la directory dir.&lt;br /&gt;
&lt;br /&gt;
Opzioni:&lt;br /&gt;
-q      quiet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh url FileZilla/ amrwb/ Kernel/&lt;br /&gt;
# Directory: FileZilla&lt;br /&gt;
http://filezilla-project.org/download.php?type=client&lt;br /&gt;
&lt;br /&gt;
# Directory: amrwb&lt;br /&gt;
http://www.penguin.cz/~utx/amr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Filtri=&lt;br /&gt;
I filtri sono un modo per far si che lo script esegua il comando '''diff''' solo su una porzione anzich&amp;amp;eacute; sull'intera pagina.&lt;br /&gt;
&lt;br /&gt;
Attualmente i filtri si devono creare a mano e vanno messi in dei file nella sottodirectory ''.check_for_updates/'' del progetto. Ci sono cinque tipi di filtri, caratterizzati da altrettanti nomi file.&lt;br /&gt;
&lt;br /&gt;
Quando lo script viene invocato con la modalit&amp;amp;agrave; '''check''', prima di eseguire il comando '''diff''', se trova i file dei filtri, filtra i file temporanei.&lt;br /&gt;
{{Hint|Nota|I filtri sono applicati usando '''sed''' con le basic regex.}}&lt;br /&gt;
Nella scrittura di alcuni filtri si pu&amp;amp;ograve; usare la direttiva '''#DIR#''' che viene sostituita dal nome della directory su cui lo script st&amp;amp;agrave; lavorando.&lt;br /&gt;
{{Be Careful|Nota|Poich&amp;amp;eacute; il filtro '''sed_script''' pu&amp;amp;ograve; sostituire tutti gli altri, nelle prossime versioni sar&amp;amp;agrave; l'unico filtro ammesso.}}&lt;br /&gt;
&lt;br /&gt;
==Il filtro compare_only_line (obsoleto)==&lt;br /&gt;
Se esiste un file chiamato ''.check_for_updates/compare_only_line'', questo file deve contenere, una per riga, un'espressione regolare. Solo le righe dei file temporanei che hanno il match con queste espressioni regolari saranno confrontate.&lt;br /&gt;
&lt;br /&gt;
Ad esempio, se si guarda il link impostato per FileZilla, si noter&amp;amp;agrave; che in quella pagina vengono linkati sia i sorgenti per linux, sia l'installer per Windows, per Mac OS, etc. etc. Se si vuole controllare solo i sorgenti per linux, basta creare il file ''.check_for_updates/compare_only_line'' con all'interno questa espressione regolare:&lt;br /&gt;
 FileZilla.*src.*bz2&lt;br /&gt;
&lt;br /&gt;
Per vedere cosa effettivamente compara il comando '''diff''', basta eseguire lo script con modalit&amp;amp;agrave; '''check''' e opzione '-f':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check -f FileZilla/&lt;br /&gt;
# Directory: FileZilla&lt;br /&gt;
  &amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.ohloh.net/projects/filezilla/download?filename=FileZilla_3.1.5.1_src.tar.bz2&amp;quot;&amp;gt;FileZilla_3.1.5.1_src.tar.bz2&amp;lt;/a&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
come si pu&amp;amp;ograve; notare, il filtro ha lasciato passare solo la riga che contiene il link ai sorgenti.&lt;br /&gt;
&lt;br /&gt;
Per questo filtro si pu&amp;amp;ograve; usare la direttiva '''#DIR#''', quindi se il nome della directory che contiene il progetto FileZilla si chiama proprio ''FileZilla/'', una regex del tutto analoga a quella mostrata prima &amp;amp;egrave;:&lt;br /&gt;
 #DIR#.*src.*bz2&lt;br /&gt;
&lt;br /&gt;
==Il filtro filter_line_number (obsoleto)==&lt;br /&gt;
Se esiste un file chiamato ''.check_for_updates/filter_line_number'', questo file deve contenere, per ogni riga, un numero. Lo script sopprimer&amp;amp;agrave; le righe corrispondenti dalla pagina, prima di eseguire '''diff'''.&lt;br /&gt;
&lt;br /&gt;
==Il filtro filter_line_regex (obsoleto)==&lt;br /&gt;
Se esiste un file chiamato ''.check_for_updates/filter_line_regex'', questo file deve contenere, per ogni riga, un'espressione regolare. Lo script sopprimer&amp;amp;agrave; le righe della pagina che hanno il match con una di queste espressioni regolari, prima di eseguire '''diff'''.&lt;br /&gt;
&lt;br /&gt;
Per questo filtro si pu&amp;amp;ograve; usare la direttiva '''#DIR#'''.&lt;br /&gt;
&lt;br /&gt;
==Il filtro filter_word (obsoleto)==&lt;br /&gt;
Se esiste un file chiamato ''.check_for_updates/filter_word'', questo file deve contenere, per ogni riga, un'espressione regolare. Lo script sopprimer&amp;amp;agrave;, per ogni riga che ha il match con una di queste espressione regolari, l'espressione regolare stessa.&lt;br /&gt;
&lt;br /&gt;
Ad esempio, con riferimento all'output prodotto gi&amp;amp;agrave; dal filtro '''compare_only_line''' nell'esempio precedente, se si volesse eliminare dall'unica riga prodotta dal filtro, anche tutte le parole dall'inizio della riga sino al protocollo https, basta fare:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; echo '^.*href=&amp;quot;' &amp;gt; FileZilla/.check_for_updates/filter_word&lt;br /&gt;
&lt;br /&gt;
$&amp;gt; check_for_updates.sh check -f FileZilla/&lt;br /&gt;
# Directory: FileZilla&lt;br /&gt;
https://www.ohloh.net/projects/filezilla/download?filename=FileZilla_3.1.5.1_src.tar.bz2&amp;quot;&amp;gt;FileZilla_3.1.5.1_src.tar.bz2&amp;lt;/a&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per questo filtro si pu&amp;amp;ograve; usare la direttiva '''#DIR#'''.&lt;br /&gt;
&lt;br /&gt;
== Il filtro sed_script ==&lt;br /&gt;
Se esiste un file chiamato ''.check_for_updates/sed_script'', questo file deve contenere un vero e proprio script per sed. '''check_for_updates.sh''' esegue il comando '''sed -n -f .check_for_updates/sed_script''', quindi si faccia attenzione poich&amp;amp;eacute; non verr&amp;amp;agrave; generato nessun output a meno che non si sia usato il comando '''p''' di sed.&lt;br /&gt;
&lt;br /&gt;
Per questo filtro si pu&amp;amp;ograve; usare la direttiva '''#DIR#'''.&lt;br /&gt;
&lt;br /&gt;
==L'ordine di esecuzione dei filtri==&lt;br /&gt;
I filtri sopra citati vengono eseguiti nel seguente ordine:&lt;br /&gt;
* sed_script&lt;br /&gt;
* compare_only_line&lt;br /&gt;
* filter_line_number&lt;br /&gt;
* filter_line_regex&lt;br /&gt;
* file_filter_word&lt;br /&gt;
&lt;br /&gt;
L'ordine degli ultimi tre filtri non &amp;amp;egrave; importante, ma si deve tenere ben presente che prima si filtrano i file temporanei con il filtro '''sed_script''', quindi sull'output di questo filtro viene applicato, se esiste, il filtro '''compare_only_line''', ed infine sull'output di quest'altro filtro, vengono applicati, se ci sono, i filtri per sopprimere altre righe o parole.&lt;br /&gt;
&lt;br /&gt;
=Progetti su Sourceforge=&lt;br /&gt;
Il link ai file di un progetto hostato su Sourceforge hanno tutti la stessa forma:&lt;br /&gt;
 http://sourceforge.net/projects/NOME_PROGETTO/files/&lt;br /&gt;
dove NOME_PROGETTO &amp;amp;egrave; proprio il nome del progetto hostato.&lt;br /&gt;
&lt;br /&gt;
Quindi un modo per inizializzare lo script, ad esempio per p7zip &amp;amp;egrave;:&lt;br /&gt;
 $&amp;gt; check_for_updates.sh init p7zip http://sourceforge.net/projects/p7zip/files/&lt;br /&gt;
&lt;br /&gt;
E, per filtrare la pagina scaricata basta fare:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; echo '/#DIR#.*class=&amp;quot;folder/b get_date;d;:get_date /date/{s/.*title=&amp;quot;\([[:digit:]-]\+\).*/#DIR#  \1/p;q};n;b get_date'\&lt;br /&gt;
  &amp;gt; p7zip/.check_for_updates/sed_script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il quale fa passare solo la data dell'ultimo file aggiornamento, come si pu&amp;amp;ograve; vedere dall'output della modalit&amp;amp;agrave; '''check''' con l'opzione '-f':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check -f p7zip/&lt;br /&gt;
# Directory: p7zip&lt;br /&gt;
p7zip  2010-05-30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Working in progress...=&lt;br /&gt;
Lo script necessita ancora di ottimizzazioni, ritocchi ed espansioni. Per ora, ad esempio, il comportamento con le opzioni delle varie modalit&amp;amp;agrave; &amp;amp;egrave; un po' bizzarro, basti pensare che l'opzione '-q' e '-v' non generano un errore di incompatibilit&amp;amp;agrave;.&lt;br /&gt;
&lt;br /&gt;
La madalit&amp;amp;agrave; '''db''' per ora non fa nulla, ma l'idea &amp;amp;egrave; quella di  poter esportare ed importare URL e/o filtri. In questo modo basterebbe avere un pacchetto il pi&amp;amp;ugrave; completo possibile di queste informazioni per far si che pi&amp;amp;ugrave; utenti possano controllare gli stessi progetti senza doversi ogni volta scovare URL e filtri adatti.&lt;br /&gt;
&lt;br /&gt;
=Ringraziamenti e conclusioni=&lt;br /&gt;
Ringrazio:&lt;br /&gt;
* conraid per l'ottimo feedback&lt;br /&gt;
&lt;br /&gt;
Autore (data dell'ultimo aggiornamento):&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Utente:targzeta|targzeta]] ([[Discussioni utente:targzeta|discussioni]]) 00:08, 1 ago 2012 (CEST)&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Check_for_updates.sh</id>
		<title>File:Check for updates.sh</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Check_for_updates.sh"/>
				<updated>2012-10-02T22:18:31Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Analyze_SlackPkg.sh</id>
		<title>Analyze SlackPkg.sh</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Analyze_SlackPkg.sh"/>
				<updated>2012-10-02T22:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Caricato i file esterni all'interno di wikislacky&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Per www.slacky.eu --&amp;gt;&lt;br /&gt;
[[category:Script]]&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Questo script visualizza alcune informazioni interessanti riguardanti i pacchetti Slackware installati e pu&amp;amp;ograve; essere usato per mantenere aggiornata una current. Lo script deve essere eseguito in una directory contenente il file FILE_LIST fornito dal CD/DVD.&lt;br /&gt;
=Cosa fa e come si usa=&lt;br /&gt;
==Senza opzioni==&lt;br /&gt;
Lo script, per ogni pacchetti installato va a controllare se &amp;amp;egrave; nominato nel file FILE_LIST controllandone la versione, dove per versione si intende sia la versione del software che la marca di compilazione. Se le due versioni differiscono allora lo script stampa a video il percorso dove poter trovare il pacchetto con la versione differente. Ad esempio sulla mia macchina:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; analyze_SlackPkg.sh&lt;br /&gt;
./a/aaa_elflibs-13.013-x86_64-5.txz&lt;br /&gt;
./l/cairo-1.8.8-x86_64-3.txz&lt;br /&gt;
./n/stunnel-4.33-x86_64-1.txz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
questo vuol dire che nella mia Slackware sono installati i tre pacchetti elencati ma con versioni differenti, infatti ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; ls /var/log/packages/stunnel-*&lt;br /&gt;
/var/log/packages/stunnel-4.17-x86_64-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Quindi se si ha a disposizione un repository locale della current si pu&amp;amp;ograve; aggiornare il PC semplicemente eseguendo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for package in $(analyze_SlackPkg.sh)&lt;br /&gt;
  do&lt;br /&gt;
    upgradepkg $package&lt;br /&gt;
  done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Le opzioni==&lt;br /&gt;
===-h===&lt;br /&gt;
Mostra l'help dello script.&lt;br /&gt;
===-n===&lt;br /&gt;
Stampa l'elenco dei pacchetti nominati nel FILE_LIST, ma che non sono stati installati.&lt;br /&gt;
===-m===&lt;br /&gt;
Stampa l'elenco dei pacchetti che non sono stati trovati nel file FILE_LIST o che sono stati filtrati dal [[#Il file di filtraggio|file di filtro]]. Questi pacchetti generalmente sono i pacchetti di terze parti (ad esempio quelli di Slacky.eu) ed i pacchetti che sono stati rimossi dalla Slackware.&lt;br /&gt;
===-s===&lt;br /&gt;
Stampa l'elenco dei pacchetti che hanno la stessa versione di quelli trovati nel file FILE_LIST.&lt;br /&gt;
===-v===&lt;br /&gt;
A volte &amp;amp;egrave; utile sapere la versione attuale dei pacchetti installati, questa opzione oltre a visualizzare il percorso del pacchetto con la versione diversa, stampa anche la versione attualmente installata.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt;analyze_SlackPkg.sh -v&lt;br /&gt;
./a/aaa_elflibs-13.013-x86_64-5.txz the current version is aaa_elflibs-13.013-x86_64-4&lt;br /&gt;
./l/cairo-1.8.8-x86_64-3.txz the current version is cairo-1.8.10-x86_64-1&lt;br /&gt;
./n/stunnel-4.33-x86_64-1.txz the current version is stunnel-4.17-x86_64-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Il file di filtraggio=&lt;br /&gt;
Pu&amp;amp;ograve; capitare che di alcuni software si voglia seguire una versione current e non quella fornita dalla Slackware, usando il ciclo for descritto precedentemente per aggiornare il PC evidentemente questi pacchetti risulteranno con una versione differente e saranno quindi aggiornati. Per evitare questo comportamento basta creare un file nella propria home chiamato ''.analyze_SlackPkg'' e inserirci al proprio interno il nome del software da saltare e quest'ultimo non sar&amp;amp;agrave; stampato in output. Ad esempio se inserisco nel mio file il software '''cairo''' e poi rieseguo lo script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; echo 'cairo' &amp;gt;&amp;gt; ~/.analyze_SlackPkg&lt;br /&gt;
&lt;br /&gt;
$&amp;gt; analyze_SlackPkg.sh&lt;br /&gt;
./a/aaa_elflibs-13.013-x86_64-5.txz&lt;br /&gt;
./n/stunnel-4.33-x86_64-1.txz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
si nota che rispetto a prima, '''cairo''' non viene visualizzato.&lt;br /&gt;
=Lo script=&lt;br /&gt;
Dulcis in fundo, lo script potete trovarlo [[Media:Analyze_SlackPkg.sh‎|qui]].&lt;br /&gt;
&lt;br /&gt;
Autore (data dell'ultimo aggiornamento):&lt;br /&gt;
[[Utente:targzeta|targzeta]] 07:38, 28 ott 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/File:Analyze_SlackPkg.sh</id>
		<title>File:Analyze SlackPkg.sh</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/File:Analyze_SlackPkg.sh"/>
				<updated>2012-10-02T22:09:28Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Find_external_SlackPkg_files</id>
		<title>Find external SlackPkg files</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Find_external_SlackPkg_files"/>
				<updated>2012-10-02T21:59:08Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Cambiato nick&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Per http://www.slacky.eu/wikislack/index.php?title=Find_external_SlackPkg_files --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;br /&gt;
= Introduzione =&lt;br /&gt;
I &amp;quot;maniaci delle pulizie&amp;quot; - come me - a volte hanno la&lt;br /&gt;
necessit&amp;amp;agrave; di scovare quei file, presenti nella root directory,&lt;br /&gt;
che non appartengono a nessun pacchetto installato. Questo infatti&lt;br /&gt;
permette di stabilire se quei file sono vecchi e vanno rimossi oppure&lt;br /&gt;
sono file di configurazione (o altro) creati dai programmi a run-time.&lt;br /&gt;
&lt;br /&gt;
Spesso e volentieri qualcuno installa un pacchetto ma poi si accorge&lt;br /&gt;
che non gli serviva, quindi lo rimuove. Il dubbio si insinua nella&lt;br /&gt;
mente di un &amp;quot;maniaco delle pulizie&amp;quot;: &amp;quot;ho rimosso tutto? il sistema&lt;br /&gt;
&amp;amp;egrave; ritornato come se il pacchetto non fosse mai stato&lt;br /&gt;
installato?&amp;quot;. Generalmente i dubbi sono infondati, quasi tutti i&lt;br /&gt;
pacchetti vengono rimossi completamente e non lasciano tracce, ma&lt;br /&gt;
&amp;amp;egrave; proprio quel 'quasi tutti' che non fa dormire sonni&lt;br /&gt;
tranquilli.&lt;br /&gt;
&lt;br /&gt;
Lo script find_external_SlackPkg_files.sh esegue una scansione di&lt;br /&gt;
tutta la root directory e controlla, file per file, se esso &amp;amp;egrave;&lt;br /&gt;
stato installato da un pacchetto Slackware oppure no. Quindi&lt;br /&gt;
visualizza in output tutti quei file &amp;quot;estranei&amp;quot; ai pacchetti.&lt;br /&gt;
&lt;br /&gt;
Lo script pu&amp;amp;ograve; essere eseguito sia come root che come utente&lt;br /&gt;
normale. In quest'ultimo caso, ovviamente, lo script non potr&amp;amp;agrave;&lt;br /&gt;
scandire quelle directory di propriet&amp;amp;agrave; di altri utenti, ma&lt;br /&gt;
dar&amp;amp;agrave; comunque dei buoni risultati.&lt;br /&gt;
&lt;br /&gt;
= L'algoritmo =&lt;br /&gt;
L'algoritmo &amp;amp;egrave; molto semplice, lo script esegue un '''find'''&lt;br /&gt;
sulla root directory filtrando alcuni path (si veda la sezione&lt;br /&gt;
[[#Filtrare dei percorsi]]).  Una volta creata questa 'file list', lo&lt;br /&gt;
script individua anche tutti i link simbolici creati dagli script&lt;br /&gt;
'''doinst.sh''' dei vari pacchetti. Quindi, controlla quali tra i file&lt;br /&gt;
presenti nella 'file list' non appartiene ad un pacchetto e non&lt;br /&gt;
&amp;amp;egrave; neanche un link simbolico creato da un '''doinst.sh'''.&lt;br /&gt;
&lt;br /&gt;
{{Information&lt;br /&gt;
|Informazione:&lt;br /&gt;
|L'algoritmo &amp;amp;egrave; semplice ma la sia esecuzione &amp;amp;egrave; bella lunga. Diciamo che la vostra CPU non vi ringrazier&amp;amp;agrave;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Filtrare dei percorsi ==&lt;br /&gt;
Lo script non scandisce tutta la root directory, ma filtra i seguenti&lt;br /&gt;
percorsi speciali:&lt;br /&gt;
* /dev&lt;br /&gt;
* /proc&lt;br /&gt;
* /root&lt;br /&gt;
* /sys&lt;br /&gt;
* /var/log/packages&lt;br /&gt;
* /var/log/scripts&lt;br /&gt;
* /var/log/removed_packages&lt;br /&gt;
* /var/log/removed_scripts&lt;br /&gt;
&lt;br /&gt;
Si possono inoltre (ed &amp;amp;egrave; consigliato farlo) impostare dei&lt;br /&gt;
filtri utente semplicemente creando il file&lt;br /&gt;
''~/.find_external_SlackPkg_files''. Il formato del file &amp;amp;egrave; il&lt;br /&gt;
seguente:&lt;br /&gt;
* tutte le righe vuote e le righe che iniziano con un '#' sono ignorate.&lt;br /&gt;
* ogni riga non ignorata deve contenere esattamente un percorso e, opzionalmente, un comando da controllare. In quest'ultimo caso, il comando deve essere separato dal percorso da almeno un carattere di spaziatura; il percorso associato sar&amp;amp;agrave; filtrato se, e solo se, il comando esiste nel PATH.&lt;br /&gt;
&lt;br /&gt;
Quindi ad esempio, se il file contiene le seguenti righe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# My comments&lt;br /&gt;
&lt;br /&gt;
/home&lt;br /&gt;
/mnt&lt;br /&gt;
/media&lt;br /&gt;
/usr/share/fonts/*/fonts.scale&lt;br /&gt;
/usr/share/mime                       update-mime-database&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Allora lo script ignorer&amp;amp;agrave;:&lt;br /&gt;
* la directory ''/home''&lt;br /&gt;
* le directory contenenti i filesystem montati, ma che sono estranei alla distribuzione (''/mnt'' e ''/media'').&lt;br /&gt;
* tutti i file generati dal comando '''mkfontscale'''&lt;br /&gt;
* la directory ''/usr/share/mime'' se, e solo se, esiste il comando '''update-mime-database'''&lt;br /&gt;
&lt;br /&gt;
{{Warning&lt;br /&gt;
|Nota:&lt;br /&gt;
|Se il path da filtrare contiene uno spazio, allora lo script penser&amp;amp;agrave; che ci&amp;amp;ograve; che si trova dopo lo spazio sia un comando da controllare. In questo caso, affinch&amp;amp;eacute; tutto funzioni, bisogna aggiungere un altro spazio e poi un comando sicuramente esistente (ad esempio la bash, visto che lo script &amp;amp;egrave; interpretato proprio da questa shell).&lt;br /&gt;
Es:&lt;br /&gt;
/my path with spaces  bash&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Hint&lt;br /&gt;
|Nota:&lt;br /&gt;
|I percorsi da filtrare sono passati al comando '''find''' tramite l'uso della sua opzione '''-path'''. Si veda il manuale di '''find''' per conoscere il formato accettato.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Le opzioni =&lt;br /&gt;
== -h ==&lt;br /&gt;
Mostra l'help ed esce.&lt;br /&gt;
&lt;br /&gt;
== -f ==&lt;br /&gt;
Mostra in output i percorsi filtrati ed esce.&lt;br /&gt;
&lt;br /&gt;
= I link simbolici alle librerie =&lt;br /&gt;
Alcuni link simbolici alle librerie, che lo script mostra in output,&lt;br /&gt;
vengono creati dal comando '''ldconfig'''. In generale eliminare&lt;br /&gt;
questi link non comporta danno poich&amp;amp;eacute; basta eseguire di nuovo&lt;br /&gt;
il comando citato (e la Slackware di default lo fa ad ogni avvio) per&lt;br /&gt;
ricrearli. E' ovvio per&amp;amp;ograve; che sarebbe meglio lasciarli.&lt;br /&gt;
&lt;br /&gt;
= Le glibc =&lt;br /&gt;
Le librerie '''glibc''' non sono installate in maniera canonica. Il&lt;br /&gt;
pacchetto installa queste librerie in una directory temporanea&lt;br /&gt;
chiamata ''incoming'' e poi lo script di post-installazione sposta&lt;br /&gt;
tutte le librerie nella locazione opportuna. Questo viene fatto&lt;br /&gt;
proprio per impedire che le librerie vengano eliminate insieme al&lt;br /&gt;
pacchetto. Se questo accadesse, infatti, un aggiornamento 'a caldo'&lt;br /&gt;
delle '''glibc''' farebbe s&amp;amp;igrave; che tutti i comandi linkati con le&lt;br /&gt;
vecchie librerie non funzionino pi&amp;amp;ugrave;. Questo vorrebbe dire un&lt;br /&gt;
blocco del sistema poich&amp;amp;eacute; non si avrebbero pi&amp;amp;ugrave; a&lt;br /&gt;
disposizione i comandi basilari come '''rm''', '''ls''', etc...&lt;br /&gt;
&lt;br /&gt;
{{Warning&lt;br /&gt;
|Attenzione:&lt;br /&gt;
|Lo script individua correttamente le librerie installate dal pacchetto '''glibc''', ma questo rappresenta comunque un classico caso di '''doinst.sh''' non banale (si veda la sezione [[#Bug]]). Si faccia quindi attenzione ad eliminare 'a priori' tutti i file segnalati dallo script.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= KDE =&lt;br /&gt;
KDE usa la directory ''/var/tmp'' per inserire le cache utenti. In&lt;br /&gt;
particolare, per ogni utente crea la directory&lt;br /&gt;
''/var/tmp/kdecache-username''. Essendo queste directory create a&lt;br /&gt;
run-time da KDE lo script le individuer&amp;amp;agrave; come &amp;quot;estranee&amp;quot; a&lt;br /&gt;
tutti i pacchetti.&lt;br /&gt;
&lt;br /&gt;
Si pu&amp;amp;ograve; quindi inserire la seguente regola di filtraggio per&lt;br /&gt;
evitare che lo script mostri in output tutte queste directory:&lt;br /&gt;
 /var/tmp/kdecache-*      kde-mv&lt;br /&gt;
il comando '''kde-mv''' viene installato con il pacchetto&lt;br /&gt;
'kdebase-runtime'. Grazie a questa regola, quindi, tutte le cache&lt;br /&gt;
utenti di KDE saranno ignorate sino a che si decide di mantenere nel&lt;br /&gt;
sistema tutto il desktop environment. Alla rimozione di KDE (e quindi&lt;br /&gt;
anche del comando '''kde-mv'''), lo script consiglier&amp;amp;agrave; di&lt;br /&gt;
eliminare anche tutte la sua cache.&lt;br /&gt;
&lt;br /&gt;
= Bug =&lt;br /&gt;
Per quanto lo script si sforzi di trovare tutti e soli quei file e&lt;br /&gt;
directory &amp;quot;estranei&amp;quot; ai pacchetti installati, alcuni '''doinst.sh'''&lt;br /&gt;
sono scritti in maniera particolare e fanno ben altro che creare&lt;br /&gt;
semplici link simbolici. Ad esempio uno script di post installazione&lt;br /&gt;
potrebbe creare nuove directory, oppure copiare e/o spostare dei file da&lt;br /&gt;
una directory ad un'altra. Tutti questi rappresentano casi non banali&lt;br /&gt;
che lo script non &amp;amp;egrave; in grado di individuare.&lt;br /&gt;
&lt;br /&gt;
= Lo script =&lt;br /&gt;
Bene, &amp;amp;egrave; ora giunto il momento di scaricare e provare lo script, che&lt;br /&gt;
pu&amp;amp;ograve; essere trovato a questo link:&lt;br /&gt;
[http://www.slacky.eu/~targzeta/script/find_external_SlackPkg_files.sh find_external_SlackPkg_files.sh]&lt;br /&gt;
&lt;br /&gt;
Un buon file da usare come filtro invece lo potete trovare a questo&lt;br /&gt;
link:&lt;br /&gt;
[http://www.slacky.eu/~targzeta/script/find_external_SlackPkg_files_filter find_external_SlackPkg_files_filter]&lt;br /&gt;
&lt;br /&gt;
una volta scaricato basta rinominarlo usando il comando seguente:&lt;br /&gt;
 mv find_external_SlackPkg_files_filter  ~/.find_external_SlackPkg_files&lt;br /&gt;
Se secondo voi ci sono altri path che varrebbe la pena inserire in&lt;br /&gt;
questo file, non esitate a scrivermi.&lt;br /&gt;
&lt;br /&gt;
= Vedere anche =&lt;br /&gt;
[http://www.slacky.eu/wikislack/index.php?title=Unused_SlackPkg unused_SlackPkg.sh]&lt;br /&gt;
&lt;br /&gt;
= Copyright - License =&lt;br /&gt;
Autore (ultima modifica): [[Utente:targzeta|targzeta]] 00:54, 3 ott 2011 (CEST)&lt;br /&gt;
&lt;br /&gt;
Ringrazio gli utenti di Slacky.eu, Procopio e ZeroUno per i loro&lt;br /&gt;
feedback e suggerimenti. Se lo script &amp;amp;egrave; migliorato nel tempo&lt;br /&gt;
&amp;amp;egrave; soprattutto grazie a loro.&lt;br /&gt;
{{Information&lt;br /&gt;
|GNU Free Documentation Licence&lt;br /&gt;
|This article is released under the GNU Free Documentation Licence. You are welcome to copy and redistribute it (subject to certain conditions).&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Unused_SlackPkg</id>
		<title>Unused SlackPkg</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Unused_SlackPkg"/>
				<updated>2012-10-02T21:58:32Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Cambiato nick&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Per http://www.slacky.eu/wikislack/index.php?title=Unused_SlackPkg --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;br /&gt;
= Introduzione =&lt;br /&gt;
La Slackware, come sappiamo, non ha un sistema per il controllo&lt;br /&gt;
automatico delle dipendenze. Questo vuol dire che se oggi installiamo&lt;br /&gt;
il pacchetto X che necessita del pacchetto Y, e domani eliminiamo il&lt;br /&gt;
pacchetto X, il pacchetto Y potrebbe non essere pi&amp;amp;ugrave; utilizzato&lt;br /&gt;
da nessun altro, diventando cos&amp;amp;igrave; un pacchetto orfano: installato&lt;br /&gt;
ma non utilizzato.&lt;br /&gt;
&lt;br /&gt;
Lo script unused_SlackPkg.sh si occupa di controllare tutti i&lt;br /&gt;
pacchetti presenti sulla nostra Slackware in cerca di quelli&lt;br /&gt;
orfani. Per fare questo, lo script verifica la data di ultimo accesso&lt;br /&gt;
di tutti i file installati da ogni pacchetto e, se questa data&lt;br /&gt;
risulta essere troppo vecchia, allora desume che il pacchetto &amp;amp;egrave;&lt;br /&gt;
inutilizzato e stampa in output il suo nome.&lt;br /&gt;
&lt;br /&gt;
= Le opzioni =&lt;br /&gt;
== -h ==&lt;br /&gt;
Questa opzione ha il solo scopo di mostrare l'help.&lt;br /&gt;
&lt;br /&gt;
== -d &amp;lt;date&amp;gt; ==&lt;br /&gt;
Lo script controlla la data di ultimo accesso dei file installati da&lt;br /&gt;
un pacchetto e la confronta con una data di riferimento che di default&lt;br /&gt;
&amp;amp;egrave; un mese nel passato. Ovvero, lo script decide che un&lt;br /&gt;
pacchetto &amp;amp;egrave; inutilizzato se la data di ultimo accesso di tutti&lt;br /&gt;
i file installati &amp;amp;egrave; pi&amp;amp;ugrave; vecchia di un mese (cio&amp;amp;eacute;,&lt;br /&gt;
il pacchetto non &amp;amp;egrave; stato utilizzato per un mese).&lt;br /&gt;
&lt;br /&gt;
Con questa opzione si pu&amp;amp;ograve; modificare la data di riferimento. Il&lt;br /&gt;
parametro &amp;amp;egrave; lo stesso parametro dell'opzione '''-d''' del&lt;br /&gt;
comando '''date(1)'''.&lt;br /&gt;
&lt;br /&gt;
== -s ==&lt;br /&gt;
Se viene specificata questa opzione, lo script, oltre a stampare a&lt;br /&gt;
video il nome del pacchetto ritenuto inutilizzato, ne stampa anche la&lt;br /&gt;
dimensione su disco.&lt;br /&gt;
&lt;br /&gt;
= Filtrare i pacchetti =&lt;br /&gt;
Lo script a volte potrebbe indicare come inutilizzato un pacchetto&lt;br /&gt;
fondamentale della Slackware. Uno tra tutti il pacchetto&lt;br /&gt;
'''aaa_base''', il quale contiene solo la struttura della root&lt;br /&gt;
directory e non fa altro che creare tutte le directory necessarie. Il&lt;br /&gt;
pacchetto '''aaa_base''' contiene solo due file:&lt;br /&gt;
 /etc/slackware-version&lt;br /&gt;
 /var/spool/mail/root.new&lt;br /&gt;
e va da se che diventer&amp;amp;agrave; presto inutilizzato.&lt;br /&gt;
&lt;br /&gt;
Per ovviare a questo tipo di inconveniente, specie se si utilizza&lt;br /&gt;
l'output dello script per eseguire una pulitura automatica del&lt;br /&gt;
sistema, si pu&amp;amp;ograve; creare il file ''~/.unused_SlackPkg'' ed&lt;br /&gt;
inserirvi, uno per ogni riga, i nomi dei pacchetti che si vogliono&lt;br /&gt;
filtrare. Cos&amp;amp;igrave;, ad esempio, se vogliamo filtrare il pacchetto&lt;br /&gt;
'''aaa_base''' baster&amp;amp;agrave; eseguire questo comando:&lt;br /&gt;
 $&amp;gt; echo aaa_base &amp;gt;&amp;gt; ~/.unused_SlackPkg&lt;br /&gt;
&lt;br /&gt;
= Lo script =&lt;br /&gt;
Bene, &amp;amp;egrave; ora giunto il momento di scaricare e provare lo script, che&lt;br /&gt;
pu&amp;amp;ograve; essere trovato a questo link:&lt;br /&gt;
[http://www.slacky.eu/~targzeta/script/unused_SlackPkg.sh unused_SlackPkg.sh]&lt;br /&gt;
&lt;br /&gt;
= Non-Bug =&lt;br /&gt;
Lo script si rifiuta di funzionare se la root directory viene montata con&lt;br /&gt;
l'opzione '''noatime'''. Infatti, come cita mount(8):&lt;br /&gt;
 '''noatime'''&lt;br /&gt;
    Do not update inode access times on this filesystem (e.g, for faster access on the news spool to speed up news servers).&lt;br /&gt;
con questa opzione la data di ultimo accesso ai file non viene mai&lt;br /&gt;
modificata, quindi l'algoritmo seguito dallo script non funziona.&lt;br /&gt;
&lt;br /&gt;
= Vedere anche =&lt;br /&gt;
[http://www.slacky.eu/wikislack/index.php?title=Find_external_SlackPkg_files find_external_SlackPkg_files.sh]&lt;br /&gt;
&lt;br /&gt;
= Copyright - License =&lt;br /&gt;
Autore (ultima modifica): [[Utente:targzeta|targzeta]] 13:49, 18 set 2011 (CEST)&lt;br /&gt;
{{Information&lt;br /&gt;
|GNU Free Documentation Licence&lt;br /&gt;
|This article is released under the GNU Free Documentation Licence. You are welcome to copy and redistribute it (subject to certain conditions).&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Apache%2BPHP%2BMySQL_in_chroot_jail</id>
		<title>Apache+PHP+MySQL in chroot jail</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Apache%2BPHP%2BMySQL_in_chroot_jail"/>
				<updated>2012-10-02T21:57:45Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Cambiato nick&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Per http://www.slacky.eu/wikislack/index.php?title=Apache%2BPHP%2BMySQL_in_chroot_jail --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Networking]]&lt;br /&gt;
= Introduzione =&lt;br /&gt;
In questo Wiki verr&amp;amp;agrave; spiegato come installare un server apache,&lt;br /&gt;
l'interprete di scripting PHP e il server MySQL in un ambiente&lt;br /&gt;
chroot. Tutto ci&amp;amp;ograve; che serve &amp;amp;egrave; una distribuzione&lt;br /&gt;
Slackware con i suoi tool di installazione dei pacchetti.&lt;br /&gt;
{{Information&lt;br /&gt;
|Nota:&lt;br /&gt;
|Questa procedura &amp;amp;egrave; stata eseguita con una Slackware 13.37, ma dovrebbe funzionare con qualsiasi versione di Slackware. Ovviamente bisogna stare attenti alle modifiche fatte ai file di configurazione e ai pacchetti che vengono listati, poich&amp;amp;eacute; sia i primi che i secondi potrebbero differire da versione a versione.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Perch&amp;amp;eacute; farlo? ==&lt;br /&gt;
Se si vuole eseguire un server apache accedibile da qualsiasi utente&lt;br /&gt;
sul web &amp;amp;egrave; utile che esso giri all'interno di una prigione&lt;br /&gt;
(jail) in modo che se qualche malintenzionato riesce ad avere un&lt;br /&gt;
accesso al filesystem tramite, ad esempio, di un bug di qualche&lt;br /&gt;
software PHP installato (uno per tutti, Joomla), il nostro aggressore&lt;br /&gt;
si ritrover&amp;amp;agrave; in un ambiente senza diritti e senza la&lt;br /&gt;
possibilit&amp;amp;agrave; di fare grandi danni.&lt;br /&gt;
&lt;br /&gt;
== In cosa differesce questo wiki dalle altre guide? ==&lt;br /&gt;
Leggendo su internet le varie guide che suggeriscono come effettuare&lt;br /&gt;
l'imprigionamento del server apache in un ambiente chroot (chroot&lt;br /&gt;
jail, per l'appunto) si pu&amp;amp;ograve; notare come tutte tendano a rendere&lt;br /&gt;
difficile una simile operazione cercando di rendere l'ambiente chroot&lt;br /&gt;
il pi&amp;amp;ugrave; ristretto possibile. Tutte le guide, quindi,&lt;br /&gt;
suggeriscono di copiare e/o spostare solo i file necessari e nulla&lt;br /&gt;
pi&amp;amp;ugrave;. Ora, se da un certo punto di vista &amp;amp;egrave; preferibile&lt;br /&gt;
avere nell'ambiente chroot il minor numero di software possibile e il&lt;br /&gt;
minimo indispensabile per far eseguire al server apache tutte le sue&lt;br /&gt;
funzioni, dall'altro lato copiare e spostare solo i file necessari&lt;br /&gt;
rende scomoda l'aggiunta o l'aggiornamento del server stesso ad una&lt;br /&gt;
versione pi&amp;amp;ugrave; sicura.&lt;br /&gt;
&lt;br /&gt;
Questo wiki invece punta a rendere la vita semplice a chi deve&lt;br /&gt;
mantenere l'ambiente chroot aggiornato e facilmente modificabile. Lo&lt;br /&gt;
scopo viene raggiunto tramite l'installazione, non di singoli file ma&lt;br /&gt;
di interi pacchetti Slackware.&lt;br /&gt;
&lt;br /&gt;
Inoltre, qui verr&amp;amp;agrave; installato nell'ambiente anche il server&lt;br /&gt;
MySQL e l'interprete PHP, procedura che in genere non viene spiegata&lt;br /&gt;
dalle guide per il chroot jail di apache. In effetti un server apache&lt;br /&gt;
senza il supporto a MySQL non serve a molto nei giorni d'oggi.&lt;br /&gt;
{{Information&lt;br /&gt;
|Nota per i pignoli:&lt;br /&gt;
|E' vero che il server MySQL &amp;amp;egrave; anche in grado di ascoltare connessioni via web e di accettare solo quelle dello stesso host. In questo caso invece si vuole rendere pi&amp;amp;ugrave; sicuro il tutto facendo dialogare apache con mysql solo attraverso il socket locale.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= La procedura =&lt;br /&gt;
Come prima cosa bisogna creare un directory che conterr&amp;amp;agrave;&lt;br /&gt;
l'ambiente chroot per i server che vogliamo installare:&lt;br /&gt;
 # mkdir /chroot_jail&lt;br /&gt;
&lt;br /&gt;
== L'installazione dei pacchetti ==&lt;br /&gt;
Una volta creata la directory destinata a contenere tutto il nostro&lt;br /&gt;
software, non ci resta che installare l'insieme minimo di pacchetti&lt;br /&gt;
necessari a fare eseguire nel nostro ambiente:&lt;br /&gt;
* il server apache con l'interprete PHP&lt;br /&gt;
* il server MySQL&lt;br /&gt;
I pacchetti, relativi alla distribuzione Slackware 13.37 (viene&lt;br /&gt;
indicata anche la directory che li contiene), sono:&lt;br /&gt;
* a/aaa_base&lt;br /&gt;
* a/aaa_elflib&lt;br /&gt;
* a/coreutils&lt;br /&gt;
* a/bash&lt;br /&gt;
* a/etc&lt;br /&gt;
* a/glibc-solib&lt;br /&gt;
* a/grep&lt;br /&gt;
* a/sed&lt;br /&gt;
* a/util-linux&lt;br /&gt;
* ap/mysql&lt;br /&gt;
* l/apr&lt;br /&gt;
* l/apr-util&lt;br /&gt;
* l/libmcrypt&lt;br /&gt;
* l/libxml2&lt;br /&gt;
* n/cyrus-sasl&lt;br /&gt;
* n/httpd&lt;br /&gt;
* n/openssl&lt;br /&gt;
* n/php&lt;br /&gt;
Questi pacchetti vanno installati eseguendo il comando:&lt;br /&gt;
 # installpkg --root /chroot_jail nome_pacchetto&lt;br /&gt;
&lt;br /&gt;
== La configurazione post-installazione ==&lt;br /&gt;
In linea teorica &amp;amp;egrave; tutto fatto. La directory /chroot_jail&lt;br /&gt;
contiene tutto il software necessario in circa 190MB di dati. Restano&lt;br /&gt;
per&amp;amp;ograve; ancora alcune piccole configurazioni da fare.&lt;br /&gt;
{{Warning&lt;br /&gt;
|Attenzione:&lt;br /&gt;
|In questo contesto non ci preoccupiamo di configurare il server apache o il server mysqld. Il wiki spiega come creare l'ambiente adatto a farli partire, non come configurarli al meglio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Gli rc per l'halt dei server ===&lt;br /&gt;
Purtroppo i file rc dei due server eseguono il comando killall per&lt;br /&gt;
fermarli. Questo comando in un ambiente chroot non ha senso&lt;br /&gt;
poich&amp;amp;eacute; in questo ambiente non esiste niente nella directory&lt;br /&gt;
/proc. Vanno quindi modificati gli script rc in modo da fermare i&lt;br /&gt;
server usando il comando kill.&lt;br /&gt;
&lt;br /&gt;
==== Il server apache (rc.httpd) ====&lt;br /&gt;
Il file in questione &amp;amp;egrave; /chroot_jail/etc/rc.d/rc.httpd e vanno&lt;br /&gt;
eliminate le due righe:&lt;br /&gt;
 killall httpd&lt;br /&gt;
 rm -f /var/run/httpd/*.pid&lt;br /&gt;
in questo caso il file rc ferma correttamente il server apache&lt;br /&gt;
eseguendo il comando:&lt;br /&gt;
 /usr/sbin/apachectl -k stop&lt;br /&gt;
quindi le due righe eliminate servono solo come meccanismo di&lt;br /&gt;
sicurezza in pi&amp;amp;ugrave;...noi invece siamo fiduciosi ;).&lt;br /&gt;
&lt;br /&gt;
==== Il serve MySQL (rc.mysqld) ====&lt;br /&gt;
Si deve modificare il file /chroot_jail/etc/rc.d/rc.mysqld sostituendo&lt;br /&gt;
la riga:&lt;br /&gt;
 killall mysqld&lt;br /&gt;
con:&lt;br /&gt;
 kill $(cat /var/run/mysql/mysql.pid)&lt;br /&gt;
&lt;br /&gt;
=== I fusi orari ===&lt;br /&gt;
Affinch&amp;amp;eacute; i nostri server riportino l'orario in maniera&lt;br /&gt;
corretta occorre copiare nell'ambiente il file /etc/localtime con:&lt;br /&gt;
 # cp /etc/localtime /chroot_jail/etc/localtime&lt;br /&gt;
&lt;br /&gt;
=== Il generatore di numeri casuali ===&lt;br /&gt;
Il server apache necessita di generare dei numeri casuali per mitivi&lt;br /&gt;
di sicurezza. Per fare questo &amp;amp;egrave; necessario copiare il device&lt;br /&gt;
urandom:&lt;br /&gt;
 # cp -a /dev/urandom /chroot_jail/dev/urandom&lt;br /&gt;
&lt;br /&gt;
=== La risoluzione degli indirizzi ===&lt;br /&gt;
Molti script PHP necessitano l'uso del DNS per risolvere i domini&lt;br /&gt;
internet. Questo sotto linux viene effettuato semplicemente facendo&lt;br /&gt;
conoscere alle librerie (gi&amp;amp;agrave; installate) l'indirizzo IP del&lt;br /&gt;
nostro DNS. Bisogna quindi copiare i file:&lt;br /&gt;
 # cp /etc/resolv.conf /chroot_jail/etc/resolv.conf&lt;br /&gt;
 # cp /etc/hosts /chroot_jail/etc/hosts&lt;br /&gt;
{{Hint&lt;br /&gt;
|In oltre:&lt;br /&gt;
|Ovviamente si possono copiare anche i file /etc/hosts.allow, /etc/hosts.deny e /etc/hosts.equiv.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Hostname ===&lt;br /&gt;
I log di apache e di MySQL contengono anche l'hostname della macchina su cui gira&lt;br /&gt;
il server, quindi se vogliamo dare un nome al tutto possiamo anche&lt;br /&gt;
copiare (e modificare) il file:&lt;br /&gt;
 # cp /etc/HOSTNAME /chroot_jail/etc/HOSTNAME&lt;br /&gt;
&lt;br /&gt;
=== Loggare l'output dei programmi usando syslogd ===&lt;br /&gt;
I programmi, sotto linux, inviano i propri messaggi al server syslogd&lt;br /&gt;
attraverso l'uso del socket /dev/log=. Per far s&amp;amp;igrave;&lt;br /&gt;
che anche i nostri programmi che vengono eseguiti nell'ambiente chroot&lt;br /&gt;
possano inviare i messaggi al server syslogd bisogna avvisare&lt;br /&gt;
quest'ultimo facendogli creare un socket anche nell'ambiente&lt;br /&gt;
creato. Per fare questo bisogna modificare il file /etc/rc.d/rc.syslog&lt;br /&gt;
facendo invocare il demone, anzich&amp;amp;eacute; senza opzioni, con&lt;br /&gt;
l'aggiunta dell'opzione '''-a'''. Quindi invece della riga:&lt;br /&gt;
 /usr/sbin/syslogd&lt;br /&gt;
va inserita la riga:&lt;br /&gt;
 /usr/sbin/syslogd -a /chroot_jail/dev/log&lt;br /&gt;
(la riga &amp;amp;egrave; corretta, non ci vuole il segno '=' dopo log).&lt;br /&gt;
{{Information&lt;br /&gt;
|Nota:&lt;br /&gt;
|La creazione del socket non &amp;amp;egrave; necessaria per l'utilizzo dei soli server apache e MySQL, dato che questi ultimi hanno gi&amp;amp;agrave; i loro file di log.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= La sicurezza non &amp;amp;egrave; mai troppa =&lt;br /&gt;
Come si &amp;amp;egrave; visto, usando questa procedura l'ambiente chroot&lt;br /&gt;
contiene un sacco di software (anche inutile) che potrebbe essere&lt;br /&gt;
sfruttato da un malintenzionato che riesce ad ottenere l'accesso&lt;br /&gt;
al filesystem. E' vero che il malintenzionato si trova in un ambiente&lt;br /&gt;
chiuso, per&amp;amp;ograve; possiamo rendergli la vita ancora pi&amp;amp;ugrave;&lt;br /&gt;
difficile rendendo tutto il software installato eseguibile solo&lt;br /&gt;
all'utente root. Per fare questo basta eseguire il comando:&lt;br /&gt;
 # chroot /chroot_jail bash -c 'IFS=:; for dir in $PATH; do [ -d $dir ] &amp;amp;&amp;amp; chmod go-rx ${dir}/*; done'&lt;br /&gt;
&lt;br /&gt;
Dobbiamo anche eliminare tutti gli utenti e tutti gruppi, a parte&lt;br /&gt;
'mysqld' e 'apache', dai relativi file /chroot_jail/etc/passwd,&lt;br /&gt;
/chroot_jail/etc/shadow e /chroot_jail/etc/group. Questa operazione&lt;br /&gt;
pu&amp;amp;ograve; essere fatta a mano oppure eseguendo il semplice comando:&lt;br /&gt;
 # sed -i -n '/apache/p;/mysql/p' /chroot_jail/etc/passwd /chroot_jail/etc/shadow /chroot_jail/etc/group&lt;br /&gt;
&lt;br /&gt;
= Testare il tutto =&lt;br /&gt;
Per testare se tutto &amp;amp;egrave; andato per il meglio non resta che&lt;br /&gt;
avviare i relativi server con:&lt;br /&gt;
 # chroot /chroot_jail/ /etc/rc.d/rc.mysqld start&lt;br /&gt;
 # chroot /chroot_jail/ /etc/rc.d/rc.httpd start&lt;br /&gt;
&lt;br /&gt;
== Start e stop al boot/shutdown ==&lt;br /&gt;
Se vogliamo che i nostri server siano attivi al momento del boot e si&lt;br /&gt;
fermino automaticamente allo shutdown, basta:&lt;br /&gt;
* inserire i due comandi precedenti per l'avvio dei server nel file /etc/rc.d/rc.local&lt;br /&gt;
* inserire i due comandi di stop dei server inserendo le righe seguenti nel file /etc/rc.d/rc.local_shutdown (se il file non esiste va creato):&lt;br /&gt;
 chroot /chroot_jail/ /etc/rc.d/rc.httpd stop&lt;br /&gt;
 chroot /chroot_jail/ /etc/rc.d/rc.mysqld stop&lt;br /&gt;
{{Hint&lt;br /&gt;
|Appunto:&lt;br /&gt;
|Si noti l'oridine inverso rispetto allo 'start'. All'avvio va prima eseguito il server mysql e poi apache. Durante lo shutdown invece bisogna fermare prima il server apache e poi mysql.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Manutenzione =&lt;br /&gt;
Come detto all'inizio, la forza di questa procedura sta nella&lt;br /&gt;
manutenzione dei vari server. Se il server apache, ad esempio,&lt;br /&gt;
necessita di qualche software aggiuntivo richiesto dai vari programmi&lt;br /&gt;
PHP installati, allora non rester&amp;amp;agrave; altro da fare che&lt;br /&gt;
installarglieli tramite il comando:&lt;br /&gt;
 # installpkg --root /chroot_jail nome_pacchetto&lt;br /&gt;
&lt;br /&gt;
Se uno dei server va aggiornato ad una versione successiva, allora si&lt;br /&gt;
potr&amp;amp;agrave; eseguire semplicemente un:&lt;br /&gt;
 # ROOT=/chroot_jail upgradepkg nome_pacchetto&lt;br /&gt;
&lt;br /&gt;
Nel caso in cui vogliamo anche la possibilit&amp;amp;agrave; di disinstallare&lt;br /&gt;
alcuni pacchetti dall'ambiente, bisogna installare anche i pacchetti:&lt;br /&gt;
 a/pkgtools&lt;br /&gt;
 a/findutils&lt;br /&gt;
Questo perch&amp;amp;eacute; il comando removepkg non accetta l'opzione&lt;br /&gt;
'''--root'''. Una volta fatta questa operazione, per rimuovere un&lt;br /&gt;
qualsiasi pacchetto installato nell'ambiente chroot sar&amp;amp;agrave;&lt;br /&gt;
sufficiente dare un:&lt;br /&gt;
 # chroot /chroot_jail removepkg nome_pacchetto&lt;br /&gt;
&lt;br /&gt;
= Software PHP e mail =&lt;br /&gt;
Molti programmi PHP usano la funzione mail() per inviare posta. Questa&lt;br /&gt;
funzione, sotto linux, fa uso del programma sendmail. E' ovvio quindi&lt;br /&gt;
che se vogliamo far s&amp;amp;igrave; che anche questa funzione possa essere&lt;br /&gt;
eseguita con successo, in linea teorica dovremmo installare anche il&lt;br /&gt;
pacchetto sendmail nell'ambiente chroot.&lt;br /&gt;
&lt;br /&gt;
Se non si vuole installare tutto sendmail, invece, si pu&amp;amp;ograve;&lt;br /&gt;
optare per il pi&amp;amp;ugrave; leggero [http://www.acme.com/software/mini_sendmail/ mini_sendmail].&lt;br /&gt;
A&lt;br /&gt;
[http://www.cyberciti.biz/tips/howto-setup-sendmail-php-mail-chrooted-apache-lighttpd.html questo indirizzo]&lt;br /&gt;
trovate un'ottima spiegazione su come installarlo, configurare PHP in&lt;br /&gt;
modo da farglielo usare ed eseguire un test.&lt;br /&gt;
&lt;br /&gt;
Infine, come alternativa alle soluzione precedente, si pu&amp;amp;ograve anche&lt;br /&gt;
la classe SMTP per spedire le email, questa classe si connette ad un&lt;br /&gt;
server SMTP invece che usare il comando sendmail. Dove &amp;amp;egrave;&lt;br /&gt;
possibile settare i programmi PHP in modo da usare questa classe&lt;br /&gt;
invece che la funzione mail(), si potrebbe anche optare per questa&lt;br /&gt;
soluzione invece che installare sendmail nell'ambiente chroot.&lt;br /&gt;
&lt;br /&gt;
= Un'alternativa interessante =&lt;br /&gt;
Per completezza di informazione va detto che il server apache ha&lt;br /&gt;
gi&amp;amp;agrave; di suo la capacit&amp;amp;agrave; di avviarsi in un ambiente&lt;br /&gt;
chroot. Basta installargli il software aggiuntivo&lt;br /&gt;
[http://core.segfault.pl/~hobbit/mod_chroot/ mod_chroot]. Questa&lt;br /&gt;
&amp;amp;egrave; un'ottima alternativa al problema della sicurezza del server&lt;br /&gt;
apache. Comunque l'ambiente creato attraverso la proceduta spiegata in&lt;br /&gt;
questo wiki rende possibile una separazione netta, in termini di&lt;br /&gt;
software installato, tra ci&amp;amp;ograve; che vogliamo esporre al mondo via&lt;br /&gt;
web e ci&amp;amp;ograve; che invece fa parte della nostra partizione root standard.&lt;br /&gt;
&lt;br /&gt;
= Copyright - License =&lt;br /&gt;
Autore: [[Utente:targzeta|targzeta]] 05:50, 6 set 2011 (CEST)&lt;br /&gt;
{{Information&lt;br /&gt;
|GNU Free Documentation Licence&lt;br /&gt;
|This article is released under the GNU Free Documentation Licence. You are welcome to copy and redistribute it (subject to certain conditions).&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Xorg_-_hal_-_synaptics_touchpad</id>
		<title>Xorg - hal - synaptics touchpad</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Xorg_-_hal_-_synaptics_touchpad"/>
				<updated>2012-10-02T21:57:15Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Cambiato nick&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Per http://www.slacky.eu/wikislack/index.php?title=Xorg_-_hal_-_synaptics_touchpad --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Server X]]&lt;br /&gt;
= ATTENZIONE =&lt;br /&gt;
Con la &amp;quot;morte&amp;quot; del progetto hal il server Xorg si autoconfigura tramite il demone udev ('''udevd'''). Questo wiki per tanto pu&amp;amp;ograve; considerarsi obsoleto.&lt;br /&gt;
&lt;br /&gt;
Per configurare il driver synaptics sui server Xorg (versione =&amp;gt; 1.9) che fanno uso di udev, dopo aver installato il pacchetto:&lt;br /&gt;
&lt;br /&gt;
 xf86-input-synaptics&lt;br /&gt;
&lt;br /&gt;
si controlli il file:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/X11/xorg.conf.d/50-synaptics.conf&lt;br /&gt;
&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Questo wiki spiega come settare i touchpad synaptics attraverso hal e il nuovo '''xorg''' &amp;gt;= 1.5.x. I nuovi server xorg supportano l'hotplugging attraverso le informazioni&lt;br /&gt;
prelevate grazie al demone hal ('''hald''').&lt;br /&gt;
Si può vedere il sottosistema hal come un database di informazioni sui vari device presenti nel PC, il server xorg quindi lo contatta attraverso il message bus di sistema&lt;br /&gt;
('''dbus-daemon --system''') e preleva ciò di cui ha bisogno per &amp;quot;auto-configurarsi&amp;quot;. In questo modo i futuri server xorg (ma anche lo stesso 1.5.x) potranno quasi&lt;br /&gt;
certamente&lt;br /&gt;
fare a meno del famoso file di configurazione ''/etc/X11/xorg.conf''.&amp;lt;BR&amp;gt;&lt;br /&gt;
In questo wiki spiegheremo come aggiungere al database di hal le informazioni relative ai touchpad synaptics in modo tale che il server xorg le possa prelevare per&lt;br /&gt;
configurare il driver stesso (il driver synaptics).&lt;br /&gt;
&lt;br /&gt;
=Cosa ci serve=&lt;br /&gt;
Tutto il software necessario si trova di default sulla slackware a partire già dalla versione current di oggi, 16 Giugno 2009. In pratica ci si deve solo assicurare di avere&lt;br /&gt;
installato i pacchetti (le versioni sono riferite alla distribuzione current di slackware):&lt;br /&gt;
* hal-0.5.11&lt;br /&gt;
* dbus-1.2.14&lt;br /&gt;
* xorg-server-1.6.1&lt;br /&gt;
* xf86-input-evdev-2.2.2&lt;br /&gt;
* xf86-input-synaptics-1.1.2&lt;br /&gt;
&lt;br /&gt;
I due demoni '''hald''' e '''dbus-daemon --system''' sono eseguiti all'avvio della slackware dai relativi file:&lt;br /&gt;
 ''/etc/rc.d/rc.hald''&lt;br /&gt;
 ''/etc/rc.d/rc.messagebus''&lt;br /&gt;
&lt;br /&gt;
 '''NOTA''': evdev deve essere compilato anche nel kernel! Ma nei kernel della Slackware è già presente.&lt;br /&gt;
&lt;br /&gt;
=Come aggiungere le informazioni al database di hal per il driver synaptics di xorg=&lt;br /&gt;
Per aggiungere le informazioni sulla configurazione che vogliamo ottenere per il touchpad bisogna creare un file per hal, ad esempio il file:&lt;br /&gt;
 ''/etc/hal/fdi/policy/11-x11-synaptics.fdi''&lt;br /&gt;
con all'interno quanto segue:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;info.capabilities&amp;quot; contains=&amp;quot;input.touchpad&amp;quot;&amp;gt;&lt;br /&gt;
        ...&lt;br /&gt;
        ...&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
Tutto ciò che è nei ... sarà la nostra configurazione, e vedremo in seguito cosa e come possiamo settarla.&amp;lt;BR&amp;gt;&lt;br /&gt;
Intanto cerchiamo di capire cosa abbiamo fatto creando questo file. Innanzitutto il path ''/etc/hal/fdi/policy'' ci assicura che il file verrà letto dal demone '''hald'''&lt;br /&gt;
al suo prossimo riavvio. Il contenuto del file segue la DTD (Document Type Definition) dei file XML per hal, noi stiamo dicendo che vogliamo effettuare delle operazioni (sono&lt;br /&gt;
quelle nei ...) se tra le '''info.capabilities''' individuate nel PC c'è un entry che contiene il valore '''input.touchpad'''.&lt;br /&gt;
&lt;br /&gt;
==Controllare le informazioni sul device presenti nel database di hal==&lt;br /&gt;
Come abbiamo visto, quello che noi faremo è semplicemente aggiungere informazioni al database di hal per il driver synaptics. Inoltre abbiamo anche visto che le&lt;br /&gt;
informazioni verranno aggiunte al device in cui compare la stringa '''input.touchpad''' come '''info.capabilities'''.&amp;lt;BR&amp;gt;&lt;br /&gt;
Il sistema hal prevede una serie di software con il quale è possibile interrogare il database da riga di comando, e ora noi ne sfrutteremo due per controllare le&lt;br /&gt;
informazioni già presenti nel database. Eseguendo:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
$&amp;gt; hal-find-by-capability --capability input.touchpad&lt;br /&gt;
/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
si ottiene l'udi (Unique Device Id) del device che contiene '''input.touchpad''' come '''info.capabilities'''.&amp;lt;BR&amp;gt;&lt;br /&gt;
Ora eseguendo '''hal-device''' passando come parametro l'udi ottenuto:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
$&amp;gt; hal-device '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input'&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input'&lt;br /&gt;
  input.originating_device = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port'  (string)&lt;br /&gt;
  info.subsystem = 'input'  (string)&lt;br /&gt;
  linux.sysfs_path = '/sys/class/input/input4/event4'  (string)&lt;br /&gt;
  info.category = 'input'  (string)&lt;br /&gt;
  info.product = 'SynPS/2 Synaptics TouchPad'  (string)&lt;br /&gt;
  info.parent = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port'  (string)&lt;br /&gt;
  info.capabilities = { 'input', 'input.touchpad' } (string list)&lt;br /&gt;
  info.udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input'  (string)&lt;br /&gt;
  linux.hotplug_type = 2  (0x2)  (int)&lt;br /&gt;
  input.device = '/dev/input/event4'  (string)&lt;br /&gt;
  linux.subsystem = 'input'  (string)&lt;br /&gt;
  input.product = 'SynPS/2 Synaptics TouchPad'  (string)&lt;br /&gt;
  linux.device_file = '/dev/input/event4'  (string)&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
otteniamo le informazioni contenute nel database di hal relative al nostro touchpad (si noti che tra le info.capabilities c'è anche input.touchpad).&lt;br /&gt;
&lt;br /&gt;
=I primi passi per la configurazione=&lt;br /&gt;
Ora limitiamoci ad inserire nel database di hal le informazioni minimali in modo da avere il nostro touchpad attivo, quindi inseriamo nel file&lt;br /&gt;
''/etc/hal/fdi/policy/11-x11-synaptics.fdi'' quanto segue:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;info.capabilities&amp;quot; contains=&amp;quot;input.touchpad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_driver&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;synaptics&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.SHMConfig&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
dicendo quindi ad hal che se trova una chiave '''info.capabilities''' che contiene la stringa '''input.touchpad''' deve aggiungere nel database le coppie chiave = valore:&lt;br /&gt;
 input.x11_driver = synaptics&lt;br /&gt;
 input.x11_options.SHMConfig = true&lt;br /&gt;
La prima chiave (input.x11_driver) viene cercata dal server xorg al momento dell'avvio per sapere quali driver deve caricare per gestire l'input, quindi noi gli diciamo di&lt;br /&gt;
caricare anche il driver synaptics.&lt;br /&gt;
La seconda chiave (input.x11_options.SHMConfig) viene invece cercata dal driver synaptics e gli serve per sapere come configurarsi. Tutte le chiavi di configurazione del&lt;br /&gt;
driver synaptics iniziano con ''input.x11_options.'' e al momento sono tutte di tipo ''string''. Quindi per ora abbiamo detto al driver che vogliamo sfruttare la memoria&lt;br /&gt;
condivisa (SHM - Shared Memory), vedremo dopo il perchè.&lt;br /&gt;
&lt;br /&gt;
Quindi, una volta riavviato il demone '''hald''' con:&lt;br /&gt;
 #&amp;gt; /etc/rc.d/rc.hald restart&lt;br /&gt;
rieseguendo:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
$&amp;gt; hal-device '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input'&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input'&lt;br /&gt;
  ...&lt;br /&gt;
  input.x11_driver = 'synaptics'  (string)&lt;br /&gt;
  ...&lt;br /&gt;
  input.x11_options.SHMConfig = 'true'  (string)&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
vediamo che nel database di hal, relativamente al touchpad, sono presenti anche le nostre impostazioni.&lt;br /&gt;
&lt;br /&gt;
Allora quando noi avvieremo il server xorg, lui troverà la chiave '''input.x11_driver''' e capirà che dovrà caricare il driver synaptics, il quale a sua volta troverà la&lt;br /&gt;
chiave '''input.x11_options.SHMConfig''' e saprà che dovrà configurarsi in modo tale da poter essere configurato tramite la memoria condivisa.&lt;br /&gt;
=Usare synclient per configurare il driver synaptics a runtime=&lt;br /&gt;
Con la semplice impostazione precedente&lt;br /&gt;
 &amp;lt;merge key=&amp;quot;input.x11_options.SHMConfig&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
abbiamo detto al driver synaptics che deve poter essere configurabile a runtime attraverso la memoria condivisa, e questo ci permette di eseguire, a server xorg attivo, il&lt;br /&gt;
comando '''synclient'''.&lt;br /&gt;
&lt;br /&gt;
 '''NOTA''': l'opzione 'SHMConfig = true' è considerata un rischio per la sicurezza, visto che tutti coloro che hanno accesso al PC possono&lt;br /&gt;
 configurare il driver synaptics semplicemente tramite SHM.&lt;br /&gt;
&lt;br /&gt;
Lanciando:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
$&amp;gt; synclient -l&lt;br /&gt;
Parameter settings:&lt;br /&gt;
    LeftEdge                = 1752&lt;br /&gt;
    RightEdge               = 5192&lt;br /&gt;
    TopEdge                 = 1620&lt;br /&gt;
    BottomEdge              = 4236&lt;br /&gt;
    ....&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
si può vedere come è configurato il driver synaptics al momento attuale. Tutte le proprietà sono spiegate nel manuale del driver, accessibile con:&lt;br /&gt;
 man 4 synaptics&lt;br /&gt;
&lt;br /&gt;
Ad esempio per abilitare lo scrolling verticale si esegua:&lt;br /&gt;
 $&amp;gt; synclient VertEdgeScroll=1&lt;br /&gt;
e controllando con:&lt;br /&gt;
 $&amp;gt; synclient -l| grep VertEdgeScroll&lt;br /&gt;
     VertEdgeScroll          = 1&lt;br /&gt;
si nota che è abilitato.&lt;br /&gt;
&lt;br /&gt;
==Alcune proprità interessanti del driver synaptics==&lt;br /&gt;
Oltre allo scrolling verticale il driver synaptics mette a disposizione un sacco di proprietà tra cui:&lt;br /&gt;
 * I TapButton&lt;br /&gt;
 * I CornerButton&lt;br /&gt;
I TapButton servono per dire al driver quali pulsanti deve considerare come premuti quando si 'clicca' nel centro del touchpad, ad esempio con:&lt;br /&gt;
 $&amp;gt; synclient TapButton1=1 TapButton2=2 TapButton3=3&lt;br /&gt;
diciamo al driver, rispettivamente, che:&lt;br /&gt;
* quando clicchiamo nel centro del touchpad con un dito, si deve comportare come se fosse stato premuto il 1° pulsante (generalmente il tasto sinistro).&lt;br /&gt;
* quando clicchiamo nel centro del touchpad con due dita, si deve comportare come se fosse stato premuto il 2° pulsante.&lt;br /&gt;
* quando clicchiamo nel centro del touchpad con tre dita, si deve comportare come se fosse stato premuto il 3° pulsante.&lt;br /&gt;
&lt;br /&gt;
I CornerButton servono per dire al driver quali pulsanti deve considerare come premuti quando si 'clicca' negli angoli del touchpad, ad esempio con:&lt;br /&gt;
 $&amp;gt; synclient RTCornerButton=2 RBCornerButton=3&lt;br /&gt;
diciamo al driver, rispettivamente, che:&lt;br /&gt;
* quando clicchiamo nell'angolo in alto a destra (RT - right top) del touchpad deve comportarsi come se fosse stato premuto il 2° pulsante.&lt;br /&gt;
* quando clicchiamo nell'angolo in basso a destra (RB - right bottom) del touchpad deve comportarsi come se fosse stato premuto il 3° pulsante.&lt;br /&gt;
&lt;br /&gt;
=Un file per hal di esempio=&lt;br /&gt;
Una volta trovata la giusta configurazione per il nostro touchpad a runtime grazie a '''synclient''', possiamo renderla attiva ad ogni avvio del server xorg modificando il file ''/etc/hal/fdi/policy/11-x11-synaptics.fdi''.&amp;lt;BR&amp;gt;&lt;br /&gt;
Ad esempio il mio file contiene:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;info.capabilities&amp;quot; contains=&amp;quot;input.touchpad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_driver&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;synaptics&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.SHMConfig&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.VertEdgeScroll&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.MaxTapTime&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;180&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.FingerLow&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;25&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.FingerHigh&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;30&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.TapButton1&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;1&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.TapButton2&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;3&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.TapButton3&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.RTCornerButton&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;3&amp;lt;/merge&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;input.x11_options.RBCornerButton&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/merge&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
Si noti come tutte le chiavi per il driver synaptics iniziano con 'input.x11_options.' mentre il nome delle proprietà ('SHMConfig', 'VertEdgeScroll' 'MaxTapTime', etc..)&lt;br /&gt;
sono prese direttamente dal manuale del driver (synaptics(4)) e sono le stesse che abbiamo passato al comando '''synclient'''.&lt;br /&gt;
&lt;br /&gt;
=Errori=&lt;br /&gt;
==hal-find-by-capability --capability input.touchpad non mostra niente==&lt;br /&gt;
Questo tipo di errore pu&amp;amp;ograve; essere causato dal passaggio del parametro '''proto=imp''' al modulo del kernel '''psmouse'''. Per ovviare a questo&lt;br /&gt;
problema, assicuratevi che nel file:&lt;br /&gt;
 /etc/modprobe.d/psmouse.conf&lt;br /&gt;
sia commentata la riga:&lt;br /&gt;
 # options psmouse proto=imps&lt;br /&gt;
&lt;br /&gt;
===NOTA===&lt;br /&gt;
Alcuni utenti per essere sicuri di non fare danni usano generalmente creare dei file di backup. Se volete fare un backup di questo&lt;br /&gt;
file prima di modificarlo, fate attenzione a non farlo nella directory ''/etc/modprobe.d/'', altrimenti l'opzione viene passata ugualmente.&lt;br /&gt;
Per verificare che il parametro non sia stato passato, potete scaricare il modulo e ricaricarlo come segue:&lt;br /&gt;
 #&amp;gt; modprobe -r psmouse&lt;br /&gt;
 #&amp;gt; modprobe -v psmouse&lt;br /&gt;
facendo attenzione che il secondo comando '''non''' mostri qualcosa del tipo:&lt;br /&gt;
 proto=imps&lt;br /&gt;
Se lo mostra, allora vuol dire che qualche altro file nella directory su citata ha questa opzione non commentata.&lt;br /&gt;
&lt;br /&gt;
=Conclusione=&lt;br /&gt;
Grazie alla lettura di questo piccolo wiki dovremmo essere in grado di capire:&lt;br /&gt;
* come avverr&amp;amp;agrave; la futura configurazione dei server xorg (grazie ad hal e dbus)&lt;br /&gt;
* e quindi come poter intervenire per modificarla&lt;br /&gt;
&lt;br /&gt;
Se notate qualche incorrettezza scrivetemi pure, generalmente accetto ben volentieri critiche o proposte di matrimonio :)&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Utente:targzeta|targzeta]]&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Check_For_Updated</id>
		<title>Check For Updated</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Check_For_Updated"/>
				<updated>2012-10-02T21:56:34Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Cambiato nick&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Per http://www.slacky.eu/wikislack/index.php?title=Check_For_Updates --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:Script]]&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Lo script '''check_for_updates.sh''' controlla se una determinata pagina internet &amp;amp;egrave; stata modificata. Lo si pu&amp;amp;ograve; pensare come un'alternativa ai feed RSS.&lt;br /&gt;
&lt;br /&gt;
Lo script &amp;amp;egrave; stato creato con lo scopo di scoprire se un determinato progetto &amp;amp;egrave; stato modificato oppure no, dall'ultima volta che lo si &amp;amp;egrave; controllato.&lt;br /&gt;
&lt;br /&gt;
=Download=&lt;br /&gt;
Lo script si trova all'indirizzo:&amp;lt;br/&amp;gt;&lt;br /&gt;
http://www.slacky.eu/~targzeta/script/check_for_updates.sh&lt;br /&gt;
&lt;br /&gt;
==NOTA per le versioni dalla 1.5 in poi==&lt;br /&gt;
Se si passa da una versione precedente ad una &amp;gt;= della 1.5, dato che lo script ha cambiato nome (da '''check_upgrade.sh''' a '''check_for_updates.sh'''), si dovrebbero anche rinominare tutte le sottodirectory ''.check_upgrade'' in ''.check_for_updates''. Ecco uno script che potrebbe essere d'aiuto:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for file in *;&lt;br /&gt;
  do&lt;br /&gt;
    if [ -d $file ] &amp;amp;&amp;amp; [ -d ${file}/.check_upgrade ];&lt;br /&gt;
      then&lt;br /&gt;
        mv ${file}/.check_upgrade ${file}/.check_for_updates;&lt;br /&gt;
    fi;&lt;br /&gt;
  done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Se invece &amp;amp;egrave; la prima volta che si usa lo script, questo non &amp;amp;egrave; necessario!!'''&lt;br /&gt;
&lt;br /&gt;
=L'ambiente di lavoro=&lt;br /&gt;
Lo script lavora su directory, l'idea &amp;amp;egrave; che per ogni progetto che l'utente segue, ci sia una directory associata, ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; ls -1F software/&lt;br /&gt;
FileZilla/&lt;br /&gt;
a52dec/&lt;br /&gt;
aircrack-ng/&lt;br /&gt;
amrnb/&lt;br /&gt;
amrwb/&lt;br /&gt;
audacity/&lt;br /&gt;
...&lt;br /&gt;
check_for_updates.sh*&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
come si nota, lo script &amp;amp;egrave; all'interno della directory ''software'', la quale contiene una directory per ogni progetto che si vuole seguire (FileZilla, aicrack-ng, etc...).&lt;br /&gt;
&lt;br /&gt;
=Lo script e le varie modalit&amp;amp;agrave;=&lt;br /&gt;
Lo script opera in diversi modi a seconda di quale modalit&amp;amp;agrave; si scelga di eseguire. L'elenco delle modalit&amp;amp;agrave; lo si trova con l'uso dell'opizione ''--help''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh --help&lt;br /&gt;
Uso: check_for_updates.sh [opzioni] MODALITA [mod_opzioni] arg1...&lt;br /&gt;
     check_for_updates.sh MODALITA -h|--help&lt;br /&gt;
     check_for_updates.sh -v|--version&lt;br /&gt;
&lt;br /&gt;
Opzioni:&lt;br /&gt;
  -c    Non colora l'output&lt;br /&gt;
&lt;br /&gt;
MODALITA e' una tra:&lt;br /&gt;
        check&lt;br /&gt;
        db&lt;br /&gt;
        init&lt;br /&gt;
        not_conform&lt;br /&gt;
        update&lt;br /&gt;
        url&lt;br /&gt;
&lt;br /&gt;
by Emanuele Tomasi aka targzeta &amp;lt;targzeta@gmail.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modalit&amp;amp;agrave; init==&lt;br /&gt;
Questa &amp;amp;egrave; la prima modalit&amp;amp;agrave; che si usa per iniziare a seguire un progetto. L'help per questa&lt;br /&gt;
modalit&amp;amp;agrave; &amp;amp;egrave; il seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh init --help&lt;br /&gt;
Uso: check_for_updates.sh init [opzioni] dir URL&lt;br /&gt;
&lt;br /&gt;
Inizializza la directory dir tramite l'URL passatogli.&lt;br /&gt;
&lt;br /&gt;
Opzioni:&lt;br /&gt;
-g      forza l'uso del protocollo git&lt;br /&gt;
-q      quiet&lt;br /&gt;
-s      forza l'uso del protocollo svn&lt;br /&gt;
-v      verbose&lt;br /&gt;
&lt;br /&gt;
L'URL va quotato se contiene caratteri speciali per la shell,&lt;br /&gt;
come ad esempio il carattere '&amp;amp;'.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gli argomenti sono quindi soltanto due:&lt;br /&gt;
* Il nome della directory associata al progetto da seguire;&lt;br /&gt;
* L'URL della pagina web in cui vengono annunciati i cambiamenti o nuove release;&lt;br /&gt;
{{Be Careful|Nota|Come dice anche l'help, l'URL va quotato se contiene caratteri che la shell pu&amp;amp;ograve;  interpretare o espandere. Vedi appunto il carattere '&amp;amp;' che per la shell significa: &amp;quot;manda in background&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
Ad esempio, per il progetto FileZilla si ha:&lt;br /&gt;
* Il nome della directory == ''FileZilla/''&lt;br /&gt;
* URL = http://filezilla-project.org/download.php?type=client&lt;br /&gt;
&lt;br /&gt;
quindi per iniziare a seguire il progetto basta eseguire:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh init FileZilla/ http://filezilla-project.org/download.php?type=client&lt;br /&gt;
# Directory: FileZilla&lt;br /&gt;
INIZIALIZZATA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Hint|Nota|Il nome della directory non deve finire necessariamente con il carattere '/'.}}&lt;br /&gt;
&lt;br /&gt;
Una volta che la directory &amp;amp;egrave; stata inizializzata la si definisce &amp;quot;conforme&amp;quot; allo script, ovvero lo script al suo interno ha creato una sottodirectory di nome ''.check_for_updates'' con all'interno due file:&lt;br /&gt;
; page : la pagina web indirizzata dall'URL (scaricata tramite il comando '''wget''');&lt;br /&gt;
; url : l'URL che si &amp;amp;egrave; passato come parametro;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; tree FileZilla/.check_for_updates/&lt;br /&gt;
FileZilla/.check_for_updates/&lt;br /&gt;
|-- page&lt;br /&gt;
`-- url&lt;br /&gt;
&lt;br /&gt;
0 directories, 2 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Protocolli===&lt;br /&gt;
Ci sono vari tipi di protocolli accettati dallo script, il protocollo da usare viene individuato analizzando l'inizio dell'URL oppure attraverso l'uso delle opzioni '''-g''' e '''-s''' della modalit&amp;amp;agrave; '''init'''.&lt;br /&gt;
&lt;br /&gt;
====http(s) o ftp====&lt;br /&gt;
Il download delle pagine per questi protocolli avviene tramite il comando:&lt;br /&gt;
  wget --no-check-certificate&lt;br /&gt;
&lt;br /&gt;
L'uso di questi protocolli &amp;amp;egrave; di default quando l'URL inizia con http(s):// oppure ftp.&lt;br /&gt;
&lt;br /&gt;
====svn====&lt;br /&gt;
L'uso di subversion avviene scaricando, come pagina da confontare, il log, e viene fatto usando:&lt;br /&gt;
 svn info -r HEAD&lt;br /&gt;
&lt;br /&gt;
L'uso di questo protocollo &amp;amp;egrave; di default quando l'URL inizia con svn://. Poich&amp;amp;egrave; per&amp;amp;ograve; subversion si appoggia anche su altri protocolli, si pu&amp;amp;ograve; forzare l'uso di questo protocollo anche con URL che non iniziano con svn://. Per fare questo basta semplicemente usare l'opzione '''-s''' della modalit&amp;amp;agrave; '''init'''.&lt;br /&gt;
&lt;br /&gt;
====git====&lt;br /&gt;
L'uso di git avviene scaricando, come pagina da confrontare, il log, e viene fatto usando:&lt;br /&gt;
 git ls-remote HEAD&lt;br /&gt;
&lt;br /&gt;
L'uso di questo protocollo &amp;amp;egrave; di default quando l'URL inizia con git://. Poich&amp;amp;egrave; per&amp;amp;ograve; git si appoggia anche su altri protocolli, si pu&amp;amp;ograve; forzare l'uso di questo protocollo anche con URL che non iniziano con git://. Per fare questo basta semplicemente usare l'opzione '''-g''' della modalit&amp;amp;agrave; '''init'''.&lt;br /&gt;
&lt;br /&gt;
==Modalit&amp;amp;agrave; check==&lt;br /&gt;
Una volta inizializzata la directory, si pu&amp;amp;ograve; seguire il progetto facendo un '''check''' su di essa. L'help per questa modalit&amp;amp;agrave; &amp;amp;egrave;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check --help&lt;br /&gt;
Uso: check_for_updates.sh check [opzioni] dir1...&lt;br /&gt;
&lt;br /&gt;
Controlla se la pagina e' aggiornata.&lt;br /&gt;
&lt;br /&gt;
Opzioni:&lt;br /&gt;
-d      mostra l'output di 'diff' quando controlla l'aggiornamento&lt;br /&gt;
-e      non mostra gli errori di download&lt;br /&gt;
-f      mostra la pagina filtrata (non effettua controlli sull'aggiornamento)&lt;br /&gt;
-k      non elimina i file temporanei all'uscita&lt;br /&gt;
-n      mostra l'output di 'diff' stampando solo le nuove righe. Ignora '-d'&lt;br /&gt;
-o      produce output solo se la pagina e' stata aggiornata. Implica '-s'&lt;br /&gt;
-q      quiet. Implica '-s'&lt;br /&gt;
-s      non stampa errori sulle directory non conformi&lt;br /&gt;
-v      verbose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
come si vede, si pu&amp;amp;ograve; fare il '''check''' anche su pi&amp;amp;ugrave; directory contemporaneamente, in effetti lo si pu&amp;amp;ograve; fare anche su directory non conformi o file, lo script salter&amp;amp;agrave; i file, e tramimte l'opzione '-s' non stamper&amp;amp;agrave; nulla neanche sulle directory non conformi. Questo &amp;amp;egrave; utile se si vuole eseguire il check su di un'intera directory con:&lt;br /&gt;
 $&amp;gt; check_for_updates.sh check *&lt;br /&gt;
&lt;br /&gt;
Lo script, quando &amp;amp;egrave; invocato con questa modalit&amp;amp;agrave; segue il seguente algoritmo (a meno che non venga eseguito con l'opzione '-f'):&lt;br /&gt;
* scarica la pagina web (identificata dall'indirizzo trovato nel file ''.check_for_updates/url'') in un file temporaneo;&lt;br /&gt;
* fa una copia della pagina web ''.check_for_updates/page'' in un altro file temporaneo;&lt;br /&gt;
* se ci sono filtri, allora filtra entrambe le pagine temporanee;&lt;br /&gt;
* esegue il comando '''diff''' per vedere se ci sono differenze tra le due pagine temporanee;&lt;br /&gt;
&lt;br /&gt;
Un esempio di invocazione &amp;amp;egrave; il seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check FileZilla/&lt;br /&gt;
# Directory: FileZilla&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
il valore di ritorno 'OK' indica che la pagina ''.check_for_updates/page'' (filtrata) non differisce dalla pagina internet (filtrata).&lt;br /&gt;
&lt;br /&gt;
===Opzione -d===&lt;br /&gt;
Tramite questa opzione, lo script mostrer&amp;amp;agrave; l'output del comando '''diff''' sulle pagine temporanee. Questo &amp;amp;egrave; utile per vedere se effettivamente la differenza &amp;amp;egrave; significativa oppure no. Se non &amp;amp;egrave; significativa, si pu&amp;amp;ograve; migliorare il controllo creando appositi filtri (si vedr&amp;amp;agrave; in seguito l'uso dei filtri).&lt;br /&gt;
&lt;br /&gt;
===Opzione -f===&lt;br /&gt;
In questo caso lo script non esegue l'algoritmo spiegato in precedenza, ma si limita a filtrare la pagina '''.check_for_updates/page'' e a mostrare l'esito dei filtri e, quindi, la porzione di pagina che si verr&amp;amp;agrave; controllata.&lt;br /&gt;
&lt;br /&gt;
===Opzione -k===&lt;br /&gt;
Con questa opzione, lo script non eliminer&amp;amp;agrave; i file temporanei creati per il confronto.&lt;br /&gt;
&lt;br /&gt;
===Opzione -n===&lt;br /&gt;
Questa opzione &amp;amp;egrave; simile (e ne &amp;amp;egrave; un alternativa) all'opzione '''-d''', con la differenza che mostra soltanto le nuove righe. E' utile nel caso la pagina che si tiene sotto controllo sia effettivamente un log con entry che vengono eliminate in favore di nuove.&lt;br /&gt;
&lt;br /&gt;
===Opzione -o===&lt;br /&gt;
Lo script, per ogni directory che gli si passa, produce una serie di output tipo quello visto negli esempi precedenti. Questa opzione inibisce lo script a produrre output se il comando '''diff''' torna che le due pagine temporanee sono identiche. Nell'esempio, dato che la directory FileZilla viene trovata 'OK', lo script, con questa opzione, non produce output. E' molto utile se si invoca lo script passandogli molte directory, o addirittuta '*'.&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check -o FileZilla/ amrwb/&lt;br /&gt;
# Directory: amrwb&lt;br /&gt;
DA AGGIORNARE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Information|NOTA|L'uso di questa opzione implica l'opzione '-s'.}}&lt;br /&gt;
&lt;br /&gt;
===Opzione -q (caso particolare)===&lt;br /&gt;
Questa opzione inibisce lo script a produrre output, in pratica rende incompresibile l'uso dello script. L'unico motivo per cui esiste ancora &amp;amp;egrave; che in associazione con l'opzione '-o', si ha l'elenco delle directory per le quali lo script produrrebbe 'DA AGGIORNARE'.&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check -qo FileZilla/ amrwb/&lt;br /&gt;
amrwb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Information|NOTA|L'uso di questa opzione implica l'opzione '-s'.}}&lt;br /&gt;
&lt;br /&gt;
===Opzione -s===&lt;br /&gt;
Normalmente se allo script gli si passa una directory non conforme esso produrra in output una scritta simile a questa:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check Kernel/&lt;br /&gt;
# Directory: Kernel&lt;br /&gt;
  Attenzione: Kernel non ha:&lt;br /&gt;
        * o la sottodirectory .check_for_updates&lt;br /&gt;
        * o il file .check_for_updates/url&lt;br /&gt;
        * o il file .check_for_updates/page&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tramite l'uso di questa opzione, lo script salta queste directory e quindi non produce nessun output. Questa opzione &amp;amp;egrave; utile se si invoca lo script su pi&amp;amp;ugrave; directory in contemporanea o su '*'.&lt;br /&gt;
&lt;br /&gt;
==Modalit&amp;amp;agrave; update==&lt;br /&gt;
L'unico modo per far sapere allo script che una directory &amp;amp;egrave; di nuovo aggiornata, &amp;amp;egrave; quello di invocarlo con questa modalit&amp;amp;agrave;. Lo script scaricher&amp;amp;agrave; la nuova pagina web e la sostituir&amp;amp;agrave; con quella in ''.check_for_updates/page''. L'help &amp;amp;egrave; il seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt;check_for_updates.sh update --help&lt;br /&gt;
Uso: check_for_updates.sh update [opzioni] dir1...&lt;br /&gt;
&lt;br /&gt;
Aggiorna, riscaricando la pagina, la directory dir.&lt;br /&gt;
&lt;br /&gt;
Opzioni:&lt;br /&gt;
-q      quiet&lt;br /&gt;
-v      verbose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ad esempio, se si aggiorna la directory ''amrwb'', per il quale lo script ha ritornato 'DA AGGIORNARE', invocando lo script con questa modalit&amp;amp;agrave; si ottiene:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh update amrwb/&lt;br /&gt;
# Directory: amrwb&lt;br /&gt;
AGGIORNATA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modalit&amp;amp;agrave; not_conform==&lt;br /&gt;
La modalit&amp;amp;agrave; si limita ad elencare, tra le directory passategli, quelle non conformi. L'help &amp;amp;egrave; il seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh not_conform --help&lt;br /&gt;
Uso: check_for_updates.sh not_conform dir1...&lt;br /&gt;
&lt;br /&gt;
Stampa il nome delle dir non conformi (non inizializzate).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh not_conform FileZilla/ amrwb/ Kernel/&lt;br /&gt;
Kernel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modalit&amp;amp;agrave; url==&lt;br /&gt;
Per ogni directory passatagli, se la directory &amp;amp;egrave; conforme, lo script stampa l'URL trovato nel file ''.check_for_updates/url''. L'help &amp;amp;egrave; il seguente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh url --help&lt;br /&gt;
Uso: check_for_updates.sh url dir1...&lt;br /&gt;
&lt;br /&gt;
Stampa l'URL impostato per la directory dir.&lt;br /&gt;
&lt;br /&gt;
Opzioni:&lt;br /&gt;
-q      quiet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh url FileZilla/ amrwb/ Kernel/&lt;br /&gt;
# Directory: FileZilla&lt;br /&gt;
http://filezilla-project.org/download.php?type=client&lt;br /&gt;
&lt;br /&gt;
# Directory: amrwb&lt;br /&gt;
http://www.penguin.cz/~utx/amr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Filtri=&lt;br /&gt;
I filtri sono un modo per far si che lo script esegua il comando '''diff''' solo su una porzione anzich&amp;amp;eacute; sull'intera pagina.&lt;br /&gt;
&lt;br /&gt;
Attualmente i filtri si devono creare a mano e vanno messi in dei file nella sottodirectory ''.check_for_updates/'' del progetto. Ci sono cinque tipi di filtri, caratterizzati da altrettanti nomi file.&lt;br /&gt;
&lt;br /&gt;
Quando lo script viene invocato con la modalit&amp;amp;agrave; '''check''', prima di eseguire il comando '''diff''', se trova i file dei filtri, filtra i file temporanei.&lt;br /&gt;
{{Hint|Nota|I filtri sono applicati usando '''sed''' con le basic regex.}}&lt;br /&gt;
Nella scrittura di alcuni filtri si pu&amp;amp;ograve; usare la direttiva '''#DIR#''' che viene sostituita dal nome della directory su cui lo script st&amp;amp;agrave; lavorando.&lt;br /&gt;
{{Be Careful|Nota|Poich&amp;amp;eacute; il filtro '''sed_script''' pu&amp;amp;ograve; sostituire tutti gli altri, nelle prossime versioni sar&amp;amp;agrave; l'unico filtro ammesso.}}&lt;br /&gt;
&lt;br /&gt;
==Il filtro compare_only_line (obsoleto)==&lt;br /&gt;
Se esiste un file chiamato ''.check_for_updates/compare_only_line'', questo file deve contenere, una per riga, un'espressione regolare. Solo le righe dei file temporanei che hanno il match con queste espressioni regolari saranno confrontate.&lt;br /&gt;
&lt;br /&gt;
Ad esempio, se si guarda il link impostato per FileZilla, si noter&amp;amp;agrave; che in quella pagina vengono linkati sia i sorgenti per linux, sia l'installer per Windows, per Mac OS, etc. etc. Se si vuole controllare solo i sorgenti per linux, basta creare il file ''.check_for_updates/compare_only_line'' con all'interno questa espressione regolare:&lt;br /&gt;
 FileZilla.*src.*bz2&lt;br /&gt;
&lt;br /&gt;
Per vedere cosa effettivamente compara il comando '''diff''', basta eseguire lo script con modalit&amp;amp;agrave; '''check''' e opzione '-f':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check -f FileZilla/&lt;br /&gt;
# Directory: FileZilla&lt;br /&gt;
  &amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.ohloh.net/projects/filezilla/download?filename=FileZilla_3.1.5.1_src.tar.bz2&amp;quot;&amp;gt;FileZilla_3.1.5.1_src.tar.bz2&amp;lt;/a&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
come si pu&amp;amp;ograve; notare, il filtro ha lasciato passare solo la riga che contiene il link ai sorgenti.&lt;br /&gt;
&lt;br /&gt;
Per questo filtro si pu&amp;amp;ograve; usare la direttiva '''#DIR#''', quindi se il nome della directory che contiene il progetto FileZilla si chiama proprio ''FileZilla/'', una regex del tutto analoga a quella mostrata prima &amp;amp;egrave;:&lt;br /&gt;
 #DIR#.*src.*bz2&lt;br /&gt;
&lt;br /&gt;
==Il filtro filter_line_number (obsoleto)==&lt;br /&gt;
Se esiste un file chiamato ''.check_for_updates/filter_line_number'', questo file deve contenere, per ogni riga, un numero. Lo script sopprimer&amp;amp;agrave; le righe corrispondenti dalla pagina, prima di eseguire '''diff'''.&lt;br /&gt;
&lt;br /&gt;
==Il filtro filter_line_regex (obsoleto)==&lt;br /&gt;
Se esiste un file chiamato ''.check_for_updates/filter_line_regex'', questo file deve contenere, per ogni riga, un'espressione regolare. Lo script sopprimer&amp;amp;agrave; le righe della pagina che hanno il match con una di queste espressioni regolari, prima di eseguire '''diff'''.&lt;br /&gt;
&lt;br /&gt;
Per questo filtro si pu&amp;amp;ograve; usare la direttiva '''#DIR#'''.&lt;br /&gt;
&lt;br /&gt;
==Il filtro filter_word (obsoleto)==&lt;br /&gt;
Se esiste un file chiamato ''.check_for_updates/filter_word'', questo file deve contenere, per ogni riga, un'espressione regolare. Lo script sopprimer&amp;amp;agrave;, per ogni riga che ha il match con una di queste espressione regolari, l'espressione regolare stessa.&lt;br /&gt;
&lt;br /&gt;
Ad esempio, con riferimento all'output prodotto gi&amp;amp;agrave; dal filtro '''compare_only_line''' nell'esempio precedente, se si volesse eliminare dall'unica riga prodotta dal filtro, anche tutte le parole dall'inizio della riga sino al protocollo https, basta fare:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; echo '^.*href=&amp;quot;' &amp;gt; FileZilla/.check_for_updates/filter_word&lt;br /&gt;
&lt;br /&gt;
$&amp;gt; check_for_updates.sh check -f FileZilla/&lt;br /&gt;
# Directory: FileZilla&lt;br /&gt;
https://www.ohloh.net/projects/filezilla/download?filename=FileZilla_3.1.5.1_src.tar.bz2&amp;quot;&amp;gt;FileZilla_3.1.5.1_src.tar.bz2&amp;lt;/a&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per questo filtro si pu&amp;amp;ograve; usare la direttiva '''#DIR#'''.&lt;br /&gt;
&lt;br /&gt;
== Il filtro sed_script ==&lt;br /&gt;
Se esiste un file chiamato ''.check_for_updates/sed_script'', questo file deve contenere un vero e proprio script per sed. '''check_for_updates.sh''' esegue il comando '''sed -n -f .check_for_updates/sed_script''', quindi si faccia attenzione poich&amp;amp;eacute; non verr&amp;amp;agrave; generato nessun output a meno che non si sia usato il comando '''p''' di sed.&lt;br /&gt;
&lt;br /&gt;
Per questo filtro si pu&amp;amp;ograve; usare la direttiva '''#DIR#'''.&lt;br /&gt;
&lt;br /&gt;
==L'ordine di esecuzione dei filtri==&lt;br /&gt;
I filtri sopra citati vengono eseguiti nel seguente ordine:&lt;br /&gt;
* sed_script&lt;br /&gt;
* compare_only_line&lt;br /&gt;
* filter_line_number&lt;br /&gt;
* filter_line_regex&lt;br /&gt;
* file_filter_word&lt;br /&gt;
&lt;br /&gt;
L'ordine degli ultimi tre filtri non &amp;amp;egrave; importante, ma si deve tenere ben presente che prima si filtrano i file temporanei con il filtro '''sed_script''', quindi sull'output di questo filtro viene applicato, se esiste, il filtro '''compare_only_line''', ed infine sull'output di quest'altro filtro, vengono applicati, se ci sono, i filtri per sopprimere altre righe o parole.&lt;br /&gt;
&lt;br /&gt;
=Progetti su Sourceforge=&lt;br /&gt;
Il link ai file di un progetto hostato su Sourceforge hanno tutti la stessa forma:&lt;br /&gt;
 http://sourceforge.net/projects/NOME_PROGETTO/files/&lt;br /&gt;
dove NOME_PROGETTO &amp;amp;egrave; proprio il nome del progetto hostato.&lt;br /&gt;
&lt;br /&gt;
Quindi un modo per inizializzare lo script, ad esempio per p7zip &amp;amp;egrave;:&lt;br /&gt;
 $&amp;gt; check_for_updates.sh init p7zip http://sourceforge.net/projects/p7zip/files/&lt;br /&gt;
&lt;br /&gt;
E, per filtrare la pagina scaricata basta fare:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; echo '/#DIR#.*class=&amp;quot;folder/b get_date;d;:get_date /date/{s/.*title=&amp;quot;\([[:digit:]-]\+\).*/#DIR#  \1/p;q};n;b get_date'\&lt;br /&gt;
  &amp;gt; p7zip/.check_for_updates/sed_script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il quale fa passare solo la data dell'ultimo file aggiornamento, come si pu&amp;amp;ograve; vedere dall'output della modalit&amp;amp;agrave; '''check''' con l'opzione '-f':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; check_for_updates.sh check -f p7zip/&lt;br /&gt;
# Directory: p7zip&lt;br /&gt;
p7zip  2010-05-30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Working in progress...=&lt;br /&gt;
Lo script necessita ancora di ottimizzazioni, ritocchi ed espansioni. Per ora, ad esempio, il comportamento con le opzioni delle varie modalit&amp;amp;agrave; &amp;amp;egrave; un po' bizzarro, basti pensare che l'opzione '-q' e '-v' non generano un errore di incompatibilit&amp;amp;agrave;.&lt;br /&gt;
&lt;br /&gt;
La madalit&amp;amp;agrave; '''db''' per ora non fa nulla, ma l'idea &amp;amp;egrave; quella di  poter esportare ed importare URL e/o filtri. In questo modo basterebbe avere un pacchetto il pi&amp;amp;ugrave; completo possibile di queste informazioni per far si che pi&amp;amp;ugrave; utenti possano controllare gli stessi progetti senza doversi ogni volta scovare URL e filtri adatti.&lt;br /&gt;
&lt;br /&gt;
=Ringraziamenti e conclusioni=&lt;br /&gt;
Ringrazio:&lt;br /&gt;
* conraid per l'ottimo feedback&lt;br /&gt;
&lt;br /&gt;
Autore (data dell'ultimo aggiornamento):&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Utente:targzeta|targzeta]] ([[Discussioni utente:targzeta|discussioni]]) 00:08, 1 ago 2012 (CEST)&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Slackware_su_pennina_USB</id>
		<title>Slackware su pennina USB</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Slackware_su_pennina_USB"/>
				<updated>2012-10-02T21:54:18Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Per www.slacky.eu --&amp;gt;&lt;br /&gt;
[[Category:Install_e_Upgrade]]&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Questo wiki vuole essere una guida, il più completa possibile, sui passi da fare per crearsi un propria distribuzione Slackware su un dispositivo di archiviazione di massa USB (che da ora in poi chiameremo più semplicemente, pennina).&amp;lt;BR&amp;gt;&lt;br /&gt;
Affronteremo tutti i vari passaggi strettamente necessari a far partire un kernel installato sulla pennina ed a creare/configurare la distribuzione Slackware.&amp;lt;BR&amp;gt;&lt;br /&gt;
Ovviamente, benché pensata e testata sulla Slackware, la teoria che acquisiremo alla fine di questo wiki sarà tale da permetterci di installare una qualsivoglia distribuzione, la differenza sarà solo sugli strumenti che useremo.&lt;br /&gt;
&lt;br /&gt;
Tutti o quasi tutti i comandi che eseguiremo durante il wiki devono poter godere dei diritti dall'utente root, e per questo saranno caratterizzati dal carattere iniziale '#' che è tipico della shell del super-utente.&lt;br /&gt;
&lt;br /&gt;
I path e i comandi verranno evidenziati rispettivamente dallo stile corsivo e dal font grassetto in questo modo:&lt;br /&gt;
* ''/questo/è/un/path''&lt;br /&gt;
* '''questo è un comando'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Perché installare la distribuzione su una pennina?=&lt;br /&gt;
Alcuni esempi d'uso verranno esposti alla fine del wiki, ma facciamo comunque alcune considerazioni importanti.&amp;lt;BR&amp;gt;&lt;br /&gt;
Questa guida è rivolta a tutti coloro che sono curiosi, affamati di conoscenza, che usano il PC non solo come strumento di lavoro, ma anche con la voglia di portare alla luce ciò che sembra arcano. Lo scopo del wiki non è la creazione della distribuzione tascabile, bensì la divulgazione della conoscenza, è importante che il lettore tenga presente questo concetto, perché è quello che ci preme rimanga più a lungo nella mente di chi legge questo wiki.&amp;lt;BR&amp;gt;&lt;br /&gt;
Oltre ad avere una pennina da portare nei negozi di informatica per testare i PC che solitamente hanno installato solo lo scadente Windows, acquisiremo una conoscenza più o meno approfondita di tutti i programmi necessari all'avvio di una distribuzione GNU/Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Software usato=&lt;br /&gt;
Gli strumenti software che sono stati usati per testare questo wiki sono:&lt;br /&gt;
* Slackware 12 (sebbene alcuni utenti l'abbiano testato con successo anche sulla 13 e sulla 13.1)&lt;br /&gt;
* kernel huge, presente nella directory della serie ''a/'' della Slackware&lt;br /&gt;
* comandi linux che verranno citati man mano, tutti comunque presenti nella distribuzione Slackware&lt;br /&gt;
L'elenco sopra citato è da tenere a mente sia perché citeremo nomi di pacchetti Slackware, sia perché il kernel huge fornisce un sopporto tale che alcuni problemi che si potrebbero incontrare verranno solo citati, in quanto risolti grazie alla sua configurazione statica.&lt;br /&gt;
&lt;br /&gt;
=Fase 0: preparazione della pennina=&lt;br /&gt;
Noi installeremo la distribuzione Slackware direttamente sulla pennina, iniziamo allora preparando proprio il nostro supporto di archiviazione di massa USB.&amp;lt;BR&amp;gt;&lt;br /&gt;
L'unica cosa di cui abbiamo bisogno e di installarci dentro un file system ext3. Le pennine USB, proprio come gli hard disk, possono essere partizionate, supponiamo quindi che sulla pennina ci sia un unica partizione e che questa venga collegata dal kernel al device ''/dev/sda1''. Installiamoci dentro un file system ext3 con il seguente comando:&lt;br /&gt;
 # mkfs.ext3 -L minislack /dev/sda1&lt;br /&gt;
bene, quella che abbiamo appena creato sarà la directory radice della nostra distribuzione.&lt;br /&gt;
&lt;br /&gt;
'''ATTENZIONE:''' tutti i file sulla pennina saranno ovviamente persi dopo l'esecuzione del comando '''mkfs.ext3''', quindi facciamo in modo che la pennina sia vuota prima di lanciare il comando.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' si noti l'uso dell'opzione -L per impostare un etichetta al file system appena creato, vedremo dopo a cosa ci servirà. L'etichetta del file system la si può impostare/modificare anche successivamente attraverso l'uso del comando '''e2label'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Fase 1: creazione dell'initrd=&lt;br /&gt;
Più in là nel wiki, vedremo come far caricare il kernel di linux installato su una pennina, qui invece ci apprestiamo ad affrontare un problema inerente proprio al fatto che la distribuzione si trova su una periferica USB.&lt;br /&gt;
&lt;br /&gt;
==Perché dobbiamo creare un initrd?==&lt;br /&gt;
Una volta caricato il kernel, esso si preoccupa di attivare tutti i driver che sono stati compilati in maniera statica al suo interno. L'attivazione avviene in maniera parallela, il kernel cioè non attiva un driver, aspetta che esso abbia finito di inizializzarsi e poi ne attiva un altro, ma li attiva tutti quanti &amp;quot;contemporaneamente&amp;quot;. Dopo questa fase di inizializzazione dei driver il kernel deve montare quella che è la root directory (o directory radice) della distribuzione, la famosa directory ''/''. Una volta montata la directory radice, esegue quello che sarà l'unico processo avviato direttamente dal kernel (che in generale è il processo '''/sbin/init''').&lt;br /&gt;
* Ma i driver (o controller) USB potrebbero non essere stati compilati in maniera statica nel kernel, e senza i driver il kernel non si accorge neanche della presenza della pennina, come possiamo risolvere questo problema?&lt;br /&gt;
* Non solo, ma anche ammesso che il kernel abbia i driver compilati in maniera statica, questi devono avere il tempo di accorgersi che al PC è collegata una pennina USB, come si può dire al kernel di aspettare visto che i driver sono attivati in maniera parallela?&lt;br /&gt;
* Ancora, come facciamo a sapere su quale device si verrà a trovare la directory radice? Il driver USB collegherà la pennina al device sda o sdb, oppure ad un altro?&lt;br /&gt;
* E infine, la directory radice che abbiamo creato sulla pennina usa il file system ext3, il kernel per poter riconoscere e di conseguenza usare questo file system ha bisogno del driver, e se questo driver non è compilato in maniera statica?&lt;br /&gt;
&lt;br /&gt;
Per tutti questi problemi esiste una soluzione unica, l'initrd. L'initrd fondamentalmente non è altro che una mini distribuzione la cui directory radice viene montata in ram, più precisamente collegata al device ''/dev/ram0'', con un programma o uno script (che si deve chiamare '''init''' o '''linuxrc''') che viene avviato dal kernel (il quale deve essere compilato con il supporto all'initrd) subito dopo aver inizializzato i driver. Il kernel in pratica non si occupa più di montare la root directory e di lanciare il processo '''/sbin/init''', ma semplicemente lancia il comando (o script) '''init''' che è nell'initrd e delega a lui tutto il resto.&amp;lt;BR&amp;gt;&lt;br /&gt;
Questo semplice meccanismo ci permette in pratica di creare uno script per risolvere tutti i problemi sopra citati.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' Quando il kernel carica in memoria l'initrd e lancia il programma (o lo script) init, la root directory della nostra distribuzione non è ancora montata! Quindi la distribuzione non esiste, e con lei non esistono tutti i programmi usuali che uno pensa di usare nell'initrd. Se si vuole usare un programma, lo si deve copiare nell'ambiente dell'initrd e si devono copiare anche tutte quelle librerie condivise di cui il programma necessita.&lt;br /&gt;
&lt;br /&gt;
==Initrd come archivio cpio==&lt;br /&gt;
Uno dei modi più semplici per creare un initrd è quello di inserire tutto il necessario in una directory vuota (programmi che si voglio usare nell'initrd, librerie di cui necessitano questi programmi, eventuali moduli del kernel, etc...etc...) e poi di creare un archivio cpio, magari compresso con gzip, di questa directory. Il kernel sarà poi in grado di decomprimere (se era compresso) l'archivio e di estrarne il contenuto.&amp;lt;BR&amp;gt;&lt;br /&gt;
Creiamoci allora una directory vuota ed entriamoci dentro con:&lt;br /&gt;
 # mkdir /tmp/initrd&lt;br /&gt;
 # cd /tmp/initrd&lt;br /&gt;
&lt;br /&gt;
==Il pacchetto mkinitrd e la busybox==&lt;br /&gt;
Il pacchetto mkinitrd della Slackware (che si trova nella directory ''a/'') contiene lo script omonimo '''mkinitrd''', che generalmente viene usato da coloro che necessitano di un initrd e non vogliono (o non hanno le competenze adatte a) crearsene uno a mano.&amp;lt;BR&amp;gt;&lt;br /&gt;
Noi useremo il pacchetto, che quindi deve essere installato, non per lanciare l''''mkinitrd''' ma per prelevare il programma '''busybox''' che è al suo interno. Busybox è un programma che si può comportare in maniera diversa a seconda di come lo si invoca, se noi infatti creiamo un link simbolico chiamato mount a '''busybox''', allora questo si comporterà come '''mount'''. L'elenco di tutti i programmi che è in grado di simulare lo si può ottenere lanciando '''busybox''' senza parametri.&lt;br /&gt;
&lt;br /&gt;
Il pacchetto mkinitrd ha la '''busybox''' inserita all'interno di un archivio tar.gz il cui path completo è:&lt;br /&gt;
 ''/usr/share/mkinitrd/initrd-tree.tar.gz''&lt;br /&gt;
preleviamo la busybox con:&lt;br /&gt;
 # tar -C /tmp/initrd -zxf /usr/share/mkinitrd/initrd-tree.tar.gz './bin/busybox'&lt;br /&gt;
a questo punto la nostra directory ''/tmp/initrd'' avrà questa struttura:&lt;br /&gt;
 # tree /tmp/initrd&lt;br /&gt;
 /tmp/initrd&lt;br /&gt;
 `-- bin&lt;br /&gt;
     `-- busybox&lt;br /&gt;
&lt;br /&gt;
==Creiamo lo script init==&lt;br /&gt;
Ora dobbiamo creare lo script '''init''', ovvero lo script che verrà eseguito dal kernel dopo l'inizializzazione dei driver e che è incaricato di risolvere i problemi su citati, cioè:&lt;br /&gt;
* caricare eventualmente i moduli del kernel per i controller USB e per il file system ext3&lt;br /&gt;
* dare il tempo ai controller USB di rilevare la pennina e montare, dopo averla scovata, la root directory&lt;br /&gt;
* eseguire il vero processo init della distribuzione&lt;br /&gt;
&lt;br /&gt;
Prima di cimentarci nella risoluzione di questi problemi dobbiamo notare che '''init''', per come lo vogliamo utilizzare noi, è uno script, e in quanto tale ha bisogno di un interprete, la '''busybox''' può fare questo per noi visto che al suo interno ha anche una piccola shell. Andiamo nella directory ''/tmp/initrd/bin'' e creiamo un link simbolico a '''busybox''' in questo modo:&lt;br /&gt;
 # ln -s busybox ash&lt;br /&gt;
e quindi con un qualsiasi editor di testo creiamo il file ''/tmp/initrd/init'' e mettiamoci come prima riga:&lt;br /&gt;
 #!/bin/ash&lt;br /&gt;
&lt;br /&gt;
===Caricare i moduli del kernel necessari al rilevamento della periferica USB e del file system ext3===&lt;br /&gt;
Il kernel huge è compilato con il supporto sia alle periferiche USB, sia al file system ext3 in maniera statica, e quindi ci permette di superare in maniera trasparente questo problema.&amp;lt;BR&amp;gt;&lt;br /&gt;
Si fa notare che il fatto di avere il supporto compilato in maniera statica nel kernel è un fattore da non sottovalutare. Infatti l'ambiente dell'initrd dovrebbe essere il più generale possibile, se spettasse all'initrd (e quindi allo script '''init''') caricare qualche modulo del kernel, allora l'initrd non sarebbe più indipendente, ma al suo interno dovrebbe avere i moduli compilati per il kernel specifico che lo ha eseguito.&lt;br /&gt;
&lt;br /&gt;
===Dare il tempo ai controller USB di rilevare la pennina e montaggio della root directory===&lt;br /&gt;
Abbiamo installato sulla nostra pennina USB un file system del tipo ext3 che abbiamo anche etichettato con il nome di 'minislack'. Bene, grazie alla capacità del comando '''mount''' di utilizzare il nome di etichetta per identificare un file system, il problema può essere risolto semplicemente mettendo nello script '''init''' quanto segue:&lt;br /&gt;
 mount -n proc -t proc /proc&lt;br /&gt;
 while ! mount -n -r -L minislack /mnt 2&amp;gt; /dev/null;&lt;br /&gt;
  do&lt;br /&gt;
    sleep 1&lt;br /&gt;
  done&lt;br /&gt;
 umount -n /proc&lt;br /&gt;
Il &amp;quot;montaggio&amp;quot; del file system proc è necessario in quanto il comando '''mount''' fa uso di questo file system per scovare l'etichetta 'minislack'.&amp;lt;BR&amp;gt;&lt;br /&gt;
Il ciclo '''while''' con lo '''sleep''' non fa altro che dare il tempo necessario ai driver USB del kernel di rilevare la pennina.&lt;br /&gt;
Quindi la nostra root directory, o meglio il file system che noi abbiamo etichettato come 'minislack' sarà montato nella directory ''/mnt'' a prescindere dal device a cui il driver USB (e più precisamente il modulo che gestisce le periferiche di archiviazione di massa USB, l'usb_storage) lo ha collegato.&lt;br /&gt;
&lt;br /&gt;
Nelle sei righe di codice precedenti abbiamo:&lt;br /&gt;
* usato il comando mount&lt;br /&gt;
* caricato il file system proc nella directory /proc&lt;br /&gt;
* usato il device null per ridirigere lo standard error del comando mount&lt;br /&gt;
* usato il comando sleep per far attendere alla shell 1 secondo&lt;br /&gt;
* montato la root directory in /mnt&lt;br /&gt;
* utilizzato il comando umount&lt;br /&gt;
per quanto potevano sembrare innocenti, quelle sei righe implicano:&lt;br /&gt;
* che il kernel al momento dell'esecuzione di queste righe, abbia il supporto al procfs e al tipo di file system della root directory che montiamo su ''/mnt'' (nel nostro caso il kernel huge ce li ha entrambi in maniera statica)&lt;br /&gt;
* che esistano i programmi mount, umount e sleep&lt;br /&gt;
* che esistano il device ''/dev/null'' e quello al quale sarà collegata la pennina USB (è vero che mount può scovare il device grazie all'etichetta del suo file system, ma è altrettanto vero che poi '''mount''' dovrà montare questo device)&lt;br /&gt;
* che esistano le directory ''/proc'' e ''/mnt''&lt;br /&gt;
&lt;br /&gt;
La '''busybox''' può comportarsi come '''mount''' semplicemente facendo un link simbolico ad essa chiamato appunto ''mount'', il problema è che quello fornito dalla '''busybox''' non è in grado di scovare le etichette dei file system (non riconosce il flag -L). Abbiamo necessariamente bisogno del comando '''mount''' del pacchetto util-linux (dalla Slackware 12.1 e successive, il pacchetto si chiama util-linux-ng) contenuto&lt;br /&gt;
sempre nella directory della serie ''a/'' della Slackware.&amp;lt;BR&amp;gt;&lt;br /&gt;
Copiamo quindi il comando '''mount''' come segue:&lt;br /&gt;
 # cp -p /bin/mount /tmp/initrd/bin&lt;br /&gt;
ora però dobbiamo copiare anche le librerie condivise di cui necessita. Vediamo quali sono lanciando:&lt;br /&gt;
 # ldd /bin/mount&lt;br /&gt;
        linux-gate.so.1 =&amp;gt;  (0xffffe000)&lt;br /&gt;
        libblkid.so.1 =&amp;gt; /lib/libblkid.so.1 (0xb7f80000)&lt;br /&gt;
        libuuid.so.1 =&amp;gt; /lib/libuuid.so.1 (0xb7f7d000)&lt;br /&gt;
        libc.so.6 =&amp;gt; /lib/libc.so.6 (0xb7e4e000)&lt;br /&gt;
        /lib/ld-linux.so.2 (0x80000000)&lt;br /&gt;
&lt;br /&gt;
Creiamoci la directory ''lib'' all'interno del nostro initrd con:&lt;br /&gt;
 # mkdir /tmp/initrd/lib&lt;br /&gt;
e copiamoci dentro le librerie condivise con:&lt;br /&gt;
 # cp -p /lib/libblkid.so.1 /lib/libuuid.so.1 /lib/libc.so.6 /lib/ld-linux.so.2 /tmp/initrd/lib&lt;br /&gt;
Si noti che i file originali probabilmente sono link simbolici, ma il comando '''cp''' copierà il file al quale puntano e non il link.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** NOTA **&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A partire dalla slackware 13.1 il comando '''mount''' necessita di altre librerie:&lt;br /&gt;
 # ldd /bin/mount&lt;br /&gt;
        linux-gate.so.1 =&amp;gt;  (0xffffe000)&lt;br /&gt;
        /usr/lib/libv4l/v4l1compat.so (0xb7838000)&lt;br /&gt;
        /usr/lib/libv4l/v4l2convert.so (0xb7836000)&lt;br /&gt;
        libblkid.so.1 =&amp;gt; /lib/libblkid.so.1 (0xb77eb000)&lt;br /&gt;
        libuuid.so.1 =&amp;gt; /lib/libuuid.so.1 (0xb77e7000)&lt;br /&gt;
        libc.so.6 =&amp;gt; /lib/libc.so.6 (0xb7683000)&lt;br /&gt;
        libv4l1.so.0 =&amp;gt; /usr/lib/libv4l1.so.0 (0xb767e000)&lt;br /&gt;
        libv4l2.so.0 =&amp;gt; /usr/lib/libv4l2.so.0 (0xb7674000)&lt;br /&gt;
        /lib/ld-linux.so.2 (0xb783b000)&lt;br /&gt;
        libpthread.so.0 =&amp;gt; /lib/libpthread.so.0 (0xb765b000)&lt;br /&gt;
        libv4lconvert.so.0 =&amp;gt; /usr/lib/libv4lconvert.so.0 (0xb75ef000)&lt;br /&gt;
        librt.so.1 =&amp;gt; /lib/librt.so.1 (0xb75e5000)&lt;br /&gt;
        libm.so.6 =&amp;gt; /lib/libm.so.6 (0xb75bf000)&lt;br /&gt;
&lt;br /&gt;
Quindi sarà necessario copiare anche le nuove librerie:&lt;br /&gt;
 # cp -p /usr/lib/libv4l/v4l1compat.so /usr/lib/libv4l/v4l2convert.so /usr/lib/libv4l1.so.0 /usr/lib/libv4l2.so.0 /tmp/initrd/lib&lt;br /&gt;
 # cp -p /lib/libpthread.so.0 /usr/lib/libv4lconvert.so.0 /lib/librt.so.1 /lib/libm.so.6 /tmp/initrd/lib&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** FINE NOTA **&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per il comando '''umount''' e '''sleep''' invece possiamo tranquillamente usare quelli della '''busybox''', quindi andiamo nella directory ''/tmp/initrd/bin'' e facciamo:&lt;br /&gt;
 # ln -s busybox umount&lt;br /&gt;
 # ln -s busybox sleep&lt;br /&gt;
&lt;br /&gt;
Il programma '''mount''' l'abbiamo utilizzato passandogli anche il flag -n, dicendogli quindi di non scrivere quello che sarà il file ''/etc/mtab'', benché esso non lo scriva, vuole comunque leggerlo per controllare se il file system che si sta tentando di montare non sia già stato montato. Dobbiamo quindi creare il file vuoto ''/tmp/initrd/etc/mtab'':&lt;br /&gt;
 # mkdir /tmp/initrd/etc&lt;br /&gt;
 # touch /tmp/initrd/etc/mtab&lt;br /&gt;
&lt;br /&gt;
Proseguiamo quindi con la creazione del device null e dei possibili device a cui sarà collegata la pennina USB. In generale la pennina USB viene vista come una periferica SCSI disk e quindi sarà attaccata ad un device del tipo ''/dev/sdXY'' dove X varia a seconda di quante periferiche di archiviazione rilevate come SCSI (ad esempio i dischi sata) sono state trovate prima della pennina, mentre Y rappresenta una qualsiasi partizione.&amp;lt;BR&amp;gt;&lt;br /&gt;
Se, ad esempio, un PC non ha nessun disco rilevato come SCSI e ci si inserisce una pennina con tre partizioni, queste tre partizioni saranno collegate rispettivamente ai device: sda1, sda2  e sda3.&lt;br /&gt;
&lt;br /&gt;
Y allora la possiamo ricavare facilmente, infatti all'inizio abbiamo supposto che la nostra pennina avesse solo una partizione e che essa (la partizione) venisse attaccata ad device ''/dev/sda1'', allora Y=1 e la pennina sarà sempre collegata ad un device dal nome ''/dev/sdX1''.&amp;lt;BR&amp;gt;&lt;br /&gt;
Quindi creiamoci la directory in cui inserire i device:&lt;br /&gt;
 # mkdir /tmp/initrd/dev&lt;br /&gt;
e copiamoci subito dentro il device ''/dev/null'' con:&lt;br /&gt;
 # cp -R /dev/null /tmp/initrd/dev&lt;br /&gt;
&lt;br /&gt;
Al momento attuale gli SCSI disk sono gestiti dal device driver con major number 8. Questo device driver è in grado di gestire sino a 15 partizioni per ogni disco, questo vuol dire che due device con X consecutive e con uguale Y hanno una distanza (in termini di minor number) pari a 16. Ad esempio il device sda avrà un minor number uguale a 0 laddove il device sdb avrà invece minor number uguale a 16, e così via.&lt;br /&gt;
&lt;br /&gt;
Possiamo allora creare i device con:&lt;br /&gt;
 # mknod /tmp/initrd/dev/sda1 b 8 1&lt;br /&gt;
 # mknod /tmp/initrd/dev/sdb1 b 8 17&lt;br /&gt;
 # mknod /tmp/initrd/dev/sdc1 b 8 33&lt;br /&gt;
 # mknod /tmp/initrd/dev/sdd1 b 8 49&lt;br /&gt;
&lt;br /&gt;
Ora per rendere tutto coerente con quanto scritto sempre nelle sei innocenti righe di codice inserite nel file ''init'', non ci resta che creare due directory vuote nelle quali verranno montati i file system proc e quello contenente la nostra directory radice.&lt;br /&gt;
 # mkdir /tmp/initrd/proc /tmp/initrd/mnt&lt;br /&gt;
&lt;br /&gt;
===Eseguire il vero processo init===&lt;br /&gt;
L'ultimo passo che deve eseguire lo script '''init''' dell'initrd è quello di lanciare il vero processo '''init''' situato nella directory radice della distribuzione e poi liberare la memoria allocata.&amp;lt;BR&amp;gt;&lt;br /&gt;
I passi teorici da eseguire sono:&lt;br /&gt;
* spostare la directory radice dell'initrd sulla directory radice della distribuzione&lt;br /&gt;
* smontare l'initrd&lt;br /&gt;
* deallocare la memoria allocata dal kernel per l'initrd&lt;br /&gt;
* eseguire il vero processo '''init'''&lt;br /&gt;
Che poi praticamente, dato che per ognuno dei passi precedenti esiste uno specifico programma che lo esegue, diventa:&lt;br /&gt;
* cd /mnt; mkdir initrd; pivot_root . initrd&lt;br /&gt;
* umount /initrd&lt;br /&gt;
* blockdev --flushbufs /dev/ram0&lt;br /&gt;
* exec chroot . /sbin/init $@&lt;br /&gt;
&lt;br /&gt;
Il comando '''pivot_root''' ultimamente sembra non comportarsi bene nell'ambiente dell'initrd. Fortunatamente la '''busybox''' ha al suo interno un programma che dovrebbe eseguire tutti i passi precedenti, il comando si chiama '''switch_root ''' e come al solito quindi basta fare un link simbolico a '''busybox''' entrando in ''/tmp/initrd/bin''&lt;br /&gt;
ed eseguendo:&lt;br /&gt;
 # ln -s busybox switch_root&lt;br /&gt;
&lt;br /&gt;
Ora non resta che inserire nello script init quanto segue:&lt;br /&gt;
 exec switch_root /mnt /sbin/init $@&lt;br /&gt;
&lt;br /&gt;
'''NOTA:''' si noti il passaggio a '''/sbin/init''' dei parametri $@, questi sono i parametri che il kernel non ha riconosciuto nella sua riga di comando (quella passatagli dal loader), e che quindi passa al comando che esegue.&lt;br /&gt;
&lt;br /&gt;
===Lo script init nella sua interezza===&lt;br /&gt;
Riassumendo, lo script ''/tmp/initrd/init'' è questo:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
#!/bin/ash&lt;br /&gt;
# Aspetto finché i driver USB non rilevano la pennina e monto la vera directory radice&lt;br /&gt;
mount -n proc /proc -t proc&lt;br /&gt;
while ! mount -n -r -L minislack /mnt 2&amp;gt; /dev/null;&lt;br /&gt;
 do&lt;br /&gt;
    sleep 1;&lt;br /&gt;
 done&lt;br /&gt;
umount /proc&lt;br /&gt;
&lt;br /&gt;
# Avvio il vero /sbin/init&lt;br /&gt;
exec switch_root /mnt /sbin/init $@&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
questo script deve essere eseguito dal kernel è quindi dobbiamo assicurarci che abbia i diritti di esecuzione:&lt;br /&gt;
 # chmod u+x /tmp/initrd/init&lt;br /&gt;
&lt;br /&gt;
==Creazione dell'archivio cpio compresso initrd.gz==&lt;br /&gt;
La directory ''/tmp/initrd'' ora dovrebbe essere così strutturata:&lt;br /&gt;
 # tree /tmp/initrd&lt;br /&gt;
   /tmp/initrd/&lt;br /&gt;
   |-- bin&lt;br /&gt;
   |   |-- ash -&amp;gt; busybox&lt;br /&gt;
   |   |-- busybox&lt;br /&gt;
   |   |-- mount&lt;br /&gt;
   |   |-- sleep -&amp;gt; busybox&lt;br /&gt;
   |   |-- switch_root -&amp;gt; busybox&lt;br /&gt;
   |   `-- umount -&amp;gt; busybox&lt;br /&gt;
   |-- dev&lt;br /&gt;
   |   |-- null&lt;br /&gt;
   |   |-- sda1&lt;br /&gt;
   |   |-- sdb1&lt;br /&gt;
   |   |-- sdc1&lt;br /&gt;
   |   `-- sdd1&lt;br /&gt;
   |-- etc&lt;br /&gt;
   |   `-- mtab&lt;br /&gt;
   |-- init&lt;br /&gt;
   |-- lib&lt;br /&gt;
   |   |-- ld-linux.so.2&lt;br /&gt;
   |   |-- libblkid.so.1&lt;br /&gt;
   |   |-- libc.so.6&lt;br /&gt;
   |   `-- libuuid.so.1&lt;br /&gt;
   |-- mnt&lt;br /&gt;
   `-- proc&lt;br /&gt;
 &lt;br /&gt;
 6 directories, 17 files&lt;br /&gt;
Non resta altro da fare che creare un archivio cpio di questa directory, comprimerla con il comando '''gzip''' e renderla disponibile al loader di linux.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Partendo dal solito presupposto che la pennina sia collegata dal kernel al device sda1, la si monti ad esempio nella directory ''/mnt/memory'' con:&lt;br /&gt;
 # mount /dev/sda1 /mnt/memory&lt;br /&gt;
si crei poi una directory in cui inserire l'archivio cpio compresso che è l'initrd con:&lt;br /&gt;
 # mkdir /mnt/memory/boot&lt;br /&gt;
ed infine si crei l'archivio cpio compresso (il tanto sudato initrd):&lt;br /&gt;
 # cd /tmp/initrd&lt;br /&gt;
 # find . | cpio -o -H newc | gzip -9 -n &amp;gt; /mnt/memory/boot/initrd.gz&lt;br /&gt;
&lt;br /&gt;
Quando, più in là nel wiki, si configurerà il loader di linux, si vedrà come utilizzare questo file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Fase 2: installazione della distribuzione sulla pennina=&lt;br /&gt;
Ora ci si occuperà di installare e configurare una serie minimale ma importantissima di pacchetti Slackware.&amp;lt;BR&amp;gt;&lt;br /&gt;
Ovviamente non ci sono limitazioni, se non quelle fisiche della pennina, al numero di pacchetti che il lettore può installare, ma per lo scopo di questo wiki è sufficiente installare i pacchetti essenziali a far partire la distribuzione.&amp;lt;BR&amp;gt;&lt;br /&gt;
I pacchetti che verranno installati si trovano tutti nella directory ''a/'' della Slackware, quindi, supponendo che il CD o DVD della Slackware sia stato montato nella directory ''/mnt/dvd/'', per prima cosa ci si deve spostare dentro questa directory con:&lt;br /&gt;
 # cd /mnt/dvd/slackware/a&lt;br /&gt;
&lt;br /&gt;
==Un piccolo accorgimento==&lt;br /&gt;
I pacchetti verranno installati sfruttando l'opzione -root dello script '''installpkg''', alcuni dei pacchetti hanno uno script aggiuntivo, il famoso '''doinst.sh''', che viene avviato dopo l'installazione del pacchetto. Gli script '''doinst.sh''' sono &amp;quot;chrootati&amp;quot; sulla pennina e devono poter eseguire comandi, quali ad esempio '''cd''', '''rm''' o&lt;br /&gt;
'''ln'''. Questo implica che:&lt;br /&gt;
* il programma che il '''doinst.sh''' vuole eseguire deve essere presente sulla pennina&lt;br /&gt;
* si abbiano i diritti di esecuzione sulla pennina&lt;br /&gt;
&lt;br /&gt;
La prima implicazione è risolta installando i pacchetti in un ordine ben preciso, facendo in modo di installare prima i pacchetti che contengono i programmi usuali usati dai '''doinst.sh'''.&lt;br /&gt;
&lt;br /&gt;
La seconda implicazione viene verificata se si esegue un piccolo accorgimento, ovvero smontare la pennina e rimontarla con l'opzione 'exec' del '''mount''', in questo modo:&lt;br /&gt;
 # umount /mnt/memory&lt;br /&gt;
 # mount -o exec -rw -t ext3 /dev/sda1 /mnt/memory&lt;br /&gt;
&lt;br /&gt;
==I pacchetti da installare==&lt;br /&gt;
La domanda è semplice, come si determinano i pacchetti che si devono installare?&amp;lt;BR&amp;gt;&lt;br /&gt;
La risposta non è altrettanto semplice, sicuramente ci sarà il programma ''/sbin/init'' per avere un collegamento all'initrd creato nella 'Fase 1', ma poi? Poi bisogna seguire l''''init''' e capire cosa esegue, in modo da fargli trovare i programmi che tenta di eseguire. Se è necessario, bisogna anche seguire i programmi che '''init''' esegue per capire cosa fanno e se hanno bisogno di altri programmi o file di configurazione.&amp;lt;BR&amp;gt;&lt;br /&gt;
In generale quindi, il primo file da analizzare è ''/etc/inittab'', file di configurazione di '''init''', ci si accorge quindi che '''init''' esegue una serie di script di inizializzazione, e quindi bisogna seguire questi script per capire cosa fanno.&lt;br /&gt;
&lt;br /&gt;
Per lo scopo di questo wiki il lavoro è stato già fatto dall'autore e quindi verranno segnalati solo i passi fondamentali da fare affinché la distribuzione possa partire.&lt;br /&gt;
&lt;br /&gt;
Qui si riporta l'elenco dei pacchetti che devono essere installati nell'ordine di seguito riportato (l'ordine è importante solo per i primi tre pacchetti). Accanto al nome del pacchetto vi è una piccola descrizione di cosa contiene:&lt;br /&gt;
 a/aaa_base              ---&amp;gt;    Crea tutte le directory base&lt;br /&gt;
 a/coreutils             ---&amp;gt;    Programmi utilizzati dagli script '''doisnt.sh'''&lt;br /&gt;
 a/glibc-solibs          ---&amp;gt;    La libreria glibc, usata da molti eseguibili (tra cui '''init''')&lt;br /&gt;
 a/glibc-zoneinfo        ---&amp;gt;    Contiene lo script '''timeconfig''' che verrà usato in seguito&lt;br /&gt;
 a/dialog                ---&amp;gt;    Usato per visualizzare i box dei dialoghi da altri programmi&lt;br /&gt;
                                 (tra cui '''timeconfig''')&lt;br /&gt;
 a/bash                  ---&amp;gt;    La shell&lt;br /&gt;
 a/etc                   ---&amp;gt;    File di configurazione dei programmi utilizzati&lt;br /&gt;
 a/util-linux            ---&amp;gt;    Contiene, tra l'altro, il programma '''mount'''. Dalla Slackware 12.1 in poi,&lt;br /&gt;
                                 il pacchetto si chiama util-linux-ng&lt;br /&gt;
 a/sysvinit              ---&amp;gt;    Contiene il programma '''init'''&lt;br /&gt;
 a/sysvinit-scripts      ---&amp;gt;    I famosi script '''rc.d''' della Slackware, invocati da '''init'''&lt;br /&gt;
 a/module-init-tools     ---&amp;gt;    '''modprobe''' e altri programmi per gestire i moduli&lt;br /&gt;
 a/e2fsprogs             ---&amp;gt;    Comandi per i filesystem ext2/3&lt;br /&gt;
 a/devs                  ---&amp;gt;    I device, senza di questi....&lt;br /&gt;
 a/findutils             ---&amp;gt;    '''find''', usato dagli script di inizializzazione&lt;br /&gt;
 a/aaa_elflibs           ---&amp;gt;    Libreria libtermcap per i terminali&lt;br /&gt;
 a/aaa_terminfo          ---&amp;gt;    File di informazione sui terminali usati dalla libreria libtermcap&lt;br /&gt;
 a/shadow                ---&amp;gt;    Contiene, tra l'altro, i programmi '''login''' e '''sulogin'''&lt;br /&gt;
 a/grep                  ---&amp;gt;    '''grep''', usato dagli script di inizializzazione&lt;br /&gt;
 a/procps                ---&amp;gt;    '''ps''', usato dagli script di inizializzazione&lt;br /&gt;
 a/kernel-huge           ---&amp;gt;    Il kernel...&lt;br /&gt;
 a/kernel-modules        ---&amp;gt;    ... i suoi moduli&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** NOTA **&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A partire da slackware 13.1 è necessario anche il seguente pacchetto&lt;br /&gt;
 l/v4l-utils             ---&amp;gt;    Librerie necessarie ai programmi di sistema (ad es: '''mount''')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** FINE NOTA **&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per installare questi pacchetti si deve eseguire '''installpkg''' con l'opzione -root ''/mnt/memory'', ad esempio:&lt;br /&gt;
 # installpkg -root /mnt/memory aaa_base-12.0.0-noarch-1.tgz&lt;br /&gt;
&lt;br /&gt;
==Una facile configurazione==&lt;br /&gt;
Come per la domanda 'Quali pacchetti si devono installare?', così la risposta alla domanda 'Cosa si deve configurare?' dipende sempre dall'amministratore del sistema e da cosa esso intenda far eseguire all'avvio della macchina.&amp;lt;BR&amp;gt;&lt;br /&gt;
Nel wiki si intende lasciare intatti gli script di inizializzazione fatti da Patrick J. Volkerding, creatore della Slackware, e quindi si procederà nella minima configurazione necessaria proprio a questi script di inizializzazione.&lt;br /&gt;
&lt;br /&gt;
===/etc/fstab===&lt;br /&gt;
Si comincia con il creare il file ''/etc/fstab'' come segue:&lt;br /&gt;
 # echo -e &amp;quot;LABEL=minislack\t\t/\text3\trw\t1 1&amp;quot; &amp;gt; /mnt/memory/etc/fstab&lt;br /&gt;
&lt;br /&gt;
===/etc/hardwareclock===&lt;br /&gt;
Un altro file richiesto dagli script di inizializzazione della Slackware è il file ''/etc/hardwareclock'' che indica come è impostato l'orologio hardware. In effetti questo file non contiene granché, ma viene consigliato di editarlo/crearlo tramite lo script '''/usr/sbin/timeconfig''', quindi bisogna eseguire lo script spostandogli la directory root, in questo modo:&lt;br /&gt;
 # cd /mnt/memory&lt;br /&gt;
 # chroot . usr/sbin/timeconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Fase 3: impostare il boot loader e testare il tutto=&lt;br /&gt;
L'ultima cosa da fare è quella di rendere la pennina &amp;quot;bootabile&amp;quot;, ovvero di inserire nel suo primo settore, il famoso settore di boot. Per fare questo basta creare un file ''lilo.conf'' ad-hoc, e poi lanciare LILO passandogli il file appena creato.&amp;lt;BR&amp;gt;&lt;br /&gt;
Si crei quindi il file, ad esempio ''/mnt/memory/etc/lilo.conf'', direttamente sulla pennina in modo che rimanga con essa, con all'interno quanto segue:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
boot = /dev/sda&lt;br /&gt;
backup = &amp;quot;&amp;quot;&lt;br /&gt;
map=/mnt/memory/boot/map&lt;br /&gt;
&lt;br /&gt;
compact&lt;br /&gt;
lba32&lt;br /&gt;
large-memory&lt;br /&gt;
&lt;br /&gt;
image = /mnt/memory/boot/vmlinuz&lt;br /&gt;
  initrd = /mnt/memory/boot/initrd.gz&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si noti l'opzione 'initrd', con la quale si indica al kernel che deve usare l'initrd creato nella 'Fase 1'. Ora non resta quindi che lanciare LILO come segue:&lt;br /&gt;
 # lilo -C /mnt/memory/etc/lilo.conf&lt;br /&gt;
e riavviare il PC facendogli fare il boot dalla pennina USB.&amp;lt;BR&amp;gt;&lt;br /&gt;
Con la configurazione minimale che si è fatta nella 'Fase 2', basta, al momento del login, inserire l'username di 'root' per avere una shell con tutti i privilegi del super-utente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Esempi d'uso=&lt;br /&gt;
Una volta che si ha una pennina USB &amp;quot;bootabile&amp;quot;, con all'interno un intera distribuzione, serve solo la fantasia per farci quello che ci pare.&amp;lt;BR&amp;gt;&lt;br /&gt;
Esempi d'uso potrebbero essere quello di crearsi una distribuzione adatta alla lettura di contenuti multimediali, in questo modo basta trovare un PC per vedere un DVD o ascoltare della musica, senza preoccuparsi che il PC sia dotato di tutti i programmi o codec adatti.&lt;br /&gt;
&lt;br /&gt;
Un altro esempio è che si ha sempre a portata di mano un &amp;quot;disco di ripristino&amp;quot;. Se la distribuzione installata sul PC non dovesse partire perché ci si è divertiti un po' troppo con i file di configurazione, si può sempre fare il boot del PC con la pennina e provvedere a rimediare agli eventuali danni che si è combinati.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Appendice=&lt;br /&gt;
==A: altri pacchetti utili==&lt;br /&gt;
Se si vuole rendere la distribuzione che si è installata sulla pennina un po' più indipendente, bisogna essere in grado di manipolare i pacchetti della Slackware, non solo, ma sarebbe anche carino poter utilizzare tutta una serie di comandi utili ad un sistemista. Quindi, oltre all'insieme minimo di pacchetti menzionati nella sezione&lt;br /&gt;
'[[#I_pacchetti_da_installare|I pacchetti da installare]]', qui di seguito c'è un elenco dei pacchetti che rendono la distribuzione sulla pennina, più user-friendly:&lt;br /&gt;
 a/pkgtools           ---&amp;gt;    Per gestire i pacchetti della Slackware&lt;br /&gt;
 a/bin                ---&amp;gt;    Usato dagli script di pkgtools&lt;br /&gt;
 a/sed                ---&amp;gt;    Usato dagli script di pkgtools&lt;br /&gt;
 a/gzip               ---&amp;gt;    Usato dagli script di pkgtools&lt;br /&gt;
 a/tar                ---&amp;gt;    Usato dagli script di pkgtools&lt;br /&gt;
 a/xz                 ---&amp;gt;    Usato dagli script di pkgtools per il nuovo formato '.txz' della Slackware 13&lt;br /&gt;
&lt;br /&gt;
 ap/man               ---&amp;gt;    Il comando man più tornare molto utile&lt;br /&gt;
 ap/man-pages         ---&amp;gt;    Le pagine di manuale di molti comandi&lt;br /&gt;
 ap/groff             ---&amp;gt;    Il formattatore usato da man&lt;br /&gt;
 a/cxxlibs            ---&amp;gt;    Libreria c++ standard usata da groff&lt;br /&gt;
 a/less               ---&amp;gt;    Il comando che man usa per visualizzare le pagine di manuale&lt;br /&gt;
&lt;br /&gt;
 a/udev               ---&amp;gt;    Utile se si vogliono usare driver che necessitano di firmware&lt;br /&gt;
&lt;br /&gt;
 ap/nano              ---&amp;gt;    Il famoso e semplice editor di testo&lt;br /&gt;
&lt;br /&gt;
 a/bzip2              ---&amp;gt;    Sempre più spesso si trovano archivi bzip&lt;br /&gt;
&lt;br /&gt;
 a/reiserfsprogs      ---&amp;gt;    Per gestire il famoso file system reiser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ringraziamenti=&lt;br /&gt;
Ringrazio ZeroUno per i suoi consigli e le sue prove.&lt;br /&gt;
&lt;br /&gt;
Note per slackware 13.1 a cura di [[Utente:Ansa89|Ansa89]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi cosa scrivetemi pure:&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Utente:targzeta|targzeta]]&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	<entry>
		<id>http://www.slacky.eu/slacky/Analyze_SlackPkg.sh</id>
		<title>Analyze SlackPkg.sh</title>
		<link rel="alternate" type="text/html" href="http://www.slacky.eu/slacky/Analyze_SlackPkg.sh"/>
				<updated>2012-10-02T21:53:54Z</updated>
		
		<summary type="html">&lt;p&gt;Targzeta: Cambiato nick&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Per www.slacky.eu --&amp;gt;&lt;br /&gt;
[[category:Script]]&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Questo script visualizza alcune informazioni interessanti riguardanti i pacchetti Slackware installati e pu&amp;amp;ograve; essere usato per mantenere aggiornata una current. Lo script deve essere eseguito in una directory contenente il file FILE_LIST fornito dal CD/DVD.&lt;br /&gt;
=Cosa fa e come si usa=&lt;br /&gt;
==Senza opzioni==&lt;br /&gt;
Lo script, per ogni pacchetti installato va a controllare se &amp;amp;egrave; nominato nel file FILE_LIST controllandone la versione, dove per versione si intende sia la versione del software che la marca di compilazione. Se le due versioni differiscono allora lo script stampa a video il percorso dove poter trovare il pacchetto con la versione differente. Ad esempio sulla mia macchina:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; analyze_SlackPkg.sh&lt;br /&gt;
./a/aaa_elflibs-13.013-x86_64-5.txz&lt;br /&gt;
./l/cairo-1.8.8-x86_64-3.txz&lt;br /&gt;
./n/stunnel-4.33-x86_64-1.txz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
questo vuol dire che nella mia Slackware sono installati i tre pacchetti elencati ma con versioni differenti, infatti ad esempio:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; ls /var/log/packages/stunnel-*&lt;br /&gt;
/var/log/packages/stunnel-4.17-x86_64-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Quindi se si ha a disposizione un repository locale della current si pu&amp;amp;ograve; aggiornare il PC semplicemente eseguendo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for package in $(analyze_SlackPkg.sh)&lt;br /&gt;
  do&lt;br /&gt;
    upgradepkg $package&lt;br /&gt;
  done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Le opzioni==&lt;br /&gt;
===-h===&lt;br /&gt;
Mostra l'help dello script.&lt;br /&gt;
===-n===&lt;br /&gt;
Stampa l'elenco dei pacchetti nominati nel FILE_LIST, ma che non sono stati installati.&lt;br /&gt;
===-m===&lt;br /&gt;
Stampa l'elenco dei pacchetti che non sono stati trovati nel file FILE_LIST o che sono stati filtrati dal [[#Il file di filtraggio|file di filtro]]. Questi pacchetti generalmente sono i pacchetti di terze parti (ad esempio quelli di Slacky.eu) ed i pacchetti che sono stati rimossi dalla Slackware.&lt;br /&gt;
===-s===&lt;br /&gt;
Stampa l'elenco dei pacchetti che hanno la stessa versione di quelli trovati nel file FILE_LIST.&lt;br /&gt;
===-v===&lt;br /&gt;
A volte &amp;amp;egrave; utile sapere la versione attuale dei pacchetti installati, questa opzione oltre a visualizzare il percorso del pacchetto con la versione diversa, stampa anche la versione attualmente installata.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt;analyze_SlackPkg.sh -v&lt;br /&gt;
./a/aaa_elflibs-13.013-x86_64-5.txz the current version is aaa_elflibs-13.013-x86_64-4&lt;br /&gt;
./l/cairo-1.8.8-x86_64-3.txz the current version is cairo-1.8.10-x86_64-1&lt;br /&gt;
./n/stunnel-4.33-x86_64-1.txz the current version is stunnel-4.17-x86_64-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Il file di filtraggio=&lt;br /&gt;
Pu&amp;amp;ograve; capitare che di alcuni software si voglia seguire una versione current e non quella fornita dalla Slackware, usando il ciclo for descritto precedentemente per aggiornare il PC evidentemente questi pacchetti risulteranno con una versione differente e saranno quindi aggiornati. Per evitare questo comportamento basta creare un file nella propria home chiamato ''.analyze_SlackPkg'' e inserirci al proprio interno il nome del software da saltare e quest'ultimo non sar&amp;amp;agrave; stampato in output. Ad esempio se inserisco nel mio file il software '''cairo''' e poi rieseguo lo script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; echo 'cairo' &amp;gt;&amp;gt; ~/.analyze_SlackPkg&lt;br /&gt;
&lt;br /&gt;
$&amp;gt; analyze_SlackPkg.sh&lt;br /&gt;
./a/aaa_elflibs-13.013-x86_64-5.txz&lt;br /&gt;
./n/stunnel-4.33-x86_64-1.txz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
si nota che rispetto a prima, '''cairo''' non viene visualizzato.&lt;br /&gt;
=Lo script=&lt;br /&gt;
Dulcis in fundo, lo script potete trovarlo [http://www.slacky.eu/~targzeta/script/analyze_SlackPkg.sh qui].&lt;br /&gt;
&lt;br /&gt;
Autore (data dell'ultimo aggiornamento):&lt;br /&gt;
[[Utente:targzeta|targzeta]] 07:38, 28 ott 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Targzeta</name></author>	</entry>

	</feed>