Aptitude: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (→‎File di configurazione: sconsigliato ancor più l'uso di Default-Release)
 
(82 versioni intermedie di 13 utenti non mostrate)
Riga 1: Riga 1:
==Intro==
{{Template:APT
'''GNU Bash''' � la shell *nix probabilmente pi� ricca di funzionalit� sia per l'uso interattivo che per lo scripting. Spesso per� molte funzioni sono poco note.
|precedente=apt-get
|successivo=apt-cache
}}
{{Versioni compatibili|Jessie|Stretch|Buster}}
= Introduzione =
Questa guida è dedicata all'uso di Aptitude.


Questa pagina ha lo scopo di raccogliere il pi� ampio numero di "trucchi" pi� o meno noti riguardanti Bash, senza avere peraltro la pretesa di coprire tutte le funzionalit�.
Il completissimo '''Manuale Utente di Aptitude''' in formato html si può trovare in <code>/usr/share/doc/aptitude/html/en/index.html</code>, installando il [[pacchetto]] '''aptitude-doc-it''' (oppure ''aptitude-doc-en'' per la versione in lingua inglese).


==Per iniziare==
= Cos'è Aptitude =
Prima di iniziare non posso non segnalare altre due guide presente sul wiki che danno dei tip molto utili su Bash:
Aptitude è un frontend per la gestione avanzata dei [[pacchetto|pacchetti]] di una distribuzione Debian, ma risulta valido per tutte le distribuzioni che supportano [[APT]] ([http://www.debian.org/doc/manuals/apt-howto/ch-distros.it.html link]).


* [[Come abilitare il completamento automatico 'avanzato']]
È lo strumento preferito da molti 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]], [[apt-mark]], etc.) ma anche perché permette di gestire in modo molto più facile (ed efficace) situazioni complesse ([[dipendenze]], dipendenze inverse, rimozione pacchetti non utilizzati, etc).
* [[Colorare bash]]


==Shell Interattiva==
Aptitude è un frontend a [[dpkg]] esattamente come <code>apt-get</code> e può essere utilizzato in due modi: da linea di comando, cioè come <code>apt-get</code> (con la stessa sintassi per i comandi principali), oppure tramite l'interfaccia visuale basata sulle librerie ncurses.
In questa sezione verranno elencate funzionalit� riguardanti l'uso interattivo di Bash.


