Old:Low-latency 2.6 kernel per applicazioni audio realtime: differenze tra le versioni

m (aggiornamenti di versioni)
(→‎Dal kernel stabile all'RC: aggiornamenti vari)
Riga 1: Riga 1:
== Introduzione ==
Per poter firmare i nostri package necessitiamo di sue strumenti per poter firmare i nostri package necessitiamo di due strumenti '''gpg''' e '''dpkg-sig'''.
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.
Il primo dovrebbe essere gi� installato di default con la nostra debian, per il secondo:


Per chi non conoscesse il mondo dell'audio professionale su GNU/Linux consiglio questo magnifico sito introduttivo:
<pre>
# apt-get install dpkg-sig
</pre>


* [http://www.emillo.net/audio_midi emillo.net]
fatto questo generiamo una nuova coppia di chiavi , da usare solo per firmare i packages:


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.
<pre>
$ gpg --gen-key
</pre>


{{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]).}}
* rispondiamo 1 alla prima domanda ovvero DSA e ElGamal, diamo invio
* come dimensione lasciamo pure 1024, diamo invio
* mettiamo 0 come scadenza, diamo invio
* rispondiamo s, diamo invio
* ora ci verr� chiesto Nome e Cognome:


== Dal kernel stabile all'RC ==
<pre>
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.
Nome e Cognome: denis pecci
</pre>


Attualmente le patch realtime-preemption si applicano (ufficialmente) ai soli kernel rc (Release Candidate). Quindi si dovr� scaricare e compilare un kernel rc. Nel momento un cui scrivo l'ultimo rc � il [ftp://ftp.it.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.14-rc5.tar.bz2 2.6.14-rc5]. Se si � precedentemente compilato un kernel stabile basta fare un make oldconfig per configurare 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 non stabile rc. Per questo ho consigliato di testare prima il kernel stabile per verificare l'assenza di problemi.
inseriamo i nostri dati e diamo invio


== La patch realtime-preemption ==
* ora ci viene chiesto l'indirizzo email:
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):
<pre>
Indirizzo di Email: debian@nextdeb.net
</pre>


  $ cat ../patch-2.6.14-rc3-rt2 |patch -p1 -t
inseriamolo e diamo invio


A questo punto nuovamente un make oldconfg ci permetter� di configurare le voci inserite dalla patch. Assicurarsi di scegliere '''Complete Preemption (Real-Time)''' in:
* ed ora inseriamno il commento per la coppia di chiavi:


<pre>
<pre>
Processor type and features  --->
Commento: NextDeb Team Packager
  Preemption Mode (Complete Preemption (Real-Time))
</pre>
</pre>


per il resto ho lasciato tutte le altre voci su NO.
diamo invio


Non ci resta che compilare il kernel:
* ora premiamo ''''o'''' e invio
* ora ci verr� richiesta la password per le chiavi, inseriamola e invio


  $ fakeroot make-kpkg --append-to-version -realtime --revision 0.1 kernel_image
Ecco fatto, ora abbiamo la nostra coppia di chiavi per firmare i pacchetti, esportiamole sul nostro keyserver preferito.


ed installare il pacchetto.
Per firmare i nostri packages procediamo in questo modo:


== Il modulo realtime-lsm ==
<pre>
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:
# dpkg-sig --sign nostronick nomepackages.deb
</pre>


  $ m-a build realtime-lsm
{{Box|Esempio|
<pre>
# dpkg-sig --sign debian cwcdr_2.0.1-4_all.deb
Processing cwcdr_2.0.1-4_all.deb...


per copilare e creare un pacchetto per il modulo. A questo punto non ci resta che installare il pacchetto realtime-lsm creato.
Ti serve una passphrase per sbloccare la chiave segreta
dell'utente: "denis pecci (NextDeb Team Packager) <debian@nextdeb.net>"
chiave DSA di 1024 bit, ID 73E02514, creata il 2004-11-26


L'uso di questo modulo non richiede alcuna patch al kernel ed � usabilissimo anche con un normale kernel vanilla.  
Signed deb cwcdr_2.0.1-4_all.deb
</pre>
}}


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.
Ecco fatto, ora abbiamo firmato in maniera inequivocabile il nostro pacchetto. Per controllare la firma possiamo usare sia <tt>dpkg-sig</tt> che <tt>gpg</tt>. Con <tt>gpg</tt> basta usare il seguente comando:


== Conlusioni ==
<pre>
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.
# gpg --verify nome package
</pre>
 
{{Box|Esempio|
<pre>
# gpg --verify cwcdr_2.0.1-4_all.deb
gpg: Firma fatta ven 26 nov 2004 11:23:33 CET usando DSA con ID 73E02514
gpg: Firma valida da "denis pecci (NextDeb Team Packager) <debian@nextdeb.net>"
gpg: controllo il trustdb
gpg: controllo al livello 0 firmato=0 ot(-/q/n/m/f/u)=0/0/0/0/0/2
</pre>
}}


In bocca al lupo e...
mentre con <tt>dpkg-sig</tt>:


Happy Debian!
<pre>
# dpkg-sig -v -l nome package
</pre>


== Links ==
{{Box|Esempio|
<pre>
# dpkg-sig -v -l cwcdr_2.0.1-4_all.deb
Processing wcdr_2.0.1-4_all.deb...
debian
</pre>
}}


* http://www.emillo.net/home
come potete vedere quest'ultima maniera mostra solo il nick del firmante del package.
* http://www.djcj.org/LAU/guide/index.php
* http://tapas.affenbande.org/?page_id=3




----
----


Autore: [[Utente:TheNoise|~ The Noise]]
Autore: debian
1 760

contributi