Aptitude: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
m (→‎Uso da linea di comando: aggiunto reinstall)
(aggiunti comandi comuni)
Riga 1: Riga 1:
[[Categoria:Sistema]]
=About MaXeR=
== Disclaimer ==
Mi chiamo Claudio, ho 21 anni e studio Informatica presso l'Universit� degli Studi di Verona.


Questa guida guida si prefigge di raccogliere informazioni riguardo udev, la sua configurazione e il suo utilizzo dal punto di vista dell'utente su sistemi Debian GNU/Linux.
==Contatti==
; Blog : http://www.knio.it


Molte delle informazioni sono tratte (e tradotte) da <tt>/usr/share/doc/udev/</tt>. Si prega di correggere o segnalare ogni possibile (e probabile) inesattezza.
; MaXeR@fsfe.org : http://www.fsfe.org/Members/maxer/


== Il sottosistema hotplug ==
; MaXeR@persone.softwarelibero.it : http://persone.softwarelibero.org/person/MaXeR


Il sottosistema hotplug (dall'inglese: connessione a caldo, cio� a PC acceso) � un servizio del kernel che provvede a notificare in user space l'avvenuta connessione di un nuovo dispositivo.
; 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]
Nell'evoluzione del kernel Linux questo servizio ha subito diverse modificazioni, nel tentativo di migliorare ogni volta in termini di prestazioni e flessibilit�.


Nei kernel 2.4 l'interfaccia tra i driver e i programmi era fornita assieme a tutte le configurazioni del kernel stesso tramite il filesystem virtuale <tt>/proc</tt>, e i file di dispositivo erano creati staticamente: nella directory <tt>/dev</tt> erano presenti tutti i possibili device file.
Nel tentativo di migliorare il sistema venne implementato devfs, un altro filesystem virtuale, che si occupava solo dell'interazione programmi-driver, separando cos la gestione di questi da quella del kernel.


A partire dal kernel 2.6 devfs � stato progressivamente abbandonato e sostituito dal sysfs, ancora un filesystem virtuale, che adotta una nuova e unificata interfaccia verso i driver e che risulta migliore di tutte le implementazioni passate.
; jabber : maxer@jabber.linux.it


Qualsiasi sia l'interfaccia che il kernel mette a disposizione, necessario in user space un programma che si occupi di ricevere le notifiche di hotplug e compiere le azioni necessarie per l'utilizzo delle periferiche notificate (caricare moduli, eseguire script ed, eventualmente, creare file di dispositivo in <tt>/dev</tt>).


Prima di udev il programma che svolgeva questo compito era stato chiamato, con poca fantasia, hotplug.
[http://www.fsfe.org http://www.knio.it/images/a-happy-fellow.png]
Hotplug � tutt'ora in grado di svolgere il suo compito, ma ha alcune limitazioni che si sta tentando di superare:


*� uno script bash, quindi � lento. Notare che la cosa � ininfluente per gli utenti comuni, a meno che non si connettano decine di periferiche al minuto ;-)
=Le Mie Guide=
*sempre a causa della sua natura di script, occupa molto pi� spazio di un programma C, considerato anche che necessita dell'interprete /bin/sh. Anche questo fattore non tocca direttamente un utente comune, ma � invece fondamentale per chi sta riorganizzando il processo di boot per implementare un sistema di hotplug dentro ad un nuovo tipo di initrd: l'initramfs.
# [[La struttura della Distribuzione]]
*deve funzionare anche sui kernel 2.4, quindi non si appoggia al sysfs, perdendo in performance e funzionalit�.
# [[I repository ed il loro utilizzo]]
*necessita di una directory /dev statica (nota che il devfs � ormai in disuso)
# [[Introduzione all' Apt System]]
# [[Pulire Debian]]
# [[Applicare una patch ad un pacchetto Debian]]
# [[Apt-build: ottimizzazione dei pacchetti | '''Apt-build''': ottimizzazione dei pacchetti]]
# [[Apt-cdrom | '''Apt-cdrom''': aggiunta di cd/dvd nella lista dei repository]]
# [[Apt-file: ricerca all'interno dei pacchetti | '''Apt-file''': ricerca all'interno dei pacchetti]]
# [[Apt-listbugs: come monitorare i bug | '''Apt-listbugs''': come monitorare i bug]]
# [[Apt-zip: aggiornamenti senza una connessione veloce | '''Apt-zip''': aggiornamenti senza una connessione veloce]]
# [[Make-jpkg: Pacchettiziamo Java Sun| '''Make-jpkg''': Pacchettiziamo Java Sun]]
# [[Apt-Proxy: un proxy per i pacchetti Debian| '''Apt-Proxy''': un proxy per i pacchetti Debian]]
# [[Debmirror: creiamo un mirror Debian |'''Debmirror''': creiamo un mirror Debian]]
# [[Password sicure: la base della sicurezza informatica]]
# [[Come abilitare il completamento automatico 'avanzato']]
# [[Convertire immagini .nrg in immagini .iso]]
# [[mod_bandwidth: Gestione avanzata della banda]]
# [[Mrtg: monitoriamo la banda]]
# [[UsbMount: Gestione automatizzata delle periferiche usb di memorizzazione]]
# [[Powernowd: CpuScaling per AMD]]
# [[ cacti | Cacti per monitorare il sistema ]]
# [[ Debian_on_a_compaq_Presario_2154EA ]]
# [[ Munin ]]
# [[ Debian Fun ]]
# [[LAMP: Linux, Apache, MySQL e PHP]] Collaborazione con [[Utente:Keltik|Keltik]]
# [[ SysV ]]
# [[ jigdo ]]
# [[ Wireless Support ]]
# [[ Apache, SSL e CaCert.Org ]] (stub)
# [[ Pacchetizzare un tema per Bootsplash ]]
# [[ Gestione di un repository con debarchiver ]]
# [[ Ssh e autenticazione tramite chiavi ]]
# [[ Dupload per l'upload dei pacchetti Debian ]]
# [[ Synaptics touchpad ]]
# [[sshfs | Montare una directory remota con sshfs]]
# [[Unison e la sincronizzazione di directory]]
# [[Pbuilder: compilazione in ambienti puliti]]
# [[Madwifi | Installazione Driver Madwifi]]


== Cos'� udev ==
=Pagine in Lavorazione=
* [[Errori frequenti nell'uso di apt-get]]
* [[Controllare lo stato di un pacchetto]]
* [[Repository non ufficiali]]
* [[Pppd on demand: connessione ad internet dinamica]]
* [[Copiare-Spostare Debian]] (titolo non definitivo)
* [[Bugreport howto]]


Udev � un programma in user space in grado ricevere le notifiche del sottosistema hotplug dei kernel 2.6. A partire dalla versione 0.070 � in grado di fare tutto quello che faceva hotplug per i kernel 2.4, ma � molto pi� veloce e leggero (� scritto in C). In pi� udev � in grado di creare dinamicamente i device file (quelli in <tt>/dev</tt>) per ogni periferica che viene rilevata nel sistema.
=Ho scritto anche in=
* [[ Speciale:Contributions/MaXeR | dove ho ficcato il naso ;) ]]


Udev si appoggia unicamente al sysfs. Questo fatto ha il grande vantaggio di poter usufruire appieno della nuova e potente interfaccia di cui � stato dotato il kernel 2.6 (il sysfs, appunto) per la comunicazione tra i programmi in user space e i driver delle periferiche in kernel space, includendo nuove funzionalit� e migliore controllo sui driver stessi. L'unico svantaggio consiste nel fatto che non tutti i driver, al momento in cui si scrive, sono stati aggiornati per utilizzare il sysfs.
=Pagine Varie riportate da altre fonti=
 
# [[Perch� conviene sviluppare esclusivamente Software Libero]]
Udev � un programma molto potente e flessibile che, occupandosi direttamente della creazione dei file di dispositivo (device file), permette un controllo molto accurato nella gestione degli stessi, dando la possibilit� all'amministratore di impostare in modo personalizzato tutti i loro attributi (nome, permessi, proprietario, ecc.)
# [[Vendere Software Libero]]
Tramite delle regole (udev rules) si possono assegnare nomi fissi a determinati dispositivi (a prescindere, ad esempio, dalla porta usata per collegare la periferica). Inoltre � possibile richiamare un certo programma/script non appena un dispositivo viene riconosciuto dal sistema.
# [[Perch� il software non deve avere padroni]]
 
# [[La comunit� del software libero dopo 20 anni]]
Udev non si occupa tuttavia di caricare i moduli necessari al funzionamento del dispositivo, infatti questi <b>devono</b> essere gi� caricati per permettere ad udev di riconoscere la periferica e creare il corrispondente device file.
# [[Ricompense e Motivazione]]
 
Sulla stable ('''sarge''') udev � presente nella versione 0.056 e viene usato in accoppiata con hotplug, che si occupa di caricare i driver delle periferiche.
 
In '''etch''' (attuale testing) e '''sid''' udev ha invece sostituito anche Hotplug.
 
Questa guida � dedicata alla versione di udev attualmente in etch.
 
== Il nuovo udev ==
 
Dalla versione 0.070 in poi udev ha sostituito completamente hotplug. I driver delle periferiche rilevate vengono caricati tutti automaticamente durante il boot. Per fare un esempio, se al boot vengono trovate delle porte usb, verr� automaticamente caricato il modulo <tt>usb-storage</tt> che permetter� (tra le altre cose) di usare eventuali chiavette usb.
 
Per usare questa versione di udev � necessario un kernel 2.6.12 o superiore con le opzioni hotplug (CONFIG_HOTPLUG) e tmpfs (CONFIG_TMPFS) attivate. Le opzioni CONFIG_PNP, CONFIG_ISAPNP, CONFIG_PNPBIOS e CONFIG_PNPACPI sono altamente raccomandate per consentire il caricamente automatico di importanti driver.
 
A partire dal kernel 2.6.15-rc1 � stata introdotta la nuova implementazione del driver model, la quale presenta nuove feature e una migliore organizzazione dei contenuti di sysfs. Per gestire correttamente i vari dispositivi � quindi obbligatorio dotarsi di una versione di udev pari o superiore alla 0.071.
 
Il pacchetto hotplug deve essere rimosso manualmente, anche se non dovrebbe creare problemi se restasse installato.
 
Si pu� disabilitare udev aggiungendo al boot il parametro del kernel <tt>UDEV_DISABLED=yes</tt> in grub o lilo. Alternativamente si pu� configurare in <tt>/etc/udev/udev.conf</tt> una directory diversa da <tt>/dev</tt> per la creazione dei device file.
 
== Come funziona udev ==
Quando un driver viene caricato, rende disponibili delle informazioni in <tt>/sys</tt> e udev viene eseguito per leggerle e creare il device file appropriato.
 
Quando si collega una nuova periferica viene generato un evento di hotplug che viene intercettato non pi� da <tt>/sbin/hotplug</tt> bens� da <tt>/sbin/udevsend</tt> (il gestore degli eventi hotplug � indicato in <tt>/proc/sys/kernel/hotplug</tt>).
 
Questo significa che:
* i moduli non possono essere caricati su richiesta quando un'applicazione cerca di aprire un suo dispositivo, perch� il dispositivo non c'� ancora!
 
* poich� i moduli non vengono caricati su richiesta, se per qualche motivo i driver non possono essere caricati automaticamente durante il boot, bisogner� aggiungerli ad /etc/modules (oppure usare modconf ;-)).
 