===Navigare velocemente tra le directory===
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 andare sulla propria '''home''' basta digitare il comando '''cd''' senza nessun paramentro.
* Per tornare indietro alla precedente directory visitata � sufficiente il comando '''cd -'''
* E possibile salvare un percorso con '''pushd''' e richiamarlo con '''popd'''. In realt� questi comandi (come il nome pu� fare intuire) implementano una coda FIFO (First In First Out) nella quale � possibile memorizzare un numero illimitato di percorsi per poi richiamarli dall'ultimo inserito in poi. Usare questi comadi � semplicissimo: basta usare '''pushd''' al posto di '''cd''' (in tal modo si memorizzano i percorsi via via visitati) e poi digitare '''popd''' una o pi� volte per tornare indietro.


===Riutilizzo degli argomenti===
{{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.  
Bash memorizza l'ultimo argomento del comando precedente in una speciale variabile chiamata $_. E' possibile fare riferimento all'ultimo argomento dell'ultimo comando usando direttamente $_ ma la via di gran lunga pi� veloce � comoda � usare 'ESC .'.  


Ecco un esempio stupido, creare un directory ed entrarvi:
Poiché per l'effettiva installazione o rimozione dei pacchetti è necessario possedere i [[privilegi di amministrazione]], è possibile e caldamente consigliato usare questa possibilità per effettuare qualunque prova.}}
 
= Installazione =
A partire da Debian 9 ([[Stretch]]) l'omonimo [[pacchetto]] è diventato opzionale, per cui può essere necessario installare '''<code>aptitude</code>''' prima di poterlo utilizzare. Per esempio con [[apt]] e [[privilegi di amministrazione]] basta:
<pre>
<pre>
$ mkdir /usr/local/nuovo-programma
# apt install aptitude
$ cd ESC.
</pre>
</pre>


Altro esempio forse un p� pi� utile, creare velocemente uno script:
In particolare ne è ancora raccomandabile l'installazione per:
* gestire Debian con molti repository diversi per poter gestire più facilmente possibili conflitti;
* per avvalersi dell'ineguagliata funzione di ricerca avanzata;
* oppure ancora per disporre di un'interfaccia visuale ad APT anche senza server grafico attivo.
 
= 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:
 
<pre>aptitude azione [argomenti...]</pre>
 
''azione'' dice ad Aptitude quale azione svolgere; i rimanenti argomenti dipendono dall'azione scelta e consistono tipicamente in una lista di nomi di pacchetti. Di seguito le azioni più importanti.
 
=== update ===
<pre># aptitude update</pre>
 
Aggiorna la lista dei pacchetti (come premere ''''u'''' dall'interfaccia visuale o come <code> apt-get update</code>) .
 
=== safe-upgrade ===
<pre># aptitude safe-upgrade</pre>
 
Aggiorna tutti i pacchetti aggiornabili senza che nascano conflitti. Per conflitto si intende una situazione in cui l'aggiornamento di un pacchetto richide la rimozione di uno o più differenti pacchetti, ergo l'uso di safe-upgrade causa l'aggiornamento di tutti quei pacchetti che possono essere aggiornati senza che sia necessario rimuovere contestualmente altri pacchetti. Da manuale: ''Quando si verificano problemi di dipendenze dei pacchetti, usa un algoritmo «sicuro» per risolverli. Questo risolutore cerca di preservare il maggior numero possibile delle scelte dell'utente; non rimuove mai un pacchetto e non installa mai una versione di un pacchetto che non sia la versione candidata predefinita''.
L'utilizzo di questo comando implica necessariamente l'opzione <code>--safe-resolver</code> (l'opzione <code>--full-resolver</code> viene sempre automaticamente rigettata).
Una sintassi del tutto equivalente, ma mantenuta solo per ragioni storiche, è:
<pre># aptitude upgrade</pre>
 
Si noti che l'uso non è intercambiabile con <code>apt-get upgrade</code>, poiché <code>apt-get</code> in questo caso non effettuerà nemmeno l'installazione di nuovi pacchetti, mentre <code>aptitude safe-upgrade</code> permette l'installazione di nuovi pacchetti, se necessari per l'aggiornamento di altri, e impedisce soltanto la rimozione di pacchetti precedentemente installati. È invece equivalente, se non per la mancanza di un risolutore di conflitti, al comando <code>apt upgrade</code> .
 
==== Esempio ====
<pre># aptitude safe-upgrade $(aptitude search '?origin(Unofficial Multimedia Packages) ?upgradable' -F '%p')</pre>
 
Questo comando mostra un esempio d'uso avanzato che permette di aggiornare i soli pacchetti provenienti dal repository ''deb-multimedia''.
 
=== full-upgrade ===
<pre># aptitude full-upgrade</pre>
 
Anche questo comando aggiorna tutti i pacchetti, ma è più aggressivo nella risoluzione delle dipendenze: nuovi pacchetti saranno installati e altri rimossi, fino a quando tutte le dipendenze non saranno soddisfatte. Questo comando potrebbe fare cose non desiderate (come, appunto, installare nuovi pacchetti o rimuoverne altri) quindi deve essere usato con cautela (specialmente nei casi in cui segnala esplicitamente problemi nella risoluzione delle dipendenze). Si noti che questo comando implica l'opzione <code>--full-resolver</code>, a meno che l'utente non specifichi l'opzione <code>--safe-resolver</code>, nel qual caso ''full-upgrade'' funziona esattamente come ''safe-upgrade''. Una sintassi del tutto equivalente, mantenuta per ragioni storiche, è:
<pre># aptitude dist-upgrade</pre>
 
=== install, remove, purge, reinstall ===
<pre>
<pre>
$ :> /usr/local/bin/nomescript
# aptitude install pacchetto/i
$ chmod +x ESC.
# aptitude remove pacchetto/i
$ gvim ESC.
# aptitude purge pacchetto/i
# aptitude reinstall pacchetto/i
</pre>
</pre>


===Editing della linea di comando===
Questi comandi rispettivamente installano, rimuovono, eliminano completamente (eliminazione anche dei file di configurazione) o reinstallano il o i pacchetti specificati.
Alcuni tasti di scelta rapida per l'editing da linea di comando:
: '''<tt>CTRL+a</tt>''': Vai all'inizio delle linea
: '''<tt>CTRL+e</tt>''': Vai alla fine della linea
: '''<tt>CTRL+k</tt>''': Cancella fino dalla posizione corrente alla fine della linea
: '''<tt>CTRL+u</tt>''': Cancella fino dalla posizione corrente all'inizio della linea
: '''<tt>CTRL+l</tt>''': Pulisce lo schermo
: '''<tt>META+f</tt>''': Vai una parola avanti
: '''<tt>META+b</tt>''': Vai una parola indietro
: '''<tt>META+d</tt>''': Cancella la parola successiva
: '''<tt>META+backspace</tt>''': Cancella la parola precedente


{{Box|Nota sul tasto META|Il tasto Meta pu� essere usato premendo ALT e ''contemporaneamente'' il carattere del comando che interessa, oppure premendo ESC e ''successivamente'' il tasto del comando che interessa. In quest'ultimo modo non � necessario permere due tasti conemporaneamente. Questa � una regola generica per gli shortcut di bash che usano il tasto Meta.}}
=== search ===
<pre>$ aptitude search espressione/i</pre>


===Uso avanzato dello storico===
Elenca i pacchetti che contengono nel nome una delle espressioni fornite. Le espressioni possono essere semplici stringhe (ad esempio il nome di un pacchetto) o anche espressioni più complesse ("Search Patterns").
Come noto Bash memorizza gli ultimi (solitamente 500 ma il numero � impostabile in $HISTSIZE) comandi digitati ai quali � possibile accedere semplicemente con le freccette SU e GIU. Tuttavia � possibile effettuare molte altre operazioni per ricercare nello storico dei comandi.


====Ricerca incrementale inversa====
==== Esempi ====
Sotto questo astruso nome si cela la possibilit� di ricercare nello storico dei comandi semplicemente premendo CRTL+r e digitando qualche carattere del comando cercato. Verr� immendiatamente mostrato l'ultimo comando che soddisfa i criteri di ricerca. Se pi� comandi soddisfano la ricerca � possibile scorrerli (dall'ultimo al primo) premendo nuovamente CTRL+r.
<pre>$ aptitude search iceweasel</pre>


Una volta trovato il comando lo si pu� eseguire con INVIO oppure editare con CTRL+j.
Mostrerà tutti i pacchetti che contengono ''iceweasel'' nel loro nome.


====Ricerca nella cronologia====
<pre>$ aptitude search '~S ~i (!~stable ~Atesting !~Aunstable ~O"Unofficial Multimedia Packages")'</pre>
Altra possibilit� � cercare tra tutti i comandi precedenti che cominciano con un certo gruppo di lettere.


Questa funzionalit� non � abilitata di default; bisogna modificare il file /etc/inputrc (o creare un analogo file .inputrc nella propria home), aggiungendo le righe:
Mostrerà tutti i pacchetti installati appartenenti alla sola [[suite]] (detta anche ''archive'') testing e solo se provenienti dal repository di ''deb-multimedia'' (identificato attraverso l'attributo "origine"). Se nel proprio <code>sources.list</code> non sono specificati repository relativi ad altre [[suite]] i parametri <code>!~stable</code> e <code>!~Aunstable</code> possono essere omessi. In sintesi è necessario esplicitare sia i repositori disponibili che si vuole escludere che quelli da includere nel risultato della ricerca.


<pre>$ aptitude search '?installed?origin(Unofficial Multimedia Packages)?not(?origin(Debian))'</pre>
Sintassi simile alla precedente, ma in questo caso si è usato un comando che mostra tutti i pacchetti, a prescindere dalla [[suite]], appartenenti a ''deb-multimedia'', ma non appartenenti al repository principale. Per filtrare in base alla [[suite]] è sufficiente usare ''archive'', che ne è un sinonimo, e specificarne il nome, invece di ''origin''. Si veda la pagina "[[I repository ed il loro utilizzo]]" per capire dove dove trovare i parametri relativi al nome della release, all'origine e altro.
<pre>$ aptitude search '?origin(Unofficial Multimedia Packages) ?upgradable' -F '%p %v %V'</pre>
Mostra tutti i pacchetti aggiornabili del solo repository deb-multimedia (posto naturalmente di averlo specificato nel proprio <code>sources.list</code>), visualizzando anche versione attualmente installata e candidata.
=== show ===
<pre>$ aptitude show pacchetto/i</pre>
Mostra su terminale le informazioni di ogni pacchetto specificato.
=== versions ===
<pre>$ aptitude versions espressione</pre>
Elenca, per ogni pacchetto cui corrisponde l'espressione specificata, lo stato (installato o meno), il numero di verisone, la [[release]] di appartenenza e il valore di pin (si veda la guida dedicata al [[Repository %26 pinning | pinning]]).
{{Suggerimento|Se si teme che un comando in grado di installare o rimuovere pacchetti effettui delle azioni indesiderate eseguire il suddetto comando una prima volta in modalità simulazione (si veda la sezione dedicata alle opzioni).}}
=== Opzioni ===
==== -s, --simulate ====
Nessuna azione; effettua una simulazione degli eventi che si verificherebbero, ma non cambia realmente il sistema. Esempio di comando: <code># aptitude install pacchetto -s</code>
==== -t, --target-release ====
Permette in genere di aggiornare/installare i pacchetti specificati e le relative dipendenze in base alla [[release]] bersaglio. Per esempio:
<pre># aptitude -t stretch-backports install pacchetto</pre>
==== -V, --verbose-versions ====
Mostra il numero di versione completo dei pacchetti aggiornati e installati.
=== Easter eggs ===
<pre>
<pre>
# PgUp/Down searches history in bash
$ aptitude mooo
"\e[5~":       history-search-backward
$ aptitude -v moo
"\e[6~":       history-search-forward
$ aptitude -vv moo
$ aptitude -vvvvvvvvv moo
</pre>
 
== File di configurazione ==
È possibile definire le opzioni di ''aptitude'' non solo da riga di comando, ma anche specificando i corrispondenti parametri in appositi file di configurazione, ad esempio in un unico file <code>/etc/apt/apt.conf</code>, in più file dal nome arbitrario in <code>/etc/apt/apt.conf.d/</code> o ancora in <code>~/.aptitude/config</code>.
A prescindere dal, o dai, file di configurazione è possibile usare in tutti i casi due tipi di sintassi, ad esempio:
<pre>APT
{
Default-Release "testing";
Cache-Limit 24000000;
}
Acquire::http::Proxy "http://indirizzo_proxy:3142/";
Aptitude
{
Autoclean-After-Update "true";
Auto-Fix-Broken "true";
Purge-Unused "true";
}
</pre>
<pre> 
APT::Default-Release "testing";
APT::Cache-Limit 24000000;
Acquire::http::Proxy "http://indirizzo_proxy:3142/";
Aptitude::Autoclean-After-Update "true";
Aptitude::Auto-Fix-Broken "true";
Aptitude::Purge-Unused "true";
</pre>
</pre>
Questa configurazione definisce quanto segue:
* La target release è ''testing''; in pratica qualora nel file <code>/etc/apt/sources.list</code> siano disponibili più repository relativi a differenti [[release]] (pratica che è sconsigliata, se non si è utenti esperti e si sa cosa si sta facendo, qui trattata a solo titolo di esempio) apt saprà di dover dare la precedenza alla versione presente in testing. Se si usa solo il repository principale della propria [[release]] (non confondere "repository principale" con "sezione principale", ovvero main, di un repository, che è tutt'altro discorso), ed eventualmente ove presente anche quello di sicurezza, questo parametro può essere ignorato e/o omesso, ed è in genere preferibile non impostarlo, per non alterare il funzionamento di default degli altri repository (si veda la pagina dedicata al [[Repository %26 pinning|pinning]] per maggiori informazioni su come APT decide la priorità dei pacchetti da installare). Attenzione che a partire da Debian 11 ([[Bullseye]]), per via del cambiamento a [[codename]]/[[suite]] del repository di sicurezza, ciò disabiliterà anche il repository di sicurezza, per cui è un'opzione ancora più '''sconsigliata'''!
* La massima dimensione in byte per memorizzare le informazioni dei pacchetti disponibili nei vari sorgenti; maggiore il numero di repository specificato in <code>source.list</code> maggiore sarà lo spazio occupato (questo parametro NON definisce lo spazio riservato alla memorizzazione dei pacchetti installati e/o scaricati). Ora di default è impostato a 0, corrispondente a un valore illimitato, per cui non è più necessario configurare questo parametro come in passato.
* Da specificare SOLO e soltanto se si è installato e configurato correttamente un proxy per la gestione dei pacchetti, come <code>apt-cacher</code> per esempio.
* Le opzioni figlie di ''Aptitude'' influenzano evidentemente solo il comportamento di ''Aptitude''
** Ogni volta che viene aggiornato l'elenco dei pacchetti disponibili, ad esempio tramite <code>aptitude update</code> vengono anche rimossi tutti i pacchetti che sono stati installati automaticamente per soddisfare delle dipendenze per altri pacchetti e che non sono più necessari.
** Corregge se possibile le dipendenze non soddisfatte, come se fosse usata l'opzione <code>-f</code>.
** Quando un pacchetto viene rimosso questo viene completamente eliminato, come se si fosse usato il comando <code>aptitude purge</code>.
{{Box|Nota|Nello stesso file apt.conf è possibile specificare sia le opzioni specifiche di apt-get che quelle di aptitude, ciascun strumento ignorerà automaticamente le opzioni che non gli competono.}}
= Interfaccia grafica =
== Descrizione dell'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 (al quale si accede digitando Ctrl+T), 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.).


In questo esempio si � scelto di usare i tasti PGUP e PGDOWN.
Per vedere il contenuto di uno dei rami usiamo le frecce "su" e "giù" fino a selezionare la riga corrispondente e premiamo invio. Sotto al ramo in questione ora abbiamo dei sotto-rami, e premendo invio sui vari sotto-rami si accede allo stesso modo ai sotto-sotto-rami e così via, fino ad arrivare ai pacchetti.
Da notare che il file inputrc contiene altre comodit� pronte all'uso: basta decommentarle!


====Accesso diretto====
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.
Il carattere ! permette di richiamare un preciso comando dello storico:


Ogni riga che mostra il nome di un pacchetto riporta anche molte informazioni.
Per esempio, riporta lo stato di alcuni pacchetti nel mio sistema (nota: il mio sistema ha [[codename]] Sarge, ma ho installato diversi pacchetti dalla [[suite]] testing e anche alcuni da unstable. Per informazioni sul [[pinning]] si legga la guida [[Repository %26 pinning]]):
<pre>
<pre>
$ !-3
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
</pre>
</pre>


richiama ed esegue il terzultimo comando, mentre:
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 (<code>A</code>), 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 (<code>c</code>)
*apmd non è installato (<code>p</code>), 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:
; <code>v</code>: visualizza le versioni disponibili per il pacchetto;
; <code>d</code>: visualizza le dipendenze del pacchetto;
; <code>r</code>: visualizza i pacchetti che dipendono dal pacchetto selezionato (dipendenze inverse);
; <code>C</code>: scarica da internet e visualizza il changelog del pacchetto;
; <code>q</code>: chiude la schermata attuale e passa a quella precedente.


<pre>
Per una lista completa vedere la guida online con <code>?</code>.
$ !ta
 
</pre>
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 <code>q</code> 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 ;-)).
 
== Riassunto principali comandi ==
; <code>u</code>  ''(minuscolo)'': aggiorna la lista dei pacchetti.
; <code>+</code>: marca il pacchetto selezionato per l'installazione o l'aggiornamento;
; <code>-</code> ''(segno meno)'': marca il pacchetto selezionato per la rimozione;
; <code>_</code> ''(underscore)'': marca il pacchetto selezionato per la rimozione, eliminando tutti i file di configurazione (''purge'');
; <code>U</code>  ''(maiuscolo)'': marca per l'aggiornamento tutti i pacchetti per cui sia disponibile una nuova versione;
; <code>=</code> : mette in '''hold''' il pacchetto selezionato. Questo vuol dire che il pacchetto non verrà aggiornato anche se una nuova versione è disponibile e si seleziona di aggiornare i pacchetti (ad esempio con '''<code>U</code>''');
; <code>C</code> ''(maiuscolo)'': scarica e mostra il changelog del pacchetto selezionato;
; <code>b</code> : trova il prossimo pacchetto difettoso;
; <code>g</code> : procede con l'installazione, la rimozione e l'aggiornamento.
 
{{Box|Nota|Dopo aver premuto uno dei comandi '''<code>+</code>''', '''<code>-</code>''', '''<code>_</code>''' o '''<code>U</code>''' bisognerà premere due volte '''g''' per eseguire le azioni richieste: dopo la prima volta verrà visualizzata la lista dei pacchetti installati/aggiornati/rimossi/mantenuti, dopo il secondo '''g''' verranno eseguite le operazioni richieste.}}
 
=== Esempio: 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 <code>apt-get update</code>, mentre in Aptitude è sufficiente premere <code>u</code>.


richiama ed esgue l'ultimo comando che comincia con '''ta''' (potrebbe essere: tail -f /var/log/messages). Il '''!!''' richiama invece l'ultimo comando.
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.


Se si vuole richiamare il comando ma non eseguirlo si pu� usare il modificatore :p (''print''), ad esempio
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 <code>f</code> (forget).


<pre>
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 <code>=</code>, oppure dovreste leggere la guida già citata sul [[pinning]].
$ !ta:p
</pre>


stampa l'ultimo comando che inizia con ''ta''.
Ora torniamo ai pacchetti mostrati prima e supponiamo di voler aggiornare amule: lo selezioniamo e premiamo <code>+</code>. Questo marcherà in verde, cioè per l'installazione, sia amule che amule-common.  


Per richiamare l'ultimo comando che contiene una certa parola (non all'inizio):
Poi però ci viene un'idea migliore, e decidiamo di aggiornare tutti i pacchetti aggiornabili, quindi digitiamo <code>^</code> 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 <code>+</code>. 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 <code>b</code> e leggiamo:
<pre>
iB      udev          0.070    0.074
</pre>
dove "B" significa "con errori", e sotto si legge:
<pre>
<pre>
$ !?parola?
Alcune dipendenze di udev non sono soddisfatte:
 
  *udev è in conflitto con module-init-tools (< 3.2pre9-1)
</pre>
</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.


E' possibile anche richiamare un parametro di un comando usando ''':''' seguito dal numero del parametro (0 indica il comando stesso). Ad esempio:
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 [[release]] (e APT è configurato nel modo giusto) non verrà mai passato ad un'altra, a meno che non siamo noi a farlo manualmente.


<pre>
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 ;-).
$ man !-1:0
</pre>


visualizza la pagina di manuale dell'ultimo comando.
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 [[suite]] predefinita.  


Per eseguire un comando con gli stessi argomenti del comando precedente:
Ricordate che abbiamo lanciato Aptitude semplicemente con il comando <code>aptitude</code>? E ricorderete anche che il mio sistema è una Sarge (stable). Questo equivale a lanciare Aptitude con il comando <code>aptitude -t stable</code>, da cui il nostro problema.


<pre>
Se avessimo usato <code>aptitude -t testing</code> 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 ;-)).
$ nuovocomando !!:1*
</pre>


==Bash Scripting==
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.
In questa sezione verranno elencati alcuni brevi tip per lo scripting Bash. Questa non vuole essere assolutamente una guida completa, ma pi�ttosto un elenco di costrutti per lo scripting bash particolarmente eleganti, curiosi e/o poco noti.


===Variabili speciali===
== 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.


; $? : Contiene il valore di uscita dell'ultimo comando o funzione. Il comando ha successo se ritorna zero, qualsiasi altro valore indica invece un codice di errore.
=== 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. È possibile vedere e modificare le regole che generano la vista attuale premendo <code>'''G'''</code>.


; $@ : Contiene la lista dei paramentri passati allo script corrente. Ogni parametro viene opportunamente quotato e questo permette l'utilizzo di questa variabile nei '''cicli for''' per processare (ad esempio) una lista di nomi di file che possono contenere anche spazi. L'uso di questa variabile � quindi in genere consigliato rispetto a '''$*''' che ha la stessa funzione ma non quota i vari parametri.
Le regole vengono elaborate in sequenza dalla prima all'ultima.


''Esempio:''
Vediamo alcune regole:
<pre>
FILES=$@


for file in $FILES; do
; <code>filter(missing)</code> : non visualizza i pacchetti che esistono solo nelle dipendenze di un altro pacchetto.
    # Fare quello che si vuole con $file
    echo $file 
    # ...
done
</pre>


; $$ : PID del processo corrente.
; <code>status</code> : Raggruppa i pacchetti in:
:* Installati
:* Non installati
:* Aggiornamenti della sicurezza
:* Aggiornabili
:* Obsoleti
:* Virtuali


; $! : PID dell'ultimo job in background
; <code>section[(''mode''[,passthrough])]</code> : Raggruppa i pacchetti in base alla loro sezione. ''mode'' può assumere uno dei seguenti valori:


=== Manipolazione delle stringhe ===
:; <code>topdir</code> : Raggruppa un base alla sezione dell'archivio Debian (esempio: ''"main", "contrib", "non-free" ...'').  
Nelle shell *nix, storicamente, la manipolazione delle stringhe viene fatto attraverso programmi esterni alla shell come seq, awk e perl. Questi programmi vengono ancora usati quando si vuole mantenere la compatibilit� con la shell <tt>'''sh'''</tt>, tuttavia imparare anche il solo sed (il pi� semplice dei tre) non � cosa immediata.
:; <code>subdir</code> : Raggruppa in base alla sezione logica (esempio: ''"admin", "base", "devel", "gnome", "kde", ecc ...'')
:; <code>none</code> : Raggruppa in base delle sezioni formate dalla somma delle  precedenti (esempio: ''"contrib/admin", "contrib/devel", "non-free/admin", "non-free/devel").
:; <code>task</code> : Crea un albero dei pacchetti raggruppandoli per task.


Se si usa Bash, non � necessario usare nessun programma esterno, ma basta imparare i tre operatori fondamentali ed alcuni concetti di base, per poter fare tutte le manipolazioni pi� comuni.
: Se viene usato il secondo parametro opzionale <code>passthrough</code> i pacchetti che per qualche motivo non hanno una sezione vengono passati alla regola successiva senza essere inseriti in categorie.


In Bash una stringa non � altro che una variabile, si indica dunque con <tt>${nome}</tt> oppure con la forma abbreviata <tt>$nome</tt>. Il nome dentro le graffe pu� essere seguito da un modificatore che manipola la variabile, ad esempio:
All'avvio di Aptitude, premendo <code>'''G'''</code> si può vedere che vengono usate le seguenti regole:


  VAR="stringa-di-esempio"
<pre>
  echo ${VAR#stringa-}
filter(missing),task,status,section(subdir,passthruough),section(topdir,passthrough)
</pre>


elimina "stringa-" dall'inizio della variabile.
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''.


I modificatori sono molti, ma possono essere facilmente ricordati se si imparano i tre fondamentali:
= 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 <code>'''/'''</code> per la ricerca della stringa "cms" nei nomi dei pacchetti.


; <tt>#</tt> : sottrae dall'inizio della stringa ''(minimale)''
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 <code>'''/'''</code> e inseriamo "<code>~dcms</code>". Aptitude ci mostra il primo risultato della ricerca, per vedere i risultati successivi premiamo <code>'''n'''</code>, e per tornare indietro nella lista <code>'''\'''</code>.
; <tt>%</tt> : sottrae dalla fine della stringa ''(minimale)''
; <tt>/</tt> : sostituisce una sottostringa con un altra ''(solo la prima volta che viene incontrata)''


Questi operatori sono minimali, questo vuol dire che se si usano le espressioni regolari per indicare la sottostringa (da eliminare o sostituire) verr� individuata in caso di ambiguit� la sottostringa pi� piccola (o solo la prima nel caso della sostituzione).  
Per '''L'''imitare la lista dei pacchetti visualizzati possiamo usare il comando <code>'''l'''</code>, che si usa allo stesso modo di <code>'''/'''</code> ma mostra tutti e soli i pacchetti corrispondenti alla ricerca, organizzati ad albero nel modo che abbiamo già visto.


Per ottenere gli operatori massimali basta raddoppiare il simbolo:
== Ricerca avanzata ==
Aptitude supporta numerose opzioni di ricerca come il precedente <code>~d</code> per cercare una stringa nelle descrizioni. La stringa di ricerca può inoltre essere una [[REGEXP]] (espressione regolare). Queste opzioni possono essere usate indifferentemente da linea di comando (dopo <code>search</code>) che dall'interfaccia grafica (premendo <code>'''/'''</code> oppure <code>'''l'''</code>).


; <tt>##</tt> : sottrae dall'inizio della stringa ''(massimale)''
Di seguito si riporta qualche esempio. Fare riferimento alla guida di Aptitude citata all'inizio per i dettagli.
; <tt>%%</tt> : sottrae dalla fine della stringa ''(massimale)''
; <tt>//</tt> : sostituisce una sottostringa con un altra ''(tutte le volte che viene incontrata)''


Gli operatori massimali cercano di individuare la sottostringa pi� grande che corrisponde all'espressione regolare (nel caso del modificatore '''//''' tutte le sottostringhe vengono sostituite). Gli operatori di questo tipo vengono comunemente chiamati anche ''greedy (ingordi)''.
Volete sapere quali pacchetti di gnome 2.14 son entrati in Etch? Semplice:


