Linux TIPS
I suggerimenti sono stati presi da riviste di informatica, da newsletters o da siti web
perciò ogni diritto rimane al legittimo proprietario.

 

http://www.openskills.info/view/search-engine.php?textsearch=&cerca=tutte&IDboxtype=all&LANGUAGE=ita&submit=Cerca+su+OpenSkills

GPL: cosa si può fare e cosa no groupadd groupdel
groupmod gzip gzip-c
htdigest (creazione e management correlazione password e utente per autenticazione Apache) htpasswd (creare e gestire i file per l'autenticazione utente Basic di Apache) Il file system journalist su Linux
I permessi sui files Unix ifconfig (configurare l'indirizzo di un'interfaccia di rete) Il login su un sistema Unix/Linux
Il protocollo DHCP Il protocollo IP Il protocollo TCP
Il protocollo UDP Il sistema di stampa CUPS Impostare l'homepage di default su Apache
Installare Apache via RPM Installare il joystick su Linux Installare Linux: informazioni da conoscere
Installare NFS su Linux Installazione di MySQL Installazione di MySQL in Windows
Installazione di PHP tramite RPM Installazione di Samba Installazione di Sendmail
Installazione e compilazione di PHP Installazione di PHP tramite rpm Installazione e configurazione di Tomcat
Installazione OpenSSL Installazione Squid tramite RPM Installazione Webmin



GPL: Cosa si può fare e cosa no
Molte misconcezioni, confusioni e luoghi comuni a volte sbagliati circondano la GPL e la sua interpretazione.
Cerchiamo di mostrare, con esempi pratici, cosa la GPL permette di fare e cosa non permette, elencando casi comuni per sviluppatori, web designer, produttori e utenti normali.
Notare che alcune sfumature variano a seconda delle licenze che in genere si applicano all'Open Source, la GPL, in genere è la più "estrema" e la più diffusa, altre introducono limitazioni (ad esempio se si usa MySQL in un proprio prodotto software commerciale, vanno riconosciute agli autori delle royalty) o variazioni sul tema. 
COSA SI PUO' FARE
- Installare, copiare, distribuire, vendere tutto il software GPL che si vuole tutte le volte che si vuole.
- Prendere il codice di un prodotto GPL, adattarlo, modificarlo, utilizzarlo per fare un proprio prodotto e rilasciare il proprio prodotto derivato sotto GPL (quindi mantenendo anche i riferimenti e i diritti degli autori originari).
- Produrre software proprietario che giri su Linux senza doverlo rilasciare sotto GPL. Questo codice può eseguire e fruire delle normali chiamate di sistema (ovviamente) e può utilizzare librerie di terzi se queste sono rilasciate con licenza LGPL (una versione più "leggera" della GPL che permette, in particolare, l'uso di librerie libere all'interno di codice proprietario).
- Realizzare siti Web in PHP, PERL, HTML o in qualsiasi linguaggio si vuole senza doverli rilasciare sotto GPL (ma senza aver utilizzato librerie, parti di codice e funzioni di altri).
- Si può realizzare e vendere software mantenendo una licenza GPL ad un cliente, mettergli a disposizione i sorgenti ma non renderli gratuitamente scaricabili da tutto il mondo (ma il cliente o chiunque ne entra in possesso può fare di questo software tutto quello che la GPL permette). In questo caso la distribuzione è limitata al proprio cliente e comunque richiede la messa a disposizione dei sorgenti e dei diritti e libertà della GPL.
- Si può realizzare un sito web tenendone riservato il codice anche se si incorpora, tenendone ben separate le parti di codice, un progetto GPL di terzi (esempio un forum o una chat: ma se di questi viene modificato o adattato il codice, il proprio codice derivato, relativamente e limitatamente a questi progetti, è soggetto ai termini della GPL).
- Si può realizzare software proprietario associato a software GPL, avendo accortezza di tenere ben distinte le parti proprietarie dalle parti, derivate da codice GPL, che si devono distribuire secondo le logiche della GPL.
- Configurare, installare e vendere soluzioni informatiche basate su Linux (server, firewall ecc)
COSA NON SI PUO' FARE
- Prendere del codice GPL, incorporarlo o modificarlo in un proprio prodotto e rilasciare questo con licenza proprietaria (di fatto sarebbe come rubare il lavoro di altri senza farlo ritornare alla comunità).
- Prendere del codice GPL, incorporarlo in un proprio prodotto GPL e rimuovere le note di copyright degli autori originari.
- Prendere del codice proprietario e rilasciarlo in un prodotto GPL (la comunità OpenSource rispetta i diritti d'autore di terzi). 

groupadd
Crea un nuovo gruppo 
groupadd [-g gid [-o]] [-r] [-f] group
-g Valore numerico del group ID
-r Identifica la creazione di un gruppo di sistema ovvero con GID inferiore a 499 

groupdel
Permette di cancellare un gruppo.
Ricordati che un gruppo primario di un account valido non può essere cancellato. 
groupdel group 

groupmod
Comando che ti permette di modificare le caratteristiche di un gruppo, creato precedentemente. 
groupmod [-g gid [-o]] [-n group_name ] group
-g Identifica l'UID del gruppo
-o Flag che assicura l'uso di un UID non univoco
-n group_name Indica il nuovo nome del gruppo 

gzip
Comando che riduce la dimensione dei file usando la codifica di Lempel-Ziv (lo stesso algoritmo di zip e PKZIP). Quando possibile, ogni file rimpiazzato da uno con l'estensione .gz, mantenendo le stesse proprietà, date d'accesso e di modifica. Se il nome del file compresso è troppo lungo per il file system, gzip lo tronchera'. 
gzip [opzioni] file
-c --stdout --to-stdout Scrive l'uscita nello standard output; mantiene il file originale intatto. 
-d --decompress --uncompress Decomprime.
-f --force Forza la compressione o la decompressione anche se il file ha link multipli o corrisponde a un file che già esiste, o se i dati compressi sono letti da (o scritti in) un terminale.
-l --list Per ogni file compresso, elenca dimensione del file compresso, dimensione del file decompresso, rapporto di compressione (0.0% se sconosciuto), nome del file decompresso.
-N --name Quando comprime, salva sempre il nome di file e la time stamp originali; il comportamento di default. Quando decomprime, ripristina il nome di file e la time stamp se sono presenti.
-r --recursive Attraversa ricorsivamente la struttura della directory.
-S .suf --suffix .suf Usa il suffisso .suf invece di .gz. Può essere dato qualsiasi suffisso, ma suffissi diversi da .z e .gz dovrebbero essere evitati per evitare confusioni quando i file sono trasferiti su altri sistemi.
-t --test Test. Verifica l'integrità del file compresso.
-v --verbose Verbose. Mostra il nome e la percentuale di riduzione di ogni file compresso o decompresso.
-# --fast --best Regola la velocità di compressione usando la cifra # specificata, dove -1 o --fast indicano il metodo di compressione più veloce (minore compressione) e -9 o --best indicano il metodo di compressione più lento (migliore compressione). Il livello di compressione di default è -6. 

gzip -c
Con l'opzione -c, gzip scrive l'uscita nello standard output, lasciando il file originale intatto. 
Percio' e' possibile concatenare piu file compressi con il comando gzip -c fileN >> gzfile.gz..
Quindi il comando gzip -cd gzfile.gz equivale a cat file1 file2,..., fileN.
Compressioni migliori si ottengono pero' con la riga cat file1,...,fileN | gzip > gzfile.gz, che comprime cosi' tutti i membri assieme, anziche' con il comando il comando gzip -c file1,...,fileN > gzfile.gz.
Se un file compresso e' formato da piu' membri, l'opzione --list fara' riferimento solo alla dimensione compressa, decompressa, rapporto di compressione ecc... dell'ultimo membro, nel caso interessi solo la dimensione decompressa per tutti i files membri si puo' usare gzip -cd file.gz | wc -c.
Nel caso si voglia ricomprimere files concatenati per ottenere una migliore compressione si puo' eseguire gzip -cd old_gzfile.gz | gzip > new_gzfile.gz.
Se si vuole pero' creare un archivio di piu' files compressi indipendenti bisogna utilizzare il tar, che con l'opzione -z filtra gli archivi con gzip, creando cosi' i .tar.gz. 

htdigest
Utility per la creazione e management del file contenente la correlazione password e utente per l'autenticazione di tipo Digest di Apache. 
htdigest [ -c ] passwdfile realm username
-c crea il file passwd, se esiste lo sovrascrive.

htpasswd
Per creare e gestire i file per l'autenticazione utente Basic di Apache. 
Per la creazione di un nuovo passwd file
htpasswd -c [opzioni] passwdfile username
Per aggiungere semplicemente un utente ad un passwd esistente
htpasswd [opzioni] passwdfile username
Per printare in stdout quello che verrebbe scritto nel passwd file, utile se si deve copiare il risultato in un db come mysql
htpasswd -nb [opzioni] username password
-b Abilita il batch mode, la password viene presa dalla linea di comando, con tutti gli incovenienti del caso.
-c Crea il passwd file se non esiste, altrimenti lo sovrascrive.
-n Mostra il risultato del comando in stdout, non può essere combinata con l'opzione -c 

I File System Journaled su Linux
Diamo uno sguardo ai file system evoluti con funzionalita' di journaling disponibili per Linux. 
Linux implementa una tecnica molto lenta per riprendersi da un crash di sistema. Se un computer con Linux, dotato di un grande sistema di storage va giu', per effettuare il reboot impieghera' un'enorme quantita' di tempo. Ma ora ci sono almeno otto file system consistenti che permettono di risolvere il problema.
Il file system standard di Linux non tiene traccia delle transazioni correnti. In questo modo non si puo' tornare indietro. Cosi', in caso di crash, occorre fare la scansione dell'intero file system prima di permettere la scrittura agli utenti. La comparsa generalizzata di file system journaled (con giornale), in grado di mantenere un elevatissimo grado di congruenza fra dati e metadati, e' la risposta alle richieste degli utenti di poter massimizzare la sicurezza di registrazione dei dati anche nelle condizioni piu' critiche, in cui ad es. non sia sempre garantita una chiusura (shutdown) corretta del sistema operativo.
La capacita' di effettuare il journaling dei dati e' una caratteristica considerata ormai indispensabile per i sistemi mission critical e per quelli destinati a un uso pubblico generalizzato da parte di utenti non necessariamente accorti, es. sistemi embedded, set top box, ecc.
Tutte le versioni di Unix invece hanno la capacita' di fare un reboot rapido. Riescono ad evitare la scansione di tutto il file system, leggendo solo il "giornale", un file di dimensioni contenute, dove vengono riportati tutti i cambiamenti recenti avvenuti nel file system.
Tra i file system journaled oggi disponibili per Linux citiamo:
- IBM JFS Journaling File System
http://oss.software.ibm.com/developerworks/opensource/jfs/?dwzone=opensource
- ReiserFS di Hans Rieserv
http://www.namesys.com/
- XFS dalla versione IRIX di SGI
http://oss.sgi.com/projects/xfs/
- Un file system e un "volume manager" della Veritas Software
http://www.sun.com/storage/software/veritas.html 
- ext3fs di Stephne Tweedie
http://www.memalpha.cx/Linux/Ext3fs/ 
- Global File System della SiStina Software
http://www.sistina.com/gfs/ 
- Tux2 di Dan Philip
http://innominate.org/~phillips/tux2/ 
- Intermezzo
http://inter-mezzo.org/ 
Il ReiserFs e il JFS sono nella versione definitiva, mentre tutti gli altri sono ancora in fase di sviluppo. Tutti questi file system hanno in comune il fatto di scrivere ogni operazione di memorizzazione su un file separato, il giornale. In questo modo modo si velocizza il riavvio e soprattutto si minimizza il rischio di perdere pezzi di file. 

I permessi sui file Unix
Tutti i sistemi Unix hanno una gestione standard dei permessi sui file, che rispecchia la natura di sistema operativo multiutente.
I permessi possono essere di lettura, scrittura e esecuzione e vengono differenziati sulla base della natura dell'utente rispetto al file o directory:
- utente proprietario owner del file
- gruppo proprietario owner group del file
- gli altri utenti others, che sono l'owner e non appartegono all'owner group.
Il permesso di esecuzione è necessario per poter accedere a delle directory e, ovviamente, permette l'esecuzione di file (script shell, perl, php, cgi; programmi binari compilati).
Per visualizzare i permessi di un file basta usare il comando ls -l che per ogni file da un output simile a:
-rwxr-xr-- 1 mark admins 77266 Dec 13 17:18 /bin/command.sh
La prima colonna, composta da 10 caratteri, descrive i permessi sul file /bin/command.sh.
Il primo carattere (nell'esempio: -) identifica il tipo di file (directory, pipe, block o char device, symlink...);
I successivi 3 caratteri identificano i permessi in lettura/scrittura/esecuzione dell'owner di /bin/command.sh (in questo caso l'owner mark ha tutti i permessi sul file: rwx );
I successivi 3 identificano i permessi del gruppo owner di /bin/command.sh (in questo caso il gruppo admins ha permesso di lettura ed esecuzione sul file: r-x );
I successivi 3 identificano i permessi di tutti gli altri utenti del sistema (in questo caso hanno solo il permesso di lettura: r-- ).
Le successive colonne nell'output di ls -l indicano l'owner, il gruppo, la dimensione in byte, la data di ultima modifica e il nome del file.
Per modificare i permessi dei file si usa il comando chmod che usa una duplice sintassi per indicare i permessi:
read - lettura: Flag r in symbolic mode; Valore 4 in octal mode
write - scrittuta: Flag w in symbolic mode; Valore 2 in octal mode
execute - esecuzione: Flag x in symbolic mode; Valore 1 in octal mode 

ifconfig 
Ifconfig serve essenzialmente a configurare l'indirizzo ip di un'interfaccia di rete, tipicamente una ethernet.
Un computer può avere più di un indirizzo IP. Ad ogni interface può corrispondere uno o più indirizzi IP.
per esempio potremmo avere un computer con due ethernet interface e avremmo quindi una eth0 e una eth1 (quindi due indirizzi), ma potremmo avere anche degli alias, quindi eth0:1, eth0:2 e così via.
Con ifconfig si possono configurare altri aspetti di un'interface, anche se molti parametri saranno difficilmente cambiati. Per esempio si possono cambiare e MTU e metrica, abilitare o disabilitare il multicast e la modalità promiscqua (di solito attivata automaticamente da programmi di sniffing). Sulla manuale (man ifconfig) si possono trovare queste opzioni, che consiglio di leggere.
Sicuramente i comandi dati sono sufficienti ad una configurazione standard.
Vediamo una panoramica dei principali comandi per utilizzare ifconfig: 
ifconfig [interface] options | address
ifconfig -a mostra la configurazione IP di tutte le interface. Su molti sistemi è sufficiente digitare ifconfig, senza l'opzione -a. Un esempio dell'output di ifconfig può essere questo (i commenti spiegano le varie righe):
eth0 Link encap:Ethernet HWaddr 00:50:8B:B0:15:7F
indica il tipo di hardware e il suo indirizzo fisico (MAC address)
inet addr:192.168.0.1 Bcast:192.168.1.255 Mask:255.255.255.0
indica indirizzo IP, indirizzo di broadcast e maschera della rete.
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Indica lo stato (UP) e le opzioni attive (accetta broadcast e multicast) l'MTU e la Metrica.
RX packets:2590603 errors:0 dropped:0 overruns:0 frame:0
TX packets:2713120 errors:0 dropped:0 overruns:1 carrier:0
collisions:0 txqueuelen:100 
RX bytes:987732693 (941.9 Mb) TX bytes:1198865677 (1143.3 Mb)
Mostra le statistiche in ricezione (RX) e trasmissione (TX)
Interrupt:12 Base address:0x6100
Mostra l'indirizzo hardware della scheda
ifconfig interface mostra la configurazione della interface specificata. Per esempio ifconfig eth0.
ifconfig interface ip netmask broadcast up/down attiva disattiva una determinata interface. Con questo comando possiamo facilmente configurare e attivare una interface. Questo si applica sia come indirizzo primario che come alias, consentendoci di creare più alias alla stessa interfaccia.
Vediamo qualche esempio:
ifconfig eth0 192.168.0.1 up assegna l'indirizzo IP 192.168.0.1 e attiva l'interface (di default viene assegnata la classe C in questo caso, che sarebbe stata una classe A se avessimo usato 10.0.0.1)
ifconfig eth0:1 192.168.0.1 up assegna l'indirizzo IP 192.168.0.1 alla eth0:1 e attiva l'interface. Eseguendo questo comando di fatto assegniamo un'altro indirizzo IP alla interface.
ifconfig eth0 192.168.0.1 netmask 255.255.255.128 broadcast 192.168.0.127 up assegna l'indirizzo IP 192.168.0.1 e attiva l'interface, creando una mask 192.168.0.0/25 (In questo modo la Classe C è divisa in due subnet di 126 indirizzi) e assegnando come indirizzo di broadcast 192.168.0.127. 

Il login su un sistema Unix/Linux
Linux, come ogni Unix, è un sistema operativo multiutente, dove differenti utenti possono avere, contemporaneamente, accesso al sistema avendo i propri dati, documenti e impostazioni completamente separati da quelli di altri utenti oltre ad avere la possibilità di accedere alla risorse del sistema simultaneamente ed eseguire i programmi disponibili. 
L'accesso ad un sistema Unix può avvenire tramite un'interfaccia grafica a finestre, paragonabile a quella di Windows e basata sull'X Window System, o una interfaccia testuale, a riga di comando, tramite un programma che ha lo scopo di interpetare i comandi digitati dall'utente: la shell 
Essendo un sistema operativo orientato alle reti, si può accedere a Linux, come ad altri dialetti Unix, sia direttamente tramite console (la tastiera direttamente collegata al computer) sia da una postazione remota, via rete. 
L'accesso al sistema è subordinata all'inserimento, da parte dell'utente, di una login (nome utente) e della relativa password. Questa operazione di autenticazione dell'utente è detta login.
Il login può quindi essere eseguito in ambienti diversi, grafici o testuali da locale o da remoto ma ha sempre lo stesso scopo: permettere all'utnete di accedere ed interagire con il sistema dopo averne verificate le credenziali (login e password).
Il logout è esattamente l'opposto del login: se si è in modalità testuale si chiude la shell aperta con il precedente login, se si è in un ambiente grafico, si esce da questo. In entrambi i casi dopo il logout si ha la possibilità di ripetere una operazione di login, eventualmente con un nome utente diverso.
Per eseguire il login da remoto su un sistema Unix si utilizzano generalmente programmi con telnet (nome di un protocollo e del relativo comando, ampiamente usato, sopratutto in passato) o ssh (una alternativa a telnet con le stesse funzionalità ma la possibilità di criptare i dati in transito e quindi, di questi tempi, preferito al telnet). 

Il protocollo DHCP
Il protocollo DHCP Dynamic Host Configuration Protocol fornisce un meccanismo per assegnare dinamicamente gli indirizzi IP ed i parametri di configurazione ad un host tramite TCP/IP. 
Questo protocollo definito dalle RFC 1533, 1534, 1541 e 1542 è un'estensione del protocollo BOOTP. L'utilizzo del DHCP su una rete con un significativo numero di macchine ne permette una migliore e più semplice gestione, riducendo i possibili conflitti di indirizzo.
Attraverso DHCP infatti, oltre ad assegnare ad ogni macchina automaticamente un diverso indirizzo di rete e la relativa subnet mask, è possibile assegnare anche altri parametri come per esempio: l'indirizzo di broadcast, il nome del nodo e del dominio, il gateway predefinito, l'indirizzo del server di stampa, l'indirizzo del DNS ecc. 
Per utilizzare questo protocollo deve essere configurata una macchina, il DHCP Server, che si fa carico di distribuire gli indirizzi e gli altri parametri di configurazione ai client che ne fanno richiesta. Il range degli indirizzi distribuibili è chiamato Scope, ed ogni configurazione è valida solo per un determinato periodo di tempo, chiamato tempo di lease, scaduto il quale il client deve richiedere nuovamente la configurazione. In sostanza il client affitta il suo indirizzo di rete per un determinato periodo di tempo.
Il processo per la configurazione di un client tramite DHCP avviene in quattro fasi:
1. Il client invia sulla rete un messaggio in broadcast (in quanto non conosce l'indirizzo del server) chiamato DHCPDISCOVER. Questo messaggio proverrà quindi da 0.0.0.0 e come destinazione avrà 255.255.255.255. Il messaggio DHCPDISCOVER contiene anche l'indirizzo MAC (univoco) della macchina che fa la richiesta.
2. Il server DHCP che riceve la richiesta invia in risposta un messaggio chiamato DHCPOFFER contenente un indirizzo selezionato dallo SCOPE e l'indirizzo MAC del client che ne ha fatto richiesta per far sì che l'offerta giunga al client corretto.
3. Il client, invia ora un messaggio DHCPREQUEST in broadcast indicando che ha accettato l'indirizzo IP offerto. 
4. Infine il server DHCP invia un messaggio DHCPACK (ACKnowledgment) che conferma al client l'assegnazione dell'indirizzo con il relativo tempo di lease ed invia anche i vari parametri opzionali.
Nel caso in cui il server è impossibilitato ad assegnare la configurazione richiesta dal client invia un messagggio di tipo DHCPNACK (Negative ACKnowledgment) il quale indica che è necessario ripetere tutti i passi per ottenere una nuova configurazione.
Esempio che è possibile trovare nei log di un DHCP server Linux:
Joker dhcpd: DHCPDISCOVER from 00:48:54:6e:b0:4d (Enigma) via eth0
La macchina Joker (DHCP Server) riceve la richiesta da Enigma (DHCP Client) con MAC Address 00:48:54:6e:b0:4d
Joker dhcpd: DHCPOFFER on 192.168.0.100 to 00:48:54:6e:b0:4d (Enigma) via eth0
Joker offre a Enigma, identificato tramite il MAC 00:48:54:6e:b0:4d, l'indirizzo 192.168.0.100 
Joker dhcpd: DHCPREQUEST for 192.168.0.100 (192.168.0.2) from 00:48:54:6e:b0:4d (Enigma) via eth0
Enigma accetta e richiede l'indirizzo 192.168.0.100
Joker dhcpd: DHCPACK on 192.168.0.100 to 00:48:54:6e:b0:4d(Enigma) via eth0
Joker assegna ad Enigma l'indirizzo richiesto
Il rinnovo DHCP avviene in tre fasi:
1. Ogni volta che il client DHCP viene riavviato, se il tempo di lease non è scaduto, viene richiesta la conferma per la configurazione corrente tramite uno scambio di messaggi DHCPREQUEST e DHCPACK.
2. Quando è trascorso il 50% del tempo di lease il client DHCP invia messaggio al server DHCP per rinnovare la configurazione in uso. Se il server riceve il messaggio ed è disponibile al rinnovo invia un messaggio DHCPACK con i parametri, altrimenti il client utilizza i proprio valori fino alla scadenza del lease.
3. Quando è trascorso l'85% del tempo di lease il client DHCP invia in broadcast una richiesta DHCP per rinnovare la configurazione. Se il DHCP server che aveva precedentemente concesso la licenza riceve il messaggio, la rinnova, altrimenti viene inviato un DHCPNACK e quindi il client dovrà ripetere le quattro fasi iniziali. 

Il protocollo IP
Il protocollo IP si occupa di fornire un metodo di indirizzamento logico e di gestione frammentazione/riassemblaggio per la trasmissione dati tra gli host di una rete. 
Il protocollo IP, descritto nella RFC 791, nasce negli anni '70 grazie a una serie di ricerche fatte dalle università americane su richiesta del ministro della difesa, allo scopo di realizzare una rete in grado di trasportare diversi tipi di informazioni. L'IP protocol definisce una tecnica di trasmissione dati non orientata alla connessione (connectionless) e senza riscontro (non c'è garanzia che i pacchetti giungano a destinazione e nella sequenza corretta). Esso prevede che le informazioni vengano strutturate in unità chiamate datagrammi IP (IP datagram), di lunghezza massima 65535 byte, suddivise in due aree: il campo dati (data) che contiene il messaggio da inviare e l'intestazione (header) che contiene le informazioni necessarie per instradare il pacchetto.
HEADER IP
L'intestazione di un pacchetto IP è suddivisa nei seguenti campi:
Version: campo di 4 bit, descrive la versione del protocollo;
IHL: campo di 4 bit, definisce la lunghezza dell'intestazione. Il campo IHL(Internet Header Lenght) viene sottratto da Packet Lenght per determinare l'inizio dei dati;
Service Type: campo di 8 bit, che definisce le caratteristiche del servizio in Precedence (importanza del pacchetto),
Delay, Throughput, Reliability (informazioni per il trasporto, servono a determinare il percorso che il pacchetto farà);
Packet Lenght: campo di 16 bit, definisce la lunghezza totale del pacchetto (Intestazione+Dati);
Packet Fragmentation: è formato da tre campi, identification di 16 bit , flags di 3 bit e fragment offset di 13 bit i quali permettono di suddividere il pacchetto in unità più piccole quando esso deve passare attraverso una rete che prevede frame di dimensioni minori, e di essere ricostruito all'uscita dalla rete;
Time-to-live (TTL): campo di 8 bit, definisce il tempo massimo di permanenza del pacchetto nella rete, ad ogni hop (router attraversato) il suo valore diminuisce di uno, una volta riaggiunto il valore zero il pacchetto viene scartato;
Protocol: campo di 8 bit, definisce il protocollo ad alto livello utilizzato per creare il messaggio contenuto nel campo dati (TCP, UDP, ICMP ecc);
Header Checksum: campo di 16 bit, definisce un checksum per il controllo della correttezza dei dati contenuti nell'intestazione del pacchetto;
Ip Address Source: campo di 32 bit, contiene l'indirizzo IP del mittente;
Ip Address Destination: campo di 32 bit, contiene l'indirizzo IP del destinatario;
Options: campo di dimensioni variabili, è opzionale, contiene informazioni sulle operazioni che devono essere effettuate durante il percorso;
Padding: campo di dimensioni variabili, è utilizzato per far raggiungere all'area d'intestazione una dimensione di 32 bit o un suo multiplo;
Data: i dati trasportati dal protocollo. 

Il protocollo TCP
E' un protocollo di trasporto di tipo connection-oriented per la trasmissione dati tra due host. 
Il protocollo TCP ha il compito di fornire alle applicazioni un servizio affidabile per il trasferimento dei dati attraverso la rete. Questo protocollo offre un servizio orientato alla connessione (connection-oriented), esso garantisce la consegna e l'ordinamento corretto dei dati grazie all'utilizzo di sequence number e conferme di consegna. Tra gli host impegnati nella comunicazione viene simulato un colloquio diretto attraverso un canale che consente lo scambio interattivo delle informazioni (full-duplex). I dati vengono presentati e ricevuti da TCP ai protocolli superiori come un'unica sequenza (byte-stream). In questo modo è il TCP ad occuparsi di segmentarli lasciando ai protocolli superiori solo il compito di prepararli. Le informazioni contenute in un segmento sono suddivise in due parti: l'intestazione (header) e i dati (data). Il Transmission Control Protocol è utilizzato da diversi protocolli a livello applicativo quali FTP, Telnet, SMTP, POP3 ed altri.
HEADER TCP
L'intestazione di un pacchetto TCP è formata dai seguenti campi:
Source Port: campo di 16 bit, contiene il numero porta utilizzata dall'host mittente;
Destination Port: campo di 16 bit, contiene il numero della porta utilizzata dall'host destinatario;
Sequence Number: campo di 32 bit, definisce l'ordine in cui i segmenti devono essere riassemblati. E' utilizzato anche nella fase di connessione (handshake);
Acknowledgment Number: campo di 16 bit, contiene il prossimo numero di sequenza che l'host destinatario si aspetta di ricevere dall'host mittente. Esprime il numero di segmenti ricevuti correttamente fino a quel momento;
Data Offset: campo di 4 bit, definisce la lunghezza in parole a 32 bit dell'intestazione TCP. Indica dove inziano i dati;
Reserved: campo di 6 bit, riservato per futuri utilizzi;
Urgent Controlo Bit: campo di 6 bit, contiene a sua volta 6 flag da un bit:
- URG se è attivo indica che il campo Urgent Pointer è significativo e deve essere letto;
- ACK se attivo indica che il campo Acknowledgement Number è significativo è deve essere letto;
- PSH se attivo significa che il pacchetto deve essere inviato immediatamente, invece di attendere il riempimento del buffer;
- RST viene utilizzato per indicare che la connessione deve essere reinizializzata, solitamente a seguito di problemi;
- SYN viene utilizzato per stabilire una sessione, indica al destinatario di leggere il campo Sequence number e sincronizzare il proprio con esso;
- FIN indica che l'host mittente non ha più dati da spedire, e vuole terminare la connessione;
Windows Size: campo di 16 bit, contiene la dimensione del buffer di dati che il mittente può accettare;
Checksum: campo di 16 bit, stabilisce la correttezza delle informazioni (Intestazione+Dati);
Urgent Pointer: campo di 16 bit, indica quale porzione dati è urgente;
Options: campo di dimensione varabile, contiene le opzioni per la comunicazione;
Padding: campo di dimensioni variabili, è utilizzato per far raggiungere all'area d'intestazione una dimensione di 32 bit o un suo multiplo;
Data: i dati trasportati dal protocollo;
I FLAG TCP
Durante una sessione TCP è di fondamentale importanza lo stato dei flag del campo Urgent Control Bit che possono assumere combinazioni differenti:
SYN: è presente nel primo pacchetto di un host che intende stabilire la connessione con un altro;
SYN | ACK: è la risposta di un host contattato che accetta la connessione;
ACK: a connessione stabilita ogni pacchetto è confermato tramite i flag ACK attivo;
FIN: è inviato da un host che intende chiudere una sessione;
FIN | ACK: è la risposta di un host che conferma la chiusura di una connessione;
RST: viene inviato da un host che riceve un pacchetto inatteso e che quindi non accetta la connessione;
STATI DI UNA SESSIONE TCP
Una sessione TCP attraversa diversi stati in seguito al verificarsi di determinati eventi:
LISTEN: host in attesa di connessione; 
SYN-SENT: host che ha inviato una richiesta di connessione ed è in attesa di risposta;
SYN-RECEIVED: host in attesa di conferma per la richiesta di connessione dopo aver ricevuto ed inviato una richiesta di conferma;
ESTABLISHED: host con una connessione aperta durante la quale i dati sono inviati e ricevuti;
FIN-WAIT1: host in attesa di una richiesta di termine della sessione o di conferma di richiesta di termine della connessione;
FIN-WAIT2: host in attesa di una richiesta di termine della sessione da parte di un host remoto;
CLOSE-WAIT: host in attesa di terminare la sessione;
CLOSING: host in attesa della conferma della richiesta di termine di connessione;
LAST-ACK: host in attesa della conferma dellle richiesta di termine della connessione già inviata all'host remoto;
TIME-WAIT: host in attesa (per un determinato lasso di tempo) per garantire che l'host remoto abbia ricevuto la conferma della richiesta di termine della connessione;
CLOSED: non esiste connessione tra host;
SESSIONE TCP
Il presupposto per instaurare una connessione è l'esistenza di un server con un socket attivo in stato di listen (apertura passiva). Inizialmente il client ed il server sono in stato closed. Successivamente una sessione TCP attraversa i seguenti passaggi:
- Instaurazione della connessione
1. Il client esegue una procedura chiamata apertura attiva creando un socket, ed inviando un segmento TCP con il flag SYN (synchronize) settato ed un sequence number (random) seq=x;
[Host A (Stato Syn Sent)] SEQ=100 SYN --> [Host B (Stato LISTEN)]
2. Il server risponde con il flag SYN e ACK (risposta di conferma) attivi, inviando un sequence number settato a seq=y e ACK x+1 oppure se non accetta la connessione risponde inviando un pacchetto con flag RST attivo; 
[Host A (Stato ESTABLISHED)] <-- SEQ=300 ACK=101 SYN,ACK [Host B (Stato Syn Received)]
3. Il client riceve il segmento dal server e ne invia uno con il flag ACK settato: ACK x+1. Durante questa fase gli host impostano la dimensione massima del buffer di trasmissione (Window Size). La procedura three-way handshake è terminata ed inizia il trasferimento dati;
[Host A (Stato ESTABLISHED)] SEQ=101 ACK=301 ACK --> [Host B (Stato ESTABLISHED)] 
- Scambio dati
4. I Dati vengono scambiati tra i due host.
[Host A (Stato ESTABLISHED)] SEQ=101 ACK=301 ACK (Dati) --> [Host B (Stato ESTABLISHED)] 
- Termine della connessione
5. Per rilasciare la connessione il client invia un segmento contenente il flag FIN settato;
[Host A (Stato FIN-WAIT-1)] SEQ=500 ACK=700 FIN,ACK --> [Host B (Stato CLOSE-WAIT)] 
6. Il server lo riceve e invia un segmento di conferma con il successivo numero sequenziale atteso ACK y+1;
[Host A (Stato FIN-WAIT-2)] <-- SEQ=700 ACK=501 ACK [Host B (Stato CLOSE-WAIT)] 
7. Il server invia la richiesta di fine connessione e la conferma con il flag FIN;
[Host A (Stato TIME-WAIT)] <-- SEQ=700 ACK=501 FIN,ACK [Host B (Stato LAST-ACK)] 
8. Il client conferma la ricezione, ed il server chiude la connessione;
[Host A (Stato TIME-WAIT)] SEQ=501 ACK=701 ACK --> [Host B (Stato CLOSED] 
9. La connessione viene chiusa anche dal lato client;
[Host A (Stato CLOSED)]
FINESTRE SCORREVOLI e TIMEOUT
Il meccanismo delle finestre scorrevoli (Sliding Windows) viene utilizzato dal TCP/IP per migliorare le performance di una trasmissione. La dimensione della finestra di trasmissione, contenuto nel campo Windows Size, viene scambiata tra i due host nella fase di handshaking (può comunque variare in seguito durante la sessione).
Questa dimensione indica il numero massimo di segmenti che si possono inviare ogni volta. Il meccanismo dei timeout permette invece di rispedire un pacchetto, qualora scaduto un determinato periodo di tempo (timeout appunto) non sia stata ricevuta la conferma da parte dell'host remoto.
Poniamo che a seguito dell'handshake si abbia una finestra di partenza di 6 segmenti:
1. L'host mittente invia i 6 segmenti al all'host destinatario.
Host A [(1)(2)(3)(4)(5)(6)]7 8 9 10 11 12 - Host B [ ]
Host A (1)(2)(3)(4)(5)(6) --> Host B
2. Se l'host destinatario riceve solamente i segmenti 1 e 2, invia una conferma indicando che si aspetta il segmento 3, inidicando quindi che i segementi 1 e 2 sono stati ricevuti. A questo punto la finestra si sposta di due segmenti in modo da poter trasmettere i segmenti 7 ed 8.
Se non viene confermata la ricezione dei segmenti da 3 a 6 inviati precedentemente, il timer di ritrasmissione raggiunge lo zero e vengono quindi rispediti ma con il tempo di timeout raddoppiato.
Host A 1 2 [(3)(4)(5)(6)(7)(8)] 9 10 11 12 - 1 2 [ ]
Host A (7)(8) --> Host B
3. L'host destinatario invia un pacchetto di conferma in cui si aspetta di ricevere il segmento 8, indicando quindi di aver ricevuto i segmenti fino al 7. La finestra a questo punto scorre oltre il segmento 7, e si devono inviare i segmenti da 8 a 12 e cosi via.
Host A 1 2 3 4 5 6 7 [(8)(9)(10)(11)(12)] - Host B 1 2 3 4 5 6 7 []
Host A (8)(9)(10)(11)(12) --> Host B
Grazie a queste tecniche si ha un miglioramento delle prestazioni in quanto, l'host destinatario può inviare le conferme di ricezione di più segmenti (contigui) contemporaneamente riducendo quindi il traffico di rete. Naturalmente una finestra troppo grande potrebbe portare a perdere troppi segmenti e quindi a peggiorare la trasmissione. 

Il protocollo UDP
E' un protocollo di trasporto di tipo connectionless, per la trasmissione dati tra due host. 
UDP (User Datagram Protocol) viene descritto nella RFC 768. E' un protocollo non orientato alla connessione, utilizzato quando l'affidabilità, il cui controllo viene richiesto ai protocolli applicativi che ne fanno uso, non è il target primario. I vantaggi nell'utilizzo di UDP sono infatti la velocità, e la minore congestione di rete rispetto a TCP (non ci sono pacchetti di conferma) e la possibilità di trasmettere in multicast (invio di un pacchetto ad un gruppo di host) e broadcast (invio di un pacchetto a tutti gli host di un segmento di rete).
HEADER UDP 
Il formato di un pacchetto UDP non è molto complesso e comprende i seguenti campi: 
Source Port: campo di 16 bit (facoltativo), contiene la porta UDP di origine dell'host sorgente; 
Destination Port: campo di 16 bit, contiene la porta UDP di destinazione del pacchetto sull'host remoto; 
Lenght: campo di 16 bit, contiene la lunghezza in byte dell'intestazione UDP e dei dati; 
Checksum: campo di 16 bit, è utilizzato per verificare l'integrità dei dati trasportati; 
Data: campo di lunghezza variabile contenente i dati; 
TRASMISSIONE UDP 
La trasmissione di un pacchetto UDP avviene incapsulandolo all'interno di un pacchetto IP. Giunto a destinazione, il pacchetto viene inviato alla porta di destinazione indicata nell'intestazione UDP. Qualora la porta non fosse disponibile, viene inviato un paccheto ICMP (Internet Control Message Protocol) all'host mittente con messaggio di port unreachable (porta irraggiungibile).
Attraverso un network sniffer è possibile visualizzare i vari campi di un pacchetto UDP. Un esempio: 
Source IP: 192.168.0.97 Target IP: 195.130.224.18 UDP Length: 27 
Essendo UDP incapsulato in IP vediamo prima l'intestazione IP con gli indirizzi sorgente e destinazione e la dimensione 
Source Port: 33997 Target Port: 53 Leng: 35 ChkSum: 2342 
Nell'header UDP troviamo la porta sorgente (33997) e la porta destinazione (53 - richiesta DNS) la dimensione (35) ed il checksum (2342) 
00000000: 1A B4 01 00 00 01 00 00 00 00 00 00 09 6C 6F 63 
...
Infine troviamo il campo dati
UDP viene utilizzato da protocolli come TFTP (Trivial File Transfer Protocol), SNMP (Simple Network Managment Protocol), DNS (Domain Name Server), per l'invio di stream audio, ed è ampiamente usato nelle applicazioni videoludiche. 

Il sistema di stampa CUPS
Cups è a tutti gli effetti il sistema di stampa proposto come autorevole sostituto dei metodo di stampa BSD.
Rivoluziona l'intero concetto di stampa, gestendo i filtri in proprio e infatti incorpora molti di questi programmi al suo interno ad esempio una versione specifica di ghostscript. 
Il sistema cups utilizza un protocollo derivato da http chiamato IPP (Internet Printing Protocoll, rfc 2568) e incorpora un server http che gli permette di mantenere un'interfaccia amministrativa via web in ascolto sulla porta 631. Per determinare il comportamento di questa interfaccia e in generale del sistema di stampa si lavora sul file di configurazione cupsd.conf che solitamente si trova dentro /etc/cups. Questo file ha una sintassi ispirata al file di configurazione di Apache. In questo file si specificano il nome della macchina, il linguaggio di default, i parametri di accesso e la directory radice del sistema, tutti i parametri specifici della applicazione, file di log e comportamenti particolari in caso di eventi differenti.
Cups inoltre gestisce le informazioni necessarie all'elaborazione dati per la specifica stampante usata tramite dei file contenenti istruzioni di tipo MIME, chiamati file PPD e generalmente posti in /usr/share/cups/model/.
Con cups si è in grado di configurare stampanti locali e inoltre permette di aggiungere stampanti remote sia che utilizzino il protocollo IPP che LPD. Supporta inoltre la stampa via SMB in un network Samba.
Con il comando lpadmin si possono aggiungere od eliminare stampanti logiche, inoltre una volta definite si possono abilitare o disabilitare e si possono definire le policy per i processi di stampa. In questo modo si ha la possibilità di amministrare i comportamenti di una determinata stampante. Se si disabilita una stampante questa continuerà ad accettare comunque i processi di stampa inserendoli nella sua coda e senza stamparli mentre se si è definito che deve rifiutare i processi di stampa non verrà accodata nessuna stampa.
Si possono stabilire inoltre delle classi che riuniscono sotto di se diverse stampanti, permettendo così una gestione anche di gruppo. Se un utente invierà un processo alla classe sarà cups a stabilire a quale stampante va inviato. Le classi accettano gli stessi parametri enable e disable, accept e refuse in modo da permettere una gestione complessiva per gruppi di stampanti logiche. Va tenuto conto tuttavia che le stampanti logiche non subiscono le direttive riferite ad una classe sicchè si può disabilitare una classe ma far elaborare processi di stampa ad una stampante del gruppo. 
Le informazioni sulle stampanti e sulle classi vengono memorizzate rispettivamente su i file /etc/cups/printers.conf e su /etc/cups/classes.conf, due file che volendo sono editabili a mano ma che generalmente si gestiscono sempre attraverso i comandi di amministrazione tra cui lpadmin.
Per lavorare con cups si utilizzano i comandi standard del sistema BSD, lp o lpr. Per definire code di stampa remote si utilizza una sintassi del genere nome-coda@host-remoto.
Per compatibilità con programmi che potrebbero richiederne la presenza, cups permette di aggiornare il file printcap e nel caso si desiderasse mantenere intatto questo file per il suo uso con sistemi BSD esiste una direttiva di configurazione che permette di specificarne uno alternativo, anche perchè comunque al suo interno si troveranno le specifiche per le stampanti ma i record classici di specifica delle stesse non sono necessari.
Questo versatile e potente sistema di stampa permette di gestire anche delle direttive per i client.
Il file principale per questo è /etc/cups/client.conf ma si possono definire direttive per singolo utente in un file chiamato .cupsrc posizionato all'interno della home directory delllo stesso. Un uso classico di questi file che generalmente sono vuoti può essere quello di specificare un percorso di una stampante predefinita per un utente diversa dalla stampante predefinita sulla workstation. 

Impostare l'home page di default su Apache
Molto spesso quando si naviga sul web non si specifica il nome di un file html specifico, ma semplicemente quello di una directory. Per esempio, l'URL http://www.openskills.info/ indica la directory principale ( / ) del web server www.openskills.info.
In questi casi il server web automaticamente visualizza un file predefinito. 
Tramite la direttiva DirectoryIndex è possibile impostare il nome dei Default Index cioè delle pagine che vengono processate quando l'url richiesta corrisponde ad una directory.
La sintassi è la seguente:
DirectoryIndex nome.file nome.file ... 
Per esempio:
DirectoryIndex index.php index.php3 index.html index.htm
E' possibile elencare più nomi di file come nell'esempio, questi hanno priorità progressiva: nel caso indicato Apache mostra index.php se esiste, altrimenti index.php3, poi index.html e a seguire.
Se si vuole evitare in modo semplice e veloce il listing di una directory in un server basta creare una pagina vuota con uno dei nomi indicati come DirectroyIndex:
Il comando shell touch /home/www/html/index.htm crea un file vuoto, che il server web legge e serve al browser che visualizza una pagina vuota (invece, se previsto dalla configurazione del web server) dell'elenco dei file e delle directory contenuti in /home/www/html.
Notare che la scelta di index.html come home page predefinita (o di Default.htm, comune in ambienti Windows, sotto IIS) è assolutamente arbitraria e infatti è facilmente configurabile con la direttiva DirectoryIndex.

Installare Apache via RPM
Fra i vari modi con cui è possibile installare Apache su distribuzioni RedHat based, quello più semplice è tramite pacchetti RPM.
Per farlo, innanzitutto bisogna scaricare il pacchetto apache-ver.arch.rpm appropriato per la propria distribuzione Linux, dove ver sta per versione e arch per architettura.
Una volta fatto questo andare dove si è scaricato il pacchetto e lanciare il comando (esempio per Apache 1.3):
[root@eberk diego]# rpm -ihv ./apache-1.3.9-4.i386.rpm
/etc/httpd/conf
/etc/httpd/conf/access.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/httpd/conf/srm.conf
/etc/httpd/logs
[...]
/home/httpd
/home/httpd/cgi-bin
/home/httpd/html
/home/httpd/html/index.html 
[...]
/usr/sbin/httpd
/usr/sbin/logresolve
/usr/sbin/rotatelogs
/usr/sbin/suexec
[...]
Ora Apache è installato.
Attenzione, alcuni moduli per Apache non sono contenuti nell'RPM di installazione (per esempio mod_PHP, mod_PERL ecc...), e vanno installati tramite gli appositi RPM.
In genere su qualsiasi distribuzione è già inclusa, e installabile fin dall'inizio, una versione di Apache. 
Per aggiornarla con una versione più recente basta il solito: 
[root@eberk diego]# rpm -Uv ./apache-1.3.9-4.i386.rpm
Per gestire correttamete le dependencies, per esempio con un Apache con MOD_php con supporto MySQL e MOD_ssl seguire questo ordine: Apache, Mysql (pacchetto base + server + devel), PHP, MOD_php, php-mysql, OpenSSL, MOD_ssl.
Su RedHat, Apache 2.0 è stato introdotto di default dalla versione 8.0 (notare che il nome del pacchetto è httpd-versione.rpm e non più apache-versione.rpm). I pacchetti relativi sono:
httpd - Il server web Apache (2.0)
httpd-devel - Le librerie che permettono la compilazione di moduli addizionali (non serve se non si compilano a mano)
redhat-config-httpd - Un semplice tool di configurazione visuale (non serve se si edita a mano httpd.conf)
httpd-manual - le pagine del manuale di Apache
mod_ssl - Supporto delle criptazioni dei dati per https (richiede openssl)
mod_perl - Modulo Apache per il supporto Perl
mod_python - Modulo Apache per il supporto Python
php - Supporto PHP (come modulo Apache o standalone). Se servono moduli specifici per PHP questi vanno installati (es: php-mysql, php-imap, php-snmp...)
Notare che sui sistemi RedHat la DocumentRoot, direcrtoty dove di default vanno inserite le pagine html di un sito), era /home/httpd/html nelle versioni fino alla 6.2 ed è diventata /var/www/html nelle versioni successive. 

Installare il joystick su Linux
Come installare e configurare il proprio Joystick in Linux 
In Linux il device joystick è presente nella directory di sistema /dev e precisamente è rappresentato dai seguenti file: 
/dev/js0 
/dev/js1 
/dev/js2 
/dev/js3 
Ognuno di questi file rappresenta un singolo dispositivo e quindi abbiamo la possibilità di avere 4 joystick contemporaneamente anche se in realtà questa situazione non si verifica mai. 
Prima di procedere all'installazione si devono creare manualmente, a meno che non siano già presenti, i seguenti nodes nella directory /dev/input: 
[root@Apollo13 /]# cd /dev 
Rimuove i file device attuali 
[root@Apollo13 /]# rm js0 
[root@Apollo13 /]# rm js1 
[root@Apollo13 /]# rm js2 
[root@Apollo13 /]# rm js3 
[root@Apollo13 /]# mkdir input 
Crea i nodes 
[root@Apollo13 /]# mknod input/js0 c 13 0 
[root@Apollo13 /]# mknod input/js1 c 13 1 
[root@Apollo13 /]# mknod input/js2 c 13 2 
[root@Apollo13 /]# mknod input/js3 c 13 3 
Link a nuovi file device 
[root@Apollo13 /]# ln -s input/js0 js0 
[root@Apollo13 /]# ln -s input/js1 js1 
[root@Apollo13 /]# ln -s input/js2 js2 
[root@Apollo13 /]# ln -s input/js3 js3 
Per poter utilizzare il joystick è necessario il modulo joydev, inoltre in base alle caratteristiche del nostro dispostivo si rivelano indispensabili altri moduli: 
ns558 : se il nostro joystick comunica tramite la gameport 
serport: se il nostro joystick comunica attraverso la porta seriale 
analog : se il si si tratta di un dispositivo analogico (la maggior parte) 
Nel caso che questi moduli non siano stati compilati con il kernel è necessario caricarli. 
Poniamo di dover installare un joystick analogico che utilizza la gameport: 
[root@Apollo13 /]# modprobe joydev 
[root@Apollo13 /]# modprobe ns558 
[root@Apollo13 /]# modprobe analog 
A questo punto si può testare il funzionamento del joystick tramite l'utility jstest 
[root@Apollo13 /]# jstest /dev/js0 
jstest visualizza il tipo di joystick collegato, il numero di assi, di pulsanti e la versione del driver 
Joystick (Analog 2-axis 4-button joystick) has 2 axes and 4 buttons. Driver version is 2.1.0. 
Testing ... (interrupt to exit) 
I valori degli assi e lo stato dei pulsanti 
Axes: 0: 0 1: 0 Buttons: 0:off 1:off 2:off 3:off 
Muovendo il joystick l'utility visualizzerà i valori in input. Se l'utility restituisce No such device, oppure se i valori non cambiano significa che il joystick non è riconosciuto o molto più probabilmente abbiamo commesso qualche errore nella procedura di installazione. 
Normalmente il tipo di joystick viene riconosciuto automaticamente da Linux ma se il dispositivo presenta caratteristiche diverse da quelle rilevate da jstest, per esempio ha più assi o più pulsanti, è possibile caricare il modulo analog con il parametro
js=type0,type1,type2,type3 
dove type0 è il tipo di joystick rappresentato da js0, type1 è il tipo di joystick rappresentato da js1 e così via... 
I valori che può assumere type sono: 
none Nessun dispositivo collegato 
auto : Rileva automaticamente il joystick (opzione di default) 
2btn : 2-Pulsanti n-Assi 
y-joy : 2-Pulsanti 2-Assi 
y-pad : 2-Pulsanti 2-Assi gamepads 
fcs : Thrustmaster FCS joystick 
chf : Joystick con un CH Flightstick Hat Switch (pulsante speciale) 
fullchf : CH Flightstick con 2 Hat Switch e 6 Pulsanti 
gamepad : 4/6-Pulsanti n-Assi gamepad 
gamepad8 : 8-Pulsanti 2-Assi gamepad 
Per esempio il comando: 
[root@Apollo13 /]# modprobe analog js=fcs,none,none,none 
specifica un joystick Thrustmaster FCS per js0, nessun joystick per gli altri device. 
Se il joystick si discosta ancora da questi tipi standard è possibile utilizzare un tipo personalizzato di type, costruendo un numero in base alle caratteristiche della periferica e alla seguente tabella: 
Bit Descrizione 
0 : Axis X1 
1 : Axis Y1 
2 : Axis X2 
3 : Axis Y2 
4 : Button A 
5 : Button B 
6 : Button C 
7 : Button D 
8 : CHF Buttons X and Y 
9 : CHF Hat 1 
10 : CHF Hat 2 
11 : FCS Hat 
12 : Pad Button X 
13 : Pad Button Y 
14 : Pad Button U 
15 : Pad Button V 
16 : Saitek F1-F4 Buttons 
17 : Saitek Digital Mode 
19 : GamePad 
20 : Joy2 Axis X1 
21 : Joy2 Axis Y1 
22 : Joy2 Axis X2 
23 : Joy2 Axis Y2 
24 : Joy2 Button A 
25 : Joy2 Button B 
26 : Joy2 Button C 
27 : Joy2 Button D 
31 : Joy2 GamePad 
Se per esempio il nostro joystick dispone di 2 assi (X,Y), 3 pulsanti e un FCS Hat: 
type = 2^0 + 2^1 + 2^4 + 2^5 + 2^6 + 2^11 
type = 2163 
[root@Apollo13 /]# modprobe analog js=2163,none,none,none 
Ora abbiamo forzato Linux a riconoscere il nostro joystick, non ci resta che verificare
il funzionamento della nuova configurazione eseguendo di nuovo jstest. 
In caso di ulteriori problemi, o per controllare se una determinata periferica è supportata dai driver di Linux, è utile leggere il file joystick.txt che solitamente è presente in /usr/share/doc. 

Installare Linux: informazioni da conoscere
L'installazione di Linux è ormai una operazione piuttosto semplice, visto il progresso evidente che molte distribuzioni hanno avuto negli ultimi tempi in termini di facilità d'uso.
Nonostante questo esistono alcune informazioni fondamentali che vanno conosciute, in particolare per i casi in cui si intende installare Linux su un computer dove è già installato, e si vuole mantenere, Windows. 
Sapere com'è il proprio sistema, come e dove si vuole installare Linux, nel caso sia presente già un altro sistema operativo, è fondamentale, per cui è bene assicurarsi, prima di procedere, di conoscere le informazioni di base riguardo a:
- Hardware a disposizione. Solitamente durante l'installazione il proprio hardware viene rilevato automaticamente, ma possono esserci rari casi in cui questo non accade. In genere se si usa un PC standard con una nuova distribuzione non ci sono problemi nel riconoscimento di componenti e periferiche.
- Sapere quali e quanti Hard Disk sono presenti sul sistema, come sono partizionati, quali sono cancellabili. Queste informazioni sono visualizzabili durante l'installazione, ma si deve essere certi di sapere dove sono i dati (per esempio, una installazione di Windows esistente) che non si vogliono cancellare.
- Configurazione di rete, se prevista (indirizzo IP, subnetmask, nome macchina, server DNS).
- Il tipo di attività che si intende fare con Linux (si userà come workstation o come server? si installa su un portatile? Si ha idea di quale software si vorrà usare?).
Gli scenari possibili sono vari, dipendono dalle singole situazioni e possono riassumersi in questi casi generali:
- Installazione su un computer esclusivamente dedicato a Linux (con o senza dati presenti sull'hard disk, che comunque si intende cancellare). Questo è il caso più semplice e se si ha a che fare con hardware non particolarmente esotico (normale PC, di marca, o assemblato, con processore Pentium o superiore) non dovrebbe creare alcun problema con una distribuzione recente.
- Installazione su un PC dove è già presente Windows e si ha a disposizione un hard disk libero o una partizione completamente libera all'interno dell'hard disk con Windows. Anche in questo caso l'installazione può procedere senza particolari problemi: durante le sue fasi verranno evidenziate le partizioni presenti sull'hard disk e sarà possibile decidere di utilizzare per Linux quelle libere, senza toccare quelle in cui si trova Windows.
- Installazione su un PC dove è presente Windows e non è disponbile un hard disk aggiuntivo, spazio non partizionato o una partizione sacrificabile. Questo purtroppo, oltre ad essere il caso più ostico, per un normale computer domestico, è anche il più comune. In queste situazioni si possono seguire diverse strade:
-- Provare Linux con un Live CD (come Knoppix) che permette di usare Linux senza installarlo sull'harddisk, eseguendo il boot direttamente dal CDROM. Non è una soluzione definitiva (un sismile approccio ha degli inevitabili limiti e minori performance) ma può essere un ottimo modo per iniziare a familiarizzare con Linux senza alcun bisogno di installarlo e in completa sicurezza.
-- Procurarsi un hard disk aggiuntivo (di 1 GB o più) e aggiungerlo al proprio PC (indicativamente come Secondary Master, lasciando Windows sul Primary Master) per poterlo usare liberamente con Linux.
-- Creare dello spazio sull'hard disk esistente: se si hanno partizioni quasi vuote, spostare i dati presenti, in altre partizioni Windows e "sacrificare" la partizione semi-vuota per l'installazione Linux; alternativamente considerare la possibilità di usare strumenti come Fips o Partition Magic per Windows o Parted per Linux(lanciato da un Live CD) per ridurre la dimensione delle partizioni esistenti e creare spazio per Linux.
Fare massima attenzione a simili procedure: se fatte in modo scorretto o interrotte (per esempio da un blackout) possono definitivamente compromettere i dati presenti sul proprio hard disk. Un backup preventivo dei propri file, seppur di solito non necessario, è generalmente consigliato.
-- Installazione su PC con hardware particolare o architetture non basate su processori tipo Intel o AMD (i386).
In questi casi la procedura di installazione può essere più complicata (per la richiesta di driver aggiuntivi per gestire l'accesso al disco) o non riconoscere alcuni dispositivi e schede (per esempio i modem interni).
Se si vuole installare Linux su Mac o sistemi con architettura non Intel-like, sono necessarie distribuzioni particolari e procedure generalmente più complesse. 

Installare NFS su Linux
Per poter abilitare un server NFS in ambiente Linux occorre semplicemente configurare e compilare il kernel con il supporto NFS server (anche client se si desidera) e installare tramite rpm o sorgenti le nfs-utils, ovvero tutti i comandi per la gestione dei demoni e delle share. 
Nel caso della distribuzione RedHat, il kernel di default supporta sia NFS server che client tramite moduli, ma nel caso si utilizzi una distribuzione differente o più semplicemente si è disabilitato il supporto di NFS nel kernel, occorre riabilitarlo, con la ricompilazione del kernel. 
La sezione relativa a NFS è File-System ---> Network File System --->NFS client o server, come si può vedere dalla screenshot:
Si consiglia di evitare di utilizzare i moduli, per evitare problemi con le dipendenze.
Abilitato il supporto in kernel space occorre installare tramite rpm o sorgenti 
portmap le nfs-utils, il primo è un servizio che deve essere abilitato sia sul client che sul server e si occupa di convertire da RPC program port in DARPA protocol port numbers, il secondo invece, è l'insieme di binari,librerie, manuali e tutto ciò che serve per supportare e gestire NFS in user space.
Installazione delle nfs-utils
Il modo più veloce è certamente quello di utilizzare i package come RPM o DEB
[root@GIOVE root]# rpm -ihv nfs-utils-1.0.1-2.i386.rpm 
Preparing... ########################################### [100%]
1:nfs-utils ########################################### [100%]
[root@GIOVE root]# rpm -qil nfs-utils
[...]
Script per la gestione dei demoni per nfs server
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
binari dei demoni e utility
/sbin/rpc.lockd
/sbin/rpc.statd
/sbin/rpcdebug
/usr/sbin/exportfs
/usr/sbin/nfsstat
/usr/sbin/nhfsstone
/usr/sbin/rpc.mountd
/usr/sbin/rpc.nfsd
/usr/sbin/showmount
Documentazione e manuali
/usr/share/doc/nfs-utils-1.0.1
/usr/share/doc/nfs-utils-1.0.1/ChangeLog
/usr/share/doc/nfs-utils-1.0.1/INSTALL
/usr/share/doc/nfs-utils-1.0.1/KNOWNBUGS
/usr/share/doc/nfs-utils-1.0.1/NEW
/usr/share/doc/nfs-utils-1.0.1/README
[...]
/usr/share/man/man5/exports.5.gz
/usr/share/man/man8/exportfs.8.gz
/usr/share/man/man8/lockd.8.gz
/usr/share/man/man8/mountd.8.gz
/usr/share/man/man8/nfsd.8.gz
/usr/share/man/man8/nfsstat.8.gz
/usr/share/man/man8/nhfsgraph.8.gz
/usr/share/man/man8/nhfsnums.8.gz
/usr/share/man/man8/nhfsrun.8.gz
/usr/share/man/man8/nhfsstone.8.gz
/usr/share/man/man8/rpc.lockd.8.gz
/usr/share/man/man8/rpc.mountd.8.gz
/usr/share/man/man8/rpc.nfsd.8.gz
/usr/share/man/man8/rpc.statd.8.gz
/usr/share/man/man8/showmount.8.gz
/usr/share/man/man8/statd.8.gz
File di supporto per tenere traccia delle share montate
/var/lib/nfs
/var/lib/nfs/etab
/var/lib/nfs/rmtab
/var/lib/nfs/statd
/var/lib/nfs/xta
Nel caso in cui si vogliano compilare direttamente i sorgenti è possibile scaricarli dal seguente indirizzo:
http://sourceforge.net/project/showfiles.php?group_id=14&release_id=100684. 
[root@GIOVE root]# tar zxvf nfs-utils-1.0.1.tar.gz
[...]
nfs-utils-1.0.1/utils/statd/statd.man
nfs-utils-1.0.1/utils/statd/state.c
nfs-utils-1.0.1/utils/statd/svc_run.c
nfs-utils-1.0.1/utils/statd/system.h
nfs-utils-1.0.1/utils/statd/version.h
[root@GIOVE root]# cd nfs-utils-1.0.1 
[root@GIOVE nfs-utils-1.0.1]# ./configure 
[...]
creating ./config.status
creating config.mk
creating nfs-utils.spec
creating utils/Makefile
creating support/include/config.h
[root@GIOVE nfs-utils-1.0.1]# make
Making all in tools
Making all in rpcgen
gcc -O2 -I../../support/include -Wall -pipe -DVERSION="\"nfs-utils 1.0.1\"" -DNFS3_SUPPORTED -c -o rpc_clntout.o rpc_clntout.c
[...]
[root@GIOVE nfs-utils-1.0.1]# make install
Making install in tools
Making install in rpcgen
Making install in getiversion
Making install in getkversion
Making install in rpcdebug
Making install in locktest
Making install in support
Making install in include
Making install in nfs
Making install in export
Making install in lib
Making install in misc
Making install in utils
Making install in exportfs
[...]

Nella distribuzione RedHat il package portmap viene installato di default poichè è richiesto da altri servizi come ad esempio NIS. 
[root@GIOVE root]# rpm -qil portmap
[...]
Script per las gestione del servizio
/etc/rc.d/init.d/portmap
Binari
/sbin/portmap
/usr/sbin/pmap_dump
/usr/sbin/pmap_set
Documentazione e manuali
/usr/share/doc/portmap-4.0
/usr/share/doc/portmap-4.0/BLURB
/usr/share/doc/portmap-4.0/CHANGES
/usr/share/doc/portmap-4.0/README
/usr/share/man/man8/pmap_dump.8.gz
/usr/share/man/man8/pmap_set.8.gz
/usr/share/man/man8/portmap.8.gz
Sia gli RPM di binari sia di sorgenti di portmap sono disponibili al seguente indirizzo:
http://rpmfind.net/linux/rpm2html/search.php?query=portmap&submit=Search+...
Esempio di installazione da sorgente:
Download dei sorgenti in formato rpm
[root@GIOVE root]# wget ftp://rpmfind.net/linux/redhat/8.0/en/os/i386/SRPMS/portmap-4.0-46.src.rpm
--15:14:02-- ftp://rpmfind.net/linux/redhat/8.0/en/os/i386/SRPMS/portmap-4.0-46.src.rpm
=> `portmap-4.0-46.src.rpm'
[root@GIOVE root]# rpm -ihv portmap-4.0-46.src.rpm 
1:portmap ########################################### [100%]
Costruzione dei binari tramite l'utility rpmbuild
[root@GIOVE root]# rpmbuild -bb /usr/src/redhat/SPECS/portmap.spec
[...]
Una volta costruito il package lo ritroviamo nella seguente directory
/usr/src/redhat/RPMS/i386/ 

Installazione di MySQL
Installazione di MySQL tramite RPM e compilazione dei sorgenti. 
E' possibile effettuare il download di MySQL, sia in formato RPM che in formato sorgente disponibile per diverse piattaforme, presso il sito del produttore www.mysql.com oppure tramite uno dei suo mirror.
INSTALLAZIONE TRAMITE COMPILAZIONE DEI SORGENTI 
L'installazione di MySql tramite sorgenti consiste nell'effettuare i tre classici step configure, make e make install. Prima di procedere è necessario creare l'utente ed il relativo gruppo che verrà utilizzato per fare girare il server: 
root@Joker:/software# groupadd mysql 
Creazione del gruppo 
root@Joker:/software# useradd -g mysql mysql 
Creazione dell'utente 
SCOMPATTAZIONE 
Per prima cosa si procede alla scompattazione dei sorgenti: 
root@Joker:/software# tar -xzvf mysql-4.0.15a.tar.gz 
mysql-4.0.15a/ 
mysql-4.0.15a/bdb/ 
mysql-4.0.15a/bdb/db/ 
mysql-4.0.15a/bdb/db/db_upg.c 
[...]
CONFIGURAZIONE 
Una volta scompattati i sorgenti è possibile configurare le opzioni di installazione tramite lo script configure: 
root@Joker:/software# cd mysql-4.0.15a 
root@Joker:/software/mysql-4.0.15a# ./configure --help 
Tramite l'opzione help è possibile visualizzare quali sono le opzioni disponibili per personalizzare al meglio l'installazione del server 
root@Joker:/software/mysql-4.0.15a# ./configure --prefix=/usr/bin 
checking build system type... i586-pc-linux 
checking host system type... i586-pc-linux 
In questo caso viene indicato di utilizzare il percorso /usr/bin per installare gli eseguibili del server 
COMPILAZIONE 
Una volta eseguita la configurazione è necessario compilare i sorgenti: 
root@Joker:/software/mysql-4.0.15a# make 
cd libmysql; make link_sources 
make[1]: Entering directory `/software/mysql-4.0.15a/libmysql' 
[...] 
INSTALLAZIONE 
L'ultimo passo da compiere è infine l'installazione: 
root@Joker:/software/mysql-4.0.15a# make install 
Una volta installato il software si devono creare le tabelle di grant, contententi i permessi per gli utenti che devono accedere al MySql: 
root@Joker:/# mysql_install_db 
Preparing host table 
Preparing user table 
Preparing func table 
Preparing tables_priv table 
Preparing columns_priv table 
Installing all prepared tables 
INSTALLAZIONE TRAMITE RPM 
I pacchetti disponibili per il download e l'installazione sono diversi, ma quelli strettamente necessari all'installazione di un server sono sostanzialmente due: il server vero e proprio ed un client per la gestione di MySQL da command line. 
Per evitare problemi di dipendenze, si procede prima con l'installazione del software client: 
[root@vagante software]# rpm -ivh MySQL-client-4.0.17-0.i386.rpm 
Preparing... ########################################### [100%] 
1:MySQL-client ########################################### [100%] 
Installazione del client
Successivamene si prosegue con l'installazione del server: 
[root@vagante software]# rpm -ivh 
MySQL-server-4.0.17-0.i386.rpm Preparing... 
########################################### [100%] 1:MySQL-server 
########################################### [100%] Preparing db table 
Preparing host table 
Preparing user table 
Preparing func table 
Preparing tables_priv table 
Preparing columns_priv table 
Installing all prepared tables 
Vengono inizializzate le tabelle di GRANT (quelle riguardanti i permessi di accesso ai database) e creato l'utente amministratore di MySQL. NOTA: L'installazione tramite RPM a partire dalla versione 4 di MySQL esegue questa operazione automaticamente. Installando la versione 3.23 e' ancora necessario eseguirla manualmente. 
031224 20:26:35 /usr/sbin/mysqld: Shutdown Complete 
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! 
This is done with: 
/usr/bin/mysqladmin -u root password 'new-password' 
/usr/bin/mysqladmin -u root -h vagante password 'new-password' 
See the manual for more instructions. 
Ci viene ricordato di assegnare una password all'utente di root di MySQL 
Please report any problems with the /usr/bin/mysqlbug script! 
The latest information about MySQL is available on the web at http://www.mysql.com 
Support MySQL by buying support/licenses at https://order.mysql.com 
Durante l'installazione viene creata anche la directory dati di MySQL /var/lib/mysql, la quale deve essere di proprietà dell'account utente utilizzato per far girare il server. E' buona norma che solo questo utente abbia l'accesso a questa directory e che i relativi permessi siano settati a 700 al fine di evitare possibili problemi di sicurezza.
CONFIGURAZIONE POST INSTALLAZIONE 
Una volta avviato il server tramite /etc/rc.d/init.d/mysql start oppure tramite l'utilty service, se presente, con service mysql start è necessario collegarsi ad esso per assegnare una password all'utente root. L'utente root di MySQL ha i diritti per amministrare ogni componente del server, e di default viene creato senza password. 
E' possibile settare la password di root grazie al tool mysqladmin: 
[root@vagante software]# mysqladmin -u root password db3mendo
E' possibile utilizzare anche un secondo metodo per assegnare la password di root del server: [root@vagante software]# mysql -u root 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 6 to server version: 4.0.17-standard 
Type 'help;' or '\h' for help. 
Type '\c' to clear the buffer. 
mysql> set PASSWORD FOR root = PASSWORD("db3mendo"); 
Query 
OK, 0 rows affected (0.00 sec) 
mysql> 
In questo secondo modo, si comunica in modo interattivo con MySQL tramite una console appositamente creata
Una volta terminata la configurazione post installazione non resta settare a seconda del sistema la modalita' di avvio del server. 

Installazione di MySQL in Windows
Installazione di MySQL e gestione del servizio in ambiente Windows. 
E' possibile effettuare il download di MySQL, sia in formato RPM che in formato sorgente disponibile per diverse piattaforme, presso il sito del produttore www.mysql.com oppure tramite uno dei suo mirror.
DOWNLOAD 
La versione per Windows di MySQL, come quella per gli ambienti Unix, può essere scaricata dal sito del produttore www.mysql.com nella sezione downloads oppure presso un suo mirror. MySQL è fornito attraverso un file zippato, una volta decompresso sarà possibile lanciare il programma di installazione vero e proprio dal nome setup.exe.
INSTALLAZIONE 
Una volta lanciato setup.exe il programma di installazione ci informa che, qualora si intenda installare il server in una posizione differente da C:\MYSQL (la posizione di default) o si intenda avviarlo come servizio è necesario che esista il file di configurazione C:\MY.CNF contentente le seguenti informazioni: 
[mysqld] 
basedir=E:/installation-path/ 
datadir=E:/data-path/
Sono disponibili quattro tipi di file di configurazione d'esempio, my-small.cnf, my-medium.cnf, my-large.cnf, my-huge.cnf con parametri diversi a seconda del dimensionamento del server.
Il setup permette di scegliere fra tre diversi tipi di installazione tipica, compatta e personalizzata, salvo configurazioni particolari è consigliato sceglere quella tipica.
Una volta completata l'installazione, sotta la directory /BIN è possibile trovare quattro tipi di eseguibili per avviare il server:
mysqld: con controllo dell'allocazione della memoria, supporto per link simbolici e tabelle delle transazioni;
mysqld-opt: ottimizzato senza supporto per le tabelle delle transazioni;
mysqld-nt: ottimizzato con il supporto per le pipe con nome di NT;
mysqld-max: ottimizzato con il supporto per le tabelle delle transazioni;
mysqld-max-nt: ottimizzato con il supporto per le pipe con nome di NT e le tabelle delle transazioni;
GESTIONE DEL SERVIZIO 
Per installare il servizio è necessario utilizzare il parametro -install : 
C:\> c:\mysql\bin\mysqld-nt -install 
Service successfully installed. 
A questo punto è possibile avviare e fermare il il server attraverso la console MMC servizi presente in Strumenti di amministrazione, oppure tramite il comando net: 
C:\> net start mysql 
Servizio MySQL in fase di avvio. 
Avvio del servizio MySQL riuscito. 
Avvia MySQL server 
C:\> net stop mysql 
Il servizio MySQL sta per essere arrestato. 
Servizio MySQL arrestato. 
Ferma MySQL server 
Una volta impostata la password di amministrazione di MySQL: 
C:\mysql\bin> mysqladmin -u root password 1pizz8 
il server è pronto per l'uso. 

Installazione di PHP tramite rpm
L'alternativa per l'installazione del modulo di PHP su server web Apache è fornito dagli RPM, questa è una soluzione che comporta il vantaggio di una installazione più semplice a fronte di una minore possibilità di configurazione e customizzazione dell'installazione del modulo.
E' adatta a chi ha poca esperienza e soprattutto per chi ha fretta di preparare un server di test in breve tempo. 
La prima cosa da fare è reperire sul web il pacchetto RPM desiderato, ad es. php-4.1.2-7.i386.rpm.
Successivamente non ci resta che installare PHP con il seguente comando:
rpm -iv php-4.1.2-7.i386.rpm
Riavviare apache dopo aver aggiunto le seguenti righe al file di configurazione di Apache httpd.conf:
# Dynamic Shared Object (DSO) Support 
LoadModule php4_module libexec/libphp4.so 
AddModule mod_php4.c
AddType application/x-httpd-php .php .php3 
AddType application/x-httpd-php-source .phps 

Installazione di Samba
Installazione step by step di samba attraverso i pacchetti RPM e la compilazione dei sorgenti. 
TAR.GZ - COMPILAZIONE DEI SORGENTI:
- Download dei sorgenti
Si scarica il tar.gz di Samba dal sito ufficiale o uno dei suoi mirror:
root@SATURNO root]# wget ftp://it.samba.org/pub/samba/samba-latest.tar.bz2
--16:45:01-- ftp://it.samba.org/pub/samba/samba-latest.tar.bz2
=> `samba-latest.tar.bz2'
Resolving it.samba.org... done.
Connecting to it.samba.org[217.56.103.6]:21...
[...]
- Scompattazione sorgenti
[root@SATURNO root]# tar -jxvf samba-latest.tar.bz2 
[..]
[root@SATURNO root]# cd samba-2.2.8/
[root@SATURNO samba-2.2.8]# ls -l
total 102
-rw-r--r-- 1 783 783 17982 May 4 1996 COPYING
Directory contenente documentazione di vario genere e in vari formati
drwxr-xr-x 10 783 783 1024 Feb 5 17:24 docs
Directory contenente esempi di file di configurazione oltre a tools o script per la gestione della configurazione di samba
drwxr-xr-x 16 783 783 1024 Mar 15 05:28 examples
-rw-r--r-- 1 783 783 4551 Apr 30 2002 Manifest
Directory contenente files di configurazione e relativi script per la creazione di package per vari OS e distribuzioni di Linux
drwxr-xr-x 15 783 783 1024 May 3 2002 packaging
Directory contenente sorgenti di un semplice monitoring della shared memory
drwxr-xr-x 2 783 783 1024 May 3 2002 pcp
-rw-r--r-- 1 783 783 0 Aug 21 1997 Read-Manifest-Now
-rw-r--r-- 1 783 783 8412 Feb 28 16:56 README
-rw-r--r-- 1 783 783 1894 Apr 14 2001 Roadmap
Directory contenente i sorgenti
drwxr-xr-x 33 783 783 1024 Mar 15 05:28 source
Directory contenente il tool swat per la configurazione di samba via web
drwxr-xr-x 5 783 783 1024 Mar 15 05:28 swat
Directory contenente, script, sorgenti e altro per eseguire alcuni test su samba
drwxr-xr-x 9 783 783 1024 Mar 15 05:28 testsuite
-rw-rw-r-- 1 783 783 59481 Mar 15 05:44 WHATSNEW.txt
-Compilazione sorgenti
La compilazione dei sorgenti avviene come nella maggior parte dei casi con il lancio dello script configure per il settaggio di alcuni parametri e il comando make per la compilazione e installazione dei sorgenti.
[root@SATURNO samba-2.2.8]# cd source/
Per richiamare l'elenco delle opzioni e la relativa spiegazione, lanciare il seguente comando:
[root@SATURNO source]#./configure --help
Di seguito sono riportate le opzioni con relativa spiegazione utilizzati per la creazione dell' RPM per la distribuzione redhat.
Imposta il prefisso del path di installazione
--prefix=%{prefix} \
Imposta la directory ove il sistema scrive tutte quelle informazioni come log, pidfile etc.
--localstatedir=/var \
Imposta la directory contenente tutti i file di configurazione
--with-configdir=/etc/samba \
Specifica la directory ove viene messo smbpasswd
--with-privatedir=/etc/samba \
Specifica la directory dove risiedono i code page files
--with-codepagedir=/etc/codepages \
Abilita l'uso dei path fhs-compliant
--with-fhs \
Abilita il supporto per quota
--with-quotas \
Include il supporto per MS Dfs 
--with-msdfs \
Abilita il supporto per smbmount
--with-smbmount \
Abilità il supporto per l'uso di PAM password database
--with-pam \
Include anche il modulo smbpass
--with-pam_smbpass \
Abilita il supporto del logging via syslog
--with-syslog \
Include utmp accounting
--with-utmp \
Specifica dove vengono installati i file riguradanti a swat 
--with-sambabook=%{prefix}/share/swat/using_samba \
--with-swatdir=%{prefix}/share/swat \
Abilita la compilazione delle librerie dinamiche del client
--with-libsmbclient 
[root@SATURNO source]# ./configure --prefix=/usr \
--localstatedir=/var \
--with-configdir=/etc/samba \
--with-privatedir=/etc/samba \
--with-codepagedir=/etc/codepages \
--with-fhs \
--with-quotas \
--with-msdfs \
--with-smbmount \
--with-pam \
--with-pam_smbpass \
--with-syslog \
--with-utmp \
--with-sambabook=/usr/share/swat/using_samba \
--with-swatdir=/usr/share/swat
[...]
checking for poptGetContext in -lpopt... yes
checking whether to use included popt... no
checking configure summary... yes
updating cache ./config.cache
creating ./config.status
creating include/stamp-h
creating Makefile
creating script/findsmb
creating include/config.h
Compilazione dei sorgenti
[root@SATURNO source]# make
Using FLAGS = -O -Iinclude -I./include -I./ubiqx -I./smbwrapper -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DLOGFILEBASE="/var/log/samba" -DCONFIGFILE="/etc/samba/smb.conf" -DLMHOSTSFILE="/etc/samba/lmhosts" -DSWATDIR="/usr/share/swat" -DSBINDIR="/usr/sbin" -DLOCKDIR="/var/cache/samba" -DCODEPAGEDIR="/etc/codepages" -DDRIVERFILE="/etc/samba/printers.def" -DBINDIR="/usr/bin" -DPIDDIR="/var/run/samba" -DLIBDIR="/usr/lib" -DHAVE_INCLUDES_H -DPASSWD_PROGRAM="/usr/bin/passwd" -DSMB_PASSWD_FILE="/etc/samba/smbpasswd" -DTDB_PASSWD_FILE="/etc/samba/smbpasswd.tdb"
[...]
Installazione
[root@SATURNO source]# make install
[...]
INSTALLAZIONE TRAMITE RPM 
L'installazione completa di samba via rpm richiede più package scaricabili da repository come http://www.rpmfind.net oppure nel caso di Redhat ci si può appoggiare anche al suo repository di errata. 
Supponiamo di aver scaricato i seguenti RPM:
Package principale contenente documentazione, manuali e binari per attivare il servizio.
samba-2.2.7-4.8.0.i386.rpm 
Package contenente le utility e relativi manuali per il mounting delle share
samba-client-2.2.7-4.8.0.i386.rpm 
Package contenente file di necessari sia al client che al server come l'utility smbpasswd o le code pages
samba-common-2.2.7-4.8.0.i386.rpm 
Utility per la configurazione di samba via web
samba-swat-2.2.7-4.8.0.i386.rpm
Installazioe di tutti i vari rpm relativi a samba
[root@SATURNO root]# rpm -ihv samba-*.rpm
warning: samba-2.2.7-4.8.0.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing... ########################################### [100%]
1:samba-common ########################################### [ 25%]
2:samba ########################################### [ 50%]
3:samba-client ########################################### [ 75%]
4:samba-swat ########################################### [100%]
Visualizzazione di ciò che i vari rpm hanno installato
[root@SATURNO root]# rpm -qil samba
[...]
File di configurazione per logrotate
/etc/logrotate.d/samba
File di configurazione per PAM
/etc/pam.d/samba
Script di gestione del servizio
/etc/rc.d/init.d/smb
File contenente la correlazione unix_name e smb_name
/etc/samba/smbusers
File contenente le opzioni passate ai vari demoni
/etc/sysconfig/samba
Uility per la creazione di file unicode per samba
/usr/bin/make_unicodemap
Script relativo alla gestione del file smbpasswd
/usr/bin/mksmbpasswd.sh
Script per la gestione degli utenti samba
/usr/bin/smbadduser
/usr/bin/smbcontrol
/usr/bin/smbstatus
/usr/bin/tdbbackup
Librerie e file header
/usr/include/libsmbclient.h
/usr/lib/libsmbclient.a
/usr/lib/samba/vfs
/usr/lib/samba/vfs/recycle.so
Binari relativi ai demoni
/usr/sbin/nmbd
/usr/sbin/smbd
Documnetazione
/usr/share/doc/samba-2.2.7
/usr/share/doc/samba-2.2.7/COPYING
/usr/share/doc/samba-2.2.7/LDAP
/usr/share/doc/samba-2.2.7/LDAP/README
/usr/share/doc/samba-2.2.7/LDAP/export_smbpasswd.pl
/usr/share/doc/samba-2.2.7/LDAP/import_smbpasswd.pl
/usr/share/doc/samba-2.2.7/LDAP/ldapchpasswd
/usr/share/doc/samba-2.2.7/LDAP/ldapsync.pl
[...]
Manuali
/usr/share/man/man1/make_unicodemap.1.gz
/usr/share/man/man1/smbcontrol.1.gz
/usr/share/man/man1/smbstatus.1.gz
/usr/share/man/man5/smbpasswd.5.gz
/usr/share/man/man7/samba.7.gz
/usr/share/man/man8/nmbd.8.gz
/usr/share/man/man8/pdbedit.8.gz
/usr/share/man/man8/smbd.8.gz
Directory di appoggio
/var/cache/samba
/var/log/samba
/var/run/samba
/var/spool/samba
[root@SATURNO root]# rpm -qil samba-common
[...]
Script di gestione del demone windbind
/etc/rc.d/init.d/winbind
File di configurazione
/etc/samba
/etc/samba/lmhosts
/etc/samba/smb.conf
Librerie dinamiche
/lib/libnss_winbind.so
/lib/libnss_winbind.so.2
/lib/libnss_wins.so
/lib/libnss_wins.so.2
/lib/security/pam_winbind.so
utility e binari di vario genere per l'amministrazione del servizio e degli utenti di samba
/usr/bin/make_printerdef
/usr/bin/make_smbcodepage
/usr/bin/smbpasswd
/usr/bin/testparm
/usr/bin/testprns
/usr/bin/wbinfo
/usr/sbin/winbindd
Manuali
/usr/share/man/man1/make_smbcodepage.1.gz
/usr/share/man/man1/testparm.1.gz
/usr/share/man/man1/testprns.1.gz
/usr/share/man/man1/wbinfo.1.gz
/usr/share/man/man5/lmhosts.5.gz
/usr/share/man/man5/smb.conf.5.gz
/usr/share/man/man8/smbpasswd.8.gz
/usr/share/man/man8/winbindd.8.gz
Directory contenente i codepages
/usr/share/samba
/usr/share/samba/codepages
[...]
[root@SATURNO root]# rpm -qil samba-client
[...]
links a /usr/bin/smbmount,binario per il mounting delle share 
/sbin/mount.smb
/sbin/mount.smbfs
Utility per l'interrogazione del server smb e per il mountig delle share
/usr/bin/nmblookup
/usr/bin/rpcclient
/usr/bin/smbcacls
/usr/bin/smbclient
/usr/bin/smbmnt
/usr/bin/smbmount
/usr/bin/smbprint
/usr/bin/smbspool
/usr/bin/smbtar
/usr/bin/smbumount
Manuali
/usr/share/man/man1/nmblookup.1.gz
/usr/share/man/man1/rpcclient.1.gz
/usr/share/man/man1/smbcacls.1.gz
/usr/share/man/man1/smbclient.1.gz
/usr/share/man/man1/smbtar.1.gz
/usr/share/man/man8/smbmnt.8.gz
/usr/share/man/man8/smbmount.8.gz
/usr/share/man/man8/smbspool.8.gz
/usr/share/man/man8/smbumount.8.gz
Per la gestione del servizio ci si può appoggiare allo script: /etc/init.d/smb, specificando come parametro l'azione da eseguire, esempio start, stop o restart.
Opzioni disponibili:
- start : Avvia il servizio smb
- stop : killa i processi smb
- restart : Esegue in successione stop e start
- reload : esegue il reload del file di configurazione
- status : visualizza lo status dei demoni
- condrestart : Esegue il restart del servizio 
Per richiamare le singole opzioni utilizzabili lanciare lo script senza argomenti
[root@SATURNO root]# /etc/init.d/smb 
Usage: /etc/init.d/smb {start|stop|restart|reload|status|condrestart}
Esempi di avvio, restart e stop
[root@SATURNO root]# /etc/init.d/smb start
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]
[root@SATURNO root]# /etc/init.d/smb restart
Shutting down SMB services: [ OK ]
Shutting down NMB services: [ OK ]
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]
[root@SATURNO root]# /etc/init.d/smb stop 
Shutting down SMB services: [ OK ]
Shutting down NMB services: [ OK ] 

Installazione di Sendmail
Generalmente su gran parte delle distribuzioni Linux, Sendmail viene installato di default e in molti casi viene eseguito all'avvio per restare in ascolto sulla porta 25 del localhost.
In questo modo viene usato per inviare la posta locale, ma non rimande in ascolto su un indirizzo pubblico.
Il pacchetto con cui viene fornito è sendmail ma in molti casi, se si vuole usare Sendmail su un server di posta SMTP che deve ricevere posta via rete, è necessario installare anche il pacchetto sendmail-cf che contiene le macro M4 necessarie per processare il file /etc/mail/sendmail.mc (avente un formato semplice e comodo da modificare) e generare il file di configurazione /etc/mail/sendmail.cf (con una sintassi piuttosto complessa ed intricata. 
Installazione da RPM
La procedura è la solita. Ecco un esempio su Fedora 2:
rpm -i sendmail-8.12.11-4.6.i386.rpm
Fra i file installati si segnalano:
/etc/mail/ La directory dove sono inseriti tutti i file di configurazione 
/etc/mail/access Il file che definiscea chi Sendmail permette il relay e a quali host vengono rifiutati
/etc/mail/local-host-names L'elenco dei domini per cui Sendmail riceve posta
/etc/mail/sendmail.cf Il file di configurazione
/etc/mail/sendmail.mc Il file M4 "human readable" con cui viene generato sendmail.cf
/etc/rc.d/init.d/sendmail Lo script di avvio e gestione del servizio Sendmail
/etc/sysconfig/sendmail Parametri e impostazioni che definiscono con quali argomenti viene lanciato Sendmail
/usr/sbin/sendmail.sendmail Il programma sendmail vero e proprio, per permettere la coesistenza con altri MTA (Postfix) il comando /usr/sbin/sendmail è un link che punta al file /etc/alternatives/mta che a sua volta è un link al programma vero e proprio
/var/log/mail/statistics File di statistiche sui movimenti di posta
/var/spool/mqueue La directory che contiene i messaggi di posta in coda
Installazione da sorgenti
Compilare Sendmail dai sorgenti è particolarmente semplice. Basta scaricare dal sito ufficiale i sorgenti:
[al@localhost al]$ wget ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.12.11.tar.gz
Scompattarli:
[al@localhost al]$ tar -zxvf sendmail.8.12.11.tar.gz
Lanciare lo script Build che provvede a compilare i sorgenti (di fatto è un make):
[al@localhost al]$ cd sendmail-8.12.11 ; ./Build
Copiare i file nelle directory di installazione (bisogna avere i privilegi di root):
[al@localhost sendmail-8.12.11]$ su ; ./Build install 

Installazione e compilazione di PHP
Per poter procedere con l'installazione del modulo di PHP per Apache prima di tutto bisogna procurarsi dal sito ufficiale www.php.net l'ultima versione stabile di PHP. 
Il passo successivo consiste nell'estrarre e scompattare l'archivio tar.gz appena scaricato.
Successivamente bisogna compilare PHP secondo le proprie esigenze e in base ai supporti desiderati.
Un esempio di compilazione standard può essere il seguente:
./configure --with-mysql --with-apxs=/usr/local/apache/bin --with-config-file-path=/usr/local/apache/conf 
In sostanza dopo essersi posizionati nella cartella contenente l'archivio PHP scompattato si richiama il comando ./configure a cui vengono aggiunte le opzioni apxs=... in pratica viene detto a PHP dove risiede il binario apxs (cioè nella cartella bin di apache), --with-mysql ovvero viene compilato PHP con il supporto per il database server mySQL e dove risiedono i files di configurazione di Apache. Ovviamente è facile intuire che se si desidera utilizzare altre opzioni basta compilare i sorgenti con l'aggiunta dell'opzione desiderata (es. --with-imap per il supporto imap di php).
In seguito bisogna procedere con il make e il make install per completare l'installazione.
A questo punto dobbiamo "dire" ad Apache quali file deve parsare con il compilatore PHP, in pratica basta aggiungere in httpd.conf il seguente codice:
# Dynamic Shared Object (DSO) Support 
LoadModule php4_module libexec/libphp4.so 
AddModule mod_php4.c
AddType application/x-httpd-php .php .php3 
AddType application/x-httpd-php-source .phps
Ultimi due passi da compiere sono la copia di php.ini-dist come php.ini nella directory conf di Apache e il riavvio del servizio web. 

Installazione di PHP tramite rpm
L'alternativa per l'installazione del modulo di PHP su server web Apache è fornito dagli RPM, questa è una soluzione che comporta il vantaggio di una installazione più semplice a fronte di una minore possibilità di configurazione e customizzazione dell'installazione del modulo.
E' adatta a chi ha poca esperienza e soprattutto per chi ha fretta di preparare un server di test in breve tempo.
La prima cosa da fare è reperire sul web il pacchetto RPM desiderato, ad es. php-4.1.2-7.i386.rpm.
Successivamente non ci resta che installare PHP con il seguente comando:
rpm -iv php-4.1.2-7.i386.rpm
Riavviare apache dopo aver aggiunto le seguenti righe al file di configurazione di Apache httpd.conf (versione 1.3):
# Dynamic Shared Object (DSO) Support
LoadModule php4_module libexec/libphp4.so
AddModule mod_php4.c
AddType application/x-httpd-php .php .php3
AddType application/x-httpd-php-source .phps

Installazione e configurazione di Tomcat
Tomcat è parte di Jakarta, progetto open source rilasciato sotto Apache Software License, che sviluppa e distribuisce soluzioni per la piattaforma Java. Tomcat è un servlet container usato per l'implementazione della tecnologia javaServlet e javaServerPages.
Le specifiche delle JavaServlet e JavaServerPages sono sviluppate dalla Sun.
In base alla versione di Tomcat si hanno le seguenti specifiche:
- Servlet/JSP Spec Tomcat versione
2.4 / 2.0 5.0.x (in fase di sviluppo )
2.3 / 1.2 4.1.12
2.2 / 1.1 3.3.1
Vediamo la procedura di installazione di Tomcat, usando direttamente i binari distribuiti sul sito ufficiale. 
1. Installazione JDK
Il primo passo è il download e l'installazione della piattaforma Java (SDK 1.3 o successive).
JDK 1.3: http://java.sun.com/j2se/1.3/
JDK 1.4: http://java.sun.com/j2se/1.4/download.html
Si possono scaricare direttamente in formato binario rpm, che va semplicemente eseguito. Es:
./j2sdk-1_4_0_03-linux-i586-rpm.bin
Questo pacchetto specifico mette i suoi file in /usr/java/j2sdk1.4.0_01/
2. Download di Apache Tomcat Server
Dal sito ufficiale http://jakarta.apache.org/ si può scaricare Tomcat si in formato binario, precompilato per il proprio sistema, che come sorgenti, da compilare a mano.
Nel nostro caso si sono scaricati e scompattatati i binari di Tomcat 4.0.6 in formato tar.gz:
tar -zxvf jakarta-tomcat-4.0.6.tar.gz
Viene creata una directory con varie sottodirectory. Fra queste si segnala la subdir conf dove risiedono tutti i file di configurazione (in formato XML) e bin dove si sono alcuni script e binari, tra cui quelli necessari per avviare e stoppare il server. 
3. Impostazioni custom
Può aver senso, a questo punto, impostare alcuni parametri custom: 
- Abilitazione l'ambiente di ROOT
Per default le applicazioni Web sono già abilitate in Tomcat 3, Tomcat 4.0.1-4.0.3, e alcune versioni di Tomcat 4.1. Ma in Tomcat 4.1.12 esse sono disabilitate per default. Per abilitarle, si deve scommentare la seguente linea nel file in install_dir/conf/server.xml:
<Context path="" docBase="ROOT" debug="0"/>
- Abilitazione dell'invoker delle servlet
In Tomcat 4.1.12, l'invoker è stato disabilitato per default, questo impedisce l'esecuzione di applet esterne che non siano espressamente mappate nel file di configurazione. Per abilitare l'invoker delle servlet, togliere il commento ai seguenti elementi di servlet-mapping in install_dir/conf/web.xml:
<servlet-mapping>
<servlet-name>invoker </servlet-name>
<url-pattern>/servlet/* </url-pattern>
<servlet-mapping>
- Modifica della porta in LISTENING
Per cambiare la porta su cui ascolta il server, editare install_dir/conf/server.xml e cambiare gli attributi della porta Connector element da 8080 alla porta che si desidera (es: 80).
<Connector
className="org.apache.catalina.connector.http.HttpConnector"
port="80" .../>
- Attivazione del Servlet Reloading 
Per attivare il servlet reloading, editare install_dir/conf/server.xml e cercare il seguente commento:
< Define properties for each web application. This is only needed
if you want to set non-default properties, or have web application
document roots in places other than the virtual host's appBase
directory. > 
Inserire quindi seguente linea:
<DefaultContext reloadable="true"/> 
Assicurarsi di fare una copia di backup server.xml prima di fare queste modifiche.
4. Impostazione delle variabili d'ambiente JAVA_HOME e JAVA_CATALINA
Prima di avviare Tomcat vanno impostate alcune variabili d'ambiente:
JAVA_HOME, dove è collocato il JDK e JAVA_CATALINA dove è collocato Tomcat. Per esempio:
export JAVA_HOME=/usr/java/j2sdk1.4.0_01/
export JAVA_CATALINA=/home/web/jakarta-tomcat-4.0.6/
5. Avvio e test del Server
Eseguire install_dir/bin/startup.sh (su Unix/Linux) per avviare Tomcat.
Per testare se funziona aprire un browser locale e andare all' URL http://localhost:8080/ (si presumo che non si sia modificata la porta di default 8080)
Per fermare il Server: install_dir/bin/shutdown.sh. 

Installazione OpenSSL
OpenSSL permette di implementare il protocollo SSL V2/V3 (Secure Sockets Layer) e il protocollo TLS V1 (Transport Layer Security) e consiste in un insieme di librerie per uso generale utilizzabili da tezri programmi. 
E' un progetto interamente sviluppato da volontari e si basa sulle librerie SSLeay sviluppate da Eric A. Young e Tim J. Hudson. Le librerie non sono soggette a licenza GPL ma ad una licenza Apache-Style ovvero sia ha la possibilità di utilizzarle anche per uso commerciale ma con alcune limitazioni espresse nella licenza.
L'installazione tramite sorgenti o binari si effettua come qualsiasi altro package.
Procedura di massima per l'installazione di OpenSSL tramite sorgenti
- Scaricare i sorgenti dal sito ufficiale e verificare MD5Sum.
- Scompattare il package:
[root@dido src]# tar zxvf openssl-0.9.6g.tar.gz
- Lanciare lo script configure con le opzioni che si preferiscono.
Storicamente la directory di installazione di OpenSSL e' /usr/local/ssl:
[root@dido src]# cd openssl-0.9.6g
E' possibile richiamare l'elenco delle opzioni disponibili con il seguente comando
[root@dido openssl-0.9.6g]# ./config --help
[.....]
Lo script config dovrebbe in modo del tutto automatico capire per quale sistema si stanno compilando le librerie, nel caso in cui dovesse fallire è possibile intervenire manualmente specificando le direttive
[root@dido openssl-0.9.6g]# ./config
Operating system: i686-whatever-linux2
Configuring for linux-elf
Configuring for linux-elf
IsWindows=0
[...]
Da tenere presente che non e' necessario installare del tutto le librerie per installare mod_ssl, ma potrebbe essere necessario per altri package come OpenSSH.
- Compilare con il comando make con le varie opzioni per la compilazione ed installazione:
[root@dido openssl-0.9.6g]# make 
Per eseguire Test di verifica:
[root@dido openssl-0.9.6g]# make test
Per eseguire l'installazione delle librerie, binari e manuali
[root@dido openssl-0.9.6g]# make install
Oppure lanciare tutti e tre i comandi in una singola linea di comando
[root@dido openssl-0.9.6g]# make all test install > compile.log 
Compilazione delle librerie Dinamiche
E' possibile compilare OpenSSL in modo tale che vengano caricate come librerie dinamiche, la procedura cambia a seconda dell'OS ma chi utilizza Linux può appoggiarsi al comando make specificando come target linux-shared e spostare manualmente le librerie.
[root@dido openssl-0.9.6g]# make
[...]
[root@dido openssl-0.9.6g]# make test 
[...]
Occorre lanciare prima il comando make install poiché deve creare l'enviroment per librerie che si dovranno spostare manualmente
[root@dido openssl-0.9.6g]# make install
[...]
[root@dido openssl-0.9.6g]# make linux-shared
[...]
[[root@dido openssl-0.9.6g]# mv lib* /usr/local/apache/libexec/ssl
[root@dido openssl-0.9.6g]# chmod 0664 /usr/local/apache/libexec/ssl/lib* 

Installazione Squid tramite rpm  
Il proxy server è uno strumento che permette di condividere tra più client un singolo accesso ad Internet, gestendo una cache delle informazioni precedentemente scaricate che consente di risparmiare banda e velocizzare la navigazione.
SQUID è un software che ci permette di implementare un proxy server sulla nostra rete interna senza grandi difficoltà e con ottimi risultati. 
SQUID supporta oltre al protocollo HTTP anche FTP, Gopher, SSL e altri protocolli Internet.
L'installazione più semplice avviene tramite RPM, addirittura in molti casi l'installazione avviene direttamente dall'installazione della nostra distribuzione Linux. Per sapere se Squid è già installato sul nostro sistema è possibile verificarlo con il classico comando:
rpm -q squid
Se squid è già installato procedere con lo scaricamento dell'ultima release stabile per la propria distribuzione linux ed eseguire:
rpm -U squid-2.x.x-xx.i386.rpm
Nel caso non sia già installato eseguire invece il comando:
rpm -iv squid-2.x.x-xx.i386.rpm
A questo punto SQUID sarà installato nel nostro sistema ed avviabile tramite il comando /etc/init.d/squid start. Il primo avvio potrebbe impiegare un pò di tempo in quanto dovrà settare la cache in /var/spool/squid. Con il file di configurazione di default il servizio dovrebbe risultare da subito avviabile senza particolari interventi sulla configurazione e restare in ascolto sulla porta di default 3128.
E' probabile che a questo punto sia comunque necessario configurare squid per permettere di essere utilizzato dai client abilitati. Intervenire su /etc/squid/squid.conf (sempre ben commentato) per il tuning della configurazione. 

Installazione webmin
Segue lo standard output della procedura di installazione di WebMin 1.0.
Una volta installato si può accedere all'interfaccia di amministrazione collegandosi via browser alla porta 10000 della macchina su cui è stato installato. Es: http://eberk.intranet:10000/
[root@eberk diego]# wget http://switch.dl.sourceforge.net/sourceforge/webadmin/webmin-1.000.tar.gz 
--12:29:26-- http://switch.dl.sourceforge.net/sourceforge/webadmin/webmin-1.000.tar.gz
=> `webmin-1.000.tar.gz'
Resolving switch.dl.sourceforge.net... fatto.
Connecting to switch.dl.sourceforge.net[195.176.255.8]:80... connected.
HTTP richiesta inviata, aspetto la risposta... 200 OK
Lunghezza: 5,643,949 [application/x-gzip]
100%[====================================>] 5,643,949 60.15K/s ETA 00:00
12:30:59 (60.15 KB/s) - `webmin-1.000.tar.gz' salvato [5643949/5643949]
[root@eberk diego]# tar -zxvf webmin-1.000.tar.gz 
webmin-1.000/
webmin-1.000/config.cgi
[...]
webmin-1.000/mscstyle3/images/letters2/88.gif
[root@eberk diego]# cd webmin-1.000 
[root@eberk webmin-1.000]# ./setup.sh 
***********************************************************************
* Welcome to the Webmin setup script, version 1.000 *
***********************************************************************
Webmin is a web-based interface that allows Unix-like operating
systems and common Unix services to be easily administered.
Installing Webmin in /home/diego/webmin-1.000 ...
***********************************************************************
Webmin uses separate directories for configuration files and log files.
Unless you want to run multiple versions of Webmin at the same time
you can just accept the defaults.
Config file directory [/etc/webmin]: 
Log file directory [/var/webmin]:
***********************************************************************
Webmin is written entirely in Perl. Please enter the full path to the
Perl 5 interpreter on your system.
Full path to perl (default /usr/bin/perl): 
Testing Perl ...
Perl seems to be installed ok
***********************************************************************
Operating system name: Redhat Linux
Operating system version: 7.3
***********************************************************************
Webmin uses its own password protected web server to provide access
to the administration programs. The setup script needs to know :
- What port to run the web server on. There must not be another
web server already using this port.
- The login name required to access the web server.
- The password required to access the web server.
- The hostname of this system that the web server should use.
- If the webserver should use SSL (if your system supports it).
- Whether to start webmin at boot time.
Web server port (default 10000): 
Login name (default admin): eberk 
Login password: 
Password again: 
Web server host name (default eberk.intranet): 
The Perl SSLeay library is not installed. SSL not available.
Start Webmin at boot time (y/n): y 
***********************************************************************
Creating web server config files..
..done
Creating access control file..
..done
Inserting path to perl into scripts..
..done
Creating start and stop scripts..
..done
Copying config files..
..done
Configuring Webmin to start at boot time..
Created init script /etc/rc.d/init.d/webmin
..done
Creating uninstall script /etc/webmin/uninstall.sh ..
..done
Changing ownership and permissions ..
..done
Running postinstall scripts ..
..done
Attempting to start Webmin mini web server..
Starting Webmin server in /home/diego/webmin-1.000
..done
***********************************************************************
Webmin has been installed and started successfully. Use your web
browser to go to
http://eberk.intranet:10000/
and login with the name and password you entered previously.
[root@eberk diego]#