* alcuni moduli non sono dei driver di un dispositivo e non possono essere caricati automaticamente da udev, devono quindi essere elencati in /etc/modules anch'essi.
 
* alcuni driver non sono stati ancora portati su sysfs, e udev non sar� in grado di creare i loro device. Se si usa uno di questi driver � necessario creare il device dopo ogni boot. A questo scopo vedere la sezione sul file <tt>/etc/udev/links.conf</tt>
 
In altre parole, su un tipico sistema si potrebbero dover caricare manualmente (usando /etc/modules) dei moduli come ppdev e tun.
 
== Da hotplug a udev ==
 
Nel passaggio da hotplug a udev i seguenti file di configurazione sono diventati obsoleti:
 
; <tt>/etc/hotplug/*.rc</tt> e <tt>*.agent</tt>: i vecchi file di hotplug non vengono pi� usati. Le regole di udev in <tt>/etc/udev/rules.d/</tt> possono essere usate per disabilitare selettivamente il coldplugging.
 
; <tt>/etc/hotplug/usb/*.usermap</tt>: devono essere sostituiti da regole udev.
 
; <tt>/etc/hotplug/blacklist*</tt>: dovrebbero essere sostituite da direttive di configurazione di modprobe (ma per adesso modprobe processer� <tt>/etc/hotplug/blacklist.d/</tt>).
 
Inoltre dalla versione 0.072:
 
* tutti i file in <tt>/etc/udev/scripts/</tt> e <tt>/lib/hotplug/</tt> e alcuni file in <tt>/sbin/</tt> sono stati spostati in <tt>/lib/udev/</tt>. Non dimenticate di aggiornare le regole personalizzate, se ne avete create.
 
== La directory <tt>/etc/udev/rules.d/</tt> ==
 
I file vengono letti e processati in ordine alfabetico, e le direttive contenute nelle regole vengono applicate in ordine. Le uniche eccezioni sono gli attributi NAME, di cui viene considerato solo il primo.
 
Poich� l'ordine � importante, alcuni di questi file hanno un nome particolare, per far s� che vengano letti prima o dopo di altri, e devono essere opportunamente considerati quando si aggiungono regole personalizzate.
 
Fino ad ora sono stati definiti:
 
; <tt>020_permissions.rules</tt>: imposta proprietario e permessi di default.
 
; <tt>z50_run.rules</tt>: viene eseguito <tt>$REMOVE_CMD</tt>, e successivamente l'elaborazione dei device tty viene fermato con <tt>last_rule</tt>.
 
; <tt>z70_hotplugd.rules</tt>: le opzioni di <tt>last_rule</tt> finiscono di processare gli eventi hotplug riguardanti "drivers" e "module" e vengono eseguiti i vecchi script in <tt>hotplug.d/</tt> e <tt>dev.d/</tt>.
 
E' fortemente sconsigliato di modificare i file nella directory <tt>/etc/udev/rules.d/</tt>, perch� il sistema di gestione dei pacchetti ([[Introduzione_all%27_Apt_System | APT]]) per default non aggiorna i file che vengono modificati dopo l'installazione.
 
Per aggiungere delle regole personalizzate per un device � sufficiente inserirle in un file <tt>/etc/udev/rules.d/00_local.rules</tt> creato da voi. Il nome del file assicura che esso venga letto per primo, e questo ci permette di inserire delle regole che varranno eseguite <b>al posto</b> di quelle di default per lo stesso device.
 
== Il file <tt>/etc/udev/links.conf</tt> ==
 
Purtroppo non tutti i driver hanno un'interfaccia sysfs, e in questo caso udev non sar� in grado di creare alcun device node in modo automatico. Il problema � evidente nel caso di driver sviluppati al di fuori dal kernel, e/o proprietari, su cui si pu� solo sperare che gli autori/manutentori implementino la funzionalit�.
 
Nel frattempo abbiamo bisogno di un workaround: certo, uno script di avvio con i giusti comandi (vedi mknod, chmod, chown) pu� risolvere il problema, ma il pacchetto udev in Debian fornisce un altro mezzo pi� semplice: il file <tt>/etc/udev/links.conf</tt>.
 
La sintassi del file � la seguente:
* Ogni riga vuota o che inizia con "#" viene trascurata.
* Ogni riga che inizia con "L" dice ad udev di creare un link simbolico; dopo la L iniziale devono essere specificati due parametri separati da uno spazio o da un tab: il primo � il nome del link da creare nella directory <tt>/dev</tt>, e il secondo � il file a cui punta il link.
* Ogni riga che inizia con "D" dice ad udev di creare una sottodirectory della directory <tt>/dev</tt>, il cui nome deve essere specificato dopo uno spazio o un tab.
* Ogni riga che inizia con "M" dice ad udev di usare <tt>/dev/MAKEDEV</tt> per creare un device node, e di seguito devono essere indicati i parametri da passare a <tt>/dev/MAKEDEV</tt>, che sono, nell'ordine: il tipo di device, il major number e il minor number (per delucidazioni in merito vedere <tt>man mknod</tt>).
 
{{Warningbox|Coma gi� detto, il file <tt>/etc/udev/links.conf</tt> rappresenta un workaround, e come tale deve essere usato il meno possibile. In particolare, al fine di evitare conflitti e possibili ''race condition'', si raccomanda di <b>non usare mai</b> questo file per delle impostazioni che udev � in grado di fare in altro modo.}}
 
Per sottolineare il concetto riporto il commento del mantainer che appare in testa al file:
<pre>
# This file does not exist. Please do not ask the debian maintainer about it.
# You may use it to do strange and wonderful things, at your risk.
</pre>
che si legge:
 
''Questo file non esiste. Vi prego di non chiedere al mantainer Debian di questo file. Potete usarlo per fare cose strane e meravigliose, a vostro rischio.''
 
== Link ==
 
Altri link di approfondimento:
* [http://www.debian-administration.org/articles/126 Card Readers and USB keys using udev]
* [http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html udev Homepage]
* [http://www.reactivated.net/udevrules.php Writing udev rules]