Dipendenze: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(aggiunte varie)
Nessun oggetto della modifica
Riga 1: Riga 1:
== Introduzione ==
[[Category:Glossario]]
Questa � una breve guida su come patchare un kernel 2.6 con la patch realtime-preemption di Ingo Molnar per ottenere un kernel a bassa latenza.


Il kernel 2.6 ha raggiunto ormai delle prestazioni molto buone per quanto riguarda la latenza. Normalmente non � necessario usare nessuna patch aggiuntiva. Se per� si vogliono raggiungere prestazioni estreme (come lavorare in full-duplex su diverse tracce a latenze inferiori a ~ 5 ms) � necessario usare la patch realtime-preemption.
= Cosa sono le dipendenze =
Ci sono diverse situazioni in cui un pacchetto ha bisogno, per funzionare, di un altro pacchetto, o anche più di uno. Per esempio la traduzione in italiano di Mozilla ha banalmente bisogno di Mozilla installato per funzionare.


Per chi non conoscesse il mondo dell'audio professionale su GNU/Linux consiglio questo magnifico sito introduttivo:
In un sistema Unix, e ancor più in un sistema GNU/Linux, la gestione delle dipendenze dei pacchetti da altri pacchetti tende ad essere estremamente complicata, in quanto i casi che si possono verificare comprendono:
* Pacchetti che dipendono semplicemente da altri pacchetti;
* Pacchetti che vanno in conflitto con altri pacchetti;
* Pacchetti che non dipendono da un pacchetto preciso, ma da una tipologia di pacchetti (un programma grafico ha bisogno, per esempio, di font, ma non di un tipo specifico di font: spesso è sufficiente che ci sia <b>almeno</b> un pacchetto di font installato);
* Pacchetti che dipendono da una versione specifica di altri pacchetti (di solito è sufficiente una richiesta del tipo "dalla versione x.y.z in su");
* Una combinazione anche molto complicata delle precedenti.