Per una spiegazione dettagliata di tutti i modificatori e anche di altri modi di manipolare le stringhe in Bash (ad esempio <tt>expr</tt>) vedere:
<pre>$ aptitude search gnome~V2.14</pre>


* [http://www.tldp.org/LDP/abs/html/string-manipulation.html Advanced Bash-Scripting Guide: Manipulating Strings]
Il seguente comando cerca invece i pacchetti che contengono <code>editor</code> nella descrizione e che appartengono alla sezione <code>sound</code>:


==== Esempi: manipolazione delle stringhe ====
<pre>$ aptitude search ~deditor~ssound</pre>


  VAR="questa.sarebbe.una.stringa.di.esempio"
Cerca i pacchetti installati e contenuti nella [[sezione|sezioni]] [[contrib]]:
 
<pre>$ aptitude search '~i ~scontrib'</pre>
                      # Risultato:
o in [[non-free]] :
 
<pre>$ aptitude search '~i ~snon-free'</pre>
  echo ${VAR#*.}      # --> sarebbe.una.stringa.di.esempio
  echo ${VAR##*.}    # --> esempio
 
  echo ${VAR%.*}      # --> questa.sarebbe.una.stringa.di
  echo ${VAR%%.*}    # --> questa
 
  echo ${VAR/st/ST}  # --> queSTa.sarebbe.una.stringa.di.esempio
  echo ${VAR//st/ST}  # --> queSTa.sarebbe.una.STringa.di.esempio


===Alternativa a basename===
Così verranno mostrati i pacchetti installati e appartenenti a [[contrib]] o a [[non-free]] :
Quando in uno script ci si deve riferire al nome dello script stesso � usuale utilizzare il comando (esterno a bash) '''basename'''. Tuttavia, tramite i modificatori del paragrafo precedente, Bash stessa � in grado di fornire questa funzionalit�. Basta usare l'espressione ${0##*/}.
<pre>$ aptitude search '~i ~scontrib' '~i ~snon-free'</pre>
oppure:
<pre>$ aptitude search '~i (~scontrib|~snon-free)'</pre>


Esempio:
Cerca i pacchetti installati che non fanno parte di [[stable]] o che non fanno parte di [[testing]]:
<pre>
<pre>
usage () {
$ aptitude search '~i !~Astable'
        echo "usage: ${0##*/} "
$ aptitude search '~i !~Atesting'
        exit 1
}
</pre>
</pre>


=== Cambiare l'estensione ai file ===
= File di configurazione =
Rinomina tutti i file <tt>*.txt</tt> della directory corrente in <tt>*.log</tt>:
È possibile definire le opzioni di aptitude, sia che lo si usi da riga di comando che tramite interfaccia visuale, in diversi modi, per esempio tramite un file [[Introduzione all'APT System| apt.conf]].
 
for f in *.txt; do mv "$f" "${f/%txt/log}"; done


==Link==
= Approfondimenti =
Link ad altre risorse su '''GNU Bash''':
== Manpages ==
<code>$ man aptitude</code> (si noti che la maggior parte delle opzioni influiscono solo sull'utilizzo a riga di comando, non sull'interfaccia visuale).


* [http://www.gnu.org/software/bash/manual/bash.html Bash Referece Manual]: manuale ufficiale
== Sitografia ==
* [http://www.tldp.org/LDP/abs/html/ Advanced Bash-Scripting Guide]: la '''Bibbia''' dello bash scripting.
* [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 (per vedere tutte le diapositive cliccare sullo 0 che appare in basso al centro al passaggio del mouse).


----
* [https://www.debian.org/doc/manuals/aptitude/index.it.html Manuale di riferimento]: traduzione italiana del manuale completo, trattante in modo dettagliato ogni possibile opzione di Aptitude, in particolare utilissimo per tutte le opzioni di ricerca avanzata. Lo stesso manuale si può trovare in <code>/usr/share/doc/aptitude/html/it/index.html</code> installando il pacchetto <code>aptitude-doc-it</code>, oppure in inglese in <code>/usr/share/doc/aptitude/html/en/index.html</code> installando il pacchetto <code>aptitude-doc-en</code>.


Autore iniziale: [[Utente:TheNoise|~ The_Noise]]
{{Autori
|Autore = [[Utente:Tindal|Tindal]]
|Estesa_da =
: [[Utente:TheNoise|TheNoise]]
: [[Utente:Stemby|Stemby]]
: [[Utente:Wtf|Wtf]]
|Verificata_da =
: [[Utente:Nydebianized|Nydebianized]]
: [[Utente:Achille cotone|Achille cotone]]
: [[Utente:Wtf|Wtf]]
: [[Utente:HAL 9000|HAL 9000]] 13:44, 27 giu 2017 (CEST)
|Numero_revisori = 4
}}
[[Categoria:Apt]]

Versione attuale delle 14:17, 4 ago 2019

APT
Arrow left.png

Gestori di pacchetti

Comandi utili

Configurazione del sistema

Altro

Arrow right.png



Debian-swirl.png Versioni Compatibili

Debian 8 "jessie"
Debian 9 "stretch"
Debian 10 "buster"

Introduzione

Questa guida è dedicata all'uso di Aptitude.

Il completissimo Manuale Utente di Aptitude in formato html si può trovare in /usr/share/doc/aptitude/html/en/index.html, installando il pacchetto aptitude-doc-it (oppure aptitude-doc-en per la versione in lingua inglese).

Cos'è Aptitude

Aptitude è un frontend per la gestione avanzata dei pacchetti di una distribuzione Debian, ma risulta valido per tutte le distribuzioni che supportano APT (link).

È lo strumento preferito da molti 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, apt-mark, etc.) ma anche perché permette di gestire in modo molto più facile (ed efficace) situazioni complesse (dipendenze, dipendenze inverse, rimozione pacchetti non utilizzati, etc).

Aptitude è un frontend a dpkg esattamente come apt-get e può essere utilizzato in due modi: da linea di comando, cioè come apt-get (con la stessa sintassi per i comandi principali), 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 privilegi di amministrazione, è possibile e caldamente consigliato usare questa possibilità per effettuare qualunque prova.


Installazione

A partire da Debian 9 (Stretch) l'omonimo pacchetto è diventato opzionale, per cui può essere necessario installare aptitude prima di poterlo utilizzare. Per esempio con apt e privilegi di amministrazione basta:

# apt install aptitude

In particolare ne è ancora raccomandabile l'installazione per:

  • gestire Debian con molti repository diversi per poter gestire più facilmente possibili conflitti;
  • per avvalersi dell'ineguagliata funzione di ricerca avanzata;
  • oppure ancora per disporre di un'interfaccia visuale ad APT anche senza server grafico attivo.

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. Di seguito le azioni più importanti.

update

# aptitude update

Aggiorna la lista dei pacchetti (come premere 'u' dall'interfaccia visuale o come apt-get update) .

safe-upgrade

# aptitude safe-upgrade

Aggiorna tutti i pacchetti aggiornabili senza che nascano conflitti. Per conflitto si intende una situazione in cui l'aggiornamento di un pacchetto richide la rimozione di uno o più differenti pacchetti, ergo l'uso di safe-upgrade causa l'aggiornamento di tutti quei pacchetti che possono essere aggiornati senza che sia necessario rimuovere contestualmente altri pacchetti. Da manuale: Quando si verificano problemi di dipendenze dei pacchetti, usa un algoritmo «sicuro» per risolverli. Questo risolutore cerca di preservare il maggior numero possibile delle scelte dell'utente; non rimuove mai un pacchetto e non installa mai una versione di un pacchetto che non sia la versione candidata predefinita. L'utilizzo di questo comando implica necessariamente l'opzione --safe-resolver (l'opzione --full-resolver viene sempre automaticamente rigettata). Una sintassi del tutto equivalente, ma mantenuta solo per ragioni storiche, è:

# aptitude upgrade

Si noti che l'uso non è intercambiabile con apt-get upgrade, poiché apt-get in questo caso non effettuerà nemmeno l'installazione di nuovi pacchetti, mentre aptitude safe-upgrade permette l'installazione di nuovi pacchetti, se necessari per l'aggiornamento di altri, e impedisce soltanto la rimozione di pacchetti precedentemente installati. È invece equivalente, se non per la mancanza di un risolutore di conflitti, al comando apt upgrade .

Esempio

# aptitude safe-upgrade $(aptitude search '?origin(Unofficial Multimedia Packages) ?upgradable' -F '%p')

Questo comando mostra un esempio d'uso avanzato che permette di aggiornare i soli pacchetti provenienti dal repository deb-multimedia.

full-upgrade

# aptitude full-upgrade

Anche questo comando aggiorna tutti i pacchetti, ma è più aggressivo nella risoluzione delle dipendenze: nuovi pacchetti saranno installati e altri rimossi, fino a quando tutte le dipendenze non saranno soddisfatte. Questo comando potrebbe fare cose non desiderate (come, appunto, installare nuovi pacchetti o rimuoverne altri) quindi deve essere usato con cautela (specialmente nei casi in cui segnala esplicitamente problemi nella risoluzione delle dipendenze). Si noti che questo comando implica l'opzione --full-resolver, a meno che l'utente non specifichi l'opzione --safe-resolver, nel qual caso full-upgrade funziona esattamente come safe-upgrade. Una sintassi del tutto equivalente, mantenuta per ragioni storiche, è:

# aptitude dist-upgrade

install, remove, purge, reinstall

# aptitude install pacchetto/i
# aptitude remove pacchetto/i
# aptitude purge pacchetto/i
# aptitude reinstall pacchetto/i

Questi comandi rispettivamente installano, rimuovono, eliminano completamente (eliminazione anche dei file di configurazione) o reinstallano il o i pacchetti specificati.

search

$ aptitude search espressione/i

Elenca i pacchetti che contengono nel nome una delle espressioni fornite. Le espressioni possono essere semplici stringhe (ad esempio il nome di un pacchetto) o anche espressioni più complesse ("Search Patterns").

Esempi

$ aptitude search iceweasel

Mostrerà tutti i pacchetti che contengono iceweasel nel loro nome.

$ aptitude search '~S ~i (!~stable ~Atesting !~Aunstable ~O"Unofficial Multimedia Packages")'

Mostrerà tutti i pacchetti installati appartenenti alla sola suite (detta anche archive) testing e solo se provenienti dal repository di deb-multimedia (identificato attraverso l'attributo "origine"). Se nel proprio sources.list non sono specificati repository relativi ad altre suite i parametri !~stable e !~Aunstable possono essere omessi. In sintesi è necessario esplicitare sia i repositori disponibili che si vuole escludere che quelli da includere nel risultato della ricerca.

$ aptitude search '?installed?origin(Unofficial Multimedia Packages)?not(?origin(Debian))'

Sintassi simile alla precedente, ma in questo caso si è usato un comando che mostra tutti i pacchetti, a prescindere dalla suite, appartenenti a deb-multimedia, ma non appartenenti al repository principale. Per filtrare in base alla suite è sufficiente usare archive, che ne è un sinonimo, e specificarne il nome, invece di origin. Si veda la pagina "I repository ed il loro utilizzo" per capire dove dove trovare i parametri relativi al nome della release, all'origine e altro.

$ aptitude search '?origin(Unofficial Multimedia Packages) ?upgradable' -F '%p %v %V'

Mostra tutti i pacchetti aggiornabili del solo repository deb-multimedia (posto naturalmente di averlo specificato nel proprio sources.list), visualizzando anche versione attualmente installata e candidata.

show

$ aptitude show pacchetto/i

Mostra su terminale le informazioni di ogni pacchetto specificato.

versions

$ aptitude versions espressione

Elenca, per ogni pacchetto cui corrisponde l'espressione specificata, lo stato (installato o meno), il numero di verisone, la release di appartenenza e il valore di pin (si veda la guida dedicata al pinning).

Bulb.png Suggerimento
Se si teme che un comando in grado di installare o rimuovere pacchetti effettui delle azioni indesiderate eseguire il suddetto comando una prima volta in modalità simulazione (si veda la sezione dedicata alle opzioni).


Opzioni

-s, --simulate

Nessuna azione; effettua una simulazione degli eventi che si verificherebbero, ma non cambia realmente il sistema. Esempio di comando: # aptitude install pacchetto -s

-t, --target-release

Permette in genere di aggiornare/installare i pacchetti specificati e le relative dipendenze in base alla release bersaglio. Per esempio:

# aptitude -t stretch-backports install pacchetto

-V, --verbose-versions

Mostra il numero di versione completo dei pacchetti aggiornati e installati.

Easter eggs

$ aptitude mooo
$ aptitude -v moo
$ aptitude -vv moo
$ aptitude -vvvvvvvvv moo

File di configurazione

È possibile definire le opzioni di aptitude non solo da riga di comando, ma anche specificando i corrispondenti parametri in appositi file di configurazione, ad esempio in un unico file /etc/apt/apt.conf, in più file dal nome arbitrario in /etc/apt/apt.conf.d/ o ancora in ~/.aptitude/config. A prescindere dal, o dai, file di configurazione è possibile usare in tutti i casi due tipi di sintassi, ad esempio:

APT
{
	Default-Release "testing"; 
	Cache-Limit 24000000;
}
Acquire::http::Proxy "http://indirizzo_proxy:3142/";
Aptitude
{
	Autoclean-After-Update "true";
	Auto-Fix-Broken "true";
	Purge-Unused "true";
}
   
APT::Default-Release "testing"; 
APT::Cache-Limit 24000000;
Acquire::http::Proxy "http://indirizzo_proxy:3142/";
Aptitude::Autoclean-After-Update "true";
Aptitude::Auto-Fix-Broken "true";
Aptitude::Purge-Unused "true";

Questa configurazione definisce quanto segue:

  • La target release è testing; in pratica qualora nel file /etc/apt/sources.list siano disponibili più repository relativi a differenti release (pratica che è sconsigliata, se non si è utenti esperti e si sa cosa si sta facendo, qui trattata a solo titolo di esempio) apt saprà di dover dare la precedenza alla versione presente in testing. Se si usa solo il repository principale della propria release (non confondere "repository principale" con "sezione principale", ovvero main, di un repository, che è tutt'altro discorso), ed eventualmente ove presente anche quello di sicurezza, questo parametro può essere ignorato e/o omesso, ed è in genere preferibile non impostarlo, per non alterare il funzionamento di default degli altri repository (si veda la pagina dedicata al pinning per maggiori informazioni su come APT decide la priorità dei pacchetti da installare). Attenzione che a partire da Debian 11 (Bullseye), per via del cambiamento a codename/suite del repository di sicurezza, ciò disabiliterà anche il repository di sicurezza, per cui è un'opzione ancora più sconsigliata!
  • La massima dimensione in byte per memorizzare le informazioni dei pacchetti disponibili nei vari sorgenti; maggiore il numero di repository specificato in source.list maggiore sarà lo spazio occupato (questo parametro NON definisce lo spazio riservato alla memorizzazione dei pacchetti installati e/o scaricati). Ora di default è impostato a 0, corrispondente a un valore illimitato, per cui non è più necessario configurare questo parametro come in passato.
  • Da specificare SOLO e soltanto se si è installato e configurato correttamente un proxy per la gestione dei pacchetti, come apt-cacher per esempio.
  • Le opzioni figlie di Aptitude influenzano evidentemente solo il comportamento di Aptitude
    • Ogni volta che viene aggiornato l'elenco dei pacchetti disponibili, ad esempio tramite aptitude update vengono anche rimossi tutti i pacchetti che sono stati installati automaticamente per soddisfare delle dipendenze per altri pacchetti e che non sono più necessari.
    • Corregge se possibile le dipendenze non soddisfatte, come se fosse usata l'opzione -f.
    • Quando un pacchetto viene rimosso questo viene completamente eliminato, come se si fosse usato il comando aptitude purge.
Info.png Nota
Nello stesso file apt.conf è possibile specificare sia le opzioni specifiche di apt-get che quelle di aptitude, ciascun strumento ignorerà automaticamente le opzioni che non gli competono.


Interfaccia grafica

Descrizione dell'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 (al quale si accede digitando Ctrl+T), 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 "giù" fino a selezionare la riga corrispondente e premiamo invio. Sotto al ramo in questione ora abbiamo dei sotto-rami, e premendo invio sui vari sotto-rami si accede allo stesso modo ai sotto-sotto-rami 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, riporta lo stato di alcuni pacchetti nel mio sistema (nota: il mio sistema ha codename Sarge, ma ho installato diversi pacchetti dalla suite testing e anche alcuni da unstable. Per informazioni sul pinning si legga la guida Repository & pinning):

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

Riassunto principali comandi

u (minuscolo)
aggiorna la lista dei pacchetti.
+
marca il pacchetto selezionato per l'installazione o l'aggiornamento;
- (segno meno)
marca il pacchetto selezionato per la rimozione;
_ (underscore)
marca il pacchetto selezionato per la rimozione, eliminando tutti i file di configurazione (purge);
U (maiuscolo)
marca per l'aggiornamento tutti i pacchetti per cui sia disponibile una nuova versione;
=
mette in hold il pacchetto selezionato. Questo vuol dire che il pacchetto non verrà aggiornato anche se una nuova versione è disponibile e si seleziona di aggiornare i pacchetti (ad esempio con U);
C (maiuscolo)
scarica e mostra il changelog del pacchetto selezionato;
b
trova il prossimo pacchetto difettoso;
g
procede con l'installazione, la rimozione e l'aggiornamento.
Info.png Nota
Dopo aver premuto uno dei comandi +, -, _ o U bisognerà premere due volte g per eseguire le azioni richieste: dopo la prima volta verrà visualizzata la lista dei pacchetti installati/aggiornati/rimossi/mantenuti, dopo il secondo g verranno eseguite le operazioni richieste.


Esempio: 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 release (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 suite 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.

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. È 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: "admin", "base", "devel", "gnome", "kde", ecc ...)
none
Raggruppa in base delle sezioni formate dalla somma delle precedenti (esempio: "contrib/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.

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

Per Limitare la lista dei pacchetti visualizzati 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.

Ricerca avanzata

Aptitude supporta numerose opzioni di ricerca come il precedente ~d per cercare una stringa nelle descrizioni. La stringa di ricerca può inoltre essere una REGEXP (espressione regolare). Queste opzioni possono essere usate indifferentemente da linea di comando (dopo search) che dall'interfaccia grafica (premendo / oppure l).

Di seguito si riporta qualche esempio. Fare riferimento alla guida di Aptitude citata all'inizio per i dettagli.

Volete sapere quali pacchetti di gnome 2.14 son entrati in Etch? Semplice:

$ aptitude search gnome~V2.14

Il seguente comando cerca invece i pacchetti che contengono editor nella descrizione e che appartengono alla sezione sound:

$ aptitude search ~deditor~ssound

Cerca i pacchetti installati e contenuti nella sezioni contrib:

$ aptitude search '~i ~scontrib'

o in non-free :

$ aptitude search '~i ~snon-free'

Così verranno mostrati i pacchetti installati e appartenenti a contrib o a non-free :

$ aptitude search '~i ~scontrib' '~i ~snon-free'

oppure:

$ aptitude search '~i (~scontrib|~snon-free)'

Cerca i pacchetti installati che non fanno parte di stable o che non fanno parte di testing:

$ aptitude search '~i !~Astable'
$ aptitude search '~i !~Atesting'

File di configurazione

È possibile definire le opzioni di aptitude, sia che lo si usi da riga di comando che tramite interfaccia visuale, in diversi modi, per esempio tramite un file apt.conf.

Approfondimenti

Manpages

$ man aptitude (si noti che la maggior parte delle opzioni influiscono solo sull'utilizzo a riga di comando, non sull'interfaccia visuale).

Sitografia

  • 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 (per vedere tutte le diapositive cliccare sullo 0 che appare in basso al centro al passaggio del mouse).
  • Manuale di riferimento: traduzione italiana del manuale completo, trattante in modo dettagliato ogni possibile opzione di Aptitude, in particolare utilissimo per tutte le opzioni di ricerca avanzata. Lo stesso manuale si può trovare in /usr/share/doc/aptitude/html/it/index.html installando il pacchetto aptitude-doc-it, oppure in inglese in /usr/share/doc/aptitude/html/en/index.html installando il pacchetto aptitude-doc-en.




Guida scritta da: Tindal Swirl-auth100.png Guida Debianized
Estesa da:
TheNoise
Stemby
Wtf
Verificata da:
Nydebianized
Achille cotone
Wtf
HAL 9000 13:44, 27 giu 2017 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized