Aptitude: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(aggiuto link presentazione aptitude)
m (→‎Cercare un pacchetto: formattazione)
Riga 1: Riga 1:
== Introduzione ==
== Introduzione ==
Questa una breve guida su come configurare il sistema per poter eseguire applicazioni audio realtime.


Per chi non conoscesse il mondo dell'audio professionale su GNU/Linux consiglio questo magnifico sito introduttivo:
Questa guida è dedicata all'uso di Aptitude.


* [http://www.emillo.net/audio_midi emillo.net]
Il completissimo '''manuale utente di Aptitude''' in formato html si può trovare installando il pacchetto <tt>aptitude-doc-en</tt>, in <tt>/usr/share/doc/aptitude/html/en/index.html</tt>. Purtroppo il manuale è solo in inglese.


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.


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'').
== Cos'è Aptitude ==


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.
Aptitude è un frontend per la gestione avanzata dei pacchetti di una distribuzione Debian, ma risulta valida per tutte le distribuzioni che supportano APT (http://www.debian.org/doc/manuals/apt-howto/ch-distros.it.html).


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.  
Aptitude è ormai lo strumento preferenziale per l'amministrazione dei pacchetti su Debian, in quanto non solo raggruppa in un unico semplice programma le funzionalità di molti tool (apt-get, apt-cache ...) ma anche perchè permette di gestire in modo molto più facile (ed efficace) situazioni complesse (dipendenze, dipendenze inverse, rimozione pacchetti non utilizzati, ecc ...).


{{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]]. }}
Aptitude è un frontend a dpkg esattamente come apt-get, che sembra essere destinato a sostituire integralmente lo stesso [[Introduzione_all%27_Apt_System | apt-get (e affini)]], tanto che nelle release notes di Sarge si legge:


== Dal kernel stabile all'RC ==
{{Box|Citazione:|Il metodo di aggiornamento raccomandato fra le release Debian GNU/Linux prevede l'utilizzo dello strumento di gestione dei pacchetti aptitude. Tale strumento rende le decisioni riguardanti le installazioni dei pacchetti più sicure che l'esecuzione diretta di apt-get.}}
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.
e anche:


