Aptitude
Introduzione
Questa guida è dedicata all'uso di Aptitude come 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). L'intento dichiarato dell'autore è quello di indirizzare gli utenti ad imparare l'utilizzo di Aptitude, per usarlo come strumento preferenziale per l'amministrazione dei pacchetti, in quanto permette una più facile analisi delle varie situazioni in cui il sistema viene di volta in volta a trovarsi.
Aptitude è un frontend a dpkg esattamente come apt-get, che sembra essere destinato a sostituire integralmente lo stesso apt-get, tanto che nelle release notes di Sarge si legge:
e anche:
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 utente basata sulle librerie ncurses.
Per l'uso da linea di comando si rimanda all'apt-howto (aptitude install apt-howto-it, oppure http://www.debian.org/doc/manuals/apt-howto/index.it.html ) e alla pagina di manuale (man aptitude), invece tratterò più diffusamente l'interfaccia utente, perchè ritengo sia uno strumento fondamentale per la gestione dei pacchetti e soprattutto per la diagnostica e la risoluzione degli eventuali problemi riscontrati.
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.
Interfaccia utente
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 una 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)
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
- C scarica e visualizza il changelog del pacchetto
- q torna in dietro di una schermata
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 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ù vi chiede se volete uscire dal programma: per il momento dite di no ;-)).
Aggiornare i pacchetti
Per la descrizione dell'utilizzo di Aptitude userò 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).
Ora torniamo ai pacchetti mostrati prima e supponiamo di voler aggiornare amule: lo seleziono e premo "+". Questo marcherà in verde, cioè per l'installazione, sia amule che amule-common. Poi però mi viene un'idea migliore, e decido di aggiornare tutti i pacchetti aggiornabili, quindi digito "^" per risalire al ramo superiore della vista, finché arrivo a Pacchetti installati poi uso la freccia in alto e se necessario risalgo ancora ai rami superiori finchè non arrivo a Pacchetti aggiornabili e qui premo "+". 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 mi segnala nella zona blu che c'è un pacchetto "errato" cioè con problemi di dipendenze. Senza battere ciglio premo "b" e vedo:
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)
premo invio su udev, e mi appare la schermeta con tutte le informazioni su udev stesso, comprese le dipendenze: seleziono module-init-tools e premo invio. Ora mi appaiono tutte le versioni disponibili di module-init-tools, tra cui vedo che è presente la 3.2pre9-1: non mi 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 ho 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 siate voi a farlo manualmente.
Vorrei far 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 aptitude pensa che testing sia la nostra release predefinita (che non è vero) e mostrerà come aggiornabili tutti i pacchetti che lo sono in testin, 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 vorrei vedere se in debian c'è qualche programma per la gestione dei contenuti, e l'acronimo in inglese è "cms". Per fare questo posso usare le funzioni di ricerca di aptitude: per prima cosa digito "/" per la ricerca della stringa "cms" nei nomi dei pacchetti. Ora però mi viene in mente che un cms non contiene necessariamente la stringa "cms" nel nome, quindi faccio una ricerca delle descrizioni per la stessa stringa: digito ancora "/" e inserisco "~dcms". Aptitude mi mostra il primo risultato della ricerca: per vedere il successivo premo "n" oppure "\".