|
|
Riga 1: |
Riga 1: |
| == Introduzione == | | == Introduzione == |
| Questa � una breve guida su come configurare il sistema per poter eseguire applicazioni audio realtime.
| | 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'''?]]. |
|
| |
|
| Per chi non conoscesse il mondo dell'audio professionale su GNU/Linux consiglio questo magnifico sito introduttivo:
| | == Lista repository ufficiali debian == |
| | 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]]. |
|
| |
|
| * [http://www.emillo.net/audio_midi emillo.net]
| | === Debian Sarge === |
|
| |
|
| Ci sono '''due passi''' distinti illustrati nella guida: ''il primo'' � patchare un kernel 2.6 con la patch '''realtime-preemption''' di ''Ingo Molnar'' per ottenere un kernel con la pi� bassa latenza possibile; ''il secondo'' � invece permettere a normali utenti l'esecuzione di applicazioni in modalit� realtime.
| | ## Debian Stable (sarge) |
| | deb http://ftp.it.debian.org/debian/ stable main contrib non-free |
| | #deb-src http://ftp.it.debian.org/debian/ stable main contrib non-free |
| | |
| | ## Aggiornamenti della sicurezza |
| | deb http://security.debian.org/ sarge/updates main contrib |
| | #deb-src http://security.debian.org/ sarge/updates main contrib |
|
| |
|
| Il kernel 2.6 ha raggiunto ormai delle prestazioni molto buone per quanto riguarda la latenza (anni luce avanti rispetto al 2.4). Normalmente � dunque sufficiente configurare il sistema per permettere ai normali utenti di eseguire applicazioni realtime (''secondo passo'').
| | Per l'uso di sarge in ambito desktop (ma non solo) sono molto utili i [[backport]]: |
|
| |
|
| Se invece, si vuole non solo ridurre sotto la soglia (indicativa) dei ~ 5 ms la latenza minima ottenibile, ma soprattutto, aumentare notevolmente l'affidabilit� del sistema nel rispettare le basse latenze bisogna usare la patch realtime-preemption (''primo passo''). E' questo il caso, ad esempio, se si vuole lavorare in full-duplex su diverse tracce in realtime, ''senza correre il rischio di xrun'' (ovvero interruzioni del flusso audio). Oppure se si vuole suonare un sintetizzatore software usando la minima latenza possibile.
| | * [http://backports.org/ Debian Backports] |
|
| |
|
| La patch realtime-preemption (per quanto perfettamente usabile) continua ad essere sviluppata incessantemente, e le release sono spesso giornaliere. Il kernel a cui si applica la patch � sempre l'ultimo kernel stabile o, spesso, l'ultimo RC. Nella guida, a puro titolo esemplificativo, mi riferir� ad un kernel e ad una versione di patch specifica, anche se queste versioni diventeranno presto obsolete.
| | === Debian Etch === |
|
| |
|
| {{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, di usare un setup per l'audio professionale pronto per l'uso, installando l'ottima [http://demudi.agnula.org/ distribuzione DeMuDi] (� una [http://wiki.debian.net/index.cgi?CustomDebian CDD]). Se volete invece informazioni dettagliate su come compilare il kernel alla ''debian-way'': [[Debian Kernel Howto]]. }}
| | ## Debian Testing (etch) |
| | deb http://ftp.it.debian.org/debian/ testing main contrib non-free |
| | #deb-src http://ftp.it.debian.org/debian/ testing main contrib non-free |
| | |
| | ## Aggiornamenti della sicurezza |
| | deb http://security.debian.org/ etch/updates main contrib |
| | #deb-src http://security.debian.org/ etch/updates main contrib |
|
| |
|
| == Dal kernel stabile all'RC == | | === Debian Sid === |
| 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. Trovate moltissime informazioni sulla configurazione e l'oomizzazione di un [[kernel vanilla]] per applicazioni audio in [http://demudi.agnula.org/wiki/Low-latencyKernelBuildingHowto questa guida] (in inglese).
| |
|
| |
|
| 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.
| | ## Debian Unstable (sid) |
| | deb http://ftp.it.debian.org/debian/ unstable main contrib non-free |
| | #deb-src http://ftp.it.debian.org/debian/ unstable main contrib non-free |
|
| |
|
| Quindi, si hanno due possibilit�:
| | Per '''Sid''' non c'è il repository per la sicurezza dato che eventuali falle vengono corrette semplicemente con l'aggiornamento del pacchetto incriminato. |
| # compilare l'ultimo kernel stabile con l'ultima patch rilasciata per quel kernel
| |
| # compilare l'ultimo kernel rc e usare la versione corrente della pacth.
| |
|
| |
|
| Attualmente, ad esempio, 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].
| | == Lista repository non ufficiali == |
| | Per una lista dei repository non ufficiali più diffusi vedere: [[Repository non ufficiali]]. |
|
| |
|
| 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].
| | == La Struttura dei repository == |
| | Un repository è suddivisibile, grossomodo, in due sezioni: |
| | * '''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); |
| | * '''doc''' raccoglie la documentazione di base per Debian (segnalazioni di Bug, Faq, il Contratto Sociale ed altro) |
| | * '''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>]]. |
| | * '''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. |
| | * '''pool''' questo è l'archivio vero e proprio, dove sono contenuti i pacchetti, raggruppati per lettera iniziale; |
| | * '''project''' contiene materiale per sviluppatori. Degne di nota la direcotory experimetal, che contiene i pacchetti in fase di sviluppo e perfezionamento;<br/> |
| | * '''tools''' contiene degli strumenti Dos per la creazione di dischetti di boot, partizionamento e lancio di Linux. |
|
| |
|
| 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 Suddivisione del repository == |
| | 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: |
| | * '''main''' è la sezione principale, che contiene il 90% dei pacchetti presenti in Debian |
| | * '''contrib''' raccoglie i pacchetti coerenti con la DFSG5.6, ma che dipendono da pacchetti che non la rispettano |
| | * '''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 Debian Free Software Guideline) |
|
| |
|
| == La patch realtime-preemption == | | == Sources.list == |
| L'archivio delle patch realtime-premption si trova a [http://people.redhat.com/mingo/realtime-preempt/ questo indirizzo]. La patch realtime-preemption usata di seguito (a puro titolo esemplificativo) � la 2.6.14-rc5-rt5, voi usate la versione pi� recente disponibile. 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. Di seguito viene usata 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.
| | === Il ruolo fondamentale === |
| | 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. |
|
| |
|
| Per applicare la patch basta copiarla in <tt>/usr/src</tt>, entrare della dir del kernel e lanciare il comando, nel mio esempio:
| | === Ordine di Inserimento === |
| | | È 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, ...). |
| $ cat ../patch-2.6.14-rc3-rt2 | patch -p1 -t
| |
| | |
| A questo punto nuovamente un <tt>make oldconfg</tt> ci permetter� di configurare le voci inserite dalla patch. Assicurarsi di scegliere '''Complete Preemption (Real-Time)''' in:
| |
|
| |
|
| | === Sintassi === |
| | Ogni riga che descrive un repository ha una ben determinata sintassi: |
| <pre> | | <pre> |
| Processor type and features --->
| | deb uri distribution [component..] |
| Preemption Mode (Complete Preemption (Real-Time))
| |
| </pre> | | </pre> |
|
| |
|
| per il resto ho lasciato tutte le altre nuove voci su NO (la maggior parte di esse serve, infatti, per attivare vari strumenti di debug).
| | Analizziamo i singoli componenti: |
| | * '''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). |
| | * '''uri''' indica l'indirizzo a cui è possibile trovare il repository; è possibile scegliere tra i seguenti metodi di accesso ai pacchetti: |
| | ** '''file''' permette di inserire un repository presente sull'Hard Disk del computer; |
| | ** '''cdrom''' permette di inserire un repository presente su un cd-rom; |
| | ** '''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); |
| | ** '''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'''; |
| | ** '''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, ...; |
| | ** '''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. |
| | * '''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); |
| | *'''component''' indica la sezione (non-free, main, contrib...) del repository da inserire; sono possibili scelte multiple. |
|
| |
|
| Non ci resta che compilare il kernel: | | === Alcuni esempi === |
| | Non c'è niente di meglio, per capire la sintassi del file sources.list, si un po' di esempi. |
|
| |
|
| $ fakeroot make-kpkg --append-to-version -realtime --revision 0.1 kernel_image
| | I repository ufficiali (binari e sorgenti) presi da un mirror italiano: |
| | <pre> |
| | deb http://ftp.it.debian.org/debian/ stable main non-free contrib |
| | deb-src http://ftp.it.debian.org/debian/ stable main non-free contrib |
| | </pre> |
|
| |
|
| ed installare il pacchetto, per ulteriori informazioni su questo passaggio: [[Debian Kernel Howto]].
| | Il repository di apt-build (Rif. 7.1 Pag. [*]): |
| | <pre> |
| | deb file:/var/cache/apt-build/repository apt-build main |
| | </pre> |
|
| |
|
| | Un repository 'artigianale' accessibile tramite un webserver: |
| | <pre> |
| | deb http://repos.debianizzati.org ./ |
| | </pre> |
|
| |
|
| == Modalit� realtime e realtime scheduling ==
| | Un repository situato nella home dell'utente maxer, creato con <code>dpkg-scanpackages</code>: |
| | |
| La modalit� realtime � un particolare privileggio di esecuzione che un'applicazione pu� avere . Questa modalit� permette ad una applicazione di avere accesso alla CPU con la massima priorita (rispetto ad ogni altra applicazione in attesa) ogni volta che venga richiesto, impedendo inoltre che un'altra applicazione possa a sua volta interrompere l'esecuzione (a meno che non sia anch'essa realtime).
| |
| | |
| Questo permette di tenere in esecuzione applicazioni a bassa latenza, senza il rischio che altre applicazioni non-realtime possano disturbarle. Si capisce come questa modalit� sia importantisissima nelle applicazioni audio professionali (ad esempio una sessione di registrazione non verr� mai interrotta anche se molte applicazioni non realtime saturano la CPU!).
| |
| | |
| D'altro canto, questa modalit�, pone dei seri problemi di sicurezza dato che un'applicazione potrebbe (a causa di un errore o di un comportamento malevolo) occupare la CPU per un tempo indefinito, senza poter essere interrrotta, impedendo dunque la normale applicazione degli altri programmi.
| |
| | |
| Normalemente, quindi, solo root ha i privileggi per lanciare applicazioni in modalit� realtime. Questo � un problema, dato che (ad esempio) Jack e tutte le applicazioni che vi si connettono dovrebbero essere lanciate da root per poter funzionare in modalit� realtime, e questo costituirebbe un ancor pi� grosso problema di sicurezza.
| |
| | |
| Per risolvere il problema bisogna consentire l'uso della modalit� realtime anche a normali utenti ma in maniera "controllata".
| |
| | |
| Attualmente esistono due approcci per raggiungere lo scopo:
| |
| | |
| # Usare il modulo <code>realtime-lsm</code>
| |
| # Usare gli '''rlimits'''
| |
| | |
| Entrambi gli approcci possono essere usati sia con kernel vanilla che con kernel realtime-preemption.
| |
| | |
| | |
| === Il modulo <tt>realtime-lsm</tt> ===
| |
| Il modulo <code>realtime-lsm</code> permette ad un normale utente inserito nel gruppo <code>audio</code> di eseguire applicazioni in modalit� realtime. Questo � il vecchio approccio, che verr� man mano sostituito nelle varie distro dall'uso degli rlimits (vedi oltre).
| |
| | |
| Su debian l'installazione del modulo � molto semplice: basta installare il pacchetto <code>realtime-lsm-source</code> ed usare <tt>[[Pagina di manuale di module-assistant|module-assistant]]</tt> per compilare e pacchettizzare il modulo.
| |
| | |
| In pratica, dopo aver fatto il boot del kernel per il quale si vuole installare il modulo, (e aver installato <code>realtime-lsm-source</code>) basta il seguente comando:
| |
| | |
| $ m-a build realtime-lsm
| |
| | |
| per compilare e creare un pacchetto per il modulo. A questo punto non ci resta che installare il pacchetto <code>realtime-lsm</code> creato.
| |
| | |
| Questo modulo non � stato accettato (ne lo sar� mai) nel tree ufficiale del kernel per i potenziali problemi di sicurezza legati al suo utilizzo. In particolare per il suo corretto funzionamento devono essere attivate le seguenti voci di configurazione del kernel:
| |
| | |
| <pre> | | <pre> |
| Security options --->
| | deb file:/home/maxer/repos ./ |
| [*] Enable different security model
| |
| <M> Default Linux Capabilities
| |
| </pre> | | </pre> |
|
| |
|
| ''(l'ultima voce deve necessariamente essere un modulo!)''
| | Per altri repository vedere: [[#Lista repository ufficiali debian|Lista repository ufficiali debian]] e [[Repository non ufficiali]]. |
| | |
| Nei recenti kernel binari di Etch le precendenti condizioni non sono soddisfatte, percui il modulo '''realtime-lsm''' non funzioner� con tali kernel. Inoltre il modulo realtime-lsm � ormai ufficialmente deprecato in debian Etch.
| |
| | |
| In questi casi bisogner� ricompilare il kernel oppure usare l'approccio tramite rlimits.
| |
| | |
| === Usare gli rlimits ===
| |
| | |
| È gi� presente nel kernel un nuovo meccanismo pi� sicuro per concedere i privileggi di realtime chiamato rlimits che sostituisce completamente il modulo <tt>realtime-lsm</tt>.
| |
| | |
| Gli rlimits sono supportati da PAM dalla versione 0.80, le versioni precendenti richiedono una patch. Attualmente in Debian Sid ed Etch � presente la 0.79, mentre in Sarge c'� la 0.76. Ci sono dei pacchetti non ufficiali, gi� pachati, che possono essere usati nelle varie versioni di debian:
| |
| | |
| * '''Debian Sarge''': installare libpam-modules da [http://techweb.rfa.org/debrfa/dists/sarge/main/binary-i386/ qui].
| |
| * '''Debian Etch''': si pu� usare senza problemi il pacchetto <tt>[http://www.ubuntustudio.com/uploads/breezy/libpam-modules_0.76-22ubuntu3studio1_i386.deb libpam-modules]</tt> fornito da [http://www.ubuntustudio.com/ ubuntustudio]. Assicuratevi inoltre di mettere il pacchetto in ''hold'' per evitare alla versione pi� recente (la 0.79) presente in etch. Per mettere in ''hold'' il paccheto basta selezionarlo in [[aptitude]] e premere <tt>'''='''</tt>.
| |
| * '''Debian Sid''': c'� un pacchetto specifico per sid creato da ''Burkhard Ritter'' a [http://seite9.de/~burkhard/pam_debian_rlimits/ questo indirizzo].
| |
| | |
| Se invece non vi fidate e volete patchare il vostro pacchetto <tt>libpam-modules</tt> da soli trovate la patch [http://fsb.gotdns.org/~froh/files/pam-rlimits_debian/ qui] (''originale'') e [http://www.ubuntustudio.com/uploads/pam-0.76-rlimits.patch qui] (''modificata da ubuntustudio''). Le differenze tra le due patch dovrebbero essere solo cosmetiche. Una veloce guida su come applicare la patch e ricompilare il pacchetto la trovate [http://www.ubuntustudio.com/wiki/index.php/Breezy:Rlimits-Aware_PAM qui].
| |
| | |
| Una volta installato il pacchetto, in un modo o nell'altro, dovrete assicurarvi che di aver impostato i giusti permessi in <tt>/etc/security/limits.con</tt> per gli utenti del gruppo <tt>audio</tt>. Ad esempio:
| |
| | |
| @audio - nice -10
| |
| @audio - rtprio 99
| |
| @audio - memlock 250000
| |
| | |
| == Conclusioni ==
| |
| 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
| |
| * [http://demudi.agnula.org/wiki/Low-latencyKernelBuildingHowto Low-latency Kernel Building How-to]
| |
| * [http://alsa.opensrc.org/RealtimeKernelAndPAM Alsa Wiki: Realtime Kernel And PAM]
| |
| | |
| ----
| |
| | |
| Autore: [[Utente:TheNoise|~ The Noise]]
| |
|
| |
|
| [[Categoria:Kernel]] | | ---- |
| [[Categoria:Audio]] | | [[User:MaXeR|MaXeR]] |
| | [[Categoria:Apt]] |
| | [[Categoria:Repository]] |