Mail Server Sicuro con Postfix: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
Riga 1: Riga 1:
==Pacchettizzare ed installare Xorg su Debian Sid==
== Disclaimer ==
===Introduzione===


Xorg � ormai ufficialmente entrato in Sid ed in Etch. La guida � dunque diventata obsoleta, ma viene lasciata per motivi storici e didattici.
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.


Buona Lettura ;-).
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.


===Descrizione===
== Il sottosistema hotplug ==
Questa guida tenter� di illustrare i passi base necessari a chi volesse cimentarsi nella compilazione ed installazione di xorg su sid.<br>
Il nostro obiettivo � creare una serie di pacchetti .deb adattando quelli presenti nei repository dei sorgenti ubuntu e personalizzandoli per sid.<br>
Tutto questo lavoro di compilazione serve ad evitare di dover installare ulteriori pacchetti dal repository ubuntu, le cui versioni sono spesso presenti soltanto in quel particolare repository (molti pacchetti vengono personalizzati e modificati dal team di sviluppo) e che renderebbero il nostro sistema un misto tra ubuntu e debian.<br>
Tenuta presente comunque la buona compatibilit� dei sorgenti dei pacchetti ubuntu rispetto ai .deb prelevati da debian.org (specialmente in relazione alle dipendenze di ciascun pacchetto), � possibile ricostruire l'intero xorg sfruttando le librerie necessarie prelevandole  per�, direttamente da sid.<br>
Faccio notare come la durata di tutta l'operazione sia un fattore importante da valutare: sulla mia macchina (Athlon xp 2000+, 256Mb), ad esempio, sono necessari oltre '''100 minuti''' per portare a termine tutto il processo di compilazione.<br>


===Configurazione sistema===
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.
Innanzitutto dobbiamo aggiungere ad i repository dei pacchetti che usiamo abitualmente, anche quello di ubuntu (NB: abbiamo bisogno solo dei sorgenti, quindi basta la sola riga con deb-src), commentando temporaneamente le altre righe deb-src presenti nel nostro '''sources.list'''.<br>
Nell'evoluzione del kernel Linux questo servizio ha subito diverse modificazioni, nel tentativo di migliorare ogni volta in termini di prestazioni e flessibilit�.


<pre>deb-src http://us.archive.ubuntu.com/ubuntu hoary universe main restricted</pre>
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.


Dopo aver aggiunto tale riga, provvediamo ad aggiornare le liste di apt con il solito '''apt-get update'''.<br>
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.
Durante l'operazione, possiamo controllare se viene scaricata anche la lista appena inserita per i pacchetti di ubuntu.


Prepariamo adesso una directory di nome '''xorg''', con il comando <pre>mkdir xorg</pre> questa accoglier� i sorgenti prelevati dalla rete, i file oggetto prodotti dalla compilazione ed infine i pacchetti .deb.<br>
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>).
Per esperienza personale, consiglio di creare la cartella all'interno di una partizione con '''almeno 4.5 gb di spazio libero'''.


===Modifica degli script di compilazione===
Prima di udev il programma che svolgeva questo compito era stato chiamato, con poca fantasia, hotplug.
Posizionamoci nella directory appena creata, e con <pre>apt-get source xorg</pre> procediamo al download dei sorgenti e alla scompattazione dei sorgenti di xorg.<br>
Hotplug � tutt'ora in grado di svolgere il suo compito, ma ha alcune limitazioni che si sta tentando di superare:
Attualmente, (versione '''6.8.2-10'''), il download consiste di circa '''51 MB''' di archivi.<br>
Alla fine del download, notiamo che sono stati creati all'interno della directory xorg, alcuni file ed una directory.


* situazione del nostro filesystem
*� 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 ;-)
<pre>[xorg]
*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 che 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.
|
*deve funzionare anche sui kernel 2.4, quindi non si appoggia al sysfs, perdendo in performance e funzionalit�.
|_ [xorg-6.8.2]
*necessita di una directory /dev statica (nota che il devfs � ormai in disuso)
|  |
|  |_ [debian]
|  |_ ALTRI_FILES
|
|_ xorg_6.8.2-10.diff.gz
|_ xorg_6.8.2-10.dsc
|_ xorg_6.8.2.orig.tar.gz</pre>


La directory '''xorg-6.8.2''' raccoglie i sorgenti scompattati dell'archivio orginale di xorg (oltre ai file necessari alla compilazione di un sorgente debian), a cui non sono ancora state applicate le varie patch apportate dali sviluppatori ubuntu.<br>
== Cos'� udev ==
I file, invece, rappresentano l'archivio con il sorgente originale, il file con le patch approntate dal team di ubuntu e quello con la descrizione del pacchetto debian.<br>
Posizionamoci pertanto nella sottodirectory '''debian''' di xorg-6.8.2.


Affinch� si possano adattare i sorgenti a sid, dobbiamo modificare 2 file: nel primo caso la modifica � pi� che altro cosmetica, nel secondo caso invece � una scelta obbligata.
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.


Con il nostro editor preferito, apriamo pertanto il file '''changelog'''.<br>
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.
Questo file mantiene lo storico delle modifiche fatte dagli sviluppatori ubuntu a partire dalla versione stable rilasciata dal team di xorg: tale file viene regolato da una sintassi ben precisa, in cui anche gli spazi hanno una loro funzione e pertanto vanno tenuti in considerazione per la buona riuscita della compilazione.<br>
E' necessario pertanto, prestare molta attenzione alla disposizione dei vari campi e al numero degli spazi che li delimitano.<br>
La entry pi� recente presente nella versione attuale del file changelog ci appare cos�:
<pre>xorg (6.8.2-10) hoary; urgency=low


  * Include patch from Ben Herrenschmidt to fix assertion of DDC GPIO lines
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.)
    after a DDC probe had finished, which would render Apple Studio Displays
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.
    useless.
  * Don't reset all templates when migrating from xserver-xfree86; this will
    render the template migration useless.  Don't mess with $RECONFIGURE when
    migrating from xfree86. Set use_sync_ranges true when upgrading from
    xfree86 (closes: Ubuntu#8562, Ubuntu#8626).
  * Use debug_echo liberally in xserver-xorg.postinst.in to tell us why we're
    writing out sync ranges.


-- Daniel Stone <daniel.stone@ubuntu.com> Tue,  5 Apr 2005 08:38:20 +1000</pre>
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.
Affinch� possiamo ottenere una nostra versione personalizzata dei pacchetti, dobbiamo aggiungere precendetemente al gruppo di linee appena descritto (quindi all'inizio del file), qualcosa del genere:
<pre>xorg (6.8.2-10-ld10) sid; urgency=low


  * [Ld-xorg] packages for Debian Sid, based on Ubuntu sources.
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.


-- Mario "Ldonesty" Di Nitto <ldonesty@debianizzati.org>  Sun, 15 May 2005 10:25:32 +0100</pre>
In '''etch''' (attuale testing) e '''sid''' udev ha invece sostituito anche Hotplug.


mantenendo uno spazio di separazione con il gruppo successivo.
Questa guida � dedicata alla versione di udev attualmente in etch.


Queste righe possono essere personalizzate secondo i propri gusti tenendo presente che '''6.8.2-10-ld10''' sar� la versione che comparir� nel nome di ogni pacchetto, dove -ld indica la nostra estensione personale, la quale *dovr�* essere seguita da un numero a scelta: es -myExt1.<br>
== Il nuovo udev ==
Infatti la mancanza di tale valore pregiudica irreparabilmente la compilazione e creazione dei pacchetti (lo script preposto all'operazione, si rifiuter� di assemblare i .deb)


A questo punto salviamo il file changelog e dedichiamoci invece a '''control'''.<br>
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.
La struttura del file control si puo riassumere in una sequenza di "blocchi" all'interno dei quali sono contenute tutte le informazioni proprie di un pacchetto debian raccolte per riga (ad esempio: la descrizione, le dipendenze, i conflitti, etc etc). <br>
Dato che la versione di xorg su cui stiamo lavorando proviene dal repository ubuntu, � possibile che siano presenti alcune dipendenze relative a pacchetti contenuti solamente in tale repository.<br>
Pertanto questi pacchetti risulterebbero non disponibili all'atto dell'installazione sulla nostra sid, pregiudicando cos� tutta l'operazione.<br>
Possiamo evitare questa situazione ricercando nelle sole righe Depends del file control, i riferimenti ai pacchetti di ubuntu (presentano la segnatura "ubuntu" all'interno del numero di versione).<br>
Nel nostro caso, scorrendo il file (possiamo usare la funzione di ricerca del nostro editor) notiamo che alla riga 1895 � presente una referenza al pacchetto '''lsb-base''' nella versione ('''1.3-9ubuntu2''').


Dopo aver controllato che in sid esista tale pacchetto in una versione per lo meno uguale (meglio se superiore) a quella citata dal file control (possiamo usare '''apt-cache show lsb-base | grep Version''' per questo scopo), cancelliamo la parola "ubuntu" ed ogni eventuale numero postposto, lasciando quindi solo il numero della versione del pacchetto, infine salviamo.<br>
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.
Quindi la versione di lsb-base nella riga Depends ci apparir� come ('''1.3-9''').<br>
Relativamente a questa versione di xorg, non ci sono altre referenze da modificare; nel caso in cui, invece, fossimo in presenza di parecchie dipendenze da sistemare dobbiamo valutare ciascun caso separatamente, ripetendo tutta la procedura di controllo e modifica.


===Controllo dipendenze e avvio compilazione===
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.
A questo punto siamo in grado di avviare la compilazione/creazione dei pacchetti di xorg usando il comando '''dpkg-buildpackage''' dopo esserci posizionati nella cartella xorg-6.8.2 ed aver ottenuto i privilegi di root.


Molto probabilmente ci verr� notificato che alcune dipendenze non sono soddisfatte per portare a termine la compilazione:
Il pacchetto hotplug deve essere rimosso manualmente, anche se non dovrebbe creare problemi se restasse installato.


es.
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.


<pre>dpkg-checkbuilddeps: Unmet build dependencies: flex bison groff zlib1g-dev |
== Come funziona udev ==
libz-dev libpam0g-dev | libpam-dev libfreetype6-dev rman lynx
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.
libglide2-dev (>> 2001.01.26) libglide3-dev (>= 2002.04.10-7) libpng12-dev |
libpng-dev libexpat1-dev libfontconfig1-dev libxft-dev (>= 2.1.2) libxcursor-dev
dbs m4 libxrender-dev (>= 0.9.0) sharutils</pre>


Per ovviare a questo problema possiamo installare i pacchetti suggeriti usando il comando:
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>).


<pre>apt-get install flex bison groff zlib1g-dev libpam0g-dev libfreetype6-dev \
Questo significa che:
rman lynx libglide2-dev libglide3-dev libpng12-dev libexpat1-dev libfontconfig1-dev \
* i moduli non possono essere caricati su richiesta quando un'applicazione cerca di aprire un suo dispositivo, perch� il dispositivo non c'� ancora!
libxft-dev libxcursor-dev dbs m4 libxrender-dev sharutils</pre>


A questo punto possiamo rilanciare il comando '''dpkg-buildpackage''' (a cui potremo preporre il comando '''time''', per visualizzare la durata effettiva di tutta l'operazione) ed attendere che i pacchetti vengano creati.
* 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 ;-)).


===Installazione===
* 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.
Posizionamoci innanzitutto nella cartella dove sono contenuti i file .deb di xorg.


Possiamo avere 3 situazioni:
* 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.
* Macchina pulita: nessun xfree/xorg precedentemente installato
*  Xorg in una versione precedente
*  Xfree preso da sid


<br>La prima situazione pu� essere risolta (NB, si potrebbe fare anche con un repository locale) con <pre>dpkg -i x-window-system-core*.deb </pre> aggiungendo volta per volta i pacchetti che vengono richiesti come mancanti in coda a dpkg -i, ovvero
In altre parole, su un tipico sistema si potrebbero dover caricare manualmente (usando /etc/modules) dei moduli come ppdev e tun.
<pre>dpkg -i PKT1 PKT2 PKT3 PKT4</pre> dove i vari PKT corrispondono al nome del pacchetto '''completo di estensione'''.
== 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.


[[Utente:Ldonesty|Ldonesty]]
; <tt>/etc/hotplug/usb/*.usermap</tt>: devono essere sostituiti da regole udev.


[[Categoria:Apt-Dev]]
; <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>).
[[Categoria:Old]]
 
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.
 
== 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]