Quindi, si hanno due possibilit�:
{{Box|Citazione:|Test di aggiornamento hanno mostrato che la versione di sarge di aptitude è migliore sia di apt-get sia della versione di woody di aptitude nella risoluzione di dipendenze complesse durante un aggiornamento.}}
# 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 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].
Si può utilizzare Aptitude in due modi: da linea di comando, cioè come apt-get (la sintassi e le opzioni sono identiche, o quasi), oppure tramite l'interfaccia visuale basata sulle librerie ncurses.


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].  
L'interfaccia visuale verrà trattata più diffusamente, perchè si ritiene che sia uno strumento fondamentale per la gestione dei pacchetti e soprattutto per la diagnostica e la risoluzione degli eventuali problemi riscontrati.


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.
{{Box|Prima di iniziare|Prima di iniziare a mettere le mani sulla tastiera, notiamo che aptitude, a differenza della maggior parte delle opzioni di apt-get, si può lanciare anche con i diritti di utente comune.  


== La patch realtime-preemption ==
Poiché per l'effettiva installazione o rimozione dei pacchetti è necessario possedere i diritti di root, è possibile e caldamente consigliato usare questa possibilità per effettuare qualunque prova, visto che non si sarà in grado di modificare neanche una virgola del sistema prima di aver inserito la password di root.}}
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.


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
== Uso da linea di comando ==


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:
Anche dalla linea di comando l'uso di aptitude è molto semplice e comodo. Si usa in genere la seguente forma:


aptitude azione [argomenti...]
''azione'' dice ad aptitude quale azione svolgere; i rimanenti argomenti dipendono dall'azione scelta e consistono tipicamente in una lista di nomi di pacchetti.
Le azioni più importanti sono:
; <tt>aptitude update</tt> : aggiorna la lista dei pacchetti (come premere ''''u'''' dall'interfaccia visuale o come <tt> apt-get update</tt>)
; <tt>aptitude upgrade</tt> : aggiorna tutti i pacchetti aggiornabili senza che nascano conflitti. Se l'aggiornamento di un pacchetto causa un conflitto il pacchetto non viene aggiornato (piuttosto che, ad esempio, rimuovere i pacchetti che generano il conflitto)
; <tt>aptitude dist-upgrade</tt> : anche questo comando aggiorna tutti i pacchetti, ma è più aggressivo nella risoluzione delle dipendenze: nouvi pacchetti saranno installati e altri rimossi, fino a quando tutte le dipendenze non saranno soddifatte. Questo comando potrebbe fare cose non desiderate (come, appunto, installare nuovi pacchetti o rimuoverne altri) quindi deve essere usato con cautela.
; <tt>aptitude [ install | remove | purge ] pkg1 [pkg2...]</tt>: questi comandi installano, rimuovono o fanno il ''purge'' (eliminazione anche dei file di configurazione) dei pacchetti specificati.
; <tt>aptitude search espressione1 [espressione2...]</tt>: mostra su terminale i pacchetti che contengono nel nome una delle espressioni fornite. Le espressioni possono essere semplici stringhe o anche espressioni più complesse ("Search Patterns").
; <tt>aptitude show pkg1 [pkg2...]</tt> : mostra su terminale le informazioni di ogni pacchetto specificato.
I comandi che installano, aggiornano o rimuovo pacchetti accettano tutti il parametro "-s" che stà per "simula". Quando viene passato "-s" nella linea di comando, aptitude svolge tutte le azioni che svolgerebbe normalmente, ma non scarica o installa/rimuove effettivamente nessun file.
==Interfaccia grafica==
La prima schermata che aptitude ci presenta, dopo che l'abbiamo lanciato da linea di comando, e dopo il caricamento delle informazioni attuali sui pacchetti ("caricamento della cache"), è divisa orizzontalmente in due parti.
Nella parte superiore troviamo una zona a sfondo blu con un menù che propone diverse opzioni, e una zona a sfondo nero in cui si vede l'albero dei pacchetti disponibili, classificati in base al loro stato (installati, non installati, ecc.).
Per vedere il contenuto di uno dei rami usiamo le frecce "su" e "giu" fino a selezionare la riga corrispondente e premiamo invio. Sotto al ramo in questione ora abbiamo dei sottorami, e premendo invio sui vari sottorami si accede allo stesso modo ai sotto-sottorami e così via, fino ad arrivare ai pacchetti.
La parte inferiore è invece dedicata alla descrizione del pacchetto attualmente selezionato. Alcuni pacchetti, per esempio k3b, hanno una descrizione molto lunga: premendo TAB e usando le frecce è possibile leggerla tutta.
Ogni riga che mostra il nome di un pacchetto riporta anche molte informazioni.
Per esempio, riporto lo stato di alcuni pacchetti nel mio sistema (nota: il mio sistema è una sarge, ma ho installato diversi pacchetti da testing e anche alcuni da unstable. Per informazioni sul pinning vedere [[APT_uso_avanzato:_mixare_releases_diverse | APT uso avanzato: mixare releases diverse ]]):
<pre>
<pre>
Processor type and features  --->
stato    nome                vers. attuale    vers. aggiornata
  Preemption Mode (Complete Preemption (Real-Time))
 
i        aptitude            0.2.15.9-2      0.2.15.9-2
i        amule                2.0.3-3          2.0.3-4
i A      amule-common        2.0.3-3          2.0.3-4
c        hotplug              <nessuna>       0.0.200403
p        apmd                <nessuna>        3.2.2-3
</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).
Possiamo vedere che:
*aptitude è installato ed è alla versione più recente
*amule è installato ma è aggiornabile alla versione 2.0.3-4
*amule-common è installato per soddisfare una dipendenza (<tt>A</tt>), cioè solo a causa di un pacchetto che dipende da lui (amule). Anch'esso è aggiornabile
*hotplug non è installato, ma quando l'ho cancellato ho scelto di mantenere i file di configurazione (<tt>c</tt>)
*apmd non è installato (<tt>p</tt>), oppure è stato cancellato con l'opzione "purge" (comando: "_"): lo stato risultante è il medesimo


Non ci resta che compilare il kernel:
Tramite semplici comandi si possono visualizzare molte altre informazioni. I comandi principali sono:
; v: visualizza le versioni disponibili per il pacchetto
; d: visualizza le dipendenze del pacchetto
; r: visualizza i pacchetti che dipendono dal pacchetto selezionato (dipendenze inverse)
; C: scarica da internet e visualizza il changelog del pacchetto
; q: chiude la schermata attuale e passa a quella precedente


  $ fakeroot make-kpkg --append-to-version -realtime --revision 0.1 kernel_image
Per una lista completa vedere la guida online con "?".


ed installare il pacchetto, per ulteriori informazioni su questo passaggio: [[Debian Kernel Howto]].
Ora premiamo invio su di un pacchetto: ci appare la schermata relativa al pacchetto, con la descrizione completa e molte altre informazioni, organizzate ad albero come abbiamo già visto. Se ci interessa qualche informazione in più su uno dei pacchetti che troviamo in questa schermata, lo selezioniamo e premiamo invio: appaiono le versioni disponibili del pacchetto. Se selezioniamo una delle versioni e premiamo invio ci ritroviamo nella schermata informativa di quel pacchetto. Fate attenzione perchè in questo modo si può perdere facilmente l'orientamento.
Torniamo alla vista dell'albero dei pacchetti premendo "q" tante volte quanto serve (se vi sbagliate e lo premete una volta in più, aptitude vi chiede se volete uscire dal programma: per il momento dite di no ;-)).




== Modalit� realtime e realtime scheduling ==
==Aggiornare i pacchetti==


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).  
Per la descrizione dell'utilizzo di aptitude useremo come esempio una sessione reale, in cui vengono svolte alcune normali operazioni di aggiornamento e amministrazione dei pacchetti.


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!).
Per prima cosa, nella nostra sessione di amministrazione, aggiorniamo le informazioni sui pacchetti disponibili. Con apt-get avremmo digitato <tt>apt-get update</tt>, mentre in aptitude è sufficiente premere "u".  


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.
Fate attenzione perchè aptitude non chiede conferma dopo che avete impartito un comando, quindi non digitate nulla senza prima essere sicuri/e di cosa state per fare.


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.
Dopo aver fatto l'update potremmo trovare una, due, o tre voci nuove nell'albero dei pacchetti: "Aggiornamenti di sicurezza", "Pacchetti aggiornabili", e "Pacchetti nuovi". Per fare scomparire le prime due è necessario aggiornare tutti i pacchetti contenuti nei rispettivi rami, mentre per far sparire la terza è sufficiente premere "f" (forget).


Per risolvere il problema bisogna consentire l'uso della modalit� realtime anche a normali utenti ma in maniera "controllata".
Una buona regola per l'amministratore è quella di far sì che alla fine dell'aggiornamento queste tre voci non siano presenti. Se ci sono dei pacchetti che risultano aggiornabili, ma che non volete aggiornare, probabilmente dovreste bloccarli alla versione desiderata con "=", oppure dovreste leggere la guida già citata sul pinning.


Attualmente esistono due approcci per raggiungere lo scopo:
Ora torniamo ai pacchetti mostrati prima e supponiamo di voler aggiornare amule: lo selezioniamo e premiamo "+". Questo marcherà in verde, cioè per l'installazione, sia amule che amule-common.


# Usare il modulo <code>realtime-lsm</code>
Poi però ci viene un'idea migliore, e decidiamo di aggiornare tutti i pacchetti aggiornabili, quindi digitiamo "^" per risalire al ramo superiore della vista, finché arriviamo a <tt>Pacchetti installati</tt> poi usiamo la freccia in alto e se necessario risaliamo ancora ai rami superiori finchè non arriviamo a <tt>Pacchetti aggiornabili</tt> e qui premiamo "+". Questo marcherà per l'installazione tutti i pacchetti aggiornabili :-D
# Usare gli '''rlimits'''


Entrambi gli approcci possono essere usati sia con kernel vanilla che con kernel realtime-preemption.


==Risolvere eventuali problemi con delle dipendenze==


=== Il modulo <tt>realtime-lsm</tt> ===
Dopo aver marcato per l'installazione tutti i pacchetti aggiornabili, aptitude ci segnala nella zona blu che c'è un pacchetto "errato" cioè con problemi di dipendenze. Senza battere ciglio premiamo "b" e leggiamo:
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). 
<pre>
iB      udev          0.070    0.074
</pre>
dove "B" significa "con errori", e sotto si legge:
<pre>
Alcune dipendenze di udev non sono soddisfatte:


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.  
  *udev è in conflitto con module-init-tools (< 3.2pre9-1)
</pre>
premiamo invio su udev, e ci appare la schermata con tutte le informazioni su udev stesso, comprese le dipendenze: selezioniamo module-init-tools e premiamo invio. Ora ci appaiono tutte le versioni disponibili di module-init-tools, tra cui vediamo che è presente la 3.2pre9-1: non ci resta che selezionarla e marcarla per l'installazione :-D.


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:
Quello che è successo è semplicemente che nel mio sistema udev è in testing, e fino alla versione 0.070 funzionava bene con module-init-tools-3.2pre1-2, che invece è in stable. Aggiornando tutto abbiamo marcato per l'installazione il nuovo udev, versione 0.074, che però dipende da module-init-tools >= 3.2pre9-1. Poiché questo pacchetto è in testing, APT non ha potuto risolvere la dipendenza automaticamente: se un pacchetto è in una distribuzione (e APT è configurato nel modo giusto) non verrà mai passato ad un'altra, a meno che non siamo noi a farlo manualmente.


  $ m-a build realtime-lsm
Si prega di notare che questo comportamento non è un bug, ma una cosa voluta: APT ha ricevuto un comando ambiguo e lo segnala generando un errore, proprio come noi ci aspettiamo da lui ;-).


per compilare e creare un pacchetto per il modulo. A questo punto non ci resta che installare il pacchetto <code>realtime-lsm</code> creato.
In effetti, i reali colpevoli della generazione dell'errore siamo noi. Infatti, per permettere ad APT di gestire correttamente delle dipendenze in testing, dobbiamo semplicemente usare "testing" come distribuzione predefinita.  


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:
Ricordate che abbiamo lanciato aptitude semplicemente con il comando "aptitude"? e ricorderete anche che il mio sistema è una sarge (stable). Questo equivale a lanciare aptitude con il comando "aptitude -t stable", da cui il nostro problema.


<pre>
Se avessimo usato "aptitude -t testing" aptitude avrebbe risolto correttamente la dipendenza, ma attenzione: in questo modo diciamo ad aptitude che testing è la nostra release predefinita (che non è vero) e lui ci mostrerà come aggiornabili tutti i pacchetti che lo sono in testing, cioè anche tutti quelli in stable (come peraltro ci aspettiamo che faccia ;-)).
Security options --->
 
[*] Enable different security model
Il fatto è che aptitude, per quanto avanzato, ancora non legge il pensiero dell'amministratore, e fa solo il suo mestiere: prende tutte le decisioni ovvie autonomamente, e genera un errore quando non sa cosa decidere.
<M>   Default Linux Capabilities
 
</pre>
 
==Cercare un pacchetto==
 
Ora supponiamo di voler vedere se in debian c'è qualche programma per la gestione dei contenuti, e l'acronimo in inglese è "cms". Per fare questo possiamo usare le funzioni di ricerca di aptitude: per prima cosa digitiamo <tt>'''/'''</tt> per la ricerca della stringa "cms" nei nomi dei pacchetti.
 
