https://guide.debianizzati.org/api.php?action=feedcontributions&user=MaXeR&feedformat=atomGuide@Debianizzati.Org - Contributi dell'utente [it]2024-03-28T16:26:41ZContributi dell'utenteMediaWiki 1.39.5https://guide.debianizzati.org/index.php?title=Munin&diff=16486Munin2009-06-03T09:29:53Z<p>MaXeR: </p>
<hr />
<div>=Introduzione=<br />
Munin è un sistema di monitoraggio di sistema avanzato, facilmente installabile e configurabile che offre una vasta gamma di monitor e supporta la raccolta di informazioni da più macchine.<br/><br />
(Ringrazio Keltik per avermelo involontariamente mostrato).<br />
<br />
In questa guida vedremo come installarlo, configurandolo per monitorare due macchine: quella su cui è installato il server ed un desktop (in questo caso i dati verranno raccolti solo quando questa macchina sarà accesa).<br />
<br />
=Installazione=<br />
Il programma è composto da:<br />
; munin-node : il Client, che gestisce la raccolta di informazioni su una determinata macchina<br />
; munin : il Server, che si occupa di elaborare i dati, catalogarli, creare i grafici e le pagine html<br />
<br />
Per installare il Server (necessario solo sulla macchina che raccoglierà i dati):<br />
<pre><br />
# apt-get install munin<br />
</pre><br />
<br />
Per installare il client (su tutte le macchine che vogliamo monitorare):<br />
<pre><br />
# apt-get install munin-node<br />
</pre><br />
<br />
Durante l'installazione non è richiesto l'intervento dell'utente.<br />
<br />
<br />
=Configurazione=<br />
==Node==<br />
La configurazione dei Client (o ''nodi'') è estemamente facile ed automatizzata: è presente un comando che controlla la macchina alla ricerca di servizi monitorabili attraverso delle regole predefinite. È d'obbligo evidenziare il numero di monitor presenti, che spaziano dalla statistiche di sistema ''base'' (CPU, Memoria, [[Swap]]) fino a quelle dei servizi (MySql, Postfix, NFS, Apache, ...).<br />
<br />
Su ogni ''nodo'' provvediamo a lanciare il configuratore automatico, così da rilevare tutti i servizi/parametri di cui è possibile tenere traccia:<br />
<pre><br />
# munin-node-configure<br />
</pre><br />
il processo può impiegare un bel po' di tempo (soprattutto se la macchina è lenta); per controllare l'avanzamento del processo, consiglio di abilitare il debug:<br />
<pre><br />
# munin-node-configure --debug<br />
</pre><br />
<br />
al termine della procedura di riconoscimento verrà mostrata una tabella riassuntiva, simile alla seguente:<br />
<pre><br />
Plugin | Used | Extra information<br />
------ | ---- | -----------------<br />
acpi | no |<br />
apache_accesses | no |<br />
apache_processes | no |<br />
apache_volume | no |<br />
apt | no |<br />
apt_all | no |<br />
courier_mta_mailqueue | no |<br />
courier_mta_mailstats | no |<br />
courier_mta_mailvolume | no |<br />
cps_ | no |<br />
cpu | yes |<br />
cupsys_pages | yes |<br />
df | yes |<br />
df_abs | no |<br />
df_inode | yes |<br />
entropy | yes |<br />
exim_mailqueue | no |<br />
exim_mailstats | no |<br />
forks | yes |<br />
fw_conntrack | no |<br />
fw_forwarded_local | no |<br />
fw_packets | no |<br />
hddtemp_smartctl | yes |<br />
if_ | yes | eth0<br />
if_err_ | yes | eth0<br />
interrupts | yes |<br />
iostat | yes |<br />
ip_ | no |<br />
ircu | no |<br />
irqstats | yes |<br />
load | yes |<br />
loggrep | no |<br />
memory | yes |<br />
multips | no |<br />
munin_graph | no |<br />
munin_update | no |<br />
mysql_bytes | yes |<br />
mysql_isam_space_ | no |<br />
mysql_queries | yes |<br />
mysql_slowqueries | yes |<br />
mysql_threads | yes |<br />
netstat | yes |<br />
nfs_client | yes |<br />
nfsd | yes |<br />
ntp_ | yes | mathfox_xs4all_nl<br />
ntp_states | no |<br />
open_files | yes |<br />
open_inodes | yes |<br />
ping_ | no |<br />
port_ | no |<br />
postfix_mailqueue | yes |<br />
postfix_mailstats | no |<br />
postfix_mailvolume | no |<br />
processes | yes |<br />
ps_ | no |<br />
psu_ | no |<br />
sendmail_mailqueue | no |<br />
sendmail_mailstats | no |<br />
sendmail_mailtraffic | no |<br />
sensors_ | no |<br />
smart_ | yes | hda<br />
squid_cache | no |<br />
squid_icp | no |<br />
squid_requests | no |<br />
squid_traffic | no |<br />
swap | yes |<br />
sybase_space | no |<br />
uptime | no |<br />
vlan_ | no |<br />
vlan_inetuse_ | no |<br />
vlan_linkuse_ | no |<br />
vmstat | yes |<br />
</pre><br />
<br />
Per le macchine diverse da quella che ospita il server, bisogna modificare le impostazioni di accesso per consentire le connessioni da parte di quest'ultimo. Per fare questo apriamo con un editor il file '''/etc/munin/munin-node.conf''', ed aggiungiamo la seguente riga alla fine del file:<br />
<pre><br />
allow ^192\.168\.0\.1$<br />
</pre><br />
Il commento poco sopra il punto in cui abbiamo inserito questa stringa ci ricorda che si tratta di espressioni regolari, di conseguenza è necessario anteporre un backslash prima dei punti.<br />
<br />
Per applicare le modifica apportate, riavviamo ''munin-node'':<br />
<pre><br />
# /etc/init.d/munin-node restart<br />
</pre><br />
<br />
===Moduli===<br />
Munin sfrutta un' architettura a plug-in per monitorare le varie componenti di sistema. Come abbiamo visto nel paragrafo precedente (vedi l' output di ''munin-node-configure'') ce ne sono a disposizione moltissimi.<br />
<br />
Munin-node altro non è che uno script che si preoccupa di lanciare i vari plug-ins presenti all' interno della cartella '''/etc/munin/plugins'''. Notiamo subito che all' interno di questa directory non troviamo i veri e propri moduli, ma del link simbolici ad essi:<br />
<pre><br />
# ls -l /etc/munin/plugins |more<br />
totale 0<br />
lrwxrwxrwx 1 root root 28 2005-07-01 01:06 cpu -> /usr/share/munin/plugins/cpu<br />
lrwxrwxrwx 1 root root 27 2005-07-01 01:06 df -> /usr/share/munin/plugins/df<br />
lrwxrwxrwx 1 root root 33 2005-07-01 01:06 df_inode -> /usr/share/munin/plugins/df_inode<br />
lrwxrwxrwx 1 root root 32 2005-07-01 01:06 entropy -> /usr/share/munin/plugins/entropy<br />
[...]<br />
</pre><br />
Quindi, per abilitare e/o disabilitare i moduli, è sufficiente creare/cancellare i links simbolici a /usr/share/munin/plugins presenti in /etc/munin/plugins.<br />
<br />
Se ad esempio voglio abilitare i moduli relativi ad '''apt''', sarà sufficiente il comando:<br />
<pre><br />
# ln -s /usr/share/munin/plugins/apt* /etc/munin/plugins<br />
</pre><br />
e, dopo aver creato i links:<br />
<pre><br />
/etc/init.d/munin-node restart<br />
</pre><br />
<br />
Nel caso si voglia testare l'effettivo funzionamento dei un plugin, si può sfruttare il comando <tt>munin-run</tt> che lancia lo script coi permessi effettivi con cui verrà richiamato da munin.<br />
Per esempio, si può testare il corretto funzionamento del plugin <tt>postfix_mailstats</tt> con: <br />
<pre><br />
# munin-run postfix_mailstats<br />
</pre><br />
Il comando, in questo caso, potrebbe dare errore (o restituire un valore pari a ''U'') per via dei permessi insufficienti: è necessario essere root per poter accedere allo spool di posta e 'contare' i messaggi presenti. Per ovviare a questo problema è sufficiente modificare il file <tt>/etc/munin/plugin-conf.d/plugins.conf</tt> aggiungendo la seguente riga:<br />
<pre><br />
[postfix_mailstats]<br />
user root<br />
</pre><br />
che indica, a munin, di eseguire lo script coi privilegi di root.<br />
<br />
===Apache, un caso particolare===<br />
Parliamo un po' più dettagliatamente dei moduli relativi ad Apache: per abilitarli, infatti, non è sufficiente creare i links simbolici, ma abbiamo bisogno anche di metter mano alla configurazione di Apache.<br />
<br />
Per monitorare Apache, Munin ha bisogno che mod_status venga caricato da httpd con la direttiva "ExtendedStatus On". In Debian mod_status per Apache viene caricato di default, per cui dobbiamo solo preoccuparci di fare un piccolo aggiustamento alla sezione che lo riguarda.<br />
<br />
Ecco come dobbiamo impostare in httpd.conf la sezione di mod_status:<br />
<pre><br />
<IfModule mod_status.c><br />
ExtendedStatus On<br />
<Location /server-status><br />
SetHandler server-status<br />
</Location><br />
</IfModule><br />
</pre><br />
In questo modo munin può interrogare Apache direttamente tramite il protocollo http.<br />
<br />
Per verificare che mod_status sia effettivamente in funzione è sufficiente puntare il nostro browser all' indirizzo http://localhost/server-status.<br />
<br />
{{box|Nota sulla sicurezza|E' bene aggiungere alcune istruzioni relative alla sicurezza nella nostra configurazione di mod_status, in modo da renderlo accessibile unicamente attraverso il nostro indirizzo ip locale (127.0.0.1). per fare questo possiamo inserire al' interno dei tags <location> e </location>, subito al di sotto di "SetHandler server-status" queste istruzioni:<br />
<pre><br />
Order Deny,Allow<br />
Deny from all<br />
Allow from 127.0.0.1<br />
</pre>}}<br />
Riavviamo apache:<br />
<pre><br />
# apachectl graceful<br />
</pre><br />
e munin-node:<br />
<pre><br />
# /etc/init-d/munin-node restart<br />
</pre><br />
<br />
==Server==<br />
La configurazione di defalut del server è più che sufficiente per un utilizzo normale di questo. Utilizza la directory '''/var/www/munin/''', in cui inserisce tutte le pagine relative ai computer da monitorare. Questa directory, quindi, dovrà essere accessibile in scrittura dall'utente '''munin''', ed in lettura dall'utente '''www-data''' (supponendo l'utilizzo di apache come webserver per visualizzare le statistiche). In particolare controlliamo che la directory '''/var/www''' abbia i permessi di esecuzione per l'utente ''nobody''.<br />
<br />
===Aggiunta di Client===<br />
La configurazione del server è gestita tramite un file: '''/etc/munin/munin.conf'''.<br />
<br />
La sezione che a noi interessa è l'ultima, dove vengono raccolti i dati dei ''nodi'' da monitorare. Ogni blocco rappresentate un ''nodo'', nel file di configurazione, ha la seguente struttura:<br />
<pre><br />
[nome_del_nodo]<br />
address <indirizzo_del_nodo><br />
use_node_name <yes|no><br />
</pre><br />
<br />
I parametri e le opzioni descritte hanno il seguente significato:<br />
; nome_del_modulo : indica il nome con cui verrà rappresentato il ''nodo'' (solo se ''use_node_name'' è ''yes''). Munin raccoglie i nodi per domini di secondo livello, in una struttura ad albero.<br />
; address <indirizzo_del_nodo> : indica l'indirizzo (IP o URL) tramite il quale raggiungere il ''nodo''.<br />
<br />
Riporto un esempio di configurazione per il monitoraggio di due macchine:<br />
<pre><br />
[spirit.knio.it]<br />
address 127.0.0.1<br />
use_node_name yes<br />
<br />
[maxer.knio.it]<br />
address 192.168.0.2<br />
use_node_name yes<br />
</pre><br />
<br />
I dati contenuti in '''/var/www/munin''' sono aggionati tramite il cron '''/etc/cron.d/munin''', esattamente ogni 5 minuti.<br />
<br />
<br />
==Conclusioni==<br />
Munin, come visto, è uno strumento veramente utile, sia per la sua facilità di installazione, sia per il vasto numero di dati che è capace di monitorare. Le sue funzionalità, inoltre, sono ampliabili tramite plugin, così da poter adattare al meglio il servizio alle proprie esigenze.<br />
<br />
==Bookmark==<br />
[http://www.linpro.no/projects/munin/ Home Page del progetto]<br />
[[Categoria:Server]][[Categoria:Networking]][[Categoria:Sicurezza]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=I_repository_ed_il_loro_utilizzo&diff=16118I repository ed il loro utilizzo2009-02-22T17:05:47Z<p>MaXeR: /* Debian Volatile */</p>
<hr />
<div>== Introduzione ==<br />
Il [[repository]] è a tutti gli effetti un archivio ordinato dove sono raccolti i pacchetti Debian (siano essi pacchetti binari o sorgenti) in modo ben organizzato e costantemente aggiornato. In ogni sistema debian i repository utilizzati vengono indicati nel file <tt>/etc/apt/sources.list</tt>. Vedi anche [[Faq#Repository|FAQ: Cos'è un '''repository'''?]].<br />
<br />
== Lista repository ufficiali debian ==<br />
Di seguito troverete l'elenco repository ufficiali da inserire nel <tt>sources.list</tt> per le varie [[La struttura della Distribuzione|versioni di debian]]. Il mirror è quello italiano. I repository dei pacchetti sorgente sono commentati. per ulteriori informazioni leggere la sezione: [[I repository ed il loro utilizzo#Sources.list|Sources.list]].<br />
<br />
=== Vecchia Stabile: Debian Etch ===<br />
{{Warningbox|Etch è ormai la vecchia stable. Usate Lenny per le nuove installazioni}}<br />
## Debian Stable (sarge)<br />
deb http://ftp.it.debian.org/debian/ etch main contrib non-free<br />
#deb-src http://ftp.it.debian.org/debian/ etch main contrib non-free<br />
<br />
## Aggiornamenti della sicurezza<br />
deb http://security.debian.org/ etch/updates main contrib<br />
#deb-src http://security.debian.org/ etch/updates main contrib<br />
<br />
=== Stabile: Debian Lenny ===<br />
<br />
## Debian Stable (lenny)<br />
deb http://ftp.it.debian.org/debian/ lenny main contrib non-free<br />
#deb-src http://ftp.it.debian.org/debian/ lenny main contrib non-free<br />
<br />
## Aggiornamenti della sicurezza<br />
deb http://security.debian.org/ lenny/updates main contrib<br />
#deb-src http://security.debian.org/ lenny/updates main contrib<br />
<br />
Per avere pacchetti più aggiornati su lenny si possono usare i [[backport]]:<br />
<br />
* [http://backports.org/ Debian Backports]<br />
<br />
=== Testing: Debian Squeeze ===<br />
<br />
## Debian Testing (squeeze)<br />
deb http://ftp.it.debian.org/debian/ squeeze main contrib non-free<br />
#deb-src http://ftp.it.debian.org/debian/ squeeze main contrib non-free<br />
<br />
## Aggiornamenti della sicurezza<br />
deb http://security.debian.org/ squeeze/updates main contrib<br />
#deb-src http://security.debian.org/ squeeze/updates main contrib<br />
<br />
=== Unstable: Debian Sid ===<br />
<br />
## Debian Unstable (sid)<br />
deb http://ftp.it.debian.org/debian/ unstable main contrib non-free<br />
#deb-src http://ftp.it.debian.org/debian/ unstable main contrib non-free<br />
<br />
Per '''Sid''' non c'è il repository per la sicurezza dato che eventuali falle vengono corrette semplicemente con l'aggiornamento del pacchetto incriminato.<br />
<br />
== I repository speciali ==<br />
<br />
=== Debian Volatile ===<br />
Cos'è debian-volatile?<br />
Alcuni pacchetti (come quelli per il filtraggio dello spam e per la scansione dei virus) dovendo usare dati aggiornati tendono ad essere dei bersagli mobili che non funzionano al meglio per tutto il ciclo di vita di una release stable. Lo scopo principale di volatile è di permettere agli amministratori di aggiornare i loro sistemi in maniera semplice ed ordinata, senza dover affrontare gli svantaggi dati dall'uso di unstable. Per cui debian-volatile contiene solo i cambiamenti a programmi stabili che permettono di mantenerli intatti, funzionali e aggiornati.<br />
<br />
## Debian Volatile (lenny)<br />
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free<br />
<br />
## Debian Volatile (squeeze)<br />
deb http://volatile.debian.org/debian-volatile squeeze/volatile main contrib non-free<br />
<br />
=== Debian Volatile/Sloppy ===<br />
Cos'è debian-volatile/sloppy?<br />
Per i pacchetti che finiscono nella sezione debian volatile, si cerca di assicurare che le nuove versioni non introducano modifiche funzionali ai programmi o che necessitino della supervisione degli amministratori dei file di configurazione per essere installati. Quei programmi che non rispettano questi requisiti per essere aggiornati finiscono nell'archivio volatile-sloppy.<br />
<br />
## Debian Volatile (sarge)<br />
#deb http://volatile.debian.org/debian-volatile sarge/volatile-sloppy main contrib non-free<br />
<br />
## Debian Volatile (etch)<br />
#deb http://volatile.debian.org/debian-volatile etch/volatile-sloppy main contrib non-free <br />
<br />
== Lista repository non ufficiali ==<br />
Per una lista dei repository non ufficiali più diffusi vedere: [[Repository non ufficiali]].<br />
<br />
== La Struttura dei repository ==<br />
Un repository è suddivisibile, grossomodo, in due sezioni:<br />
* '''dists''' in questo ramo sono contenuti i file di controllo, che permettono il funzionamento del sistema di pacchettizzazione. Infatti sono presenti i file che descrivono i pacchetti presenti nell'archivio (divisi per la release di appartenenza);<br />
* '''doc''' raccoglie la documentazione di base per Debian (segnalazioni di Bug, Faq, il Contratto Sociale ed altro)<br />
* '''indices''' contiene l'indice di tutti i file contenuti in tutti i pacchetti. Queste informazioni sono usate da [[Apt-file: ricerca all'interno dei pacchetti|<tt>apt-file</tt>]].<br />
* '''non-US''' a causa di problemi legali dovuti al divieto di esportazione di matariale per la difesa (tra cui materiale crittografici, utilizzati anche in PGP e SSH). Per ovviare a questi problemi, i pacchetti sono stati posti in una sezione a parte, la cui distribuzione è legata a server non Statunitensi.<br />
* '''pool''' questo è l'archivio vero e proprio, dove sono contenuti i pacchetti, raggruppati per lettera iniziale;<br />
* '''project''' contiene materiale per sviluppatori. Degne di nota la direcotory experimetal, che contiene i pacchetti in fase di sviluppo e perfezionamento;<br/><br />
* '''tools''' contiene degli strumenti Dos per la creazione di dischetti di boot, partizionamento e lancio di Linux.<br />
<br />
== La Suddivisione del repository ==<br />
Navigando un po' tra gli archivi Debian, si nota subito una particolare suddivisione: i repository, infatti, sono divisi in '''main''', '''contrib''' e '''non-free''', nel modo seguente:<br />
* '''main''' è la sezione principale, che contiene il 90% dei pacchetti presenti in Debian<br />
* '''contrib''' raccoglie i pacchetti coerenti con i punti 5 e/o 6 delle [[DFSG]], ma che dipendono da pacchetti che non la rispettano<br />
* '''non-free''' contiene dei pacchetti che possiedono delle limitazioni nella distribuzione (ad esempio perchè non utilizzabili in ambito commerciale o perchè dipendenti da applicazioni o pacchetti che non rispettano la [[DFSG|Debian Free Software Guidelines]])<br />
<br />
== Sources.list ==<br />
=== Il ruolo fondamentale ===<br />
Il file '''/etc/apt/sources.list''' è forse il più importante file di configurazione del sistema di gestione dei pacchetti Debian. Esso, infatti, contiene l'elenco e gli indirizzi dei repository a cui apt accede.<br />
<br />
=== Ordine di Inserimento ===<br />
È importante inserire i repository con un giusto ordine: i primi in elenco, infatti, sono i più importanti (o favoriti). Per migliorare le performance, è consigliabile ordinarli per velocità (Es. prima il cdrom, poi la rete locale, poi internet, ...).<br />
<br />
=== Sintassi ===<br />
Ogni riga che descrive un repository ha una ben determinata sintassi:<br />
<pre><br />
deb uri distribution [component..]<br />
</pre><br />
<br />
Analizziamo i singoli componenti:<br />
* '''deb o deb-src''' serve ad indicare se il repository indicato contiene pacchetti binari o pacchetti sorgenti (se li contiene entrambi, è necessario specificarlo usando due righe diverse).<br />
* '''uri''' indica l'indirizzo a cui è possibile trovare il repository; è possibile scegliere tra i seguenti metodi di accesso ai pacchetti:<br />
** '''file''' permette di inserire un repository presente sull'Hard Disk del computer;<br />
** '''cdrom''' permette di inserire un repository presente su un cd-rom;<br />
** '''http''' permette di accedere ad un repository tramite il protocollo http (se è impostata una variabile di ambiente '''http_proxy''' col formato '''http://server:port/''' verranno usate queste opzioni per accedere al repository; in caso di necessità di autenticazione, è possibile specificare l'inidirizzo del proxy, nella variabile d'ambiente '''http_proxy''', nel seguente modo: '''http://user:pass@server:port/''', anche se risulta non essere un modo sicuro di autenticazione);<br />
** '''ftp''' permette di accedere ad un repository tramite il protocollo ftp; è possibile specificare un proxy nell stesso modo indicato per http al punto precedente, sostituendo alla variabile '''http_proxy''' '''ftp_proxy''';<br />
** '''copy''' è idendico a file, ma i file utilizzati vengono salvati nella cache di apt; utile nel caso di supporti removibili quali Usb-drive, Floppy, Zip, ...;<br />
** '''rsh, ssh''' permette di accedere ad un repository tramite il protocollo ssh. Non è possibile, però, effettuare alcuna autenticazione interativa, ma solo tramite lo scambio di chiavi RSA.<br />
* '''distribution''' indica la [[La struttura della Distribuzione|distribuzione (o release)]] utilizzata... è possibile usare il nome in codice (sarge, etch, sid) o il nome generico (stable, testing, unstable);<br />
*'''component''' indica la sezione (non-free, main, contrib...) del repository da inserire; sono possibili scelte multiple.<br />
<br />
=== Alcuni esempi ===<br />
Non c'è niente di meglio, per capire la sintassi del file sources.list, si un po' di esempi.<br />
<br />
I repository ufficiali (binari e sorgenti) presi da un mirror italiano:<br />
<pre><br />
deb http://ftp.it.debian.org/debian/ stable main non-free contrib<br />
deb-src http://ftp.it.debian.org/debian/ stable main non-free contrib<br />
</pre><br />
<br />
Il repository di apt-build (Rif. 7.1 Pag. [*]):<br />
<pre><br />
deb file:/var/cache/apt-build/repository apt-build main<br />
</pre><br />
<br />
Un repository 'artigianale' accessibile tramite un webserver:<br />
<pre><br />
deb http://repos.debianizzati.org ./<br />
</pre><br />
<br />
Un repository situato nella home dell'utente maxer, creato con <code>dpkg-scanpackages</code>:<br />
<pre><br />
deb file:/home/maxer/repos ./<br />
</pre><br />
<br />
Per altri repository vedere: [[#Lista repository ufficiali debian|Lista repository ufficiali debian]] e [[Repository non ufficiali]].<br />
<br />
---- <br />
[[User:MaXeR|MaXeR]]<br />
[[Categoria:Apt]]<br />
[[Categoria:Repository]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=I_repository_ed_il_loro_utilizzo&diff=16117I repository ed il loro utilizzo2009-02-22T17:05:16Z<p>MaXeR: </p>
<hr />
<div>== Introduzione ==<br />
Il [[repository]] è a tutti gli effetti un archivio ordinato dove sono raccolti i pacchetti Debian (siano essi pacchetti binari o sorgenti) in modo ben organizzato e costantemente aggiornato. In ogni sistema debian i repository utilizzati vengono indicati nel file <tt>/etc/apt/sources.list</tt>. Vedi anche [[Faq#Repository|FAQ: Cos'è un '''repository'''?]].<br />
<br />
== Lista repository ufficiali debian ==<br />
Di seguito troverete l'elenco repository ufficiali da inserire nel <tt>sources.list</tt> per le varie [[La struttura della Distribuzione|versioni di debian]]. Il mirror è quello italiano. I repository dei pacchetti sorgente sono commentati. per ulteriori informazioni leggere la sezione: [[I repository ed il loro utilizzo#Sources.list|Sources.list]].<br />
<br />
=== Vecchia Stabile: Debian Etch ===<br />
{{Warningbox|Etch è ormai la vecchia stable. Usate Lenny per le nuove installazioni}}<br />
## Debian Stable (sarge)<br />
deb http://ftp.it.debian.org/debian/ etch main contrib non-free<br />
#deb-src http://ftp.it.debian.org/debian/ etch main contrib non-free<br />
<br />
## Aggiornamenti della sicurezza<br />
deb http://security.debian.org/ etch/updates main contrib<br />
#deb-src http://security.debian.org/ etch/updates main contrib<br />
<br />
=== Stabile: Debian Lenny ===<br />
<br />
## Debian Stable (lenny)<br />
deb http://ftp.it.debian.org/debian/ lenny main contrib non-free<br />
#deb-src http://ftp.it.debian.org/debian/ lenny main contrib non-free<br />
<br />
## Aggiornamenti della sicurezza<br />
deb http://security.debian.org/ lenny/updates main contrib<br />
#deb-src http://security.debian.org/ lenny/updates main contrib<br />
<br />
Per avere pacchetti più aggiornati su lenny si possono usare i [[backport]]:<br />
<br />
* [http://backports.org/ Debian Backports]<br />
<br />
=== Testing: Debian Squeeze ===<br />
<br />
## Debian Testing (squeeze)<br />
deb http://ftp.it.debian.org/debian/ squeeze main contrib non-free<br />
#deb-src http://ftp.it.debian.org/debian/ squeeze main contrib non-free<br />
<br />
## Aggiornamenti della sicurezza<br />
deb http://security.debian.org/ squeeze/updates main contrib<br />
#deb-src http://security.debian.org/ squeeze/updates main contrib<br />
<br />
=== Unstable: Debian Sid ===<br />
<br />
## Debian Unstable (sid)<br />
deb http://ftp.it.debian.org/debian/ unstable main contrib non-free<br />
#deb-src http://ftp.it.debian.org/debian/ unstable main contrib non-free<br />
<br />
Per '''Sid''' non c'è il repository per la sicurezza dato che eventuali falle vengono corrette semplicemente con l'aggiornamento del pacchetto incriminato.<br />
<br />
== I repository speciali ==<br />
<br />
=== Debian Volatile ===<br />
Cos'è debian-volatile?<br />
Alcuni pacchetti (come quelli per il filtraggio dello spam e per la scansione dei virus) dovendo usare dati aggiornati tendono ad essere dei bersagli mobili che non funzionano al meglio per tutto il ciclo di vita di una release stable. Lo scopo principale di volatile è di permettere agli amministratori di aggiornare i loro sistemi in maniera semplice ed ordinata, senza dover affrontare gli svantaggi dati dall'uso di unstable. Per cui debian-volatile contiene solo i cambiamenti a programmi stabili che permettono di mantenerli intatti, funzionali e aggiornati.<br />
<br />
## Debian Volatile (sarge)<br />
deb http://volatile.debian.org/debian-volatile sarge/volatile main contrib non-free<br />
<br />
## Debian Volatile (etch)<br />
deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free <br />
<br />
=== Debian Volatile/Sloppy ===<br />
Cos'è debian-volatile/sloppy?<br />
Per i pacchetti che finiscono nella sezione debian volatile, si cerca di assicurare che le nuove versioni non introducano modifiche funzionali ai programmi o che necessitino della supervisione degli amministratori dei file di configurazione per essere installati. Quei programmi che non rispettano questi requisiti per essere aggiornati finiscono nell'archivio volatile-sloppy.<br />
<br />
## Debian Volatile (sarge)<br />
#deb http://volatile.debian.org/debian-volatile sarge/volatile-sloppy main contrib non-free<br />
<br />
## Debian Volatile (etch)<br />
#deb http://volatile.debian.org/debian-volatile etch/volatile-sloppy main contrib non-free <br />
<br />
== Lista repository non ufficiali ==<br />
Per una lista dei repository non ufficiali più diffusi vedere: [[Repository non ufficiali]].<br />
<br />
== La Struttura dei repository ==<br />
Un repository è suddivisibile, grossomodo, in due sezioni:<br />
* '''dists''' in questo ramo sono contenuti i file di controllo, che permettono il funzionamento del sistema di pacchettizzazione. Infatti sono presenti i file che descrivono i pacchetti presenti nell'archivio (divisi per la release di appartenenza);<br />
* '''doc''' raccoglie la documentazione di base per Debian (segnalazioni di Bug, Faq, il Contratto Sociale ed altro)<br />
* '''indices''' contiene l'indice di tutti i file contenuti in tutti i pacchetti. Queste informazioni sono usate da [[Apt-file: ricerca all'interno dei pacchetti|<tt>apt-file</tt>]].<br />
* '''non-US''' a causa di problemi legali dovuti al divieto di esportazione di matariale per la difesa (tra cui materiale crittografici, utilizzati anche in PGP e SSH). Per ovviare a questi problemi, i pacchetti sono stati posti in una sezione a parte, la cui distribuzione è legata a server non Statunitensi.<br />
* '''pool''' questo è l'archivio vero e proprio, dove sono contenuti i pacchetti, raggruppati per lettera iniziale;<br />
* '''project''' contiene materiale per sviluppatori. Degne di nota la direcotory experimetal, che contiene i pacchetti in fase di sviluppo e perfezionamento;<br/><br />
* '''tools''' contiene degli strumenti Dos per la creazione di dischetti di boot, partizionamento e lancio di Linux.<br />
<br />
== La Suddivisione del repository ==<br />
Navigando un po' tra gli archivi Debian, si nota subito una particolare suddivisione: i repository, infatti, sono divisi in '''main''', '''contrib''' e '''non-free''', nel modo seguente:<br />
* '''main''' è la sezione principale, che contiene il 90% dei pacchetti presenti in Debian<br />
* '''contrib''' raccoglie i pacchetti coerenti con i punti 5 e/o 6 delle [[DFSG]], ma che dipendono da pacchetti che non la rispettano<br />
* '''non-free''' contiene dei pacchetti che possiedono delle limitazioni nella distribuzione (ad esempio perchè non utilizzabili in ambito commerciale o perchè dipendenti da applicazioni o pacchetti che non rispettano la [[DFSG|Debian Free Software Guidelines]])<br />
<br />
== Sources.list ==<br />
=== Il ruolo fondamentale ===<br />
Il file '''/etc/apt/sources.list''' è forse il più importante file di configurazione del sistema di gestione dei pacchetti Debian. Esso, infatti, contiene l'elenco e gli indirizzi dei repository a cui apt accede.<br />
<br />
=== Ordine di Inserimento ===<br />
È importante inserire i repository con un giusto ordine: i primi in elenco, infatti, sono i più importanti (o favoriti). Per migliorare le performance, è consigliabile ordinarli per velocità (Es. prima il cdrom, poi la rete locale, poi internet, ...).<br />
<br />
=== Sintassi ===<br />
Ogni riga che descrive un repository ha una ben determinata sintassi:<br />
<pre><br />
deb uri distribution [component..]<br />
</pre><br />
<br />
Analizziamo i singoli componenti:<br />
* '''deb o deb-src''' serve ad indicare se il repository indicato contiene pacchetti binari o pacchetti sorgenti (se li contiene entrambi, è necessario specificarlo usando due righe diverse).<br />
* '''uri''' indica l'indirizzo a cui è possibile trovare il repository; è possibile scegliere tra i seguenti metodi di accesso ai pacchetti:<br />
** '''file''' permette di inserire un repository presente sull'Hard Disk del computer;<br />
** '''cdrom''' permette di inserire un repository presente su un cd-rom;<br />
** '''http''' permette di accedere ad un repository tramite il protocollo http (se è impostata una variabile di ambiente '''http_proxy''' col formato '''http://server:port/''' verranno usate queste opzioni per accedere al repository; in caso di necessità di autenticazione, è possibile specificare l'inidirizzo del proxy, nella variabile d'ambiente '''http_proxy''', nel seguente modo: '''http://user:pass@server:port/''', anche se risulta non essere un modo sicuro di autenticazione);<br />
** '''ftp''' permette di accedere ad un repository tramite il protocollo ftp; è possibile specificare un proxy nell stesso modo indicato per http al punto precedente, sostituendo alla variabile '''http_proxy''' '''ftp_proxy''';<br />
** '''copy''' è idendico a file, ma i file utilizzati vengono salvati nella cache di apt; utile nel caso di supporti removibili quali Usb-drive, Floppy, Zip, ...;<br />
** '''rsh, ssh''' permette di accedere ad un repository tramite il protocollo ssh. Non è possibile, però, effettuare alcuna autenticazione interativa, ma solo tramite lo scambio di chiavi RSA.<br />
* '''distribution''' indica la [[La struttura della Distribuzione|distribuzione (o release)]] utilizzata... è possibile usare il nome in codice (sarge, etch, sid) o il nome generico (stable, testing, unstable);<br />
*'''component''' indica la sezione (non-free, main, contrib...) del repository da inserire; sono possibili scelte multiple.<br />
<br />
=== Alcuni esempi ===<br />
Non c'è niente di meglio, per capire la sintassi del file sources.list, si un po' di esempi.<br />
<br />
I repository ufficiali (binari e sorgenti) presi da un mirror italiano:<br />
<pre><br />
deb http://ftp.it.debian.org/debian/ stable main non-free contrib<br />
deb-src http://ftp.it.debian.org/debian/ stable main non-free contrib<br />
</pre><br />
<br />
Il repository di apt-build (Rif. 7.1 Pag. [*]):<br />
<pre><br />
deb file:/var/cache/apt-build/repository apt-build main<br />
</pre><br />
<br />
Un repository 'artigianale' accessibile tramite un webserver:<br />
<pre><br />
deb http://repos.debianizzati.org ./<br />
</pre><br />
<br />
Un repository situato nella home dell'utente maxer, creato con <code>dpkg-scanpackages</code>:<br />
<pre><br />
deb file:/home/maxer/repos ./<br />
</pre><br />
<br />
Per altri repository vedere: [[#Lista repository ufficiali debian|Lista repository ufficiali debian]] e [[Repository non ufficiali]].<br />
<br />
---- <br />
[[User:MaXeR|MaXeR]]<br />
[[Categoria:Apt]]<br />
[[Categoria:Repository]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Indice_Guide&diff=16064Indice Guide2009-02-13T22:41:45Z<p>MaXeR: /* Installazione */</p>
<hr />
<div>__NOTOC__<br />
{|style="-moz-border-radius: 0.5em; width:100%; margin-top:+.7em; background-color:#F9F9FF; border: 1px solid #ccc"<br />
|style="width:50%;color:#000"|<br />
{| style="width:280px;border:solid 0px;background:none"<br />
|-<br />
| style="width:280px;text-align:center; white-space: nowrap; color:#000" |<br />
<h1 style="font-size: 162%; border: none; margin: 0; padding:.1em; color:#000"><br />
Indice delle Guide<br />
</h1><br />
<div style="top: +0.2em; font-size: 100%"><br />
Di seguito troverete l''''indice completo''' delle guide contenute su [[Guide@Debianizzati.Org:About|Wiki]].<br />
<br />
Potete anche navigare tra le guide scegliendo tra le '''[[Lista Categorie|categorie]]''' qua a destra.<br />
</div><br />
|-<br />
|}<br />
<!-- ----------Portals Follow----------------------------- --><br />
|style="width:11%;font-size:95%;color:#000"|<br />
* [[:Categoria:Apt|Apt]]<br />
* [[:Categoria:Desktop|Desktop]]<br />
* [[:Categoria:Hardware|Hardware]]<br />
* [[:Categoria:Kernel|Kernel]]<br />
|style="width:11%;font-size:95%;color:#000"|<br />
* [[:Categoria:Laptop|Laptop]]<br />
* [[:Categoria:Networking|Networking]]<br />
* [[:Categoria:Shell|Shell]]<br />
* [[:Categoria:Server|Server]]<br />
|style="width:13%;font-size:95%;color:#000"|<br />
* [[:Categoria:Sicurezza|Sicurezza]]<br />
* [[:Categoria:Sistema|Sistema]]<br />
* [[:Categoria:Tips&Tricks|Tips&Tricks]]<br />
* '''[[Lista Categorie]]'''<br />
|}<br />
<br />
<br />
<br />
Questo Wiki - '''[[Guide@Debianizzati.Org:About|Guide@Debianizzati.Org]]''' - vuole essere prima di tutto un punto di raccolta ideale per le conoscenze acquisite dai singoli durante l'uso di '''Debian GNU/Linux''' in ambito casalingo e/o lavorativo, in modo che il sapere di uno diventi quello di tutti.<br />
<br />
Le guide ritenute meglio scritte e più approfondite, dopo un processo di controllo e revisione a cui tutti siete liberi di partecipare, vengono classificate [[:Categoria:Debianized|Debianized]] e contrassegnate dalla [[Debian Swirl]]: http://guide.debianizzati.org/images/swirl.png. Per ulteriori informazioni sul processo di revisione vedere: [[Aiuto:Contents#Evoluzione_delle_guide|Evoluzione delle guide]].<br />
<br />
Potete trovare un elenco completo delle guide '''Debianized''' in [[:Categoria:Debianized|questa pagina]].<br />
<br />
Segue la lista completa delle guide attualmente presenti:<br />
__TOC__<br />
<br />
== Mondo Debian ==<br />
=== Introduzione a Debian ===<br />
* [[L' Universo Debian]]<br />
* [[La struttura della Distribuzione]]<br />
<br />
=== Installazione ===<br />
* http://guide.debianizzati.org/images/swirl.png [[Guida a Grub]]<br />
* [[Jigdo | '''Jigdo''': Scaricare e Aggiornare le iso di Debian]]<br />
* [[Note sull'installazione di Debian]]<br />
* [[Installare Debian Lenny - Guida Grafica]]<br />
<br />
=== Gestione dei Pacchetti ===<br />
* [[Introduzione all' Apt System]]<br />
* [[I repository ed il loro utilizzo]]<br />
* http://guide.debianizzati.org/images/swirl.png [[Pulire Debian]]<br />
* [[Apt-cdrom | '''Apt-cdrom''': aggiunta di cd/dvd nella lista dei repository]]<br />
* [[Apt-file: ricerca all'interno dei pacchetti | '''Apt-file''': ricerca all'interno dei pacchetti]]<br />
* [[Apt-listbugs: come monitorare i bug | '''Apt-listbugs''': come monitorare i bug]]<br />
* [[Apt-zip: aggiornamenti senza una connessione veloce | '''Apt-zip''': aggiornamenti senza una connessione veloce]]<br />
* [[Apt-spy: trovare i mirror più veloci | '''Apt-spy''': trovare i mirror più veloci]]<br />
* [[APT uso avanzato: mixare releases diverse]]<br />
* http://guide.debianizzati.org/images/swirl.png [[Impedire l' aggiornamento di un pacchetto]]<br />
* [[Aptitude | '''Aptitude''': come amministrare i pacchetti]]<br />
* [[Controllare lo stato di un pacchetto]]<br />
<br />
=== Creazione e modifica dei pacchetti ===<br />
* http://guide.debianizzati.org/images/swirl.png [[Make-jpkg: Pacchettiziamo Java Sun| '''Make-jpkg''': Pacchettizziamo Java Sun]]<br />
* [[Pacchetti binari e sorgenti]]<br />
* [[Applicare una patch ad un pacchetto Debian]]<br />
* [[Apt-build: ottimizzazione dei pacchetti | '''Apt-build''': ottimizzazione dei pacchetti]]<br />
* [[Dpkg-sig: Firma dei packages .deb | '''Dpkg-sig''': Firma dei packages .deb]]<br />
* [[Pacchetizzare un tema per Bootsplash]]<br />
* [[Backport da unstable in testing]]<br />
* [[Pbuilder: compilazione in ambienti puliti]]<br />
<br />
=== Gestione dei pacchetti Lato Server ===<br />
* [[Apt-Proxy: un proxy per i pacchetti Debian| '''Apt-Proxy''': un proxy per i pacchetti Debian]]<br />
* [[Debmirror: creiamo un mirror Debian |'''Debmirror''': creiamo un mirror Debian]]<br />
* [[Creare un Repository Debian]]<br />
* [[Gestione di un repository con debarchiver]]<br />
* [[Usare apt-cacher per creare una cache dei pacchetti usabile in una LAN]]<br />
* [[Dupload per l'upload dei pacchetti Debian]]<br />
<br />
==Configurazione Sistema==<br />
===Kernel===<br />
* [[Linux Kernel in a Nutshell]] in Italiano (work in progress)<br />
* [[Un kernel UNIX libero: Linux]] ''(stub)''<br />
* http://guide.debianizzati.org/images/swirl.png [[Debian Kernel Howto]]<br />
* [[Esempio configurazione kernel]]<br />
* [[Kernel2.6.10 - Framebuffer - Gensplash Patch]]<br />
* [[Kernel 2.6 su Debian Woody]]<br />
* [[Compilazione Kernel 2.6.11 con Bootsplash]]<br />
* [[Pagina di manuale di module-assistant|Pagina di manuale di '''<tt>module-assistant</tt>''']]<br />
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]<br />
* [[Script: Confronto Configurazioni Kernel]]<br />
* [[Patch Con Kolivas: incrementare le prestazioni desktop|Patch '''Con Kolivas''': incrementare le prestazioni '''desktop''']]<br />
<br />
===Sistema===<br />
* [[SysV | Il sistema SysV per la gestione dei Runlevel]]<br />
* [[Udev e Debian]]<br />
* [[Configurare il server X in Debian GNU/Linux]]<br />
* [[Linux Admin Quick Reference]]<br />
* [[Debian: accelerare GTK con Cairo e Glitz]]<br />
* [[Installare Debian su un RAID1 software]]<br />
* [[Software Raid 1: configurazione e verifiche|'''Software Raid 1''': configurazione e verifiche]]<br />
* [[Debian: software suspend e ibernazione per laptops]]<br />
* [[Alternatives]]<br />
<br />
==== Sistema / Tips & Tricks: ====<br />
:* [[Impostare e modificare data e ora]]<br />
:* [[Impostare e modificare il layout della tastiera]]<br />
:* [[Impostare la lingua italiana nel sistema]]<br />
:* [[Tmpreaper: pulire le directory contenenti file temporanei]]<br />
:* [[Messaggio del giorno | Come rendere permanenti le modifiche a <tt>/etc/motd</tt>]]<br />
:* [[Aggiungere uno sfondo a Grub]]<br />
<br />
=== Desktop ===<br />
* [[Configurare fluxbox]]<br />
* [[Ekiga: installazione e configurazione|'''Ekiga''': installazione e configurazione]]<br />
* [[DVD Backup: xDVDShrink per Debian]]<br />
* [[Abilitare_Xinerama | Multi monitor con Xinerama]]<br />
* [[Personalizzare il comportamento delle finestre con Devil's Pie]]<br />
<br />
* [[Kde e mount automatico]]<br />
* [[Xfce e shutdown da utente]]<br />
* [[Gimp: rendere un logo trasparente|'''Gimp''': rendere un logo trasparente]]<br />
* [[LaTeX e Vim]]<br />
* [[XGL e Beryl su KDE con schede ATI]]<br />
* [[Debian: guida all' installazione di Enlightenment 17 - e17 cvs]]<br />
<br />
* [[Installare e configurare i codec per DVD e Mp3]]<br />
<br />
==== Desktop / Tips & Tricks ====<br />
:* [[Desktop Search su Debian Etch: Installare Tracker]]<br />
:* [[Cambiare il Tema dei Cursori per il Mouse]]<br />
:* [[Eseguire comandi con gli shortcuts di Gnome]]<br />
:* [[Abilitare ESound con ALSA in Gnome]]<br />
:* [[Nautilus: navigare con una sola finestra]]<br />
:* [[Antispam in Evolution con Bogofilter]]<br />
:* [[Associare a Thunderbird il browser preferito]]<br />
:* [[Associare ad Icedove il browser preferito]]<br />
:* [[Velocizzare il boot senza cambiare sistema di init]]<br />
:* [[Migliorare i font]] in firefox<br />
:* [[Configurare la scheda audio]]<br />
<br />
=== Xorg / Xfree ===<br />
* [[Installazione driver proprietari Ati]]<br />
* [[Installazione driver proprietari Nvidia]]<br />
* [[Abilitare AIGLX con Compiz on Debian testing]]<br />
<br />
===Applicazioni Esterne===<br />
* [[Debian e sintesi vocale: installazione di festival e mbrola]]<br />
* [[Installazione Qemu con supporto accelerazione Kqemu]]<br />
* [[ePSXe Emulatore Playstation]]<br />
* [[Installare OpenOffice2 su Debian Etch]] (''old'')<br />
* [[Pacchettizzare ed installare Xorg su Debian Sid]] (''old'')<br />
<br />
===Altro===<br />
* [[Dual Boot Debian-Altra distribuzione Linux]]<br />
* [[Dual Boot Linux-Windows|Dual Boot Linux-Windows: usare il bootloader di windows]]<br />
* [[Logging su MySQL]]<br />
* [[Password sicure: la base della sicurezza informatica]]<br />
* [[Script Bash per Avvio e Visualizzazione dati Seti@home]] (''old'')<br />
<br />
===Tips and Tricks===<br />
====Bash====<br />
* [[Bash tips]]: un elenco di trucchetti sull'uso interattivo e sullo scripting Bash<br />
* [[Colorare bash]]<br />
* [[Come abilitare il completamento automatico 'avanzato']]<br />
* [[Un logout con schermo pulito]]<br />
* [[Bash Script: Cambiare i permessi ricorsivamente]]<br />
* [[Due simpatici login: welcome2l e linuxlogo]]<br />
<br />
====Firefox====<br />
* [[Firefox: Disattivare la ricerca con il tasto centrale]]<br />
* [[Velocizzare Firefox per la banda larga]]<br />
* [[Il vostro motore di ricerca da Firefox]]<br />
* [[Aggiungere un motore di ricerca al quicksearch di Firefox]]<br />
* [[Spostare il tasto di chiusura delle tab di Firefox 2]]<br />
* [[Firefox Tips and tricks]]<br />
<br />
====Altro====<br />
* [[Convertire immagini .nrg in immagini .iso|Convertire immagini '''<tt>.nrg</tt>''' (Nero) in immagini '''<tt>.iso</tt>''' su Linux]]<br />
* [[Rileggere la tabella delle partizioni]]<br />
* [[Scrivere su fs ntfs]]<br />
* [[Amministrare 'alternatives' graficamente - Galternatives]]<br />
* [[Creare DVD Cover con GLabels]]<br />
<br />
==Networking==<br />
===Debian Server===<br />
====Condivisione risorse====<br />
* [[Directory shared tra macchine linux (nfs)]]<br />
* [[Condivisione risorse con Samba]]<br />
* [[Debian: guida rapida alla configurazione di Samba]]<br />
* [[Samba e OpenLDAP: creare un controller di dominio]] (Con Debian Sarge)<br />
* [[Samba e OpenLDAP: creare un controller di dominio con Debian Etch]]<br />
* [[Implementare un'architettura ridondante master/slave OpenLDAP | Come implementare un'architettura ridondante master/slave OpenLDAP]]<br />
* [[Scansione antivirus con ClamAV su condivisioni Samba]]<br />
* [[Accedere alle condivisioni Samba dal browser]]<br />
* [[Creare un Cestino di rete per le condivisioni Samba]]<br />
* [[sshfs | Montare una directory remota con sshfs]]<br />
* [[Installare un server FTP]]<br />
* [[Unison e la sincronizzazione di directory]]<br />
* [[Sfogliare la rete in Thunar con fusesmb]]<br />
<br />
====Mailing====<br />
* [[Mail Server Sicuro con Postfix]]<br />
* [[Postgrey:_filtrare_lo_spam_con_il_greylisting]]<br />
* [[Postfix_e_autenticazione_su_smtp_remoto]]<br />
* [[Mail_Server]]<br />
<br />
====Http====<br />
* [[Server Web Casalingo]]<br />
* [[LAMP: Linux, Apache, MySQL e PHP]]<br />
* [[XAMPP: Linux, Apache, MySQL e PHP facili]]<br />
* [[Debian MapServer/MapScript]]<br />
* [[Configurare Ruby On Rails un su server web di produzione]]<br />
<br />
====Altri servizi di rete====<br />
* [[Un server DNS e DHCP su Debian Etch]]<br />
* [[Installare VMWare Server su Debian Etch]]<br />
<br />
===Amministrazione===<br />
====Gestione Remota/Locale====<br />
* [[Wake On Lan | '''Wake On Lan''' per accendere i propri PC a distanza tramite la LAN]]<br />
* [[Debian e il controllo di servizi e demoni]]<br />
* [[Gestione della banda in Apache]]<br />
* [[Ssh e autenticazione tramite chiavi]]<br />
* [[Inetd e i servizi di rete]]<br />
* [[OpenSSH: configurazione di base]]<br />
<br />
====Connettivita'====<br />
* [[Condividere la connessione a internet]]<br />
* [[Ifplugd: connessione automatica|'''<tt>ifplugd</tt>''': connessione automatica]]<br />
* [[IP fissi | Come impostare indirizzi IP fissi su Debian]]<br />
* [[Configurazione di una connessione wireless]]<br />
<br />
===Sicurezza===<br />
====Firewalling====<br />
* [[Debian e iptables]]<br />
* [[Firewall Builder]]<br />
* [[Parametri a run-time per Netfilter]]<br />
<br />
====Monitoraggio & Scanning====<br />
* [[Monitoriamo il Sistema]]<br />
* [[Mrtg: monitoriamo la banda]]<br />
* [[Cacti | Cacti: monitor di rete, per più computer]]<br />
* [[Munin]]<br />
* [[Configurare un server Syslog su Debian Etch]]<br />
* [[Fail2ban]]<br />
* [[Monitorare l'attività ARP con Arpwatch]]<br />
<br />
====Proxy====<br />
* [[Privoxy: navigazione sicura a prova di spam]]<br />
<br />
====Tunneling====<br />
* [[Openvpn]]<br />
* [[Openvpn: un'altra guida]]<br />
<br />
=== File Sharing ===<br />
* [[Moblock - mobloquer]]<br />
* [[Emule-morph]]<br />
* [[AMule]]<br />
<br />
== Hardware ==<br />
=== Fotocamere digitali e dispositivi di memorizzazione di massa removibili ===<br />
* [[Usare Fotocamere Digitali|Usare Fotocamere Digitali (libgphoto2)]]<br />
* [[Usare Fotocamere Digitali (usb-storage)]]<br />
* [[UsbMount: Gestione automatizzata delle periferiche usb di memorizzazione]]<br />
* [[Debian e iPod]]<br />
* [[Debian e lettori mp3 Creative]]<br />
<br />
=== Modem e periferiche di rete ===<br />
<br />
* [[Debian e i Modem ADSL]]<br />
<br />
==== Modem USB ADSL ====<br />
* [[Installare i driver conexant accessrunner]]<br />
* [[Installare i driver eagle-adsl]]<br />
* [[Installare i driver eci-adsl]] ''(stub)''<br />
* [[Installare i driver unicorn (BeWAN)]] ''(stub)''<br />
* [[Modem adsl Telindus ND220]]<br />
* [[Modem adsl Aethra Starmodem]]<br />
* [[Modem adsl Fastrate 100 USB]]<br />
<br />
==== Modem Ethernet ====<br />
* [[Modem ethernet su Debian]]<br />
<br />
==== Modem dial-up 56K ====<br />
* ''Inserire qui eventuali guide su modem a 56K''<br />
<br />
==== Schede di rete Wireless ====<br />
* [[Wireless Support | Informazioni sul supporto alle periferiche Wireless]]<br />
* [[Script Bash abilitazione scheda wireless]]<br />
* [[Configurazione di una connessione wireless]]<br />
* [[Intel PRO/Wireless 2200BG]]<br />
* [[Intel PRO/Wireless 3945ABG : Installazione dei moduli senza kernel patching]]<br />
* [[Intel PRO/Wireless 3945ABG :Patchare il kernel con il driver per Linux]]<br />
* [[NdisWrapper | NdisWrapper: Usiamo i driver di Windows per il WLan con GNU/Linux]]<br />
* [[Madwifi | Installazione Driver Madwifi]]<br />
* [[PCMCIA WiFi UPspeed su Debian Sarge on Thinkpad T20 ]]<br />
* [[Wg111v2 con ndiswrapper e crittografia WPA]]<br />
* [[Broadcom BCM43xx: installazione e configurazione]]<br />
<br />
=== Schede Video ===<br />
* [[Installazione Driver ATI per schede ATI RADEON MOBILITY 9700 SE]]<br />
<br />
=== Stampanti ===<br />
* [[Livello degli inchiostri e pulizia testine per stampanti Epson]]<br />
==== Stampanti USB ====<br />
* [[Installare stampanti con porta USB utilizzando CUPS]]<br />
<br />
==== Stampanti con porta parallela ====<br />
* [[Introduzione all'installazione di stampanti con porta parallela]]<br />
<br />
==== Stampanti bluetooth ====<br />
* [[Introduzione all'installazione di stampanti bluetooth]]<br />
<br />
=== Scanner ===<br />
* [[Epson Perfection 2480 photo - usb scanner]]<br />
* ''Inserire qui eventuali altre guide su come far funzionare scanner con Debian''<br />
<br />
=== Palmari e cellulari ===<br />
* [[Debian e Nokia 7210: uso di gnokii e gestione degli sms]]<br />
* [[UMTS/GPRS PCMCIA card (3g)]]<br />
* [[UMTS/GPRS: Internet col cellulare]]<br />
* [[Usare lcd4linux con un Palm]]<br />
* [[Collegare il proprio Nokia via USB]]<br />
<br />
=== Altro hardware ===<br />
* [[I2c e lm-sensors|'''I2c e lm-sensors''': usare i sensori della scheda madre]]<br />
* [[Gestire gli HD: stato di salute, badblocks e ripristino dati|'''Gestire gli HD:''' stato di salute, badblocks e ripristino dati]]<br />
<br />
* [[Tasti Multimediali: configurazione ed uso| '''Tasti Multimediali''': configurazione ed uso]]<br />
* [[Associare un pulsante ad un' azione: Hotkeys|Associare un pulsante ad un' azione: '''Hotkeys''']]<br />
* [[Utilizzare un UPS APC con Debian]]<br />
<br />
==Portatili==<br />
===Laptop Debianizzati===<br />
Troverete di seguito i resoconti d'installazione di Debian su dei portatili:<br />
<br />
* [[Debian on an HP nx8220 | Debian on an HP nx8220]]<br />
* [[Debian on a presario 2141EU | Compaq Presario 2100 (2141EU)]]<br />
* [[Debian on a compaq Presario 2154EA | Compaq Presario 2100 (2154EA)]]<br />
* [[Debian on a Toshiba Satellite M30X-113| Toshiba Satellite M30x-113]]<br />
* [[Debian on a HP Compaq NX6110| HP Compaq NX6110]]<br />
* [[Debian su HP Compaq nx6325| HP Compaq nx6325]]<br />
* [[Debian on an HP pavilion zv5422EA| HP pavilion zv5000 (zv5422EA)]]<br />
* [[Debian on a ACER Aspire 1450 | ACER Aspire 1450 (1454 LMi)]]<br />
<br />
===Altro===<br />
* [[Powernowd: CpuScaling per AMD]]<br />
* [[Cpufreqd: Cpuscaling per Intel Pentium M]]<br />
* [[ACPI e DSDT]]<br />
* [[Synaptics touchpad]]<br />
* Inserire qui anche link a risorse in italiano sui portatili<br />
<br />
==Debian Live==<br />
* [[Debian Live Project]]<br />
* [[Rimasterizzare una knoppix]]<br />
* [[Damn Small Linux su chiavetta usb]]<br />
<br />
==Crittografia==<br />
* [[Crittografia e Steganografia - L'Arte di nascondere le informazioni]]<br />
* [[Chiavi simmetriche e chiavi pubbliche]]<br />
* [[Creare una partizione criptata nello standard LUKS]]<br />
<br />
==Varie==<br />
* [[Debian Fun]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Pagina_principale&diff=15993Pagina principale2009-02-13T20:58:35Z<p>MaXeR: </p>
<hr />
<div>__NOTOC__<br />
<!-- ---------- BEGINNING OF HEADER SECTION -------------------------- --><br />
{|style="-moz-border-radius: 0.5em; width:100%; margin-top:+.7em; background-color:#fcfcfc; border: 1px solid #ccc"<br />
|style="width:50%;color:#000"|<br />
{| style="width:280px;border:solid 0px;background:none"<br />
|-<br />
| style="width:280px;text-align:center; white-space: nowrap; color:#000" |<br />
<h1 style="font-size: 162%; border: none; margin: 0; padding:.1em; color:#000"><br />
Bevenuti su [[Guide@Debianizzati.Org:About|Guide@Debianizzati.Org]],<br />
</h1><br />
<div style="top: +0.2em; font-size: 100%"><br />
La risorsa libera dedicata a Debian e al Software Libero [[Aiuto:Contents|a cui tutti possono contribuire]].<br />
</div><br />
<div id="articlecount" style="width:100%;text-align:center;font-size:85%;"><br />
Più di [[Special:Statistics|{{NUMBEROFARTICLES}}]] Articoli e Guide in Italiano</div><br />
|-<br />
|}<br />
<!-- ----------Portals Follow----------------------------- --><br />
|style="width:30%;font-size:95%;color:#000"|<br />
* '''[[Cos'è_Debianizzati.Org|Cos'è Debianizzati.Org]]'''<br />
* [http://www.debianizzati.org/ Portale Debianizzati.Org]<br />
* [http://www.debianizzati.org/component/option,com_joomlaboard/Itemid,29/ Forum]<br />
* [[contratto sociale|Contratto Sociale]]<br />
|}<br />
<!-- -------End Portals----- --><br />
<br />
<br />
<!-- ---------- END OF HEADER SECTION / BEGINNING OF LEFT-COLUMN ------------------ --><br />
{| style="border-spacing:8px;margin:0px -8px"<br />
|class="MainPageBG" style="-moz-border-radius: 0.5em;width: 55%; border:1px solid #cef2e0; background-color:#f5fffa; vertical-align:top;color:#000"|<br />
{| width="100%" cellpadding="2" cellspacing="5" style="vertical-align:top; background-color:#f5fffa"<br />
! <h2 style="margin: 0; background-color:#cef2e0; font-family: sans-serif; font-size:120%; font-weight:bold; border:1px solid #a3bfb1; text-align:left; color:#000; padding-left:0.4em; padding-top: 0.2em; padding-bottom: 0.2em;">Cos'è Guide@Debianizzati.Org</h2><br />
|-<br />
|style="color:#000"|<br />
<br />
[[Image: swirl-75-alpha.png |left]]'''Guide @ Debianizzati.org''' è un progetto che ha lo scopo di raccogliere documentazione italiana su Debian GNU/Linux e su GNU/Linux in generale (nel caso di guide generiche indipendenti dalla distribuzione). Questo progetto è nato in seno alla comunità [http://www.debianizzati.org Debianizzati] e ne condivide lo spirito ed il [[contratto sociale]].<br />
<br />
Questo è un [http://it.wikipedia.org/wiki/Pagina_principale wiki], sentiti quindi libero di contribuire anche solo correggendo piccoli errori, estendendo le guide presenti o scrivendone di nuove. Se vuoi contribuire, per favore, leggi le [[Help:Contents|linee guida]] dove troverai le informazioni generali su come editare le pagine.<br />
<br />
Ti preghiamo di non inserire nel wiki contenuti coperti da licenze non libere. In particolare tutte le guide inserite sono da considerarsi rilasciate secondo la licenza Creative Commons "[[Some Rights Reserved|Attribuzione–NonCommerciale–Condividi allo stesso modo 2.0]]". Per ulteriori informazioni vedere anche la pagina [[Guide%40Debianizzati.Org:General_disclaimer|Disclaimer]].<br />
<br />
La nostra comunità altro non è che una libera associazione di [[Speciale:Listusers|persone]] accomunate dai medesimi ideali. La nascita del sito [http://www.debianizzati.org Debianizzati.Org] e di questo wiki è stata la naturale conseguenza del desiderio di conoscersi e di condividere le rispettive conoscenze, in piena sintonia con l'[[etica hacker]].<br />
<br />
Per avere ulteriore informazione sulla community Debianizzati ed i suoi scopi ti invitiamo a leggere [[Cos'è Debianizzati.Org]].<br />
<br />
Buona Navigazione!<br />
<br />
|}<br />
<!-- -------------------- START OF RIGHT-COLUMN ---------------------------------- --><br />
|class="MainPageBG" style="-moz-border-radius: 0.5em;width: 45%; border:1px solid #cedff2; background-color:#f5faff; vertical-align:top"|<br />
<br />
{| width="100%" cellpadding="2" cellspacing="5" style="vertical-align:top; background-color:#f5faff"<br />
<br />
! <h2 style="margin: 0; background-color:#cedff2; font-family: sans-serif; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding-left:0.4em; padding-top: 0.2em; padding-bottom: 0.2em;">Risorse sul Wiki</h2><br />
|-<br />
|style="color:#000"|<br />
[[Image: bookcase.png |right|75px]]<br />
* '''[[Indice Guide]]''': troverete qui la raccolta delle guide e degli articolo tecnici dedicati a Debian e a GNU/Linux. Potete navigare tra le guide anche '''[[Lista Categorie|per categorie]]'''.<br />
* '''[[Faq|FAQ]]''': una raccolta di domande frequentemente poste sul nostro [http://www.debianizzati.org/component/option,com_joomlaboard/Itemid,29/func,latest/do,show/sel,24/ forum].<br />
* '''[[:Categoria:Glossario|Glossario]]''': un glossario dei termini informatici di uso più comune.<br />
* '''[[Tabella Software]]''': una tabella comparativa tra software libero e software proprietario disponibile per le varie applicazioni.<br />
* '''[[Software_Libero|Software Libero]]''' raccolta di materiale e libri on-line dedicati al Software Libero e alla sua storia.<br />
* '''[http://guide.debianizzati.org/dump/ Dump delle guide]''' l'esport in html delle guide presenti, per una consultazione offline.<br />
<br />
|-<br />
! <h2 style="margin: 0; background:#cedff2; font-family: sans-serif; font-size:120%; font-weight:bold; border:1px solid #a3b0bf; text-align:left; color:#000; padding-left:0.4em; padding-top: 0.2em; padding-bottom: 0.2em;">Contribuire ...</h2><br />
|- <br />
|style="color:#000"|<br />
<br />
* '''[[Wishlist]]''': segnala in questa pagina le guide che vorresti venissero scritte sul wiki.<br />
* '''[[Speciale:PagineRichieste | Pagine Richieste]]''': controlla le pagine più richieste e, se vuoi, scrivine il contenuto.<br />
* '''[[Aiuto:Contents|Come scrivere una guida]]''': delle ''linee guida'' da seguire nella stesura di una articolo o di una guida per aiutarci a mantenere un elevato standard qualitativo.<br />
* '''[[Aiuto:Editing|Aiuto sulla formattazione]]''': le principali regole di formattazione del testo nel wiki.<br />
* '''[http://www.debianizzati.org/content/view/344/2/ Contribuire allo sviluppo di Debianizzati.Org]'''<br />
<br />
* '''[[Contribuire a Debian]]''': alcuni suggerimenti sui vari modi per contribuire direttamente a Debian.<br />
<br />
|-<br />
|}<br />
|}<br />
<br />
<br />
<!-- -------------------- START OF FOOTER BOX ------------------------------ --><br />
{| style="border-spacing:8px;margin:-8px -8px"<br />
|class="MainPageBG" style="-moz-border-radius: 0.5em;width: 100%; border:1px solid #ddcef2; background-color:#faf5ff; vertical-align:top; color:#000"|<br />
{| cellpadding="2" cellspacing="5" style="vertical-align:top; background-color:#faf5ff; color:#000"<br />
! <h2 style="margin: 0; background-color:#ddcef2; font-family: sans-serif; font-size:120%; font-weight:bold; border:1px solid #afa3bf; text-align:left; color:#000; padding-left:0.4em; padding-top: 0.2em; padding-bottom: 0.2em;">Altre Risorse di Debianizzati.Org</h2><br />
|-<br />
|style="color:#000"|<br />
[[Image: users.png |right|75px]]<br />
* '''[[Chat]]''': gli utenti della community Debianizzati si incontrano regolarmente su un [[Chat|canale IRC]] dove possono conoscersi meglio e parlare di [http://www.debian.org Debian] e di [[Cos'è_il_Software_libero|Software Libero]].<br />
<br />
|-<br />
|}<br />
|}<br />
__NOEDITSECTION__</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Pulire_Debian&diff=15371Pulire Debian2008-07-14T21:35:21Z<p>MaXeR: /* Localepurge: rimuoviamo le lingue che non ci interessano! */ errore nella frase descrittiva</p>
<hr />
<div>{{debianized}}<br />
<br />
==Introduzione==<br />
<br />
Dopo qualche mese di utilizzo di una linux box, spesso si notano dei sostanziali rallentamenti...<br />
Magari abbiamo passato questi periodi installando e disintallando applicazioni, provando programmi e configurazioni...ed il sistema risente un po' di queste 'esperienze'...<br />
In questo HowTo vedremo di analizzare una soluzione molto comoda (sicuramente molto di più di quella classica di formattare e ricominciare da capo) per rimettere in sesto la nostra amata Debian.<br />
<br />
==Prevenire è meglio che curare==<br />
<br />
Penso che sia una cosa certa, poter lavorare su un sistema 'pulito' e 'pulibile' è sicuramente più comodo e divertente che su uno 'sporco' e mal gestito, soprattutto quando si tratta di pulizia o di interventi sul sistema!<br />
<br />
Iniziamo con la rassegna di applicazioni utili:<br />
<br />
<br />
==CheckInstall: deb da sorgenti==<br />
<br />
Checkinstall è una utilità che permette di creare dei pacchetti Debian partendo da sorgenti...<br />
Attenzione, però: non sono pacchetti completi, ma semplicemente aiutano a tenere traccia dei file installati dal programma, facilitando l'aggiornamento e la rimozione dello stesso.<br />
Iniziamo con l'installazione:<br />
<pre><br />
# apt-get install checkinstall<br />
</pre><br />
<br />
<br />
L'utilizzo è molto semplice ed intuitivo: la configurazione dei sorgenti (./configure --some-options) e la compilazione (make) devono venir svolte, mentre il comando<br />
<pre><br />
# make install<br />
</pre><br />
<br />
deve essere sostituito da<br />
<pre><br />
# checkinstall<br />
</pre><br />
<br />
<br />
Ed il gioco è fatto!<br />
Durante l'esecuzione del programma verranno poste alcune domande, ad esempio il tipo di pacchetto (il programma permette di creare pacchetti deb, rpm, tgz (usati da slackware))!<br />
Sono disponibili, opzionalmente, le seguenti direttive (anche se non mi è mai capitato di doverne fare uso):<br />
<br />
; -y, --default : Accetta i valori di default (Modalità non interattiva)<br />
; --pkgname=name : Imposta il nome del pacchetto<br />
; --pkgversion=version : Imposta la versione<br />
; -A, --arch, --pkgarch=arch : Imposta l'architettura<br />
; --pkgrelease=release : Imposta la release version<br />
; --pkggroup=group : Imposta il gruppo a cui il pacchetto deve appartenere (doc, games, net...)<br />
; --pakdir=directory : Dove salvare il pacchetto<br />
; --maintainer=email_addr : Il maintainer del pacchetto<br />
; --dpkgflags=flags : Eventuali flag da passare a dpkg<br />
; --bk : Esegue un Backup dei file che verranno sovrascritti<br />
<br />
<br />
Una volta completato il processo, il pacchetto verrà automaticamente installato.<br />
<br />
{{Box|Nota Bene|Nel file di controllo del pacchetto non vengono segnate eventuali dipendenze, sostituzioni e/o conflitti, in quanto lo scopo di checkinstall è quello di tenere traccia dei file generati, e non di creare un pacchetto Debian ufficiale...<br />
Non ridistribuite il pacchetto così creato: è solo per uso personale (per motivazioni uguali a quella precedente)!}}<br />
<br />
<br />
Questa è la premessa per poter avere un sistema pulito, senza file 'orfani' che gironzolano per il sistema...<br />
<br />
==Debfoster==<br />
<pre><br />
# apt-get install debfoster<br />
</pre><br />
<br />
Lo scopo di questo programma è di mostrare i pacchetti che non sono installati come dipendenze...<br />
Una volta individuato uno di questi pacchetti, verà mostrata una lista con indicati i pacchetti 'bloccati' da questo.<br />
<br />
Output d'esempio:<br />
<pre><br />
libxml-libxml-perl is keeping the following 3 packages installed:<br />
libxml-libxml-common-perl libxml-namespacesupport-perl libxml-sax-perl<br />
Keep libxml-libxml-perl? [Ynpsiuqx?], [H]elp:</pre><br />
<br />
<br />
Ora possiamo scegliere cosa fare:<br />
<br />
; Y : mantiene il pacchetti installato<br />
; n : Rimuove il pacchetto segnalato<br />
; p : Rimuove il pacchetto segnalato e tutti i pacchetti da lui trattenuti<br />
; s : Salta la domanda<br />
; i : Visualizza informazioni sul pacchetto<br />
; ? : Uguale a '''i'''<br />
; u : Ripropone la domanda precedente<br />
; q : Esce senza apportare alcuna modifica<br />
; x : Esce e rimuove i pacchetti selezionati<br />
; h : Visualizza la guida ai comandi<br />
<br />
<br />
Che dire...uno strumento veramente potente!<br />
<br />
Quando si procede alla pulizia con questo programma, però, è bene fare attenzione ad alcune cose, che potrebbero generare non pochi problemi:<br />
- Tutte le informazioni mostrate non prendono in considerazione eventuali programmi compilati da sorgenti (con il classico make install o anche con checkinstall);<br />
- Leggere con attenzione le librerie elencate come 'bloccate', in quanto qualche volta potrebbe essere indicata, per esempio, una libreria di sviluppo non necessaria all'esecuzione di altri programmi, ma indispensable per la compilazione (libncurses5-dev, ad esempio).<br />
<br />
==Deborphan==<br />
<pre><br />
# apt-get install deborphan<br />
</pre><br />
<br />
Questo programma, genera una lista di pacchetti 'orfani'.<br />
Per pacchetti 'Orfani' indichiamo quelle librerie che non sono più necessarie, in quanto nessun pacchetto installato le indica come dipendenza.<br />
<br />
Attenzione se si hanno programmi compilati da sorgente (in modo classico o con checkinstall): le dipendenze di quei pacchetti sono saranno controllate, e si potrebbe incorrere in problemi di esecuzione di questi programmi!<br />
<br />
Opzione interessante è '''--libdev''', che genera una lista delle librerie di sviluppo (quelle che finiscono con -dev) non necessarie!<br />
<br />
Per visualizzare una lista dei pacchetti 'Orfani', è sufficiente lanciare il seguente comando:<br />
<pre><br />
# deborphan<br />
</pre><br />
<br />
o<br />
<pre><br />
# deborphan --libdevel<br />
</pre><br />
<br />
È possibile fare in modo che apt-get 'legga' la lista dei pacchetti generata da deborphan:<br />
<pre><br />
# apt-get --purge remove `deborphan`<br />
# apt-get --purge remove `deborphan --libdev`<br />
</pre><br />
<br />
L'opzione --purge ha la funzione di rimuovere anche i file di configurazione.<br />
<br />
<br />
==File di Configurazione==<br />
<br />
Eliminando i file di configurazione si libera spazio, e si mantiene più pulita la directory <tt>/etc</tt>.<br />
<br />
Con il seguente comando è possibile rimuovere i file di configurazione che sono stati lasciati nel sistema dai pacchetti rimossi senza l'opzione <code>--purge</code>:<br />
<br />
<pre><br />
# dpkg --purge `COLUMNS=300 dpkg -l | egrep "^rc" | cut -d' ' -f3`<br />
</pre><br />
<br />
Ecco una breve spiegazione dei comandi:<br />
<br />
<pre>dpkg --purge listapacchetti</pre><br />
<br />
rimuove i file di configurazione di tutti i pacchetti indicati. La lista dei pacchetti è ottentuta tramite il comando:<br />
<br />
<pre>`COLUMNS=300 dpkg -l | egrep "^rc" | cut -d' ' -f3`</pre><br />
<br />
che genera la lista dei pacchetti che non sono stati rimossi completamente (cioè dei quali non sono stati rimossi i file di configurazione).<br />
<br />
In dettaglio:<br />
;<tt>COLUMNS=300</tt>: Modifica la larghezza delle righe, evitando così il troncamento dei nomi dei pacchetti (<tt>COLUMNS</tt> è una semplice variabile di ambiente)<br />
;<tt>dpkg -l</tt>: Elenca tutti i pacchetti disponibili<br />
;<tt>egrep "^rc"</tt>: Visualizza solo quelle righe che iniziano con "rc" (stato che indica che il pacchetto è stato rimosso ma sono ancora presenti i file di configurazione)<br />
;<tt>cut -d' ' -f3</tt>: Restituisce solo il nome del pacchetto: usa come delimitatore (<code>-d</code>) di campo uno spazio (<code>' '</code>) e prende solo il terzo campo (<code>-f3</code>, ''field'' in inglese).<br />
<br />
==Localepurge: rimuoviamo le lingue che non ci interessano!==<br />
<br />
Spesso, non sono necessarie tutte le lingue che un pacchetto installa..<br />
Di solito ne bastano due:<br />
* '''en''' (lingua generale)<br />
* '''it_IT''' (lingua dell'utilizzatore)<br />
Tra le varianti va scelta quella che viene usata nel proprio sistema (nel mio caso it_IT@euro e en_US)<br />
<br />
Quindi, quelle superflue, potrebbero essere tranquillamente rimosse, liberando un po' di spazio inutile!<br />
<br />
{{Box|NOTA BENE|è sconsigliabile rimuovere l'inglese, in quanto è la lingua di default del sistema...<br />
per evitare problemi, lasciarla installata.}}<br />
<br />
<br />
Durante la configurazione di localepurge, verrà mostrata una lista di lingue, dalla quale vanno selezionate solo quelle che non devono venir rimosse.<br />
<br />
Una volta fatto questo, lanciando il comando<br />
<pre># localepurge</pre><br />
<br />
verranno eliminati i locales non necessari!!!<br />
<br />
Ma non solo! quando si installerà uno o più pacchetti, a questi verranno automaticamente rimosse le localizzazioni che non erano state selezionate durante la configurazione del programma.<br />
<br />
{{Box|Nota|Per chi avesse dei dubbi sull'efficacia di questa utility, ecco le statistiche sullo spazio liberato sul mio laptop (su cui ho appena installato Debian):<br />
<pre><br />
knio:/home/maxer# localepurge<br />
localepurge: Disk space freed in /usr/share/locale: 109778K<br />
localepurge: Disk space freed in /usr/share/man: 1940K<br />
<br />
Total disk space freed by localepurge: 111718K<br />
</pre>}}<br />
<br />
==La cache di apt-get==<br />
<br />
Quando scarichiamo un pacchetto, questo viene salvato in /var/cache/apt/archives in modo da rendere più veloce il download in caso di reinstallazione, oppure per permettere il salvataggio di questi su cd (in caso di connessioni lente o a consumo).<br />
Però, ovviamente, occupano spazio e (dopo qualche mese, tra aggiornamenti e nuove installazioni) si arriva facilmente ad 1Gb di dati..<br />
Per risolvere questo problemia, lo stesso apt-get ha due comandi che gestiscono la pulizia della cache dei pacchetti scaricati:<br />
clean e autoclean<br />
<br />
Vediamoli in dettaglio:<br />
; apt-get clean : Rimuove tutti i pacchetti contenuti in /var/cache/apt/archives e in /var/cache/apt/archives/partial (eccezione fatta per i file di lock)<br />
; apt-get autoclean : Rimuove tutti i pacchetti che non possono più essere scaricati (perchè rimossi dai repository Debian, versioni non può scaricabili in quanto 'superate',...)<br />
<br />
Per quanto riguarda il sistema, abbiamo terminato...<br />
<br />
==La cache di apt-build==<br />
<br />
Le stesse cosa dette per ''apt-get'', valgono anche per ''apt-build''. Questo, infatti, una volta scaricati e compilati i sorgenti, non li rimuove. È facile, così, occupare svariati Gb di spazio con i sorgenti (e i risultati della compilazione). Apt-build, per effettuare pulizia, ci mette a disposizione 3 ''azioni'':<br />
; clean-sources : esegue un ''debian/rules clean'', che rimuove solamente i prodotti della compilazione;<br />
; clean-build : rimuove il contenuto della directory '''/var/cache/apt-build/build/''' che contiene i sorgenti dei pacchetti ricompilati;<br />
; clean-repository : rimuove il contenuto della directory '''/var/cache/apt-build/repository/''' che contiene i pacchetti ricompilati tramite apt-build.<br />
<br />
==Home==<br />
<br />
Nella vostra home vengono creati i file di configurazione delle applicazioni!<br />
niente di strano, se non fosse che occupano spazio, spesso senza un motivo!<br />
per vedere questi file/directory di configurazione è necessario usare ls seguito dalla opzione -a:<br />
<pre><br />
$ ls -a<br />
</pre><br />
<br />
<br />
Così facendo verranno mostrati i file/directory nascosti (in pratica quelli con un punto davanti).<br />
Una volta individuati dei file/directory appartenenti ad applicazioni non più presenti nel sistema, o non più utilizzate dal vostro utente, si può procedere alla rimozione con:<br />
<pre><br />
$ rm -r nome_dir<br />
</pre><br />
<br />
<br />
dove l'opzione -r indica la ricorsività dell'operazione, consentendo l'eliminazione delle directory.<br />
<br />
<br />
==Conclusione==<br />
<br />
Queste sono le tecniche base per tenere pulita una Debian, e sono quelle che applico regolarmente alle mie macchine...<br />
Diciamo che si avvertono i miglioramenti, soprattutto per quanto riguarda lo spazio risparmiato, che permette una miglior organizzazione dei dati all'interno del disco!<br />
<br />
<br />
---- [[User:MaXeR|MaXeR]]<br />
[[Categoria:Apt]]<br />
[[Categoria:Sistema]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Integrit:_file_verification_system&diff=15351Integrit: file verification system2008-06-23T09:36:53Z<p>MaXeR: </p>
<hr />
<div>[http://integrit.sourceforge.net/ Integrit] è un "file verification system": è assimilabile alla famiglia degli [[intrusion detection system]] o [[IDS]] e ha la funzione di verificare che determinati file non subiscano modifiche.<br />
<br />
Questo genere di controlli hanno molti vantaggi:<br />
* non sono pesanti: infatti vengono eseguiti prevalentemente di notte e occupano pochi minuti<br />
* sono utili: un aggressore che vuole nascondere dei file, accessi o servizi potrebbe modificare file come [[netstat]], [[last]], [[w]], ls...<br />
* si affiancano a [[ids]] di rete e software come [[rkhunter]]<br />
<br />
Ovviamente non si tratta della soluzione di tutti i mali, in quanto potrebbe essere possibile che l'aggressore abbia modificato anche l'eseguibile di integrit, però un controllo in più non fa mai male!<br />
<br />
= Installazione =<br />
L'installazione è molto semplice: <br />
<pre><br />
# apt-get install integrit<br />
</pre><br />
<br />
= Configurazione =<br />
I file di configurazione si trovano in <tt>/etc/integrit</tt>. Dopo l'installazione sono presenti i seguenti file:<br />
; integrit.conf : un template di file di configurazione (infatti è tutto commentato), lo utilizzeremo in seguito come punto di partenza<br />
; integrit.debian.conf : il file di configurazione utilizzato dal [[cron]] di Debian<br />
<br />
== Integrit ==<br />
Il file di configurazione di integrit è semplice ed è composto dalle seguenti sezioni:<br />
; root : la directory di partenza (normalmente <tt>/</tt>)<br />
; know : il [[path]] per il database contenente lo stato ''conosciuto'' del sistema (default <tt>/var/lib/integrit/known.cdb</tt>)<br />
; current : il path del database usato per effettuare il confronto tra lo stato ''conosciuto'' e quello ''attuale'' (default <tt>/var/lib/integrit/current.cdb</tt>)<br />
<br />
seguito da un elenco di file da ignorare.<br />
<br />
La sintassi dell'elenco è la seguente:<br />
<pre><br />
[action]/directory [controlli]<br />
</pre><br />
<br />
dove:<br />
; action : è facoltativa, e rappresenta l'azione da eseguire. L'azione di default è di esplorare la directory e tutto il suo contenuto... Le alternative sono:<br />
: <tt>!</tt> : l'operatore di negazione: <tt>!/etc</tt> indica di non controllare il contenuto della directory <tt>/etc</tt><br />
: <tt>=</tt> : indica di non esplorare ricorsivamente il contenuto della directory<br />
: <tt>$</tt> : permette di creare una regola che non va ad agire sulle sottodirectory ma solo sulla directory(ed i file contenuti) indicata<br />
; /directory : indica il percorso su cui agire<br />
; [controlli] : permette di specificare i controlli da eseguire<br />
: <tt>s</tt> : [[checksum]]<br />
: <tt>i</tt> : [[inode]]<br />
: <tt>p</tt> : permessi<br />
: <tt>l</tt> : numero di link<br />
: <tt>u</tt> : [[uid]]<br />
: <tt>g</tt> : [[gid]]<br />
: <tt>z</tt> : la dimensione dei file (risulta essere un controllo ridondante se viene effettuato anche il controllo del checksum)<br />
: <tt>a</tt> : la data di accesso<br />
: <tt>m</tt> : la data di modifica<br />
: <tt>r</tt> : reimposta la data di accesso<br />
: le opzioni possono essere scritte in due modi: in minuscolo, il che indica che il controllo deve essere fatto, oppure in maiuscolo, per indicare che il controllo non deve essere effettuato.<br />
<br />
== Debian ==<br />
Il file di configurazione <tt>/etc/integrit/integrit.debian.conf</tt> viene utilizzato dal cron presente in <tt>/etc/cron.daily/integrit</tt>.<br />
<br />
Il file di configurazione è composto da quattro variabili:<br />
; CONFIGS : contiene l'elenco dei file di configurazione da far processare ad integrit. Dopo l'installazione è vuoto, quindi dovremo aggiungere quello che abbiamo precedentemente creato: <tt>/etc/integrit/integrit.conf</tt><br />
; EMAIL_RCPT : l'indirizzo del destinatario di posta elettronica a cui inviare la mail di notifica (root va bene se sono stati correttamente modificati gli alias di posta, altrimenti potete tranquillamente inserire il vostro indirizzo)<br />
; EMAIL_SUBJ : l'oggetto della mail che riceverete. Normalmente non è necessario effettuare modifiche<br />
; ALWAYS_EMAIL : ''true'' se si desidera ricevere una mail di notifica anche quando non vengono riscontrate anomalia, ''false'' altrimenti<br />
<br />
Una volta modificato il file di configurazione non ci resta che testare il tutto con un semplice<br />
<pre><br />
# /etc/cron.daily/integrit<br />
</pre><br />
magari impostando <tt>ALWAYS_EMAIL</tt> a ''true'' per effettuare un po' di [[debug]].<br />
<br />
<br />
<br />
= Funzionamento =<br />
Il funzionamento è semplice: ogni volta che viene effettuato un update, viene creato il database '''current''' che raccoglie lo stato attuale del sistema. Ogni volta che viene effettuato un check, invece, viene confrontato il database di tipo '''current''' con il '''known''', in caso di discrepanze (ed in base alle regole definite nel file di configurazione) viene generato il report.<br />
<br />
Una volta controllate le discrepanze e verificato che siano corrette (in caso di aggiornamento di un pacchetto, ad esempio) è necessario aggiornare il database '''know''' con un semplice:<br />
<pre><br />
mv /var/lib/integrit/current.cdb /var/lib/integrit/known.cdb<br />
</pre><br />
<br />
= Controllo manuale =<br />
In caso di problemi è possibile effettuare un controllo manuale richiamando lo script cron (<tt>/etc/cron.daily/integrit</tt>) oppure con un semplice:<br />
<pre><br />
# integrit -cu -C /etc/integrit/integrit.conf<br />
</pre><br />
<br />
= Link Utili =<br />
* Home Page del progetto: http://integrit.sourceforge.net/<br />
<br />
[[Categoria:Server]]<br />
[[Categoria:Sicurezza]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Integrit:_file_verification_system&diff=15350Integrit: file verification system2008-06-23T09:36:16Z<p>MaXeR: /* Funzionamento */</p>
<hr />
<div></div>MaXeRhttps://guide.debianizzati.org/index.php?title=Integrit:_file_verification_system&diff=15349Integrit: file verification system2008-06-23T09:30:55Z<p>MaXeR: /* Funzionamento */</p>
<hr />
<div></div>MaXeRhttps://guide.debianizzati.org/index.php?title=Samba_e_OpenLDAP:_creare_un_controller_di_dominio&diff=15348Samba e OpenLDAP: creare un controller di dominio2008-06-17T11:25:14Z<p>MaXeR: </p>
<hr />
<div>==Samba e OpenLDAP: creare un controller di dominio==<br />
===Introduzione===<br />
In questo articolo vedremo come installare un server basato su Debian Sarge e Samba 3 con backend di un database LDAP, affinché funga da Primary Domain Controller di una rete Windows. Lo stesso server LDAP verrà utilizzato anche per la gestione in contemporanea degli utenti Unix, in modo da avere un controllo unico e centralizzato sia sugli utenti Windows sia sugli utenti Linux.<br/><br />
Per la redazione di questa guida mi sono basato su questi ottimi HowTo:<br/><br />
http://www.slag.it/documenti/samba3_ldap_pdc/samba3_ldap_pdc_howto.php<br/><br />
http://www.pluto.it/files/journal/pj0605/samba3pdc.html<br/><br />
http://www.linuxtrent.it/documentazione/wikilinux/SambaLDAPcomePDCsuDebianSarge<br />
<br/><br />
e li ho integrati con annotazioni, appunti e configurazioni speciali che mi sono stati indispensabili per completare correttamente le operazioni di creazione di un dominio e di aggiunta al dominio stesso di macchine client Microsoft.<br />
<br/><br />
<br />
===Sistema installato===<br />
Il presente HOWTO è stato realizzato utilizzando un sistema Debian 3.1 Sarge con tutti gli aggiornamenti di sicurezza ufficiali. La configurazione iniziale del sistema prevede un'installazione base Debian net install senza alcun componente aggiuntivo.<br/><br />
Durante tutto il processo si presuppone di agire come utente root.<br />
<br/><br />
===Samba===<br />
Si consiglia di installare immediatamente Samba, in quanto alcuni strumenti che mette a disposizione saranno necessari anche per le configurazioni degli altri servizi.<br />
<pre><br />
# apt-get install samba smbclient<br />
</pre><br />
Per il momento come configurazione base rispondente nel seguente modo alle domande che vi verranno poste:<br/><br />
*Nome del Dominio/Workgroup: LOGIC<br />
*Utilizzare password cifrate: SI<br />
*Utilizzare DHCP per i nomi Netbios: NO<br />
*Avviare Samba come demoni (no inetd)<br />
*Creare il database delle password: NO<br />
Non preoccupatevi per eventuali errori, perchè tutta la configurazione verrà ripresa in un secondo momento.<br />
<br/><br />
===Installazione e configurazione del server LDAP===<br />
Il server LDAP è essenzialmente un database gerarchico che viene utilizzato per la memorizzazione dei dati degli utenti, dei computer del dominio e di tutto quanto si desideri gestire tramite una base dati condivisibile via rete tra più sistemi.<br/><br />
Si considera che il server in questione venga utilizzato all'interno di una rete aziendale altamente affidabile e non verranno, pertanto, trattati gli aspetti relativi alla crittografia delle comunicazioni. Questa scelta riduce la sicurezza, pertanto si consiglia di approfondire l'argomento.<br/><br />
Per utilizzare il server LDAP occorre installare il pacchetto slapd che costituisce un'implementazione di server LDAP, il pacchetto ldap-utils, un insieme di strumenti che ne permettono la gestione, e il pacchetto samba-doc, contentente alcuni file necessari per configurare LDAP per l'utilizzo con SAMBA.<br/><br />
<pre><br />
# apt-get install slapd ldap-utils samba-doc<br />
</pre><br />
Durante l'installazione verranno richieste alcune informazioni necessarie a configurare il server LDAP. In particolare verrà richiesto il nome del dominio che può essere un dominio interno completamente inventato (es. miadominio.tld) o un dominio internet valido. La scelta è legata a politiche organizzative aziendali e tecniche che richiederebbero una trattazione approfondita e che esula da questo HOWTO.<br/><br />
Nei file riportati si considera che il dominio specificato è <tt>logic</tt>, un dominio interno non valido per Internet.<br />
In seguito verrà richiesta la password per l'utente amministratore. Scegliete una password particolarmente sicura, in quanto tramite essa si potrà avere accesso completo alla gestione degli utenti del vostro dominio e, pertanto, accedere a qualsiasi sistema presente sulla vostra rete. Questa password, inoltre, verrà utilizzata anche in seguito in alcuni file di configurazione, pertanto è bene ricordarsela.<br/><br />
Come nome dell'organizzazione mettete una descrizione della vostra organizzazione: Rete LAN di Logic.<br/><br />
Per tutte le altre opzioni possono essere confermate le impostazioni di default.<br />
<br/><br/><br />
Passiamo ora alla configurazione del server LDAP.<br/><br />
Innanzitutto dobbiamo copiare in <tt>/etc/ldap/schema</tt> lo schema LDAP necessario per SAMBA.<br />
<pre><br />
# zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema<br />
</pre><br />
Ora occorre modificare il file di configurazione di slapd (<tt>/etc/ldap/slapd.conf</tt>) aggiungendo nella sezione <tt>Schema and objectClass definitions</tt> lo schema per samba:<br />
<pre><br />
include /etc/ldap/schema/samba.schema<br />
</pre><br />
Nella sezione <tt>Indexing options</tt> aggiungere una serie di indicizzazioni che ottimizzeranno le interogazioni per l'utilizzo del server SAMBA:<br />
<pre><br />
index objectClass eq<br />
index uid,uidNumber,gidNumber,memberUid eq<br />
index cn,mail,surname,givenname eq,subinitial<br />
index sambaSID eq<br />
index sambaPrimaryGroupSID eq<br />
index sambaDomainName eq<br />
</pre><br />
Bisogna consentire agli utenti di cambiare non solo la propria password LDAP, ma anche le password di SAMBA e contemporaneamente proteggere tali informazioni da un accesso pubblico sostituendo la riga:<br />
<pre><br />
access to attribute=userPassword<br />
</pre><br />
con:<br />
<pre><br />
access to attrs=userPassword,sambaNTPassword,sambaLMPassword<br />
</pre><br />
Infine aggiungere le informazioni per l'autenticazione:<br />
<pre><br />
rootdn "cn=admin,dc=logic"<br />
rootpw "passworddiadmindigitataprecedentemente"<br />
</pre><br />
Possiamo far ripartire <tt>slapd</tt> affinché tutte le modifiche apportate siano prese in considerazione.<br />
<pre><br />
# /etc/init.d/slapd restart<br />
</pre><br />
Si può controllare che il server sia correttamente partito eseguendo una query con il comando:<br />
<pre><br />
# ldapsearch -x<br />
</pre><br />
La risposta deve essere un file LDIF. Se invece si ottiene un errore di connessione ricontrollare tutte le impostazioni e i file di log. Per controllare il funzionamento di <tt>slapd</tt> può sempre tornare utile fermare il servizio e farlo partire, anziché con gli script standard debian con il comando:<br />
<pre><br />
# slapd -d 256<br />
</pre><br />
In tal modo viene avviato visualizzando varie informazioni di debug a video.<br />
<br/><br />
<br />
===Configurazione dei client per LDAP===<br />
Ogni volta che un client accede ad un server LDAP deve impostare la base di ricerca e, nel caso si trovi su un server differente, l'URL del server LDAP. Queste informazioni possono essere impostate come default nel file <tt>/etc/ldap/ldap</tt>.conf aggiungendo le righe:<br />
<pre><br />
BASE dc=logic<br />
URI ldap://localhost<br />
</pre><br />
Una volta fatto questo è possibile verificare il corretto funzionamento di LDAP nuovamente con il comando:<br />
<pre><br />
# ldapsearch -x<br />
</pre><br />
che dovrebbe fornire tutti i dati presenti nel server LDAP. Sempre pochi, ma in numero maggiore rispetto a quanto elencato la volta precedente.<br />
<br/><br />
===Configurare i SMBLDAP TOOLS===<br />
I smbldap-tools sostituiscono i comandi standard di UNIX per la gestione di gruppi, utenti e password in modo da dialogare direttamente con il server LDAP e fornire un metodo per gestire in contemporanea gli account UNIX e SAMBA.<br/><br />
Malgrado la documentazione ufficiale di SAMBA asserisca che smbpasswd sia in grado di gestire tali account, utilizzando quello strumento occorre prima creare l'utente UNIX, poi quello Samba, pertanto ne sconsiglio l'utilizzo.<br />
====Installazione====<br />
Installare il pacchetto smbldap-tools<br />
<pre><br />
# apt-get install smbldap-tools<br />
</pre><br />
====Configurazione====<br />
Copiare i file <tt>smbldap.conf</tt> e <tt>smbldap_bind.conf</tt> in <tt>/etc/smbldap-tools</tt>.<br />
<pre><br />
# zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf<br />
# cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf<br />
</pre><br />
Modificare il file <tt>/etc/smbldap-tools/smbldap_bind.conf</tt> inserendo il DN dell'amministratore del server LDAP e la sua password. Il DN dell'amministratore è stato impostato automaticamente durante l'installazione del pacchetto Debian di slapd e corrisponde a <nowiki>"cn=admin,dc=<dominio>"</nowiki>, in cui il dominio dipende dalle configurazioni sopra riportate per il server LDAP. La password è quella richiesta in fase di installazione del server LDAP.<br/><br />
Se non si è sicuri del DN da inserire lanciare il comando:<br />
<pre><br />
# slapcat<br />
</pre><br />
e cercare una riga che inizia con <nowiki>"dn: cn="</nowiki>. Il valore riportato è quello da inserire come DN. Nel file sono presenti le configurazioni sia per il master che per lo slave, in modo da poter gestire un server di backup per il sistema LDAP gestito tramite slurpd.<br/><br />
Al momento si presuppone di avere un solo server LDAP, pertanto le configurazioni coincideranno:<br />
<pre><br />
slaveDN="cn=admin,dc=logic"<br />
slavePw="passworddiadmindigitataprecedentemente"<br />
masterDN="cn=admin,dc=logic"<br />
masterPw="passworddiadmindigitataprecedentemente"<br />
</pre><br />
Eseguire il comando:<br />
<pre><br />
# net getlocalsid<br />
</pre><br />
e copiare o prendere nota del codice che viene restituito.<br />
<br/><br />
Modificare il file <tt>/etc/smbldap-tools/smbldap.conf</tt> inserendo il SID appena ottenuto e controllare gli indirizzi dei 2 server LDAP in modo che coincidano con il server locale (127.0.0.1).<br />
<pre><br />
SID="S-1-5-21-2318037123-1631426476-2439636316"<br />
slaveLDAP="127.0.0.1"<br />
slavePort="389"<br />
masterLDAP="127.0.0.1"<br />
masterPort="389"<br />
</pre><br />
Verificare che il TLS sia disabilitato.<br />
<pre><br />
ldapTLS="0"<br />
</pre><br />
Configurare il corretto suffisso per il dominio (quello specificato nella configurazione di LDAP) e il nome corretto per il dominio che si vuole configurare (LOGIC).<br />
<pre><br />
suffix="dc=logic"<br />
sambaUnixIdPooldn="sambaDomainName=LOGIC,${suffix}"<br />
</pre><br />
Potrebbe tornare utile anche impostare una differente scadenza per le password, in modo che non ne venga richiesta la sostituzione troppo di frequente:<br />
<pre><br />
defaultMaxPasswordAge="180"<br />
</pre><br />
Questo parametro è poi utilizzato al momento della creazione di un utente e ogni volta che un utente si cambia password.<br/><br />
Configurare infine i percorsi per le home degli utenti e per le cartelle che conterranno i profiles nel caso di roaming profiles.<br />
<pre><br />
userSmbHome="\\PDC-SERVER\%U"<br />
userProfile="\\PDC-SERVER\profiles\%U"<br />
</pre><br />
PDC-SERVER deve essere sostituito con il nome SAMBA del server che funziona come PDC (il server che stiamo configurando; lo stesso nome che verrà impostato più avanti nel file di configurazione di Samba). In questo esempio, inoltre, si è ritenuto di fornire uno script di logon comune a tutti gli utenti, anziché di uno script personale per ogni utente, pertanto si è impostato il seguente parametro:<br />
<pre><br />
userScript="logon.bat"<br />
</pre><br />
Tale impostazione può essere poi cambiata per determinati utenti con esigenze particolari direttamente agendo sui dati LDAP dell'utente.<br/><br />
Impostare infine il suffisso per gli indirizzi mail, anche se nel presente HOWTO non vengono configurati.<br />
<pre><br />
mailDomain="logicsnc.com"<br />
</pre><br />
Terminate le modifiche al file, bisogna cambiare i permessi per i file appena modificati al fine di aumentare la sicurezza del sistema ed impedire agli utenti di avere accesso alle password di amministratore di LDAP, scritta in chiaro nel file di configurazione precedentemente modificato.<br />
<pre><br />
# chmod 0644 /etc/smbldap-tools/smbldap.conf<br />
# chmod 0600 /etc/smbldap-tools/smbldap_bind.conf<br />
</pre><br/><br />
<br />
===Configurazione di SAMBA===<br />
A questo punto il backend per la memorizzazione degli utenti e la loro gestione è pronto; è quindi il momento di passare a SAMBA per farlo accedere a quanto fatto finora.<br />
====Creazione dei dati base====<br />
Per il funzionamento corretto SAMBA ha bisogno di diversi gruppi predefiniti e 2 utenti: Administrator e nobody.<br/><br />
Inoltre, affinché si riesca ad aggiungere computer al dominio in modo automantico (da macchine Windows), deve esistere un utente con uid = 0 da utilizzare per questa operazione. Tale utente può essere un utente root (da aggiungere a mano) o lo stesso Administrator cambiandogli l'uid. Quest'ultima è la scelta presa in questa configurazione, in modo da avere un utente Administrator che è Administrator per Samba e root per il "dominio" UNIX.<br/><br />
Per creare tali gruppi utilizzare i comandi:<br />
<pre><br />
# smbldap-populate -k 0<br />
# smbldap-useradd -a -m -c "Admin" Administrator<br />
# smbldap-usermod -G "Domain Admins" Administrator<br />
# smbldap-usermod -u 0 Administrator<br />
# smbldap-populate -a Administrator -k 0<br />
</pre><br />
Il parametro "-k 0" imposta l'UID di Administrator a 0, facendolo di fatto coincidere con l'utente root. Gli altri comandi fanno sì che Administrator sia aggiunto al gruppo dei Domain Admins. Durante l'esecuzione del comando vengono riepilogati i record aggiunti. In ogni caso è possibile controllare i dati inseriti con il comando:<br />
<pre><br />
# ldapsearch -x | less<br />
</pre><br />
e anche:<br />
<pre><br />
# ldapsearch -x uid=Administrator<br />
</pre><br />
Infine è bene cambiare la password di Administrator con il comando:<br />
<pre><br />
# smbldap-passwd Administrator<br />
</pre><br />
Questo sarà anche il comando che dovrà essere normalmente utilizzato per la gestione delle password.<br />
====Configurazione di NSS per lavorare con LDAP====<br />
Per far lavorare correttamente Samba è necessario configurare NSS con LDAP. Samba infatti si aspetta di trovare un utente di sistema con lo stesso nome di un utente Samba. Per questo occorre recuperare le informazioni sugli utenti dal database LDAP. È necessario quindi installare:<br />
<pre><br />
# apt-get install libnss-ldap<br />
</pre><br />
Verrà chiesto il server LDAP e il dominio (logic), per tutte le altre domande è possibile mantenere le risposte di default.<br />
Dopo l'installazione è necessario modificare il file di configurazione di NSS (<tt>/etc/nsswitch.conf</tt>) come segue:<br />
<pre><br />
passwd: compat ldap<br />
group: compat ldap<br />
shadow: compat ldap<br />
</pre><br />
È possibile verificare le impostazioni con il comando<br />
<pre><br />
getent passwd<br />
</pre><br />
che dovrebbe riportare anche gli utenti Samba come Administrator.<br />
<br/><br />
I cambiamenti di NSS dovrebbero già essere sufficienti per determinate operazioni, ma l'accesso tramite alcuni strumenti come SSH ancora non funziona.<br/><br />
Per attivare i servizi in modo completo occorre lavorare su PAM e, in particolare, installare le librerie che consentono a PAM di accedere a LDAP.<br />
<pre><br />
# apt-get install libpam-ldap<br />
</pre><br />
Vi viene chiesto come per libnss-ldap, il DN dell'amministratore di LDAP e la sua password. Per il resto possono essere confermate le impostazioni predefinite. In questo modo il file <tt>/etc/pam_ldap.conf</tt> ha già tutte le impostazioni corrette e la password è stata memorizzata in <tt>/etc/ldap.secret</tt>.<br />
<br/><br />
Nella cartella <tt>/etc/pam.d</tt> modificare i seguenti files:<br />
<pre><br />
commom-account:<br />
account sufficient pam_ldap.so<br />
account required pam_unix.so<br />
</pre><br />
<pre><br />
commom-auth:<br />
auth sufficient pam_ldap.so nullok_secure<br />
auth required pam_unix.so use_first_pass<br />
</pre><br />
<pre><br />
commom-password:<br />
password sufficient pam_ldap.so<br />
password required pam_unix.so try_first_pass nullok obscure min=4 max=8 md5<br />
</pre><br />
<pre><br />
commom-session:<br />
session sufficient pam_ldap.so<br />
session required pam_unix.so<br />
</pre><br />
Per provare un servizio, tipo ssh, occorre far ripartire il demone corrispondente e provare ad autenticarsi con un nuovo utente contenuto nel database LDAP.<br />
<br/><br />
===Configurazione del server Samba===<br />
E' possibile copiare un prototipo per il file di configurazione di samba (facendo una copia dell'originale!):<br />
<pre><br />
cp /usr/share/doc/smbldap-tools/examples/smb.conf /etc/samba/smb.conf<br />
</pre><br />
'''ATTENZIONE'''<br />
<br/><br />
Le voci da modificare sono parecchie; conviene un'attenta analisi del file d'esempio allegato nell'appendice, soprattutto per quanto riguarda il binding verso ldap, in modo che rispecchino queste opzioni:<br />
<pre><br />
[global]<br />
workgroup = LOGIC<br />
server string = LAN Server %v<br />
<br />
##### Per permettere un corretto login dei client XP #####<br />
wins support = yes<br />
; wins server = x.y.w.z<br />
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192<br />
; include = /etc/samba/dhcp.conf<br />
dns proxy = no<br />
; name resolve order = lmhosts host wins bcast<br />
unix charset = ISO8859-1<br />
; character set = ISO8859-1<br />
<br />
### Each machina has its own log file ###<br />
log file = /var/log/samba/log.%m<br />
max log size = 1000<br />
; syslog only = no<br />
syslog = 0<br />
<br />
panic action = /usr/share/samba/panic-action %d<br />
<br />
### Authentication ###<br />
security = user<br />
encrypt passwords = true<br />
; passdb backend = tdbsam guest<br />
passdb backend = ldapsam:ldap://127.0.0.1<br />
obey pam restrictions = yes<br />
; guest account = nobody<br />
invalid users = root<br />
;unix password sync = no<br />
<br />
passwd program = /usr/bin/passwd %u<br />
passwd chat = *Enter\snew\sLinux\spassword:* %n\n *Retype\snew\sLinux\spassword:* %n\n .<br />
<br />
; pam password change = no<br />
<br />
##### LDAP Configuration #####<br />
<br />
ldap admin dn = cn=admin,dc=logic<br />
ldap suffix = dc=logic<br />
ldap group suffix = ou=Groups<br />
ldap user suffix = ou=Users<br />
ldap machine suffix = ou=Computers<br />
ldap idmap suffix = ou=Idmap<br />
ldap passwd sync = Yes<br />
<br />
##### Samba PDC #####<br />
<br />
os level = 255<br />
domain master = yes<br />
domain logons = yes<br />
preferred master = yes<br />
time server = yes<br />
logon home =<br />
logon path =<br />
<br />
##### File sharing #####<br />
<br />
; preserve case = yes<br />
; short preserve case = yes<br />
<br />
##### Misc #####<br />
<br />
; include = /home/samba/etc/smb.conf.%m<br />
socket options = TCP_NODELAY<br />
; idmap uid = 10000-20000<br />
; idmap gid = 10000-20000<br />
; template shell = /bin/bash<br />
</pre><br />
Abilitare l'autenticazione tramite username.<br />
<pre><br />
security = user<br />
</pre><br />
Sostituire il bakend predefinito:<br />
<pre><br />
passdb backend = tdbsam guest<br />
</pre><br />
con il backend LDAP:<br />
<pre><br />
passdb backend = ldapsam:ldap://127.0.0.1<br />
</pre><br />
Per utilizzare smbldap per gestire le password:<br />
<pre><br />
; Do ldap passwd sync<br />
ldap passwd sync = Yes<br />
passwd program = /usr/sbin/smbldap-passwd %u<br />
passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated*<br />
</pre><br />
e per gestire gli utenti e i gruppi da windows:<br />
<pre><br />
add user script = /usr/sbin/smbldap-useradd -m "%u"<br />
ldap delete dn = Yes<br />
delete user script = /usr/sbin/smbldap-userdel "%u"<br />
add machine script = /usr/sbin/smbldap-useradd -w "%u"<br />
add group script = /usr/sbin/smbldap-groupadd -p "%g"<br />
delete group script = /usr/sbin/smbldap-groupdel "%g"<br />
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"<br />
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"<br />
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"<br />
</pre><br />
Rendere scrivibili le home directory (di default sono in sola lettura e personalmente non ne capisco il motivo).<br />
<pre><br />
[homes]<br />
comment = Home Directories<br />
browseable = no<br />
writable = yes<br />
create mask = 0700<br />
directory mask = 0700<br />
</pre><br />
Infine decommentare la share [netlogon] e creare la share [profiles].<br />
<pre><br />
[netlogon]<br />
comment = Network Logon Service<br />
path = /var/lib/samba/netlogon<br />
guest ok = yes<br />
writable = no<br />
share modes = no<br />
<br />
[profiles]<br />
path = /var/lib/samba/profiles<br />
read only = no<br />
create mask = 0600<br />
directory mask = 0700<br />
</pre><br />
Il file è pronto. Salvarlo e testarlo con il comando:<br />
<pre><br />
# testparm<br />
</pre><br />
Affinché i roaming profiles funzionino correttamente è necessario che la cartella puntata dalla share [profiles] esista e abbia permessi 1757.<br/><br />
Infine bisogna impostare la password per l'accesso a LDAP come admin<br />
<pre><br />
# smbpasswd -w <password><br />
</pre><br />
e far ripartire SAMBA.<br />
<pre><br />
# /etc/init.d/samba restart<br />
</pre><br />
Creare infine le cartelle necessarie per netlogon e profiles.<br />
<pre><br />
# mkdir /var/lib/samba/netlogon<br />
# mkdir /var/lib/samba/profiles<br />
# chmod 1757 /var/lib/samba/profiles<br />
</pre><br />
====Creare il primo utente====<br />
Adesso siamo pronti per la creazione del primo utente con il comando:<br />
<pre><br />
# smbldap-useradd -a -m -c "Nome Utente" username<br />
</pre><br />
Dove -a serve per creare anche i dati UNIX, -m crea l'home directory e -c specifica il nome completo. Infine impostare la password dell'utente con:<br />
<pre><br />
# smbldap-passwd username<br />
</pre><br />
Per verificare il tutto usare il comando:<br />
<pre><br />
# smbldap-usershow username<br />
</pre><br />
====Creare un gruppo====<br />
<pre><br />
# smbldap-groupadd "NomeGruppo"<br />
</pre><br />
====Aggiunta di un utente a un gruppo====<br />
<pre><br />
# smbldap-usermod -G "NomeGruppo" nome.utente<br />
</pre><br />
<br/><br />
<br />
===Creazione di un semplice script da eseguire al login di windows===<br />
E' possibile creare uno script che abbiamo chiamto "logon.bat" (come specificato nel file /etc/smbldap-tools/smbldap.conf) da mettere nella cartella indicata per la condivisione netlogon, quindi nel nostro caso /var/lib/samba/netlogon/ <br />
Tale script dovrà esser scritto in modalità dos, per far questo sfrutteremo il tool unix2dos contenuto nel pacchetto tofrodos.<br />
<pre><br />
# apt-get install tofrodos<br />
</pre><br />
creiamo lo script con l'editor che preferiamo<br />
<pre><br />
# vim /var/lib/samba/netlogon/logon.bat<br />
</pre><br />
syncronizziamo gli orologi del client windows con il nostro server scrivendo nello script.<br />
<pre><br />
net time %LOGONSERVER% /set /yes<br />
</pre><br />
infine<br />
<pre><br />
# unix2dos /var/lib/samba/netlogon/logon.bat<br />
</pre><br />
Allo script si possono aggiungere operazioni come il montaggio di unità di rete o altre condivisioni.<br />
Tenete conto che con queste impostazioni viene creata un'unità di rete collegata alla home dell'utente linux.<br />
<br />
===Connettersi al dominio===<br />
Il nostro server è ora pronto per essere utilizzato. Per testarne le funzionalità è possibile procedere per gradi, in modo da isolare quelli che sono i problemi di configurazione da quelli che sono i problemi di rete o dei client Windows.<br/><br />
A tal fine il primo accesso può essere fatto dal server stesso con il comando:<br />
<pre><br />
# smbclient -L localhost -U Administrator<br />
</pre><br />
Dovrebbe essere richiesta la password impostata precedentemente per l'utente Administrator e, di seguito, dovrebbero venire elencate le condivisioni samba impostate sul server.<br />
<br/><br/><br />
La procedura di connessione dei client al dominio varia a seconda del sistema operativo utilizzato sulle macchine client:<br />
<br/><br/><br />
'''Windows 95/98/ME'''<br />
# Verificare che sia installato il "Client per Reti Microsoft" fra le proprietà di rete<br />
# Assicurarsi che il Client per Reti Microsoft sia selezionato come protocollo di rete primario (Pannello di Controllo -> Rete -> Logon di rete primario).<br />
# Andare su Pannello di Controllo -> Rete -> Client per reti Microsoft -> Proprietà -> Logon su Dominio NT.<br />
# Se si è configurata su smb.conf l'opzione "add user script", selezionare il checkbox Crea un Computer Account, altrimenti creare a mano sul server Samba un utente con il nome della macchina Windows.<br />
# Inserire il nome del proprio dominio e cliccare OK.<br />
'''Windows NT'''<br />
# Andare su Pannello di Controllo -> Rete -> Identificazione Rete -> Proprietà<br />
# Selezionare Dominio e inserire il nome del prorio dominio<br />
# Selezionare Crea un Computer Account<br />
# Alla richiesta della password di un amministratore inserire la login e la password di Administrator, ricordarsi che l'utente root deve essere aggiunto a smbpasswd.<br />
# Dovrebbe comparire un messaggio che ci da il benvenuto sul dominio.<br />
'''Windows 2000'''<br />
# Le procedure sono uguali a quelle per Windows NT tranne che i settaggi di rete sono trovati sotto Pannello di Controllo -> Sistema -> Identificazione Rete (oppure, sul Desktop, cliccare col tasto destro del mouse sull'icona Risorse del Computer, selezionare Proprietà, cliccare sulla tab Identificazione Rete e sul tasto Proprietà).<br />
'''Windows XP'''<br />
<br/><br />
La procedura con Windows XP è più complessa (lamentele a Microsoft che usa cambiare le specifiche e le implementazioni dei suoi protocolli anche per rendere più complicata l'interoperabilità con soluzioni alternative). Notare che solo XP Professional Edition può essere usato per far parte di un dominio, Windows XP Home Edition non può far parte di un dominio (Samba o Windows based).<br />
# Aprire l'editor delle policy di Sicurezza Locale (Start->Pannello di controllo->Strumenti di Aministrazione->Criteri di protezione locali->Criteri locali->opzioni di protezione)<br />
# Disabilitare la voce "Domain member: Digitally encrypt or sign secure channel (always)" (Membro di dominio: aggiunta crittografia of irma digitale ai dati del canale protetto (sempre) )<br />
# Disabilitare la voce "Domain member: Disable machine account password changes" (Controller di dominio: rifiuta cambio password account computer)<br />
# Disabilitare la voce "Domain member: Require strong (Windows 2000 or later) session key" (Membro di dominio: richiesta chiave di sessione avanzata (Windows 2000 o versioni successive) )<br />
# Scaricare da Samba.org la patch per il registro WinXP_SignOrSeal. Per applicarla cliccare due volte sul file .reg e rispondere Si alle domande<br />
# A questo punto ci si può unire al dominio come su Windows NT/2000: Tasto destro su Risorse del Computer, selezionare Proprietà, Nome del Computer e tasto Modifica uppure cliccare su Identificazione di Rete ed eseguire il Wizard fornendo le credenziali di Administrator.<br />
'''Linux/Unix'''<br />
<br/><br />
Anche dei sistemi Linux, ovviamente, possono unirsi ad un dominio con un PDC Samba e se sono dei file server, si può configurare Samba per permettere l'autenticazione tramite il dominio. Su smb.conf ci devono essere le seguenti righe:<br />
<pre><br />
[global]<br />
workgroup = <nome dominio><br />
netbios name = <nome server samba><br />
security = DOMAIN<br />
encrypt passwords = Yes<br />
password server = <nome/ip del PDC><br />
preferred master = False<br />
domain master = False<br />
</pre><br />
Ovviamente sul PDC Samba deve essere creato un computer account per il nostro Samba locale (con il nome specificato in netbios name) e, anche in questo caso, il computer locale deve preventivamente unirsi al dominio, con una procedura che è paragonabile a quelle viste sopra per client Windows. Sul Linux/Unix locale basta scrivere:<br />
<pre><br />
smbpasswd -j <nome dominio> -r <nome PDC server> -U root<br />
</pre><br />
Bisogna fornire la password di root del PDC Samba (ricordarsi che è la password salvata in smbpasswd e non in passwd/shadow, nel caso fossero diverse).<br />
<br/><br />
===Unire un server Samba al dominio===<br />
Nel caso si disponga di un secondo server e si voglia utilizzare un unico database degli utenti è possibile seguire 2 strade differenti:<br />
# Configurare il secondo server per accedere a LDAP seguendo le indicazioni esposte per il server di dominio, ovviamente senza farlo diventare server di dominio, ma con autenticazione degli utenti<br />
# Usare il server di dominio per l'autenticazione<br />
Il primo caso non verrà trattato, mentre per il secondo occorre eseguire le seguenti operazioni sul server da aggiungere.<br />
<br/><br />
Modificare il file <tt>/etc/samba/smb.conf</tt> con la seguenti direttiva:<br />
<pre><br />
security = domain<br />
</pre><br />
Far ripartire Samba e dare il seguente comando per unire il server al dominio e creare l'utente relativo al pc:<br />
<pre><br />
net rpc join -U Administrator%password<br />
</pre><br />
Infine, affinché un utente sia riconosciuto correttamente da Samba deve essere anche un utente di sistema, pertanto occorre configurare il sistema affinché peschi la lista degli utenti dal server di dominio via LDAP, esattamente come era avvenuto per il server di dominio.<br/><br />
Installare il pacchetto libnss-ldap e configurarlo in modo da puntare al server LDAP installato sul PDC e fornendo la base LDAP corretta (dc=logic).<br/><br />
Modificare il file /etc/nsswitch.conf come fatto in precedenza.<br />
<pre><br />
passwd: compat ldap<br />
group: compat ldap<br />
shadow: compat ldap<br />
</pre><br />
A questo punto è possibile creare share e assegnare permessi in base a utenti e gruppi definiti nel dominio.<br />
<br/><br />
===Promemoria dei comandi di Samba e LDAP===<br />
====Creazione di utenti====<br />
<pre><br />
# smbldap-useradd -a -m -c "Descrizione Utente" nome.utente<br />
# smbldap-passwd nome.utente<br />
</pre><br />
Per verificare il tutto usare il comando<br />
<pre><br />
# smbldap-usershow nome.utente<br />
</pre><br />
====Creazione di un gruppo====<br />
<pre><br />
# smbldap-groupadd "NomeGruppo"<br />
</pre><br />
====Aggiunta di un utente a un gruppo====<br />
<pre><br />
# smbldap-usermod -G "NomeGruppo" nome.utente<br />
</pre><br />
====Elencare i gruppi memorizzati in LDAP====<br />
<pre><br />
# ldapsearch -x objectClass=posixGroup<br />
</pre><br />
====Elencare gli utenti di un gruppo====<br />
<pre><br />
# smbldap-groupshow "gruppo"<br />
</pre><br />
====Backuppare una directory condivisa dal server usando le credenziali di un utente specifico====<br />
<pre><br />
smbclient //nomeserver/nomecartella -U nome.utente%password.utente -N -Tc backup.tar /percorso/locale/del/backup<br />
</pre><br />
====Elencare le risorse condivise di una macchina====<br />
<pre><br />
smbclient -L nomeserver<br />
</pre><br />
====Per fare delle modifiche nel DB in maniera semplice====<br />
<pre><br />
slapcat -l /tmp/backup.ldif <br />
<br />
# stoppare il servizio<br />
<br />
/etc/init.d/slapd stop<br />
<br />
# una copia del vecchio db<br />
<br />
cp -r /var/lib/ldap /var/lib/ldap.old<br />
mkdir /var/lib/ldap<br />
<br />
Modificare il file backup.ldif e quindi reimportarlo<br />
<br />
slapadd -c -l /tmp/backup.ldif<br />
</pre><br />
====Comandi utili LDAP====<br />
<pre><br />
ldapsearch -b "dc=logic" -x<br />
<br />
ldapsearch -b "dc=logic" -LLL "cn=nomedellutente*" -x<br />
<br />
ldapadd -x -W -D "cn=admin,dc=logic" -f entry.ldif # per importare un ldif<br />
<br />
ldapdelete -x -D "cn=admin,dc=logic" -W "cn= nomeutente,dc=logic"<br />
</pre><br />
Nel caso si reinstalli slapd controllare non ci sia un backup in /var/backups con lo stesso numero di versione, altrimenti un dpkg.reconfigure non ricrea il file di configurazione corretto.<br />
<br/><br />
===Configurazioni addizionali attivabili in SAMBA===<br />
'''Disabilitare i roaming profiles'''<br />
<br/><br />
Così come è stato configurator Samba permette l'utilizzo dei roaming profiles, meccanismo per cui tutte le impostazioni di un utente sono caricate dal server al login e salvate sul server al logout in modo da poter utilizzare computer differenti ritrovando le proprie impostazioni.<br/><br />
Seppur questa funzionalità sia utile, nel caso di cartelle di profilo di elevate dimensioni (in questa cartella c'è la cache del browser, le e-mail, la cartella documenti, ...) i tempi di login e logout sono eterni. Il meccanismo dei roaming profiles può essere disabilitato per singolo computer o agendo sul server SAMBA a livello di impostazioni del singolo utente (e ovviamente di impostazioni di default da utilizzare durante la creazione degli utenti).<br/><br />
Per disabilitare i roaming profiles agendo sul server occorre, innanzitutto, modificare il file <tt>/etc/samba/smb.conf</tt> aggiungendo le seguenti righe:<br />
<pre><br />
logon home =<br />
logon path =<br />
</pre><br />
Questi parametri, anche se vuoti, DEVONO esserci, altrimenti il client continua a cercare il profile generando un errore.<br/><br />
Per tutti gli utenti presenti occorre eliminare l'attributo sambaProfilePath. Per far ciò è possibile usare il comando smbldap-usermod, utilizzare un client di LDAP testuale o grafico o ancora usare gli strumenti di gestione utenti di Windows scaricando i srvtools.exe dal sito della Microsoft.<br/><br />
Infine, per far sì che i nuovi utenti non abbiano, come default, impostato il parametro in questione occorre commentare nel file <tt>/etc/smbldap-tools/smbldap.conf</tt> la riga:<br />
<pre><br />
userProfile="\\PDC-SAMBA\profiles\%U"<br />
</pre><br />
Nel caso, invece, si volessero mantenere i roaming profiles, ma disabilitarli solo su determinati computer, è possibile modificare un impostazione sui singoli computer che non devono utilizzarli nel seguente modo:<br />
# Andare in menu di avvio - Esegui e scrivere mmc.<br />
# Andare in "Console - Aggiungi rimuovi snap-in...".<br />
# Andare in Aggiungi e selezionare "Criterio gruppo".<br />
# Confermare tutto e chiudere le finestre fino a poter accedere allo snap-in appena aggiunto.<br />
# Andare in "Criteri di protezione - Configurazione computer - Modelli amministrativi - Sistema - Profili utente" per XP e in "Criteri computer locale - Configurazione computer - Modelli amministrativi - Sistema - Accesso" per Windows 2000<br />
# Cambiare il valore di "Consenti solo profili utente locali" da Non configurato a Attivo.<br />
In questo modo al login e logout i profili sul server non sono più considerati.<br />
<br/><br />
===db4===<br />
OpenLDAP ha la brutta abitudine di non risistemarsi per bene quando la donna delle pulizie inciampa nell'interruttore generale della corrente. Perciò conviene installare:<br />
<pre><br />
# apt-get install db4.2-util<br />
</pre><br />
Questo pacchetto contiene l'utility db4.2_recover che viene lanciata automaticamente ad ogni restart di ldap, risolvendo eventuali problemi di incongruenza del Barkley DB.<br />
<br/><br />
===Impostare i charset corretti===<br />
Il meccanismo di gestione dei charset in Linux e in Windows è abbastanza complicato, anche a causa dell'elevato numero di strati logici e sistemi differenti che una stringa deve attraversare prima di essere letta o scritta. In larga parte ho ancora molte lacune sul funzionamento, ma di seguito riporto le configurazioni necessarie affinché eventuali lettere accentate nei nomi di file e cartelle siano coerenti sui client Windows, Linux e sul server Sambanel caso di charset Italiano (western european - ISO8859-1).<br/><br />
In primo luogo occorre aggiungere al file di configurazione di Samba (<tt>/etc/samba/smb.conf</tt>), nella sezione <tt>[global]</tt>, la seguente direttiva:<br />
<pre><br />
unix charset = ISO8859-1<br />
</pre><br />
Questa direttiva dice a Samba con che charset deve scrivere sul file system e questo deve coincidere con il charset con cui è stato installato il server. Alla fine occorre impostare 2 opzioni su Linux affinché le share Samba siano montate con il<br />
charset corretto.<br />
<pre><br />
smbmount -o iocharset=iso8859-1,codepage=cp850 SHARE MOUNTPOINT<br />
</pre><br />
<br/><br />
===Appendice A - Files di configurazione===<br />
'''File <tt>/etc/samba/smb.conf</tt>'''<br />
<pre><br />
[global]<br />
workgroup = SCUOLA<br />
server string = LAN Server %v<br />
wins support = yes<br />
; wins server = x.y.w.z<br />
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192<br />
; include = /etc/samba/dhcp.conf<br />
dns proxy = no<br />
; name resolve order = lmhosts host wins bcast<br />
unix charset = ISO8859-1<br />
; character set = ISO8859-1<br />
<br />
### Ogni macchina ha il suo file di log ###<br />
log file = /var/log/samba/log.%m<br />
max log size = 1000<br />
; syslog only = no<br />
syslog = 0<br />
<br />
panic action = /usr/share/samba/panic-action %d<br />
<br />
### Autenticazione ###<br />
security = user<br />
encrypt passwords = true<br />
; passdb backend = tdbsam guest<br />
passdb backend = ldapsam:ldap://127.0.0.1<br />
obey pam restrictions = yes<br />
; guest account = nobody<br />
invalid users = root<br />
;unix password sync = no<br />
<br />
# passwd program = /usr/bin/passwd %u<br />
# passwd chat = *Enter\snew\sLinux\spassword:* %n\n *Retype\snew\sLinux\spassword:* %n\n .<br />
<br />
; pam password change = no<br />
<br />
<br />
##### LDAP Configuration #####<br />
<br />
ldap admin dn = cn=admin,dc=scuola<br />
ldap suffix = dc=scuola<br />
ldap group suffix = ou=Groups<br />
ldap user suffix = ou=Users<br />
ldap machine suffix = ou=Computers<br />
ldap idmap suffix = ou=Idmap<br />
ldap passwd sync = Yes<br />
<br />
passwd program = /usr/sbin/smbldp-passwd %u<br />
passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*token*updated*<br />
<br />
add user script = /usr/sbin/smbldap-useradd -m "%u"<br />
ldap delete dn = Yes<br />
delete user script = /usr/sbin/smbldap-userdel "%u"<br />
add machine script = /usr/sbin/smbldap-useradd -w "%u"<br />
add group script = /usr/sbin/smbldap-groupadd -p "%g"<br />
delete group script = /usr/sbin/smbldap-groupdel "%g"<br />
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"<br />
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"<br />
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"<br />
<br />
<br />
##### Samba PDC #####<br />
<br />
os level = 255<br />
domain master = yes<br />
domain logons = yes<br />
preferred master = yes<br />
time server = yes<br />
logon home =<br />
logon path =<br />
<br />
<br />
##### Printing #####<br />
<br />
; load printers = yes<br />
; printing = bsd<br />
; printcap name = /etc/printcap<br />
; printing = cups<br />
; printcap name = cups<br />
; printer admin = @ntadmin<br />
<br />
<br />
##### File sharing #####<br />
<br />
; preserve case = yes<br />
; short preserve case = yes<br />
<br />
<br />
##### Misc #####<br />
<br />
; include = /home/samba/etc/smb.conf.%m<br />
socket options = TCP_NODELAY<br />
<br />
; idmap uid = 10000-20000<br />
; idmap gid = 10000-20000<br />
; template shell = /bin/bash<br />
<br />
<br />
##### Share definitions #####<br />
<br />
[homes]<br />
comment = Home Directories<br />
browseable = no<br />
writable = yes<br />
create mask = 0700<br />
directory mask = 0700<br />
<br />
[netlogon]<br />
comment = Network Logon Services<br />
path = /scuola/samba/netlogon<br />
guest ok = yes<br />
writable = no<br />
share modes = no<br />
<br />
[profiles]<br />
path = /scuola/samba/profiles<br />
read only = no<br />
create mask = 0600<br />
directory mask = 0700<br />
<br />
[VolShare]<br />
comment = Documenti della Rete<br />
path = /scuola/VolShare<br />
browsable = yes<br />
read only = no<br />
public = yes<br />
create mask = 0755<br />
</pre><br />
<br/><br />
'''File <tt>/etc/ldap/slapd.conf</tt>'''<br />
<pre><br />
# This is the main slapd configuration file. See slapd.conf(5) for more<br />
# info on the configuration options.<br />
<br />
#######################################################################<br />
# Global Directives:<br />
<br />
# Features to permit<br />
#allow bind_v2<br />
<br />
# Schema and objectClass definitions<br />
include /etc/ldap/schema/core.schema<br />
include /etc/ldap/schema/cosine.schema<br />
include /etc/ldap/schema/nis.schema<br />
include /etc/ldap/schema/inetorgperson.schema<br />
include /etc/ldap/schema/samba.schema<br />
<br />
# Schema check allows for forcing entries to<br />
# match schemas for their objectClasses's<br />
schemacheck on<br />
<br />
# Where the pid file is put. The init.d script<br />
# will not stop the server if you change this.<br />
pidfile /var/run/slapd/slapd.pid<br />
<br />
# List of arguments that were passed to the server<br />
argsfile /var/run/slapd.args<br />
<br />
# Read slapd.conf(5) for possible values<br />
loglevel 0<br />
<br />
# Where the dynamically loaded modules are stored<br />
modulepath /usr/lib/ldap<br />
moduleload back_bdb<br />
<br />
#######################################################################<br />
# Specific Backend Directives for bdb:<br />
# Backend specific directives apply to this backend until another<br />
# 'backend' directive occurs<br />
backend bdb<br />
checkpoint 512 30<br />
<br />
#######################################################################<br />
# Specific Backend Directives for 'other':<br />
# Backend specific directives apply to this backend until another<br />
# 'backend' directive occurs<br />
#backend <other><br />
<br />
#######################################################################<br />
# Specific Directives for database #1, of type bdb:<br />
# Database specific directives apply to this databasse until another<br />
# 'database' directive occurs<br />
database bdb<br />
<br />
# The base of your directory in database #1<br />
suffix "dc=scuola"<br />
<br />
# Where the database file are physically stored for database #1<br />
directory "/var/lib/ldap"<br />
<br />
# Indexing options for database #1<br />
index objectClass eq<br />
index uid,uidNumber,gidNumber,memberUid eq<br />
index cn,mail,surname,givenname eq,subinitial<br />
index sambaSID eq<br />
index sambaPrimaryGroupSID eq<br />
index sambaDomainName eq<br />
<br />
# Save the time that the entry gets modified, for database #1<br />
lastmod on<br />
<br />
# Where to store the replica logs for database #1<br />
# replogfile /var/lib/ldap/replog<br />
<br />
# The userPassword by default can be changed<br />
# by the entry owning it if they are authenticated.<br />
# Others should not be able to see it, except the<br />
# admin entry below<br />
# These access lines apply to database #1 only<br />
access to attrs=userPassword,sambaNTPassword,sambaLMPassword<br />
by dn="cn=admin,dc=scuola" write<br />
by anonymous auth<br />
by self write<br />
by * none<br />
<br />
# Ensure read access to the base for things like<br />
# supportedSASLMechanisms. Without this you may<br />
# have problems with SASL not knowing what<br />
# mechanisms are available and the like.<br />
# Note that this is covered by the 'access to *'<br />
# ACL below too but if you change that as people<br />
# are wont to do you'll still need this if you<br />
# want SASL (and possible other things) to work <br />
# happily.<br />
access to dn.base="" by * read<br />
<br />
# The admin dn has full write access, everyone else<br />
# can read everything.<br />
access to *<br />
by dn="cn=admin,dc=scuola" write<br />
by * read<br />
<br />
# For Netscape Roaming support, each user gets a roaming<br />
# profile for which they have write access to<br />
#access to dn=".*,ou=Roaming,o=morsnet"<br />
# by dn="cn=admin,dc=scuola" write<br />
# by dnattr=owner write<br />
<br />
#######################################################################<br />
# Specific Directives for database #2, of type 'other' (can be bdb too):<br />
# Database specific directives apply to this databasse until another<br />
# 'database' directive occurs<br />
#database <other><br />
<br />
# The base of your directory for database #2<br />
#suffix "dc=debian,dc=org"<br />
</pre><br />
<br/><br />
'''File <tt>/etc/ldap/ldap.conf</tt>'''<br />
<pre><br />
# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57:01 kurt Exp $<br />
#<br />
# LDAP Defaults<br />
#<br />
<br />
# See ldap.conf(5) for details<br />
# This file should be world readable but not world writable.<br />
<br />
#BASE dc=example, dc=com<br />
#URI ldap://ldap.example.com ldap://ldap-master.example.com:666<br />
<br />
BASE dc=scuola<br />
URI ldap://localhost<br />
<br />
#SIZELIMIT 12<br />
#TIMELIMIT 15<br />
#DEREF never<br />
</pre><br />
<br/><br />
'''File <tt>/etc/smbldap-tools/smbldap_bind.conf</tt>'''<br />
<pre><br />
############################<br />
# Credential Configuration #<br />
############################<br />
# Notes: you can specify two differents configuration if you use a<br />
# master ldap for writing access and a slave ldap server for reading access<br />
# By default, we will use the same DN (so it will work for standard Samba<br />
# release)<br />
slaveDN="cn=admin,dc=scuola"<br />
slavePw="password"<br />
masterDN="cn=admin,dc=scuola"<br />
masterPw="password"<br />
</pre><br />
<br/><br />
'''File <tt>/etc/smbldap-tools/smbldap.conf</tt>'''<br />
<pre><br />
# $Source: /opt/cvs/samba/smbldap-tools/smbldap.conf,v $<br />
# $Id: smbldap.conf,v 1.17 2005/01/29 15:00:54 jtournier Exp $<br />
#<br />
# smbldap-tools.conf : Q & D configuration file for smbldap-tools<br />
<br />
# This code was developped by IDEALX (http://IDEALX.org/) and<br />
# contributors (their names can be found in the CONTRIBUTORS file).<br />
#<br />
# Copyright (C) 2001-2002 IDEALX<br />
#<br />
# This program is free software; you can redistribute it and/or<br />
# modify it under the terms of the GNU General Public License<br />
# as published by the Free Software Foundation; either version 2<br />
# of the License, or (at your option) any later version.<br />
#<br />
# This program is distributed in the hope that it will be useful,<br />
# but WITHOUT ANY WARRANTY; without even the implied warranty of<br />
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br />
# GNU General Public License for more details.<br />
#<br />
# You should have received a copy of the GNU General Public License<br />
# along with this program; if not, write to the Free Software<br />
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,<br />
# USA.<br />
<br />
# Purpose :<br />
# . be the configuration file for all smbldap-tools scripts<br />
<br />
##############################################################################<br />
#<br />
# General Configuration<br />
#<br />
##############################################################################<br />
<br />
# Put your own SID<br />
# to obtain this number do: net getlocalsid<br />
SID="S-1-5-21-954358294-1158571263-591329423"<br />
<br />
##############################################################################<br />
#<br />
# LDAP Configuration<br />
#<br />
##############################################################################<br />
<br />
# Notes: to use to dual ldap servers backend for Samba, you must patch<br />
# Samba with the dual-head patch from IDEALX. If not using this patch<br />
# just use the same server for slaveLDAP and masterLDAP.<br />
# Those two servers declarations can also be used when you have <br />
# . one master LDAP server where all writing operations must be done<br />
# . one slave LDAP server where all reading operations must be done<br />
# (typically a replication directory)<br />
<br />
# Ex: slaveLDAP=127.0.0.1<br />
slaveLDAP="127.0.0.1"<br />
slavePort="389"<br />
<br />
# Master LDAP : needed for write operations<br />
# Ex: masterLDAP=127.0.0.1<br />
masterLDAP="127.0.0.1"<br />
masterPort="389"<br />
<br />
# Use TLS for LDAP<br />
# If set to 1, this option will use start_tls for connection<br />
# (you should also used the port 389)<br />
ldapTLS="0"<br />
<br />
# How to verify the server's certificate (none, optional or require)<br />
# see "man Net::LDAP" in start_tls section for more details<br />
verify="require"<br />
<br />
# CA certificate<br />
# see "man Net::LDAP" in start_tls section for more details<br />
cafile="/etc/smbldap-tools/ca.pem"<br />
<br />
# certificate to use to connect to the ldap server<br />
# see "man Net::LDAP" in start_tls section for more details<br />
clientcert="/etc/smbldap-tools/smbldap-tools.pem"<br />
<br />
# key certificate to use to connect to the ldap server<br />
# see "man Net::LDAP" in start_tls section for more details<br />
clientkey="/etc/smbldap-tools/smbldap-tools.key"<br />
<br />
# LDAP Suffix<br />
# Ex: suffix=dc=IDEALX,dc=ORG<br />
suffix="dc=scuola"<br />
<br />
# Where are stored Users<br />
# Ex: usersdn="ou=Users,dc=IDEALX,dc=ORG"<br />
usersdn="ou=Users,${suffix}"<br />
<br />
# Where are stored Computers<br />
# Ex: computersdn="ou=Computers,dc=IDEALX,dc=ORG"<br />
computersdn="ou=Computers,${suffix}"<br />
<br />
# Where are stored Groups<br />
# Ex groupsdn="ou=Groups,dc=IDEALX,dc=ORG"<br />
groupsdn="ou=Groups,${suffix}"<br />
<br />
# Where are stored Idmap entries (used if samba is a domain member server)<br />
# Ex groupsdn="ou=Idmap,dc=IDEALX,dc=ORG"<br />
idmapdn="ou=Idmap,${suffix}"<br />
<br />
# Where to store next uidNumber and gidNumber available<br />
sambaUnixIdPooldn="sambaDomainName=SCUOLA,${suffix}"<br />
<br />
# Default scope Used<br />
scope="sub"<br />
<br />
# Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)<br />
hash_encrypt="SSHA"<br />
<br />
# if hash_encrypt is set to CRYPT, you may set a salt format.<br />
# default is "%s", but many systems will generate MD5 hashed<br />
# passwords if you use "$1$%.8s". This parameter is optional!<br />
crypt_salt_format="%s"<br />
<br />
##############################################################################<br />
# <br />
# Unix Accounts Configuration<br />
# <br />
##############################################################################<br />
<br />
# Login defs<br />
# Default Login Shell<br />
# Ex: userLoginShell="/bin/bash"<br />
userLoginShell="/bin/bash"<br />
<br />
# Home directory<br />
# Ex: userHome="/home/%U"<br />
userHome="/home/%U"<br />
<br />
# Gecos<br />
userGecos="System User"<br />
<br />
# Default User (POSIX and Samba) GID<br />
defaultUserGid="513"<br />
<br />
# Default Computer (Samba) GID<br />
defaultComputerGid="515"<br />
<br />
# Skel dir<br />
skeletonDir="/etc/skel"<br />
<br />
# Default password validation time (time in days) Comment the next line if<br />
# you don't want password to be enable for defaultMaxPasswordAge days (be<br />
# careful to the sambaPwdMustChange attribute's value)<br />
defaultMaxPasswordAge="99"<br />
<br />
##############################################################################<br />
#<br />
# SAMBA Configuration<br />
#<br />
##############################################################################<br />
<br />
# The UNC path to home drives location (%U username substitution)<br />
# Ex: \\My-PDC-netbios-name\homes\%U<br />
# Just set it to a null string if you want to use the smb.conf 'logon home'<br />
# directive and/or disable roaming profiles<br />
userSmbHome="\\lanserver\homes\%U"<br />
<br />
# The UNC path to profiles locations (%U username substitution)<br />
# Ex: \\My-PDC-netbios-name\profiles\%U<br />
# Just set it to a null string if you want to use the smb.conf 'logon path'<br />
# directive and/or disable roaming profiles<br />
userProfile="\\lanserver\profiles\%U"<br />
<br />
# The default Home Drive Letter mapping<br />
# (will be automatically mapped at logon time if home directory exist)<br />
# Ex: H: for H:<br />
userHomeDrive="H:"<br />
<br />
# The default user netlogon script name (%U username substitution)<br />
# if not used, will be automatically username.cmd<br />
# make sure script file is edited under dos<br />
# Ex: %U.cmd<br />
# userScript="startup.cmd" # make sure script file is edited under dos<br />
userScript="%U.cmd"<br />
<br />
# Domain appended to the users "mail"-attribute<br />
# when smbldap-useradd -M is used<br />
mailDomain="scuola"<br />
<br />
##############################################################################<br />
#<br />
# SMBLDAP-TOOLS Configuration (default are ok for a RedHat)<br />
#<br />
##############################################################################<br />
<br />
# Allows not to use smbpasswd (if with_smbpasswd == 0 in smbldap_conf.pm) but<br />
# prefer Crypt::SmbHash library<br />
with_smbpasswd="0"<br />
smbpasswd="/usr/bin/smbpasswd"<br />
<br />
# Allows not to use slappasswd (if with_slappasswd == 0 in smbldap_conf.pm)<br />
# but prefer Crypt:: libraries<br />
with_slappasswd="0"<br />
slappasswd="/usr/sbin/slappasswd"<br />
</pre><br />
<br/><br />
'''File <tt>/etc/nsswitch.conf</tt>'''<br />
<pre><br />
# /etc/nsswitch.conf<br />
#<br />
# Example configuration of GNU Name Service Switch functionality.<br />
# If you have the `glibc-doc' and `info' packages installed, try:<br />
# `info libc "Name Service Switch"' for information about this file.<br />
<br />
passwd: compat ldap<br />
group: compat ldap<br />
shadow: compat ldap<br />
<br />
hosts: files dns<br />
networks: files<br />
<br />
protocols: db files<br />
services: db files<br />
ethers: db files<br />
rpc: db files<br />
<br />
netgroup: nis<br />
</pre><br />
<br/><br />
'''File <tt>/etc/pam.d/common-account</tt>'''<br />
<pre><br />
#<br />
# /etc/pam.d/common-account - authorization settings common to all services<br />
#<br />
# This file is included from other service-specific PAM config files,<br />
# and should contain a list of the authorization modules that define<br />
# the central access policy for use on the system. The default is to<br />
# only deny service to users whose accounts are expired in /etc/shadow.<br />
#<br />
account sufficient pam_ldap.so<br />
account required pam_unix.so<br />
</pre><br />
<br><br />
'''File <tt>/etc/pam.d/common-auth</tt>'''<br />
<pre><br />
#<br />
# /etc/pam.d/common-auth - authentication settings common to all services<br />
#<br />
# This file is included from other service-specific PAM config files,<br />
# and should contain a list of the authentication modules that define<br />
# the central authentication scheme for use on the system<br />
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the<br />
# traditional Unix authentication mechanisms.<br />
#<br />
auth sufficient pam_ldap.so nullock_secure<br />
auth required pam_unix.so use_first_pass<br />
</pre><br />
<br/><br />
'''File <tt>/etc/pam.d/common-password</tt>'''<br />
<pre><br />
#<br />
# /etc/pam.d/common-password - password-related modules common to all services<br />
#<br />
# This file is included from other service-specific PAM config files,<br />
# and should contain a list of modules that define the services to be<br />
#used to change user passwords. The default is pam_unix<br />
<br />
# The "nullok" option allows users to change an empty password, else<br />
# empty passwords are treated as locked accounts.<br />
#<br />
# (Add `md5' after the module name to enable MD5 passwords)<br />
#<br />
# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in<br />
# login.defs. Also the "min" and "max" options enforce the length of the<br />
# new password.<br />
<br />
password sufficient pam_ldap.so<br />
password required pam_unix.so try_first_pass nullok obscure min=4 max=8 md5<br />
<br />
# Alternate strength checking for password. Note that this<br />
# requires the libpam-cracklib package to be installed.<br />
# You will need to comment out the password line above and<br />
# uncomment the next two in order to use this.<br />
# (Replaces the `OBSCURE_CHECKS_ENAB', `CRACKLIB_DICTPATH')<br />
#<br />
# password required pam_cracklib.so retry=3 minlen=6 difok=3<br />
# password required pam_unix.so use_authtok nullok md5<br />
</pre><br />
<br/><br />
'''File <tt>/etc/pam.d/common-session</tt>'''<br />
<pre><br />
#<br />
# /etc/pam.d/common-session - session-related modules common to all services<br />
#<br />
# This file is included from other service-specific PAM config files,<br />
# and should contain a list of modules that define tasks to be performed<br />
# at the start and end of sessions of *any* kind (both interactive and<br />
# non-interactive). The default is pam_unix.<br />
#<br />
session sufficient pam_ldap.so<br />
session required pam_unix.so<br />
</pre><br />
<br/><br />
----<br />
: [[Utente:Ferdybassi|Ferdybassi]] 04:46, 31 Dic 2006 (CST)<br />
<br />
[[Categoria:Server]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LAMP:_Linux,_Apache,_MySQL_e_PHP&diff=15347LAMP: Linux, Apache, MySQL e PHP2008-06-17T11:25:07Z<p>MaXeR: </p>
<hr />
<div>=Introduzione=<br />
LAMP è l'acronimo di Linux Apache Mysql Php e indica l'ambiente libero (e anche gratuito in questo caso) di programmazione di applicazioni Web che è possibile costruire dalla somma delle parti di queste eccezionali applicazioni a sorgente aperto.<br />
<br />
Questa guida non fornisce alcun elemento per la configurazione ottimale dei server presi in esame (Apache e MySQL). Essa non è intesa ad amministrare tali servizi su macchine in produzione, ma solo a fornire all' utente domestico e allo sviluppatore web un ambiente correttamente configurato senza introdurre sensibili rischi per la sicurezza del computer usato.<br />
<br />
Per il dettaglio sulla configurazione di quanto preso in esame Vi invitiamo pertanto a visitare in primo luogo i siti [http://httpd.apache.org Httpd Apache], [http://www.php.net PHP.net] e [http://www.mysql.org MySQL.org] e, quando presenti, le guide specifiche messe a disposizione da questa Community.<br />
<br />
Buona lettura!<br />
<br />
=Il server http=<br />
==Apache==<br />
[http://httpd.apache.org/ Apache] è il frutto del lavoro della [http://www.apache.org/ Apache Software Foundation]. Tra le caratteristiche che ne fanno il server HTTP più diffuso evidenziamo che:<br />
* è software libero;<br />
* gira sulle più svariate piattaforme (*nix, Windows, ec...);<br />
* è sviluppato in accordo con le più recenti specifiche per i servizi http.<br />
Secondo [http://news.netcraft.com/archives/web_server_survey.html Netcraft] Apache, con una percentuale del 68% (febbraio 2005), è il server http più usato in assoluto.<br />
<br />
Apache deve il suo nome all' omonima tribù di indiani nordamericani, famosa per le straordinarie doti di resistenza e strategia. Visto però che il software è stato inizialmente sviluppato come una serie di patches ad un altro server http, nell' uso comune Apache significa anche "A Patchy Server".<br />
<br />
La pronuncia corretta di Apache suona grossomodo come "APACI".<br />
<br />
Il progetto Apache è suddiviso principalmente in due rami distinti (ne esiste un terzo, ma è nella fase di sviluppo alpha al momento): la versione 1.3 (la versione "vecchia" molto robusta e testata) e la versione 2.0 (dal design innovativo rispetto alla precedente).<br />
<br />
===Apache 1.3===<br />
====Installazione====<br />
L' installazione nuda e cruda di Apache 1.3 in Debian è di una semplicità disarmante. Tutto quello che avremo bisogno di fare consiste nel dare il comando:<br />
<pre># apt-get install apache</pre><br />
al termine del download ci viene chiesto se vogliamo abilitare suExec: a meno di utilizzi professionali, possiamo tranquillamente rispondere "No".<br />
====Verifica====<br />
A questo punto il nostro server web è già attivo, ma possiamo anche verificarlo tramite il comando '''ps''':<br />
<pre>$ ps aux |grep apache<br />
root 7378 0.0 0.4 4592 2228 pts/1 S 12:01 0:00 /usr/sbin/apache<br />
www-data 7379 0.0 0.4 4592 2364 pts/1 S 12:01 0:00 /usr/sbin/apache<br />
www-data 7380 0.0 0.4 4592 2364 pts/1 S 12:01 0:00 /usr/sbin/apache<br />
www-data 7381 0.0 0.4 4592 2204 pts/1 S 12:01 0:00 /usr/sbin/apache<br />
www-data 7382 0.0 0.4 4592 2204 pts/1 S 12:01 0:00 /usr/sbin/apache<br />
www-data 7383 0.0 0.4 4592 2204 pts/1 S 12:01 0:00 /usr/sbin/apache</pre><br />
Notiamo subito uno dei meccanismi principali di Apache: esistono svariati processi in esecuzione. Per la precisione abbiamo 1 processo proprietà dell' utente root e ben 5 processi di proprietà dell' utente www-data, come possiamo vedere con il comando '''pstree''':<br />
<pre>$ pstree -uc |grep apache<br />
├─apache─┬─apache(www-data)<br />
│ ├─apache(www-data)<br />
│ ├─apache(www-data)<br />
│ ├─apache(www-data)<br />
│ └─apache(www-data)</pre><br />
Il primo processo (padre) viene lanciato da root e ed il suo unico compito consiste nel genere e controllare i restanti processi (figli). Sono questi ultimi a rispondere alle richieste http ed a fornire le pagine. In questo modo Apache gira con privilegi minimi (quelli dell' utente www-data) ed in caso di una sua eventuale compromissione gli effetti sul sistema sono in qualche misura limitati.<br />
<br />
====Configurazione====<br />
La configurazione di Apache è un compito estremamente delicato e può richiedere conoscenze anche notevoli in svariati ambiti quali networking, programmazione e amministrazione di sistema. Dato che questa guida si propone fondamentalmente di illustrare i passi necessari ad installare e configurare un sistema per uso non professionale, ci limiteremo agli aspetti macroscopici della configurazione.<br />
<br />
I files di configurazione di Apache risiedono nella directory '''/etc/apache''' al cui interno troviamo svariati files. Quello di cui ci occuperemo qui è il file di controllo principale e cioè '''httpd.conf'''. Apriamo il file con il nostro editor di fiducia (dobbiamo essere root per modificare questo file) e vediamo quali sono le direttive principali su cui agiremo.<br />
<br />
'''server-pool size'''<br />
Alla riga 130 del file di configurazione originale troviamo il primo blocco da prendere in esame: si tratta della direttiva che dice ad Apache il numero minimo e massimo di processi "figlio" da mantenere in memoria. Ogni processo "figlio" risponde ad un numero prefissato di richieste, dopodichè viene ucciso (mondo crudele) e ne viene generato uno nuovo. Esaminiamo la direttiva:<br />
<pre>MinSpareServers 5<br />
MaxSpareServers 10</pre><br />
Come default Apache genera 5 processi, ma se il carico aumenta può arrivare fino a 10 figli simultanei. Per un sistema domestico è sicuramente eccessivo ed io consiglio di porre queste limitazioni:<br />
<pre>MinSpareServers 1<br />
MaxSpareServers 2</pre><br />
<br />
'''Number of servers to start initially'''<br />
Questo blocco (riga 153) dice ad Apache quanti sono i figli da generare al momento dell' avvio del server. Il default è:<br />
<pre>StartServers 5</pre><br />
che noi cambieremo in:<br />
<pre>StartServers 1</pre><br />
<br />
'''Listen'''<br />
Questo blocco (riga 192) indica ad Apache su quale porta TCP restare in attesa di richeste http. E' anche possibile specificare una particolare accoppiata di indirizzo IP + porta TCP. Possiamo tranquillamente lasciare commentata la direttiva ed il nostro server sarà in ascolto sulla porta 80 per tutti gli indirizzi configurati sul sistema.<br />
<br />
'''BindAddress'''<br />
Alla riga 199 abbiamo la direttiva che specifica a quale specifico indirizzo IP associare Apache. Come per il punto precedente, lasciamo pure il valore di default.<br />
<br />
'''ServerName'''<br />
Con questa direttiva (alla linea 276) diciamo ad Apache quale è il suo nome. Questo è particolarmente utile nel caso abbiamo a disposizione un [[FQDN]] (a questo proposito puoi consultare la guida [[Server Web Casalingo]]).<br />
<br />
'''DocumentRoot'''<br />
Con questa direttiva (riga 284) indichiamo ad Apache quale directory del nostro sistema deve corrispondere alla radice del Web Server. Il default va più che bene: ricordatevi quindi che tutti i vostri files che volete pubblicare sul server http dovranno risiedere in '''/var/www''' o in una sua sotto-directory.<br />
<br />
{{Warningbox|è fondamentale per il funzionamento di Apache che i files che devono essere visibili via Web siano leggibili da parte dell' utente '''www-data''' e che le sotto-directory di /var/www siano raggiunbili dallo stesso utente}}<br />
Questo è il minimo indispensabile che ci occorre sapere per poter utilizzare proficuamente Apache: salviamo il file e procediamo a riavviare Apache. Per fare questo possiamo procedere in due modi distinti:<br />
* metodo standard <pre><nowiki># apachectl graceful<br />
/usr/sbin/apachectl graceful: httpd gracefully restarted</nowiki></pre><br />
* metodo debian init.d <pre><nowiki># /etc/init.d/apache restart<br />
Restarting apache.</nowiki></pre><br />
Senza dubbio '''apachectl''' è il metodo da preferire. Oltre a riavviare Apache possiamo controllare altri aspetti del server web. Tra questi quello che inizialmente può risultare più comodo consiste nel controllo della sintassi del file di configurazione.<br> <br />
Facciamo un esempio:<br />
<pre># apachectl configtest<br />
Syntax error on line 49 of /etc/apache/httpd.conf:<br />
ServerType takes one argument, 'inetd' or 'standalone'</pre><br />
lo script mi avvisa che alla riga 49 di httpd.conf c'è un errore di sintassi: la direttiva ServerType supporta un solo argomento, mentre nel file ne sono specificati almeno 2. Se controllo la riga incriminata scopro che:<br />
<pre>ServerType is either inetd, or standalone. Inetd mode is only supported on</pre><br />
Noto subito che manca il commendo (#) a inizio riga, provvedo a reinserirlo e quindi controllo nuovamente la configurazione:<br />
<pre># apachectl configtest<br />
Syntax OK</pre><br />
<br />
Se non abbiamo fatto pasticci, una volta riavviato il server Apache, basterà puntare il nostro browser all' indirizzo '''http://127.0.0.1''' per vedere la pagina di default installata dal manutentore del pacchetto Debian:<br />
[[Immagine:Apache_installazione.png|thumb|center|Pagina di Benvenuto di Apache]]<br />
<br />
{{box|Nota Bene: Directory home degli utenti|Per default Apache permette anche a ciascun utente del sistema di avere una propria home. Poniamo l' esempio dell' utente '''pippo''': all' interno di /home/pippo l' utente dovrà semplicemente creare la directory '''public_html''' per poter accedere ai files in essa contenuti attraverso l' indirizzo '''http://127.0.0.1/~pippo/'''}}<br />
<br />
Ora non ci resta che inserire i nostri files in /var/www o nella nostra public_html per poter cominciare ad usare Apache!<br />
<br />
====Supporto SSL====<br />
Abilitando il supporto a SSL (Secure Socket Layer) è possibile instaurare un canale di comunicazione crittografato tra il nostro server web ed i browser che richiedono le pagine.<br />
<br />
Tra i vantaggi in termini di sicurezza che l' uso di SSL comporta, segnalo:<br />
* transito di informazioni sensibili (passwords, dati personali, ecc...) in internet attraverso un canale crittografato sicuro;<br />
* accertamento dell' identità del server e/o del client web tramite certificati digitali.<br />
<br />
Il supporto SSL per Apache può essere abilitato in due modi distinti:<br />
* realizzazione di un nuovo server Apache con supporto SSL (vedi: '''apt-cache show apache-ssl''');<br />
* implementazione di Apache e Apache SSL nel medesimo server grazie a mod_ssl.<br />
<br />
In questa guida vedremo l' installazione e configurazione di '''mod_ssl'''.<br />
<br />
Procediamo con l' installazione del pacchetto:<br />
<pre><br />
# apt-get install libapache-mod-ssl<br />
</pre><br />
<br />
===Apache 2.0===<br />
====Installazione====<br />
L'installazione di Apache2 è perfettamente uguale a quella precedentemente illustrata per Apache:<br />
<pre><br />
# apt-get install apache2-mpm-prefork<br />
</pre><br />
<br />
Il [[metapacchetto]] ''apache2'' è presente, ma installa '''apache2-mpm-worker''', che risulta non essere compatibile con '''libapache2-mod-php4'''.<br />
<br />
======I diversi pacchetti======<br />
La pacchettizzazione Debian, però, è leggermente diversa, per poter gestire le nuove caratteristiche introdotte in Apache2: esistono quattro diversi pacchetti di Apache2, ognuno con delle caratteristiche diverse (relativamente alla gestione dei thread e dei child):<br />
; apache2-mpm-perchild : la soluzione adottata in questo pacchetto fa in modo che vengano avviati un numero definito di processi, i quali possono creare dei thread in base al carico della macchina. Una peculiarità è la possibilità di assegnare dei permessi diversi ad ogni processo, vincolarlo ad un singono ''virtual host'', così da gestire facilmente la redistribuzione delle risorse e/o personalizzare il servizio offerto;<br />
; apache2-mpm-prefork : I thread sono disabilitati, e la gestione dei '''pool di processi''' viene gestita come per Apache1 (''MinSpareServers'' e ''MaxSpareServers'' -vedi /etc/apache2/apache2.conf-);<br />
; apache2-mpm-threadpool : pacchetto di transizione;<br />
; apache2-mpm-worker : la soluzione è intermedia rispetto a perchild e prefork.<br />
<br />
Quello che a noi interessa è '''apache2-mpm-prefork''', visto che è l'unico ad essere compatibile con le librerie che offrono il supporto per php4.<br />
<br />
====Verifica====<br />
Per verificare la corretta installazione di Apache2, è sufficiente aprire un browser ed inserire l'indirizzo http://localhost/.<br />
Se Apache è stato installato correttamente, apparirà una schermata simile a questa:<br />
[[Immagine:Apache2_installazione.png|thumb|center|Schermata di benvenuto di Apache2]]<br />
<br />
====Configurazione====<br />
Le regole di configurazione viste precedentemente per Apache valgono anche per Apache2.<br /><br />
Sono però presenti delle sostanziali differenze a livello strutturale, per quanto riguarda la struttura della directory '''/etc/apache2''', che riguardano l'organizzazione dei file e la gestione dei ''VirtualHost'' e dei ''moduli''.<br />
<br />
=====Organizzazione dei file=====<br />
Durante il passaggio da Apache ad Apache2, sono state apportate delle modifiche ai file di configurazione, ai loro nomi e all'organizzazione delle directory contenenti le configurazione dei ''VirtualHost' e dei ''moduli'', il tutto per disporre di un sistema di gestione flessibile e facilmente gestibile:<br />
<br />
======File di Configurazione======<br />
Il file di configurazione di Apache2 si chiama '''apache2.conf''', ed adotta la stessa sintassi del vecchio file di configurazione '''httpd.conf''', che è ancora presente nella directory '''/etc/apache2''' e viene richiamato all'interno del file di configurazione generale, per motivi di compatibilità... consiglio, comunque, di non utilizzarlo, inquanto è un file di transizione, e in futuro potrebbe venir rimosso da apache2.<br />
<br />
======Moduli======<br />
La gestione dei moduli ha subito una profonda modifica rispetto alla versione 1 di Apache: non è più legata ad un solo file, ma a due directory: '''/etc/apache2/mods-available''' e '''/etc/apache2/mods-enabled'''.<br />
; mods-available : contiene i file che permettono il caricamento dei moduli. I file presenti all'interno di questa directory sono divisibili, tramite le loro estensioni, in due categorie: i file con estensione ''.load'' contengono le istruzioni necessarie al caricameto dei moduli; i file con estensione ''.config'', invece, contengono le eventuali opzioni di configurazione da passare al modulo.<br />
<br />
; mods-enables : contiene dei link ai file presenti nella directory '''mods-available'''. All'avvio di Apache verranno caricati i moduli i cui file di canfigurazione presentano un link in questa directory.<br />
<br />
======Siti======<br />
In apache2, a differenza di apache1, tutti i siti vengono gestiti tramite ''siti''.<br />
La struttura utilizzata per la gestione di questi è del tutto simile a quella dei moduli: sono presenti due directory: '''/etc/apache2/sites-available''' e '''/etc/apache2/sites-enabled''' che funzionano esattamente come illustrato precedentemente.<br />
Il concetto è semplice: ogni file presente in '''sites-available''' rappresenta un sito, con tutti i sottodomini associati. Per abilitarli è sufficiente un link simbolico in '''sites-enabled'''.<br />
Anche in questo caso, inoltre, apache2 mette a disposizione due comodi comandi per la gestione dei siti: '''a2ensite''' e '''a2dissite''', che hanno la funzione, rispettivamente, di attivare e disattivare un sito.<br />
<br />
L'utilizzo di questi due tool è semplicissimo:<br />
* se si lancia il comando senza parametri, verrà mostrata la lista di tutti i siti disponibili<br />
* se si indica il sito su cui effettuare l'operazione, questa verrà eseguita.<br />
<br />
Per rendere effettive le modifiche è necessario riavviare apache2.<br />
<br />
=====Supporto SSL=====<br />
Per Apache2, a differenza di Apache1, non esiste un pacchetto '''apache-ssl''' per attivare il supporto [[ssl]]. Per attivare il supporto ssl è necessario modificare la configurazione di apache.<br />
<br />
Per abilitare il supporto, e creare i certificati necessari al funzionamento dell'ssl, bisogna installare openssl:<br />
<pre><br />
# apt-get install openssl<br />
</pre><br />
<br />
Oltre a questo, deve essere abilitato il modulo ''ssl'', con il comando prima descritto per la gestione dei moduli in Apache2:<br />
<pre><br />
# a2enmod ssl<br />
</pre><br />
<br />
Per la generazione del certificato, apache2 offre il comando:<br />
<pre><br />
# apache2-ssl-certificate<br />
</pre><br />
che, tramite una serie di domande, creerà nella direcotry '''/etc/apache2/ssl/''' due file: ''apache.pem'' ed il certificato.<br />
<br />
Ora aggiungiamo un ''sito'' con supporto ssl: con il nostro editor preferito creiamo un file di testo in '''/etc/apache2/sites-available''' come nel seguente esempio (il nome del file può essere, ad esempio, '''default-ssl'''):<br />
<pre><br />
NameVirtualHost *:443<br />
<VirtualHost *:443><br />
SSLEngine on<br />
SSLCertificateFile /etc/apache2/ssl/apache.pem<br />
SSLCertificateKeyFile /etc/apache2/ssl/apache.pem<br />
<br />
ServerAdmin admin@dominio.org<br />
ServerName server.dominio.org<br />
<br />
ErrorLog /var/log/apache2/error_ssl.log<br />
LogLevel warn<br />
CustomLog /var/log/apache2/access_ssl.log combined<br />
ServerSignature On<br />
DocumentRoot /var/www/apache2-default<br />
<br />
<Directory /><br />
Options FollowSymLinks<br />
AllowOverride None<br />
</Directory><br />
<Directory /var/www/apache2-default><br />
Options Indexes FollowSymLinks MultiViews<br />
AllowOverride None<br />
Order allow,deny<br />
allow from all<br />
</Directory><br />
<br />
ScriptAlias /cgi-local/ /var/www/apache2-default/cgi-bin/<br />
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/<br />
<br />
<Directory "/var/www/apache2-default/cgi-bin"><br />
AllowOverride None<br />
Options None<br />
Order allow,deny<br />
Allow from all<br />
</Directory><br />
<br />
<Directory "/usr/lib/cgi-bin"><br />
AllowOverride None<br />
Options None<br />
Order allow,deny<br />
Allow from all<br />
</Directory><br />
<br />
Alias /icons/ "/usr/share/apache2/icons/"<br />
Alias /manual/ "/usr/share/doc/apache2-doc/manual/"<br />
<br />
<Directory "/usr/share/apache2/icons"><br />
Options Indexes MultiViews<br />
AllowOverride None<br />
Order allow,deny<br />
Allow from all<br />
</Directory><br />
</VirtualHost><br />
</pre><br />
<br />
Molte delle opzioni contenute nell'esempio sono prese pari pari dal file '''/etc/apache2/sites-available/default'''. <br />
<br />
Mancano due modifiche, prima di avere il supporto ssl attivo: Apache non è in ascolto sulla porta 443, quella normalmente utilizzata da apache-ssl, e quindi lo dobbiamo istruire modificando il file '''/etc/apache2/ports.conf''' aggiungendo la riga:<br />
<pre><br />
Listen 443<br />
</pre><br />
<br />
Come ultima cosa, importantissima, bisogna attivare il sito che abbiamo appena creato (sempre utilizzando i comodi comandi che Apache2 ci mette a disposizione). Sarà quindi sufficiente un<br />
<pre><br />
# a2ensite default-ssl<br />
</pre><br />
questo se si è scelto di creare un file separato per i siti che avranno il supporto ssl... Un'altra pratica molto diffusa è quella di gestire ogni singolo sito come un file, quindi le direttive per l'abilitazione del supporto ssl vengono scritte all'interno del file ''generale'' di quel sito (in questo caso il file '''default''').<br />
<br />
Per rendere effettive tutte le modifiche, riavviamo apache:<br />
<pre><br />
# /etc/init.d/apache2 restart<br />
</pre><br />
<br />
=====Far convivere Apache e Apache2=====<br />
Alcune volte può essere utile far convivere Apache1 e Apache2 sulla stessa macchina (magari durante un periodo di migrazione)...a tale proposito, è buona norma modificare il numero della porta su cui uno dei due server è in ascolto.<br />
Normalmente si ''sposta'' Apache2 dalla porta '''80''' alla '''8080''' (sempre se su questa non è configurato un server proxy).<br />
<br />
Per modificare la porta su cui Apache2 è in ascolto è sufficiente modificare il file '''/etc/apache/ports.conf''' sostituendo al numero '''80''', '''8080'''. Nel file '''ports.conf''' avremo, quindi, una riga come la seguente:<br />
<pre><br />
Listen 8080<br />
</pre><br />
<br />
=Il processore PHP=<br />
PHP è un [[acronimo ricorsivo]] per "PHP: Hypertext Preprocessor" e cioè "PHP: preprocessore ipertestuale". Questo significa che i nostri script non vengono elaborati dai client (in questo caso dai browser) come ad esempio nel caso di javascript, ma che vengono eseguiti direttamente sul server il quale fornisce ai clients semplici pagine html. Un linguiaggio di questo tipo viene chiamato anche '''server-side''' (lato server), in contrapposizione ai linguaggi '''client-side''' (lato client).<br />
<br />
La cosa più interessante nell'uso di PHP è che si tratta di un linguaggio estremamente semplice per il principiante, ma che, tuttavia, offre molte prestazioni avanzate al programmatore di professione.<br />
<br />
Con PHP non siete limitati soltanto ad un output in HTML. Le possibilità di PHP, infatti, includono l'abilità di generare immagini, files PDF e perfino filmati Flash al volo (utilizzando libswf e Ming). Sarete in grado di generare facilmente qualsiasi testo, come XHTML e qualsiasi altro file XML. PHP può autogenerare questi file, e salvarli nel file system, piuttosto che eseguire un printing esterno, o creare server-side cache per contenuti dinamici. <br />
<br />
Una delle caratteristiche più importanti e significative di PHP è la possibilit` di supportare una completa gamma di databases. Scrivere una pagina web collegata ad un database è incredibilmente semplice.<br />
<br />
PHP fa anche da supporto per dialogare con altri servizi utilizzando i protocolli del tipo LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (in Windows) e innumerevoli altri. Potete anche aprire network sockets ed interagire usando qualsiasi altro protocollo. Inoltre supporta l'interscambio di dati complessi WDDX tra, virtualmente, tutti i linguaggi di programmazione web. A proposito di interconessioni, PHP supporta l'installazione dei JavaObjects e l'utilizzo di questi come oggetti PHP in modo trasparente. Si può anche usare la nostra estensione CORBA per accedere ad oggetti remoti. <br />
{{box|Nota Bene:|Questo elenco delle funzionalità offerte da PHP è tratto dal manuale online di PHP e precisamente dal capitolo [http://it2.php.net/manual/it/intro-whatcando.php Che cosa può fare PHP?]}}<br />
<br />
==Installazione==<br />
Anche installare PHP non è un compito per nulla complesso.<br />
===PHP e Apache 1.3===<br />
Vediamo subito come procedere a abilitare PHP per il nostro server Apache in maniera minimale:<br />
<pre># apt-get install libapache-mod-php4</pre><br />
Apt scaricherà il modulo per Apache, le eventuali dipendenze e aggiornerà anche il file di configurazione dei moduli (/etc/apache/modules.conf).<br />
<br />
Tutto quello che dovremo fare manualmente è di riavviare Apache, altrimenti non ci fornirà gli script Php elaborati, ma ci permetterà unicamente di scaricarli. Come abbiamo già visto nella sezione relativa all' installazione di Apache il comando è:<br />
<pre># apachectl graceful<br />
/usr/sbin/apachectl graceful: httpd gracefully restarted</pre><br />
<br />
Ora, anche se a livello minimale, Apache è in grado fornire al nostro browser l' output degli script elaborati dal motore PHP. Non ci resta altro da fare che [[#Test|testarne]] il funzionamento.<br />
<br />
===PHP e Apache 2.0===<br />
Per abilitare il Php in Apache2 bisogna installare il modulo apposito:<br />
<pre><br />
# apt-get install libapache2-mod-php4<br />
</pre><br />
<br />
Durante l'installazione verrà aggiornata la configurazione di Apache2 per attivare il supporto a php4, inoltre verrà automaticamente riavviato il server Web.<br />
<br />
==Test==<br />
Il modo più semplice per testare la nostra installazione di PHP consiste nel preparare uno script e tentare di visualizzarlo nel nostro browser.<br />
<br />
Possiamo procedere in due modi fondamentalmente: creare uno script nella '''DocumentRoot''' del server web, e cioè '''/var/www''' (se non l' avete modificata in ahttpd.conf) oppure nella nostra '''public_html.<br />
<br />
Nel caso vogliate creare o spostare files all' interno della DocumentRoot di Apache è indispensabile tenere sempre a mente che quella directory e le directory in essa contenute sono visibili anche da altri computer (nella eventuale lan o su internet): prestate estrema attenzione ai permessi di scrittura di questi files!<br />
<br />
Un consiglio personale consiste nell' agire sempre come utente '''www-data''' quando operate nella DocumentRoot: vi risparmierete patemi in fatto di permessi e sicurezza. Per loggarci come utente www-data è sufficiente operare in questo modo:<br />
<pre>$ whoami<br />
keltik<br />
$ su<br />
Password:<br />
# whoami<br />
root<br />
# su - www-data<br />
$ whoami<br />
www-data</pre><br />
Siamo così passati dal nostro utente normale all' utente root e da questo siamo diventati l' utente www-data (il passaggio tramite l' utente root ci evita di dover fornire la password per www-data). Avendo usato il comando '''su - ''' abbiamo effettuato un login vero e proprio, ereditando tutte le variabili locali per www-data.<br />
<br />
Ora possiamo operare in tranquillità nella DocumentRoot (che è anche la $HOME dell' utente www-data).<br />
<br />
Se invece scegliamo di usare la nostra public_html, non dovremo fare altro che creare il file al suo interno usando il nostro utente normale.<br />
<br />
Usiamo il nostro editor preferito e creiamo il file prova.php che conterrà questo codice:<br />
<pre><?php phpinfo(); ?></pre><br />
<br />
{{box|Nota Bene|Aldilà di quale sia il vostro editor preferito, consiglio caldamente di imparare quantomeno i rudimenti di '''vi''': questo editor testuale infatti è presente nella quasi totalità dei sistemi operativi *nix, è molto pratico anche durante sessioni telnet o ssh e - con un minimo di allenamento - dispone di tutta la potenza necessaria ad un editor di codice}}<br />
<br />
Se tutto è andato bene, puntando il browser all' indiritto http://127.0.0.1/prova.php (nel caso di aver usato la DocumentRoot) oppure http://127.0.0.1/~utente/prova.php vedremo una pagina html che riporta molte informazioni utili sul nostro nuovo ambiente di sviluppo (versione del software, moduli di apache, moduli di php, variabili di ambiente, ecc...).<br />
<br />
=Il Database Server=<br />
==MySQL==<br />
Passiamo adesso ad installare il server di database MySQL.<br />
<pre># apt-get install mysql-server</pre><br />
che, oltre al server MySQL, installerà per noi anche il client, alcuni tools e le librerie indispensabili.<br />
<br />
A questo punto il server MySQL dovrebbe essere installato ed avviato automaticamente. Possiamo controllare usando il solito comando '''ps''' oppure '''/etc/init.d/mysql status'''.<br />
{{Warningbox|MySQL inizialmente è accessibile unicamente all' utente '''root''' senza alcuna password.}}<br />
{{box|Nota Bene:|Negli esempi seguenti ho digitando i comandi mysql su righe diverse per renderli più leggibili, ma nulla vieta di scrivere tutto di seguito sulla medesima linea.}}<br />
La nostra prima preoccupazione dovrebbe essere senz'altro quella di impostare una passowrd per l'utente root. Ecco come fare:<br />
<pre><br />
$ mysql -u root<br />
mysql> SET PASSWORD<br />
-> FOR root@localhost<br />
-> =<br />
-> PASSWORD('la_tua_password')<br />
-> ;<br />
Query OK, 0 rows affected (0.08 sec)<br />
<br />
mysql> exit<br />
Bye<br />
$<br />
</pre><br />
{{box|Nota Bene:|Se non funziona il comando '''mysql -u root''' provare con '''mysql -u root -p''' e se richiede la password lasciarla vuota e premere invio.}}<br />
Se ora proviamo a loggarci nuovamente, dovremmo vederci negato l' accesso in questo modo:<br />
<pre><br />
$ mysql -u root<br />
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)<br />
</pre><br />
Riproviamo usando la password che abbiamo scelto in precedenza:<br />
<pre><br />
$ mysql -u root -pla_tua_password<br />
Welcome to the MySQL monitor. Commands end with ; or \g.<br />
</pre><br />
{{box|Nota Bene:|Lo switch "-p" usato nel comando ''mysql'' prevede che la password venga digitata '''senza spazi tra il -p e la password effettiva'''. Non si tratta di un mio errore di battitura!<br> Se invece usiamo lo switch "-p" senza specificare alcuna password, questa ci verrà richiesta interattivamente.}}<br />
Usare utenti con privilegi alti non è mai una buona idea, per cui provvediamo a creare un utente a cui concederemo i privilegi minimi (ma al quale potremo dare privilegi più alti per database specifici):<br />
<pre><br />
mysql> GRANT USAGE ON *.*<br />
-> TO 'utente'@'localhost'<br />
-> IDENTIFIED BY 'la_tua_password'<br />
-> ;<br />
Query OK, 0 rows affected (0.02 sec)<br />
<br />
mysql> FLUSH PRIVILEGES;<br />
Query OK, 0 rows affected (0.04 sec)<br />
</pre><br />
Se ora proviamo a loggarci con il nuovo utente, dovremmo riuscire ad autenticarci usando le credenziali specificate con il comando GRANT.<br />
<br />
Ora creiamo un database nuovo:<br />
<pre><br />
mysql> CREATE DATABASE prova;<br />
Query OK, 1 row affected (0.00 sec)<br />
<br />
mysql> show databases;<br />
+----------+<br />
| Database |<br />
+----------+<br />
| mysql |<br />
| prova |<br />
| test |<br />
+----------+<br />
3 rows in set (0.02 sec)<br />
</pre><br />
ed assegnamo all' utente che abbiamo creato in precedenza piena diritti di amministrazione al database:<br />
<pre><br />
mysql> GRANT ALL PRIVILEGES<br />
-> ON prova.*<br />
-> TO 'utente'@'localhost'<br />
-> ;<br />
Query OK, 0 rows affected (0.02 sec)<br />
<br />
mysql> FLUSH PRIVILEGES;<br />
Query OK, 0 rows affected (0.04 sec)<br />
</pre><br />
Se ora ci logghiamo con il nostro utente e chiediamo una lista dei database, vedremo unicamente quelli su cui abbiamo privilegi:<br />
<pre><br />
mysql> show databases;<br />
+----------+<br />
| Database |<br />
+----------+<br />
| prova |<br />
+----------+<br />
1 row in set (0.00 sec)<br />
</pre><br />
Selezioniamo il database su cui operare col comando:<br />
<pre><br />
mysql> USE prova;<br />
</pre><br />
Ora creiamo una tabella all' interno del database ''prova'', giusto per verificare che sia tutto a posto:<br />
<pre><br />
mysql> CREATE TABLE tabella (colonna1 VARCHAR(20), colonna2 VARCHAR(20));<br />
Query OK, 0 rows affected (0.42 sec)<br />
<br />
mysql> DESCRIBE tabella;<br />
+----------+-------------+------+-----+---------+-------+<br />
| Field | Type | Null | Key | Default | Extra |<br />
+----------+-------------+------+-----+---------+-------+<br />
| colonna1 | varchar(20) | YES | | NULL | |<br />
| colonna2 | varchar(20) | YES | | NULL | |<br />
+----------+-------------+------+-----+---------+-------+<br />
2 rows in set (0.08 sec)<br />
</pre><br />
<br />
Se non abbiamo ottenuto errori passiamo al punto successivo, altrimenti verifichiamo tutti i passaggi precedenti.<br />
<br />
==MySQL e PHP==<br />
Per poter usare MySQL attraverso pagine PHP dobbiamo installare il modulo '''php4-mysql''' e riavviare Apache:<br />
<pre><br />
# apt-get install php4-mysql<br />
# apachectl graceful<br />
/usr/sbin/apachectl graceful: httpd gracefully restarted<br />
</pre><br />
<br />
Ora possiamo verificare se siamo effettivamente in grado di accedere a MySQL.<br><br />
La procedura è simile a quella vista in precedenza per testare la corretta installazione di PHP:<br />
* logghiamoci come utente root oppure spostiamoci nella nostra directory '''public_html''';<br />
* creaimo il file mysql.php che conterrà questo codice:<br />
<pre><nowiki><br />
<?php<br />
<br />
// si collega al database, altrimenti esce e ritorna un errore<br />
<br />
mysql_connect('localhost','utente','la_tua_password') or die(mysql_error());<br />
<br />
?></nowiki><br />
</pre><br />
* apriamo un browser e puntiamolo alla pagina appena creata ( http://localhost/mysql.php oppure http://localhost/~utente/mysql.php);<br />
** se quello che vediamo è una pagina bianca, significa che PHP è in grado di dialogare con MySQL;<br />
** se otteniamo l' errore '''Fatal error: call to undefined function - mysql_connect()''' significa che il modulo php4-mysql non è stato installato correttamente o che non abbiamo riavviato Apache;<br />
** se otteniamo l' errore '''Warning: mysql_connect(): Access denied for user: xxxxxxxx''' significa che abbiamo scritto male le credenziali da utilizzare.<br />
<br />
==PhpMyAdmin==<br />
Questo software è un validissimo alleato nel lavoro quotidiano di manutenere un server MySQL, anche se in locale e/o domestico: tra i suoi pregi segnalo l' ottima usabilità e l' interfaccia web.<br />
<br />
Questo pacchetto si installa con il comando:<br />
<pre><br />
# apt-get install phpmyadmin php4 php4-gd<br />
</pre><br />
Ci verrà quindi chiesto quale server http dovrà essere riconfigurato automaticamente. In base alla versione di Apache che abbiamo installato in precedenza possiamo scegliere '''apache''' oppure '''apache2'''.<br />
<br />
Al termine della configurazione scegliamo di riavviare Apache e cominciamo subito ad utilizzare PhpMyAdmin puntando il browser all'indirizzo http://localhost/phpmyadmin/<br />
<br />
[[Immagine:Phpmyadmin_table.png|thumb|center|Schermata di esempio di PhpMyAdmin]]<br />
<br />
=Conclusioni=<br />
Ora si ha a disposizione un sistema completo per l'utilizzo di script in php (ed anche per il loro sviluppo).<br />
<br />
<br />
----<br />
Autore: [[Utente:Keltik|Keltik]] 07:20, Giu 20, 2005 (EDT)<br/><br />
[[Utente:MaXeR|MaXeR]] 07:59, Lug 18, 2005 (EDT)<br />
[[Categoria:Server]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Old:Installazione_e_configurazione_di_Apache,_PHP_e_Oracle&diff=15346Old:Installazione e configurazione di Apache, PHP e Oracle2008-06-17T11:25:01Z<p>MaXeR: </p>
<hr />
<div>=Introduzione=<br />
In genere si sente spesso parlare di LAMP (Linux, Apache, MySQL e PHP), con riferimento alla famosa e diffusa piattaforma open per lo sviluppo di applicazioni web based (per informazioni complete e dettagliate sull'impostazione di un sistema LAMP vi invito a leggere la guida, presente su questo sito, [[LAMP: Linux, Apache, MySQL e PHP]]). In questa guida, invece, vorrei proporvi una variante di tale piattaforma in cui il DBMS MySQL viene sostituito da Oracle Server 10g Express Edition, una versione free del più blasonato DBMS commerciale, disponibile anche per il pinguino, seppur con alcune limitazioni di cui parlerò in seguito.<br />
In questa guida si focalizzerà l'attenzione sull'installazione e la configurazione di [http://httpd.apache.org/ Apache], [http://www.php.net/ PHP] ed [http://www.oracle.com/technology/software/products/database/xe/index.html Oracle Database Server 10g XE] e sulle modalità di interazione tra questi software, in modo tale da disporre di una piattaforma completa per lo sviluppo di applicazione web-based.<br />
Tutti i passaggi indicati in questa guida sono stati eseguiti su un sistema Debian GNU/Linux 4.0 R3 Netinst.<br />
Buona lettura!<br />
<br />
=Oracle Database Server 10g XE=<br />
==Installazione==<br />
Sul sito di Oracle Corp., previa procedura di registrazione, sono disponibili i pacchetti per Debian, Ubuntu, Suse Novell, Red Hat/Fedora e Mandriva di Oracle Database Server 10g XE con una serie di limitazioni rispetto alla versione a pagamento:<br />
* se Oracle Database Server 10g XE viene installato su un computer con più di una CPU (incluse anche le CPU dual core), esso utilizzerà esclusivamente le risorse di una sola CPU<br />
* su un singolo computer può essere effettuata l’installazione di una sola copia di Oracle Database Server 10g XE; in aggiunta, gli utenti possono far girare una sola istanza del database Oracle su ciascun computer. Quest’ultima limitazione può comunque essere aggirata in quanto, anche sulla stessa installazione di Oracle Database Server 10g XE possono convivere più schemi, ciascuno dei quali contenente le proprie tabelle. Di fatto, è come se sulla stessa macchina fossero presenti più database simultaneamente<br />
* la quantità massima di dati contenuta in un database Oracle Database Server 10g XE non può superare i 4 gigabytes di spazio disco, tuttavia se i dati degli utenti dovessero superare tale quota, il sistema invierebbe l’errore ORA-12592<br />
* la quantità massima di memoria RAM che Oracle Database Server 10g XE utilizza non può eccedere un gigabyte, anche se ne è disponibile una quantità maggiore. La quantità di memoria totale utilizzata dal server Oracle viene ricavata come somma della System Global Area (SGA) e della Program Global Area (PGA) aggregata<br />
* il protocollo HTTPS (Secure HTTP) non è supportato nativamente dal listener HTTP presente in Oracle 10g XE, quindi è necessario far uso di un web server, come Apache, che supporti tale protocollo<br />
<br />
Limitazioni a parte, Oracle Database Server 10g XE resta, a mio avviso, un buon prodotto utilizzato con successo, ad esempio, da varie università sul territorio italiano.<br />
Una volta effettuato il download del pacchetto, l'installazione di Oracle Database Server 10g XE si riduce al seguente comando:<br />
<br />
<pre><br />
# dpkg –i oracle-xe-10.2.0.1-1.0.deb<br />
</pre><br />
<br />
L'installazione di Oracle Database Server 10g XE richiede la presenza di alcuni pacchetti che vanno installati a parte, se non presenti con il seguente comando:<br />
<br />
<pre><br />
# apt-get install bc libaio1 libxml2 libxml2-dev libxml2-utils python-libxml2<br />
</pre><br />
<br />
==Configurazione==<br />
Al termine dell'installazione, bisogna configurare opportunamente Oracle Database Server 10g XE lanciando lo script '''oracle-xe''' con l'opzione “configure”. Tale script si trova nella directory /etc/init.d/ e va eseguito sempre con i privilegi di root.<br />
Lo script in questione richiede interattivamente all'utente di fornire una serie di informazioni per eseguire Oracle Database Server 10g XE tra cui:<br />
<br />
* il numero di porta (per default la 8080) tramite cui è possibile raggiungere l’interfaccia web per la configurazione di Oracle all’url http://127.0.0.1:8080/apex<br />
* il numero di porta (per default la 1521) su cui si mette in attesa il “listener” di Oracle Server, ossia un demone preposto a ricevere e servire le richieste di connessione al server Oracle, appunto. Se si dispone di un firewall potrebbe essere necessario configurarlo in modo tale da lasciare passare il traffico sulla porta 1521 o, diversamente, è possibile indicare allo script di configurazione di Oracle Server 10g XE di mettere il listener in ascolto su una porta differente<br />
* quando far partire l’istanza di Oracle Database Server 10g XE; si può decidere se schedulare la partenza di Oracle al boot del sistema, oppure se eseguirla manualmente di volta in volta (io ho optato per la prima opzione, per comodità, ma è pur sempre possibile realizzare uno script bash per gestire l'avvio e l'arresto di Oracle in modo manuale).<br />
<br />
==Impostazione delle variabili d’ambiente di Oracle Server 10g XE==<br />
Al termine dell'installazione di Oracle Server 10g XE è necessario settare le variabili d'ambiente indispensabili per il funzionamento di tool come, ad esempio, SQL*Plus, utilizzato per le classiche operazioni di gestione del database come inserimenti, modifiche, cancellazioni, consultazioni di dati e così via.<br />
Per procedere in questo senso, è sufficiente lanciare uno script di configurazione delle variabili d’ambiente di Oracle Database Server 10g XE, disponibile in due distinte versioni dipendentemente dalla shell in uso. I due script si trovano nella directory /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/ e sono:<br />
<br />
* oracle_env.sh (valido anche per le shell Bourne e Korn)<br />
* oracle_env.csh (valido anche per le shell C e tsh)<br />
<br />
Lo script oracle_env.sh, si occupa di impostare una serie di variabili d'ambiente tra cui:<br />
<br />
* ORACLE_HOME: il path dell’installazione di Oracle 10g XE<br />
* ORACLE_SID: il nome del database (XE)<br />
* NLS_LANG: il character set, rilevato in base alle impostazioni in uso sul sistema operativo, che verrà utilizzato per la memorizzazione dei dati nel database<br />
* PATH: il percorso che porta alla directory contenente gli eseguibili di Oracle Server 10g XE<br />
* LD_LIBRARY_PATH: il percorso della directory contenente le librerie principali per Oracle Server 10g XE<br />
<br />
{{Warningbox|Va ricordato che riavviando il computer, i settaggi impostati con lo script oracle_env.sh vengono persi, perciò è buona norma inserire la stringa:<br />
<br />
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh<br />
<br />
all’interno del file .bash_profile; inoltre, per poter mantenere le stesse impostazioni all’apertura di ogni nuova shell durante la sessione corrente, è conveniente aggiungere l'istruzione precedente anche all’interno del file .bashrc.}}<br />
<br />
Bene, l'installazione e la configurazione di Oracle Database Server 10g XE sono complete! Per assicurarsi che Oracle sia partito correttamente, è possibile lanciare il comando seguente:<br />
<br />
<pre><br />
# /etc/init.d/oracle-xe status<br />
<br />
LSNRCTL for Linux: Version 10.2.0.1.0 - Beta on 14-FEB-2007 10:14:01<br />
Copyright (c) 1991, 2005, Oracle. All rights reserved.<br />
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))<br />
STATUS of the LISTENER<br />
————————<br />
Alias LISTENER<br />
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Beta<br />
Start Date 14-FEB-2007 10:13:44<br />
Uptime 0 days 0 hr. 0 min. 17 sec<br />
Trace Level off<br />
Security ON: Local OS Authentication<br />
SNMP OFF<br />
Default Service XE<br />
Listener Parameter File /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/admin/listener.ora<br />
Listener Log File /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/log/listener.log<br />
Listening Endpoints Summary…<br />
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))<br />
Services Summary…<br />
Service “PLSExtProc” has 1 instance(s).<br />
Instance “PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service…<br />
The command completed successfully<br />
</pre><br />
<br />
Come si può notare dall'output dello script, il listener Oracle ha un'istanza attiva sulla porta 1521, come stabilito in fase di configurazione.<br />
<br />
=Apache e PHP=<br />
Il secondo passo consiste nell'installazione e configurazione di Apache e PHP con supporto al DBMS Oracle. &Egrave; possibile installare il web server Apache e il linguaggio di scripting serverside PHP tramite i pacchetti forniti dalla propria distribuzione, oppure ricompilare il tutto da sorgenti. La possibilità di compilare questi due software da sorgenti consente di scegliere autonomamente le opzioni di compilazione più adatte alle proprie necessità (ad esempio, il supporto per Oracle, oppure per MySQL, per LDAP, per la libreria di compressione zlib e così via).<br />
<br />
==Installazione e configurazione di Apache==<br />
I comandi seguenti consentono il download, la scompattazione e la compilazione del web server Apache sulla propria Linux box:<br />
<br />
<pre><br />
$ wget -c http://apache.fis.uniroma2.it/httpd/httpd-2.2.3.tar.gz<br />
# tar xzf httpd-2.2.3.tar.gz /usr/local/src/<br />
<br />
# cd /usr/local/src/httpd-2.2.3/<br />
# ./configure --prefix=/usr/local/apache2/<br />
# make && make install<br />
</pre><br />
<br />
il parametro '''--prefix''' passato al comando configure richiede il path in cui verrà installato il web server Apache. Dalla documentazione del web server si legge che il percorso di default da indicare è /usr/local/apache2/.<br />
Le impostazioni del server web Apache risiedono nel file '''httpd.conf''' (che si trova nella directory /usr/local/apache2/conf/ nel caso sia stata effettuata l'installazione da sorgenti); tale file può essere modificato, disponendo dei privilegi di root, con un qualsiasi editor di testi.<br />
Le direttive da impostare nel file httpd.conf per ottenere un funzionamento minimale del web server Apache sono:<br />
<br />
* Listen: consente ad Apache di porsi in ascolto su un determinato indirizzo IP e/o porta<br />
* ServerName: il nome del server, o l'indirizzo IP e il numero di porta che il server utilizza per identificare se stesso<br />
* DocumentRoot: la directory contenente le pagine web delle proprie applicazioni. &Egrave anche possibile indicare un alias, o un link simbolico per puntare ad altre locazioni del filesystem.<br />
<br />
Una volta salvate le modifiche apportate al file httpd.conf, si può far partire Apache con il comando:<br />
<br />
<pre><br />
# /usr/local/apache2/bin/apachectl start<br />
</pre><br />
<br />
quindi, puntanto il proprio browser web all'indirizzo specificato anche con la direttiva '''ServerName''' precedentemente citata, si dovrebbe poter visualizzare la pagina di benvenuto di Apache.<br />
<br />
==Installazione e configurazione di PHP==<br />
PHP è un linguaggio di scripting serverside che consente di integrare il codice HTML al fine di realizzare pagine web dinamiche, ossia il cui contenuto varia in base alle azioni intraprese dagli utenti. Poichè lo scopo di questa guida è quello di realizzare un server web in grado di interagire con una base di dati Oracle, è necessario che PHP disponga del supporto per tale DBMS. Ancora una volta, per poter abilitare esclusivamente le funzionalità richieste di PHP, si è optato per la compilazione dei sorgenti di questo software.<br />
<br />
<pre><br />
$ wget -c http://it2.php.net/get/php5.1.6.tar.gz/from/it.php.net/mirror<br />
# tar xzf php-5.1.6.tar.gz /usr/local/src/<br />
# cd /usr/local/src/php5.1.6/<br />
<br />
# ./configure --prefix=/usr/local/php \<br />
--with-apxs2=/usr/local/apache2/bin/apxs \<br />
--with-config-file-path=/usr/local/apache2/conf \<br />
--with-oci8=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server \<br />
--enable-sigchild \<br />
--without-mysql<br />
<br />
# make && make install<br />
</pre><br />
<br />
Come si può notare dal codice precedente, il comando '''configure''' è seguito da una serie di opzioni da attivare nella successiva fase di compilazione:<br />
<br />
* --prefix: permette di indicare in quale directory installare PHP<br />
* --with-apxs2: indica che si vuole compilare PHP come un moulo condiviso di Apache<br />
* --with-config-file-path: indica il percorso dei file di configurazione di Apache<br />
* '''--with-oci8''': abilita il supporto per il DBMS Oracle di cui è necessario indicare il path dell'installazione.<br />
* --enable-sigchild: abilita il gestore dei segnali proprio di PHP<br />
* --without-mysql: disabilita il supporto al DBMS MySQL, non necessario, visto che si vuole utilizzare Oracle Database Server<br />
<br />
Il parametro '''--with-oci8''' richiede di specificare il percorso, sul filesystem locale, dell'installazione di Oracle Database Server, se tale installazione è stata effettuata sullo stesso server fisico di Apache e PHP. Se, invece, web server e db server risiedono su due macchine distinte, come spesso accade, allora sulla macchina che funge da server web deve essere installato l'[http://www.oracle.com/technology/tech/oci/instantclient/index.html Oracle Instant Client].<br />
I passi da seguire per installare tale software sono molto semplici:<br />
<br />
* Scaricare, dal link sopra indicato, i package '''Basic''' e '''SDK'''<br />
* Scompattare i file scaricati in una directory a piacere (ad es. /usr/local/src/)<br />
<br />
<pre><br />
# mkdir /usr/local/src/instantclient<br />
# cd /usr/local/src/instantclient<br />
# unzip instantclient-basic-linux32-10.2.0.1-20050713.zip<br />
# unzip instantclient-sdk-linux32-10.2.0.1-20050713.zip<br />
</pre><br />
<br />
* Creare un link simbolico alle librerie libclntsh.so.10.1 e libocci.so.10.1<br />
<br />
<pre><br />
ln -s libclntsh.so.10.1 libclntsh.so<br />
ln -s libocci.so.10.1 libocci.so<br />
</pre><br />
<br />
La scompattazione dei due file precedenti crea una directory, contenente i files dell'Oracle Instant Client. Nel mio caso, tale directory si chiama "instantclient_11/", ma il nome potrebbe differire, quindi '''ATTENZIONE'''.<br />
Il comando configure precedentemente lanciato per PHP va quindi modificato indicando, con la direttiva '''--with-oci8''', il percorso in cui è stato installato l'Oracle Instant Client:<br />
<br />
<pre><br />
# ./configure --prefix=/usr/local/php \<br />
--with-apxs2=/usr/local/apache2/bin/apxs \<br />
--with-config-file-path=/usr/local/apache2/conf \<br />
--with-oci8=instantclient,/usr/local/src/instantclient/instantclient_11/ \<br />
--enable-sigchild \<br />
--without-mysql<br />
</pre><br />
<br />
Per concludere l’installazione di PHP è sufficiente inserire il percorso /usr/local/php/lib/php all’interno del file '''php.ini''', il quale deve essere successivamente copiato dalla directory dei sorgenti di PHP nella directory /usr/local/lib e in /usr/local/apache2/conf/ (se Apache è stato compilato da sorgenti).<br />
Se la compilazione di PHP è andata a buon fine, nel file httpd.conf sarà stata aggiunta in automatico la seguente stringa:<br />
<br />
<pre><br />
LoadModule php5_module modules/libphp5.so<br />
</pre><br />
<br />
Questa riga indica che Apache ha caricato il modulo per il funzionamento delle pagine web contenenti codice PHP (nella versione 5), tuttavia, per far sì che i browser web interpretino correttamente il codice PHP, è necessario modificare nuovamente il file httpd.conf di configurazione del web server Apache aggiungendo le due righe seguenti all'interno della sezione '''<IfModule mime_module>'''<br />
<br />
<pre><br />
<IfModule mime_module><br />
[...]<br />
AddType application/x-httpd-php .php .phtml <br />
AddType application/x-httpd-php-source .phps<br />
</IfModule><br />
</pre><br />
<br />
Di default, PHP offre il supporto per il DBMS MySQL, mentre nel caso di questa guida esso è stato sostituito con il supporto ad Oracle. Questo richiede di modificare alcune direttive presenti nel file php.ini per rendere PHP aderente alla sintassi utilizzata da Oracle. In particolare, MySQL ed Oracle considerano il carattere apice(’) come delimitatore di stringhe, o di date. Se si deve memorizzare una stringa all’interno di una tabella e questa stringa contiene una o più occorrenze del carattere apice, entrambi i DBMS ritorneranno un errore a meno di non eseguiate un escape di tale carattere jolly. Questa operazione si rende, ovviamente, necessaria anche per i dati che gli utenti inseriscono, ad esempio, tramite i form di un sito e che poi andranno inseriti all’interno di un database, ma con una importante differenza: MySQL effettua l’escape del carattere apice tramite il carattere backslash (\), mentre Oracle utilizza un ulteriore apice.<br />
PHP consente l’escape del carattere apice, se presente nei dati passati tramite GET, POST o persino cookie, per mezzo delle seguenti direttive contenute nel php.ini:<br />
<br />
<pre><br />
; Magic quotes for incoming GET/POST/Cookie data.<br />
magic_quotes_gpc = Off<br />
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.<br />
magic_quotes_runtime = Off<br />
; Use Sybase-style magic quotes (escape ' with '' instead of ').<br />
magic_quotes_sybase = On<br />
</pre><br />
<br />
Impostando “magic_quotes_gpc” e “magic_quotes_sybase” a “On” si ottiene l’escape del carattere apice alla maniera di Oracle, mentre se magic_quotes_sybase viene impostato a “Off” si ottiene l’escape alla maniera di MySQL.<br />
<br />
=PEAR=<br />
PHP mette a disposizione delle funzioni che consentono la comunicazione con una base di dati, ma esse dipendono strettamente dal tipo di DBMS con cui le pagine web scritte in PHP devono interagire. Per questo motivo è necessario servirsi del framework [http://pear.php.net/ PEAR] (PHP Extension and Application Repository), ossia un repository di package con cui è possibile estendere le funzionalità del linguaggio PHP. In particolare, il [http://pear.php.net/package/DB package DB], fornisce un’API che si frappone tra PHP e il DBMS sottostante, permettendo di slegare un'applicazione web dal DBMS in uso. Il vantaggio è che se dovesse rendersi necessaria una migrazione del database verso un DBMS diverso da quello attuale non vi sarà l'obbligo di modificare tutte le funzioni che PHP utilizza per interagire con la base di dati, ma solo il protocollo do comunicazione utilizzato (oci8 per Oracle, oppure mysql per MySQL, ecc).<br />
<br />
{{ Warningbox | Attualmente, il package DB è stato sostituito dal [http://pear.php.net/package/MDB2 package MDB2] che si consiglia di utilizzare.}}<br />
<br />
==Configurazione di PEAR==<br />
Conclusa la configurazione di PHP, è necessario passare a quella del framework PEAR quindi, aggiungendo i pacchetti necessari per la comunicazione con una base di dati gestita tramite Oracle. Le API messe a disposizione da PEAR potranno poi essere sfruttate nelle proprie pagine PHP per slegarsi dal DBMS in uso.<br />
L'aggiunta di un pacchetto in PEAR si esegue con il comando:<br />
<br />
<pre><br />
pear install [nome_pacchetto]<br />
</pre><br />
<br />
tramite cui si può installare un package prelevandolo direttamente dai repository di PEAR.<br />
Di seguito vengono indicati i comandi necessari per installare sia il package DB, sia MDB2:<br />
Per il package DB:<br />
<br />
<pre><br />
# ./pear install DB<br />
</pre><br />
<br />
Per il nuovo package MDB2, invece:<br />
<br />
<pre><br />
# ./pear install MDB2 <br />
# ./pear install pear/MDB2#oci8 <br />
</pre><br />
<br />
{{box|Nota Bene:|è necessario ricordarsi di includere il file DB.php, oppure MDB2.php, a seconda del pacchetto installato, all'interno delle proprie pagine PHP per poter utilizzare le funzioni messe a disposizione da questo package per l'interazione con una base di dati Oracle.<br />
L'istruzione da utilizzare all'inizio del codice PHP è la seguente:<br />
<br />
require_once ('MDB2.php');}}<br />
<br />
=Conclusioni=<br />
Bene, a questo punto disponiamo di un web server con Apache e PHP configurati per comunicare con una base di dati Oracle sottostante e il tutto in salsa open source!<br />
<br />
<br />
----<br />
Autore: [[Utente:Hydra|Hydra]] 04:10, 15 Mar 2008 (CDT)<br />
[[Categoria:Server]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=XAMPP:_Linux,_Apache,_MySQL_e_PHP_facili&diff=15345XAMPP: Linux, Apache, MySQL e PHP facili2008-06-17T11:24:48Z<p>MaXeR: </p>
<hr />
<div>=Cos'è XAMPP=<br />
<br />
Per poter creare un webserver sulla nostra macchina linux, abbiamo bisogno innanzitutto di '''Apache''' (il web server vero e proprio); poi bisogna aggiungere altre applicazioni che ci permettano di creare siti con contenuto dinamico, magari scritti in '''PHP''' (per esempio un bel CMS open source), quindi bisogna installare PHP e impostare Apache affinché supporti questo linguaggio. Molto spesso, però, Apache e PHP da soli non bastano, perché la gestione dei contenuti del sito rischia di diventare laboriosa col passare del tempo: ed ecco che dobbiamo ricorrere ad un database, solitamente '''MySQL''' o PostgreSQL, che memorizzi i nostri dati e li restituisca quando servono ad Apache e PHP per visualizzarli nella pagina web del nostro sito. Installiamo, allora, anche un database e configuriamolo opportunamente. Magari ci farebbe comodo avere anche qualche bella libreria grafica (per esempio '''GDlib''') che ridimensioni ad hoc e visualizzi le nostre immagini: installiamo anche questa. Bene, a questo punto abbiamo un bel serverino web, abbastanza minimale, ma funzionale.... L'unico problema che potrebbe sorgere è che non siamo dei Guru (o semplicemente non abbiamo tanta voglia di perdere tempo) e quindi corriamo il rischio di non riuscire a configurare tutto bene e con la dovuta sicurezza.<br />
<br />
Per alleviare il problema, su [http://www.apachefriends.org ApacheFriends] possiamo trovare il pacchetto che fa per noi: '''XAMPP'''. <br />
<br />
''Ma cos'è XAMPP?''<br><br />
XAMPP (fino a poco tempo fa LAMPP) è un insieme di programmi utili per la creazione di un web server: integra, infatti, Apache, MySQL, PHP, '''Perl''' e tanti altri programmi che ci permettono di creare, relativamente facilmente e velocemente, un serverino web che possa contenere il nostro sito.<br><br />
''E la comodità dov'è?''<br><br />
La comodità sta nel fatto che invece di scaricare e installare singolarmente tutti i programmi di cui abbiamo bisogno, con XAMPP basta scaricare un file compresso di circa 40 MB e decomprimerlo sul nostro pc. E se per qualche malaugurato motivo, in futuro, non ci va più di avere quella cinquantina di MB del nostro hard disk occupati da XAMPP, basta semplicemente cancellare la sua directory!<br />
Oltre a questo, la comodità di XAMPP sta anche nel fatto che molte sue funzioni possono essere intuitivamente configurate via web con un browser (alcune volte, però, è necessario mettere mano al nostro editor di testi preferito e girovagare nei files di configurazione).<br />
<br />
Come già detto, il pacchetto contiene molti programmi utili, tutti più o meno configurabili facilmente. La lista dei programmi contenuti nella versione Linux di XAMPP è la seguente:<br />
<br />
{{box|versione 1.4.14|Apache 2.0.54, MySQL 4.1.12, PHP 5.0.4 & 4.3.11 & PEAR + SQLite 2.8.9/2.8.14 + multibyte (mbstring) support, Perl 5.8.6, ProFTPD 1.2.10, phpMyAdmin 2.6.2-pl1, OpenSSL 0.9.7g, GD 2.0.1, Freetype2 2.1.7, libjpeg 6b, libpng 1.2.7, gdbm 1.8.0, zlib 1.1.4, expat 1.2, Sablotron 1.0, libxml 2.4.26, Ming 0.2a, Webalizer 2.01, pdf class 009e, ncurses 5.8, mod_perl 2.0.0-RC4, FreeTDS 0.62.4, gettext 0.11.5, IMAP C-Client 2002b, OpenLDAP (client) 2.2.13, mcrypt 2.5.7, mhash 0.8.18, eAccelerator 0.9.3, cURL 7.13.1, libxslt 1.1.8, phpSQLiteAdmin 0.2, libapreq 2.04-dev}}<br />
<br />
{{Warningbox| lo scopo di questa guida è quello di spiegare come creare facilmente, tramite XAMPP, un piccolo webserver ad '''uso prettamente personale'''. Sul sito ufficiale di XAMPP è menzionato più volte il fatto che questo pacchetto è stato creato per essere utilizzato in ambienti di sviluppo, con tutti i problemi di sicurezza che ne derivano. Per rendere XAMPP più sicuro, è necessario ricorrere ad una configurazione manuale dei vari servizi (come Apache, MySQL, PHP, ecc.): questi argomenti non verranno trattati in questa guida, per cui sarebbe opportuno leggere le guide presenti nella sezione ''Networking'', in particolare la guida [[LAMP: Linux, Apache, MySQL e PHP]].}}<br />
<br />
=Installazione=<br />
Dopo aver scaricato il nostro pacchetto, non ci resta che aprire la shell e loggarci come root:<br />
<pre>$ su</pre><br />
A questo punto, installiamo il pacchetto semplicemente decomprimendolo in ''/opt'':<br />
<pre># tar xvfz xampp-linux-1.4.13.tar.gz -C /opt</pre><br />
in questo modo il pacchetto verrà installato in ''/opt/lampp''.<br />
<br />
{{Warningbox| sul sito ufficiale di XAMPP è indicato che questo appena descritto è il '''metodo più sicuro''' per installare correttamente il pacchetto. Inoltre si sconsiglia di usare programmi win32 di decompressione per estrarre i file in quanto questi potrebbero impedire la corretta installazione.}}<br />
<br />
Se abbiamo già una vecchia versione di XAMPP installata sul nostro sistema, questo comando sovrascriverà i vecchi files.<br />
<br />
Se finora non abbiamo ricevuto messaggi d'errore, vuol dire che abbiamo appena finito di installare XAMPP sulla nostra macchina.<br />
<br />
=Aggiornamento=<br />
=Avvio di XAMPP=<br />
L'avvio di XAMPP è semplice come la sua installazione. Infatti basta digitare da root shell:<br />
<pre># /opt/lampp/lampp start</pre><br />
e attendere un output simile a questo:<br />
<pre>Starting XAMPP 1.4.14...<br />
LAMPP: Starting Apache...<br />
LAMPP: Starting MySQL...<br />
LAMPP started.</pre><br />
A questo punto il server web è avviato.<br />
<br />
Fino alla versione 0.9.4 il comando ''/opt/lampp/lampp start'' poteva semplicemente avviare o fermare XAMPP. Dalla versione 0.9.5 sono stati aggiunti numerosi '''comandi di controllo'''.<br />
<TABLE WIDTH=603 BORDER=1 BORDERCOLOR="#000000" CELLPADDING=1 CELLSPACING=0><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132 BGCOLOR="#9999cc"><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Com<SPAN LANG="it-IT">ando</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452 BGCOLOR="#9999cc"><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Des<SPAN LANG="it-IT">crizione</SPAN></FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rt</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
XAMPP.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">p</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
XAMPP.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>res<SPAN LANG="it-IT">tart</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
e riavvia XAMPP.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>startapache</FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
solo Apache.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rtssl</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
Apache con il supporto SSL. Questo comando attiva il supporto<br />
SSL permanentemente, p.e. se si riavvia XAMPP dopo questo<br />
comando, Apache partir&agrave; sempre con il supporto SSL.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rtmysql</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
solo MySQL.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rtftp</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
il server ProFTPD. I parametri standard di connessione via FTP<br />
sono: user &quot;nobody&quot;, password &quot;lampp&quot;.<br />
Questo comando attiva ProFTPD permanentemente, p.e. se si<br />
riavvia XAMPP dopo questo comando, si avvier&agrave; sempre<br />
anche ProFTPD.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>stopapache</FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
Apache.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">pssl</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
Apache con il supporto SSL. Questo comando disattiva il supporto<br />
SSL permanentemente, p.e. se si riavvia XAMPP dopo questo<br />
comando, Apache partir&agrave; sempre senza il supporto SSL.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">pmysql</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
MySQL.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">pftp</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
il server ProFTPD. Questo comando disattiva ProFTPD<br />
permanentemente, p.e. se si riavvia XAMPP dopo questo comando,<br />
ProFTPD non si avvier&agrave; pi&ugrave; automaticamente.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132 HEIGHT=13><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>security</FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
una serie di piccole verifiche di sicurezza.</FONT></FONT></P><br />
</TD><br />
</TR><br />
</TABLE><br />
<br />
<br />
Per esempio, per avviare Apache con il '''supporto SSL''', basta usare, da root shell, il seguente comando:<br />
<pre># /opt/lampp/lampp startssl</pre><br />
<br />
{{Warningbox| dalla versione 1.4.7, in XAMPP è stata affiancata, alla versione 4.3.x di PHP, la versione 5. In caso di problemi di '''compatibilità con la versione 5''', è possibile selezionare quale versione caricare all'avvio dei servers, semplicemente digitando:<br />
<pre># /opt/lampp/lampp php4</pre><br />
per la versione 4.3.x, oppure digitando:<br />
<pre># /opt/lampp/lampp php5</pre><br />
per la versione 5.<br />
Inoltre è possibile verificare quale versione di PHP sia attiva, con il seguente comando:<br />
<pre># /opt/lampp/lampp phpstatus</pre><br />
'''Appena installato, XAMPP si avvia di default con PHP 5 e Apache con supporto SSL'''}}<br />
<br />
Se abbiamo fatto tutto bene senza errori, a questo punto ci basta aprire la pagina ''http://localhost'' dal nostro browser preferito e configurare i nostri servizi da web.<br />
<br />
=Configurazione=<br />
==Primo avvio==<br />
Dopo aver installato il nostro XAMPP, non ci resta che configurarlo secondo le nostre esigenze. Per fare questo, apriamo il nostro '''browser''' preferito e inseriamo l'URL ''http://localhost''. Ci apparirà la schermata iniziale dove potremo scegliere la '''lingua del pannello di controllo''': clicchiamo, quindi, su ''Italiano''.<br />
La struttura del pannello di controllo è molto intuitiva, con i vari menù sulla sinistra e la pagina di modifica centrale.<br />
<br />
===Menù XAMPP===<br />
* Stato<br />
:Come indica il nome, qui potremo vedere lo '''stato di attivazione''' dei nostri servizi.<br />
* Sicurezza<br />
:Qui è possibile monitorare a grandi linee lo '''stato di sicurezza''' di XAMPP.<br><br />
:Al '''primo avvio di XAMPP''' vedremo che i nostri servizi sono configurati in maniera alquanto “aperta” (tutte le voci dovrebbero risultare ''insicure'', questo sempre dovuto al fatto che XAMPP è stato pensato per un ambiente di sviluppo).<br><br />
:A questo punto, come la stessa pagina ci suggerisce, eseguiamo un programma che effettua una serie di piccole verifiche di sicurezza. Digitiamo da root shell:<br />
<pre># /opt/lampp/lampp security</pre><br />
:l'output è il seguente:<br />
<pre>XAMPP: Quick security check...<br />
XAMPP: Your XAMPP pages are NOT secured by a password.<br />
XAMPP: Do you want to set a password? [yes]</pre><br />
:digitiamo ''yes'' e, quando richiesto, inseriamo la password (2 volte):<br />
<pre>XAMPP: Password protection active. Please use 'lampp' as user name!</pre><br />
:Da adesso, per poter accedere via web alla pagina di configurazione di XAMPP dovremo autenticarci con l'username “lampp” e la nostra password.<br />
<pre>XAMPP: MySQL is accessable via network.<br />
XAMPP: Normally that's not raccomended. Do you want to turn it off? [yes]</pre><br />
:digitiamo ''yes'' per impedire che MySQL ascolti sulla nostra connessione internet.<br><br />
:Verrà riavviato MySQL.<br />
<pre>XAMPP: The MySQL/phpMyAdmin user pma has no password set!!!<br />
XAMPP: Do you want to set a password? [yes]</pre><br />
:Qui XAMPP ci chiede una password per l'utente generico "pma" (con limitato accesso al database) per MySQL e phpMyAdmin: digitiamo ''yes'' e inseriamo la nostra password.<br />
<pre>XAMPP: MySQL has no root password set!!!<br />
XAMPP: Do you want to set password? [yes]</pre><br />
:Ora dobbiamo inserire la password di root per MySQL (che naturalmente è la stessa di phpMyAdmin).<br />
<pre>XAMPP: The FTP password is still set to 'lampp'.<br />
XAMPP: Do you want to change the password? [yes]</pre><br />
:Adesso impostiamo la password per l'accesso FTP al nostro server.<br />
:Verrà riavviato il demone ProFTPD.<br />
<br />
:A questo punto possiamo verificare se la sicurezza del nostro XAMPP è aumentata. Torniamo con il browser su ''http://localhost'': se tutto è stato fatto regolarmente, ci verranno chiesti username e password per accedere al pannello di controllo di XAMPP (ricordiamoci che l'username è “lampp”).<br><br />
:Logghiamoci nel pannello di controllo e torniamo a dove eravamo rimasti, cioè la finestra di ''Sicurezza'': se tutte le voci saranno “sicure”, allora vuol dire che abbiamo reso più sicuro il nostro XAMPP.<br />
<br />
{{ Warningbox | ovviamente questa procedura serve solo a dare un '''livello minimo di sicurezza''' a XAMPP.}}<br />
<br />
===Menù Demo===<br />
Nella sezione ''Demo'', è possibile trovare una serie di script che dimostrano il funzionamento di XAMPP: tralasciando le altre voci, il modo più semplice e intuitivo per verificare se sono correttamente configurati i moduli per la '''gestione delle immagini''' del nostro futuro sito è cliccare su ''Grafica Istantanea'' (nel campo di testo, digitiamo quello che vogliamo, poi clicchiamo su OK: il risultato dovrebbe essere un'immagine con la nostra scritta) e su Grafica Flash (stesso procedimento di prima, ma in questo caso verifichiamo il funzionamento di '''MING''', che serve per produrre documenti flash).<br><br />
<br />
Cliccando sulla voce ''phpinfo()'' possiamo leggere le informazioni circa lo stato del nostro parser PHP (per esempio per verificare se è in esecuzione PHP5 o PHP4). Potremo vedere anche le informazioni riguardanti gli altri componenti del nostro XAMPP, come p.e. Apache2, MySQL, ecc.<br />
<br />
===Menù Strumenti===<br />
Cliccando su ''phpMyAdmin'', abbiamo accesso all'interfaccia web che ci permette di '''gestire i nostri database''' MySQL.<br><br />
In questa sede è importante sapere che per accedere a phpMyAdmin possiamo usare l'utente “root” (con la password che abbiamo impostato in precedenza) o l'utente generico “pma” (anche questo ha associata la password che abbiamo impostato in precedenza): quest'ultimo ha limitazioni che gli permettono esclusivamente di leggere e usare il contenuto delle tabelle dei database, ma non di crearle né modificarle.<br />
<br />
Cliccando su ''Webalizer'' possiamo accedere ad un tool che ci permette di monitorare vari parametri del nostro webserver.<br />
<br />
==Informazioni utili==<br />
===Dove sono i files importanti di XAMPP?===<br />
<TABLE WIDTH=600 BORDER=1 CELLPADDING=1 CELLSPACING=0><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#9999cc"><br />
<P>File/Directory</P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#9999cc"><br />
<P>Des<SPAN LANG="it-IT">crizione</SPAN></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/bin/</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Qui ci sono i com<SPAN LANG="it-IT">andi principali di XAMPP.<br />
Per esempio, da qui si pu&ograve; lanciare <tt>mysql</tt> o <tt>apache2</tt>.</SPAN></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/htdocs/</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>La DocumentRoot di Apache.</P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/etc/httpd.conf</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Il file di configurazione di Apache.</P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/etc/my.cnf</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Il file di configurazione di MySQL.</P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/etc/php.ini</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Il file di configurazione di PHP.</P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/etc/proftpd.conf</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Il file di configurazione di ProFTPD. (dalla ver<SPAN LANG="it-IT">sione</SPAN><br />
0.9.5)</P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/phpmyadmin/config.inc.php</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Il file di configurazione di phpMyAdmin.</P><br />
</TD><br />
</TR><br />
</TABLE><br />
<br />
<br />
=Disinstallazione=<br />
Disinstallare XAMPP è semplice come installarlo. L'unica accortezza da prendere è quella di fermarlo prima:<br />
<pre># /opt/lampp/lampp stop</pre><br />
e attendere un output simile a questo:<br />
<pre>Stopping LAMPP 1.4.14<br />
LAMPP: Stopping Apache...<br />
LAMPP: Stopping MySQL...<br />
LAMPP stopped.</pre><br />
A questo punto non ci resta che rimuovere la directory di XAMPP:<br />
<pre># rm -rf /opt/lampp</pre><br />
<br />
<br />
----<br />
Autore: [[Utente:soter|soter]] 12:53, Giu 23, 2005 (EDT)<br />
[[Categoria:Server]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Server_casalingo_(SOHO)&diff=15344Server casalingo (SOHO)2008-06-17T11:24:35Z<p>MaXeR: </p>
<hr />
<div>==Introduzione==<br />
<br />
Avete un PC collegato 24 ore su 24 a internet? Beh, potrebbe trasformarsi in uno splendido server web per tutte le vostre prove. Come si sa, al giorno d'oggi ci sono molti siti che offrono spazio web, anche con supporto php, ma volete mettere la comodita di avere questo spazio nel nostro PC? I vantaggi sono molti, uno su tutti il fatto che possiamo essere amministratori della nostra macchina, quindi personalizzare anche parecchio il nostro spazio. D'altro canto, ci può essere la difficolà iniziale di settare il tutto, ma questa guida è fatta apposta per ridurre al minimo questa fatica.<br />
<br />
==Installazione==<br />
<br />
Bene, iniziamo come prima cosa a scaricare i pacchetti che ci servono. Il primo pacchetto che ci serve è apache. Apache(www.apache.org) è un noto webserver, usato da moltissimi siti in tutto il mondo. Procediamo quindi con l'installazione, dando:<br />
<br />
<pre><br />
# apt-get install apache<br />
</pre><br />
<br />
Lasciamo il tempo ad apt di scaricare il necessario ed installarlo. Se ora andiamo in /var/www/ noteremo una pagina, index.html. E il segno che apache è stato correttamente installato ed e funzionante. Per testarlo, apriamo un browser e digitiamo localhost . Si aprira la pagina index.html (quella che abbiamo visto in /var/www/). Bene, il nostro server è pronto all'uso. Da notare che se il nostro pc è all'interno di una lan e siamo dietro un router, dovremo impostare il port forwarding, altrimenti il nostro server web non sara accessibile dall'esterno. La porta in questione è la porta 80, quella appunto del protocollo HTTP.<br />
<br />
==Il dominio==<br />
<br />
Bene, fatto questo abbiamo un nostro server accessibile dall'esterno. Ma come fanno gli utenti ad arrivare a noi? Nessun problema, esiste un servizio, Dyndns, che permette di trasformare un indirizzo IP dinamico "quasi" in uno statico. Tramite un programma da installare sul nostro server, il nostro indirizzo IP verra comunicato a dyndns.org, che provvederà ad aggiornare il nostro dominio (ad esempio bedo.homelinux.org).<br />
Procediamo quindi a registrarci su www.dyndns.org. Scegliamo il nome utente che vogliamo, sapendo che comunque il dominio che sceglieremo potrà essere diverso dal nome utente. Una volta registrati, torniamo sul server perche dobbiamo installare il programma per l'aggiornamento dell'IP.<br />
<br />
Il programma che consiglio è ddclient, che si installa mediante:<br />
<br />
<pre><br />
# apt-get install ddclient<br />
</pre><br />
<br />
In fase di installazione ci verrà chiesto il servizio, il nome utente e altre domande di facile risposta. Dobbiamo porre attenzione alla domanda dell'interfaccia che dovrà aggiornare l'IP. Se il nostro pc ha un'interfaccia direttamente collegata a internet, ad esempio la ppp0, allora alla domanda rispondiamo ppp0. Se invece, come me, siamo dietro a un router, quindi abbiamo solamente un'interfaccia di rete con un indirizzo interno, dobbiamo andare a modificare il file /etc/ddclient.conf, nel modo seguente:<br />
<br />
<pre><br />
root@crogiuolo:/home/bedo$ cat /etc/ddclient.conf<br />
# Configuration file for ddclient generated by debconf<br />
#<br />
# /etc/ddclient.conf<br />
<br />
pid=/var/run/ddclient.pid<br />
protocol=dyndns2<br />
use=web, web=dyndns<br />
server=members.dyndns.org<br />
login=tuo_nome_utente<br />
password=tua_password<br />
tuo_dominio (es. bedo.homelinux.org)<br />
root@crogiuolo:/home/bedo$<br />
</pre><br />
<br />
Poniamo particolare attenzione alla riga use=web, web=dyndns. Abbiamo detto a ddclient di usare il web, tramite dyndns, per ottenere un indirizzo ip valido.<br />
<br />
Possiamo testare il tutto dando:<br />
<br />
<pre><br />
root@crogiuolo:/home/bedo$ ddclient<br />
</pre><br />
<br />
Andiamo a controllare nel sito di dyndns. Se l'IP che ci propone nella pagina di modifica del dominio corrisponde a quello nel database di dyndns, allora siamo a posto. Un'ulteriore test può essere quello di assegnare un ip fasullo, del tipo 1.1.1.1, poi sul nostro server dare ddclient, per vedere che si aggiorna correttamente.<br />
<br />
La guida termina qua. In futuro ci sara anche una guida per configurare apache con il supporto per il php, ma gia seguendo quello che c'è scritto sopra avremo un web-server completamente funzionante :)<br />
<br />
Alla prossima.<br />
<br />
----<br />
Autore: Bedo<br />
[[Categoria:Server]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=XAMPP:_Linux,_Apache,_MySQL_e_PHP_facili&diff=15343XAMPP: Linux, Apache, MySQL e PHP facili2008-06-17T11:24:27Z<p>MaXeR: </p>
<hr />
<div>=Cos'è XAMPP=<br />
<br />
Per poter creare un webserver sulla nostra macchina linux, abbiamo bisogno innanzitutto di '''Apache''' (il web server vero e proprio); poi bisogna aggiungere altre applicazioni che ci permettano di creare siti con contenuto dinamico, magari scritti in '''PHP''' (per esempio un bel CMS open source), quindi bisogna installare PHP e impostare Apache affinché supporti questo linguaggio. Molto spesso, però, Apache e PHP da soli non bastano, perché la gestione dei contenuti del sito rischia di diventare laboriosa col passare del tempo: ed ecco che dobbiamo ricorrere ad un database, solitamente '''MySQL''' o PostgreSQL, che memorizzi i nostri dati e li restituisca quando servono ad Apache e PHP per visualizzarli nella pagina web del nostro sito. Installiamo, allora, anche un database e configuriamolo opportunamente. Magari ci farebbe comodo avere anche qualche bella libreria grafica (per esempio '''GDlib''') che ridimensioni ad hoc e visualizzi le nostre immagini: installiamo anche questa. Bene, a questo punto abbiamo un bel serverino web, abbastanza minimale, ma funzionale.... L'unico problema che potrebbe sorgere è che non siamo dei Guru (o semplicemente non abbiamo tanta voglia di perdere tempo) e quindi corriamo il rischio di non riuscire a configurare tutto bene e con la dovuta sicurezza.<br />
<br />
Per alleviare il problema, su [http://www.apachefriends.org ApacheFriends] possiamo trovare il pacchetto che fa per noi: '''XAMPP'''. <br />
<br />
''Ma cos'è XAMPP?''<br><br />
XAMPP (fino a poco tempo fa LAMPP) è un insieme di programmi utili per la creazione di un web server: integra, infatti, Apache, MySQL, PHP, '''Perl''' e tanti altri programmi che ci permettono di creare, relativamente facilmente e velocemente, un serverino web che possa contenere il nostro sito.<br><br />
''E la comodità dov'è?''<br><br />
La comodità sta nel fatto che invece di scaricare e installare singolarmente tutti i programmi di cui abbiamo bisogno, con XAMPP basta scaricare un file compresso di circa 40 MB e decomprimerlo sul nostro pc. E se per qualche malaugurato motivo, in futuro, non ci va più di avere quella cinquantina di MB del nostro hard disk occupati da XAMPP, basta semplicemente cancellare la sua directory!<br />
Oltre a questo, la comodità di XAMPP sta anche nel fatto che molte sue funzioni possono essere intuitivamente configurate via web con un browser (alcune volte, però, è necessario mettere mano al nostro editor di testi preferito e girovagare nei files di configurazione).<br />
<br />
Come già detto, il pacchetto contiene molti programmi utili, tutti più o meno configurabili facilmente. La lista dei programmi contenuti nella versione Linux di XAMPP è la seguente:<br />
<br />
{{box|versione 1.4.14|Apache 2.0.54, MySQL 4.1.12, PHP 5.0.4 & 4.3.11 & PEAR + SQLite 2.8.9/2.8.14 + multibyte (mbstring) support, Perl 5.8.6, ProFTPD 1.2.10, phpMyAdmin 2.6.2-pl1, OpenSSL 0.9.7g, GD 2.0.1, Freetype2 2.1.7, libjpeg 6b, libpng 1.2.7, gdbm 1.8.0, zlib 1.1.4, expat 1.2, Sablotron 1.0, libxml 2.4.26, Ming 0.2a, Webalizer 2.01, pdf class 009e, ncurses 5.8, mod_perl 2.0.0-RC4, FreeTDS 0.62.4, gettext 0.11.5, IMAP C-Client 2002b, OpenLDAP (client) 2.2.13, mcrypt 2.5.7, mhash 0.8.18, eAccelerator 0.9.3, cURL 7.13.1, libxslt 1.1.8, phpSQLiteAdmin 0.2, libapreq 2.04-dev}}<br />
<br />
{{Warningbox| lo scopo di questa guida è quello di spiegare come creare facilmente, tramite XAMPP, un piccolo webserver ad '''uso prettamente personale'''. Sul sito ufficiale di XAMPP è menzionato più volte il fatto che questo pacchetto è stato creato per essere utilizzato in ambienti di sviluppo, con tutti i problemi di sicurezza che ne derivano. Per rendere XAMPP più sicuro, è necessario ricorrere ad una configurazione manuale dei vari servizi (come Apache, MySQL, PHP, ecc.): questi argomenti non verranno trattati in questa guida, per cui sarebbe opportuno leggere le guide presenti nella sezione ''Networking'', in particolare la guida [[LAMP: Linux, Apache, MySQL e PHP]].}}<br />
<br />
=Installazione=<br />
Dopo aver scaricato il nostro pacchetto, non ci resta che aprire la shell e loggarci come root:<br />
<pre>$ su</pre><br />
A questo punto, installiamo il pacchetto semplicemente decomprimendolo in ''/opt'':<br />
<pre># tar xvfz xampp-linux-1.4.13.tar.gz -C /opt</pre><br />
in questo modo il pacchetto verrà installato in ''/opt/lampp''.<br />
<br />
{{Warningbox| sul sito ufficiale di XAMPP è indicato che questo appena descritto è il '''metodo più sicuro''' per installare correttamente il pacchetto. Inoltre si sconsiglia di usare programmi win32 di decompressione per estrarre i file in quanto questi potrebbero impedire la corretta installazione.}}<br />
<br />
Se abbiamo già una vecchia versione di XAMPP installata sul nostro sistema, questo comando sovrascriverà i vecchi files.<br />
<br />
Se finora non abbiamo ricevuto messaggi d'errore, vuol dire che abbiamo appena finito di installare XAMPP sulla nostra macchina.<br />
<br />
=Aggiornamento=<br />
=Avvio di XAMPP=<br />
L'avvio di XAMPP è semplice come la sua installazione. Infatti basta digitare da root shell:<br />
<pre># /opt/lampp/lampp start</pre><br />
e attendere un output simile a questo:<br />
<pre>Starting XAMPP 1.4.14...<br />
LAMPP: Starting Apache...<br />
LAMPP: Starting MySQL...<br />
LAMPP started.</pre><br />
A questo punto il server web è avviato.<br />
<br />
Fino alla versione 0.9.4 il comando ''/opt/lampp/lampp start'' poteva semplicemente avviare o fermare XAMPP. Dalla versione 0.9.5 sono stati aggiunti numerosi '''comandi di controllo'''.<br />
<TABLE WIDTH=603 BORDER=1 BORDERCOLOR="#000000" CELLPADDING=1 CELLSPACING=0><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132 BGCOLOR="#9999cc"><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Com<SPAN LANG="it-IT">ando</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452 BGCOLOR="#9999cc"><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Des<SPAN LANG="it-IT">crizione</SPAN></FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rt</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
XAMPP.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">p</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
XAMPP.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>res<SPAN LANG="it-IT">tart</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
e riavvia XAMPP.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>startapache</FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
solo Apache.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rtssl</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
Apache con il supporto SSL. Questo comando attiva il supporto<br />
SSL permanentemente, p.e. se si riavvia XAMPP dopo questo<br />
comando, Apache partir&agrave; sempre con il supporto SSL.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rtmysql</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
solo MySQL.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sta<SPAN LANG="it-IT">rtftp</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
il server ProFTPD. I parametri standard di connessione via FTP<br />
sono: user &quot;nobody&quot;, password &quot;lampp&quot;.<br />
Questo comando attiva ProFTPD permanentemente, p.e. se si<br />
riavvia XAMPP dopo questo comando, si avvier&agrave; sempre<br />
anche ProFTPD.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>stopapache</FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
Apache.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">pssl</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
Apache con il supporto SSL. Questo comando disattiva il supporto<br />
SSL permanentemente, p.e. se si riavvia XAMPP dopo questo<br />
comando, Apache partir&agrave; sempre senza il supporto SSL.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">pmysql</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
MySQL.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>sto<SPAN LANG="it-IT">pftp</SPAN></FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Ferma<br />
il server ProFTPD. Questo comando disattiva ProFTPD<br />
permanentemente, p.e. se si riavvia XAMPP dopo questo comando,<br />
ProFTPD non si avvier&agrave; pi&ugrave; automaticamente.</FONT></FONT></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=132 HEIGHT=13><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Courier New, monospace"><FONT SIZE=2>security</FONT></FONT></P><br />
</TD><br />
<TD WIDTH=452><br />
<P ALIGN=JUSTIFY STYLE="background: transparent"><FONT FACE="Verdana, sans-serif"><FONT SIZE=2>Avvia<br />
una serie di piccole verifiche di sicurezza.</FONT></FONT></P><br />
</TD><br />
</TR><br />
</TABLE><br />
<br />
<br />
Per esempio, per avviare Apache con il '''supporto SSL''', basta usare, da root shell, il seguente comando:<br />
<pre># /opt/lampp/lampp startssl</pre><br />
<br />
{{Warningbox| dalla versione 1.4.7, in XAMPP è stata affiancata, alla versione 4.3.x di PHP, la versione 5. In caso di problemi di '''compatibilità con la versione 5''', è possibile selezionare quale versione caricare all'avvio dei servers, semplicemente digitando:<br />
<pre># /opt/lampp/lampp php4</pre><br />
per la versione 4.3.x, oppure digitando:<br />
<pre># /opt/lampp/lampp php5</pre><br />
per la versione 5.<br />
Inoltre è possibile verificare quale versione di PHP sia attiva, con il seguente comando:<br />
<pre># /opt/lampp/lampp phpstatus</pre><br />
'''Appena installato, XAMPP si avvia di default con PHP 5 e Apache con supporto SSL'''}}<br />
<br />
Se abbiamo fatto tutto bene senza errori, a questo punto ci basta aprire la pagina ''http://localhost'' dal nostro browser preferito e configurare i nostri servizi da web.<br />
<br />
=Configurazione=<br />
==Primo avvio==<br />
Dopo aver installato il nostro XAMPP, non ci resta che configurarlo secondo le nostre esigenze. Per fare questo, apriamo il nostro '''browser''' preferito e inseriamo l'URL ''http://localhost''. Ci apparirà la schermata iniziale dove potremo scegliere la '''lingua del pannello di controllo''': clicchiamo, quindi, su ''Italiano''.<br />
La struttura del pannello di controllo è molto intuitiva, con i vari menù sulla sinistra e la pagina di modifica centrale.<br />
<br />
===Menù XAMPP===<br />
* Stato<br />
:Come indica il nome, qui potremo vedere lo '''stato di attivazione''' dei nostri servizi.<br />
* Sicurezza<br />
:Qui è possibile monitorare a grandi linee lo '''stato di sicurezza''' di XAMPP.<br><br />
:Al '''primo avvio di XAMPP''' vedremo che i nostri servizi sono configurati in maniera alquanto “aperta” (tutte le voci dovrebbero risultare ''insicure'', questo sempre dovuto al fatto che XAMPP è stato pensato per un ambiente di sviluppo).<br><br />
:A questo punto, come la stessa pagina ci suggerisce, eseguiamo un programma che effettua una serie di piccole verifiche di sicurezza. Digitiamo da root shell:<br />
<pre># /opt/lampp/lampp security</pre><br />
:l'output è il seguente:<br />
<pre>XAMPP: Quick security check...<br />
XAMPP: Your XAMPP pages are NOT secured by a password.<br />
XAMPP: Do you want to set a password? [yes]</pre><br />
:digitiamo ''yes'' e, quando richiesto, inseriamo la password (2 volte):<br />
<pre>XAMPP: Password protection active. Please use 'lampp' as user name!</pre><br />
:Da adesso, per poter accedere via web alla pagina di configurazione di XAMPP dovremo autenticarci con l'username “lampp” e la nostra password.<br />
<pre>XAMPP: MySQL is accessable via network.<br />
XAMPP: Normally that's not raccomended. Do you want to turn it off? [yes]</pre><br />
:digitiamo ''yes'' per impedire che MySQL ascolti sulla nostra connessione internet.<br><br />
:Verrà riavviato MySQL.<br />
<pre>XAMPP: The MySQL/phpMyAdmin user pma has no password set!!!<br />
XAMPP: Do you want to set a password? [yes]</pre><br />
:Qui XAMPP ci chiede una password per l'utente generico "pma" (con limitato accesso al database) per MySQL e phpMyAdmin: digitiamo ''yes'' e inseriamo la nostra password.<br />
<pre>XAMPP: MySQL has no root password set!!!<br />
XAMPP: Do you want to set password? [yes]</pre><br />
:Ora dobbiamo inserire la password di root per MySQL (che naturalmente è la stessa di phpMyAdmin).<br />
<pre>XAMPP: The FTP password is still set to 'lampp'.<br />
XAMPP: Do you want to change the password? [yes]</pre><br />
:Adesso impostiamo la password per l'accesso FTP al nostro server.<br />
:Verrà riavviato il demone ProFTPD.<br />
<br />
:A questo punto possiamo verificare se la sicurezza del nostro XAMPP è aumentata. Torniamo con il browser su ''http://localhost'': se tutto è stato fatto regolarmente, ci verranno chiesti username e password per accedere al pannello di controllo di XAMPP (ricordiamoci che l'username è “lampp”).<br><br />
:Logghiamoci nel pannello di controllo e torniamo a dove eravamo rimasti, cioè la finestra di ''Sicurezza'': se tutte le voci saranno “sicure”, allora vuol dire che abbiamo reso più sicuro il nostro XAMPP.<br />
<br />
{{ Warningbox | ovviamente questa procedura serve solo a dare un '''livello minimo di sicurezza''' a XAMPP.}}<br />
<br />
===Menù Demo===<br />
Nella sezione ''Demo'', è possibile trovare una serie di script che dimostrano il funzionamento di XAMPP: tralasciando le altre voci, il modo più semplice e intuitivo per verificare se sono correttamente configurati i moduli per la '''gestione delle immagini''' del nostro futuro sito è cliccare su ''Grafica Istantanea'' (nel campo di testo, digitiamo quello che vogliamo, poi clicchiamo su OK: il risultato dovrebbe essere un'immagine con la nostra scritta) e su Grafica Flash (stesso procedimento di prima, ma in questo caso verifichiamo il funzionamento di '''MING''', che serve per produrre documenti flash).<br><br />
<br />
Cliccando sulla voce ''phpinfo()'' possiamo leggere le informazioni circa lo stato del nostro parser PHP (per esempio per verificare se è in esecuzione PHP5 o PHP4). Potremo vedere anche le informazioni riguardanti gli altri componenti del nostro XAMPP, come p.e. Apache2, MySQL, ecc.<br />
<br />
===Menù Strumenti===<br />
Cliccando su ''phpMyAdmin'', abbiamo accesso all'interfaccia web che ci permette di '''gestire i nostri database''' MySQL.<br><br />
In questa sede è importante sapere che per accedere a phpMyAdmin possiamo usare l'utente “root” (con la password che abbiamo impostato in precedenza) o l'utente generico “pma” (anche questo ha associata la password che abbiamo impostato in precedenza): quest'ultimo ha limitazioni che gli permettono esclusivamente di leggere e usare il contenuto delle tabelle dei database, ma non di crearle né modificarle.<br />
<br />
Cliccando su ''Webalizer'' possiamo accedere ad un tool che ci permette di monitorare vari parametri del nostro webserver.<br />
<br />
==Informazioni utili==<br />
===Dove sono i files importanti di XAMPP?===<br />
<TABLE WIDTH=600 BORDER=1 CELLPADDING=1 CELLSPACING=0><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#9999cc"><br />
<P>File/Directory</P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#9999cc"><br />
<P>Des<SPAN LANG="it-IT">crizione</SPAN></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/bin/</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Qui ci sono i com<SPAN LANG="it-IT">andi principali di XAMPP.<br />
Per esempio, da qui si pu&ograve; lanciare <tt>mysql</tt> o <tt>apache2</tt>.</SPAN></P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/htdocs/</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>La DocumentRoot di Apache.</P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/etc/httpd.conf</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Il file di configurazione di Apache.</P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/etc/my.cnf</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Il file di configurazione di MySQL.</P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/etc/php.ini</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Il file di configurazione di PHP.</P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/etc/proftpd.conf</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Il file di configurazione di ProFTPD. (dalla ver<SPAN LANG="it-IT">sione</SPAN><br />
0.9.5)</P><br />
</TD><br />
</TR><br />
<TR VALIGN=TOP><br />
<TD WIDTH=244 BGCOLOR="#ffffff"><br />
<P><TT>/opt/lampp/phpmyadmin/config.inc.php</TT></P><br />
</TD><br />
<TD WIDTH=337 BGCOLOR="#ffffff"><br />
<P>Il file di configurazione di phpMyAdmin.</P><br />
</TD><br />
</TR><br />
</TABLE><br />
<br />
<br />
=Disinstallazione=<br />
Disinstallare XAMPP è semplice come installarlo. L'unica accortezza da prendere è quella di fermarlo prima:<br />
<pre># /opt/lampp/lampp stop</pre><br />
e attendere un output simile a questo:<br />
<pre>Stopping LAMPP 1.4.14<br />
LAMPP: Stopping Apache...<br />
LAMPP: Stopping MySQL...<br />
LAMPP stopped.</pre><br />
A questo punto non ci resta che rimuovere la directory di XAMPP:<br />
<pre># rm -rf /opt/lampp</pre><br />
<br />
<br />
----<br />
Autore: [[Utente:soter|soter]] 12:53, Giu 23, 2005 (EDT)<br />
[[Categoria:Networking]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Root&diff=15342Root2008-06-17T11:23:28Z<p>MaXeR: Nuova pagina: Il termine '''root''' in ambito Unix ha prevalentemente due significati: Il primo è relativo ad un utente particolare, chiamato '''root''' che è l'amministratore della macchina. In ...</p>
<hr />
<div>Il termine '''root''' in ambito Unix ha prevalentemente due significati:<br />
<br />
Il primo è relativo ad un utente particolare, chiamato '''root''' che è l'amministratore della macchina. In qualità di amministratore, infatti, ha [[uid]] 0 e possiede i permessi per effettuare qualsiasi operazione (dalla semplice cancellazione di un file al riavvio di un servizio).<br />
<br />
Il secondo significato, invece, è relativo al [[filesystem]] e rappresenta la directory radice <tt>/</tt>, all'interno della quale sono contenute tutte le sottodirectory del filesystem.<br />
<br />
<br />
[[Categoria:Glossario]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Fail2ban&diff=15341Fail2ban2008-06-17T11:21:01Z<p>MaXeR: spostato nella sezione più appropriata</p>
<hr />
<div>'''Fail2ban''' ([http://www.fail2ban.org Sito ufficiale]) è un software che è nato per permettere di bloccare gli host che stanno tentando di effettuare un attacco di [[brute force]] via [[ssh]]. <br />
<br />
Questo genere di attacco si basa su continui tentativi di accesso, provando o l'username [[root]] con password probabili (come ''password'', ''root'', ''toor'' e così via..) oppure tramite coppie di username/password conosciute (create, ad esempio, da [[malware]] o da [[rootkit]]...).<br />
<br />
Con le ultime versioni, però, si è ampliato ed è in grado di coprire svariati servizi (che andranno, però, configurati manualmente), come ad esempio apache, vsftpd, postfix, etc...<br />
<br />
== Il funzionamento ==<br />
Il funzionamento è semplice: il software si occupa di effettuare il parsing di alcuni file di log (nel caso di ssh, <tt>/var/log/auth.log</tt>) che contengono le informazioni relative agli accessi falliti. Se vengono contati un numero di tentativi maggiori ad una soglia, l'indirizzo IP viene bloccato per un tempo impostato e non potrà più accedere al servizio in ascolto su quella porta (ma potrà ancora accedere a quelli sulle altre, cosa molto importante nel caso di indirizzi IP condivisi, come avviene per Fastweb o all'interno delle reti aziendali).<br />
<br />
<br />
<br />
== Installazione ==<br />
L'installazione è semplice: <br />
<pre><br />
# apt-get install fail2ban<br />
</pre><br />
<br />
== Configurazione ==<br />
Il file di configurazione è <tt>/etc/fail2ban/jail.local</tt> e contiene i parametri necessari al funzionamento del software<br />
<br />
Il file di configurazione è diviso per sezioni: Ogni sezione inizia ha una struttura simile a:<br />
<pre><br />
[nomesezione]<br />
parametro = valore<br />
parametro2 = valore<br />
parametro3 = valore<br />
</pre><br />
<br />
Ogni sezione, quindi, identificherà un controllo da eseguire. Fa eccezione la prima: <tt>[DEFAULT]</tt>, in quanto contiene i valori di default che verranno usati nelle sezioni successive; ovviamente potranno essere ridefiniti per adattarli ai propri gusti.<br />
<br />
== I Parametri ==<br />
I parametri più importanti sono:<br />
<br />
; <tt>ignoreip = 127.0.0.1</tt> : permette di indicare un elenco di ip su cui non verrà fatto il controllo. Utile per non ''tagliare fuori'' accidentalmente l'ufficio<br />
; <tt>bantime = 600</tt> : il tempo, in secondi, per cui un host verrà bannato<br />
; <tt>maxretry = 3</tt> : il numero massimo di tentativi dopo cui effettuare il ban dell'host<br />
; <tt>destemail = root@localhost</tt> : l'indirizzo e-mail a cui inviare la mail di notifica<br />
; <tt>action = iptables[name=%(__name__)s, port=%(port)s]</tt> : l'azione da prendere. Quella di default blocca semplicemente l'accesso alla porta del servizio all'ip che ha sforato il numero di tentativi massimo.<br />
; <tt>enabled = true</tt> : abilita i controlli all'interno della sezione<br />
; <tt>port = ssh</tt> : indica la porta da bloccare<br />
; <tt>filter = sshd</tt> : indica il filtro da utilizzare (contenuto all'interno della directory <tt>/etc/fail2ban/filter.d</tt> )<br />
; <tt>logpath = /var/log/auth.log</tt> : il file contenente il log da controllare<br />
<br />
<br />
== Esempi di Azioni ==<br />
=== Filtraggio semplice ===<br />
Questa azione applica semplicemente un filtro in modo che l'host che ha effettuato un numero di tentativi maggiori di quello definito viene fermato.<br />
<pre>action = iptables[name=%(__name__)s, port=%(port)s]<br />
</pre><br />
<br />
=== Filtraggio con Notifica ===<br />
Questa regola amplia quella precedente, in quanto manda una mail contenente l'ip ed il [[whois]] dell'ip dell'host che ha fatto scattare l'allarme<br />
<pre><br />
action = iptables[name=%(__name__)s, port=%(port)s]<br />
mail-whois[name=%(__name__)s, dest=%(destemail)s]<br />
</pre><br />
<br />
=== Filtraggio con Notifica Avanzata ===<br />
Come prima, ma in aggiunta sono presenti anche le linee del file di log che hanno fatto scattare l'allarme.<br />
<pre>action = iptables[name=%(__name__)s, port=%(port)s]<br />
mail-whois-lines[name=%(__name__)s, dest=%(destemail)s, logpath=%(logpath)s]<br />
</pre><br />
<br />
= Conclusioni =<br />
Una volta installato, il software è automaticamente attivo, e gira in [[background]] come servizio. In caso di modifica del file di configurazione, è necessario effettuare un restart del servizio tramite il comando<br />
<pre><br />
# /etc/init.d/fail2ban restart<br />
</pre><br />
<br />
[[Categoria:Sicurezza]]<br />
[[Categoria:Firewalling]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LKN:_Installare_ed_Avviare_con_un_Kernel&diff=15339LKN: Installare ed Avviare con un Kernel2008-06-17T10:51:27Z<p>MaXeR: </p>
<hr />
<div>''Torna all'indice: [[Linux Kernel in a Nutshell]]''<br />
__TOC__<br />
<br />
I precedenti capitoli hanno mostrato come scaricare e compilare il kernel. Ora che si ha un file eseguibile -- con tutti i moduli compilati -- è ora di installare il kernel e provare a fare il boot. In questo capitolo, a differenza dei precedenti, tutti i comandi necessitano di essere eseguiti come utente root. Questo può essere fatto anteponendo ad ogni comando ''sudo'', usando il comando ''su'' per diventare root, oppure accedendo come ''root''.<br />
<br />
Per vedere se si ha ''sudo'' installato e gli appropriati diritti di accesso, lanciate:<br />
<br />
<pre><br />
$ sudo ls ~/linux/linux-2.6.17.11/Makefile<br />
Password:<br />
Makefile<br />
</pre><br />
<br />
Inserite la vostra password personale al prompt di password, o la password dell'amministratore di sistema (root). La scelta dipende da come il comando di ''sudo'' è stato impostato. Se non ci sono problemi, e si vede una riga che contiene:<br />
<br />
<pre> Makefile </pre><br />
<br />
allora potete passare alla prossima sezione.<br />
<br />
Se ''sudo'' non è installato o non si hanno i diritti appropriati, si provi ad usare il comando ''su'':<br />
<br />
<pre><br />
$ su<br />
Password:<br />
# exit<br />
exit<br />
$<br />
</pre><br />
<br />
Al prompt della password, inserite la password dell'amministratore di sistema (''root''). Quando ''su'' accetta con successo la password, si è trasferiti ad eseguire ogni cosa con i pieni privilegi di root. State molto attenti mentre siete ''root'', e fate solo il minimo necessario; dopodiché uscite dal programma per tornare con il vostro utente normale.<br />
<br />
<br />
== Usare uno script di installazione di una distribuzione ==<br />
<br />
<br />
Quasi tutte le distribuzioni hanno uno script chiamato ''installkernel'' che può essere usato dal sistema di creazione del kernel per installarne uno pronto automaticamente nel giusto posto e per modificare il bootloader così che nulla di più debba essere fatto dallo sviluppatore *.<br />
<br />
<pre><br />
Le distribuzioni offrono installkernel solitamente in un pacchetto chiamato mkinitrd, provate ad installare <br />
questo pacchetto se non trovate lo script sulla vostra macchina.<br />
</pre><br />
<br />
Se avete compilato qualsiasi modulo e volete usare questo metodo per installare un kernel, inserite:<br />
<br />
'''# make modules_install'''<br />
<br />
Questo installerà tutti i moduli che avete compilato e li metterà nelle appropriate locazioni del filesystem per farli trovare correttamente dal nuovo kernel. I moduli sono posti in ''/lib/modules/kernel_version'', dove per ''kernel_version'' si intende la versione del nuovo kernel che state preparando.<br />
<br />
Dopo che i moduli sono stati installati con successo, l'immagine principale del kernel deve essere installata:<br />
<br />
'''# make install'''<br />
<br />
Questo causerà:<br />
<br />
1. Il sistema di creazione del kernel verificherà che il kernel sia stato correttamente costruito.<br />
<br />
2. Il sistema di creazione copierà la parte statica nella directory ''/boot'' e rinominerà l'eseguibile sulla base della versione del kernel.<br />
<br />
3. Qualsiasi immagine di ramdisk iniziale necessaria verrà creata automaticamente, usando i moduli che sono appena stati installati durante la fase di ''modules_install''.<br />
<br />
4. Al programma di bootloader verrà correttamente notificato che un nuovo kernel è presente, e verrà aggiunto nel giusto menu così che l'utente possa selezionarlo la prossima volta che la macchina verrà avviata.<br />
<br />
5. Dopo questo ha finito, il kernel è installato con successo, si può tranquillamente riavviare e provare la nuova immagine di kernel. Notare che questa installazione non sovrascrive nessuna vecchia immagine dei kernel, così se c'è un problema con la vostra nuova immagine del kernel, il vecchio kernel potrà essere selezionato al boot time.<br />
<br />
<pre><br />
* Eccezioni da riportare a questa regola sono Gentoo e altre distribuzioni tipo "from scratch", le quali si<br />
aspettano che l'utente sappia come installare i kernel da solo. Questi tipi di distribuzioni includono la <br />
documentazione su come installare un nuovo kernel, si consulti quest'ultima per l'esatto metodo richiesto.<br />
</pre><br />
<br />
== Installazione manuale ==<br />
<br />
<br />
Se la distribuzione non è provvista del comando ''installkernel'', o si desidera semplicemente fare il lavoro a mano per capire i passi che servono, eccoli qua:<br />
<br />
I moduli devono essere installati:<br />
<br />
<pre> # make modules_install </pre><br />
<br />
L'immagine statica del kernel deve essere copiata nella directory /boot. Per un kernel basato su piattaforma i386, fare:<br />
<br />
<pre> <br />
# make kernelversion <br />
2.6.17.11<br />
</pre><br />
<br />
Notare che la versione del kernel probabilmente sarà differente da quella del vostro. Usate questo valore al posto del testo KERNEL_VERSION nei seguenti passaggi:<br />
<br />
<pre><br />
# cp arch/i386/boot/bzImage /boot/bzImage-KERNEL_VERSION<br />
# cp System.map /boot/System.map-KERNEL_VERSION<br />
</pre><br />
<br />
Modificate il bootloader in modo che conosca il nuovo kernel. Questo implica modificare il file di configurazione per il bootloader che si usa, è spiegato più avanti in "Modificare il bootloader per il nuovo kernel" in GRUB e LILO.<br />
<br />
Se il processo di avvio non funziona, solitamente è perché una immagine iniziale di ramdisk (initial ramdisk) è necessaria. Per crearla correttamente, si usino i passi all'inizio di questo capitolo per installare un kernel automaticamente, poich&eacute; lo script di installazione della distribuzione sa come creare adeguatamente il ramdisk usando gli script e gli strumenti necessari. Dato che ogni distribuzione fa questo in maniera differente, è oltre lo scopo di questo libro ricoprire tutti i differenti metodi di costruzione dell'immagine di ramdisk.<br />
<br />
Qui c'è uno script comodo che può essere usato per installare un kernel automaticamente invece di dover digitare tutti i precedenti comandi ogni volta:<br />
<br />
<pre><br />
#!/bin/sh<br />
#<br />
# installs a kernel<br />
#<br />
make modules_install<br />
<br />
# find out what kernel version this is<br />
for TAG in VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION ; do<br />
eval `sed -ne "/^$TAG/s/ //gp" Makefile`<br />
done<br />
SRC_RELEASE=$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION<br />
<br />
# figure out the architecture<br />
ARCH=`grep "CONFIG_ARCH " include/linux/autoconf.h | cut -f 2 -d "\""`<br />
<br />
# copy the kernel image<br />
cp arch/$ARCH/boot/bzImage /boot/bzImage-"$SRC_RELEASE"<br />
<br />
# copy the System.map file<br />
cp System.map /boot/System.map-"$SRC_RELEASE"<br />
<br />
echo "Installed $SRC_RELEASE for $ARCH"<br />
</pre><br />
<br />
<br />
== Modificare il bootloader per il nuovo kernel ==<br />
<br />
<br />
Esistono due bootloader comuni per i kernel Linux: GRUB e LILO. GRUB è quello maggiormente usato nelle distribuzioni moderne, e fa' alcune cose un po' più facilmente di LILO, ma LILO é tuttora anch'esso utilizzato. Li vedremo entrambi in questa sezione.<br />
<br />
Per determinare quale bootloader il vostro sistema usa, guardate nella directory ''/boot/''. Se esiste una sottodirectory ''grub'':<br />
<br />
<pre><br />
$ ls -F /boot | grep grub<br />
grub/<br />
</pre><br />
<br />
allora si sta utilizzando GRUB come programma per fare il boot. Se questa directory non è presente, si guardi se è presente il file ''/etc/lilo.conf'':<br />
<br />
<pre><br />
$ ls /etc/lilo.conf<br />
/etc/lilo.conf<br />
</pre><br />
<br />
se è presente, state usando LILO come programma per fare il boot.<br />
I passi che implicano l'aggiunta del nuovo kernel a ognuno di questi programmi sono differenti, per cui si segua solo la sezione che corrisponde al programma che si sta usando.<br />
<br />
==='''GRUB'''===<br />
<br />
Per fare in modo che GRUB sappia che un nuovo kernel è presente, tutto ciò che dovete fare è modificare il file ''/boot/grub/menu/lst''. Per i dettagli completi della struttura di questo file, e tutte le differenti opzioni disponibili, consultate le pagine di info di GRUB:<br />
<br />
<br />
'''$ info grub'''<br />
<br />
<br />
Il metodo più veloce per aggiungere una nuova voce kernel a ''/boot/grub/menu.lst'' è quello di copiare una voce già esistente. Per esempio, considerate il seguente ''menu.lst'' da un sistema Gentoo:<br />
<br />
<pre><br />
timeout 300<br />
default 0<br />
<br />
splashimage=(hd0,0)/grub/splash.xpm.gz<br />
<br />
title 2.6.16.11<br />
root (hd0,0)<br />
kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305<br />
<br />
title 2.6.16<br />
root (hd0,0)<br />
kernel /bzImage-2.6.16 root=/dev/sda2 vga=0x0305<br />
</pre><br />
<br />
La linea che comincia con la parola title definisce una nuova voce di kernel, in questo modo questo file contiene due voci. Copiate semplicemente un blocco di linee che cominciano con la linea title, come:<br />
<br />
<pre><br />
title 2.6.16.11<br />
root (hd0,0)<br />
kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305<br />
</pre><br />
<br />
Dopodiché aggiungete il blocco alla fine del file, e modificate il numero di versione con la nuova versione del nuovo kernel che si è appena installato. Il titolo non ha alcuna importanza, purché unico, ma visualizzato nel menu di boot, per cui si dovrebbe dargli qualcosa che abbia un significato. Nel nostro esempio, abbiamo installato il kernel 2.6.17.11, per tanto la copia finale del file assomiglierà a:<br />
<br />
<pre><br />
timeout 300<br />
default 0<br />
<br />
splashimage=(hd0,0)/grub/splash.xpm.gz<br />
<br />
title 2.6.16.11<br />
root (hd0,0)<br />
kernel /bzImage-2.6.16.11 root=/dev/sda2 vga=0x0305<br />
<br />
title 2.6.16<br />
root (hd0,0)<br />
kernel /bzImage-2.6.16 root=/dev/sda2 vga=0x0305<br />
<br />
title 2.6.17.11<br />
root (hd0,0)<br />
kernel /bzImage-2.6.17.11 root=/dev/sda2 vga=0x0305<br />
</pre><br />
<br />
Dopo che si è salvato il file, riavviate il sistema e assicuratevi che il titolo della nuova immagine del kernel sia presente nel menu di boot. Usate la freccia verso il basso per evidenziare la versione del nuovo kernel, e premete enter per avviare la nuova immagine.<br />
<br />
==='''LILO'''===<br />
<br />
Per fare in modo che LILO sappia che un nuovo kernel è presente, dovete modificare il file di configurazione ''/etc/lilo.conf'' ed eseguire il comando ''lilo'' per applicare le modifiche fatte al file di configurazione. Per i dettagli completi sulla struttura del file di configurazione di LILO, consultate la manpage di LILO:<br />
<br />
'''$ man lilo'''<br />
<br />
Il modo pi&ugrave; facile per aggiungere una nuova voce di kernel nel file ''/etc/lilo.conf'' è copiare una voce esistente. Per esempio, considerate il seguente file di configurazione di LILO di un sistema Gentoo:<br />
<br />
<pre><br />
boot=/dev/hda<br />
prompt<br />
timeout=50<br />
default=2.6.12<br />
<br />
image=/boot/bzImage-2.6.15<br />
label=2.6.15<br />
read-only<br />
root=/dev/hda2<br />
<br />
image=/boot/bzImage-2.6.12<br />
label=2.6.12<br />
read-only<br />
root=/dev/hda2<br />
</pre><br />
<br />
La linea che comincia con la parola image= definisce una nuova voce kernel, quindi questo file contiene due voci. Copiate semplicemente un blocco di linee che cominciano con image=, come:<br />
<br />
<pre><br />
image=/boot/bzImage-2.6.15<br />
label=2.6.15<br />
read-only<br />
root=/dev/hda2<br />
</pre><br />
<br />
Aggiungete dopo il blocco alla fine del file, e modificate il numero di versione per contenere quella del nuovo kernel appena installato. La label non ha alcuna importanza, purché unica, ma è visualizzata nel menu di boot, per cui dovreste dargli qualcosa di sensato. Nel nostro esempio, abbiamo installato il kernel 2.6.17.11, per cui la copia finale del file sarà:<br />
<br />
<pre><br />
boot=/dev/hda<br />
prompt<br />
timeout=50<br />
default=2.6.12<br />
<br />
image=/boot/bzImage-2.6.15<br />
label=2.6.15<br />
read-only<br />
root=/dev/hda2<br />
<br />
image=/boot/bzImage-2.6.12<br />
label=2.6.12<br />
read-only<br />
root=/dev/hda2<br />
<br />
image=/boot/bzImage-2.6.17<br />
label=2.6.17<br />
read-only<br />
root=/dev/hda2<br />
</pre><br />
<br />
Dopo aver salvato il file, lanciate il programma ''/sbin/lilo'' per salvare i cambiamenti del file di configurazione nella sezione di boot del disco:<br />
<br />
<pre> # /sbin/lilo </pre><br />
<br />
Ora il sistema può essere riavviato in sicurezza. La scelta del nuovo kernel si può vedere tra le scelte disponibili al momento del boot. Usate la freccia verso il basso per evidenziare la versione del nuovo kernel, premete Invio per avviare la nuova immagine.<br />
<br />
<br />
----<br />
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].<br />
----<br />
<br />
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch05.pdf ''Capitolo originale'']<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LKN:_Introduzione&diff=15338LKN: Introduzione2008-06-17T10:51:19Z<p>MaXeR: </p>
<hr />
<div>''Torna all'indice: [[Linux Kernel in a Nutshell]]''<br />
<br />
Nonostante la sua grande base di codice (oltre sette milioni di linee di codice), il kernel Linux è il sistema operativo più flessibile che sia mai stato creato.<br />
Può essere messo a punto per una grande varietà di sistemi differenti e funzionare su qualunque cosa, da un modello di elicottero radio-comandato, a un telefono cellulare, alla maggior parte dei più grandi supercalcolatori nel mondo.<br />
Adattando il kernel a un ambiente specifico, è possibile creare qualcosa che sia contemporaneamente più piccolo e più veloce del kernel fornito dalla gran parte delle distribuzioni di Linux. Questo libro entrerà nel come costruire e installare un kernel personalizzato, e fornirà qualche spunto su come abilitare opzioni specifiche che probabilmente vorrete usare per specifiche situazioni.<br />
<br />
Nessuna distribuzione di Linux fornisce esattamente il kernel che gran parte dei suoi utenti vuole. Le distribuzioni moderne sono diventate molto accomodanti, compilando il supporto per ogni periferica conosciuta, per l'audio, e anche per il risparmio energetico.<br />
Ma probabilmente ognuno di voi ha necessità differenti dalla maggioranza degli utenti (e ogni distribuzione deve cercare ad andare incontro alle necessità della maggioranza).<br />
Voi potreste semplicemente avere un hardware differente.<br />
E quando esce un nuovo kernel potreste voler iniziare ad usarlo senza aspettare che una distribuzione venga costruita attorno ad esso.<br />
<br />
Per un certo numero di ragioni, durante il vostro cammino con Linux, qualche volta potreste voler compilare un kernel, o mettere a punto i parametri di quello che state utilizzando.<br />
Questo libro vi fornisce le informazioni necessarie per comprendere il kernel dal punto di vista dell'utente, e per effettuare i cambiamenti più comuni.<br />
<br />
Ci sono anche delle buone ragioni per rimuovere alcune caratteristiche da un kernel, in particolare se lo fate funzionare in un sistema embedded o in uno con uno ''small form factor'' (piccolo fattore di forma, cioè dalle risorse limitate, N.d.T.)<br />
<br />
Nel mettere a punto, &egrave; utile comprendere le motivazioni intime del comportamento del kernel.<br />
Queste sono al di là dello scopo di questo libro, eccetto brevi sommari che appaiono con certe opzioni.<br />
L'appendice B include riferimenti ad altri libri e a materiale che può fornirvi maggiori basi.<br />
<br />
<br />
'''Usare questo libro'''<br />
<br />
<br />
[[Image:Cesoia.png|left]] Non configurate n&eacute; compilate il vostro kernel con i permessi di superutente!<br />
<br />
<br />
Questo avvertimento è la cosa più importante da ricordare percorrendo i passaggi di questo libro. Ogni cosa in questo libro - scaricare il codice sorgente del kernel, decomprimerlo, configurare il kernel e compilarlo - dovrebbe essere fatta come utente comune del sistema.<br />
Solo i due o tre comandi necessari per installare un nuovo kernel dovrebbero essere impartiti come superutente (''root'').<br />
<br />
Ci sono stati bug nel processo di costruzione del kernel, nel passato, che causavano la cancellazione di qualche file speciale nella directory ''/dev'' se l'utente aveva i permessi da superutente durante la compilazione del kernel Linux. Ci sono anche problemi che possono facilmente insorgere decomprimendo il kernel Linux con diritti di superutente, poiché qualche file nel pacchetto dei sorgenti del kernel non finirà per avere i permessi adeguati e causerà errori di compilazione più avanti.<br />
<br />
Il codice sorgente del kernel, inoltre, non dovrebbe essere mai posto nella directory ''/usr/src/linux/'', poiché quella è la posizione del kernel con cui sono state compilate le librerie di sistema, non del vostro kernel personalizzato. Non effettuate neppure alcun tipo di sviluppo del kernel nella directory ''/usr/src/'', ma fatelo solo nella vostra directory da utente locale, dove non può accadere nulla di male al sistema.<br />
<br />
<br />
----<br />
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].<br />
----<br />
<br />
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch01.pdf ''Capitolo originale'']<br />
<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LKN:_Procurarsi_i_Sorgenti_del_Kernel&diff=15337LKN: Procurarsi i Sorgenti del Kernel2008-06-17T10:51:09Z<p>MaXeR: </p>
<hr />
<div>''Torna all'indice: [[Linux Kernel in a Nutshell]]''<br />
<br />
Quando si compila un kernel personalizzato ci si vorrebbe servire dell'ultima versione stabile. Molte distribuzioni forniscono i loro pacchetti dei sorgenti del kernel, ma raramente questi sono i più recenti e aggiornati. I pacchetti ufficiali delle distribuzioni hanno il vantaggio di essere compatibili con il compilatore e gli altri strumenti forniti dalla distribuzione stessa (Il capitolo 2 mette in evidenza l'importanza di questa compatibilità), ma non è detto che permettano di avere le funzionalità o le prestazioni di cui si ha bisogno. Preparando l'ambiente con il kernel più recente e le ultime versioni del compilatore e degli altri programmi sarà possibile ottenere esattamente ciò che si vuole. Questo capitolo spiega quali sorgenti del kernel scaricare e dove trovarli.<br />
<br />
=='''Quale ramo usare'''==<br />
[[Immagine:kernel_releases.png|300px|thumb|Figura 3-1: Ciclo di sviluppo e rilascio del kernel]]<br />
<br />
In passato il kernel Linux era diviso in 2 rami: quello di "sviluppo" e quello "stabile". Per distinguerli, il ramo di sviluppo era contrassegnato da un valore dispari nel secondo numero di release, quello stabile da un valore pari. Ad esempio, la 2.5.25 era una versione di sviluppo, mentre la 2.4.25 era la stabile.<br />
<br />
Quando fu creata la serie 2.6, gli sviluppatori decisero di abbandonare questo metodo basato su due rami separati e annunciarono che tutti i rilasci della serie 2.6 del kernel sarebbero stati considerati "stabili", indipendentemente da quanto veloce fosse stato il processo di sviluppo. I pochi mesi a disposizione tra le versioni maggiori della serie 2.6 avrebbero lasciato agli sviluppatori il tempo necessario per aggiungere nuove funzioni e renderle stabili per il rilascio successivo. Assieme a questo fu creato un ramo "-stabile" del kernel per permettere eventuali correzioni dei bug e aggiornamenti di sicurezza per l'ultima versione, prima che quella nuova venga rilasciata.<br />
Alcuni esempi, illustrati in [[:Immagine:kernel_releases.png|figura 3-1]], aiuteranno a chiarire tutto questo: il team del kernel rilascia la versione stabile 2.6.17; poi gli sviluppatori iniziano a lavorare su nuove caratteristiche e rilasciano la versione -rc del kernel in via di sviluppo, in modo che chi vuole possa aiutare nella fase di test e di debug dei cambiamenti. Quando tutti concordano sul fatto che la versione in via di sviluppo sia abbastanza stabile, questa viene rilasciata come 2.6.18. L'intero ciclo impiega solitamente due o tre mesi, dipendendo da svariati fattori.<br />
<br />
Durante lo sviluppo di nuove funzioni vengono rilasciate la 2.6.17.2, la 2.6.17.3 e altre release stabili del kernel, contenenti correzioni di bug e aggiornamenti di sicurezza.<br />
&Egrave; consigliabile che chi intenda usare l'ultima versione del kernel per lavoro si serva di quella stabile. Chi invece intende aiutare gli sviluppatori, può testare le caratteristiche della generazione successiva del kernel e darne una valutazione. Per quanto concerne gli scopi di questo capitolo, si suppone che venga utilizzata la versione stabile.<br />
<br />
=='''Dove trovare i sorgenti del kernel'''==<br />
Tutti i sorgenti del kernel Linux si possono trovare in ognuno dei siti kernel.org, una rete di mirror che permette a chiunque di trovare il server locale più vicino. Questo fa sì che i server principali possano rispondere più prontamente ai mirror e che gli utenti riescano a scaricare i file il più velocemente possibile.<br />
<br />
La pagina principale di http://www.kernel.org riporta tutte le versioni correnti del kernel per ogni differente ramo, come mostrato in [[:Immagine:kernel.org.png|figura 3-2]].<br />
<br />
[[Immagine:kernel.org.png|center|500px|thumb|Figura 3-2: Il sito ufficiale Kernel.org.]]<br />
<br />
Per scaricare l'ultima versione stabile del kernel è sufficiente fare clic sulla lettera F nella riga corrispondente: così facendo si scaricherà l'intero albero dei sorgenti. Altrimenti è possibile accedere alla sottocartella relativa ad ogni versione della serie 2.6 tramite la pagina http://www.kernel.org/pub/linux/kernel/v2.6/, mostrata in [[:Immagine:Kernel.org.v2.6.png|figura 3-3]].<br />
<br />
[[Immagine:Kernel.org.v2.6.png|center|500px|thumb|Figura 3-3: Directory dei sorgenti per il kernel 2.6]]<br />
<br />
&Egrave; anche possibile scaricare i sorgenti del kernel tramite riga di comando, usando il programma <tt>wget</tt> o <tt>curl</tt>, normalmente presenti in ogni distribuzione Linux.<br />
<br />
Per scaricare la versione 2.6.17.8 del kernel con <tt>wget</tt> il comando è:<br />
<br />
<pre>$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.8.tar.gz<br />
<br />
<br />
-> 'linux-2.6.17.8.tar.gz<br />
<br />
Resolving www.kernel.org... 204.152.191.5, 204.152.191.37<br />
<br />
Connecting to www.kernel.org|204.152.191.5|:80... connected.<br />
<br />
HTTP request sent, awaiting response... 200 OK<br />
<br />
Lenght: 51,707,742 (49M) [application/x-gzip]<br />
<br />
100%[-------------------------------------->] 51,707,742 35.25k/s<br />
<br />
ETA 00:00<br />
<br />
18:02:48 (47.12 kB/s) - 'linux-2.6.17.8.tar.gz' saved [51707742/51707742]</pre><br />
<br />
Per scaricarla con <tt>curl</tt>:<br />
<br />
<pre>$ curl http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.8.tar.gz \ -o linux-2.6.17.8.tar.gz</pre><br />
<br />
Il modo più semplice e veloce per scoprire quale sia l'ultima versione del kernel è usare le informazioni disponibili alla pagina http://www.kernel.org/kdist/finger_banner, come mostrato in [[:Immagine:Kernel.org.v2.6.png|figura 3-4]].<br />
<br />
[[Immagine:Kernel.org_finger_banner.png|center|500px|thumb|Figura 3-4: Ultima versione del kernel.]]<br />
<br />
=='''Cosa fare con i sorgenti'''==<br />
<br />
Una volta scaricati i sorgenti del kernel appropriati, dove è previsto che vengano messi? &Egrave; consigliabile creare una directory locale nella propria home chiamata linux per conservare tutti i file dei sorgenti del kernel:<br />
<br />
<pre>$ mkdir ~/linux</pre><br />
<br />
Spostate il codice sorgente nella directory linux:<br />
<br />
<pre>$ mv ~/linux-2.6.18.8.tar.gz ~/linux/</pre><br />
<br />
ed entrate nella directory linux:<br />
<br />
<pre>$ cd ~/linux<br />
$ ls<br />
linux-2.6.18.8.tar.gz</pre><br />
<br />
Adesso che il codice sorgente si trova nella directory giusta, decomprimetelo:<br />
<br />
<pre>$ tar -xzvf linux-2.6.18.8.tar.gz</pre><br />
<br />
Lo schermo si riempirà della lista dei file che verranno decompressi, e alla fine nella directory linux/ rimarrà:<br />
<br />
<pre>$ ls<br />
linux-2.6.18.8.tar.gz<br />
linux-2.6.18.8/</pre><br />
<br />
<br />
----<br />
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].<br />
----<br />
<br />
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch03.pdf ''Capitolo originale'']<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LKN:_Personalizzare_un_Kernel&diff=15336LKN: Personalizzare un Kernel2008-06-17T10:51:04Z<p>MaXeR: </p>
<hr />
<div>''Torna all'indice: [[Linux Kernel in a Nutshell]]''<br />
<br />
Uno dei punti più delicati e difficili nella creazione della propria versione del kernel Linux è quello di determinare esattamente quali driver e quali opzioni di configurazione sono richiesti per il corretto funzionamento dalla macchina su cui viene installato.<br />
Questo capitolo guiderà il lettore attraverso questo processo di selezione e scelta dei driver corretti.<br />
<br />
==Usare un kernel di una distribuzione==<br />
<br />
Uno dei metodi più semplici, per determinare quali moduli siano necessari, è quello di partire dalla configurazione che viene installata dal pacchetto del kernel della distribuzione che si sta usando. È infatti molto più semplice determinare di quali driver si ha bisogno basandosi su quelli installati in un sistema in funzione, in cui i driver corretti sono già associati all'hardware in utilizzo.<br />
<br />
Se invece si sta personalizzando un kernel per una macchina sulla quale non è installata una distribuzione Linux, allora conviene partire dalla versione LiveCD di una distribuzione. Questo consente all'utente di far partire Linux sulla macchina in oggetto e di determinare in maniera semplice le opzioni di configurazione del kernel e che consentono il funzionamento ottimale della macchina stessa.<br />
<br />
===Dove si trova la configurazione del kernel?===<br />
<br />
Quasi tutte le distribuzioni forniscono il file di configurazione nello stesso pacchetto del kernel. Si consiglia di leggere la documentazione relativa alla distribuzione stessa per sapere dove viene installato il file di configurazione. Solitamente si trova da qualche parte in una sotto-directory di <tt>/usr/src/linux/</tt>.<br />
<br />
{{Box|Nota per Debian (NdT)|In debian il file di configurazione di ogni kernel installato si trova in <tt>/boot/</tt> ed ha come nome <tt>config-''versione''</tt>.}}<br />
<br />
Se avete difficoltà a trovare la configurazione del kernel, allora guardate nel kernel stesso. I kernel di molte distribuzioni sono compilati in modo da includere il file di configurazione dentro il filesystem <tt>/proc</tt>. Per verificare se questo è il vostro caso, digitate:<br />
<br />
<pre><br />
$ ls /proc/config.gz<br />
/proc/config.gz<br />
</pre><br />
<br />
Se il file ''/proc/config.gz'' è presente, allora copiatelo nella directory del sorgente kernel ed estraetelo:<br />
<br />
<pre><br />
$ cp /proc/config.gz -/linux/<br />
$ cd -/linux<br />
$ gzip -dv config.gz<br />
config.gz: 74.9% - - replaced with config<br />
</pre><br />
<br />
Copiate questo file di configurazione nella vostra directory del kernel e rinominatelo in ''.config''.<br />
Ora potrete utilizzare questo file come base di partenza nella personalizzazione della configurazione del kernel così come descritto nel [[LKN:_Configurare_e_Compilare|Capitolo 4]].<br />
<br />
Usando questo file di configurazione si dovrebbe ottenere sempre un file immagine del kernel (un ''kernel ricompilato'', NdT) funzionante sulla propria macchina.<br />
Lo svantaggio di questa immagine è che verranno compilati quasi tutti i moduli e driver presenti nei sorgenti del kernel. Ciò non è quasi mai necessario per una singola macchina, quindi sarebbe meglio disabilitare tutti i driver e le opzioni non necessarie. Si raccomanda di disabilitare solo quelle opzioni che si è sicuri non serviranno, poiché ci sono parti del sistema che richiedono l'abilitazione di certe opzioni.<br />
<br />
===Determinare quali moduli siano necessari===<br />
Usando il file di configurazione fornito dalla vostra distribuzione il tempo richiesto per la compilazione del kernel è molto lungo poiché tutti i possibili driver vengono abilitati. Si dovrebbe cercare di abilitare solo i driver per l'hardware presente nel sistema, così da ridurre i tempi di compilazione del kernel. Inoltre, compilando ''staticamente'' (invece che come moduli) alcuni o tutti i driver necessari, si riduce la memoria utilizzata ed in alcune architetture si velocizza il funzionamento del sistema. Per escludere i driver dal kernel è necessario però determinare quali moduli sono indispensabili per il funzionamento dell'hardware installato. Attraverso l'utilizzo di due esempi, cercheremo di spiegare come determinare quali driver siano indispensabili al controllo dell'hardware.<br />
<br />
Le informazioni che mettono in relazione i dispositivi ai driver presenti nel kernel sono conservate in varie parti del sistema. Uno dei posti più importanti dove sono salvate queste informazioni è il filesystem virtuale ''sysfs''. All'avvio di Linux, ''sysfs'', dovrebbe essere montato dagli script di inizializzazione della vostra distribuzione nella directory ''/sys''. ''sysfs'' consente di dare un'occhiata a come le varie parti del kernel sono legate l'una a l'altra, questo lo si deduce grazie ai vari collegamenti simbolici (''symlink'' NdT) che puntano all'interno dell'intero filesystem.<br />
<br />
In tutti gli esempi di seguito, saranno riportati i veri percorsi (''path'' NdT) di ''sysfs'' corrispondenti ad hardware specifico. La vostra macchina sarà certamente diversa, ma la posizione relativa delle informazioni sarà la stessa. Non ci si deve allarmare se i nomi di file nel ''sysfs'' non sono i medesimi, ciò è normale e prevedibile.<br />
<br />
Inoltre, la struttura interna del file di sistema ''sysfs'' subisce modifiche, a causa sia della riorganizzazione dei driver sia del fatto che gli sviluppatori del kernel trovano nuovi modi per meglio presentare in ''user space'' le strutture interne del kernel. A causa di questo, col tempo, alcuni dei ''symlink'', precedentemente menzionati in questo capitolo, possono non essere presenti. Tuttavia, le informazioni sono ancora tutte presenti, al massimo sono state un po' spostate.<br />
<br />
====Esempio: Come determinare il driver di rete====<br />
<br />
Uno degli elementi più comuni ed importanti in un sistema è la scheda di rete. È essenziale capire quale driver la controlla ed attivarlo nella configurazione in maniera da consentire un corretto funzionamento delle connessioni di rete.<br />
<br />
Primo: partendo dalle connessioni di rete si risale al device PCI <br />
<pre>$ ls /sys/class/net/<br />
eth0 eth1 eth2 lo</pre><br />
<br />
La directory ''lo'' rappresenta il dispositivo di rete loopback, ed non è dipendente da nessun dispositivo di rete realmente installato. Invece si dovrebbe riservare particolare attenzione alle directory ''eth0'', ''eth1'' e ''eth2'', dato che si riferiscono a dispositivi realmente esistenti<br />
<br />
Per determinare di quali dispositivi ci si deve occupare, si utilizza il comando ''ifconfig'':<br />
<br />
<pre>$ /sbin/ifconfig -a<br />
eth0 Link encap:Ethernet HWaddr 00:12:3F:65:7D:C2<br />
inet addr:192.168.0.13 Bcast:192.168.0.255 Mask:255.255.255.0<br />
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1<br />
RX packets:2720792 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:1815488 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:100<br />
RX bytes:3103826486 (2960.0 Mb) TX bytes:371424066 (354.2 Mb)<br />
Base address:0xdcc0 Memory:dfee0000-dff00000<br />
eth1 Link encap:UNSPEC HWaddr 80-65-00-12-7D-C2-3F-00-00-00-00-00-00-00-00<br />
BROADCAST MULTICAST MTU:1500 Metric:1<br />
RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:1000<br />
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)<br />
eth2 Link encap:UNSPEC HWaddr 00-02-3C-04-11-09-D2-BA-00-00-00-00-00-00-00<br />
BROADCAST MULTICAST MTU:1500 Metric:1<br />
RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:1000<br />
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)<br />
lo Link encap:Local Lookback<br />
inet addr:127.0.0.1 Mask:255.0.0.0<br />
UP LOOPBACK RUNNING MTU:16436 Metric:1<br />
RX packets:60 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:1000<br />
RX bytes:13409 (13.0 Kb) TX bytes:13409 (13.0 Kb)</pre><br />
<br />
Da questo listato si può riconoscere nel dispositivo di rete <tt>eth0</tt>, quello attivo e funzionante, infatti nelle righe;<br />
<br />
<pre>eth0 Link encap:Ethernet HWaddr 00:12:3F:65:7D:C2<br />
inet addr:192.168.0.13 Bcast:192.168.0.255 Mask:255.255.255.0</pre><br />
<br />
Questo risultato dimostra che il dispositivo Ethernet si vede assegnato un indirizzo IP valido (<tt>inet</tt>).<br />
<br />
Ora, dopo che abbiamo individuato il dispositivo <tt>eth0</tt> e ci siamo accertati di volerlo abilitare nel nostro nuovo kernel, dobbiamo individuare quale driver lo controlla. Ciò si realizza con una semplice procedura, che è quella si seguire i link nel filesystem sysfs, basta digitare un comando di una sola riga:<br />
<br />
<pre>$ basename `readlink /sys/class/net/eth0/device/driver/module`<br />
e1000</pre><br />
<br />
Il risultato mostra che il modulo <tt>e1000</tt> controlla il dispositivo di rete <tt>eth0</tt>. Il comando ''basename'' racchiude in un'unica linea di comando i seguenti passaggi:<br />
<br />
: 1. Individua il symlink ''/sys/class/net/eth0/device'' contenuto all'interno della directory ''/sys/device/'', la quale contiene le informazioni relative al dispositivo che controlla ''eth0''. Fate attenzione al fatto che nelle nuove versioni del kernel la directory ''/sys/class/net/eth0'' potrebbe essere un symlink. <br />
<br />
: 2. All'interno della directory che descrive il dispositivo in sysfs, c'è un symlink che punta al driver relativo a questo dispositivo. Questo symlink è nominato ''driver'', pertanto si segue questo collegamento.<br />
<br />
: 3. All'interno della directory che descrive il driver in sysfs, c'è un symlink che punta al modulo che si trova all'interno del driver in oggetto. Questo symlink è chiamato <tt>module</tt>. Noi cerchiamo l'oggetto a cui punta questo symlink, per ottenerlo ci serviamo del comando ''readlink'', il quale produce un risultato simile a questo:<br />
:<pre>$ readlink /sys/class/net/eth0/device/driver/module </pre><br />
:<pre> ../../../../module/e1000</pre><br />
<br />
: 4. Dato che a noi interessa solo il nome del modulo e ci disinteressiamo del resto del risultato ottenuto con il comando ''readlink'', tenendo solo la parte più a destra del risultato. Questo è appunto ciò che il comando ''basename'' realizza. Applicandolo direttamente all'intero percorso, questo comando ci ritorna quanto segue: <br />
: <pre>$ basename ../../../../module/e1000</pre><br />
: <pre>e1000</pre><br />
<br />
Così abbiamo inserito il lungo risultato del symlink, ottenuto da ''readlink'', quale parametro nel programma ''basemane'', permettendo così l'intero processo di essere realizzato in una sola riga.<br />
<br />
Ora che abbiamo identificato il nome del modulo, si dovrebbe trovare l'opzione della configurazione del kernel che lo controlla. Si può cercare nei vari menu di configurazione dei dispositivi di rete oppure cercare nel codice sorgente del kernel stesso per essere sicuri di avere l'opzione giusta.<br />
<br />
<pre><br />
$ cd ~/linux/linux-2.6.17.8<br />
$ find -type f -name Makefile | xargs grep e1000<br />
./drivers/net/Makefile:obj-$(CONFIG_E1000) += e1000/<br />
./drivers/net/e1000/Makefile:obj-$(CONFIG_E1000) += e1000.o<br />
./drivers/net/e1000/Makefile:e1000-objs := e1000_main.o e1000_hw.o e1000_ethtool.o e1000_param.o<br />
</pre><br />
<br />
Si precisa che "e1000'', usato in questo esempio, deve essere sostituito con il nome del modulo che state analizzando.<br />
<br />
La cosa che ci interessa nel risultato del precedente comando ''find'' sono le righe dove compaia il termine <tt>'''CONFIG_'''</tt>. Questa è l'opzione di configurazione che il kernel deve aver attivato per poter compilare il modulo. Nell'esempio precedente l'opzione di configurazione che c'interessa è pertanto <tt>CONFIG_E1000</tt>.<br />
<br />
Adesso si dispone dell'informazione necessaria per poter configurare il kernel. Si esegue lo strumento menu di configurazione:<br />
<br />
<pre>$ make menuconfig</pre><br />
<br />
Dopodiché si prema il tasto / (slash) (che ha il compito di far partire una ricerca), e si digita l'opzione di configurazione, senza la parte di testo <tt>CONFIG_</tt>. Questo processo è mostrato nella [[:Immagine:Config_search.png|figura 7-1]].<br />
<br />
[[Immagine:Config_search.png|center|frame|''Figura 7-1. Ricerca in menuconfig.'']]<br />
<br />
Il sistema di configurazione del kernel vi dirà ora esattamente dove selezionare l'opzione per abilitare questo modulo. Vedi [[:Immagine:Config_search_found.png|figura 7-2]].<br />
<br />
[[Immagine:Config_search_found.png|center|frame|''Figura 7-2. Risultato della ricerca in menuconfig.'']]<br />
<br />
Il primo elemento nella schermata mostra l'opzione che stavate cercando. Le informazioni mostrate dalla schermata vi dicono che, per attivare il modulo <tt>E1000</tt> nel kernel, la seguente opzione di configurazione deve essere abilitata:<br />
<br />
Device Drivers<br />
Network device support<br />
[*] Network device support<br />
Ethernet (1000 Mbit)<br />
[*] Intel(R) PRO/1000 Gigabit Ethernet support<br />
<br />
Questo modo di procedere funziona per ogni tipo di dispositivo attivo nel kernel.<br />
<br />
====Esempio: Un dispositivo USB====<br />
<br />
Come secondo esempio, esaminiamo ora un convertitore USB-seriale che è presente nel nostro sistema preso ad esempio. Attualmente il convertitore è collegato alla porta ''/dev/ttyUSB0'', pertanto si deve prendere in esame la sezione tty del ''sysfs''.<br />
<pre>$ ls /sys/class/tty/ | grep USB<br />
ttyUSB0</pre><br />
Potete ora eseguire una ricerca di questo dispositivo nel ''sysfs'' allo scopo di trovare il modulo che lo gestisce, utilizzando la stessa procedura mostrata nella sezione precedente:<br />
<br />
<pre>$ basename `readlink /sys/class/tty/ttyUSB0/device/driver/module`<br />
pl2303</pre><br />
Dopodiché, per poter individuare l'opzione di configurazione che si deve abilitare, si cerca nell'albero del codice sorgente del kernel:<br />
<pre>$ cd ~/linux/linux-2.6.17.8<br />
$ find -type f -name Makefile | xargs grep pl2303<br />
./drivers/usb/serial/Makefile:obj-$(CONFIG_USB_SERIAL_PL2303) += pl2303.o</pre><br />
<br />
Si utilizzi lo strumento di configurazione del kernel, come indicato in [[:Immagine:Config_search_pl2303.png|figura 7-3]], per trovare l'opzione adeguata da abilitare relativa al settaggio dell'opzione CONFIG_USB_SERIAL_PL2303.<br />
<br />
[[Immagine:Config_search_pl2303.png|center|frame|''Figura 7-3. Ricerca di USB_SERIAL_PL2303''.]]<br />
<br />
Nel nostro caso il risultato è mostrato nella [[:Immagine:Config_search_pl2303_found.png|figura 7-4]].<br />
<br />
[[Immagine:Config_search_pl2303_found.png|center|frame|''Figura 7-4. Risultato della ricerca di USB_SERIAL_PL2303'']]<br />
<br />
Ciò mostra esattamente dove trovare l'opzione <tt>USB Profilic 2303 Single Port Serial Driver</tt> che è necessaria alla corretta gestione di questo dispositivo.<br />
<br />
====Riassunto: Alla scoperta del dispositivo====<br />
<br />
Riassumendo, ecco i vari passaggi che servono per identificare il driver funzionante di un dispositivo ad esso collegato:<br />
: 1. Trovate la corretta classe di dispositivi in ''sysfs'' relativa al dispositivo che ci interessa. I dispositivi di rete sono elencati in ''/sys/class/net'', mentre i dispositivi tty sono elencati in ''/sys/class/tty''. Gli altri vari dispositivi si trovano in altre sotto-directory di ''/sys/class'', a seconda del tipo.<br />
: 2. Ricercate nell'albero di ''sysfs'' il nome del modulo che controlla il dispositivo in oggetto. Lo si trova in ''/sys/class/class_name/device_name/device/driver/module'', la ricerca è agevolata se si utilizzano i comandi ''readlink'' e ''basename''.<br />
:<pre>$ basename `readlink /sys/class/class_name/device_name/device/driver/module`</pre><br />
: 3. Ricercate nei file Makefile con ''find'' e ''grep'' le opzioni <tt>CONFIG_</tt> che abilitano il modulo<br />
:<pre>$ find -type f -name Makefile | xargs grep ''module_name''</pre><br />
: 4. Ricercate l'opzione trovata nel sistema di configurazione del kernel, dopodiché andate dove indicato dal menu per attivare il driver in oggetto.<br />
<br />
====Lasciamo che il kernel ci dica ciò di cui abbiamo bisogno====<br />
Dopo esserci infilati nel ''sysfs'' e aver seguito i sui symlinks per ricercare passo passo i nomi dei moduli, presentiamo un semplice script che farà per noi tutto il lavoro in un modo leggermente diverso:<br />
<br />
<pre><br />
#!/bin/bash<br />
#<br />
# find_all_modules.sh<br />
#<br />
for i in `find /sys/ -name modalias -exec cat {} \;`; do<br />
/sbin/modprobe --config /dev/null --show-depends $i ;<br />
done | rev | cut -f1 -d '/' | rev | sort -u<br />
</pre><br />
<br />
Si può scaricare un file d'esempio, contenente questo script, dal sito web del libro, riportato nella sezione ''Come contattarci'' che si trova nella prefazione.<br />
<br />
Questo script cerca nel ''sysfs'' tutti file chiamati ''modalias''. Il file ''modalias'' contiene gli alias dei moduli e comunica al comando ''modprobe'' quali moduli debbano essere caricati per ogni dispositivo. L'alias del modulo è composto da una combinazione di: produttore del dispositivo, ID, tipo di classe ed altri identificativi univoci per il tipo di dispositivo in questione. Tutti i moduli del driver del kernel hanno una lista interna dei dispositivi che supportano, che è generata automaticamente dalla lista dei dispositivi che il driver comunica al kernel di poter supportare. Il comando ''modprobe'' ricerca tutti i dispositivi nella lista di tutti i driver e cerca di trovare una corrispondenza confrontando l'alias. Se trova una corrispondenza, allora provvede al caricamento del modulo (questa procedura è la stessa seguita dal caricamento automatico dei driver in Linux).<br />
<br />
Lo script prevede l'arresto del programma ''modprobe'' prima di caricare il modulo, e visualizza a schermo solo le azioni che eseguirebbe. Questo ci d&agrave; una lista di tutti i moduli che sono necessari al controllo di tutti i dispositivi del sistema. Eseguendo una piccola pulizia della lista, ordinandola e selezionando i campi adeguati, <br />
otteniamo il seguente risultato:<br />
<br />
<pre><br />
$ find_all_modules.sh<br />
8139cp.ko<br />
8139too.koo<br />
ehci-hcd.ko<br />
fimware_vlass.ko<br />
i2c-i801.ko<br />
ieee80211.ko<br />
ieee80211_crypt.ko<br />
ipw2200.ko<br />
mii.ko<br />
mmc_core.ko<br />
pcmcia_core.ko<br />
rsrc_nonstatic.ko<br />
sdhci.ko<br />
snd-hda-codec.ko<br />
snd-hda-intel.ko<br />
snd-page-alloc.ko<br />
snd-pmc.ko<br />
snd-timer.ko<br />
snd.ko<br />
soundcore.ko<br />
uhci-hcd.ko<br />
usbcore.ko<br />
yenta_socket.ko<br />
</pre><br />
<br />
Questa è la lista di tutti i moduli che sono necessari alla gestione dell'hardware della macchina.<br />
<br />
Lo script mostrerà probabilmente alcuni messaggi di errore che possono essere del tipo:<br />
<br />
<pre>FATAL: Module pci:v00008086d00002592sv000010CFsd000012E0bc03sc00i00 not found.<br />
FATAL: Module serio:ty01pr00id00ex00 not found.</pre><br />
<br />
Questo ci dice che non si trova un modulo che gestisce quel dispositivo. Questo non deve comunque interessare più di tanto, poiché alcuni dispositivi non hanno driver nel kernel che lavorino per loro.<br />
<br />
==Determinare il modulo corretto partendo da zero==<br />
Talvolta non c'è la possibilità di avere un kernel funzionante su una macchina in modo da determinare quali moduli del kernel siano necessari per gestire l'hardware. Oppure si è aggiunto del nuovo hardware al sistema e bisogna trovare le opzioni della configurazione necessarie a farlo funzionare correttamente. Questa sezione illustrerà come determinare le opzioni di configurazione necessarie ad far funzionare l'hardware.<br />
<br />
Il modo più semplice per capire quale driver controlla un nuovo dispositivo è quello di compilare come moduli tutti i driver di quel tipo disponibili nei sorgenti del kernel, e lasciare che il processo di avvio tramite ''udev'' associ il driver al dispositivo. Una volta fatto ciò, si dovrebbe essere in grado di risalire al driver necessario seguendo i passi descritti precedentemente, ed infine ricompilare il kernel abilitando il solo driver necessario.<br />
<br />
Se invece non si vogliono compilare tutti i driver, o questo meccanismo non funziona per qualche motivo, sarà necessario un pò più di lavoro per individuare il driver necessario. I passi successivi sono complessi e richiedono talvolta di dover cercare nei sorgenti del kernel. Non abbiate timore di ciò, sarà solo di aiuto a comprendere meglio l'hardware ed i sorgenti del kernel.<br />
<br />
I passi necessari per trovare il driver corrispondente di un dispositivo cambiano a seconda del tipo di dispositivo in questione. In questo capitolo discuteremo le due tipologie di dispositivi più comuni: PCI e USB. I metodi descritti qui saranno validi anche per altri tipi di dispositivi.<br />
<br />
&Egrave; inoltre molto importante per il kernel di essere in grado di trovare tutti i filesystem presenti nel sistema, ed in particolare il filesystem di root. Approfondiremop questo aspetto successivamente in [[LKN: Personalizzare un Kernel#Root filesystem|"Root filesystem"]].<br />
<br />
<br />
===Dispositivi PCI===<br />
I dispositivi PCI si distinguono per ''vendor ID'' e ''device ID''; ogni combinazione di ''vendor ID'' e di ''device ID'' può richiedere un driver unico. Questa è la base per la ricerca mostrata in questa sezione.<br />
<br />
Per questo esempio useremo un scheda di rete PCI che supporremo non funzionante con l'attuare versione del kernele in esecuzione. Questo esempio sarà diverso dalla vostra situazione, con differenti device PCI e valori ID del bus, ma i passi salienti dovrebbero essere rilevanti per ogni tipo di dispositivo PCI per il quale vogliate trovare un driver funzionante.<br />
<br />
In primo luogo troviamo nel sistema il dispositivo PCI che non stà funzionando. Per ottenere una lista di tutti i dispositivi PCI usiamo il programma <code>lspci</code>. Poiché a noi interessano solo dispositivi PCI ethernet restringeremo la nostra ricerca filtrado tra i risultati solo quelli che conterranno la parola ''ethernet'' (case-insensitive):<br />
<br />
<pre><br />
$ /usr/sbin/lspci | grep -i ethernet<br />
06:04.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/<br />
8139C/8139C+ (rev 10)<br />
</pre><br />
<br />
Questo è il dispositivo che vorremmo fare funzionare.<br />
<br />
{{Box|Nota:|Potreste anche provare a cercare in tutta la configurazione del kernel un dispositivo che corrisponde alla stringa mostrata sopra (un dispositivo della Realtek Semiconductors con nome prodotto RTL-8139/8139C/8139C+), ma questo non funziona sempre. Per questo motivo useremo la via lunga in questo capitolo.}}<br />
<br />
::[[Immagine:Warning_65x68.jpg|left]] Quasi tutte le distribuzioni mettono il programma <tt>lspci</tt> in <tt>/usr/sbin/</tt>, ma alcune lo mettono in altri percorsi. Per trovare in quale posizione è stato messo digitare:<br />
<br />
::<tt>$ '''which lspci'''</tt><br />
::<tt>/usr/sbin/lspci</tt><br />
<br />
Se state usando una distribuzione che mette ''lspci'' in una altra posizione usate il percorso corretto per il vostro caso negli esempi seguenti.<br />
<br />
Le primi bit d'informazione che l'output di ''lspci'' ci mostra sono l'ID del bus PCI per questo dispositivo, <tt>06:04.0</tt>. Questo è il valore che useremo quando guarderemo nel ''sysfs'' per trovare più informazioni riguardo questo dispositivo.<br />
<br />
Andiamo in ''sysfs'' dove tutti i dispositivi PCI sono elencati, e guardiamo i loro nomi:<br />
<br />
<pre><br />
$ cd /sys/bus/pci/devices/<br />
$ ls<br />
0000:00:00.0 0000:00:1d.0 0000:00:1e.0 0000:00:1f.3 0000:06:03.3<br />
0000:00:02.0 0000:00:1d.1 0000:00:1f.0 0000:06:03.0 0000:06:03.4<br />
0000:00:02.1 0000:00:1d.2 0000:00:1f.1 0000:06:03.1 0000:06:04.0<br />
0000:00:1b.0 0000:00:1d.7 0000:00:1f.2 0000:06:03.2 0000:06:05.0<br />
</pre><br />
<br />
Il kernel numera i dispositivi PCI con un <tt>0000:</tt> iniziale che non viene mostrato nell'output di ''lspci''. Dunque, aggiungiamo un <tt>0000:</tt> al numero datoci da ''lspci'' e entriamo in quella directory:<br />
<br />
$ cd 0000:06:04.0<br />
<br />
In questa directory vogliamo conoscere il valori dei file ''vendor'' e ''device''.<br />
<br />
<pre><br />
$ cat vendor<br />
0x10ec<br />
$ cat device<br />
0x8139<br />
</pre><br />
<br />
Questi sono il ''vendor ID'' ed il ''device ID'' per questo dispositivo PCI. Il kernel usa questi valori per associare correttamente un driver ad un dispositivo. I driver PCI dicono al kernel quale vendor e device ID supporteranno così che il kernel sappia come collegare il driver al dispositivo corretto. Scriveteli da qualche parte, dato che ci riferiremo a loro più tardi.<br />
Ora che sappiamo il vendor e il product ID per questo dipositivo PCI, abbiamo bisogno di trovare i driver del kernel corretto che dica che supporta questo dispositivo. Tornate indietro alla directory di source del kernel:<br />
<br />
<B>$ cd ~/linux/linux-2.6.17.8/</B><br />
<br />
Il posto più comune per gli ID PCI nell'albero sorgente del kernel è include/linux/pci_ids.h. Cercate in quel file il vostro product number vendor:<br />
<br />
<B>$ grep -i 0x10ec include/linux/pci_ids.h</B><br />
#define PCI_VENDOR_ID_REALTEK 0x10ec<br />
<br />
* Alcuni processori 64-bit mostreranno il "leading bus number" per i dispositivi PCI nell'output di lspci, ma per la maggiorparte delle comuni macchine Linux, non verrà mostrato di default.<br />
<br />
Il valore qui definito, PCI_VENDOR_ID_REALTEK è ciò che probabilmente sarà usato in qualsiasi kernel driver che ha la pretesa di supportare i dispositivi di quel produttore.<br />
Per essere sicuri, cercate il nostro device ID anche in questo file , dato che è a volte descritto la:<br />
<br />
<B>$ grep -i 0x8139 include/linux/pci_ids.h</B><br />
#define PCI_DEVICE_ID_REALTEK_8139 0x8139<br />
<br />
<br />
Questa definizione verrà utile più tardi.<br />
Ora cercate nei file sorgenti dei driver relativi a questo produttore:<br />
<br />
<B>$ grep -Rl PCI_VENDOR_ID_REALTEK *</B><br />
include/linux/pci_ids.h<br />
drivers/net/r8169.c<br />
drivers/net/8139too.c<br />
drivers/net/8139cp.c<br />
<br />
Non dobbiamo guardare nel primo file riportato qui, pci_ids.h, dato che è dove abbiamo trovato la definizione originale. Ma i file r8139.c, 8139too.c, e 8169cp.c nella sottodirectory drivers/net/ dovrebbero essere esaminati più da vicino.<br />
Aprite uno di questi dile in un editor e cercate PCI_VENDOR_ID_REALTEK. Nel file drivers/net/r8169.c, si vede nella seguente sezione di codice:<br />
<br />
static struct pci_device_id rtl8169_pci_tbl[] = {<br />
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8169), },<br />
{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8129), },<br />
{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4300), },<br />
{ PCI_DEVICE(0x16ec, 0x0116), },<br />
{ PCI_VENDOR_ID_LINKSYS, 0x1032, PCI_ANY_ID, 0x0024, },<br />
{0,},<br />
};<br />
<br />
Tutti i driver PCI contengono una lista di dispositivi differenti che supportano. Questa lista è contenuta in una struttura di valori struct pci_device_id, come questa. Questo è ciò che dobbiamo cercare per determinare se il nostro dispositivo è supportato da questo driver. Il valore del vendor corrisponde qui, ma il secondo valore dopo il vendor è il valore di dispositivo. Il nostro dispositivo ha il valore 0x8139, mentre questo driver supporta i valori di dispositivi per 0x8169 e 0x8129 con il vendor ID di PCI_VENDOR_ID_REALTEK. Per cui questo driver non supporterà il nostro dispositivo.<br />
Spostandoci al prossimo file, drivers/net/8139too.c, possiamo trovare la stringa PCI_VENDOR_ID_REALTEK nel seguente pezzo di codice:<br />
<br />
<pre><br />
if (pdev->vendor == PCI_VENDOR_ID_REALTEK &&<br />
pdev->device == PCI_DEVICE_ID_REALTEK_8139 && pci_rev >= 0x20) {<br />
dev_info(&pdev->dev,"This (id %04x:%04x rev %02x) is an enhanced 8139C+ chip\n",<br />
pdev->vendor, pdev->device, pci_rev);<br />
dev_info(&pdev->dev, "Use the \"8139cp\" driver for improved performance and stability.\n");<br />
}}<br />
</pre><br />
<br />
L'utilizzo del valore di PCI_VENDOR_ID_REALTEK qui corrisponde anche con il codice che controlla se il dispositivo PCI ID corrisponde al valore PCI_DEVICE_ID_REALTEK_8139. Se corrisponde, il driver stamperà un messaggio che dice: "Use the 8139cp for improved performance and stability." Forse dovremmo guardare a quel driver di seguito. Anche se non avessimo tale visibile consiglio, il driver 8139too.c non ha la coppia vendor e device ID che stiamo cercando in una variabile del tipo struct pci_device_id, ciò ci dice che non supporta il nostro dispositivo.<br />
Infine, guardate nel file drivers/net/8139cp.c. Usa la definizione PCI_VENDOR_ID_REALTEK nel seguente pezzo di codice:<br />
<br />
<pre><br />
static struct pci_device_id cp_pci_tbl[] = {<br />
{ PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139,<br />
PCI_ANY_ID, PCI_ANY_ID, 0, 0, },<br />
{ PCI_VENDOR_ID_TTTECH, PCI_DEVICE_ID_TTTECH_MC322,<br />
PCI_ANY_ID, PCI_ANY_ID, 0, 0, },<br />
{ },<br />
};<br />
MODULE_DEVICE_TABLE(pci, cp_pci_tbl);<br />
</pre><br />
<br />
Qui c'è l'uso di entrambi i valori del nostro vendor e device ID in una variabile struct pci_device_id. Questo driver dovrebbe supportare il nostro dispositivo.<br />
Ora che abbiamo il nome del driver, possiamo lavorare a ritroso, come mostrato nella prima sezione del capitolo, per trovare l'appropriato valore di configurazione del kernel che dovrebbe abilitare la compilazione di questo driver.<br />
Riassumendo, qui ci sono i passaggi necessari al fine di trovare quale driver PCI può controllare uno specifico dispositivo PCI:<br><br />
1. Trovate il bus PCI ID del dispositivo pere il quale volete trovare il driver, usate lspci.<br><br />
2. Andate nella directory /sys/bus/pci/devices/0000:bus_id, dove bus_id è il bus PCI trovato nel passaggio precedente.<br><br />
3 Leggete i valori del vendor e dei file dei dispositivi nella directory dei dispositivi PCI.<br><br />
4. Tornate all'albero sorgente del kernel guardate in include/linux/pci_ids.h per il vendor PCI e device ID trovato nel passaggio precedente.<br><br />
5. Cercate nell'albero sorgente del kernel per le referenze a quei valori nei driver. Sia il vendor che il device ID devono essere in una struttura struct pci_device_id.<br><br />
6. Cercate nel Makefile del kernel la regola CONFIG_ che compila questo driver usando find e grep:<br><br />
<B>$ find -type f -name Makefile | xargs grep DRIVER_NAME</B><br><br />
7. Cercate nel sistema di configurazione del kernel quel valore di configurazione e andate nel posto di menu che specifica per abilitare il driver da compilare.<br><br />
<br />
===Dispositivi USB===<br />
<br />
Trovare il driver specifico per un dispositivo USB è come trovare un driver per un dispositivo PCI come descritto nella precedente sezione, con solo differenze minori nel trovare il valore di bus ID.<br />
In questo esempio, troviamo il driver che è necessario per un dispositivo USB wireless. Come per l'esempio del dispositivo PCI, i dettagli in questo esempio saranno differenti dalla vostra situazione, ma i passi necessari saranno pertinenti per ogni tipo di dispositivo USB per il quale desiderate trovare un driver funzionante.<br />
Come per il dispositivo PCI, il bus ID deve essere trovato per il dispositivo USB per il quale volete trovare il driver. Per fare ciò, potete usare il programma lsusb che si trova nel package usbutils.<br />
Il programma lsusb mostra tutti i dispositivi USB attaccati al sistema. Dato che voi non conoscete come il dispositivo specifico che state cercando è chiamato, cominciate a guardare a tutti i dipsoitivi:<br />
<br />
<B>$ /usr/sbin/lsusb</B><br />
Bus 002 Device 003: ID 045e:0023 Microsoft Corp. Trackball Optical<br />
Bus 002 Device 001: ID 0000:0000<br />
Bus 005 Device 003: ID 0409:0058 NEC Corp. HighSpeed Hub<br />
Bus 005 Device 001: ID 0000:0000<br />
Bus 004 Device 003: ID 157e:300d<br />
Bus 004 Device 002: ID 045e:001c Microsoft Corp.<br />
Bus 004 Device 001: ID 0000:0000<br />
Bus 003 Device 001: ID 0000:0000<br />
Bus 001 Device 001: ID 0000:0000<br />
<br />
I dispositivi con un ID di 0000:0000 possono venir ignorati, dal momento che sono USB host controller che guidano il bus stesso. Filtrandoli ci lascia con quattro dispositivi:<br />
<br />
<B>$ /usr/sbin/lsusb | grep -v 0000:0000</B><br />
Bus 002 Device 003: ID 045e:0023 Microsoft Corp. Trackball Optical<br />
Bus 005 Device 003: ID 0409:0058 NEC Corp. HighSpeed Hub<br />
Bus 004 Device 003: ID 157e:300d<br />
Bus 004 Device 002: ID 045e:001c Microsoft Corp.<br />
<br />
Dato che i dispositivi USB sono facili da rimuovere, fate l'unplug del dispositivo di cui volete trovare il driver ed eseguite lsusb ancora:<br />
<br />
<B>$ /usr/sbin/lsusb | grep -v 0000:0000</B><br />
Bus 002 Device 003: ID 045e:0023 Microsoft Corp. Trackball Optical<br />
Bus 005 Device 003: ID 0409:0058 NEC Corp. HighSpeed Hub<br />
Bus 004 Device 002: ID 045e:001c Microsoft Corp.<br />
<br />
Il terzo dispositivo ora manca, che significa il dispositivo mostrato come:<br />
<br />
Bus 004 Device 003: ID 157e:300d<br />
<br />
è il dispositivo per cui volete trovare il driver.<br />
<br />
Se voi riattaccate il dispositivo e guardate all'output di lsusb ancora, il numero del dispositivo sarà cambiato:<br />
<br />
<B>/usr/sbin/lsusb | grep 157e</B><br />
Bus 004 Device 004: ID 157e:300d<br />
<br />
Questo è dovuto al fatto che i numeri dei dispositivi USB non sono unici, ma cambiano ogni volta che un dispositivo viene inserito dentro. Ciò che è fisso è il vendor e product ID, mostrato qui da lsusb come valore a due quattro cifre con un : tra loro. Per questo dispositivo, il vendo ID e' 157e e il product ID e' 300d. Scrivetevi i valori che trovate dato che li userete nei passi successivi.<br><br />
Come per i dispositivi PCI, cercheremo il codice sorgente del kernel per il vendor USB e per il product IDs per trovare il driver adeguato e controllare questo dispositivo. Sfortunatamente, nessun singolo file contiene tutti gli ID vendor USB, come invece PCI ha. Così una ricerca nel codice sorgente dell'intero kernel è necessaria:<br />
<br />
<B>$ grep -i -R -l 157e drivers/*</B><br />
drivers/atm/pca200e.data<br />
drivers/atm/pca200e_ecd.data<br />
drivers/atm/sba200e_ecd.data<br />
drivers/net/wireless/zd1211rw/zd_usb.c<br />
drivers/scsi/ql1040_fw.h<br />
drivers/scsi/ql1280_fw.h<br />
drivers/scsi/qlogicpti_asm.c<br />
<br />
Sappiamo che questo è un dispositivo USB wireless, e non un dispositivo ATM o SCSI, per cui in questo modo noi possiamo sicuramente ignorare i file trovati nelle directory atm e scsi. Quindi resta il file drivers/<br />
net/wireless/zd1211rw/zd_usb.c da controllare.<br />
zd_usb.c mostra la stringa 157e nel seguente pezzo di codice:<br />
<br />
static struct usb_device_id usb_ids[] ={<br />
/* ZD1211 */<br />
{ USB_DEVICE(0x0ace, 0x1211), .driver_info = DEVICE_ZD1211 },<br />
{ USB_DEVICE(0x07b8, 0x6001), .driver_info = DEVICE_ZD1211 },<br />
{ USB_DEVICE(0x126f, 0xa006), .driver_info = DEVICE_ZD1211 },<br />
{ USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 },<br />
{ USB_DEVICE(0x0df6, 0x9071), .driver_info = DEVICE_ZD1211 },<br />
{ USB_DEVICE(0x157e, 0x300b), .driver_info = DEVICE_ZD1211 },<br />
/* ZD1211B */<br />
{ USB_DEVICE(0x0ace, 0x1215), .driver_info = DEVICE_ZD1211B },<br />
{ USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B },<br />
{}<br />
};<br />
<br />
Come per i driver PCI, i driver USB dicono al kernel quali dispositivi supportano affinché il kernel possa associare il driver al dispositivo. Ciò viene fatto usando una struct usb_device_id variabile, come mostrato qui. Questa è una lista dei differenti vendor e product ID che sono supportati da questo driver. La linea:<br />
<br />
{ USB_DEVICE(0x157e, 0x300b), .driver_info = DEVICE_ZD1211 },<br />
<br />
mostra che il nostro vendor e product ID sono supportati da questo driver.<br />
Una volta che avete il nome del driver che è necessario per controllare il dispositivo, lavorate al contrario attraverso i Makefile del kernel, come descritto precedentemente nel capitolo, su come abilitare il driver per compilarlo appropriatamente.<br />
Riassumendo, i passaggi necessari per trovare quale driver USB controllerà uno specifico dispositivo USB sono:<br />
<br />
1. Trovare il vendor USB e il product ID del dispositivo per il quale volete trovare il driver, usando lsusb dopo aver aggiunto e rimosso il dispositivo per vedere cosa è cambiato nella lista.<br><br />
2. Cercate l'albero del codice sorgente del kernel per il vendor e il product ID del dispositivo USB. Sia il vendor e il product ID dovrebbero essere in una definizione struct usb_device_id.<br><br />
3. Cercate i Makefile del kernel per la regola CONFIG_ che compila questi driver, usando find e grep:<br />
<br />
<B>$ find -type f -name Makefile | xargs grep DRIVER_NAME</B><br />
<br />
4. Cercate nella configurazione di sistema del kernel il valore di quella configurazione e andate alla locazione ,nel menu, specifica per abilitare il driver da compilare.<br />
<br />
===Root filesystem===<br />
<br />
Il filesystem root è il filesystem dal quale la porzione principale del sistema caricante fa il boot. Contiene tutti i programmi iniziali che fanno partire la distribuzione e solitamente contiene anche l'intero sistema di configurazione per la macchina. In breve, è molto importante, e deve essere capace di esser trovato dal kernel a boot time affinché le cose funzionino propriamente.<br />
Se il vostro nuovo kernel configurato muore a boot time con un errore del tipo:<br />
<br />
VFS: Cannot open root device hda2 (03:02)<br />
Please append a correct "root=" boot option<br />
Kernal panic: VFS: Unable to mount root fs on 03:02<br />
<br />
significa che il root filesystem non e' stato trovato. Se non state usando una immagine ramdisk a boot time, è solitamente raccomandabile che compiliate sia il filesystem che usate come partizione di root, e il disk controller per quel disco, nel kernel, invece di averlo come modulo. Se usate un ramdisk a boot time, voi dovreste di sicuro compilare queste porzioni come moduli.<br />
<br />
::[[Immagine:Warning_65x68.jpg|left]]Come potete determinare se state usando un ramdisk a boottime? Nel capitolo 5 abbiamo menzionato l'uso dell'installation script della distribuzione per installare il kernel contro il fare l'installazione per proprio conto. Se state usando l'installation script della distribuzione, state probabilmente usando un ramdisk. se lo state installando per vostro conto, probabilmente non lo state usando.<br />
Le seguenti sottosezioni mostrano come lasciare che il kernel trovi il root filesystem durante il boot.<br />
<br />
====Tipo del filesystem====<br />
<br />
Primo, il tipo di filesystem che la partizione di root sta usando necessita di esser determinata. Per fare ciò, guardate nell'output del comando di mount:<br />
<br />
$mount |grep " / "<br />
/dev/sda2 on / type ext3 (rw,noatime)<br />
<br />
Siamo interessati al tipo di filesystem, che viene mostrato dopo la parola type. In questo esempio, è ext3. Questo è il tipo di filesystem che la partizione di root sta usando. Andate nel sistema di configurazione del kernel e siate sicuri che questo tipo di filesystem sia abilitato, come descritto ne lCapitolo 8.<br />
<br />
====Controller del disco====<br />
<br />
Nell'output del comando appena mostrato, la prima porzione di linea mostra su quale dispositivo a blocchi il root filesystem è montato. In questo esempio, è /dev/sda2. Ora che il filesystem è correttamente configurato nel vostro kernel, dovete essere sicuri che questo dispositivo a blocchi funzionerà correttamente. Per trovare quali driver sono necessari per questo, dovete guardare in sysfs ancora.<br />
Tutti i dispositivi a blocchi mostrati in sysfs sia in /sys/block o in /sys/class/block, dipendono dalla versione del kernel che state usando. In entrambi i posti, i dispositivi a blocchi sono un albero, con le partizioni differenti essendo figli del dispositivo principale:<br />
<br />
$ tree -d /sys/block/ | egrep "hd|sd"<br />
|-- hdc<br />
|-- hdd<br />
`-- sda |-- sda1<br />
|-- sda2 |-- sda3<br />
<br />
Data l'informazione nel comando di mount, dovete essere sicuri che il dispositivo sda2 è configurato correttamente. Poiché questa è una partizione (le partizioni di un disco sono numerate, mentre i dispositivi a blocchi principali non lo sono), l'intero dispositivo sda deve essere configurato. (Senza il dispositivo a blocchi principale, non c'è possibilità di accedere alle partizioni individuali su quel dispositivo).<br />
Il dispositivo a blocchi sda è rappresentato semplicemente come il dispositivo di rete che abbiamo visto precedentemente in questo capitolo. Esiste un symlink nella directory del dispositivo chiamato device che punta al dispositivo logico che controlla il dispositivo a blocchi:<br />
<br />
$ ls -l /sys/block/sda<br />
...<br />
device -> ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0<br />
...<br />
<br />
Ora avete bisogno di iniziare a scorrere la catena dei sispositivi nel sysfs per trovare quale driver sta controllando questo dispositivo:<br />
<br />
$ ls -l /sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0<br />
...<br />
driver -> ../../../../../../bus/scsi/drivers/sd<br />
...<br />
<br />
Qui vediamo che il driver del controller del disco SCSI è responsabile per il funzionamento di questo dispositivo. Così sappiamo che dobbiamo configurare il supporto ai dischi SCSI nella nostra configurazione del kernel. Continuando a salire la catena delle directory in sysfs, provate a trovare dove è il driver che controlla l'hardware:<br />
<br />
$ ls -l /sys/devices/pci0000:00/0000:00:1f.2/host0<br />
...<br />
<br />
Ancora, nessun driver qui. Continuando di un livello in su:<br />
<br />
$ ls -l /sys/devices/pci0000:00/0000:00:1f.2<br />
...<br />
driver -> ../../../bus/pci/drivers/ata_piix<br />
<br />
Ecco! Questo è il controller del disco di cui abbiamo bisogno da assicurare che sia nella nostra configurazione del kernel.<br />
Così per questo root filesystem, abbiamo bisogno di abilitare l'ext3, sd, e ata_piix driver nella nostra configurazione del kernel così che saremo capaci di fare il boot con successo del nostro kernel su questo hardware.<br />
<br />
===Un aiuto dallo script===<br />
<br />
Come menzionato all'inizio del capitolo, file e directory nel sysfs cambiano da una versione del kernel a un altra. Qui c'è uno script che è alla portata di mano per determinare il driver del kernel necessario e il module name per ogni dispositivo nel sistema. E' stato sviluppato con gli sviluppatori del kernel responsabili per il sysfs e dovrebbe funzionare con successo con tutte le versioni future del kernel 2.6 .<br />
Per esempio, fa un "short work" del precedente esempio, quando dovete prendere tutti i driver appropriati per i dispositivi a blocco sda:<br />
<br />
<strong>$ get-driver.sh sda</strong><br />
looking at sysfs device: /sys/devices/pci0000:00/0000:00:1f.2/host0/<br />
target0:0:0/0:0:0:0<br />
found driver: sd<br />
found driver: ata_piix<br />
<br />
Posso anche trovare tutto sui driver appropriati necessari per cose complicate come i dispositivi USB-toserial:<br />
<br />
<strong>$ get-driver.sh ttyUSB0</strong><br />
looking at sysfs device: /sys/devices/pci0000:00/0000:00:1d.3/usb4/4-2/4-2.<br />
3/4-2.3:1.0/ttyUSB0<br />
found driver: pl2303 from module: pl2303<br />
found driver: pl2303 from module: pl2303<br />
found driver: usb from module: usbcore<br />
found driver: usb from module: usbcore<br />
found driver: usb from module: usbcore<br />
found driver: uhci_hcd from module: uhci_hcd<br />
<br />
Potete scaricare un file di esempio contenente questo script dal web site del libro, fornito nella sezione "How to Contact Us" in Preface.<br />
<br />
#!/bin/sh<br />
#<br />
# Find all modules and drivers for a given class device.<br />
#<br />
if [ $# != "1" ] ; then<br><br />
echo<br><br />
echo "Script to display the drivers and modules for a specified sysfs<br />
class device"<br />
echo "usage: $0 <CLASS_NAME>"<br />
echo<br />
echo "example usage:"<br />
echo " $0 sda"<br />
echo "Will show all drivers and modules for the sda block device."<br />
echo<br />
exit 1<br />
fi<br />
DEV=$1<br />
if test -e "$1"; then<br />
DEVPATH=$1<br />
else<br />
# find sysfs device directory for device<br />
DEVPATH=$(find /sys/class -name "$1" | head -1)<br />
test -z "$DEVPATH" && DEVPATH=$(find /sys/block -name "$1" | head -1)<br />
test -z "$DEVPATH" && DEVPATH=$(find /sys/bus -name "$1" | head -1)<br />
if ! test -e "$DEVPATH"; then<br />
echo "no device found"<br />
exit 1<br />
fi<br />
fi<br />
echo "looking at sysfs device: $DEVPATH"<br />
if test -L "$DEVPATH"; then<br />
# resolve class device link to device directory<br />
DEVPATH=$(readlink -f $DEVPATH)<br />
echo "resolve link to: $DEVPATH"<br />
fi<br />
if test -d "$DEVPATH"; then<br />
# resolve old-style "device" link to the parent device<br />
PARENT="$DEVPATH";<br />
while test "$PARENT" != "/"; do<br />
if test -L "$PARENT/device"; then<br />
DEVPATH=$(readlink -f $PARENT/device)<br />
echo "follow 'device' link to parent: $DEVPATH"<br />
break<br />
fi<br />
PARENT=$(dirname $PARENT)<br />
done<br />
fi<br />
while test "$DEVPATH" != "/"; do<br />
DRIVERPATH=<br />
DRIVER=<br />
MODULEPATH=<br />
MODULE=<br />
if test -e $DEVPATH/driver; then<br />
DRIVERPATH=$(readlink -f $DEVPATH/driver)<br />
DRIVER=$(basename $DRIVERPATH)<br />
echo -n "found driver: $DRIVER"<br />
if test -e $DRIVERPATH/module; then<br />
MODULEPATH=$(readlink -f $DRIVERPATH/module)<br />
MODULE=$(basename $MODULEPATH)<br />
echo -n " from module: $MODULE"<br />
fi<br />
echo<br />
fi<br />
DEVPATH=$(dirname $DEVPATH)<br />
done<br />
<br />
<br />
----<br />
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].<br />
----<br />
<br />
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch07.pdf ''Capitolo originale'']<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LKN:_Programmi_Utili&diff=15335LKN: Programmi Utili2008-06-17T10:50:51Z<p>MaXeR: </p>
<hr />
<div>''Torna all'indice: [[Linux Kernel in a Nutshell]]''<br />
<br />
__TOC__<br />
<br />
Scaricare [da Internet, NdT], compilare, aggiornare e mantenere i sorgenti del kernel Linux comporta diversi passi, come questo libro illustra. Essendo per natura creature pigre, gli sviluppatori hanno creato alcuni programmi a supporto di queste attività di routine. Descriviamo alcuni di tali utili strumenti e le nozioni di base sul loro utilizzo.<br />
<br />
Lo sviluppo del kernel Linux differisce per molti aspetti dal tradizionale processo di sviluppo software. A uno sviluppatore del kernel sono richieste alcune attività peculiari:<br />
<br />
* Applicare le modifiche ad un "bersaglio mobile" quale è il kernel, a causa della rapida pianificazione delle versioni di sviluppo.<br />
* Risolvere i conflitti derivanti dalla fusione del proprio lavoro con quello dagli altri sviluppatori.<br />
* Esportare i suoi cambiamenti in un formato che permetta agli altri sviluppatori di incorporarli facilmente nel proprio lavoro.<br />
<br />
==patch e diff==<br />
Questa sezione è basata su un articolo pubblicato originariamento su ''Linux Journal''.<br />
<br />
Una delle modalità più comuni per lavorare con il kernel è quella di usare i programmi ''patch'' e ''diff''. Per usare questi strumenti, sono necessarie due differenti directory: una "pulita" (clean) e una "di lavoro" (indicata con ''dirty'' in seguito). La directory clean contiene la versione originale del kernel, mentre quella dirty contiene le modifiche apportate dal programmatore alla stessa release.<br />
Utilizzando ''patch'' e ''diff'' è possibile estrarre i cambiamenti apportati sul sorgente e portarli nella nuova release del kernel.<br />
<br />
Per esempio, creiamo due directory contenenti l'ultima versione del kernel come descritto nel Capitolo 3.<br />
<br />
<pre><br />
$ tar -zxf linux-2.6.19.tar.gz<br />
$ mv linux-2.6.19 linux-2.6.19-dirty<br />
$ tar -zxf linux-2.6.19.tar.gz<br />
$ ls<br />
linux-2.6.19/<br />
linux-2.6.19-dirty/<br />
</pre><br />
<br />
Ora è possibile apportare tutte le modifiche desiderate al sorgente presente nella directory dirty, lasciando inalterata quella clean. Dopo aver apportato le modifiche, si potrà creare una patch da inviare agli altri sviluppatori tramite i seguenti comandi:<br />
<br />
<pre><br />
$ diff -Naur -X linux-2.6.19/Documentation/dontdiff linux-2.6.19/ \<br />
linux-2.6.19-dirty/ > my_patch<br />
</pre><br />
<br />
Questo comando creerà un file dal nome ''my_patch'' che conterrà tutti i cambiamenti apportati al sorgente del kernel rispetto alla versione pulita presente nella directory clean. Tale file potrà essere distribuito o inviato ad agli altri sviluppatori via email.<br />
<br />
<br />
===Nuove versioni del kernel===<br />
Al rilascio di una nuova versione del kernel, se si desidera portare i cambiamenti su questa nuova versione è necessario applicare la patch ad una versione ''pulita'' del kernel.<br />
Questo può essere fatto seguendo questi passi:<br />
* Creare la patch, come illustrato nell'esempio precedente.<br />
* Utilizzare la patch ufficiale dal sito ''kernel.org'' e aggiornare la vecchia versione alla nuova release:<br />
<br />
<pre><br />
$ cd linux-2.6.19<br />
$ patch -p1 < ../patch-2.6.20<br />
$ cd ..<br />
$ mv linux-2.6.19 linux-2.6.20<br />
</pre><br />
<br />
* Aggiornare la directory di lavoro rimuovendo la propria patch e, in seguito, applicando il nuovo aggiornamento:<br />
<pre><br />
$ cd linux-2.6.19-dirty<br />
$ patch -p1 -R < ../my_patch<br />
$ patch -p1 < ../patch-2.6.20<br />
$ cd ..<br />
$ mv linux-2.4.19-dirty linux-2.6.20-dirty<br />
</pre><br />
<br />
* Provare ad applicare la propria patch al nuovo aggiornamento:<br />
<pre><br />
$ cd linux-2.6.20-dirty<br />
$ patch -p1 < ../my_patch<br />
</pre><br />
<br />
Se l'applicazione della patch provoca dei problemi, è necessario risolvere i conflitti creati (il comando ''patch'' informerà circa questi conflitti creando i file ''.rej'' e ''.orig'' per l'analisi e la correzioni da parte dello sviluppatore). <br />
Questo processo di ''fusione'' (''merge'') può rappresentare la parte più difficile dell'intero processo se sono stati apportati cambiamenti a porzioni di codice che sono state modificate anche da altri.<br />
<br />
Per applicare correttamente questo processo di sviluppo, consiglio vivamente di utilizzare l'eccellente insieme di programmi ''patchutils'' (reperibile qui: ''http://cyberelk.net/tim/patchutils''). Questi programmi permettono di manipolare le patch facilmente e hanno risparmiato agli sviluppatori molte ore di tedioso lavoro.<br />
<br />
<br />
== Gestire le proprie patch con quilt ==<br />
<br />
I programmi ''patch'' e ''diff'' risultano essere molto utili e funzionali per lo sviluppo del kernel. Ma dopo un certo periodo di utilizzo, molti si stancano di questo modo si procedere nello sviluppo e cercano altra strade che non coinvolgano le noiose attività di pacthing e merging. Fortunatamente, alcuni sviluppatori del kernel hanno realizzato un programma chiamato ''quilt'' che gestisce il processo di manipolazione delle patch in modo molto più semplice.<br />
<br />
L'idea alla base di ''quilt'' discende da un insieme di script di Andrew Morton, realizzati originariamente per gestire il codice del sottosistema di gestione della memoria e, in seguito, utilizzati per l'intero kernel. I suoi script erano legati molto strettamente al processo di sviluppo, ma l'idea sottostante era molto potente.<br />
Andreas Gruenbacher ha quindi ripreso questa idea creando ''quilt''.<br />
<br />
L'idea principale sottostante ''quilt'' è di lavorare con una versione ''pulita'' del kernel alla quale aggiungere un insieme di patch. E&grave; possibile inserire e togliere diverse patch dal sorgente e mantenere una lista delle patch in modo molto semplice.<br />
<br />
1. Per iniziare, creiamo una directory contenente il sorgente del kernel:<br />
<pre><br />
$ tar -zxf linux-2.6.19.tar.gz<br />
$ ls<br />
linux-2.6.19/<br />
</pre><br />
<br />
2. Spostiamoci in tale directory:<br />
<pre><br />
$ cd linux-2.6.19<br />
</pre><br />
<br />
3. Creiamo una directory ''patches'' che conterrà tutte le nostre patch:<br />
<pre><br />
$ mkdir patches<br />
</pre><br />
<br />
4. Tramite ''quilt'' creiamo una nuova patch chiamata ''patch1'':<br />
<pre><br />
$ quilt new patch1<br />
Patch patches/patch1 is now on top<br />
</pre><br />
<br />
5. ''quilt'' necessita di sapere quali file saranno modificati da questa patch. Per fare questo, utilizziamo il comando ''add'':<br />
<pre><br />
$ quilt add Makefile<br />
File Makefile added to patch patches/patch1<br />
</pre><br />
<br />
6. Apriamo il file ''Makefile'' e modifichiamo la linea EXTRAVERSION, salvando poi il file. Alla fine, aggiorniamo la patch tramite ''quilt'':<br />
<br />
<pre><br />
$ quilt refresh<br />
Refreshed patch patches/patch1<br />
</pre><br />
<br />
Il file ''patches/patch1'' conterrà una patch con tutti i cambiamenti appena fatti:<br />
<pre><br />
$ cat patches/patch1<br />
Index: linux-2.6.19/Makefile<br />
===================================================================<br />
--- linux-2.6.19.orig/Makefile<br />
+++ linux-2.6.19/Makefile<br />
@@ -1,7 +1,7 @@<br />
VERSION = 2<br />
PATCHLEVEL = 6<br />
SUBLEVEL = 19<br />
-EXTRAVERSION =<br />
+EXTRAVERSION = -dirty<br />
NAME=Crazed Snow-Weasel<br />
# *DOCUMENTATION*<br />
</pre><br />
<br />
Ora è possibile continuare a lavorare su una patch, o crearne una nuova in testa a quella attuale.<br />
Ad esempio, se sono state create tre diverse patch ''patch1'', ''patch2'' e ''patch3'', esse saranno applicate una sopra l'altra.<br />
Per vedere la lista delle patch attualmente applicate:<br />
<pre><br />
$ quilt series -v<br />
+ patches/patch1<br />
+ patches/patch2<br />
= patches/patch3<br />
</pre><br />
<br />
Il risultato del comando mostra che tutte e tre le patch sono state applicate e che quella corrente è la ''patch3''.<br />
Al rilascio di una nuova versione del kernel, se si vuole portare i cambiamenti effettuati sulla versione precedente anche sulla nuova versione, è possibile utilizzare ''quilt'' secondo i seguenti passi:<br />
<br />
1. Togliere le patch attualmente applicate al sorgente<br />
<pre><br />
$ quilt pop -a<br />
Removing patch patches/patch3<br />
Restoring drivers/usb/Makefile<br />
Removing patch patches/patch2<br />
Restoring drivers/Makefile<br />
Removing patch patches/patch1<br />
Restoring Makefile<br />
No patches applied<br />
</pre><br />
<br />
2. Utilizzando la patch ufficiale da ''kernel.org'' aggiornare la vecchia versione del kernel:<br />
<pre><br />
$ patch -p1 < ../patch-2.6.20<br />
$ cd ..<br />
$ mv linux-2.6.19 linux-2.6.20<br />
</pre><br />
<br />
3. A questo punto, tramite ''quitl'' applicare nuovamente le patch sul nuovo sorgente:<br />
<pre><br />
$ quilt push<br />
Applying patch patches/patch1<br />
patching file Makefile<br />
Hunk #1 FAILED at 1.<br />
1 out of 1 hunk FAILED -- rejects in file Makefile<br />
Patch patches/patch1 does not apply (enforce with -f)<br />
</pre><br />
<br />
4. Come risultato, le patch non si applicano immediatamente senza problemi. E&grave; possibile forzare l'applicazione della patch e poi procedere alle correzioni necessarie:<br />
<pre><br />
$ quilt push -f<br />
Applying patch patches/patch1<br />
patching file Makefile<br />
Hunk #1 FAILED at 1.<br />
1 out of 1 hunk FAILED -- saving rejects to file Makefile.rej<br />
Applied patch patches/patch1 (forced; needs refresh)<br />
$ vim Makefile.rej Makefile<br />
</pre><br />
<br />
5. Dopo aver applicato manualmente la patch, aggiornare la patch:<br />
<pre><br />
$ quilt refresh<br />
Refreshed patch patches/patch1<br />
</pre><br />
<br />
6. Procedere all'applicazione delle altre patch:<br />
<pre><br />
$ quilt push<br />
Applying patch patches/patch2<br />
patching file drivers/Makefile<br />
Now at patch patches/patch2<br />
$ quilt push<br />
Applying patch patches/patch3<br />
patching file drivers/usb/Makefile<br />
Now at patch patches/patch3<br />
</pre><br />
<br />
<br />
''quilt'' ha anche delle opzioni che permettono di inviare automaticamente le nuove patch ad un gruppo di persone o a una mailing list, di eliminare specifiche patch all'interno della serie, di ricercare una specifica patch all'interno della serie e molte altre utili opzioni.<br />
<br />
''quilt'' è vivamente consigliato per qualsiasi attività di sviluppo del kernel, anche per tenere traccia di poche patch, invece di usare i più ostici ''diff'' e ''patch''. E&grave; decisamente più semplice e consente di risparmiare parecchio tempo e sforzi.<br />
<br />
Come nota personale, non raccomanderò mai abbastanza l'utilizzo di questo strumento, poiché lo utilizzo tutti i giorni per gestire centinaia di patch in diversi rami di sviluppo.<br />
Esso è anche usato da numerose distribuzioni Linux per gestire il proprio kernel e può contare su una comunità di sviluppo entusiasta e reattiva.<br />
<br />
== git ==<br />
<br />
''git'' è uno strumento di controllo del codice sorgente originariamente scritto da Linus Torvalds quando stava cercando un nuovo sistema di gestione del codice per il kernel di Linux.<br />
<br />
&Egrave; un sistema distribuito che differisce dai sistemi tradizionali di gestione del codice (come ad esempio CVS) nel fatto che non è necessario essere connessi al server per effettuare un commit sul deposito.<br />
<br />
''git'' è uno dei più potenti, flessibili e veloci sistemi di gestione del codice sorgente attualmente disponibili, e ha alle spalle un team di sviluppo molto attivo.<br />
La pagina principale di ''git'' è ''http://git.or.cz/''. <br />
Si consiglia ad ogni nuovo utente di seguire le guide pubblicate al fine di familiarizzare con la modalità di funzionamento di git, in modo da poterlo utilizzare correttamente.<br />
<br />
Il kernel di Linux è sviluppato utilizzando ''git'', e le ultime versioni possono essere trovate all'indirizzo ''http://www.kernel.org/git/'' insieme ad una vasta lista di altri depositi git.<br />
<br />
Non è necessario utilizzare ''git'' per sviluppare il kernel di Linux, ma è molto utile per tenere traccia dei bug rilevati.<br />
Se doveste segnalare un bug agli sviluppatori del kernel, essi potranno richiedevi di utilizzare ''git bisect'' al fine di identificare l'esatta modifica che ha causato il bug. In questo caso, potete seguire le indicazioni sulla documentazione di ''git'' per capire come procedere.<br />
<br />
== ketchup ==<br />
<br />
''ketchup'' è uno strumento molto comodo utilizzato per aggiornare una versione del kernel o per passare da una versione all'altra del codice sorgente.<br />
<br />
Esso offre la possibilità di:<br />
* Trovare l'ultima versione del kernel, scaricarla e decomprimerla.<br />
* Aggiornare una versione attualmente installata del codice sorgente del kernel, applicando le patch necessarie.<br />
* Gestire i diversi rami di sviluppo del kernel, incluse le versioni -mm e -stable<br />
* Scaricare qualsiasi patch o archivio tar necessario per l'aggiornamento, se non già presenti sulla macchina locale.<br />
* Controllare la firma GPG dell'archivio e delle patch per verificarne l'integrità.<br />
<br />
''ketchup'' si trova all'indirizzo ''http://www.selenic.com/ketchup/'' insieme a molta documentazione presente nel wiki ''http://www.selenic.com/ketchup/wiki/''.<br />
<br />
Di seguito un esempio che illustra quanto sia semplice utilizzare ''ketchup'' per fare scaricare una specifica versione del kernel e '''per passare ad un'altra versione''' con un numero minimo di comandi.'''VERIFICARE LA TRADUZIONE DELLA PARTE IN GRASSETTO [...and then have it switch the directory to another kernel version...]'''<br />
<br />
Per scaricare il sorgente del kernel 2.6.16.24 in una directory, e rinominare la directory perché abbia lo stesso nome della versione del kernel, utilizzare il seguente comando:<br />
<br />
<pre><br />
$ mkdir foo<br />
$ cd foo<br />
$ ketchup -r 2.6.16.24<br />
None -> 2.6.16.24<br />
Unpacking linux-2.6.17.tar.bz2<br />
Applying patch-2.6.17.bz2 -R<br />
Applying patch-2.6.16.24.bz2<br />
Current directory renamed to /home/gregkh/linux/linux-2.6.16.24<br />
</pre><br />
<br />
Ora, per aggiornare il sorgente affinché contenga l'ultimo rilascio stabile, digitare:<br />
<pre><br />
$ ketchup -r 2.6<br />
2.6.16.24 -> 2.6.17.11<br />
Applying patch-2.6.16.24.bz2 -R<br />
Applying patch-2.6.17.bz2<br />
Downloading patch-2.6.17.11.bz2<br />
--22:21:14-- http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.17.11.bz2<br />
=> `/home/greg/.ketchup/patch-2.6.17.11.bz2.partial'<br />
Resolving www.kernel.org... 204.152.191.37, 204.152.191.5<br />
Connecting to www.kernel.org|204.152.191.37|:80... connected.<br />
HTTP request sent, awaiting response... 200 OK<br />
Length: 36,809 (36K) [application/x-bzip2]<br />
100%[====================================>] 36,809 93.32K/s<br />
22:21:14 (92.87 KB/s) - `/home/greg/.ketchup/patch-2.6.17.11.bz2.partial'saved [36809/36809]<br />
Downloading patch-2.6.17.11.bz2.sign<br />
--22:21:14-- http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.17.11.bz2.sign<br />
=> `/home/greg/.ketchup/patch-2.6.17.11.bz2.sign.partial'<br />
Resolving www.kernel.org... 204.152.191.37, 204.152.191.5<br />
Connecting to www.kernel.org|204.152.191.37|:80... connected.<br />
HTTP request sent, awaiting response... 200 OK<br />
Length: 248 [application/pgp-signature]<br />
100%[====================================>] 248 --.--K/s<br />
22:21:14 (21.50 MB/s) - `/home/greg/.ketchup/patch-2.6.17.11.bz2.sign.<br />
partial' saved [248/248]<br />
Verifying signature...<br />
gpg: Signature made Wed Aug 23 15:01:04 2006 PDT using DSA key ID 517D0F0E<br />
gpg: Good signature from "Linux Kernel Archives Verification Key ><br />
ftpadmin@kernel.org<"<br />
gpg: WARNING: This key is not certified with a trusted signature!<br />
gpg: There is no indication that the signature belongs to the owner.<br />
Primary key fingerprint: C75D C40A 11D7 AF88 9981 ED5B C86B A06A 517D 0F0E<br />
Applying patch-2.6.17.11.bz2<br />
Current directory renamed to /home/greg/linux/tmp/x/linux-2.6.17.11<br />
</pre><br />
<br />
<br />
Questo esempio mostra come ''ketchup'' determini in modo automatico che la nuova versione stabile del kernel è la 2.6.17.11 e scarichi le patch necessarie per aggiornare il sorgente.<br />
<br />
L'uso di ''ketchup'' è vivamente consigliato per scaricare qualsiasi sorgente del kernel di Linux. Esso si occupa di reperire le patch necessarie sul server e applicarle automaticamente nel modo corretto, dopo averne controllato l'autenticità tramite la firma digitale.<br />
<br />
L'uso combinato di ''ketchup'' e ''quilt'' permette di avere tutto ciò che serve per gestire il kernel di Linux e per soddisfare le esigenze degli sviluppatori.<br />
<br />
----<br />
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].<br />
----<br />
<br />
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/appa.pdf ''Capitolo originale'']<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LKN:_Requisiti_per_Compilare_ed_Utilizzare_il_Kernel&diff=15334LKN: Requisiti per Compilare ed Utilizzare il Kernel2008-06-17T10:50:45Z<p>MaXeR: </p>
<hr />
<div>''Torna all'indice: [[Linux Kernel in a Nutshell]]''<br />
<br />
Questo capitolo descrive i programmi necessari per configurare un kernel, compilarlo e fare il boot con successo. &Egrave; utile consultare il file ''Documentation/Changes'' per verificare esattamente quale sia la versione richiesta di ogni programma descritto. Qui vengono riportate le versioni dei programmi che funzionano con il kernel 2.6.18, su cui si basa la trattazione. Chi sta usando un kernel diverso verifichi di avere installate le versioni richieste, come riportato nel file sopra specificato, altrimenti qualcosa potrebbe non funzionare correttamente e potrebbe essere estremamente difficile capire cosa è andato nel modo sbagliato.<br />
<br />
<br />
=='''Strumenti per compilare il kernel'''==<br />
<br />
La maggior parte delle distribuzioni prevede la possibilità di installare una raccolta di pacchetti per lavorare con il kernel. Qualora la distribuzione offra questa possibilità è consigliabile sfruttarla, piuttosto che tentare di rintracciare ogni singola applicazione necessaria allo scopo.<br />
<br />
Per compilare un kernel servono solo tre pacchetti: un compilatore, un linker e un'utility ''make''. Questa sezione descrive il contenuto di ognuno di questi pacchetti.<br />
<br />
==='''Compilatore'''===<br />
<br />
Il kernel Linux è scritto in linguaggio C, con alcune piccole sezioni scritte in assembly. Per compilare un kernel è necessario utilizzare il compilatore per C gcc. La maggior parte delle distribuzioni comprendono un pacchetto di nome ''gcc'' che dovrebbe essere installato. Se volete scaricare il compilatore e compilarlo da soli, potete trovarlo all'indirizzo http://gcc.gnu.org .<br />
<br />
Per quanto concerne la release 2.6.18 del kernel, la versione 3.2 di ''gcc'' è la più vecchia tra quelle che possono compilare correttamente un kernel funzionante. Occorre fare attenzione che utilizzare l'ultima versione di ''gcc'' non è sempre una buona idea. Alcune delle versioni più recenti non compilano correttamente il kernel, quindi, a meno che non si voglia aiutare nel lavoro di debug del compilatore, ne è sconsigliato l'utilizzo.<br />
<br />
Per scoprire quale versione di ''gcc'' avete installata usate il seguente comando:<br />
<br />
<pre>$ gcc --version</pre><br />
<br />
==='''Linker'''===<br />
<br />
Il compilatore C, ''gcc'', non compie il lavoro di compilazione interamente da solo, ma ha bisogno di alcuni strumenti, chiamati ''binutils'', per effettuare il collegamento (linking) e l'assemblaggio dei file sorgente. Il pacchetto ''binutils'' contiene anche altre utili applicazioni che permettono di intervenire sui file oggetto (''object files'', prodotti dal compilatore ma non ancora collegati, dal linker, alle librerie e/o ad altri file oggetto necessari per l'esecuzione, N.d.T.) in molti modi, ad esempio per vedere il contenuto di una libreria.<br />
<br />
''binutils'' si trova di solito all'interno di un pacchetto di nome... ''binutils'' in ogni distribuzione. Se volete scaricarlo e installarlo da soli, potete trovarlo all'indirizzo http://www.gnu.org/software/binutils .<br />
<br />
La versione più vecchia di ''binutils'' che può essere utilizzata per collegare il kernel 2.6.18 è la 2.12. Per scoprire quale versione di ''binutils'' avete installata nel vostro sistema eseguite il comando seguente:<br />
<br />
<pre>$ ld -v</pre><br />
<br />
==='''Make'''===<br />
<br />
''make'' è uno strumento che cerca nei sorgenti del kernel quali file devono essere compilati e successivamente chiama il compilatore e gli altri strumenti necessari per costruire il kernel. Il kernel necessita della versione GNU di ''make'', che solitamente si trova in ogni distribuzione in un pacchetto chiamato ''make''.<br />
<br />
Se volete scaricare e installare ''make'' da soli potete trovarlo all'indirizzo:<br />
http://www.gnu.org/software/make .<br />
<br />
La release più vecchia di make che può essere utilizzata con un kernel 2.6.18 è la 3.79. Vi consiglio di installare la versione stabile più recente, perché le versioni più recenti lavorano più velocemente nel processare i file di compilazione.<br />
Per verificare quale versione di make avete installata usate il comando:<br />
<br />
<pre>$ make --version</pre><br />
<br />
=='''Strumenti per utilizzare il kernel'''==<br />
<br />
Anche se solitamente la versione del kernel che sta funzionando in un sistema non influisce su alcuna applicazione a livello utente, ci sono alcuni programmi per cui invece è importante. Questa sezione descrive alcuni strumenti che probabilmente sono già installati nel vostro sistema Linux: se aggiornate il kernel ad una versione diversa da quella inclusa nella vostra distribuzione, potrebbe essere necessario aggiornare anche alcuni di questi pacchetti, per permettere al sistema di funzionare correttamente.<br />
<br />
==='''util-linux'''===<br />
<br />
Il pacchetto ''util-linux'' è una raccolta di piccole utilità che assolvono ad un'ampia gamma di compiti; la maggior parte di queste utilità si occupa del montaggio e della creazione di partizioni su disco e della gestione dell'orologio di sistema.<br />
<br />
Se volete scaricare ed installare questo pacchetto da soli lo trovate al seguente indirizzo: http://www.kernel.org/pub/linux/utils/util-linux .<br />
<br />
La versione più vecchia di ''util-linux'' compatibile con il kernel 2.6.18 è la 2.10. &Egrave; consigliabile installare la più recente versione disponibile di questo pacchetto, perché le ultime versioni supportano le nuove caratteristiche implementate nel kernel. I ''bind mounts'' sono un esempio di un'opzione inclusa nei kernel più nuovi, che necessita della versione più recente di ''util-linux'' per poter funzionare correttamente.<br />
<br />
Per scoprire quale versione di ''util-linux'' avete installata nel vostro sistema usate il seguente comando:<br />
<br />
<pre>$ fdformat --version</pre><br />
<br />
==='''module-init-tools'''===<br />
<br />
Il pacchetto ''module-init-tools'' è necessario per poter utilizzare i moduli del kernel. Un ''modulo del kernel'' è un pezzetto di codice caricabile che può essere aggiunto o rimosso dal kernel anche mentre questo sta girando. &Egrave; comodo compilare i driver dei dispositivi come moduli per poter caricare solo quelli relativi allo hardware presente nel sistema. Tutte le distribuzioni di Linux usano i moduli per poter caricare solo i driver necessari al sistema in base allo hardware presente, invece di essere costretti a costruire tutti i possibili driver e opzioni del kernel in un unico blocco. L'uso dei moduli permette di risparmiare memoria, caricando solo il codice necessario per controllare correttamente la macchina.<br />
<br />
Il processo di caricamento dei moduli ha subito una revisione radicale nella versione 2.6 del kernel. Il linker per i moduli (il codice che si occupa di risolvere tutti i simboli e capire come associare i pezzi di codice in memoria) adesso è compilato all'interno del kernel, e questo permette di avere degli strumenti a livello userspace molto leggeri. Le distribuzioni più vecchie hanno un pacchetto che si chiama ''modutils'' che non funziona correttamente con il kernel 2.6. Il pacchetto ''module-init-tools'' è quello di cui avete bisogno per lavorare correttamente con i moduli di kernel 2.6.<br />
<br />
Chi volesse scaricare e installare da solo questo pacchetto, può trovarlo all'indirizzo:<br />
http://www.kernel.org/pub/linux/utils/kernel/module-init-tools .<br />
<br />
La versione più vecchia di ''module-init-tools'' compatibile con il kernel 2.6.18 è la 0.9.10. Si raccomanda di installare l'ultima release disponibile di ''module-init-tools'', in quanto permette di utilizzare alcune caratteristiche nuove del kernel. Ad esempio, la possibilità di creare una blacklist dei moduli che non si vuole vengano automaticamente caricati da udev è una delle opzioni che sono presenti solo nelle versioni più recenti di ''module-init-tools''.<br />
Per scoprire quale versione avete installata nel vostro sistema usate il comando:<br />
<br />
<pre>$ depmod -V</pre><br />
<br />
=='''Strumenti specifici per i filesystem'''==<br />
<br />
Per creare, formattare e riparare le partizioni dei dischi è necessario un ampio spettro di strumenti specifici per i vari filesystem. Il pacchetto ''util-linux'' ne contiene alcuni, ma alcuni dei più popolari filesystem hanno dei pacchetti separati che contengono le utilità necessarie.<br />
<br />
==='''ext2/ext3/ext4'''===<br />
<br />
I filesystem ''ext3'' e quello in fase di sviluppo ''ext4'' sono evoluzioni dell' ''ext2'' e possono essere gestiti con gli stessi strumenti; la versione più recente di qualunque applicazione basata su ''ext2'' può essere impiegata anche sugli altri due filesystem.<br />
<br />
Per utilizzare questi filesystem dovete avere il pacchetto ''e2fsprogs''; l'indirizzo a cui trovarlo per scaricarlo e installarlo da soli è: http://e2fsprogs.sourceforge.net.<br />
<br />
La versione più vecchia di ''e2fsprogs'' funzionante con il kernel 2.6.18 è la 1.29; è altamente consigliato utilizzare la release più recente per sfruttare al meglio le nuove caratteristiche dei filesystem ''ext3'' ed ''ext4''.<br />
<br />
Per scoprire quale versione di ''e2fsprogs'' è installata nel vostro sistema usate il comando:<br />
<br />
<pre>$ tune2fs</pre><br />
<br />
==='''JFS'''===<br />
<br />
Per usare il filesystem JFS di IBM è necessario avere il pacchetto ''jfsutils''; se volete scaricarlo e installarlo da soli lo trovate all'indirizzo: http://jfs.sourceforge.net.<br />
<br />
La versione più vecchia di ''jfsutils'' utilizzabile correttamente con il kernel 2.6.18 è la 1.1.3; per verificare quale versione avete installata lanciate il comando:<br />
<br />
<pre>$ fsck.jfs -V</pre><br />
<br />
==='''ReiserFS'''===<br />
<br />
Per usare il filesystem ReiserFS è necessario il pacchetto ''reiserfsprogs''. Per scaricarlo e installarlo da soli l'indirizzo è: http://www.nemesys.com/download.html.<br />
<br />
La versione più vecchia di ''reiserfsprogs'' funzionante con il kernel 2.6.18 è la 3.6.3; il comando per controllare quale versione è installata nel sistema è:<br />
<br />
<pre>$ reiserfsck -V</pre><br />
<br />
==='''XFS'''===<br />
<br />
Per usare il filesystem XFS di SGI è necessario avere il pacchetto ''xfsprogs''; è possibile scaricare il pacchetto da installare all'indirizzo: http://oss.sgi.com/project/xfs.<br />
<br />
La release più vecchia di ''xfsprogs'' compatibile con il kernel 2.6.18 è la 2.6.0; per verificare quale versione è installata nel sistema si utilizza:<br />
<br />
<pre>$ xfs_db -V</pre><br />
<br />
==='''Quota'''===<br />
<br />
Per utilizzare le quote come funzionalità del kernel è necessario avere installato il pacchetto ''quota-tools'';* {{Box|To do|nota a piè di pagina: scoprire come si fa}} Questo pacchetto contiene applicazioni che permettono di fissare le quote di filesystem a disposizione di ogni utente, forniscono statistiche sull'uso delle quote dei vari utenti e diramano degli avvertimenti quando questi stanno per esaurire la loro quota di filesystem.<br />
<br />
Per scaricare e installare questo pacchetto da soli l'indirizzo è: http://sourceforge.net/projects/quota. La versione più vecchia utilizzabile con il kernel 2.6.18 è la 3.0.9; è possibile visualizzare la versione installata con il comando:<br />
<br />
<pre>$ quota -V</pre><br />
<br />
==='''NFS'''===<br />
<br />
Per utilizzare correttamente il filesystem NFS è necessario il pacchetto ''nfs-utils''. ** {{Box|To do|nota a piè di pagina: scoprire come si fa}} Questo pacchetto contiene dei programmi con cui è possibile montare delle partizioni NFS come client e far girare un server NFS.<br />
<br />
L'indirizzo da cui prelevare questo pacchetto per installarlo da soli è: http://nfs.sf.net.<br />
<br />
La versione più vecchia funzionante con il kernel 2.6.18 è la 1.0.5; il comando per determinare la versione installata è:<br />
<br />
<pre>$ showmount --version</pre><br />
<br />
=='''Altri strumenti'''==<br />
<br />
Ci sono pochi altri programmi che sono strettamente legati alla versione del kernel. Di solito questi programmi non sono necessari per far funzionare il kernel, ma rendono possibile l'accesso a tipi di hardware e di funzioni differenti.<br />
<br />
==='''udev'''===<br />
<br />
''udev'' è un programma che permette a Linux di fornire uno schema persistemte di attribuzione dei nomi dei device nella directory ''/dev''. Inoltre fornisce una ''/dev'' dinamica, molto simile a quella fornita dal più vecchio (ed ora non più utilizzato) filesystem ''devfs''. Quasi tutte le distribuzioni Linux usano ''udev'' per gestire la directory ''/dev'', per cui risulta necessario per eseguire correttamente il boot del sistema.<br />
<br />
Sfortunatamente ''udev'' si appoggia alla struttura della directory ''/sys'', che è nota per cambiare continuamente con le release del kernel. Alcuni di questi cambiamenti in passato sono stati responsabili del malfunzionamento di ''udev'', cosicché il sistema non era più in grado di fare il boot correttamente. Se ''udev'' non funziona correttamente nonostante abbiate l'ultima versione raccomandata per il vostro kernel, contattate gli sviluppatori tramite la mailing list [mailto:linux-hotplug-devel@list.sourceforge.net].<br />
<br />
&Egrave; fortemente consigliato utilizzare l'ultima release di ''udev'' fornita con la vostra distribuzione, dato che è profondamente legata al processo di boot specifico della distribuzione stessa. In ogni caso, chi volesse aggiornare ''udev'' per conto proprio può trovarlo all'indirizzo: http:www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html.<br />
<br />
La versione più vecchia di ''udev'' funzionante con il kernel 2.6.18 è la 0.81; è consigliabile usare la versione più recente, in quanto funziona meglio con i nuovi kernel, a causa del modo in cui ''udev'' e il kernel comunicano tra di loro.<br />
<br />
Per conoscere quale versione di udev è installata nel sistema il comando è:<br />
<br />
<pre>$ udevinfo -V</pre><br />
<br />
==='''Strumenti di analisi dei processi'''===<br />
<br />
Il pacchetto ''procps'' contiene i programmi di uso comune ''ps'' e ''top'', come anche molti altri strumenti per gestire e tenere sotto controllo i processi in esecuzione nel sistema.<br />
Se preferite scaricare ed installare da soli questo pacchetto potete trovarlo all'indirizzo<br />
http://procps.sourceforge.net.<br />
La versione 3.2.0 è la più vecchia compatibile con il kernel 2.6.18; per determinare quale versione è installata si usa il comando:<br />
<br />
<pre>$ ps --version</pre><br />
<br />
==='''Strumenti per periferiche PCMCIA'''===<br />
<br />
Per poter utilizzare correttamente le periferiche PCMCIA è necessario un programma a livello utente che permetta di configurarle. Per i kernel più vecchi questo programma si chiamava ''pcmcia-cs'', ma è stato sostituito con un sistema più semplice chiamato ''pcmciautils''. Se volete utilizzare periferiche PCMCIA dovete avere installato questo pacchetto.<br />
<br />
Se preferite scaricare ed installare da soli questo pacchetto potete trovarlo all'indirizzo ftp://ftp.kernel.org/pub/utils/kernel/pcmcia.<br />
<br />
La versione più vecchia di ''pcmciautils'' funzionante con il kernel 2.6.18 è la 004, ma è consigliabile installare la versione più recente, per poter sfruttare tutte le nuove funzioni del sottosistema PCMCIA, come ad esempio la possibilità di caricare automaticamente i driver quando viene rilevata una nuova periferica. Il comando per scoprire quale versione di pcmciautils è installata è:<br />
<br />
<pre>$ pccardctl -V</pre><br />
<br />
<br />
----<br />
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].<br />
----<br />
<br />
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch02.pdf ''Capitolo originale'']<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LKN:_Ricette_per_Configurare_il_Kernel&diff=15333LKN: Ricette per Configurare il Kernel2008-06-17T10:50:30Z<p>MaXeR: </p>
<hr />
<div>''Torna all'indice: [[Linux Kernel in a Nutshell]]''<br />
<br />
__TOC__<br />
<br />
Il [[LKN:_Personalizzare_un_Kernel|capitolo precedente]] ci ha insegnato i meccanismi per la riconfigurazione del kernel; in questo capitolo arriva la parte interessante, in cui si possono trovare tutte le modifiche più comuni che gli utenti hanno bisogno di apportare ai loro kernel, con le istruzioni specifiche per effettuarle.<br />
<br />
<br />
== '''Dischi''' ==<br />
<br />
Il kernel Linux supporta una grande varietà di differenti tipi di disco. Questa sezione mostra come configurare il kernel in modo tale che supporti la maggior parte dei modelli più comuni di controller di disco.<br />
<br />
<br />
'''Dispositivi USB'''<br />
<br />
Per utilizzare un dispositivo di archiviazione USB (come quelli chiamati comunemente memorie "flash" USB, oppure dischi esterni USB) il supporto USB deve prima funzionare correttamente. Fare riferimento alla ricetta nella sezione chiamata [[USB]] per sapere come fare.<br />
<br />
Un dispositivo di archiviazione USB può essere identificato utilizzando il programma ''lsusb''. Se la sequenza di comandi che segue produce i risultati mostrati, nel sistema è presente un dispositivo di archiviazione USB:<br />
<br />
<pre><br />
$/usr/sbin/lsusb -v | grep Storage <br />
bInterfaceClass 8 Mass Storage <br />
</pre><br />
<br />
Abilitarla nel modo seguente:<br />
<br />
1. Un dispositivo di archiviazione USB è in realtà undispositivo USB SCSI che comunica su un collegamento USB. Per questo motivo, deve essere abilitato il sottosistema SCSI:<br />
<br />
<pre><br />
Device Drivers <br />
SCSI Device Support <br />
[*] SCSI Device Support <br />
</pre><br />
<br />
2. Anche nel sistema SCSI, si deve abilitare il "SCSI disk support" affinchè il dispositivo venga montato correttamente:<br />
<br />
<pre><br />
Device Drivers <br />
SCSI Device Support <br />
[*] SCSI disk support <br />
</pre><br />
<br />
3. Abilitare il supporto di archiviazione USB:<br />
<br />
<pre><br />
Device Drivers <br />
USB Support <br />
[M] USB Mass Storage support <br />
</pre><br />
<br />
Nelle pagine che seguono verranno illustrate specifici dispostivi di archiviazione USB per i quali si rende necessaria una configurazione differente, in quanto non seguono gli standard USB e richiedono un codice speciale. Se si possiede uno di questi dispositivi, è necessario abilitare il supporto per essi.<br />
<br />
<br />
'''Dischi IDE'''<br />
<br />
I dischi IDE sono i più comuni dischi per PC. Il dispositivo che abilita tali dischi affinchè essi lavorino correttamente è un controller di disco IDE. Per determinare se si abbia un controller di disco IDE sul proprio sistema, usare il comando ''lspci'' nel seguente modo:<br />
<br />
<pre><br />
$/usr/sbin/lspci | grep IDE <br />
00:1f.1 IDE interface: Intel Corporation 82801EB/ER (ICH5/ICH5R) IDE <br />
Controller (rev 02) <br />
00:1f.2IDEinterface:IntelCorporation82801EB(ICH5)SATAController(rev <br />
02) <br />
</pre><br />
<br />
Tenete presente che il risultato del comando ''lspci'' probabilmente non sarà identico a quello mostrato sopra. Ciò che importa invece è che il comando mostri un qualunque controller IDE (il primo dispositivo nel precedente esempio). Se si riscontrano solo controller SATA, vedere la sezione successiva 'Serial ATA (SATA)'.<br />
<br />
Ora seguiamo i seguenti passi:<br />
<br />
1. Abilitare il supporto PCI per il kernel:<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
[*] PCI Support <br />
</pre><br />
<br />
2. Abilitare il sottosistema IDE e il supporto IDE:<br />
<br />
<pre><br />
Device Drivers <br />
[*] ATA/ATAPI/MFM/RLL support <br />
[*] Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support <br />
</pre><br />
<br />
3. Nel sistema ATA, occorre abilitare lo specifico tipo di controller IDE che si possiede, al fine di farlo funzionare correttamente. Per avere un buon backup nel caso si selezioni il tipo errato, selezionare la voce controller IDE 'generico':<br />
<br />
<pre><br />
Device Drivers <br />
ATA/ATAPI/MFM/RLL support <br />
[*] generic/default IDE chipset support <br />
</pre><br />
<br />
4. Abilitare i differenti controller PCI IDE:<br />
<br />
<pre><br />
Device Drivers <br />
ATA/ATAPI/MFM/RLL support <br />
[*] PCI IDE chipset support <br />
</pre><br />
<br />
Ciò porta all'apertura di un lungo sottomenu di differenti tipi di controller IDE. Selezionare il proprio in base al nome del dispositivo mostrato col comando ''lspci''<br />
<br />
<br />
'''Serial ATA (SATA)'''<br />
<br />
SATA è un tipo di controller di disco che rappresenta il successore del controller di disco IDE. Per determinare se si possiede sul sistema un controller di disco SATA, lanciare il seguente comando:<br />
<br />
<pre><br />
$/usr/sbin/lspci | grep SATA <br />
00:1f.2IDEinterface:IntelCorporation82801EB(ICH5)SATAController(rev <br />
02) <br />
</pre><br />
<br />
Tenere presente che il risultato del comando probabilmente non sarà identico. Ciò che importa è che il comando mostri un qualunque dispositivo SATA. I dischi SATA usano una libreria kernel chiamata ''libata'' che si occupa della maggior parte delle funzionalità di SATA. ''That library uses the SCSI layer to talk to the block layer, so several different kernel options need to be enabled in order for SATA disks to work properly.''<br />
<br />
1. Abilitare il supporto PCI per il kernel:<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
[*] PCI Support <br />
</pre><br />
<br />
2. Abilitare il sottosistema SCSI:<br />
<br />
<pre><br />
Device Drivers <br />
SCSI Device Support <br />
[*] SCSI Device Support <br />
</pre><br />
<br />
3. Anche nel sistema SCSI, deve essere abilitata la voce "SCSI disk support" affinchè il dispositivo funzioni correttamente:<br />
<br />
<pre><br />
Device Drivers <br />
SCSI Device Support <br />
[*] SCSI disk support <br />
</pre><br />
<br />
4. Le opzioni SATA sono sotto la sezione "SCSI low-level drivers":<br />
<br />
<pre><br />
Device Drivers <br />
SCSI Device Support <br />
SCSI low-level drivers <br />
[*] Serial ATA (SATA) support <br />
</pre><br />
<br />
5. In questa sezione, abilitare il particolare controller SATA che si possiede. Vedere l'output del comando ''lspci'' precedentemente menzionato per avere una lista dei tipi di controller SATA presenti sul proprio sistema. Per esempio, la maggior parte delle schede madri INTEL richiedono il driver PIIX/ICH SATA (come mostrato nel precedente esempio):<br />
<br />
<pre><br />
Device Drivers <br />
SCSI Device Support <br />
SCSI low-level drivers <br />
[*] Serial ATA (SATA) support <br />
[*] Intel PIIX/ICH SATA support <br />
</pre><br />
<br />
<br />
== '''Masterizzare un CD-ROM''' ==<br />
<br />
Masterizzare un CD-ROM è davvero semplice in Linux. Se il kernel che si possiede permette la lettura di un CD-ROM, allora ne permetterà anche la masterizzazione. <br />
Ci sono due metodi per abilitare il supporto CD-ROM in Linux, uno per i lettori IDE ed uno per i lettori SCSI e SATA<br />
<br />
<br />
'''Lettori CD-ROM IDE'''<br />
<br />
I lettori CD-ROM IDE sono gestiti dallo stesso controller IDE del disco principale. Assicurarsi che il controller IDE sia correttamente supportato come descritto nella sezione ''Dischi IDE''. Se lo è, allora occorre selezionare solo un'altra voce nella procedura di configurazione:<br />
<br />
<pre><br />
Device Drivers <br />
[*] ATA/ATAPI/MFM/RLL support <br />
[*] Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support <br />
[M] Include IDE/ATAPI CDROM support <br />
</pre><br />
<br />
<br />
'''Lettori CD-ROM SCSI e SATA'''<br />
<br />
I lettori CD-ROM SCSI e SATA sono gestiti dallo stesso controller del disco principale. Assicurarsi che il controller SCSI o SATA sia correttamente supportato. Per i dischi SATA, vedere la precedente sezione ''Serial ATA (SATA).'' <br />
Per supportare lettori CD-ROM SCSI o SATA, il driver CD-ROM SCSI deve essere abilitato:<br />
<br />
<pre><br />
Device Drivers <br />
SCSI Device Support <br />
[*] SCSI CDROM support <br />
</pre><br />
<br />
Una volta che è stato abilitato, il lettore CD-ROM SCSI o SATA dovrebbe funzionare correttamente.<br />
<br />
<br />
== '''Dispositivi''' ==<br />
<br />
Linux supporta un grande numero di differenti tipi di dispositivi (più di qualunque altro sistema operativo). Questa sezione descrive come abilitare i dispositivi più comuni.<br />
<br />
<br />
'''USB'''<br />
<br />
Linux supporta molti tipi di dispositivi USB. Per abilitare il supporto USB, bisogna innanzitutto abilitare il supporto per il controller USB, che gestisce il collegamento USB sulla macchina. Per determinare se la propria macchina possiede un controller USB, e di quale tipo è, lanciare il seguente comando:<br />
<br />
<pre><br />
$/usr/sbin/lspci | grep USB <br />
00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI <br />
Controller #1 (rev 02) <br />
00:1d.1 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI <br />
Controller #2 (rev 02) <br />
00:1d.2 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI <br />
Controller #3 (rev 02) <br />
00:1d.3 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI <br />
Controller #4 (rev 02) <br />
00:1d.7 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB2 EHCI <br />
Controller (rev 02) <br />
</pre><br />
<br />
Notare che probabilmente l'output del comando non sarà identico a quello mostrato sopra. Ciò che importa è che il comando mostri un qualche controller USB.<br />
<br />
1. Abilitare il supporto PCI per il kernel: <br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
[*] PCI Support <br />
</pre><br />
<br />
2. Abilitare il supporto USB per il kernel: <br />
<br />
<pre><br />
Device Drivers <br />
USB Support <br />
[M] Support for Host-side USB <br />
</pre><br />
<br />
3. Abilitare lo specifico controller host USB per la propria macchina (per maggior sicurezza abilitarli tutti se non si conosce con certezza quale si possiede):<br />
<br />
<pre><br />
Device Drivers <br />
USB Support <br />
--- USB Host Controller Drivers <br />
[M] EHCI HCD (USB 2.0) support <br />
[M] OHCI HCD support <br />
[M] UHCI HCD (most Intel and VIA) support <br />
</pre><br />
<br />
4. Bisogna abilitare i driver anche per gli specifici dispositivi individuali USB. Gran parte di essi si trovano nella sezione driver USB principale:<br />
<br />
<pre><br />
Device Drivers <br />
USB Support <br />
</pre><br />
<br />
Ma alcuni dispositivi, come Video USB, DVB e Audio, sono elencati nella sezione che gestisce tutti questi tipi di dispositivi. Per esempio, il driver audio USB può essere trovato nel menu audio:<br />
<br />
<pre><br />
Device drivers <br />
Sound <br />
[*] Sound card support <br />
[*] Advanced Linux Sound Architecture <br />
USB Devices <br />
[M] USB Audio/MIDI driver <br />
</pre><br />
<br />
Per inserire dispositivi di archiviazione USB (USB flash), vedere la sezione chiamata "Archiviazione USB", all'inizio di questo capitolo.<br />
<br />
<br />
'''IEEE 1394 (FireWire)'''<br />
<br />
IEEE 1394 è comunemente conosciuta col nome FireWire, il nome con il quale fu pubblicizzata dalla Apple Computer. IEEE 1394 è un bus ad alta velocità che connette dispositivi esterni, come i dispositivi USB.<br />
<br />
Per determinare se sulla propria macchina sia presente un controller FireWire e di quale tipo sia, lanciare il seguente comando:<br />
<br />
<pre><br />
$/usr/sbin/lspci | grep FireWire <br />
06:0c.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-1394a-2000 <br />
Controller (PHY/Link) <br />
06:0d.2 FireWire (IEEE 1394): Creative Labs SB Audigy FireWire Port (rev 04)<br />
</pre><br />
<br />
Notare che probabilmente l'output non sarà identico; ciò che importa è che il comando mostri un qualche controller FireWire.<br />
<br />
1. Abilitare il supporto PCI per il kernel:<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
[*] PCI Support <br />
</pre><br />
<br />
2. Abilitare il supporto IEEE 1394 per il kernel:<br />
<br />
<pre><br />
Device Drivers <br />
IEEE 1394 (FireWire) support <br />
[*] IEEE 1394 (FireWire) support <br />
</pre><br />
<br />
3. Abilitare il particolare tipo di host controller FireWire che si possiede:<br />
<br />
<pre><br />
Device Drivers <br />
IEEE 1394 (FireWire) support <br />
[*] IEEE 1394 (FireWire) support <br />
--- Device Drivers <br />
[M] Texas Instruments PCILynx support <br />
[M] OHCI-1394 support <br />
</pre><br />
<br />
4. Per finire, abilitare i particolari tipi di dispositivi FireWire che si possiedono:<br />
<br />
<pre><br />
Device Drivers <br />
IEEE 1394 (FireWire) support <br />
[*] IEEE 1394 (FireWire) support <br />
--- Protocol Drivers <br />
[M] OHCI-1394 Video support <br />
[M] SBP-2 support (Harddisks etc.) <br />
[ ] Enable Phys DMA support for SBP2 (Debug) <br />
[M] Ethernet over 1394 <br />
[M] OHCI-DV I/O support <br />
[M] Raw IEEE1394 I/O support <br />
</pre><br />
<br />
<br />
'''PCI Hotplug'''<br />
<br />
I sistemi PCI hotplug stanno diventando sempre più popolari grazie all'uso di Express Card e laptop docking stations.<br />
<br />
Per determinare se la propria macchina possieda un controller Express Card, controllare l'hardware per verificare se si può inserire una Express Card.<br />
<br />
1. Abilitare il supporto PCI per il kernel:<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
[*] PCI Support <br />
</pre><br />
<br />
2. Abilitare il supporto PCI hotplug per il kernel:<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
[*] PCI Support <br />
PCI Hotplug Support <br />
[M] Support for PCI Hotplug (EXPERIMENTAL) <br />
</pre><br />
<br />
3. C'è un vasta scelta di differenti tipi di controller PCI hotplug. Per il supporto di gran parte dei portatili e Express Card, abilitare il controller ACPI:<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
[*] PCI Support <br />
PCI Hotplug Support <br />
[M] Support for PCI Hotplug (EXPERIMENTAL) <br />
[M] ACPI PCI Hotplug driver <br />
</pre><br />
<br />
4. Abilitare ance il controller PCI Express:<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
[*] PCI Support <br />
[*] PCI Express Support <br />
[M] PCI Express Hotplug driver <br />
</pre><br />
<br />
<br />
'''PCMCIA/CardBus'''<br />
<br />
Il supporto per dispositivi PCMCIA e CardBus è fabbricato su quasi ogni portatile. In ogni caso, i portatili più recenti si stanno orientando verso il formato ExpressCard (vedere la ricetta PCI Hotplug nella sezione precedente, ''PCI Hotplug'').<br />
<br />
Per determinare se sulla propria macchina si possieda un controller PCMCIA, controllare l'hardware per verificare se una card PCMCIA può essere inserita.<br />
<br />
1. Abilitare il supporto PCI per il kernel:<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
[*] PCI Support <br />
</pre><br />
<br />
2. Abilitare il supporto PCCARD per il kernel:<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
PCCARD (PCMCIA/CardBus) support <br />
[M] PCCard (PCMCIA/CardBus) support <br />
</pre><br />
<br />
3. Abilitare il supporto PCMCIA e il supporto CardBus per coprire il maggior numero di dispositivi:<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
PCCARD (PCMCIA/CardBus) support <br />
[M] PCCard (PCMCIA/CardBus) support <br />
[M] 16-bit PCMCIA support <br />
[*] 32-bit CardBus support <br />
</pre><br />
<br />
Abilitare il tipo di card bridge per il proprio portatile. Il più comune è il controller "yenta-like":<br />
<br />
<pre><br />
Bus options (PCI, PCMCIA, EISA, MCA, ISA) <br />
PCCARD (PCMCIA/CardBus) support <br />
[M] PCCard (PCMCIA/CardBus) support <br />
[M] CardBus yenta-compatible bridge support <br />
[ ] Cirrus PD6729 compatible bridge support <br />
[ ] i82092 compatible bridge support <br />
[ ] i82365 compatible bridge support <br />
[ ] Databook TCIC host bridge support <br />
</pre><br />
<br />
<br />
'''Audio (ALSA)'''<br />
<br />
Advanced Linux Sound Architecture (ALSA) è l'attuale sound system per il kernel Linux. Un sound system meno recente (OSS) è stato abbandonato, e quasi tutti i vecchi driver sono stati rimossi dall'albero dei sorgenti del kernel.<br />
<br />
Per determinare quale tipo di sound controller sia presente sulla propria macchina, lanciare il seguente comando:<br />
<br />
<pre><br />
$/usr/sbin/lspci | grep -i audio <br />
00:1f.5 Multimedia audio controller: Intel Corporation 82801EB/ER (ICH5/ <br />
ICH5R) AC'97 Audio Controller (rev 02) <br />
06:0d.0 Multimedia audio controller: Creative Labs SB Audigy (rev 04) <br />
</pre><br />
<br />
Notare che l'output probabilmente non sarà identico; ciò che importa è che il comando mostri un qualche controllers audio.<br />
<br />
1. Abilitare il supporto base audio:<br />
<br />
<pre><br />
Device Drivers <br />
Sound <br />
[M] Sound Card Support <br />
</pre><br />
<br />
2. Abilitare ALSA:<br />
<br />
<pre><br />
Device Drivers <br />
Sound <br />
[M] Sound Card Support <br />
[M] Advanced Linux Sound Architecture <br />
</pre><br />
<br />
3. C'è un certo numero di differenti opzioni base ALSA, come per esempio il supporto per il superato protocollo audio OSS. In presenza di applicazioni meno recenti, si dovrebbero abilitare le relative opzioni:<br />
<br />
<pre><br />
Device Drivers <br />
Sound <br />
[M] Sound Card Support <br />
[M] Advanced Linux Sound Architecture <br />
[M] OSS Mixer API <br />
[M] OSS PCM (digital audio) API <br />
[ ] OSS PCM (digital audio) API - Include plugin system <br />
</pre><br />
<br />
4. Abilitare il particolare tipo di dispositivo audio che si possiede. Le voci relative a PCI card audio sono nel sottomenu PCI:<br />
<br />
<pre><br />
Device Drivers <br />
Sound <br />
[M] Sound Card Support <br />
[M] Advanced Linux Sound Architecture <br />
PCI Devices <br />
</pre><br />
<br />
<br />
=='''CPU'''==<br />
<br />
Se si desidera avere un kernel che lavori il più velocemente possibile per il proprio hardware e processore, sono poche le opzioni sulle quali bisogna agire per migliorare le performance. Questa sezione mostrerà alcune delle opzioni che si possono configurare in base ai processori.<br />
<br />
<br />
'''Tipi di processori'''<br />
<br />
Nel kernel linux possiamo modificare un gran numero di opzioni per i diversi processori. La prima informazione da ricavare è l'esatto tipo di processore che si sta usando. Per scoprire ciò, lanciare il seguente comando:<br />
<br />
<pre><br />
$cat /proc/cpuinfo | grep "model name" <br />
model name : Intel(R) Xeon(TM) CPU 3.20GHz <br />
</pre><br />
<br />
Notare che l'output probabilmente non sarà identico; ciò che importa è che il comando mostri il nome del modello del processore presente nel sistema.<br />
<br />
1. Selezionare il tipo di sottoarchitettura del processore:<br />
<br />
<pre><br />
Processor type and features <br />
Subarchitecture Type <br />
(X) PC-compatible <br />
( ) AMD Elan <br />
( ) Voyager (NCR) <br />
( ) NUMAQ (IBM/Sequent) <br />
( ) Summit/EXA (IBM x440) <br />
( ) Support for other sub-arch SMP systems with more than 8 CPUs <br />
( ) SGI 320/540 (Visual Workstation) <br />
( ) Generic architecture (Summit, bigsmp, ES7000, default) <br />
( ) Support for Unisys ES7000 IA32 series <br />
</pre><br />
<br />
A meno che la propria macchina non appartenga ad uno dei tipi specifici elencati sopra, selezionare la voce PC-compatibile. Comunque, se si desidera creare un singolo kernel che possa girare su tutti i tipi di macchine mostrate, selezionare la voce Generic architecture option. Alcune delle opzioni potrebbero non essere presenti se non si è selezionato l'opzione Symmetric multiprocessing support.<br />
<br />
2. Selezionare il tipo di famiglia di processore. L'opzione PC-compatible deve essere selezionata dalle precedenti opzioni affinchè venga mostrato questo sottomenu:<br />
<br />
<pre><br />
Processor type and features <br />
Processor family <br />
( ) 386 <br />
( ) 486 <br />
( ) 586/K5/5x86/6x86/6x86MX <br />
( ) Pentium-Classic <br />
( ) Pentium-MMX <br />
( ) Pentium-Pro <br />
( ) Pentium-II/Celeron(pre-Coppermine) <br />
( ) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon <br />
( ) Pentium M <br />
(X) Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon <br />
( ) K6/K6-II/K6-III <br />
( ) Athlon/Duron/K7 <br />
( ) Opteron/Athlon64/Hammer/K8 <br />
( ) Crusoe <br />
( ) Efficeon <br />
( ) Winchip-C6 <br />
( ) Winchip-2 <br />
( ) Winchip-2A/Winchip-3 <br />
( ) GeodeGX1 <br />
( ) Geode GX/LX <br />
( ) CyrixIII/VIA-C3 <br />
( ) VIA C3-2 (Nehemiah) <br />
( ) Generic x86 support <br />
</pre><br />
<br />
Per maggiori dettagli su questa fase della configurazione, si veda la voce M386 al Capitolo 11 per una completa descrizione di come scegliere la corretta voce di processore in base a quello che si possiede, e per il numero di macchine sul quale si voglia far girare il kernel.<br />
<br />
<br />
'''SMP'''<br />
<br />
Se il proprio sistema ha più di una CPU, o una CPU Dual Core o Hyperthreaded, si dovrebbe selezionare l'opzione multiprocessore per il kernel linux in modo da portare vantaggi ai processori addizionali. Se non lo si farà, si sprecheranno risorse per gli altri processori senza tuttavia usarli del tutto.<br />
<br />
Abilitare il multiprocessing:<br />
<br />
<pre><br />
Processor type and features <br />
[*] Symmetric multi-processing support <br />
</pre><br />
<br />
<br />
'''Preemption'''<br />
<br />
Sistemi che fungono da server devono soddisfare a diversi requisiti fra i quali quelli di essere usati come desktop per applicazioni audio e video. Il kernel permette diversi modi di "preemption" in modo da affrontare diversi carichi di lavoro. "Preemption" è la capacità del kernel di interrompere se stesso mentre sta facendo qualcos'altro, in modo da lavorare per qualcosa che abbia una priorità più alta, ad esempio come aggiornare un programma audio o video.<br />
<br />
Per cambiare a un diverso modello di preemption, usare questo menu:<br />
<br />
<pre><br />
Processor type and features <br />
Preemption Model <br />
(X) No Forced Preemption (Server) <br />
( ) Voluntary Kernel Preemption (Desktop) <br />
( ) Preemptible Kernel (Low-Latency Desktop) <br />
</pre><br />
<br />
<br />
Se si desidera rendere il proprio kernel ancora più reattivo verso priorità più elevate di quanto non lo possa essere normalmente con preemption, si possono anche autorizzare interruzioni a una delle protezioni principali interne al kernel:<br />
<br />
<pre><br />
Processor type and features <br />
[*] Preempt The Big Kernel Lock <br />
</pre><br />
<br />
Questa opzione può essere selezionata solo se in precedenza si sono selezionate le voci "Preemptible Kernel" o "Symmetric multi-processin support".<br />
<br />
<br />
'''Suspend'''<br />
<br />
Il kernel Linux ha la capacità di autospendersi a disco, permettendo di togliere l'alimentazione e poi, successivamente, di rialimentare e tornare esattamente nel punto in cui la macchina era stata sospesa. Questa funzionalità è molto utile sui laptop nei quali gira Linux<br />
<br />
Abilitare questa funzione selezionando:<br />
<br />
<pre><br />
Power management options (ACPI, APM) <br />
[*] Software Suspend <br />
</pre><br />
<br />
Il kernel ha bisogno di sapere dove salvare l'immagine del kernel sospesa e poi successivamente da dove riesumarla. Questa locazione è di solito una partizione di swap del kernel sul disco. Per specificare quale partizione dovrebbe essere configurato questo:<br />
<br />
<pre><br />
Power management options (ACPI, APM) <br />
(/dev/hda3) Default resume partition <br />
</pre><br />
<br />
Assicurarsi di specificare la partizione giusta per la sospensione della macchina e non usare una partizione in uso dal sistema per dei dati. Il nome della partizione corretta può essere ricavato lanciando il seguente comando: <br />
<br />
<pre><br />
$/sbin/swapon -s | grep dev | cut -f 1 -d ' ' <br />
/dev/hda3 <br />
</pre><br />
<br />
Usare l'output del comando precedente in questa opzione di configurazione del kernel e nella riga di boot del kernel dove viene specificato da dove il kernel dovrebbe essere riesumato. Dopo che la macchina è stata sospesa, per farla ripartire correttamente, passare l'argomento ''resume=/dev/swappartition alla riga di comando del kernel affinchè usi l'immagine corretta. Se non si vuole arichiviare l'immagine sospesa, usare l'argomento "noresum" da riga di comando del kernel.<br />
<br />
<br />
'''CPU Frequency Scaling'''<br />
<br />
La maggior parte dei moderni processori possono rallentare il clock interno del processore in modo da preservare alimentazione e durata della batteria. Linux supporta questa capacità e offre una varietà di ''regolatori'' di alimentazione. Differenti regolatori implementano differenti ''heuristics'' in modo da determinare come variare la velocità del processore in funzione della velocità del sistema e delle altre variabili.<br />
<br />
1. Abilitare la funzionalità della frequenza di scaling di base:<br />
<br />
<pre><br />
Power management options (ACPI, APM) <br />
[*] CPU Frequency scaling <br />
</pre><br />
<br />
2. Selezionare i differenti regolatori di frequenza che si desidera utilizzare:<br />
<br />
<pre><br />
Power management options (ACPI, APM) <br />
[*] CPU Frequency scaling <br />
[*] 'performance' governor <br />
[*] 'powersave' governor <br />
[*] 'userspace' governor for userspace frequency scaling <br />
[*] 'ondemand' cpufreq policy governor <br />
[*] 'conservative' cpufreq governor<br />
</pre><br />
<br />
Per maggiori informazioni su ciò che fanno i diversi regolatori, vedere la voce CPU_FREQ al Capitolo 11.<br />
<br />
3. Selezionare il regolator di default che si desidera lanciare al boot della macchina:<br />
<br />
<pre><br />
Power management options (ACPI, APM) <br />
[*] CPU Frequency scaling <br />
Default CPUFreq governor (performance) <br />
</pre><br />
<br />
4. Selezionare il particolare tipo di processore della macchina. Per dettagli su come determinare il tipo di processore della macchina, vedere la sezione precedente chiamata "Tipi di processori"<br />
<br />
<pre><br />
Power management options (ACPI, APM) <br />
[*] CPU Frequency scaling <br />
--- CPUFreq processor drivers <br />
[ ] ACPI Processor P-States driver <br />
[ ] AMD Mobile K6-2/K6-3 PowerNow! <br />
[ ] AMD Mobile Athlon/Duron PowerNow! <br />
[ ] AMD Opteron/Athlon64 PowerNow! <br />
[ ] Cyrix MediaGX/NatSemi Geode Suspend Modulation <br />
[*] Intel Enhanced SpeedStep <br />
[*] Use ACPI tables to decode valid frequency/voltage pairs <br />
[*] Built-in tables for Banias CPUs <br />
[ ] Intel Speedstep on ICH-M chipsets (ioport interface) <br />
[ ] Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface) <br />
[ ] Intel Pentium 4 clock modulation <br />
[ ] nVidia nForce2 FSB changing <br />
[ ] Transmeta LongRun<br />
</pre><br />
<br />
<br />
'''Differenti Modelli di Memoria'''<br />
<br />
Linux su hardware Intel 32 bit può accedere a 64 Gb di memoria, ma l'indirizzo fisico di un processore a 32 bit è di soli 4 Gb. Per lavorare con questa limitazione, Linux può mappare la memoria addizionale in un'altra area e poi selezionarla quando altri programmi ne hanno bisogno. Ma se la propria macchina ha una quantità di memoria più piccola, è più facile per Linux non avere problemi nell'occupare aree più grandi, così risulta benefico dire al kernel quanta memoria si vuole per supportarlo. Per una descrizione più dettagliata di questa opzione, si veda la voce HIGHMEM al Capitolo 11.<br />
<br />
Linux suppporta tre differenti modelli di memoria per processori Intel 32 bit, in funzione della memoria disponibile:<br />
<br />
- Inferiore a 1 Gb di memoria fisica<br />
- Tra 1 Gb e 4 Gb di memoria fisica<br />
- Oltre 4 Gb di memoria fisica<br />
<br />
Per selezionare la quantità di memoria:<br />
<br />
<pre><br />
Processor type and features <br />
High Memory Support <br />
(X) off <br />
( ) 4GB <br />
( ) 64GB <br />
</pre><br />
<br />
<br />
<br />
----<br />
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].<br />
----<br />
<br />
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch08.pdf ''Capitolo originale'']<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LKN:_Guida_di_Riferimento_dei_Parametri_di_Compilazione_del_Kernel&diff=15331LKN: Guida di Riferimento dei Parametri di Compilazione del Kernel2008-06-17T10:42:33Z<p>MaXeR: </p>
<hr />
<div>''Torna all'indice: [[Linux Kernel in a Nutshell]]''<br />
__TOC__<br />
<br />
Come discusso nel Capitolo 4, lo strumento che unisce insieme il kernel è ''make'', al quale si passa un ''target'' che specifica cosa si vuole compilare. Il capitolo 4 è andato oltre gli obiettivi base necessari alla corretta compilazione del kernel, ma il sistema di compilazione del kernel ha anche una larga scala di altri ''target''. Questo capitolo dettaglia questi target, e per cosa possono venir utilizzati.<br />
<br />
* Nota di prima traduzione: nel testo, target è stato tradotto a volte come obiettivi, anche se forse sarebbe meglio parlare di etichette dal momento che in un Makefile si chiamano così, la maggior parte delle volte inceve si è preferito lasciare la parola in lingua originale ''italianizzandola'' in ''target'' senza ''s''. <br />
<br />
Tutti questi target vengono passati al programma ''make'' a linea di comando, e un numero di questi può venir raggruppato insieme se lo si desidera. Per esempio:<br />
<br />
<pre><br />
$ make mrproper xconfig<br />
</pre><br />
<br />
I target sono suddivisi sotto per differenti tipi nelle sezioni seguenti.<br />
<br />
Si può avere un sommario della maggior parte di essi eseguendo nella directory di compilazione:<br />
<br />
<pre><br />
$ make help<br />
</pre><br />
<br />
Questo target mostra molti dei target comuni di ''make'' che vengono descritti nel resto del capitolo.<br />
<br />
<br />
== Target informativi ==<br />
<br />
La tabella 10-1 mostra i target che stampano la versione del kernel, basato su un numero di opzioni differenti. Sono solitamente usati da script per determinare la versione del kernel che si sta per compilare.<br />
<br />
''Tabella 10-1. Target informativi''<br />
<br />
<table border="1"><br />
<tr><br />
<td width="50%">'''Target'''</td><br />
<td>'''Descrizione'''</td><br />
</tr><br />
<tr><br />
<td width="50%">kernelrelease</td> <br />
<td width="50%">Visualizza la versione corrente del kernel, la stessa determinata dal sistema di compilazione.</td><br />
</tr><br />
<tr><br />
<td width="50%">kernelversion</td> <br />
<td width="50%">Visualizza la versione corrente del kernel, come detto dal Makefile principale. Questa differisce da ''kernelrelease'' dal fatto che non usa altre informazioni di versione aggiuntive basate su opzioni di configurazione o file ''localversion''.</td><br />
</tr><br />
</table><br />
<br />
<br />
== Target di pulizia ==<br />
<br />
La tabella 10-2 mostra i target che semplicemente rimuovono i file delle compilazioni precedenti. Il loro uso è vivamente consigliato per essere sicuri di non contaminare le nuove compilazioni con file abbandonati che possono essere stati compilati con opzioni differenti. Differiscono da quanto eliminano; a volte si preferisce mantenere file che si è cambiati.<br />
<br />
''Table 10-2. Target di pulizia''<br />
<br />
<table border="1"><br />
<tr><br />
<td width="50%">'''Target'''</td><br />
<td width="50%">'''Descrizione'''</td><br />
</tr><br />
<tr><br />
<td width="50%">clean</td><br />
<td width="50%">Rimuove la maggior parte dei file generati dal sistema di compilazione del kernel, ma mantiene la configurazione del kernel.</td><br />
</tr><br />
<tr><br />
<td width="50%">mrproper</td><br />
<td width="50%">Rimuove tutti i file generati dal sistema di compilazione del kernel, inclusa la configurazione e alcuni file di backup.</td><br />
</tr><br />
<tr><br />
<td width="50%">distclean</td><br />
<td width="50%">Fa tutto ci&ograve; che mrproper fa e rimuove alcuni editor backup e file patch abbandonate.</td><br />
</tr><br />
</table><br />
<br />
<br />
== Target di configurazione ==<br />
<br />
<br />
La tabella 10-3 mostra i target che permettono al kernel di essere configurato in un largo campo di modi differenti.<br />
<br />
''Tabella 10-3. Target di configurazione''<br />
<br />
<table border="1"><br />
<tr><br />
<td width="50%">'''Target'''</td><br />
<td width="50%">'''Descrizione'''</td><br />
</tr><br />
<tr><br />
<td width="50%">config</td><br />
<td width="50%">Aggiorna la configurazione corrente del kernel usando il programma a riga di comando.</td><br />
</tr><br />
<tr><br />
<td width="50%">menuconfig</td><br />
<td width="50%">Aggiorna la configurazione corrente del kernel usando un programma a menu testuale.</td><br />
</tr><br />
<tr><br />
<td width="50%">xconfig</td><br />
<td width="50%">Aggiorna la configurazione corrente del kernel usando un programma grafico basato su librerie QT.</td><br />
</tr><br />
<tr><br />
<td width="50%">gconfig</td><br />
<td width="50%">Aggiorna la configurazione corrente del kernel usando un programma grafico basato su librerie GTK+.</td><br />
</tr><br />
<tr><br />
<td width="50%">oldconfig</td><br />
<td width="50%">Aggiorna la configurazione corrente del kernel usando il file .config corrente e chiedendo conferma per ogni nuova opzione che aggiunta al kernel.</td><br />
</tr><br />
<tr><br />
<td width="50%">silentoldconfig</td><br />
<td width="50%">Come oldconfig, ma non stampa nulla su schermo tranne quando una questione ha bisogno di una risposta.</td><br />
</tr><br />
<tr><br />
<td width="50%">randconfig</td><br />
<td width="50%">Genera una nuova configurazione di kernel con risposte casuali a tutte le differenti opzioni.</td><br />
</tr><br />
<tr><br />
<td width="50%">defconfig</td><br />
<td width="50%">Genera una nuova configurazione del kernel che usa le risposte predefinite per tutte le ozioni. I valori predefiniti sono presi da un file situato in ''arch/$ARCH/defconfig, dove $ARCH si riferisce alla specifica architettura per il quale il kernel viene compilato.</td><br />
</tr><br />
<tr><br />
<td width="50%">allmodconfig</td><br />
<td width="50%">Genera una nuova configurazione del kernel nel quale i moduli sono attivati dove possibile.</td><br />
</tr><br />
<tr><br />
<td width="50%">allyesconfig</td><br />
<td width="50%">Genera una nuova configurazione del kernel nel quale tutte le opzioni sono impostate a ''yes''.</td><br />
</tr><br />
<tr><br />
<td width="50%">allnoconfig</td><br />
<td width="50%">Genera una nuova configurazione del kernel nel quale tutte le opzioni sono impostate a ''no''.</td><br />
</tr><br />
</table><br />
<br />
Notare che allyesconfig, allmodconfig, allnoconfig, e randconfig target prendono anche vantaggio della variabile d'ambiente KCONFIG_ALLCONFIG. Se quella variabile punta a un file, quel file verrà usato come lista di valori di configurazione che si richiede essere imposti a uno specifico valore. In altre parole, il file scavalca il comportamento normale di ''make'' target.<br />
<br />
Per esempio, se il file ''~/linux/must_be_set'' contiene le seguenti variabili:<br />
<br />
<pre><br />
$ cat ~/linux/must_be_set<br />
CONFIG_SWAP=y<br />
CONFIG_DEBUG_FS=y<br />
</pre><br />
<br />
e si inserisce ''make allnoconfig'' con l'appropriata variabile d'ambiente KCONFIG_ALLCONFIG attiva:<br />
<br />
<pre><br />
$ KCONFIG_ALLCONFIG=../must_be_set make allnoconfig<br />
$ grep CONFIG_SWAP .config<br />
CONFIG_SWAP=y<br />
</pre><br />
<br />
quindi i risultati includono:<br />
<br />
<pre><br />
$ grep CONFIG_DEBUG_FS .config<br />
CONFIG_DEBUG_FS=y<br />
</pre><br />
<br />
Questa variabile non sarebbe stata impostata a ''y'' altrimenti.<br />
<br />
Se la variabile KCONFIG_ALLCONFIG non è impostata, il sistema di compilazione controlla i file nella directory di compilazione a più alto livello con nome:<br />
<br />
* ''allmod.config''<br />
<br />
* ''allno.config''<br />
<br />
* ''allrandom.config''<br />
<br />
* ''allyes.config''<br />
<br />
Se qualsiasi di questi file è presente, la compilazione li usa come lista di valori di configurazione che devono essere forzati ai valori specificati. Se nessuno di questi file viene trovato, il sistema di compilazione alla fine cerca un file chiamato ''all.config'' per una lista di valori di configurazione forzati.<br />
<br />
Si possono usare questi file differenti per impostare una buona configurazione di base che funzionerà sempre. In seguito le altre opzioni di configurazione possono essere usate per generare differenti configurazioni di test per le situazioni che lo necessitano.<br />
<br />
<br />
== Target di compilazione ==<br />
<br />
<br />
La tabella 10-4 mostra i target che compilano il kernel stesso in una molteciplità di metodi.<br />
<br />
''Table 10-4. Target di compilazione''<br />
<br />
<table border="1"><br />
<tr><br />
<td width="50%">'''Target'''</td><br />
<td width="50%">'''Descrizione'''</td><br />
</tr><br />
<tr><br />
<td width="50%">all</td><br />
<td width="50%">Compila tutti i differenti target necessari al kernel per venir usato. Ciò include sia i moduli che le porzioni statiche del kernel.</td><br />
</tr><br />
<tr><br />
<td width="50%">vmlinux</td><br />
<td width="50%">Compila solo la parte statica del kernel, nessun modulo caricabile.</td><br />
</tr><br />
<tr><br />
<td width="50%">modules</td><br />
<td width="50%">Compila tutti i moduli caricabili del kernel per questa configurazione.</td><br />
</tr><br />
<tr><br />
<td width="50%">module_install</td><br />
<td width="50%">Installa tutti i moduli nella specifica locazione. Se nessuna posizione è specificata con la variabile d'ambiente INSTALL_MODULE_PATH, vengono installati nella directory root predefinita della macchina.</td><br />
</tr><br />
<tr><br />
<td width="50%">dir/</td><br />
<td width="50%">Compila tutti i file nella directory specificata e in tutte le sottodirectory sotto questa.</td><br />
</tr><br />
<tr><br />
<td width="50%">dir/file.[o|i|s]</td><br />
<td width="50%">Compila solo i file specificati.</td><br />
</tr><br />
<tr><br />
<td width="50%">dir/file.ko</td><br />
<td width="50%">Compila tutti i file necessari e li unisce per formare il modulo specificato.</td><br />
</tr><br />
<tr><br />
<td width="50%">tags</td><br />
<td width="50%">Compila tutti i tag necessari che la maggior parte degli editor di testo possono usare mentre modificano il codice sorgente.</td><br />
</tr><br />
<tr><br />
<td width="50%">TAGS</td><br />
<td width="50%">Compila tutti i tag necessari che la maggior parte degli editor di testo possono usare mentre modificano il codice sorgente.</td><br />
</tr><br />
<tr><br />
<td width="50%">cscope</td><br />
<td width="50%">Compila un'immagine ''cscope'', utile nel sorgente treesearches, dell'albero sorgente per l'architettura specificata dal file di configurazione (non tutti i file sorgenti del kernel).</td><br />
</tr><br />
</table><br />
<br />
Potete anche passare un numero di variabili d'ambiente a ''make'' che cambierà la compilazione. Queste possono essere specificate per quasi ogni target, come mostrato nella tabella 10-5.<br />
<br />
''Tabella 10-5. Variabili d'ambiente''<br />
<br />
<table border="1"><br />
<tr><br />
<td width="33%">'''Variabile'''</td><br />
<td width="33%">'''Valore'''</td><br />
<td width="33%">'''Descrizione'''</td><br />
</tr><br />
<tr><br />
<td width="10%">V</td><br />
<td width="10%">0</td><br />
<td width="80%">Questa dice al sistema di compilazione di funzionare in maniera silenziosa, mostrando solo il file in compilazione, e non il comando intero che sta girando ai fini di compilare il file. Questa è l'opzione predefinita per il sistema di compilazione.</td><br />
</tr><br />
<tr><br />
<td width="10%">V</td><br />
<td width="10%">1</td><br />
<td width="80%">Questo dice al sistema di compilazione di operare in modalità prolissa, mostrando il comando completo che si sta usando per generare ognuno dei file specifici.</td><br />
</tr><br />
<tr><br />
<td width="10%">O</td><br />
<td width="10%">dir</td><br />
<td width="80%">Questo dice al sistema di compilazione di mettere tutti i file di output nella directory ''dir'', inclusi i file di configurazione del kernel. Questo permette di compilare il kernel da un filesystem in sola lettura e avere l'output posto in un'altra posizione.</td><br />
</tr><br />
<tr><br />
<td width="10%">C</td><br />
<td width="10%">1</td><br />
<td width="80%">Questo ''checksall'' i file C che verranno compilati con lo strumento ''sparse'', che scova gli errori comuni di configurazione nei file sorgenti del kernel. ''sparse'' può essere scaricato usando ''git'' da ''git://git.kernel.org/pub/scm/devel/sparse/sparse.git''. Snapshot giornalieri possono essere trovati a ''http://www.codemonkey.org.uk/projects/git-snapshots/sparse/''. Maggiori informazioni su come usare ''sparse'' possono essere reperite nel file Documentation/sparse.txt nell'albero dei sorgenti del kernel.</td><br />
</tr><br />
<tr><br />
<td width="10%">C</td><br />
<td width="10%">2</td><br />
<td width="80%">Questa ''forcesall'' i file C da controllare con lo strumento ''sparse'', anche se essi non devono essere compilati.</td><br />
</tr><br />
</table><br />
<br />
<br />
== Target di pacchettizzazione ==<br />
<br />
<br />
Questi target impacchettano un kernel compilato in un pacchetto autonomo che può essere installato su un'ampia varietà di macchine differenti, come mostrato nella tabella 10-6.<br />
<br />
''Tabella 10-6. Packaging target''<br />
<br />
<table border="1"><br />
<tr><br />
<td width="30%">'''Target'''</td><br />
<td width="70%">'''Descrizione'''</td><br />
</tr><br />
<tr><br />
<td width="30%">rpm</td><br />
<td width="70%">Compila il kernel e poi lo impacchetta in un pacchetto RPM che può essere installato.</td><br />
</tr><br />
<tr><br />
<td width="30%">rpm-pkg</td><br />
<td width="70%">Crea un pacchetto RPM sorgente che contiene un kernel di base.</td><br />
</tr><br />
<tr><br />
<td width="30%">binrpmpkg</td><br />
<td width="70%">Crea un pacchetto RPM che contiene un kernel compilato e i moduli.</td><br />
</tr><br />
<tr><br />
<td width="30%">deb-pkg</td><br />
<td width="70%">Crea un pacchetto Debian che contiene un kernel compilato e i moduli.</td><br />
</tr><br />
<tr><br />
<td width="30%">tar-pkg</td><br />
<td width="70%">Crea un tarball che contiene un kernel compilato e i moduli.</td><br />
</tr><br />
<tr><br />
<td width="30%">targz-pkg</td><br />
<td width="70%">Crea un tarball compresso con ''gzip'' che contiene il kernel compilato e i moduli.</td><br />
</tr><br />
<tr><br />
<td width="30%">tarbz2-pkg</td><br />
<td width="70%">Crea un tarball compresso con ''bzip2'' che contiene il kernel compilato e i moduli.</td><br />
</tr><br />
</table><br />
<br />
<br />
== Target di documentazione ==<br />
<br />
<br />
La tabella 10-7 mostra target che costruiscono la documentazione interna del kernel in molteplici formati.<br />
<br />
''Tabella 10-7'' target di documentazione''<br />
<br />
<table border="1"><br />
<tr><br />
<td width="30%">'''Target'''</td><br />
<td width="70%">'''Descrizione'''</td><br />
</tr><br />
<tr><br />
<td width="30%">xmldocs</td><br />
<td width="70%">Crea la documentazione del kernel come file XML DocBook.</td><br />
</tr><br />
<tr><br />
<td width="30%">psdocs</td><br />
<td width="70%">Crea la documentazione del kernel come file Postscript.</td><br />
</tr><br />
<tr><br />
<td width="30%">pdfdocs</td><br />
<td width="70%">Crea la documentazione del kernel come file PDF.</td><br />
</tr><br />
<tr><br />
<td width="30%">htmldocs</td><br />
<td width="70%">Crea la documentazione del kernel come file HTML.</td><br />
</tr><br />
<tr><br />
<td width="30%">mandocs</td><br />
<td width="70%">Crea la documentazione del kernel come un insieme di pagine man, che possono essere installate con il target ''install-mandocs''.</td><br />
</tr><br />
</table><br />
<br />
<br />
== Target per architetture specifiche ==<br />
<br />
<br />
Ogni architettura kernel ha un insieme di target specifici unici a se stessi. La tabella 10-8 mostra i target disponibili per l'architettura Intel a 32-bit.<br />
<br />
''Tabella 10-8. Target specifici per architettura 32-bit Intel''<br />
<br />
<table border="1"><br />
<tr><br />
<td width="30%">'''Target'''</td><br />
<td width="70%">'''Descrizione'''</td><br />
</tr><br />
<tr><br />
<td width="30%">bzImage</td><br />
<td width="70%">Crea un'immagine compressa del kernel e la pone nel file ''arch/i386/boot/bzImage''. Questo è il target predefinito per i kernel i386.</td><br />
</tr><br />
<tr><br />
<td width="30%">install</td><br />
<td width="70%">Installa l'immagine del kernel usando il programma specifico di distribuzione ''/sbin/installkernel''. Notare che questo non installa i moduli del kernel; ciò deve essere fatto con il target ''module_install''.</td><br />
</tr><br />
<tr><br />
<td width="30%">bzdisk</td><br />
<td width="70%">Crea un'immagine di boot per floppy e la scrive sul dispositivo ''/dev/fd0''.</td><br />
</tr><br />
<tr><br />
<td width="30%">fdimage</td><br />
<td width="70%">Crea un'immagine di boot per floppy e la mette nel file ''arch/i386/boot/fdimage''. Il pacchetto ''mtools'' deve essere presente sul vostro sistema affinché questo funzioni correttamente.</td><br />
</tr><br />
<tr><br />
<td width="30%">isoimage</td><br />
<td width="70%">Crea un'immagine di boot CD-ROM e la pone nel file ''arch/i386/boot/image.iso''. Il pacchetto ''syslinux'' deve essere presente nel vostro sistema affiché questo funzioni correttamente.</td><br />
</tr><br />
</table><br />
<br />
<br />
== Target di analisi ==<br />
<br />
<br />
La tabella 10-9 mostra i target che sono d'aiuto per trovare problemi nel codice del kernel. &Egrave; una buona idea creare una lista degli spazi di stack quando si crea del nuovo codice per determinare che i vostri cambiamenti non stiano prendendo troppo spazio di stack del kernel. Il target namespacecheck è utile per determinare se i vostri cambiamenti possono, in sicurezza, aggiungere i propri simboli al namespace globale del kernel.<br />
<br />
''Tabella 10-9. Targets di analisi''<br />
<br />
<table border="1"><br />
<tr><br />
<td width="30%">'''Target'''</td><br />
<td width="70%">'''Descrizione'''</td><br />
</tr><br />
<tr><br />
<td width="30%">checkstat</td><br />
<td width="70%">Genera una lista di funzioni che usano la maggior parte dello spazio di stack del kernel.</td><br />
</tr><br />
<tr><br />
<td width="30%">namespace check</td><br />
<td width="70%">Genera una lista di tutti i simboli del kernel e dei loro namespace. Questa sarà una lunga lista.</td><br />
</tr><br />
</table><br />
<br />
<br />
----<br />
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].<br />
----<br />
<br />
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch10.pdf ''Capitolo originale'']<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LKN:_Configurare_e_Compilare&diff=15329LKN: Configurare e Compilare2008-06-17T10:42:08Z<p>MaXeR: </p>
<hr />
<div>''Torna all'indice: [[Linux Kernel in a Nutshell]]''<br />
<br />
__TOC__<br />
<br />
Ora che avete scaricato i sorgenti della versione del kernel che avete scelto e che li avete installati in una cartella locale, è giunto il momento di compilare il codice. Il primo passo è di configurare il kernel con le opzioni appropriate; in seguito il kernel potrà essere compilato. Entrambe le operazioni sono portate a termine attraverso lo strumento standard ''make''.<br />
<br />
== '''Creare una configurazione''' ==<br />
<br />
La configurazione del kernel risiede in un file chiamato ''.config'' nella cartella principale dell'albero dei sorgenti del kernel. Se avete appena estratto il codice sorgente del kernel, non vi sarà alcun file ''.config'', quindi dovrà essere creato. Il file può essere creato da zero, creato partendo dalla "configurazione predefinita", preso da una versione funzionante del kernel, o preso da quello rilasciato da una distribuzione. Copriremo i primi due metodi adesso, gli ultimi due metodi nel [[LKN:_Personalizzare_un_Kernel|Capitolo 7]].<br />
<br />
==='''Configurare dall'inizio'''===<br />
Il modo più spartano per configurare un kernel è usare il metodo ''make config'':<br />
<pre>$ cd linux-2.6.17.10<br />
$ make config<br />
make config<br />
scripts/kconfig/conf arch/i386/Kconfig<br />
*<br />
* Linux Kernel Configuration<br />
*<br />
*<br />
* Code maturity level option<br />
*<br />
Prompt for development and/or incomplete code/drivers (EXPERIMENTAL) [Y/n/?]<br />
Y<br />
<br />
*<br />
* General setup<br />
*<br />
Local version - append to kernel release (LOCALVERSION) []<br />
Automatically append version information to the version string<br />
(LOCALVERSION_AUTO) [Y/n/?] Y<br />
...</pre><br />
Il programma di configurazione del kernel procederà attraverso ogni opzione di configurazione e chiederà se la si vuole abilitare o meno. Tipicamente, le possibilità per ogni opzione sono presentate nella forma <tt>[Y/m/n/?]</tt>. La lettera maiuscola è la scelta predefinita, e può essere selezionata semplicemente premendo il tasto Invio. Le quattro scelte sono:<br />
* <tt>Y</tt> Compilare direttamente nel kernel.<br />
* <tt>n</tt> Lasciare completamente al di fuori del kernel.<br />
* <tt>m</tt> Compilare come modulo, da caricare se necessario.<br />
* <tt>?</tt> Stampa un breve messaggio descrittivo e ripropone il quesito.<br />
Il kernel contiene quasi duemila opzioni di configurazioni differenti, quindi rispondere ad una domanda su ognuna di esse richiede un notevole dispendio di tempo. Fortunatamente, vi è un modo più facile di configurare un kernel: basare la configurazione su di un'altra precostituita.<br />
<br />
==='''Opzioni della configurazione predefinita'''===<br />
Ogni versione del kernel ha una configurazione "predefinita". Questa configurazione è in parte basata sulle scelte che il responsabile di quella architettura crede siano le opzioni migliori da essere usate. In alcuni casi, è la configurazione usata dal responsabile stesso sulle proprie macchine. Questo è vero per l'architettura i386, dove la configurazione predefinita corrisponde strettamente a quella che Linus Torvalds usa per la sua macchina di sviluppo principale.<br />
<br />
Per creare questa configurazione predefinita, eseguite:<br />
<pre>$ cd linux-2.6.17.10<br />
$ make defconfig</pre><br />
Un'enorme quantità di opzioni di configurazione scorrerà velocemente sullo schermo, e un file ''.config'' sarà creato e piazzato nella cartella del kernel. Il kernel è ora correttamente configurato, ma dovrebbe essere adattato alla vostra macchina per assicurarsi che funzioni correttamente.<br />
<br />
==='''Modificare la configurazione'''===<br />
Ora che abbiamo un file di configurazione di base, dovrebbe essere modificato per supportare l'hardware presente nel vostro sistema. Per ulteriori dettagli su come individuare quali opzioni siano necessarie per ottenere ciò, potete leggere il [[LKN:_Personalizzare_un_Kernel|Capitolo 7]]. Qui mostreremo come selezionare le opzioni che potreste voler cambiare.<br />
<br />
Ci sono tre differenti strumenti interattivi per la configurazione del kernel: uno basato su terminale chiamato ''menuconfig'', uno grafico basato sulle GTK+ chiamato ''gconfig'', e un altro grafico basato sulle QT chiamato ''xconfig''.<br />
<br />
==='''Configurazione tramite terminale'''===<br />
Il metodo chiamato '''menuconfig''' per configurare un kernel è un programma per terminale che dà modo di muoversi nella configurazione del kernel usando i tasti freccia della tastiera. Per avviare questa modalità di configurazione, digitate:<br />
<pre>$ make menuconfig</pre><br />
Vi apparirà una schermata molto simile a quella di figura 4-1.<br />
<br />
[[Immagine:Menuconfig_1.png|center|500px|thumb|''Figura 4-1. Schermata iniziale di menuconfig'']]<br />
<br />
Le istruzioni per navigare attraverso il programma, e i significati dei diversi caratteri, sono mostrati in cima allo schermo. Il resto dello schermo contiene le diverse opzioni di configurazione.<br />
<br />
La configurazione del kernel è divisa in sezioni. Ogni sezione contiene opzioni che corrispondo ad argomenti specifici. Al loro interno possono esserci sottosezioni per vari argomenti specifici. Per esempio tutti i driver per le periferiche possono essere trovati sotto l'opzione del menu principale <tt>Device Drivers ---></tt>.<br />
<br />
[[Immagine:Menuconfig_2.png|center|500px|thumb|''Figura 4-2. Selezione dell'opzione Device Drivers'']]<br />
<br />
Per aprire questo menu, premete la freccia in basso nove volte, finché la riga <tt>Device Drivers ---></tt> non è sottolineata, come mostrato in figura 4-2.<br />
<br />
Premete poi il tasto Invio. Vi porterà nel sotto-menu <tt>Device Drivers</tt> e lo mostrerà come mostrato nella figura 4-3.<br />
<br />
[[Immagine:Menuconfig_3.png|center|500px|thumb|''Figura 4-3. Sottomenu Device Drivers'']]<br />
<br />
Potete continuare a muovervi nella gerarchia dei menu allo stesso modo. Per visualizzare il sotto-menu <tt>Generic Driver Options</tt> premete Invio di nuovo, e vedrete se tre opzioni mostrate in figura 4-4.<br />
<br />
[[Immagine:Menuconfig_4.png|center|500px|thumb|''Figura 4-4. Sottomenu Generic Driver Options'']]<br />
<br />
Le prime due opzioni hanno un simbolo <tt>[*]</tt> vicino a esse. Questo significa che quest'opzione è selezionata (perché il simbolo <tt>*</tt> sta al centro dei due caratteri <tt>[]</tt>), e che questa è un'opzione del tipo sì-o-no. La terza opzione ha un segno <tt>< ></tt>, che mostra che questa opzione può essere inserita nel kernel (<tt>Y</tt>), compilata come modulo (<tt>M</tt>), o esclusa del tutto (<tt>N</tt>).<br />
<br />
Se l'opzione è selezionata con <tt>Y</tt>, le parentesi ad angolo conterranno un <tt>*</tt>. Se è selezionata come modulo con una <tt>M</tt>, conterranno una lettera <tt>M</tt>. Se è disabilitata con <tt>N</tt>, mostreranno solo uno spazio bianco.<br />
<br />
Così, se desiderate cambiare queste tre opzioni per selezionare solo driver che non necessitano di firmware esterno in tempo di compilazione, disabilitate l'opzione per impedire che il firmware sia compilato, e compilate il caricatore del firmware in spazio utente come modulo, digitando <tt>Y</tt> per la prima opzione, <tt>N</tt> per la seconda e <tt>M</tt> per la terza, rendendo la schermata come quella in figura 4-5.<br />
<br />
[[Immagine:Menuconfig_5.png|center|500px|thumb|''Figura 4-5. Sottomenu Generic Driver Options cambiato'']]<br />
<br />
Quando avete completato le vostre modifiche in questa schermata, premete il tasto Esc o la freccia destra seguita dal tasto Invio per lasciare questo sottomenu. Tutte le opzioni del kernel possono essere esplorate in questa maniera.<br />
<br />
Quando avete finito di fare tutte le modifiche che desideriate apportare alla configurazione del kernel, uscite dal programma premendo il tasto Esc quando siete nel menu principale.<br />
<br />
[[Immagine:Menuconfig_6.png|center|500px|thumb|''Figura 4-6. Salvare le opzioni del kernel'']]<br />
<br />
Vi sarà mostrata la schermata in figura 4-6, che vi chiede se desiderate salvare la vostra modificata configurazione.<br />
<br />
Premete Invio per salvare la configurazione, o, se volete eliminare ogni modifica fatta, digitate la freccia destra per selezionare la voce <tt>< No ></tt> e premete Invio.<br />
<br />
<br />
==='''Metodi grafici di configurazione'''===<br />
I metodi di configurazione del kernel ''gconfig'' e ''xconfig'' usano un programma grafico per permettervi di modificare la configurazione. I due metodi sono pressoché identici, l'unica differenza risiede nei diversi strumenti grafici attraverso i quali sono scritti. ''gconfig'' è scritto usando il toolkit GTK+ e ha uno schermo diviso in due regioni, come mostrato in figura 4-7.<br />
<br />
[[Immagine:Gconfig_1.png|center|500px|thumb|''Figura 4-7. Schermata di make gconfig'']]<br />
<br />
Il metodo ''xconfig'' è scritto usando il toolkit QT e ha uno schermo diviso in tre regioni, come in figura 4-8.<br />
<br />
[[Immagine:Xconfig_1.png|center|500px|thumb|''Figura 4-8. Schermata di make xconfig'']]<br />
<br />
Usate il mouse per navigare nei sottomenu e selezionare le opzioni. Per esempio, nella figura 4-8 potreste usarlo per selezionare il sottomenu <tt>Generic Driver Options</tt> del menu <tt>Device Drivers</tt>. Questo cambierà la schermata di ''xconfig'' e la farà diventare quella dell'immagine 4-9. <br />
<br />
[[Immagine:Xconfig_2.png|center|500px|thumb|''Figura 4-9. Generic Driver Options in make xconfig'']]<br />
<br />
La corrispondente immagine di ''gconfig'' è in figura 4-10.<br />
<br />
[[Immagine:Gconfig_2.png|center|500px|thumb|''Figura 4-10. Generic Driver Options in make gconfig'']]<br />
<br />
Modificare questo sottomenu per disabilitare la seconda opzione e rendere la terza opzione compilata come modulo genera le schermate apparire come nelle figure 4-11 e 4-12.<br />
<br />
[[Immagine:Xconfig_3.png|center|500px|thumb|''Figura 4-11. Generic Driver Options in make xconfig, modificato'']]<br />
[[Immagine:gconfig_3.png|center|500px|thumb|''Figura 4-12. Generic Driver Options in make gconfig, modificato'']]<br />
<br />
Notate che nel metodo ''gconfig'' un riquadro con il segno di visto significa che l'opzione sarà compilata nel kernel, laddove una linea nel riquadro significa che l'opzione sarà compilata come modulo. Nel metodo ''xconfig'' un'opzione compilata come modulo sarà mostrata con un punto nel riquadro.<br />
<br />
Entrambi questi metodi vi chiedono di salvare la configurazione quando uscite dal programma, e offrono la possibilità di scrivere quella configurazione in un altro file. Potete così creare molteplici, distinte configurazioni.<br />
<br />
<br />
=='''Compilazione del kernel'''==<br />
Ora che avete creato la configurazione che intendete usare, dovete compilare il kernel. Questo è semplice come digitare un comando di un parola:<br />
<pre>$ make<br />
CHK include/linux/version.h<br />
UPD include/linux/version.h<br />
SYMLINK include/asm -> include/asm-i386<br />
SPLIT include/linux/autoconf.h -> include/config/*<br />
CC arch/i386/kernel/asm-offsets.s<br />
GEN include/asm-i386/asm-offsets.h<br />
CC scripts/mod/empty.o<br />
HOSTCC scripts/mod/mk_elfconfig<br />
MKELF scripts/mod/elfconfig.h<br />
HOSTCC scripts/mod/file2alias.o<br />
HOSTCC scripts/mod/modpost.o<br />
HOSTCC scripts/mod/sumversion.o<br />
HOSTLD scripts/mod/modpost.o<br />
HOSTCC scripts/kallsyms<br />
HOSTCC scripts/conmakehash<br />
HOSTCC scripts/bin2c<br />
CC init/main.o<br />
CHK include/linux/compile.h<br />
UPD include/linux/compile.h<br />
CC init/version.o<br />
CC init/do_mounts.o<br />
...</pre><br />
<br />
Eseguire ''make'' fa sì che il sistema di compilazione del kernel usi il file di configurazione che avete selezionato per compilare un kernel e tutti i moduli necessari per supportare tale configurazione. Mentre il kernel è in compilazione, ''make'' mostra cosa sta correntemente succedendo ai singoli file, insieme a tutti gli avvertimenti ("warnings", N.d.T.) e gli errori di compilazioni.<br />
<br />
Se la compilazione del kernel termina senza errori, avete creato con successo l'immagine di un kernel. Comunque deve essere propriamente installata prima che proviate ad avviarla. Leggete il [[LKN:_Installare_ed_Avviare_con_un_Kernel|Capitolo 5]] per sapere come fare.<br />
<br />
È molto raro avere errori di compilazione quando state compilando una versione del kernel rilasciata. Se vi capita, riportateli agli sviluppatori del kernel Linux cosicché possano essere corretti.<br />
<br />
nota: Versioni del kernel più vecchie, precedenti al rilascio 2.6 richiedevano l'ulteriore passo ''make modules'' per compilare tutti i moduli necessari. Questo non è più necessario.<br />
<br />
=='''Opzioni di compilazione avanzate'''==<br />
Il sistema di compilazione del kernel consente di fare molte altre cose, oltre a compilare l'intero kernel e i relativi moduli. Il Capitolo 10 contiene l'intero elenco delle opzioni che il sistema di compilazione fornisce. In questa sezione discuteremo alcune di queste opzioni avanzate. Per avere una descrizione completa di come usare altre opzioni avanzate, fate riferimento alla documentazione dentro il kernel stesso, che può essere trovata nella cartella ''Documentation/kbuild'' nei sorgenti.<br />
<br />
==='''Velocizzare la compilazione in macchine multiprocessore'''===<br />
Il sistema di compilazione del kernel lavora molto bene come operazione che può essere divisa in pezzi più piccoli e assegnati a diversi processori. Facendo questo, potete usare la piena potenza di una macchina multiprocessore e ridurre considerevolmente il tempo di compilazione del kernel.<br />
<br />
Per compilare un kernel in modo parallelo, usate l'opzione ''-j'' del comando ''make''. È meglio dare un numero all'opzione ''-j'' che corrisponda al doppio del numero di processori nel sistema. Quindi, per macchine con due processori, usate:<br />
<pre>$ make -j4</pre><br />
e per macchine con quattro processori, usate:<br />
<pre>$ make -j8</pre><br />
Se non passate un numero all'opzione ''-j'':<br />
<pre>$ make -j</pre><br />
il sistema di compilazione creerà un nuovo filo ("thread", N.d.T.) per ogni sottocartella nell'albero delle cartelle del kernel, che può facilmente rendere la vostra macchina non in grado di rispondere ai comandi, e impiegare molto più tempo per completare la compilazione. Per questo si raccomanda di passare sempre un valore numerico all'opzione ''-j''.<br />
<br />
==='''Compilare solo una parte del kernel'''===<br />
Quando ci si dedica allo sviluppo del kernel, a volte si desidera compilare solo una specifica sottocartella, o un singolo file dell'intero albero del kernel. Il sistema di compilazione lo consente agevolmente. Per compilare selettivamente una sottocartella, specificatela nel comando di compilazione. Per esempio, per compilare i file nella cartella '''drivers/usb/serial''', inserite: <pre>$ make drivers/usb/serial</pre><br />
Usando questa sintassi, comunque, non si compilerà l'immagine finale del modulo in quella cartella. Per fare questo, potete usare l'opzione <tt>M=</tt>argomento:<pre>$ make M=drivers/usb/serial</pre>che compilerà tutti i file necessari in quella cartella e collegherà le immagini finali dei moduli.<br />
<br />
Quando si compila una singola cartella in uno dei modi mostrati, l'immagine finale del kernel non viene ricollegata. Comunque ogni cambiamento che era stato effettuato alle sottocartelle non influenzerà l'immagine finale del kernel, che probabilmente non è quello che desiderate. Eseguite alla fine un:<pre>$ make</pre> perché il sistema di compilazione controlli tutti i file oggetto cambiati e colleghi in modo proprio l'immagine finale del kernel.<br />
<br />
Per compilare un solo specifico file nell'albero del kernel, semplicemente passatelo come parametro a ''make''. Per esempio, se desiderate compilare il modulo ''drivers/usb/serial/visor.ko'', inserite:<pre>$ make drivers/usb/serial/visor.ko</pre><br />
Il sistema di compilazione compilerà tutti i file necessari per il modulo visor.ko, e farà il collegamento finale per creare il modulo.<br />
<br />
==='''Sorgente in un posto, destinazione in un altro'''===<br />
Alle volte è più semplice avere i sorgenti del kernel in un posto accessibile in sola lettura (come un CD-ROM, o in un sistema di controllo del codice sorgente), e collocare il risultato della compilazione altrove, così da non alterare l'albero originale del sorgente. Il sistema di compilazione lo realizza facilmente, richiedendo il solo argomento <tt>O=</tt> per specificare dove collocare l'output della compilazione. Per esempio se i sorgenti del kernel sono in un CD-ROM montato in ''/mnt/cdrom/'' e desiderate mettere i file compilati nella vostra cartella locale, inserite:<pre>$ cd /mnt/cdrom/linux-2.6.17.11<br />
$ make O=~/linux/linux-2.6.17.11</pre><br />
Tutti i file compilati saranno creati nella cartella ''~/linux/linux-2.6.17.11''. Notate che questa opzione <tt>O=</tt> dovrebbe essere passata anche alle opzioni di configurazione della compilazione cosicché la configurazione sia correttamente collocata nella cartella di destinazione e non in quella contenente il codice sorgente.<br />
<br />
==='''Architetture differenti'''===<br />
Una caratteristica molto utile è la costruzione di un kernel in una compilazione incrociata, per permettere a una macchina più potente di compilare un kernel per una sistema integrato più piccolo, o anche solo per controllare una compilazione per un'architettura diversa per assicurare che a un cambiamento nel codice sorgente non danneggi qualcosa di inaspettato. Il sistema di compilazione del kernel consente di specificare un'architettura diversa da quella della macchina corrente con il parametro <tt>ARCH=</tt>argomento. Il sistema di compilazione consente, inoltre, di specificare il compilatore che si desidera usare con il parametro <tt>CC=</tt>argomento o uno strumento per concatenare ("toolchain", N.d.T.) la compilazione incrociata con <tt>CROSS_COMPILE</tt> argomento.<br />
<br />
Per esempio, per avere la configurazione predefinita dell'architettura x86_64, si può inserire:<br />
<br />
<pre>$ make ARCH=x86_64 defconfig</pre><br />
<br />
Per compilare l'intero kernel con uno strumento per concatenare la compilazione situato in ''/usr/local/bin'', si può inserire:<br />
<pre>$ make ARCH=arm CROSS_COMPILE=/usr/local/bin/arm-linux-</pre><br />
<br />
È utile anche per i kernel non ottenuti con compilazione incrociata cambiare ciò che il sistema di costruzione del kernel usa per il compilatore. Esempi di questo sono l'utilizzo dei programmi ''distcc'' o ''ccache'', i quali riducono notevolmente il tempo di compilazione di un kernel. Per usare il programma ''ccache'' come parte del sistema di costruzione del kernel, digitate:<br />
<br />
<pre>$ make CC="ccache gcc"</pre><br />
<br />
Per usare contemporaneamente ''distcc'' e ''ccache'', inserite:<br />
<br />
<pre>$ make CC="ccache distcc"</pre><br />
<br />
<br />
----<br />
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].<br />
----<br />
<br />
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch04.pdf ''Capitolo originale'']<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=LKN:_Bibliografia&diff=15328LKN: Bibliografia2008-06-17T10:41:58Z<p>MaXeR: </p>
<hr />
<div>''Torna all'indice: [[Linux Kernel in a Nutshell]]''<br />
<br />
__TOC__<br />
<br />
Molte delle informazioni contenute in questo libro sono state estratte dalla documentazione del kernel e dal codice sorgente. La documentazione è infatti il miglior posto dove trovare informazioni e riferimenti su come compilare e installare il kernel ed è normalmente tenuta aggiornata a seguito di cambiamenti nella procedura di compilazione.<br />
<br />
== Libri ==<br />
Sono disponibili molti ottimi libri relativi alla programmazione del kernel Linux, ma solo pochi di essi trattano la compilazione e installazione del kernel. Ecco un elenco di libri che ho trovato utili.<br />
<br />
=== Libri generici su Linux ===<br />
<br />
* Ellen Siever, Aaron Weber, Stephen Figgins, Robert Love, e Arnold Robbins. ''Linux in a Nutshell'' (O’Reilly), 2005.<br/>Questo libro comprende una delle più complete e autorevoli guide ai comandi per Linux. Essa copre praticamente ogni singolo comando di cui potreste mai aver bisogno.<br />
<br />
* Yaghmour, Karim. ''Building Embedded Linux Systems'' (O’Reilly), 2003.<br/>Questo libro, sebben principalmente rivolto agli sviluppatori di sistemi Linux embedded, contiene un'ottima sezione relativa a come creare una ''toolchain'' e un kernel con compilazione incrociata. Oltre a questa sezione del libro, è consigliato anche in virtù di altre sezioni che forniscono interessanti informazioni per coloro che vogliono imparare come personalizzare il kernel e il resto del sistema.<br />
<br />
=== Libri inerenti il kernel Linux ===<br />
<br />
Molti di questi libri sono indirizzati ai programmatori interessati ad apprendere come programmare all'interno del kernel. Sono generalmente molto tecnici rispetto a questo libro, ma sono un ottimo punto di partenza se desiderate imparare e capire il codice che governa il kernel.<br />
<br />
*Jonathan Corbet, Alessandro Rubini, e Greg Kroah-Hartman. ''Linux Device Drivers'' (O’Reilly), 2005.<br/>Questo libro illustra come differenti ''device driver'' operano e fornisce parecchi esempi applicatici di driver funzionanti. &Egrave; consigliato a chiunque vuole programmare driver per il kernel. &Egrave; disponibile in rete gratuitamente a questo indirizzo: http://lwn.net/Kernel/LDD3/<br />
<br />
* Love, Robert. ''Linux Kernel Development'' (Novell Press Publishing), 2005.<br/> Questo libro copre quasi tutti gli aspetti relativi al kernel Linux, illustrando come tutto opera insieme. Ottimo punto di partenza per iniziare a capire e conoscere le diverse componenti del kernel.<br />
<br />
* Bovet, Daniel P. e Cesate, Marco. ''Understanding the Linux Kernel'' (O’Reilly), 2005.<br/> Questo libro si addentra negli aspetti relativi la progettazione e implementazione del nucleo del kernel Linux. Un ottimo riferimento per apprendere e capire gli algoritmi utilizzati nelle diverse porzioni del kernel. Fortemente consigliato a coloro che vogliono comprendere nel dettaglio come funziona il kernel.<br />
<br />
== Strumenti ==<br />
<br />
In questo libro sono stati menzionati molti utili strumenti. Di seguito, presento un elenco dei siti dove è possibile reperire e scaricare tali strumenti.<br />
<br />
* ''Linux kernel''<br/> http://www.kernel.org e ftp://ftp.kernel.org contiene tutte le versioni del sorgente del kernel. http://www.kernel.org/git/ contiene una lista di tutti i ''git trees'' utilizzati dai diversi sviluppatori del kernel.<br />
<br />
* ''gcc''<br>http://gcc.gnu.org/ sito principale per tutto ciò che concerne il compilatore GNU C. <br />
<br />
* ''binutils''<br/>http://www.gnu.org/software/binutils/ è il sito principale dove trovare tutte le informazioni su binutils.<br />
<br />
* ''make''<br/>http://www.gnu.org/software/make/ è il sito principale dove trovare tutte le informazioni su make.<br />
<br />
*''util-linux''<br/>http://www.kernel.org/pub/linux/utils/util-linux/ è la directory da dove possono essere scaricate tutte le versioni di util-linux.<br />
<br />
* ''module-init-tools''<br/>http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/ è la directory da dove possono essere scaricate tutte le versioni di module-init-tools.<br />
<br />
* ''e2fsprogs''<br/>http://e2fsprogs.sourceforge.net/ è la pagina principale del progetto e2fsprogs.<br />
<br />
* ''jfsutils''<br/>http://jfs.sourceforge.net/ è la pagina principale del progetto jfsutils.<br />
<br />
* ''reiserfsprogs''<br/>http://www.namesys.com/download.html è la pagina principale del progetto reiserfsprogs.<br />
<br />
* ''xfsprogs''<br/>http://oss.sgi.com/projects/xfs/ è la pagina principale del progetto xfsprogs.<br />
<br />
* ''quota-tools''<br/>http://sourceforge.net/projects/linuxquota/ è la pagina principale del progetto quota-tools.<br />
<br />
* ''nfs-utils''<br/>http://nfs.sf.net/ è la pagina principale del progetto nfs-utils.<br />
<br />
* ''udev''<br/>http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html è la directory da dove possono essere scaricate tutte le versioni di udev.<br />
<br />
* ''procfs''<br/>http://procps.sourceforge.net/ è la pagina principale del progetto procfs.<br />
<br />
* ''patchutils''<br/>http://cyberelk.net/tim/patchutils è la directory da dove possono essere scaricate tutte le versioni di patchutils.<br />
<br />
* ''git''<br/>http://git.or.cz/ è il sito principale del progetto git.<br />
<br />
* ''ketchup''<br/>http://www.selenic.com/ketchup/ è la pagina principale del progetto ketchup.<br />
<br />
* ''quilt''<br/>http://savannah.nongnu.org/projects/quilt è la pagina principale del progetto quilt.<br />
<br />
* ''distcc''<br/>http://distcc.samba.org/ è la pagina principale del progetto distcc.<br />
<br />
* ''ccache''<br/>http://ccache.samba.org/ è la pagina principale del progetto ccache.<br />
<br />
<br />
<br />
----<br />
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].<br />
----<br />
<br />
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/appb.pdf ''Capitolo originale'']<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Categoria:Linux_Kernel_in_a_Nutshell&diff=15327Categoria:Linux Kernel in a Nutshell2008-06-17T10:41:30Z<p>MaXeR: Nuova pagina: Categoria:Kernel</p>
<hr />
<div>[[Categoria:Kernel]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Linux_Kernel_in_a_Nutshell&diff=15326Linux Kernel in a Nutshell2008-06-17T10:41:15Z<p>MaXeR: </p>
<hr />
<div>{{Box|Copyright Notice|This is a free translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. The original book and this translation are available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5]. To support the original author you can purchase the book [http://www.oreilly.com/catalog/9780596100797/ here] or [http://www.amazon.com/Linux-Kernel-Nutshell-OReilly/dp/0596100795 elsewhere].<br />
<br />
The translation work is an indipendent project not affiliated with Greg Kroah-Hartman or his editor.<br />
----<br />
Questa è una traduzione del libro [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] di [http://www.kroah.com/log/ Greg Kroah-Hartman], pubblicato da [http://www.oreilly.com/ O'Reilly]. Il libro è disponibile nei termini della licenza [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5], che permette il libero download e la redistribuzione dell'opera, e viene pubblicato qui, tradotto, nei termini della stessa licenza.<br />
}}<br />
<br />
{{Warningbox|La traduzione è in corso e chiunque abbia buona volontà e una conoscenza sufficiente della lingua è invitato a contribuire attivamente. Grazie a tutti e buona lettura.}}<br />
<br />
__TOC__<br />
<br />
<big><big>Prefazione</big></big><br />
<br />
<br />
<big><big><big>Parte I.</big></big></big><br />
==Compilare il kernel==<br />
Questa parte del libro mostra come scaricare, compilare e installare il kernel. &Egrave; in gran parte una guida passo passo.<br />
<br />
* <span style="color: green;">'''Capitolo 1''', [[LKN:_Introduzione|Introduzione]] (''tradotto 100%'')</span><br />
<br />
* <span style="color: green;">'''Capitolo 2''', [[LKN:_Requisiti_per_Compilare_ed_Utilizzare_il_Kernel|Requisiti per Compilare ed Utilizzare il Kernel]] (''tradotto 100%'')</span><br />
<br />
* <span style="color: green;">'''Capitolo 3''', [[LKN:_Procurarsi_i_Sorgenti_del_Kernel|Procurarsi i Sorgenti del Kernel]] (''tradotto 100%'')</span><br />
<br />
* <span style="color: green;">'''Capitolo 4''', [[LKN:_Configurare_e_Compilare|Configurare e Compilare]] (''tradotto 100%'')</span><br />
<br />
* <span style="color: green;">'''Capitolo 5''', [[LKN:_Installare_ed_Avviare_con_un_Kernel|Installare ed Avviare con un Kernel]] (''tradotto 100%'')</span><br />
<br />
* <span style="color: green;">'''Capitolo 6''', [[LKN:_Aggiornare_il_Kernel|Aggiornare il Kernel]] (''tradotto 100%'')</span><br />
<br />
<br />
<big><big><big>Parte II.</big></big></big> <br />
==Personalizzazioni principali==<br />
Questa parte spiega le personalizzazioni più comuni effettuate dagli utenti di Linux, ed utili combinazioni di opzioni da personalizzare.<br />
<br />
* <span style="color: green;">'''Capitolo 7''', [[LKN:_Personalizzare_un_Kernel|Personalizzare un Kernel]] (''tradotto 100%'')</span><br />
<br />
* <span style="color: red;">'''Capitolo 8''', [[LKN:_Ricette_per_Configurare_il_Kernel|Ricette per Configurare il Kernel]] (''tradotto 55%'')</span><br />
<br />
<br />
<big><big><big>Parte III.</big></big></big><br />
<br />
==Guide di riferimento per il kernel==<br />
Questa sezione fornisce informazioni di riferimento su parametri per il Kernel di tutti i tipi.<br />
<br />
* <span style="color: red;">'''Capitolo 9''', [[LKN:_Guida_di_Riferimento_dei_Parametri_di_Boot_del_Kernel|Guida di Riferimento dei Parametri di Boot del Kernel]] (''tradotto 20%'')</span><br />
<br />
* <span style="color: green;">'''Capitolo 10''', [[LKN:_Guida_di_Riferimento_dei_Parametri_di_Compilazione_del_Kernel|Guida di Riferimento dei Parametri di Compilazione del Kernel]] (''tradotto 100%'')</span><br />
<br />
* <span style="color: green;">'''Capitolo 11''', [[LKN:_Guida_di_Riferimento_delle_Opzioni_di_Configurazione_del_Kernel|Guida di Riferimento delle Opzioni di Configurazione del Kernel]] (''tradotto 100%'')</span><br />
<br />
<br />
<big><big><big>Parte IV.</big></big></big><br />
==Informazioni aggiuntive==<br />
Questa sezione include un'Appendice su programmi utili, e riferimenti per ulteriori approfondimenti.<br />
<br />
* <span style="color: green;">'''Appendice A''', [[LKN:_Programmi_Utili|Programmi Utili]] (''tradotto 100%'')</span><br />
<br />
* <span style="color: green;">'''Appendice B''', [[LKN:_Bibliografia|Bibliografia]] (''tradotto 100%'')</span><br />
<br />
[[Categoria:Linux Kernel in a Nutshell]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Cacti&diff=15324Cacti2008-06-16T21:16:45Z<p>MaXeR: Rimossa Categoria Superflua</p>
<hr />
<div>==Introduzione==<br />
[http://www.cacti.net Cacti] è un completo strumento per monitorare il sistema che si poggia su snmpd (lo stesso usato anche da mrtg).<br />
Uno dei punti di forza di cacti è l'elevata facilità di configurazione, senza per questo non garantire una elevata flessibilità.<br />
<br />
==Installazione==<br />
Cacti è già disponibile nei repository Debian, e quindi installabile tramite apt-get...<br />
Per il suo funzionamento richiede un database [http://www.mysql.com mysql] a cui appoggiarsi per memorizzare i dati e il [http://geekcorp.com/snmpd/ server snmpd] per accedere ai dati da elaborare, oltre a questi programmi, inoltre, è necessario installare (o avere già configurato) il webserver [http://www.apache.org Apache] con l'estensione [http://www.php.net PhP].<br />
<br />
Se, quindi, queste cose non sono presenti, consiglio di installarle:<br />
<pre><br />
# apt-get install snmpd mysql-server<br />
</pre><br />
<br />
nella sezione ''configurazione'' analizzeremo la configurazione di questi due server.<br />
<br />
Ora installiamo cacti (che installerà anche ''apache'', ''php4'', ''php4-mysql'', ''php4-cli'', e altre applicazioni necessarie al suo funzionamento):<br />
<pre><br />
# apt-get install cacti<br />
</pre><br />
<br />
Durante l'installazione di cacti, verranno poste delle domande (che qui riporto con delle risposte di esempio):<br />
* '''MySQL server host name ''': ''localhost'';<br />
* '''Database name for cacti ''': ''cacti'';<br />
* '''Cacti database username''': ''cacti'';<br />
* '''Cacti user password''': ''cactipass'';<br />
* '''Webserver type''': nel nostro caso selezioniamo ''Apache-SSL'', ma è possibile effettuare la scelta più conveniente per il proprio sistema.<br />
<br />
{{Box|Nota Bene|durante la configurazione ci viene ricordato che la configurazione di mysql deve essere fatta manualmente, come vedremo in seguito}}<br />
<br />
==Configurazione==<br />
===MySql===<br />
Se è la prima installazione di MySql sulla macchina, è consigliato cambiare la password di root in quanto, di default, non è impostata:<br />
<pre><br />
#/usr/bin/mysql<br />
mysql> set password for root@localhost=password('rootpw');<br />
mysql> exit<br />
</pre><br />
<br />
Una volta impostata, procediamo con la creazione del database e dell'utente che avrà accesso al database ''cacti'';<br />
<pre><br />
mysql> create database cacti;<br />
mysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactipass';<br />
mysql> flush privileges;<br />
mysql> exit<br />
</pre><br />
<br />
Ora non ci resta che sistemare il database, creando le tabelle ed inserendo i dati necessari:<br />
<pre><br />
# zcat /usr/share/doc/cacti/cacti.sql.gz | mysql -u root -p cacti<br />
</pre><br />
<br />
Bene, la configurazione di MySql è terminata.<br />
<br />
===Snmpd===<br />
La configurazione di snmpd, se cacti è installato sulla stessa macchina che si vuole monitorare, è limitata a dare l'accesso in lettura a snmpd, così da permetterne l'interrogazione da parte di cacti.<br />
<br />
Per fare questo, modifichiamo il file '''/etc/snmp/snmpd.conf''' con il nostro editor di testo preferito, e facciamo in modo che le righe:<br />
<pre><br />
com2sec paranoid default public<br />
#com2sec readonly default public<br />
#com2sec readwrite default private<br />
</pre><br />
diventino:<br />
<pre><br />
#com2sec paranoid default public<br />
com2sec readonly 127.0.0.1 public<br />
#com2sec readwrite default private<br />
</pre><br />
<br />
Una volta salvato il tutto, riavviamo snmpd con un semplice:<br />
<pre><br />
# /etc/init.d/snmpd restart (oppure reload)<br />
</pre><br />
<br />
===Php===<br />
Cacti utilizza php sia come estensione di apache, sia come ''cli'' (common line interpreter).<br />
Per evitare problemi, è necessario controllare che l'estensione per mysql sia abilitata nei seguenti file:<br />
* '''/etc/php4/cli/php.ini''' per quanto riguarda php4-cli;<br />
* '''/etc/php4/apache/php.ini''' per quanto riguarda php e apache.<br />
<br />
La modifica di questi file consiste, in pratica, nella rimozione del ''';''' di commento alla seguente riga:<br />
<pre><br />
;extension=mysql.so<br />
</pre><br />
<br />
===Cacti===<br />
Per terminare la configurazione base del sistema, rechiamoci al seguente indirizzo:<br />
<br />
http://localhost/cacti (se è stato scelto Apache/Apache2)<br/><br />
https://localhost/cacti (se è stato scelto Apache-SSL)<br />
<br />
per completare l'installazione.<br />
<br />
Premiamo ''Next>>'' dopo la prima schermata di presentazione;<br/><br />
Selezioniamo ''New Install'' e controlliamo che i dati riportati siamo corretti, altrimenti è possibile modificarli nel file '''/etc/cacti/debian.php''', dopo di che andiamo avanti;<br/><br />
Nella pagina di riepilogo degli eseguibili, controlliamo che siano stati rilevati tutti, altrimenti è necessario installarli manualmente, come '''SNMP Utility Version''' selezioniamo la 2°: ''NET-Smtp .x'';<br/><br />
<br />
Ora siamo davanti alla schermata di LogIn.<br/><br />
I dati per la prima autenticazione sono:<br/><br />
'''Username:''' ''admin''<br/><br />
'''Password:''' ''admin''<br />
<br />
verremo obbligati a cambiare password: facciamolo!!!<br />
<br />
==Aggiunta di Monitor==<br />
Ora il sistema è pronto per essere configurato: dopo aver effettuato il login, infatti, potremo accedere a due aree distinte: ''Console'' e ''Graphs''; la prima rappresenta il centro di controllo, da dove è possibile aggiungere nuovi monitor (''New Graphs'') od aggiungere nuovi computer, router o altro (''Devices'').<br />
<br />
L'aggiunta è molto intuitiva, per quanto riguarda l'utilizzo dei monitor già presenti, e normalmente non necessita di modifiche se non riguardanti l'aspetto (colori, unità di misura).<br />
<br />
==Gestione Utenti==<br />
Cacti permette la gestione degli utenti, in modo da rendere possibile la visualizzazione delle statistiche ad utenti anonimi (opzione abilitata di default) tramite la pagina https://localhost/cacti/graph_view.php?action=tree, oltre alla definizione di utenti con facoltà ristrette (limitazioni a determinate aree e/o funzioni).<br />
Tutte le opzioni sono modificabili tramite la voce ''User Management'' presente nel menù di sinistra della sezione ''Console''. Le opzioni disponibili sono autoesplicative, e di facile gestione.<br />
L'utente ''guest'' è quello utilizzato per l'accesso anonimo.<br />
<br />
==Personalizzazione==<br />
Cacti permette una vasta gamma di personalizzazioni, che vanno dall'aggiunta di macchine da monitorare, alla definizione di nuove sorgenti di dati, ottenibili tramite snmp o script ad hoc.<br />
<br />
Vediamo nel dettaglio come implementare queste soluzioni.<br />
<br />
==Utilizzo Avanzato==<br />
===Monitorare più macchine===<br />
Se siamo in una rete dove sono presenti più macchine, risulta utile e comodo avere sotto controllo il loro funzionamento...<br />
Cacti ci viene in contro anche in questo, permettendo di monitorare diverse macchine (definite ''Devices''), il tutto in modo semplice e molto intuitivo.<br />
<br />
====Configurazione della macchina====<br />
Prenderemo in esame il caso in cui la macchina da monitorare sia un computer con linux (per router, switch ed altri dispositivi simili, si rimanda al manuale specifico).<br />
Per permettere l'accesso al server snmpd, è sufficiente effettuare la modifica che è stata apportata precedentemente alla macchina su cui è stato installato cacti.<br />
<br />
====Configurazione di Cacti====<br />
Per aggiungere un nuovo ''Device'', è necessario seguire i seguenti passi:<br />
* posizionarsi nella sezione '''console''';<br />
* selezionare '''Devices''' dalla sezione '''Management''' nella barra di sinistra;<br />
* selezionare il bottone '''Add''' dalla barra in alto;<br />
* completare il form inserendo i dati richiesti:<br />
:; Description : Il nome che si vuole dare al Device;<br />
:; Hostname : l'indirizzo ip o il [[ FQDN ]] del Device;<br />
:; Host Template : il tipo di dispositivo (in questo caso ''Linux Local Machine'');<br />
:; SNMP Options : le opzioni per la connessione al server snmpd del device; sono corretti (nella maggioranza dei casi) i valori di default;<br />
* nella pagina che segue è possibile selezionare ''Create Graphs for this Host'', per accedere alla sezione dove indicare quali monitor attivare;<br />
* da quel momento, inizierà il monitoraggio del device appena aggiunto.<br />
<br />
<br />
Per aggiungere il device alla ''Visualizzazione ad Albero'', è necessario andare in Console->Graph Trees->Default Tree->Add e aggiungere il device, impostando '''Host''' come ''Tree Item Type''.<br />
[[Categoria:Server]]<br />
[[Categoria:Networking]]<br />
[[Categoria:Monitoring]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Integrit:_file_verification_system&diff=15323Integrit: file verification system2008-06-16T21:15:50Z<p>MaXeR: </p>
<hr />
<div>{{stub}}<br />
<br />
=Introduzione=<br />
Il Wiimote e' un controller prodotto dalla Nintendo usato come controller per la console Wii.<br />
E' possibile utilizzarlo per controllare numerose applicazioni nell'ambiente Linux, questa guida e una descrizione pratica del suo utilizzo e <br />
di come sfruttare la libreria [http://abstrakraft.org/cwiid/ Cwiid ] per il suo uso all'interno di una applicazione in C o C++.<br />
<br />
=Installazione=<br />
Ci sono varie librerie a disposizione, il sito di riferimento e' sicuramente http://www.wiili.org/, per questa mini-guida si utilizzera' <br />
la libreria Cwiid che e' la piu' completa e testata.<br />
<br />
==Configurazione del sistema==<br />
Per poter utilizzare il Wiimote sotto Linux e' necessario che sia attivo il modulo del kernel relativo al usbhid, in Ubuntu digitare<br />
modprobe usbhid <br />
<br />
altrimenti [[Debian Kernel Howto |Ricompilare il kernel]] e attivarne il modulo.<br />
<br />
==Pacchetti necessari==<br />
Installare i seguenti pacchetti con il nostro amato apt-get:<br />
apt-get install autoconf awk bison flex bluez-utils bluez-hcidump <br />
apt-get install hcitool autotools-dev libbluetooth2-dev libgtk2.0-dev flex bison libcwiid1 libcwiid1-dev<br />
<br />
Ora lanciamo hcitool scan premendo contemporaneamente i tasti 1 e 2<br />
<br />
j3no@kropotkin:~$ hcitool scan<br />
Scanning ...<br />
00:19:1D:6B:3D:A3 Nintendo RVL-CNT-01<br />
<br />
Se l'operazione riesce il sistema e' pronto per essere utilizzato<br />
<br />
=Utilizzo della libreria Cwiid=<br />
A disposizione avrete dei comandi che vi permetteranno di utilizzare il vostro controller:<br />
*wminput: permette di utilizzare il wiimote come un mouse <br />
*wmgui: e' un'interfaccia grafica per testare tutti gli eventi del controller<br />
<br />
==Esempio di implementazione in un programma C ==<br />
Un [http://abstrakraft.org/cwiid/browser/trunk/wmdemo/wmdemo.c?rev=179 esempio ] lo si trova sul sito di cwiid oppure all'interno della directory con i<br />
[http://abstrakraft.org/cwiid/downloads/cwiid-0.6.00.tgz sorgenti] del programma nella directory wmdemo.<br />
<br />
In linea generale c'e' una struttura dati messa a disposizione dall'API (cwiid_state) che viene passata ad una chiamata (cwiid_get_state) la quale aggiorna la descrizione dello stato dei sensori presenti sul wiimote in quel momento.<br />
Prima di far questo ci sara' una fase di connessione (cwiid_open) che chiedera' il BBSID, un codice identificativo che abbiamo precedentemente visto<br />
durante la chiamata del comando "hcitool scan"<br />
<br />
--[[Utente:J3no|J3no]] 10:00, 3 giu 2008 (CDT)</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Integrit:_file_verification_system&diff=15322Integrit: file verification system2008-06-16T20:01:07Z<p>MaXeR: </p>
<hr />
<div>{{stub}}<br />
<br />
=Introduzione=<br />
Il Wiimote e' un controller prodotto dalla Nintendo usato come controller per la console Wii.<br />
E' possibile utilizzarlo per controllare numerose applicazioni nell'ambiente Linux, questa guida e una descrizione pratica del suo utilizzo e <br />
di come sfruttare la libreria [http://abstrakraft.org/cwiid/ Cwiid ] per il suo uso all'interno di una applicazione in C o C++.<br />
<br />
=Installazione=<br />
Ci sono varie librerie a disposizione, il sito di riferimento e' sicuramente http://www.wiili.org/, per questa mini-guida si utilizzera' <br />
la libreria Cwiid che e' la piu' completa e testata.<br />
<br />
==Configurazione del sistema==<br />
Per poter utilizzare il Wiimote sotto Linux e' necessario che sia attivo il modulo del kernel relativo al usbhid, in Ubuntu digitare<br />
modprobe usbhid <br />
<br />
altrimenti [[Debian Kernel Howto |Ricompilare il kernel]] e attivarne il modulo.<br />
<br />
==Pacchetti necessari==<br />
Installare i seguenti pacchetti con il nostro amato apt-get:<br />
apt-get install autoconf awk, bison, flex, bluez-utils bluez-hcidump <br />
apt-get install hcitool autotools-dev libbluetooth2-dev libgtk2.0-dev flex bison libcwiid1 libcwiid1-dev<br />
<br />
Ora lanciamo hcitool scan premendo contemporaneamente i tasti 1 e 2<br />
<br />
j3no@kropotkin:~$ hcitool scan<br />
Scanning ...<br />
00:19:1D:6B:3D:A3 Nintendo RVL-CNT-01<br />
<br />
Se l'operazione riesce il sistema e' pronto per essere utilizzato<br />
<br />
=Utilizzo della libreria Cwiid=<br />
A disposizione avrete dei comandi che vi permetteranno di utilizzare il vostro controller:<br />
*wminput: permette di utilizzare il wiimote come un mouse <br />
*wmgui: e' un'interfaccia grafica per testare tutti gli eventi del controller<br />
<br />
==Esempio di implementazione in un programma C ==<br />
Un [http://abstrakraft.org/cwiid/browser/trunk/wmdemo/wmdemo.c?rev=179 esempio ] lo si trova sul sito di cwiid oppure all'interno della directory con i<br />
[http://abstrakraft.org/cwiid/downloads/cwiid-0.6.00.tgz sorgenti] del programma nella directory wmdemo.<br />
<br />
In linea generale c'e' una struttura dati messa a disposizione dall'API (cwiid_state) che viene passata ad una chiamata (cwiid_get_state) la quale aggiorna la descrizione dello stato dei sensori presenti sul wiimote in quel momento.<br />
Prima di far questo ci sara' una fase di connessione (cwiid_open) che chiedera' il BBSID, un codice identificativo che abbiamo precedentemente visto<br />
durante la chiamata del comando "hcitool scan"<br />
<br />
--[[Utente:J3no|J3no]] 10:00, 3 giu 2008 (CDT)</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Integrit:_file_verification_system&diff=15321Integrit: file verification system2008-06-16T11:28:58Z<p>MaXeR: /* Configurazione */</p>
<hr />
<div>{{stub}}<br />
<br />
=Introduzione=<br />
Il Wiimote e' un controller prodotto dalla Nintendo usato come controller per la console Wii.<br />
E' possibile utilizzarlo per controllare numerose applicazioni nell'ambiente Linux, questa guida e una descrizione pratica del suo utilizzo e <br />
di come sfruttare la libreria [http://abstrakraft.org/cwiid/ Cwiid ] per il suo uso all'interno di una applicazione in C o C++.<br />
<br />
=Installazione=<br />
Ci sono varie librerie a disposizione, il sito di riferimento e' sicuramente http://www.wiili.org/, per questa mini-guida si utilizzera' <br />
la libreria Cwiid che e' la piu' completa e testata.<br />
<br />
==Configurazione del sistema==<br />
Per poter utilizzare il Wiimote sotto Linux e' necessario che sia attivo il modulo del kernel relativo al usbhid, in Ubuntu digitare<br />
modprobe usbhid <br />
<br />
altrimenti [[Debian Kernel Howto |Ricompilare il kernel]] e attivarne il modulo.<br />
<br />
==Pacchetti necessari==<br />
Installare i seguenti pacchetti con il nostro amato apt-get:<br />
apt-get install autoconf awk, bison, flex, bluez-utils bluez-hcidump <br />
apt-get install hcitool autotools-dev libbluetooth2-dev libgtk2.0-dev flex bison libcwiid1 libcwiid1-dev<br />
<br />
Ora lanciamo hcitool scan premendo contemporaneamente i tasti 1 e 2<br />
<br />
j3no@kropotkin:~$ hcitool scan<br />
Scanning ...<br />
00:19:1D:6B:3D:A3 Nintendo RVL-CNT-01<br />
<br />
Se l'operazione riesce il sistema e' pronto per essere utilizzato<br />
<br />
=Utilizzo della libreria Cwiid=<br />
A disposizione avrete dei comandi che vi permetteranno di utilizzare il vostro controller:<br />
*wminput: permette di utilizzare il wiimote come un mouse <br />
*wmgui: e' un'interfaccia grafica per testare tutti gli eventi del controller<br />
<br />
==Esempio di implementazione in un programma C ==<br />
Un [ http://abstrakraft.org/cwiid/browser/trunk/wmdemo/wmdemo.c?rev=179 esempio ] lo si trova sul sito di cwiid oppure all'interno della directory con i<br />
[ http://abstrakraft.org/cwiid/downloads/cwiid-0.6.00.tgz sorgenti] del programma nella directory wmdemo.<br />
<br />
In linea generale c'e' una struttura dati messa a disposizione dall'API (cwiid_state) che viene passata ad una chiamata (cwiid_get_state) la quale aggiorna la descrizione dello stato dei sensori presenti sul wiimote in quel momento.<br />
Prima di far questo ci sara' una fase di connessione (cwiid_open) che chiedera' il BBSID, un codice identificativo che abbiamo precedentemente visto<br />
durante la chiamata del comando "hcitool scan"<br />
<br />
--[[Utente:J3no|J3no]] 10:00, 3 giu 2008 (CDT)</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Integrit:_file_verification_system&diff=15320Integrit: file verification system2008-06-16T11:11:38Z<p>MaXeR: /* Installazione */</p>
<hr />
<div>{{stub}}<br />
<br />
=Introduzione=<br />
Il Wiimote e' un controller prodotto dalla Nintendo usato come controller per la console Wii.<br />
E' possibile utilizzarlo per controllare numerose applicazioni nell'ambiente Linux, questa guida e una descrizione pratica del suo utilizzo e <br />
di come sfruttare la libreria [http://abstrakraft.org/cwiid/ Cwiid ] per il suo uso all'interno di una applicazione in C o C++.<br />
<br />
=Installazione=<br />
Ci sono varie librerie a disposizione, il sito di riferimento e' sicuramente http://www.wiili.org/, per questa mini-guida si utilizzera' <br />
la libreria Cwiid che e' la piu' completa e testata.<br />
<br />
==Configurazione del sistema==<br />
Per poter utilizzare il Wiimote sotto Linux e' necessario che sia attivo il modulo del kernel relativo al usbhid, in Ubuntu digitare<br />
modprobe usbhid <br />
<br />
altrimenti [[Debian Kernel Howto |Ricompilare il kernel]] e attivarne il modulo.<br />
<br />
==Pacchetti necessari==<br />
Installare i seguenti pacchetti con il nostro amato apt-get:<br />
apt-get install autoconf awk, bison, flex, bluez-utils bluez-hcidump <br />
apt-get install hcitool autotools-dev libbluetooth2-dev libgtk2.0-dev flex bison libcwiid1 libcwiid1-dev<br />
<br />
Ora lanciamo hcitool scan premendo contemporaneamente i tasti 1 e 2<br />
<br />
j3no@kropotkin:~$ hcitool scan<br />
Scanning ...<br />
00:19:1D:6B:3D:A3 Nintendo RVL-CNT-01<br />
<br />
Se l'operazione riesce il sistema e' pronto per essere utilizzato<br />
<br />
=Utilizzo della libreria Cwiid=<br />
A disposizione avrete dei comandi che vi permetteranno di utilizzare il vostro controller:<br />
*wminput: permette di utilizzare il wiimote come un mouse <br />
*wmgui: e' un'interfaccia grafica per testare tutti gli eventi del controller<br />
<br />
==Esempio di implementazione in un programma C ==<br />
Un esempio lo si trova sul sito di cwiid http://abstrakraft.org/cwiid/browser/trunk/wmdemo/wmdemo.c?rev=179 oppure all'interno della directory con i<br />
sorgenti del programma http://abstrakraft.org/cwiid/downloads/cwiid-0.6.00.tgz nella directory wmdemo.<br />
<br />
In linea generale c'e' una struttura dati messa a disposizione dall'API (cwiid_state) che viene passata ad una chiamata (cwiid_get_state) la quale aggiorna la descrizione dello stato dei sensori presenti sul wiimote in quel momento.<br />
Prima di far questo ci sara' una fase di connessione (cwiid_open) che chiedera' il BBSID, un codice identificativo che abbiamo precedentemente visto<br />
durante la chiamata del comando "hcitool scan"<br />
<br />
--[[Utente:J3no|J3no]] 10:00, 3 giu 2008 (CDT)</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Integrit:_file_verification_system&diff=15319Integrit: file verification system2008-06-16T11:10:59Z<p>MaXeR: primo inserimento</p>
<hr />
<div>Integrit è un "file verification system": è assimilabile alla famiglia degli [[intrusion detection system]] o [[IDS]] e ha la funzione di verificare che determinati file non subiscano modifiche.<br />
<br />
Questo genere di controlli hanno molti vantaggi:<br />
* non sono pesanti: infatti vengono eseguiti prevalentemente di notte e occupano pochi minuti<br />
* sono utili: un aggressore che vuole nascondere dei file, accessi o servizi potrebbe modificare file come [[netstat]], [[last]], [[w]], ls...<br />
* si affiancano a [[ids]] di rete e software come [[rkhunter]]<br />
<br />
Ovviamente non si tratta della soluzione di tutti i mali, in quanto potrebbe essere possibile che l'aggressore abbia modificato anche l'eseguibile di integrit, però un controllo in più non fa mai male!<br />
<br />
= Installazione =<br />
<br />
= Configurazione =<br />
<br />
= Controllo manuale =</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Utente:MaXeR&diff=15318Utente:MaXeR2008-06-16T11:06:00Z<p>MaXeR: /* Pagine in Lavorazione */</p>
<hr />
<div>=About MaXeR=<br />
Mi chiamo Claudio, ho 22 anni e studio Informatica presso l'Università degli Studi di Verona.<br />
<br />
==Contatti==<br />
; Blog : http://www.knio.it<br />
<br />
; MaXeR@fsfe.org : http://www.fsfe.org/Members/maxer/<br />
<br />
; MaXeR@persone.softwarelibero.it : http://persone.softwarelibero.org/person/MaXeR<br />
<br />
; em@il : [mailto:maxer@debianizzati.org maxer@debianizzati.org]<br/>[mailto:maxer@knio.it maxer@knio.it]<br/>[mailto:maxer@fsfe.org maxer@fsfe.org]<br />
<br />
<br />
; jabber : maxer@jabber.linux.it<br />
: maxer@jabber.fsfe.org<br />
<br />
; icq : 161200863<br />
<br />
<br />
[http://www.fsfe.org http://www.knio.it/images/a-happy-fellow.png]<br />
<br />
=Le Mie Guide=<br />
# [[La struttura della Distribuzione]]<br />
# [[I repository ed il loro utilizzo]]<br />
# [[Introduzione all' Apt System]]<br />
# [[Pulire Debian]]<br />
# [[Applicare una patch ad un pacchetto Debian]]<br />
# [[Apt-build: ottimizzazione dei pacchetti | '''Apt-build''': ottimizzazione dei pacchetti]]<br />
# [[Apt-cdrom | '''Apt-cdrom''': aggiunta di cd/dvd nella lista dei repository]]<br />
# [[Apt-file: ricerca all'interno dei pacchetti | '''Apt-file''': ricerca all'interno dei pacchetti]]<br />
# [[Apt-listbugs: come monitorare i bug | '''Apt-listbugs''': come monitorare i bug]]<br />
# [[Apt-zip: aggiornamenti senza una connessione veloce | '''Apt-zip''': aggiornamenti senza una connessione veloce]]<br />
# [[Make-jpkg: Pacchettiziamo Java Sun| '''Make-jpkg''': Pacchettiziamo Java Sun]]<br />
# [[Apt-Proxy: un proxy per i pacchetti Debian| '''Apt-Proxy''': un proxy per i pacchetti Debian]]<br />
# [[Debmirror: creiamo un mirror Debian |'''Debmirror''': creiamo un mirror Debian]]<br />
# [[Password sicure: la base della sicurezza informatica]]<br />
# [[Come abilitare il completamento automatico 'avanzato']]<br />
# [[Convertire immagini .nrg in immagini .iso]]<br />
# [[mod_bandwidth: Gestione avanzata della banda]]<br />
# [[Mrtg: monitoriamo la banda]]<br />
# [[UsbMount: Gestione automatizzata delle periferiche usb di memorizzazione]]<br />
# [[Powernowd: CpuScaling per AMD]]<br />
# [[ cacti | Cacti per monitorare il sistema ]]<br />
# [[ Debian_on_a_compaq_Presario_2154EA ]]<br />
# [[ Munin ]]<br />
# [[ Debian Fun ]]<br />
# [[LAMP: Linux, Apache, MySQL e PHP]] Collaborazione con [[Utente:Keltik|Keltik]]<br />
# [[ SysV ]]<br />
# [[ jigdo ]]<br />
# [[ Wireless Support ]]<br />
# [[ Apache, SSL e CaCert.Org ]] (stub)<br />
# [[ Pacchetizzare un tema per Bootsplash ]]<br />
# [[ Gestione di un repository con debarchiver ]]<br />
# [[ Ssh e autenticazione tramite chiavi ]]<br />
# [[ Dupload per l'upload dei pacchetti Debian ]]<br />
# [[ Synaptics touchpad ]]<br />
# [[sshfs | Montare una directory remota con sshfs]]<br />
# [[Unison e la sincronizzazione di directory]]<br />
# [[Pbuilder: compilazione in ambienti puliti]]<br />
# [[Madwifi | Installazione Driver Madwifi]]<br />
# [[Repository Debianizzati.Org]]<br />
# [[Kde e mount automatico]]<br />
# [[Recuperare i dati da un Hard Disk danneggiato]]<br />
# [[Rileggere la tabella delle partizioni]]<br />
# [[Java in Debian]]<br />
# [[Errori frequenti nell'uso di apt-get]]<br />
# [[Controllare lo stato di un pacchetto]]<br />
# [[Postgrey: filtrare lo spam con il greylisting]]<br />
# [[Velocizzare il boot senza cambiare sistema di init]]<br />
# [[Spostare il tasto di chiusura delle tab di Firefox 2]]<br />
# [[Postfix e autenticazione su smtp remoto]]<br />
# [[Tmpreaper: pulire le directory contenenti file temporanei]]<br />
# [[Creare DVD Cover con GLabels]]<br />
# [[Alternatives]]<br />
<br />
=Pagine in Lavorazione=<br />
* [[Repository non ufficiali]]<br />
* [[Copiare-Spostare Debian]] (titolo non definitivo)<br />
* [[Logrotate: configurare la rotazione automatica dei log]]<br />
* [[Nagios: monitorare server e servizi]]<br />
* [[Integrit: file verification system]]<br />
<br />
=Ho scritto anche in=<br />
* [[ Speciale:Contributions/MaXeR | dove ho ficcato il naso ;) ]]<br />
* [[wg111v2 con ndiswrapper e crittografia WPA]]<br />
<br />
=Pagine Varie riportate da altre fonti=<br />
# [[Perchè conviene sviluppare esclusivamente Software Libero]]<br />
# [[Vendere Software Libero]]<br />
# [[Perché il software non deve avere padroni]]<br />
# [[La comunità del software libero dopo 20 anni]]<br />
# [[Ricompense e Motivazione]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Template:Deb&diff=15312Template:Deb2008-06-06T07:48:03Z<p>MaXeR: </p>
<hr />
<div>http://guide.debianizzati.org/images/swirl.png</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Template:Deb&diff=15311Template:Deb2008-06-06T07:43:46Z<p>MaXeR: </p>
<hr />
<div><img src="http://guide.debianizzati.org/images/swirl.png"/></div>MaXeRhttps://guide.debianizzati.org/index.php?title=Logrotate:_configurare_la_rotazione_automatica_dei_log&diff=15310Logrotate: configurare la rotazione automatica dei log2008-06-04T11:21:19Z<p>MaXeR: </p>
<hr />
<div>{{stub}}<br />
<br />
= Introduzione =<br />
In questi giorni ho dovuto configurare la rotazione automatica dei log di un applicazione, altrimenti questi file rischiavano di diventare troppo grandi. Così mi sono deciso di scrivere questa guida-appunto per la configurazione del servizio.<br />
<br />
= Installazione =<br />
Per installare logrotate è sufficiente un <br />
<pre><br />
# apt-get install logrotate<br />
</pre><br />
<br />
Durante l'installazione verrà creato anche un [[cron]] che si occuperò, giornalmente, di richiamare logrotate per effettuare la rotazione dei file di log. Se l'installazione viene fatta su un portatile, consiglio anche l'installazione di [[Anacron]].<br />
<br />
<br />
= Funzionamento =<br />
Il funzionamento, di per sè, è molto semplice: ad intervalli regolari viene lanciato il programma logrotate, che si occupa di effettuare le rotazioni dei file di log in base alle impostazioni presenti nei file di configurazione.<br />
<br />
Per capire meglio il funzionamento (e di cosa è capace questo software) prendiamo in considerazione alcuni file di configurazione:<br />
<br />
== Apache ==<br />
La particolarità di questo file di configurazione è la necessità di riavviare il servizio al termine della rotazione:<br />
<pre><br />
/var/log/apache2/*.log {<br />
weekly<br />
missingok<br />
rotate 52<br />
compress<br />
delaycompress<br />
notifempty<br />
create 640 root adm<br />
sharedscripts<br />
postrotate<br />
if [ -f /var/run/apache2.pid ]; then<br />
/etc/init.d/apache2 restart > /dev/null<br />
fi<br />
endscript<br />
}<br />
</pre><br />
<br />
== Aptitude ==<br />
<pre><br />
/var/log/aptitude {<br />
rotate 6<br />
monthly<br />
compress<br />
missingok<br />
notifempty<br />
}<br />
</pre><br />
<br />
== munin-node ==<br />
<pre>/var/log/munin/munin-node.log {<br />
daily<br />
missingok<br />
rotate 7<br />
compress<br />
copytruncate<br />
notifempty<br />
create 640 root adm<br />
}</pre><br />
= Definizione di una rotazione personalizzata =<br />
<br />
= Elenco Opzioni =</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Old:Wiimote&diff=15309Old:Wiimote2008-06-03T16:52:36Z<p>MaXeR: /* Pacchetti necessari */ rimosse le virgole ;)</p>
<hr />
<div>{{stub}}<br />
<br />
=Introduzione=<br />
Il Wiimote e' un controller prodotto dalla Nintendo usato come controller per la console Wii.<br />
E' possibile utilizzarlo per controllare numerose applicazioni nell'ambiente Linux, questa guida e una descrizione pratica del suo utilizzo e <br />
di come sfruttare la libreria [http://abstrakraft.org/cwiid/ Cwiid ] per il suo uso all'interno di una applicazione in C o C++.<br />
<br />
=Installazione=<br />
Ci sono varie librerie a disposizione, il sito di riferimento e' sicuramente http://www.wiili.org/, per questa mini-guida si utilizzera' <br />
la libreria Cwiid che e' la piu' completa e testata.<br />
<br />
==Configurazione del sistema==<br />
Per poter utilizzare il Wiimote sotto Linux e' necessario che sia attivo il modulo del kernel relativo al usbhid, in Ubuntu digitare<br />
modprobe usbhid <br />
<br />
altrimenti [[Debian Kernel Howto |Ricompilare il kernel]] e attivarne il modulo.<br />
<br />
==Pacchetti necessari==<br />
Installare i seguenti pacchetti con il nostro amato apt-get:<br />
apt-get install autoconf awk bison flex bluez-utils bluez-hcidump <br />
apt-get install hcitool autotools-dev libbluetooth2-dev libgtk2.0-dev flex bison libcwiid1 libcwiid1-dev<br />
<br />
Ora lanciamo hcitool scan premendo contemporaneamente i tasti 1 e 2<br />
<br />
j3no@kropotkin:~$ hcitool scan<br />
Scanning ...<br />
00:19:1D:6B:3D:A3 Nintendo RVL-CNT-01<br />
<br />
Se l'operazione riesce il sistema e' pronto per essere utilizzato<br />
<br />
=Utilizzo della libreria Cwiid=<br />
A disposizione avrete dei comandi che vi permetteranno di utilizzare il vostro controller:<br />
*wminput: permette di utilizzare il wiimote come un mouse <br />
*wmgui: e' un'interfaccia grafica per testare tutti gli eventi del controller<br />
<br />
==Esempio di implementazione in un programma C ==<br />
Un [http://abstrakraft.org/cwiid/browser/trunk/wmdemo/wmdemo.c?rev=179 esempio ] lo si trova sul sito di cwiid oppure all'interno della directory con i<br />
[http://abstrakraft.org/cwiid/downloads/cwiid-0.6.00.tgz sorgenti] del programma nella directory wmdemo.<br />
<br />
In linea generale c'e' una struttura dati messa a disposizione dall'API (cwiid_state) che viene passata ad una chiamata (cwiid_get_state) la quale aggiorna la descrizione dello stato dei sensori presenti sul wiimote in quel momento.<br />
Prima di far questo ci sara' una fase di connessione (cwiid_open) che chiedera' il BBSID, un codice identificativo che abbiamo precedentemente visto<br />
durante la chiamata del comando "hcitool scan"<br />
<br />
--[[Utente:J3no|J3no]] 10:00, 3 giu 2008 (CDT)</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Swap&diff=15299Swap2008-06-02T21:39:59Z<p>MaXeR: Nuova pagina: Il termine '''Swap''' identifica un'area di una memoria fisica (Hard Disk) adibita ad essere usata come estensione della memoria volatile (RAM) nel caso quest'ultima si saturi. In caso...</p>
<hr />
<div>Il termine '''Swap''' identifica un'area di una memoria fisica (Hard Disk) adibita ad essere usata come estensione della memoria volatile (RAM) nel caso quest'ultima si saturi. In caso di saturazione, infatti, i dati meno recenti vengono trasferiti dalla RAM allo SWAP, così da liberare della memoria per le applicazioni che ne fanno richiesta.<br />
<br />
[[Categoria:Glossario]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Host&diff=15298Host2008-06-02T21:37:33Z<p>MaXeR: Nuova pagina: Un '''host''', all'interno di una rete, è un dispositivo in grado di inviare e ricevere dati. Un host, normalmente, fornisce servizi (Server Web, Server Ftp) o usufruisce di essi (Un ...</p>
<hr />
<div>Un '''host''', all'interno di una rete, è un dispositivo in grado di inviare e ricevere dati. Un host, normalmente, fornisce servizi (Server Web, Server Ftp) o usufruisce di essi (Un computer con un browser web).<br />
<br />
<br />
[[Categoria:Glossario]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Old:KDE_e_mount_automatico&diff=15296Old:KDE e mount automatico2008-06-02T12:58:18Z<p>MaXeR: </p>
<hr />
<div>A partire dalla versione 3.4, Kde offre il supporto alla rilevazione automatica del nuovo hardware ed al suo corretto utilizzo (in particolare le periferiche di archiviazione come pennine usb, fotocamere, cd/dvd).<br />
<br />
Per funzionare correttamente, però, è necessario installare alcune applicazioni, con funzioni ben specifiche, ed abilitare la funzionalità.<br />
<br />
=Installazione del software necessario=<br />
; hal : ''Hardware Abstraction Layer'' offre una piattaforma uniforme per la gestione dell'hardware;<br />
; dbus-1 : utilizzato per permettere l'intercomunicazione tra processi<br />
; pmount : offre il supporto al mount dei dispositivi da parte degli utenti normale (purchè essi appartengano al gruppo ''plugdev'') di dispositivi di memorizzazione dati non presenti in /etc/fstab<br />
<br />
I pacchetti in questione possono essere installati tramite un <br />
<pre><br />
# apt-get install hal dbus-1 pmount</pre><br />
<br />
Al termine dell'installazione è necessario aggiungere gli utenti interessati al gruppo ''plugdev''. Per ogni utente deve essere eseguito il seguente comando:<br />
<pre><br />
# adduser nomeutente plugdev</pre><br />
<br />
Per poter rendere funzionante l'aggiunta ad un altro gruppo, è necessario effettuare un logout-login ma, prima di farlo, è consigliabile configurare Kde come descritto di seguito.<br />
<br />
=Configurazione di Kde=<br />
La configurazione di Kde è estremamente semplice:<br />
* recarsi nel centro di controllo di Kde<br />
* selezionare il gruppo "periferiche"<br />
* selezionare il sottogruppo "dispositivi di archiviazione"<br />
* abilitare il supporto ad ''HAL'' ("abilita il backend di hal") nella seconda scheda<br />
* abilitare (se si vuole) il supporto al ''polling'' dei dispositivi CD (in questo modo viene rilevato l'inserimento di un supporto)<br />
* abilitare l'ultima voce, per far sì che venga mostrato il menù di scelta dell'applicazione, dopo l'inserimento del dispositivo)<br />
<br />
[[Categoria:Tips&Tricks]]<br />
[[Categoria:Kde]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Categoria:Xfce&diff=15295Categoria:Xfce2008-06-02T12:57:12Z<p>MaXeR: Nuova pagina: Categoria:DesktopEnvironment</p>
<hr />
<div>[[Categoria:DesktopEnvironment]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Old:Nautilus:_navigare_con_una_sola_finestra&diff=15294Old:Nautilus: navigare con una sola finestra2008-06-02T12:56:32Z<p>MaXeR: </p>
<hr />
<div>Di default nautilus apre una nuova finestra ogni volta che si clicca su una cartella col stato sinistro. Per aprire una cartella nella stessa finestra bisogna cliccare con il tasto centrale.<br />
<br />
Per alcuni questo comportamento risulta scomodo. E' possibile dire a nautilus di usare sempre una sola finestra per l'esplorazione dei file (''modalità browser'') lanciandolo in questo modo:<br />
<br />
<pre><br />
# nautilus --no-desktop --browser <br />
</pre><br />
<br />
''(man nautilus per le altre opzioni)''<br />
<br />
<br />
Se vi piace potete impostare questa opzione come default:<br />
<br />
* '''In Gnome 2.6''' e' sufficiente aprire l'editor della configurazione (Strumenti di sistema --> Editor della configurazione), selezionare la voce:<br />
<br />
<pre><br />
apps --> <br />
nautilus --> <br />
preferences --> <br />
</pre><br />
<br />
e selezionare la voce <tt>always_use_browser</tt>.<br />
<br />
* '''In Gnome 2.8''' o superiore è possibile impostare questa opzione direttamente dalle preferenze di nautilus: ''Modifica -> Preferenze -> Comportamento'' e selezionare ''Aprire sempre in finestre di esplorazione''.<br />
<br />
Ciao<br />
<br />
----<br />
Autore: nemixer<br />
[[Categoria:Gnome]]<br />
[[Categoria:Tips&Tricks]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Old:Xfce_e_shutdown_da_utente&diff=15293Old:Xfce e shutdown da utente2008-06-02T12:56:21Z<p>MaXeR: </p>
<hr />
<div>Questa piccola guida va in soccorso di quanti vorrebbero spegnere il pc da una sessione attiva di XFCE4 senza dover tornare al DM in uso e senza ricorrere all'uso di una shell. Per fare ciò useremo "sudo":<br />
<pre><br />
$ su<br />
Password:<br />
# apt-get update<br />
# apt-get install sudo<br />
</pre><br />
Il primo passo è quello di editare il file <tt>/etc/sudoers</tt>.<br />
<br />
Sebbene il file <tt>/etc/sudoers</tt> possa essere ditato con qualsiasi editor, è molto più sicuro usare visudo. Infatti <code>visudo</code> non è altro che una versione leggermente modificata dell'editor <code>vim</code> che non permette di salvare il file <tt>sudoers</tt> se esso contiene errori (in realtà è anche possibile associare a visudo un editor diverso da <code>vim</code>, ma questa è un'altra storia ;-)).<br />
<br />
Lanciamo dunque <code>visudo</code> dopo esserci loggati come root in una console:<br />
<pre><br />
$ su<br />
Password:<br />
# visudo<br />
</pre><br />
Ecco più o meno quello che dovrebbe apparire:<br />
<pre><br />
# /etc/sudoers<br />
#<br />
# This file MUST be edited with the 'visudo' command as root.<br />
#<br />
# See the man page for details on how to write a sudoers file.<br />
#<br />
<br />
# Host alias specification<br />
<br />
# User alias specification<br />
<br />
# Cmnd alias specification<br />
<br />
# User privilege specification<br />
root ALL=(ALL) ALL<br />
</pre><br />
Come in vim, all'avvio di visudo ci si ritrova in "command mode" e non è possibile inserire testo. Per inserire qualcosa nel file dobbiamo entrare in "insert mode" premendo "i" (oppure <tt>[Ins]</tt>): in basso a sinistra deve apparire "INSERISCI".<br />
<br />
Per ottenere quello che vogliamo, sarà sufficiente aggiungere una piccola linea, che abiliterà tutti gli utenti nel gruppo adm ad eseguire i comandi di shutdown e reboot dal menu di xfce:<br />
<pre><br />
%adm ALL=(root) NOPASSWD: /usr/sbin/xfsm-shutdown-helper<br />
</pre><br />
Il risultato finale del nostro sudoers sarà quindi:<br />
<pre><br />
# /etc/sudoers<br />
#<br />
# This file MUST be edited with the 'visudo' command as root.<br />
#<br />
# See the man page for details on how to write a sudoers file.<br />
#<br />
<br />
# Host alias specification<br />
<br />
# User alias specification<br />
<br />
# Cmnd alias specification<br />
<br />
# User privilege specification<br />
root ALL=(ALL) ALL<br />
%adm ALL=(root) NOPASSWD: /usr/sbin/xfsm-shutdown-helper<br />
</pre><br />
Ora salviamo il nostro file ed usciamo da visudo. Per fare questo premiamo ESC per tornare in "command mode" e poi:<br />
<pre><br />
:wq<br />
</pre><br />
<br />
Dopo aver riavviato X e rifatto il login, ogni utente appartenete al gruppo adm sarà abilitato alle azioni di riavvio e spegnimento direttamente dal menù di xfce.<br />
<br />
Per una raccolta dei comandi di vim leggete [http://www.siforge.org/articles/2003/12/15-guida_vim.html qui].<br />
<br />
<br />
----<br />
<br />
Autore: [[Utente:Jango|jango]]<br />
<br />
Revisione: ~ The Noise<br />
<br />
[[Categoria:Xfce]][[Categoria:Tips&Tricks]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Fail2ban&diff=15291Fail2ban2008-06-02T11:47:13Z<p>MaXeR: </p>
<hr />
<div>'''Fail2ban''' ([http://www.fail2ban.org Sito ufficiale]) è un software che è nato per permettere di bloccare gli host che stanno tentando di effettuare un attacco di [[brute force]] via [[ssh]]. <br />
<br />
Questo genere di attacco si basa su continui tentativi di accesso, provando o l'username [[root]] con password probabili (come ''password'', ''root'', ''toor'' e così via..) oppure tramite coppie di username/password conosciute (create, ad esempio, da [[malware]] o da [[rootkit]]...).<br />
<br />
Con le ultime versioni, però, si è ampliato ed è in grado di coprire svariati servizi (che andranno, però, configurati manualmente), come ad esempio apache, vsftpd, postfix, etc...<br />
<br />
== Il funzionamento ==<br />
Il funzionamento è semplice: il software si occupa di effettuare il parsing di alcuni file di log (nel caso di ssh, <tt>/var/log/auth.log</tt>) che contengono le informazioni relative agli accessi falliti. Se vengono contati un numero di tentativi maggiori ad una soglia, l'indirizzo IP viene bloccato per un tempo impostato e non potrà più accedere al servizio in ascolto su quella porta (ma potrà ancora accedere a quelli sulle altre, cosa molto importante nel caso di indirizzi IP condivisi, come avviene per Fastweb o all'interno delle reti aziendali).<br />
<br />
<br />
<br />
== Installazione ==<br />
L'installazione è semplice: <br />
<pre><br />
# apt-get install fail2ban<br />
</pre><br />
<br />
== Configurazione ==<br />
Il file di configurazione è <tt>/etc/fail2ban/jail.local</tt> e contiene i parametri necessari al funzionamento del software<br />
<br />
Il file di configurazione è diviso per sezioni: Ogni sezione inizia ha una struttura simile a:<br />
<pre><br />
[nomesezione]<br />
parametro = valore<br />
parametro2 = valore<br />
parametro3 = valore<br />
</pre><br />
<br />
Ogni sezione, quindi, identificherà un controllo da eseguire. Fa eccezione la prima: <tt>[DEFAULT]</tt>, in quanto contiene i valori di default che verranno usati nelle sezioni successive; ovviamente potranno essere ridefiniti per adattarli ai propri gusti.<br />
<br />
== I Parametri ==<br />
I parametri più importanti sono:<br />
<br />
; <tt>ignoreip = 127.0.0.1</tt> : permette di indicare un elenco di ip su cui non verrà fatto il controllo. Utile per non ''tagliare fuori'' accidentalmente l'ufficio<br />
; <tt>bantime = 600</tt> : il tempo, in secondi, per cui un host verrà bannato<br />
; <tt>maxretry = 3</tt> : il numero massimo di tentativi dopo cui effettuare il ban dell'host<br />
; <tt>destemail = root@localhost</tt> : l'indirizzo e-mail a cui inviare la mail di notifica<br />
; <tt>action = iptables[name=%(__name__)s, port=%(port)s]</tt> : l'azione da prendere. Quella di default blocca semplicemente l'accesso alla porta del servizio all'ip che ha sforato il numero di tentativi massimo.<br />
; <tt>enabled = true</tt> : abilita i controlli all'interno della sezione<br />
; <tt>port = ssh</tt> : indica la porta da bloccare<br />
; <tt>filter = sshd</tt> : indica il filtro da utilizzare (contenuto all'interno della directory <tt>/etc/fail2ban/filter.d</tt> )<br />
; <tt>logpath = /var/log/auth.log</tt> : il file contenente il log da controllare<br />
<br />
<br />
== Esempi di Azioni ==<br />
=== Filtraggio semplice ===<br />
Questa azione applica semplicemente un filtro in modo che l'host che ha effettuato un numero di tentativi maggiori di quello definito viene fermato.<br />
<pre>action = iptables[name=%(__name__)s, port=%(port)s]<br />
</pre><br />
<br />
=== Filtraggio con Notifica ===<br />
Questa regola amplia quella precedente, in quanto manda una mail contenente l'ip ed il [[whois]] dell'ip dell'host che ha fatto scattare l'allarme<br />
<pre><br />
action = iptables[name=%(__name__)s, port=%(port)s]<br />
mail-whois[name=%(__name__)s, dest=%(destemail)s]<br />
</pre><br />
<br />
=== Filtraggio con Notifica Avanzata ===<br />
Come prima, ma in aggiunta sono presenti anche le linee del file di log che hanno fatto scattare l'allarme.<br />
<pre>action = iptables[name=%(__name__)s, port=%(port)s]<br />
mail-whois-lines[name=%(__name__)s, dest=%(destemail)s, logpath=%(logpath)s]<br />
</pre><br />
<br />
= Conclusioni =<br />
Una volta installato, il software è automaticamente attivo, e gira in [[background]] come servizio. In caso di modifica del file di configurazione, è necessario effettuare un restart del servizio tramite il comando<br />
<pre><br />
# /etc/init.d/fail2ban restart<br />
</pre><br />
<br />
[[Categoria:Sicurezza]]<br />
[[Categoria:Networking]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Fail2ban&diff=15290Fail2ban2008-06-02T11:45:00Z<p>MaXeR: /* Configurazione */</p>
<hr />
<div>{{stub}}<br />
<br />
'''Fail2ban''' è un software che è nato per permettere di bloccare gli host che stanno tentando di effettuare un attacco di [[brute force]] via [[ssh]]. <br />
<br />
Questo genere di attacco si basa su continui tentativi di accesso, provando o l'username [[root]] con password probabili (come ''password'', ''root'', ''toor'' e così via..) oppure tramite coppie di username/password conosciute (create, ad esempio, da [[malware]] o da [[rootkit]]...).<br />
<br />
Con le ultime versioni, però, si è ampliato ed è in grado di coprire svariati servizi (che andranno, però, configurati manualmente), come ad esempio apache, vsftpd, postfix, etc...<br />
<br />
== Il funzionamento ==<br />
Il funzionamento è semplice: il software si occupa di effettuare il parsing di alcuni file di log (nel caso di ssh, <tt>/var/log/auth.log</tt>) che contengono le informazioni relative agli accessi falliti. Se vengono contati un numero di tentativi maggiori ad una soglia, l'indirizzo IP viene bloccato per un tempo impostato e non potrà più accedere al servizio in ascolto su quella porta (ma potrà ancora accedere a quelli sulle altre, cosa molto importante nel caso di indirizzi IP condivisi, come avviene per Fastweb o all'interno delle reti aziendali).<br />
<br />
<br />
<br />
== Installazione ==<br />
L'installazione è semplice: <br />
<pre><br />
# apt-get install fail2ban<br />
</pre><br />
<br />
== Configurazione ==<br />
Il file di configurazione è <tt>/etc/fail2ban/jail.local</tt> e contiene i parametri necessari al funzionamento del software<br />
<br />
Il file di configurazione è diviso per sezioni: Ogni sezione inizia ha una struttura simile a:<br />
<pre><br />
[nomesezione]<br />
parametro = valore<br />
parametro2 = valore<br />
parametro3 = valore<br />
</pre><br />
<br />
Ogni sezione, quindi, identificherà un controllo da eseguire. Fa eccezione la prima: <tt>[DEFAULT]</tt>, in quanto contiene i valori di default che verranno usati nelle sezioni successive; ovviamente potranno essere ridefiniti per adattarli ai propri gusti.<br />
<br />
== I Parametri ==<br />
I parametri più importanti sono:<br />
<br />
; <tt>ignoreip = 127.0.0.1</tt> : permette di indicare un elenco di ip su cui non verrà fatto il controllo. Utile per non ''tagliare fuori'' accidentalmente l'ufficio<br />
; <tt>bantime = 600</tt> : il tempo, in secondi, per cui un host verrà bannato<br />
; <tt>maxretry = 3</tt> : il numero massimo di tentativi dopo cui effettuare il ban dell'host<br />
; <tt>destemail = root@localhost</tt> : l'indirizzo e-mail a cui inviare la mail di notifica<br />
; <tt>action = iptables[name=%(__name__)s, port=%(port)s]</tt> : l'azione da prendere. Quella di default blocca semplicemente l'accesso alla porta del servizio all'ip che ha sforato il numero di tentativi massimo.<br />
; <tt>enabled = true</tt> : abilita i controlli all'interno della sezione<br />
; <tt>port = ssh</tt> : indica la porta da bloccare<br />
; <tt>filter = sshd</tt> : indica il filtro da utilizzare (contenuto all'interno della directory <tt>/etc/fail2ban/filter.d</tt> )<br />
; <tt>logpath = /var/log/auth.log</tt> : il file contenente il log da controllare<br />
<br />
<br />
== Esempi di Azioni ==<br />
=== Filtraggio semplice ===<br />
Questa azione applica semplicemente un filtro in modo che l'host che ha effettuato un numero di tentativi maggiori di quello definito viene fermato.<br />
<pre>action = iptables[name=%(__name__)s, port=%(port)s]<br />
</pre><br />
<br />
=== Filtraggio con Notifica ===<br />
Questa regola amplia quella precedente, in quanto manda una mail contenente l'ip ed il [[whois]] dell'ip dell'host che ha fatto scattare l'allarme<br />
<pre><br />
action = iptables[name=%(__name__)s, port=%(port)s]<br />
mail-whois[name=%(__name__)s, dest=%(destemail)s]<br />
</pre><br />
<br />
=== Filtraggio con Notifica Avanzata ===<br />
Come prima, ma in aggiunta sono presenti anche le linee del file di log che hanno fatto scattare l'allarme.<br />
<pre>action = iptables[name=%(__name__)s, port=%(port)s]<br />
mail-whois-lines[name=%(__name__)s, dest=%(destemail)s, logpath=%(logpath)s]<br />
</pre><br />
<br />
<br />
[[Categoria:Sicurezza]]<br />
[[Categoria:Networking]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Fail2ban&diff=15289Fail2ban2008-06-01T19:13:21Z<p>MaXeR: Nuova pagina: {{stub}} '''Fail2ban''' è un software che è nato per permettere di bloccare gli host che stanno tentando di effettuare un attacco di brute force via ssh. Questo genere di ...</p>
<hr />
<div>{{stub}}<br />
<br />
'''Fail2ban''' è un software che è nato per permettere di bloccare gli host che stanno tentando di effettuare un attacco di [[brute force]] via [[ssh]]. <br />
<br />
Questo genere di attacco si basa su continui tentativi di accesso, provando o l'username [[root]] con password probabili (come ''password'', ''root'', ''toor'' e così via..) oppure tramite coppie di username/password conosciute (create, ad esempio, da [[malware]] o da [[rootkit]]...).<br />
<br />
Con le ultime versioni, però, si è ampliato ed è in grado di coprire svariati servizi (che andranno, però, configurati manualmente), come ad esempio apache, vsftpd, postfix, etc...<br />
<br />
== Il funzionamento ==<br />
Il funzionamento è semplice: il software si occupa di effettuare il parsing di alcuni file di log (nel caso di ssh, <tt>/var/log/auth.log</tt>) che contengono le informazioni relative agli accessi falliti. Se vengono contati un numero di tentativi maggiori ad una soglia, l'indirizzo IP viene bloccato per un tempo impostato e non potrà più accedere al servizio in ascolto su quella porta (ma potrà ancora accedere a quelli sulle altre, cosa molto importante nel caso di indirizzi IP condivisi, come avviene per Fastweb o all'interno delle reti aziendali).<br />
<br />
<br />
<br />
== Installazione ==<br />
L'installazione è semplice: <br />
<pre><br />
# apt-get install fail2ban<br />
</pre><br />
<br />
== Configurazione ==<br />
Il file di configurazione è <tt>/etc/fail2ban/jail.local</tt> e contiene i parametri necessari al funzionamento del software<br />
<br />
[[Categoria:Sicurezza]]<br />
[[Categoria:Networking]]</div>MaXeRhttps://guide.debianizzati.org/index.php?title=Bannato&diff=15288Bannato2008-06-01T19:03:32Z<p>MaXeR: Nuova pagina: Un utente, un host è '''bannato''' quando viene escluso dall'accesso ad una risorsa, host o rete. Un semplice esempio potrebbe essere un forum, dove un utente che si comporta male vi...</p>
<hr />
<div>Un utente, un host è '''bannato''' quando viene escluso dall'accesso ad una risorsa, host o rete.<br />
<br />
Un semplice esempio potrebbe essere un forum, dove un utente che si comporta male viene escluso dalla vita dello stesso non permettendogli più di effettuare l'accesso. Oppure si potrebbe pensare ad un utente malizioso che cerca di forzare la password per accedere via [[ssh]] ad un server; dopo 3 tentativi, se è installato un software come [[fail2ban]], non potrà più accedere al servizio per un numero di minuti determinato a priori.<br />
<br />
[[Categoria:Glossario]]</div>MaXeR