* [http://www.emillo.net/audio_midi emillo.net]
Debian vanta un gestore di pacchetti estremamente avanzato ([[APT]]), in grado, nella stragrande maggioranza dei casi, di risolvere automaticamente questo tipo di problemi.


In questo ambiente le patch e i kernel evolvono rapidamente. Non posso che descrivere il processo che ho usato con il kernel e la patch attuale (questa particolare combinazione a me ha dato ottimi risultati!), sapendo che le versioni di kernel e patch citate diventeranno presto obsolete.  
= APT: risolutore di dipendenze =
Il sistema di gestione dei pacchetti Debian risolve automaticamente le dipendenze. Questo vuol dire che se cercate di installare un pacchetto verranno installati anche tutti i pacchetti necessari (ovvero le dipendenze) al suo funzionamento. In alcuni casi [[APT]] può anche decidere di rimuovere un pacchetto che va in conflitto con uno dei pacchetti da installare. Se nella risoluzione delle dipendenze ci sono diverse vie possibili, [[APT]] ne sceglie una a seconda del comando usato e dei valori di default impostati nei file di configurazione. Quando in base a queste regole [[APT]] non riesce a scegliere tra due o più azioni, viene segnalato il problema e sta all'amministratore decidere quale scelta intraprendere.


{{Warningbox|Se non siete a vostro completo agio a compilare e patchare il kernel questa non � la via che fa per voi. Consiglio in tal caso si usare il [http://demudi.agnula.org/packages/demudi/pool/main/demudi/ kernel multimediale di DeMuDi]. Se volete, invece, un setup per l'audio professionale pronto per l'uso, installate l'ottima [http://demudi.agnula.org/ distribuzione DeMuDi] (� una [http://wiki.debian.net/index.cgi?CustomDebian CDD]).}}
= Dipendenze obbligatorie, consigliate e suggerite =
Le dipendenze di cui si è parlato finora sono le cosiddette ''dipendenze obbligatorie''. In realtà [[APT]] gestisce anche dipendenze più "deboli" che sono appunto ''pacchetti consigliati'' e ''pacchetti suggeriti''.


== Dal kernel stabile all'RC ==
Come suggerisce il nome, i ''pacchetti consigliati'' sono delle dipendenze non obbligatorie (senza le quali un dato pacchetto può funzionare ugualmente) che però aggiungono importanti funzionalità ad un programma. In genere è consigliabile installare i pacchetti consigliati :-P.
Consiglio di compilare l'ultima versione stabile del kernel, configurandola e testandola fino ad ottenere una configurazione ben funzionante. Come spunto potete usare [[Esempio configurazione kernel|questa configurazione]]. Nel mio caso ho usato il kernel 2.6.13.2 e la [[Debian Kernel Howto|debian-way]] di compilare il kernel.


La patch realtime-preemption pi� recente si applica solitamente ai kernel RC (Release Candidate). Questo perch� Ingo Molnar segue sempre il kernel pi� recente (quindi usa le RC come base di partenza per la sua patch). Quando viene rilasciato un nuovo kernel stabile Ingo Molnar rilascia pach per il nuovo kernel stabile, ma dopo alcune settimane passa nuovamente a seguire l'ultima RC uscita nel frattempo.  
I ''pacchetti suggeriti'' sono, invece, pacchetti che aggiungono delle funzionalità a cui non tutti sono necessariamente interessati.


Quindi, si hanno due possibilit�:
= Dipendenze inverse =
# compilare l'ultimo kernel stabile con l'ultima patch rilasciata per quel kernel
Con il nome ''dipendenze inverse'' si indica l'insieme dei pacchetti che dipendono da un dato pacchetto. Le dipendenze inverse sono i pacchetti che vengono eliminati quando si rimuove un dato pacchetto.
# compilare l'ultimo kernel rc e usare la versione corrente della pacth.


Attualmente l'ultimo kernel stabile, per il quale sia stata rilasciata la patch realtime preemption � il [ftp://ftp.it.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 2.6.14] (non i successivi 2.6.14.x). Per tale kernel l'ultima patch disponibile � la [http://people.redhat.com/mingo/realtime-preempt/older/patch-2.6.14-rt22 2.6.14-rt22], come si pu� vedere [http://people.redhat.com/mingo/realtime-preempt/older/ qui].
Il modo più semplice per visualizzare le dipendenze inverse è lanciare <code>aptitude</code>, selezionare il pacchetto interessato e premere ''''r'''' (Reverse dependencies). Per maggiori informazioni vedere la [[Aptitude|guida dedicata ad Aptitude]].
 
Se invece si vuole usare l'[http://people.redhat.com/mingo/realtime-preempt/ ultima patch] realtime-preemption (attualmente 2.6.15-rc5-rt2) bisogna usare anche l'[ftp://ftp.it.kernel.org/pub/linux/kernel/v2.6/testing/ ultimo kernel RC].
 
Per passare da un kernel stabile ad un RC basta fare un <tt>make oldconfig</tt> in modo da configurare solo le nuove voci. Questo metodo "a due passi" permette di separare i problemi dovuti ad un eventuale errore di configurazione del kernel stabile dai problemi potenzialmente introdotti dall'uso di un kernel RC non stabile.
 
== La patch realtime-preemption ==
L'archivio delle patch realtime-premption si trova [http://people.redhat.com/mingo/realtime-preempt/ qui]. La patch realtime-preemption da me usata e la 2.6.14-rc5-rt5. La patch � un semplice file di testo. Il suo nome � del tipo <tt>patch-''<kernel version>''-''<patch version>''</tt>. Bisogna applicare la patch all'esatta versione del kernel indicata dal nome. Nel mio caso ho usato la [http://people.redhat.com/mingo/realtime-preempt/older/patch-2.6.14-rc5-rt5 versione rt5 applicata al kernel 2.6.14-rc5]. Tenete presente che nuove versioni della patch vengono rilasciate giornalmente.
 
Per applicare la patch basta copiarla in <tt>/usr/src</tt>, entrare della dir del kernel e lanciare il comando (nel mio esempio):
 
  $ cat ../patch-2.6.14-rc3-rt2 |patch -p1 -t
 
A questo punto nuovamente un make oldconfg ci permetter� di configurare le voci inserite dalla patch. Assicurarsi di scegliere '''Complete Preemption (Real-Time)''' in:
 
<pre>
Processor type and features  --->
  Preemption Mode (Complete Preemption (Real-Time))
</pre>
 
per il resto ho lasciato tutte le altre voci su NO.
 
Non ci resta che compilare il kernel:
 
  $ fakeroot make-kpkg --append-to-version -realtime --revision 0.1 kernel_image
 
ed installare il pacchetto.
 
== Il modulo realtime-lsm ==
Per usare il server audio jack in realtime da utente normale � inoltre necessario compilare il modulo realtime-lsm. Su debian � semplicissimo, basta installare il pacchetto realtime-lsm-source e usare <tt>[[Pagina di manuale di module-assistant|module-assistant]]</tt> per compilare e pacchettizzare il modulo. Dopo aver fatto un boot del nuovo kernel basta il seguente comando:
 
  $ m-a build realtime-lsm
 
per copilare e creare un pacchetto per il modulo. A questo punto non ci resta che installare il pacchetto realtime-lsm creato.
 
L'uso di questo modulo non richiede alcuna patch al kernel ed � usabilissimo anche con un normale kernel vanilla.
 
Questo modulo non � mai stato accettato nel tree ufficilae del kernel per i potenziali problemi di sicurezza legati al fatto di dare i privileggi realtime ai processi dei singoli utenti. E' gi� presente nel kernel un nuovo meccanismo pi� sicuro per concedere i privileggi di realtime chiamato rlimits che sostituir� il modulo realtime-lsm. Tuttavia si dovr� aspettare che gli rlimits vengano inclusi nelle distribuzioni dato che � richiesto l'impiego di libc che li supporti. Attualmente, un metodo per usare gli rlimits senza cambiare libc, � quello di patchare PAM. Personalmente non ho ancora provato questa alternativa.
 
== Conlusioni ==
Con un kernel cos� ottimizzato si raggiungono prestazioni realtime davvero spinte. Io ad esempio, con una modestissima SB Audigy 1 posso fare partire jack a 32 frame x 2 periodi @ 48000Hz (latenza 1.3 ms!) in modalit� solo playback. Qualche xrun avviene ancora a latenze cos� basse se si eseguono altre operazioni sulla macchina. Per avere la massima affidabilit� in full-duplex utilizzo usualmente jack a 128x2 @ 48000Hz.
 
In bocca al lupo e...
 
Happy Debian!
 
== Links ==
 
* http://www.emillo.net/home
* http://www.djcj.org/LAU/guide/index.php
* http://tapas.affenbande.org/?page_id=3
 
 
----
 
Autore: [[Utente:TheNoise|~ The Noise]]

Versione delle 02:41, 10 gen 2010


Cosa sono le dipendenze

Ci sono diverse situazioni in cui un pacchetto ha bisogno, per funzionare, di un altro pacchetto, o anche più di uno. Per esempio la traduzione in italiano di Mozilla ha banalmente bisogno di Mozilla installato per funzionare.

In un sistema Unix, e ancor più in un sistema GNU/Linux, la gestione delle dipendenze dei pacchetti da altri pacchetti tende ad essere estremamente complicata, in quanto i casi che si possono verificare comprendono:

  • Pacchetti che dipendono semplicemente da altri pacchetti;
  • Pacchetti che vanno in conflitto con altri pacchetti;
  • Pacchetti che non dipendono da un pacchetto preciso, ma da una tipologia di pacchetti (un programma grafico ha bisogno, per esempio, di font, ma non di un tipo specifico di font: spesso è sufficiente che ci sia almeno un pacchetto di font installato);
  • Pacchetti che dipendono da una versione specifica di altri pacchetti (di solito è sufficiente una richiesta del tipo "dalla versione x.y.z in su");
  • Una combinazione anche molto complicata delle precedenti.

Debian vanta un gestore di pacchetti estremamente avanzato (APT), in grado, nella stragrande maggioranza dei casi, di risolvere automaticamente questo tipo di problemi.

APT: risolutore di dipendenze

Il sistema di gestione dei pacchetti Debian risolve automaticamente le dipendenze. Questo vuol dire che se cercate di installare un pacchetto verranno installati anche tutti i pacchetti necessari (ovvero le dipendenze) al suo funzionamento. In alcuni casi APT può anche decidere di rimuovere un pacchetto che va in conflitto con uno dei pacchetti da installare. Se nella risoluzione delle dipendenze ci sono diverse vie possibili, APT ne sceglie una a seconda del comando usato e dei valori di default impostati nei file di configurazione. Quando in base a queste regole APT non riesce a scegliere tra due o più azioni, viene segnalato il problema e sta all'amministratore decidere quale scelta intraprendere.

Dipendenze obbligatorie, consigliate e suggerite

Le dipendenze di cui si è parlato finora sono le cosiddette dipendenze obbligatorie. In realtà APT gestisce anche dipendenze più "deboli" che sono appunto pacchetti consigliati e pacchetti suggeriti.

Come suggerisce il nome, i pacchetti consigliati sono delle dipendenze non obbligatorie (senza le quali un dato pacchetto può funzionare ugualmente) che però aggiungono importanti funzionalità ad un programma. In genere è consigliabile installare i pacchetti consigliati :-P.

I pacchetti suggeriti sono, invece, pacchetti che aggiungono delle funzionalità a cui non tutti sono necessariamente interessati.

Dipendenze inverse

Con il nome dipendenze inverse si indica l'insieme dei pacchetti che dipendono da un dato pacchetto. Le dipendenze inverse sono i pacchetti che vengono eliminati quando si rimuove un dato pacchetto.

Il modo più semplice per visualizzare le dipendenze inverse è lanciare aptitude, selezionare il pacchetto interessato e premere 'r' (Reverse dependencies). Per maggiori informazioni vedere la guida dedicata ad Aptitude.