Ora però ci viene in mente che un cms non contiene necessariamente la stringa "cms" nel nome, quindi facciamo, con la stessa stringa, una ricerca nelle descrizioni dei pacchetti: digitiamo ancora <tt>'''/'''</tt> e inseriamo "<tt>~dcms</tt>". Aptitude ci mostra il primo risultato della ricerca, per vedere i risultati successivi premiamo <tt>'''n'''</tt>, e per tornare indietro nella lista <tt>'''\'''</tt>.
 
Diversamente possiamo usare il comando <tt>'''l'''</tt>, che si usa allo stesso modo di <tt>'''/'''</tt> ma mostra tutti e soli i pacchetti corrispondenti alla ricerca, organizzati ad albero nel modo che abbiamo già visto.
 
== Personalizzare la visualizzazione dei pacchetti ==


''(l'ultima voce deve necessariamente essere un modulo!)''
Con aptitude è possibile personalizzare sia i campi visualizzati nella lista dei pacchetti, sia il raggruppamento in sezioni e sotto-sezioni.


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.
=== Personalizzare il raggruppamento in sezioni ===


In questi casi bisogner� ricompilare il kernel oppure usare l'approccio tramite rlimits.
Le sezioni nelle quali sono raggruppati i pacchetti quando si avvia Aptitude (e non solo) sono generate dinamicamente da un insieme di regole separate da virgola. E' possibile vedere e modificare le regole che generano la vista attuale premendo ''''G''''.


=== Usare gli rlimits ===
Le regole vengono elaborate in sequenza dalla prima all'ultima


E' gi� presente nel kernel un nuovo meccanismo pi� sicuro per concedere i privileggi di realtime chiamato rlimits che sostituisce completamente il modulo realtime-lsm.
Vediamo alcune regole:


Tuttavia, l'uso degli rlimits richiede una versione recente di PAM, la 0.80. Attualmente in Debian Sid ed Etch � presente la 0.79 ma si pu� installare il pacchetto patchato o compilarlo seguendo le seguenti istruzioni:
; <tt>filter(missing)</tt> : non visualizza i pacchetti che esistono solo nelle dipendenze di un altro pacchetto.


* [http://www.ubuntustudio.com/wiki/index.php/Breezy:Rlimits-Aware_PAM Rlimits-Aware_PAM]
; <tt>status</tt> : Raggruppa i pacchetti in:
:* Installati
:* Non installati
:* Aggiornamenti della sicurezza
:* Aggiornabili
:* Obsoleti
:* Virtuali


== Conclusioni ==
; <tt>section[(''mode''[,passthrough])]</tt> : Raggruppa i pacchetti in base alla loro sezione. ''mode'' può assumere uno dei seguenti valori:
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...
:; <tt>topdir</tt> : Raggruppa un base alla sezione dell'archivio debian (esempio: ''"main", "contrib", "non-free" ...'').
:; <tt>subdir</tt> : Raggruppa in base alla sezione logica (esempio: ''"adim", "base", "devel", "gnome", "kde", ecc ...'')
:; <tt>none</tt> : Raggruppa in base delle sezioni formate dalla somma delle  precedenti (esempio: ''"controb/admin", "contrib/devel", "non-free/admin", "non-free/devel").
:; <tt>task</tt> : Crea un albero dei pacchetti raggruppandoli per task.


Happy Debian!
: Se viene usato il secondo parametro opzionale <tt>passthrough</tt> i pacchetti che per qualche motivo non hanno una sezione vengono passati alla regola successiva senza essere inseriti in categorie.


== Links ==
All'avvio di aptitude, premendo ''''G'''' si può vedere che vengono usate le seguenti regole:


* http://www.emillo.net/home
<pre>
* http://www.djcj.org/LAU/guide/index.php
filter(missing),task,status,section(subdir,passthruough),section(topdir,passthrough)
* http://tapas.affenbande.org/?page_id=3
</pre>


In base a quanto detto la spiegazione di queste regole è semplice: ''visualizza solo i pacchetti reali, crea l'albero dei task, raggruppa i pacchetti per stato, per ogni stato raggruppa in sezioni logiche e all'interno di ogni sezione logica raggruppa in base alla sezione dell'archivio''.


----
== Links ==


Autore: [[Utente:TheNoise|~ The Noise]]
* [http://www.luv.asn.au/overheads/aptitude/aptitude-intro.html Aptitude Introduction]: ottima introduzione ad Aptitude (in inglese) che tratta (tra le altre cose) molte più opzioni della linea di comando rispetto alla presente guida.

Versione delle 13:59, 29 mar 2006

Introduzione

Questa guida è dedicata all'uso di Aptitude.

Il completissimo manuale utente di Aptitude in formato html si può trovare installando il pacchetto aptitude-doc-en, in /usr/share/doc/aptitude/html/en/index.html. Purtroppo il manuale è solo in inglese.


Cos'è Aptitude

Aptitude è un frontend per la gestione avanzata dei pacchetti di una distribuzione Debian, ma risulta valida per tutte le distribuzioni che supportano APT (http://www.debian.org/doc/manuals/apt-howto/ch-distros.it.html).

Aptitude è ormai lo strumento preferenziale per l'amministrazione dei pacchetti su Debian, in quanto non solo raggruppa in un unico semplice programma le funzionalità di molti tool (apt-get, apt-cache ...) ma anche perchè permette di gestire in modo molto più facile (ed efficace) situazioni complesse (dipendenze, dipendenze inverse, rimozione pacchetti non utilizzati, ecc ...).

Aptitude è un frontend a dpkg esattamente come apt-get, che sembra essere destinato a sostituire integralmente lo stesso apt-get (e affini), tanto che nelle release notes di Sarge si legge:

Info.png Citazione:
Il metodo di aggiornamento raccomandato fra le release Debian GNU/Linux prevede l'utilizzo dello strumento di gestione dei pacchetti aptitude. Tale strumento rende le decisioni riguardanti le installazioni dei pacchetti più sicure che l'esecuzione diretta di apt-get.


e anche:

Info.png Citazione:
Test di aggiornamento hanno mostrato che la versione di sarge di aptitude è migliore sia di apt-get sia della versione di woody di aptitude nella risoluzione di dipendenze complesse durante un aggiornamento.


Si può utilizzare Aptitude in due modi: da linea di comando, cioè come apt-get (la sintassi e le opzioni sono identiche, o quasi), oppure tramite l'interfaccia visuale basata sulle librerie ncurses.

L'interfaccia visuale verrà trattata più diffusamente, perchè si ritiene che sia uno strumento fondamentale per la gestione dei pacchetti e soprattutto per la diagnostica e la risoluzione degli eventuali problemi riscontrati.

Info.png Prima di iniziare
Prima di iniziare a mettere le mani sulla tastiera, notiamo che aptitude, a differenza della maggior parte delle opzioni di apt-get, si può lanciare anche con i diritti di utente comune.

Poiché per l'effettiva installazione o rimozione dei pacchetti è necessario possedere i diritti di root, è possibile e caldamente consigliato usare questa possibilità per effettuare qualunque prova, visto che non si sarà in grado di modificare neanche una virgola del sistema prima di aver inserito la password di root.


Uso da linea di comando

Anche dalla linea di comando l'uso di aptitude è molto semplice e comodo. Si usa in genere la seguente forma:

aptitude azione [argomenti...]

azione dice ad aptitude quale azione svolgere; i rimanenti argomenti dipendono dall'azione scelta e consistono tipicamente in una lista di nomi di pacchetti.

Le azioni più importanti sono:

aptitude update
aggiorna la lista dei pacchetti (come premere 'u' dall'interfaccia visuale o come apt-get update)
aptitude upgrade
aggiorna tutti i pacchetti aggiornabili senza che nascano conflitti. Se l'aggiornamento di un pacchetto causa un conflitto il pacchetto non viene aggiornato (piuttosto che, ad esempio, rimuovere i pacchetti che generano il conflitto)
aptitude dist-upgrade
anche questo comando aggiorna tutti i pacchetti, ma è più aggressivo nella risoluzione delle dipendenze: nouvi pacchetti saranno installati e altri rimossi, fino a quando tutte le dipendenze non saranno soddifatte. Questo comando potrebbe fare cose non desiderate (come, appunto, installare nuovi pacchetti o rimuoverne altri) quindi deve essere usato con cautela.
aptitude [ install | remove | purge ] pkg1 [pkg2...]
questi comandi installano, rimuovono o fanno il purge (eliminazione anche dei file di configurazione) dei pacchetti specificati.
aptitude search espressione1 [espressione2...]
mostra su terminale i pacchetti che contengono nel nome una delle espressioni fornite. Le espressioni possono essere semplici stringhe o anche espressioni più complesse ("Search Patterns").
aptitude show pkg1 [pkg2...]
mostra su terminale le informazioni di ogni pacchetto specificato.

I comandi che installano, aggiornano o rimuovo pacchetti accettano tutti il parametro "-s" che stà per "simula". Quando viene passato "-s" nella linea di comando, aptitude svolge tutte le azioni che svolgerebbe normalmente, ma non scarica o installa/rimuove effettivamente nessun file.


Interfaccia grafica

La prima schermata che aptitude ci presenta, dopo che l'abbiamo lanciato da linea di comando, e dopo il caricamento delle informazioni attuali sui pacchetti ("caricamento della cache"), è divisa orizzontalmente in due parti.

Nella parte superiore troviamo una zona a sfondo blu con un menù che propone diverse opzioni, e una zona a sfondo nero in cui si vede l'albero dei pacchetti disponibili, classificati in base al loro stato (installati, non installati, ecc.).

Per vedere il contenuto di uno dei rami usiamo le frecce "su" e "giu" fino a selezionare la riga corrispondente e premiamo invio. Sotto al ramo in questione ora abbiamo dei sottorami, e premendo invio sui vari sottorami si accede allo stesso modo ai sotto-sottorami e così via, fino ad arrivare ai pacchetti.

La parte inferiore è invece dedicata alla descrizione del pacchetto attualmente selezionato. Alcuni pacchetti, per esempio k3b, hanno una descrizione molto lunga: premendo TAB e usando le frecce è possibile leggerla tutta.

Ogni riga che mostra il nome di un pacchetto riporta anche molte informazioni. Per esempio, riporto lo stato di alcuni pacchetti nel mio sistema (nota: il mio sistema è una sarge, ma ho installato diversi pacchetti da testing e anche alcuni da unstable. Per informazioni sul pinning vedere APT uso avanzato: mixare releases diverse ):

stato    nome                 vers. attuale    vers. aggiornata

i        aptitude             0.2.15.9-2       0.2.15.9-2
i        amule                2.0.3-3          2.0.3-4
i A      amule-common         2.0.3-3          2.0.3-4
c        hotplug              <nessuna>        0.0.200403
p        apmd                 <nessuna>        3.2.2-3

Possiamo vedere che:

  • aptitude è installato ed è alla versione più recente
  • amule è installato ma è aggiornabile alla versione 2.0.3-4
  • amule-common è installato per soddisfare una dipendenza (A), cioè solo a causa di un pacchetto che dipende da lui (amule). Anch'esso è aggiornabile
  • hotplug non è installato, ma quando l'ho cancellato ho scelto di mantenere i file di configurazione (c)
  • apmd non è installato (p), oppure è stato cancellato con l'opzione "purge" (comando: "_"): lo stato risultante è il medesimo

Tramite semplici comandi si possono visualizzare molte altre informazioni. I comandi principali sono:

v
visualizza le versioni disponibili per il pacchetto
d
visualizza le dipendenze del pacchetto
r
visualizza i pacchetti che dipendono dal pacchetto selezionato (dipendenze inverse)
C
scarica da internet e visualizza il changelog del pacchetto
q
chiude la schermata attuale e passa a quella precedente

Per una lista completa vedere la guida online con "?".

Ora premiamo invio su di un pacchetto: ci appare la schermata relativa al pacchetto, con la descrizione completa e molte altre informazioni, organizzate ad albero come abbiamo già visto. Se ci interessa qualche informazione in più su uno dei pacchetti che troviamo in questa schermata, lo selezioniamo e premiamo invio: appaiono le versioni disponibili del pacchetto. Se selezioniamo una delle versioni e premiamo invio ci ritroviamo nella schermata informativa di quel pacchetto. Fate attenzione perchè in questo modo si può perdere facilmente l'orientamento. Torniamo alla vista dell'albero dei pacchetti premendo "q" tante volte quanto serve (se vi sbagliate e lo premete una volta in più, aptitude vi chiede se volete uscire dal programma: per il momento dite di no ;-)).


Aggiornare i pacchetti

Per la descrizione dell'utilizzo di aptitude useremo come esempio una sessione reale, in cui vengono svolte alcune normali operazioni di aggiornamento e amministrazione dei pacchetti.

Per prima cosa, nella nostra sessione di amministrazione, aggiorniamo le informazioni sui pacchetti disponibili. Con apt-get avremmo digitato apt-get update, mentre in aptitude è sufficiente premere "u".

Fate attenzione perchè aptitude non chiede conferma dopo che avete impartito un comando, quindi non digitate nulla senza prima essere sicuri/e di cosa state per fare.

Dopo aver fatto l'update potremmo trovare una, due, o tre voci nuove nell'albero dei pacchetti: "Aggiornamenti di sicurezza", "Pacchetti aggiornabili", e "Pacchetti nuovi". Per fare scomparire le prime due è necessario aggiornare tutti i pacchetti contenuti nei rispettivi rami, mentre per far sparire la terza è sufficiente premere "f" (forget).

Una buona regola per l'amministratore è quella di far sì che alla fine dell'aggiornamento queste tre voci non siano presenti. Se ci sono dei pacchetti che risultano aggiornabili, ma che non volete aggiornare, probabilmente dovreste bloccarli alla versione desiderata con "=", oppure dovreste leggere la guida già citata sul pinning.

Ora torniamo ai pacchetti mostrati prima e supponiamo di voler aggiornare amule: lo selezioniamo e premiamo "+". Questo marcherà in verde, cioè per l'installazione, sia amule che amule-common.

Poi però ci viene un'idea migliore, e decidiamo di aggiornare tutti i pacchetti aggiornabili, quindi digitiamo "^" per risalire al ramo superiore della vista, finché arriviamo a Pacchetti installati poi usiamo la freccia in alto e se necessario risaliamo ancora ai rami superiori finchè non arriviamo a Pacchetti aggiornabili e qui premiamo "+". Questo marcherà per l'installazione tutti i pacchetti aggiornabili :-D


Risolvere eventuali problemi con delle dipendenze

Dopo aver marcato per l'installazione tutti i pacchetti aggiornabili, aptitude ci segnala nella zona blu che c'è un pacchetto "errato" cioè con problemi di dipendenze. Senza battere ciglio premiamo "b" e leggiamo:

iB      udev           0.070    0.074

dove "B" significa "con errori", e sotto si legge:

Alcune dipendenze di udev non sono soddisfatte:

  *udev è in conflitto con module-init-tools (< 3.2pre9-1)

premiamo invio su udev, e ci appare la schermata con tutte le informazioni su udev stesso, comprese le dipendenze: selezioniamo module-init-tools e premiamo invio. Ora ci appaiono tutte le versioni disponibili di module-init-tools, tra cui vediamo che è presente la 3.2pre9-1: non ci resta che selezionarla e marcarla per l'installazione :-D.

Quello che è successo è semplicemente che nel mio sistema udev è in testing, e fino alla versione 0.070 funzionava bene con module-init-tools-3.2pre1-2, che invece è in stable. Aggiornando tutto abbiamo marcato per l'installazione il nuovo udev, versione 0.074, che però dipende da module-init-tools >= 3.2pre9-1. Poiché questo pacchetto è in testing, APT non ha potuto risolvere la dipendenza automaticamente: se un pacchetto è in una distribuzione (e APT è configurato nel modo giusto) non verrà mai passato ad un'altra, a meno che non siamo noi a farlo manualmente.

Si prega di notare che questo comportamento non è un bug, ma una cosa voluta: APT ha ricevuto un comando ambiguo e lo segnala generando un errore, proprio come noi ci aspettiamo da lui ;-).

In effetti, i reali colpevoli della generazione dell'errore siamo noi. Infatti, per permettere ad APT di gestire correttamente delle dipendenze in testing, dobbiamo semplicemente usare "testing" come distribuzione predefinita.

Ricordate che abbiamo lanciato aptitude semplicemente con il comando "aptitude"? e ricorderete anche che il mio sistema è una sarge (stable). Questo equivale a lanciare aptitude con il comando "aptitude -t stable", da cui il nostro problema.

Se avessimo usato "aptitude -t testing" aptitude avrebbe risolto correttamente la dipendenza, ma attenzione: in questo modo diciamo ad aptitude che testing è la nostra release predefinita (che non è vero) e lui ci mostrerà come aggiornabili tutti i pacchetti che lo sono in testing, cioè anche tutti quelli in stable (come peraltro ci aspettiamo che faccia ;-)).

Il fatto è che aptitude, per quanto avanzato, ancora non legge il pensiero dell'amministratore, e fa solo il suo mestiere: prende tutte le decisioni ovvie autonomamente, e genera un errore quando non sa cosa decidere.


Cercare un pacchetto

Ora supponiamo di voler vedere se in debian c'è qualche programma per la gestione dei contenuti, e l'acronimo in inglese è "cms". Per fare questo possiamo usare le funzioni di ricerca di aptitude: per prima cosa digitiamo / per la ricerca della stringa "cms" nei nomi dei pacchetti.

Ora però ci viene in mente che un cms non contiene necessariamente la stringa "cms" nel nome, quindi facciamo, con la stessa stringa, una ricerca nelle descrizioni dei pacchetti: digitiamo ancora / e inseriamo "~dcms". Aptitude ci mostra il primo risultato della ricerca, per vedere i risultati successivi premiamo n, e per tornare indietro nella lista \.

Diversamente possiamo usare il comando l, che si usa allo stesso modo di / ma mostra tutti e soli i pacchetti corrispondenti alla ricerca, organizzati ad albero nel modo che abbiamo già visto.

Personalizzare la visualizzazione dei pacchetti

Con aptitude è possibile personalizzare sia i campi visualizzati nella lista dei pacchetti, sia il raggruppamento in sezioni e sotto-sezioni.

Personalizzare il raggruppamento in sezioni

Le sezioni nelle quali sono raggruppati i pacchetti quando si avvia Aptitude (e non solo) sono generate dinamicamente da un insieme di regole separate da virgola. E' possibile vedere e modificare le regole che generano la vista attuale premendo 'G'.

Le regole vengono elaborate in sequenza dalla prima all'ultima

Vediamo alcune regole:

filter(missing)
non visualizza i pacchetti che esistono solo nelle dipendenze di un altro pacchetto.
status
Raggruppa i pacchetti in:
  • Installati
  • Non installati
  • Aggiornamenti della sicurezza
  • Aggiornabili
  • Obsoleti
  • Virtuali
section[(mode[,passthrough])]
Raggruppa i pacchetti in base alla loro sezione. mode può assumere uno dei seguenti valori:
topdir
Raggruppa un base alla sezione dell'archivio debian (esempio: "main", "contrib", "non-free" ...).
subdir
Raggruppa in base alla sezione logica (esempio: "adim", "base", "devel", "gnome", "kde", ecc ...)
none
Raggruppa in base delle sezioni formate dalla somma delle precedenti (esempio: "controb/admin", "contrib/devel", "non-free/admin", "non-free/devel").
task
Crea un albero dei pacchetti raggruppandoli per task.
Se viene usato il secondo parametro opzionale passthrough i pacchetti che per qualche motivo non hanno una sezione vengono passati alla regola successiva senza essere inseriti in categorie.

All'avvio di aptitude, premendo 'G' si può vedere che vengono usate le seguenti regole:

filter(missing),task,status,section(subdir,passthruough),section(topdir,passthrough)

In base a quanto detto la spiegazione di queste regole è semplice: visualizza solo i pacchetti reali, crea l'albero dei task, raggruppa i pacchetti per stato, per ogni stato raggruppa in sezioni logiche e all'interno di ogni sezione logica raggruppa in base alla sezione dell'archivio.

Links

  • Aptitude Introduction: ottima introduzione ad Aptitude (in inglese) che tratta (tra le altre cose) molte più opzioni della linea di comando rispetto alla presente guida.