Capitolo 2. Gestione dei pacchetti in Debian

Indice

2.1. Prerequisiti per la gestione dei pacchetti Debian
2.1.1. Configurazione dei pacchetti
2.1.2. Precauzioni base
2.1.3. Una vita di aggiornamenti senza fine
2.1.4. Nozioni di base sugli archivi Debian
2.1.5. Dipendenze dei pacchetti
2.1.6. Il flusso di eventi nella gestione dei pacchetti
2.1.7. Prima risposta a problemi di gestione dei pacchetti
2.2. Operazioni base per la gestione dei pacchetti
2.2.1. Confronto apt-get / apt-cache - aptitude
2.2.2. Operazioni base per la gestione dei pacchetti dalla riga di comando
2.2.3. Uso interattivo di aptitude
2.2.4. Associazioni dei tasti per aptitude
2.2.5. Viste dei pacchetti in aptitude
2.2.6. Opzioni per i metodi di ricerca in aptitude
2.2.7. La struttura delle espressioni regolari di aptitude
2.2.8. Risoluzione delle dipendenze di aptitude
2.2.9. Registri delle attività sui pacchetti
2.3. Esempi di operazioni con aptitude
2.3.1. Elencare pacchetti in base alla corrispondenza del nome con espressioni regolari
2.3.2. Sfogliare le corrispondenze ad una espressione regolare
2.3.3. Eliminare completamente i pacchetti rimosssi
2.3.4. Mettere ordine nello stato di installazione automatico/non automatico
2.3.5. Aggiornamento di tutto il sistema
2.4. Operazioni avanzate per la gestione dei pacchetti
2.4.1. Operazioni avanzate per la gestione dei pacchetti dalla riga di comando
2.4.2. Verifica dei pacchetti installati
2.4.3. Salvaguardarsi da problemi coi pacchetti
2.4.4. Cercare tra i metadati dei pacchetti
2.5. Aspetti tecnici della gestione dei pacchetti in Debian
2.5.1. Metadati degli archivi
2.5.2. File "Release" nella directory principale ed autenticità
2.5.3. File "Release" a livello di archivio
2.5.4. Recuperare i metadati per un pacchetto
2.5.5. Lo stato dei pacchetti per APT
2.5.6. Lo stato dei pacchetti per aptitude
2.5.7. Copie locali dei pacchetti scaricati
2.5.8. Nomi dei file di pacchetto di Debian
2.5.9. Il comando dpkg
2.5.10. Il comando update-alternative
2.5.11. Il comando dpkg-statoverride
2.5.12. Il comando dpkg-divert
2.6. Ripristino da un sistema con problemi
2.6.1. Incompatibilità con vecchie configurazioni utente
2.6.2. Pacchetti diversi con file sovrapposti
2.6.3. Risolvere problemi negli script di pacchetto
2.6.4. Ripristinare con il comando dpkg
2.6.5. Ripristinare i dati sui pacchetti selezionati
2.7. Suggerimenti per la gestione dei pacchetti
2.7.1. Come scegliere i pacchetti Debian
2.7.2. Pacchetti da fonti mescolate di archivi
2.7.3. Modificare la versione candidata
2.7.4. Updates e Backports
2.7.5. Scaricare ed aggiornare automaticamente i pacchetti
2.7.6. Limitare l'uso di banda di APT per gli scaricamenti
2.7.7. Retrocessione di emergenza alla versione precedente
2.7.8. Chi ha caricato il pacchetto?
2.7.9. Il pacchetto equivs
2.7.10. Fare il port di un pacchetto nel sistema stabile
2.7.11. Server proxy per APT
2.7.12. Piccolo archivio pubblico per i paccchetti
2.7.13. Registrare e copiare la configurazione di sistema
2.7.14. Convertire o installare un pacchetto binario alieno
2.7.15. Estrarre pacchetti senza dpkg
2.7.16. Ulteriori letture sulla gestione dei pacchetti
[Nota] Nota

Questo capitolo è stato scritto assumendo che il rilascio stabile più recente abbia nome in codice: squeeze.

Debian è un'organizzazione di volontari che crea distribuzioni coerenti di pacchetti binari precompilati di software libero e li distribuisce dal suo archivio.

L'archivio Debian viene fornito da molti siti mirror remoti per l'accesso con i metodi HTTP e FTP. È anche disponibile come CD-ROM/DVD.

Il sistema di gestione dei pacchetti di Debian, se usato in modo corretto, permette all'utente di installare dall'archivio insiemi coerenti di pacchetti binari sul sistema. Attualmente ci sono 30552 pacchetti disponibili per l'architettura amd64.

Il sistema di gestione dei pacchetti di Debian ha una storia ricca e fornisce molti programmi con interfacce per l'utente finale e molti metodi di backend per l'accesso agli archivi tra cui scegliere. Attualmente le scelte raccomandate sono le seguenti.

Tabella 2.1. Elenco degli strumenti Debian di gestione dei pacchetti

pacchetto popcon dimensione descrizione
apt * V:90, I:99 5600 Advanced Packaging Tool (APT), frontend per dpkg che fornisce i metodi "http", "ftp" e "file" per 'accesso agli archivi (inclusi i comandi apt-get/apt-cache)
aptitude * V:25, I:98 11916 gestore di pacchetti interattivo basato su terminale con aptitude(8)
update-manager-gnome * V:7, I:10 1221 Applicazione GNOME che gestisce gli aggiornamenti software con update-manager(8)
tasksel * V:5, I:93 904 strumento per selezionare attività per l'installazione sul sistema Debian (frontend per APT)
unattended-upgrades * V:4, I:31 280 pacchetto di estensione per APT per abilitare l'installazione automatica degli aggiornamenti di sicurezza
dselect * V:2, I:30 2404 gestore di pacchetti basato su terminale (standard precedente, frontend per APT e altri vecchi metodi di accesso)
dpkg * V:92, I:99 6804 sistema di gestione dei pacchetti per Debian
synaptic * V:13, I:40 6464 gestore grafico dei pacchetti (front-end GNOME per APT)
apt-utils * V:51, I:99 516 programmi di utilità APT: apt-extracttemplates(1), apt-ftparchive(1) e apt-sortpkgs(1)
apt-listchanges * V:11, I:17 280 strumento di notifica dello storico dei cambiamenti dei pacchetti
apt-listbugs * V:1.4, I:2 508 elenca i bug critici prima di ogni installazione di APT
apt-file * V:2, I:9 188 utilità APT per ricerca di pacchetti, interfaccia a riga di comando
apt-rdepends * V:0.13, I:0.9 92 elenca le dipendenze dei pacchetti in modo ricorsivo

2.1. Prerequisiti per la gestione dei pacchetti Debian

2.1.1. Configurazione dei pacchetti

Questi sono alcuni punti fondamentali per la configurazione dei pacchetti in un sistema Debian.

  • La configurazione manuale fatta dall'amministratore di sistema viene rispettata. In altre parole, il sistema di configurazione dei pacchetti non fa configurazioni invadenti per ragioni di comodità.
  • Ogni pacchetto viene fornito con un proprio script di configurazione per l'interfaccia utente standard debconf(7), per aiutare nel processo di configurazione iniziale del pacchetto.
  • I Debian Developer cercano di fare il loro meglio per rendere l'aggiornamento un'esperienza senza problemi grazie agli script di configurazione dei pacchetti.
  • Sono disponibili per l'amministratore di sistema le complete funzionalità di un pacchetto software, ma quelle con rischi per la sicurezza sono disabilitate nella installazione predefinita.
  • Se si attiva manualmente un servizio con rischi per la sicurezza, si è responsabili del contenimento del rischio.
  • L'amministratore di sistema può abilitare manualmente configurazioni esotiche; questo può creare interferenze con popolari programmi generici di supporto per la configurazione del sistema.

2.1.2. Precauzioni base

[Avvertimento] Avvertimento

Non installare pacchetti da una miscela casuale di suite. Probabilmente si disgrega la coerenza tra i pacchetti che richiede una conoscenza approfondita dalla gestione del sistema, come dell'ABI del compilatore, versione delle librerie, funzionalità dell'interprete, ecc.

L'amministratore di sistema novizio dovrebbe rimanere con il rilascio stable di Debian ed applicare solo gli aggiornamenti di sicurezza. Ciò significa che alcune delle azione spiegate in seguito, seppur valide, sono, come precauzione, da evitare fino a che non si capisce il sistema Debian molto bene. Ecco alcune cose da ricordare.

  • Non includere testing o unstable in "/etc/apt/sources.list".
  • Non mescolare gli archivi standard Debian con altri archivi non Debian, come quelli di Ubuntu, in "/etc/apt/sources.list".
  • Non creare il file "/etc/apt/preferences".
  • Non cambiare il comportamento degli strumenti di gestione dei pacchetti attraverso i loro file di configurazione senza capire a pieno il loro effetto.
  • Non installare pacchetti presi qua e là con "dpkg -i <pacchetto_a_caso>".
  • Non installare mai pacchetti presi qua e là con "dpkg --force-all -i <pacchetto_a_caso>".
  • Non cancellare o alterare i file in "/var/lib/dpkg/".
  • Non sovrascrivere file di sistema, installando direttamente programmi software compilati dai sorgenti.

    • Se necessario, Installarli in "/usr/local" o "/opt"

Gli effetti causati dalle azioni descritte sopra al sistema di gestione dei pacchetti di Debian portano a incompatibilità che possono lasciare il sistema in uno stato inutilizzabile.

Gli amministratori di sistema Debian seri, che gestiscono server di importanza critica, dovrebbero usare particolari precauzioni.

  • Non installare alcun pacchetto, compreso quelli di aggiornamenti di sicurezza di Debian, senza averli attentamente testati con la propria particolare configurazione in condizioni sicure.

    • Alla fin fine è l'amministratore di sistema ad essere responsabile del proprio sistema.
    • La lunga tradizione di stabilità dei sistemi Debian non è di per sé una garanzia.

2.1.3. Una vita di aggiornamenti senza fine

Nonostante le avvertenze dette prima, si sa che molti lettori di questo documento desiderano usare le suite testing o unstable di Debian come loro sistema principale per ambienti Desktop auto-amministrati. Ciò accade perché funzionano molto bene, sono aggiornate di frequente e offrono le più recenti funzionalità.

[Attenzione] Attenzione

Per i server di produzione, è raccomandata la suite stable con gli aggiornamenti di sicurezza. Lo stesso vale per i PC desktop su cui si investono sforzi di amministrazione limitati, ad esempio il PC di un genitore.

Non serve far altro che impostare semplicemente la stringa relativa alla distribuzione nel file "/etc/apt/sources.list" con il nome della suite voluta: "testing" o "unstable", o con il suo nome in codice: "wheezy o "sid". Questo farà vivere una vita di aggiornamenti senza fine.

L'uso di testing o unstable è molto divertente ma comporta qualche rischio. Anche se la suite unstable del sistema Debian sembra molto stabile per la maggior parte del tempo, ci sono stati alcuni problemi con i pacchetti delle suite testing e unstable e qualcuno di questi non era affatto banale da risolvere. Può essere piuttosto doloroso per l'utente. A volte si hanno pacchetti con dipendenze non soddisfatte o funzionalità mancanti per qualche settimana.

Ecco alcune idee per assicurare un recupero facile e veloce da bug nei pacchetti Debian.

  • Impostare il sistema per avere due partizioni avviabili installando la suite stable di Debian in un'altra partizione
  • Tenere a portata di mano il CD di installazione per l'avvio di ripristino
  • Considerare l'installazione di apt-listbugs per controllare le informazioni del Sistema Debian di tracciamento dei Bug (BTS) prima degli aggiornamenti
  • Imparare abbastanza bene l'infrastruttura del sistema di pacchetti da poter aggirare il problema.
  • Creare un ambiente chroot o simile ed eseguire prima lì il sistema più recente (vedere Sezione 9.8, «Sistema virtualizzato»)

(Se non si è in grado di intraprendere nessuna di queste azioni precauzionali, probabilmente non si è pronti per le suite testing e unstable.)

L'illuminazione data dalla lettura di ciò che segue salva l'utente dall'eterna lotta karmica con l'inferno degli aggiornamenti e gli fa raggiungere il nirvana Debian.

2.1.4. Nozioni di base sugli archivi Debian

Guardiamo l'archivio Debian dalla prospettiva dell'utente.

[Suggerimento] Suggerimento

La politica ufficiale per gli archivi Debian è definita nel Capitolo 2 - "L'archivo Debian", del manuale Debian Policy.

Per il normale accesso HTTP, l'archivio viene specificato nel file "/etc/apt/sources.list" come nell'esempio seguente per l'attuale sistema stable = squeeze.

deb http://ftp.XX.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.XX.debian.org/debian/ squeeze main contrib non-free

deb http://security.debian.org/ squeeze/updates main contrib
deb-src http://security.debian.org/ squeeze/updates main contrib

Notare che è necessario sostituire a "ftp.XX.debian.org" l'appropriato URL del sito mirror per la propria località che può essere trovato nell'elenco di siti mirror di Debian in tutto il mondo; per gli USA è "ftp.us.debian.org". Si può controllare lo stato di questi server sul Sito di controllo dei mirror Debian.

Viene qui usato il nome in codice "squeeze invece del nome della suite "stable" per evitare sorprese una volta che venga rilasciata la nuova stable.

La struttura di "/etc/apt/sources.list" è descritta in sources.list(5) ed i punti chiave sono i seguenti.

  • Le righe "deb" definiscono voci per pacchetti binari.
  • Le righe "deb-src" definiscono voci per i pacchetti sorgenti.
  • Il primo argomento è l'URL radice dell'archivio Debian.
  • Il secondo argomento è il nome della distribuzione, o il nome della suite o il nome in codice.
  • Il terzo argomento e quelli seguenti sono l'elenco dei nomi di aree valide dell'archivio Debian.

Le righe "deb-src" possono essere tranquillamente omesse (o commentate aggiungendo il carattere "#" all'inizio della riga) se si usa solo aptitude che non accede ai metadati relativi ai sorgenti. Si velocizza così l'aggiornamento dei metadati dell'archivio. L'URL può essere "http://", "ftp://", "file://", ….

[Suggerimento] Suggerimento

Se nell'esempio precedente si usa "sid" invece di "squeeze, in "/etc/apt/sources.list" non è richiesta la riga "deb: http://security.debian.org/" per gli aggiornamenti di sicurezza. Ciò è dovuto al fatto che non esiste un archivio per gli aggiornamenti di sicurezza per "sid" (unstable).

Ecco l'elenco dei siti degli archivi Debian e dei nomi di suite e nomi in codice usati nel file di configurazione.

Tabella 2.2. Elenco dei siti con l'archivo Debian

URL dell'archivio nome suite (nome in codice) scopo
http://ftp.XX.debian.org/debian/ stable (squeeze) rilascio stable (squeeze)
http://ftp.XX.debian.org/debian/ testing (wheezy) rilascio testing (wheezy)
http://ftp.XX.debian.org/debian/ unstable (sid) rilascio unstable (sid)
http://ftp.XX.debian.org/debian/ experimental pre-rilascio sperimentale (opzionale, solo per sviluppatori)
http://ftp.XX.debian.org/debian/ stable-proposed-updates aggiornamenti per il prossimo rilascio stabile minore (opzionale)
http://security.debian.org/ stable/updates aggiornamenti di sicurezza per il rilascio stable (importante)
http://security.debian.org/ testing/updates aggiornamenti di sicurezza per il rilascio testing (importante)
http://ftp.XX.debian.org/debian/ squeeze-updates aggiornamenti compatibili per filtri anti-spam, client di messaggistica istantanea, ecc. per squeeze
http://backports.debian.org/debian-backports/ squeeze-backports pacchetti più recenti in versione backport per squeeze (opzionale)

[Attenzione] Attenzione

Solo il puro rilascio stable con gli aggiornamenti di sicurezza fornisce la massima stabilità. Avere un sistema basato per lo più sul rilascio stable con mescolati alcuni pacchetti dai rilasci testing o unstable è più rischioso che avere un sistema basato su un puro rilascio unstable per ciò che riguarda conflitti tra le versioni di libreria, ecc.. Se si ha veramente bisogno, nel rilascio stable, dell'ultima versione di qualche programma usare pacchetti dal squeeze-updates e backports.debian.org (vedere Sezione 2.7.4, «Updates e Backports»). Questi servizi devono essere usati con estrema cautela.

[Attenzione] Attenzione

Fondamentalmente si dovrebbe mettere una sola tra le suite stable, testing o unstable nelle righe "deb". Se si elenca una combinazione delle suite stable, testing e unstable nelle righe "deb", il programma APT verrà rallentato e solo l'archivio più recente avrà effetto. Elencare più di una voce ha senso quando viene usato il file "/etc/apt/preferences" con scopi ben precisi (vedere Sezione 2.7.3, «Modificare la versione candidata»).

[Suggerimento] Suggerimento

Per i sistemi Debian con le suite stable e testing è una buona norma includere nel file "/etc/apt/sources.list" le righe con "http://security.debian.org/" per abilitare gli aggiornamenti di sicurezza, come nell'esempio prededente.

[Nota] Nota

I bug che riguardano la sicurezza per l'archivio stable vengono risolti dal Debian Security Team, la cui attività è piuttosto rigorosa ed affidabile. I bug per l'archivio testing possono essere risolti dal Debian Security Team. Per svariate ragioni questa attività non è così rigorosa come quella per stable e potrebbe essere necessario attendere la migrazione di pacchetti unstable corretti. I bug per l'archivio unstable sono corretti dal manutentore del pacchetto; i pacchetti unstable attivamente mantenuti sono solitamente in una forma piuttosto buona dato che sfruttano le più recenti correzioni a monte relative alla sicurezza. Per informazioni sul modo in cui Debian gestisce i bug relativi alla sicurezza, vedere le FAQ Debian sulla sicurezza.

Tabella 2.3. Elenco delle aree dell'archivio Debian

area numero di pacchetti criterio dei componenti del pacchetto
main 29887 aderenti alle DFSG e senza dipendenze da non-free
contrib 202 aderenti alle DFSG ma con dipendenze da non-free
non-free 463 non aderenti alle DFSG

Nella tabella soprastante il numero dei pacchetti è per l'architettura amd64. A rigor di termini, solo l'area main dell'archivio dovrebbe essere considerata come sistema Debian.

L'organizzazione dell'archivio Debian può essere studiata meglio puntando il proprio browser a ciascuno degli URL dell'archivio con aggiunto in coda dists o pool.

Ci si riferisce alla distribuzione in due modi, con la suite o con il nome in codice. In alternativa la parola distribuzione viene usata come sinonimo di suite in molta documentazione. La relazione tra la suite e il nome in codice può essere riassunta nel modo seguente.

Tabella 2.4. Relazione tra suite e nome in codice

periodo suite = stable suite = testing suite = unstable
dopo il rilascio squeeze nome in codice = squeeze nome in codice = wheezy nome in codice = sid
dopo il rilascio wheezy nome in codice = wheezy nome in codice = wheezy+1 nome in codice = sid

La storia dei nomi in codice è descritta nelle FAQ Debian: 6.3.1 Quali altri nomi in codice sono stati usati in passato?

Nella terminologia per gli archivi Debian più precisa, la parola "sezione" è usata specificatamente per la categorizzazione dei pacchetti in base all'area di applicazione. (Anche se l'espressione "sezione main" può essere a volte usata per descrivere l'area dell'archivio Debian chiamata "main".)

Ogni volta che uno sviluppatore Debian (DD) carica un nuovo pacchetto nell'archivio unstable (passando per incoming), gli viene richiesto di assicurare che i pacchetti caricati siano compatibili con l'insieme più recente di pacchetti nell'archivio unstable più recente.

Se un DD rompe questa compatibilità intenzionalmente per importanti aggiornamenti di librerie, ecc. di solito viene fatto un annuncio nella mailing list debian-devel, ecc.

Prima di muovere un insieme di pacchetti dall'archivio unstable all'archivio testing, lo script di gestione degli archivio Debian non solo controlla la maturità (circa 10 giorni di età) e lo stato delle segnalazioni di bug RC per i pacchetti, ma cerca anche di assicurare che siano compatibili con il più recente insieme di pacchetti nell'archivio testing. Questo processo rende l'archivio testing molto aggiornato e usabile.

Attraverso il graduale processo di freeze dell'archivio, giudato dal team di rilascio, l'archivio testing viene fatto maturare con un po' di intervento manuale per renderlo completamente coerente e libero da bug. Quindi viene creato il nuovo rilascio stable assegnando il nome in codice per il vecchio archivio testing al nuovo archivio stable e creando il nuovo nome in codice per il nuovo archivio testing. Il contenuto iniziale del nuovo archivio testing è esattamente lo stesso dell'archivio stable appena rilasciato.

Sia l'archivio unstable sia l'archivio testing possono soffrire di problemi temporanei a causa di diversi fattori.

  • Pacchetti difettosi caricati nell'archivio (principalmente per unstable)
  • Ritardo nell'accettazione di nuovi pacchetti nell'archivio (principalmente per unstable)
  • Problemi nei tempi di sincronizzazione degli archivi (sia per testing sia per unstable)
  • Interventi manuali all'archivio, come rimozione di pacchetti (più per testing) ecc.

Perciò se si decide di usare questi archivi, si dovrebbe essere in grado di risolvere o aggirare questo tipo di problemi.

[Attenzione] Attenzione

Per qualche mese circa dopo un nuovo rilascio stable, la maggior parte degli utenti desktop dovrebbe usare l'archivio stable con i suoi aggiornamenti di sicurezza, anche se di solito usano gli archivi unstable o testing. Durante questo periodo di transizione, entrambi gli archivi unstable e testing non sono adatti alla maggior parte degli utenti. È difficile mantenere il proprio sistema in condizioni buone di funzionamento con l'archivio unstable dato che è affetto da ondate di aggiornamenti importanti di pacchetti fondamentali. Anche l'archivio testing non è molto utile perché contiene per lo più le stesse cose dell'archivio stable senza il suo supporto per la sicurezza (Debian testing-security-announce 2008-12). Dopo circa un mese, l'archivio unstable potrebbe essere utilizzabile se si è cauti.

[Suggerimento] Suggerimento

Quando si usa l'archivio testing, i problemi causati da un pacchetto rimosso vengono solitamente aggirati installando il corrispondente pacchetto dall'archivio unstable che è caricato per risolvere un bug.

Vedere il manuale Debian Policy per le definizioni degli archivi.

2.1.5. Dipendenze dei pacchetti

Il sistema Debian offre un insieme coerente di pacchetti binari grazie al suo meccanismo di dichiarazione, nei campi di controllo dei file, delle dipendenze binarie basate su versioni . Ecco una definizione molto semplificata delle dipendenze.

  • "Depends" (Dipende)

    • Dichiara una dipendenza assoluta e tutti i pacchetti elencati in questo campo devono essere installati insieme a quello scelto o prima.
  • "Pre-Depends" (Pre-dipende)

    • È come "Depends", tranne che richiede l'installazione completa dei pacchetti elencati in anticipo.
  • "Recommends" (Raccomanda)

    • Dichiara una dipendenza forte, ma non assoluta. La maggior parte degli utenti non vorrà il pacchetto in esame a meno che tutti i pacchetti elencati non siano installati.
  • "Suggests" (Consiglia)

    • Dichiara una dipendenza debole. La maggior parte degli utenti del pacchetto potrebbe trarre vantaggio dall'installazione dei pacchetti elencati in questo campo, ma può ottenere una funzionalità adeguata senza di essi.
  • "Enhances" (Migliora)

    • Dichiara una dipendenza debole come "Suggests" ma in verso opposto.
  • "Breaks" (Rompe)

    • Dichiara un'incompatibilità del pacchetto di solito con qualche specifica versione. Generalmente la soluzione è di aggiornare tutti i pacchetti elencati in questo campo.
  • "Conflicts" (Va in conflitto)

    • Dichiara una incompatibilità assoluta. Tutti i pacchetti elencati in questo campo devono essere rimossi per installare il pacchetto in esame.
  • "Replaces" (Sostituisce)

    • Viene dichiarata quando i file installati dal pacchetto in esame sostituiscono i file nei pacchetti elencati.
  • "Provides" (Fornisce)

    • Viene dichiarata quando il pacchetto fornisce tutti i file e le funzionalità nei pacchetti elencati.
[Nota] Nota

Notare che una buona configurazione per un pacchetto virtuale deve avere "Provides", "Conflicts" e "Replaces" simultaneamente definiti. Questo assicura che in un dato momento possa essere installato un solo pacchetto reale che fornisce il pacchetto virtuale.

La definizione ufficiale, compresa quella di dipendenza dei sorgenti, può essere trovata nel manuale Debian Policy, Capitolo 7, Dichiarare le relazioni tra i pacchetti.

2.1.6. Il flusso di eventi nella gestione dei pacchetti

Ecco un riassunto semplificato del flusso di eventi nella gestione dei pacchetti con APT.

  • Update - aggiorna l'elenco dei pacchetti ("aptitude update" o "apt-get update"):

    1. Recupera i metadati dell'archivio dall'archivio remoto
    2. Ricostruisce e aggiorna i metadati locali usati da APT
  • Upgrade - aggiorna ("aptitude safe-upgrade" e "aptitude full-upgrade", o "apt-get upgrade" e "apt-get dist-upgrade"):

    1. Sceglie la versione candidata, che è solitamente la più recente disponibile, per tutti i pacchetti installati (per le eccezioni vedere Sezione 2.7.3, «Modificare la versione candidata»)
    2. Risolvere le dipendenze dei pacchetti
    3. Se la versione candidata è diversa da quella installata, scaricare i pacchetti binari selezionati dall'archivio remoto
    4. Spacchettare i pacchetti binari scaricati
    5. Eseguire gli script preinst
    6. Installare i file binari
    7. Eseguire gli script postinst
  • Install - installa ("aptitude install …" o "apt-get install …"):

    1. Sceglie i pacchetti elencati nella riga di comando
    2. Risolvere le dipendenze dei pacchetti
    3. Scarica i pacchetti binari selezionati dall'archivio remoto
    4. Spacchettare i pacchetti binari scaricati
    5. Eseguire gli script preinst
    6. Installare i file binari
    7. Eseguire gli script postinst
  • Remove - rimuove ("aptitude remove …" o "apt-get remove …"):

    1. Sceglie i pacchetti elencati nella riga di comando
    2. Risolvere le dipendenze dei pacchetti
    3. Esegue gli script prerm
    4. Rimuove i file installati tranne i file di configurazione
    5. Esegue gli script postrm
  • Purge - elimina del tutto ("aptitude purge …" o "apt-get purge …"):

    1. Sceglie i pacchetti elencati nella riga di comando
    2. Risolvere le dipendenze dei pacchetti
    3. Esegue gli script prerm
    4. Rimuove i file installati inclusi i file di configurazione
    5. Esegue gli script postrm

Sono stati intenzionalmente omessi dettagli tecnici a favore di una più chiara vista d'insieme.

2.1.7. Prima risposta a problemi di gestione dei pacchetti

Si dovrebbe leggere la bella documentazione ufficiale. Il primo documento da leggere è il file specifico per Debian, "/usr/share/doc/<nome_pacchetto>/README.Debian". Andrebbe consultata anche l'altra documentazione in "/usr/share/doc/<nome_pacchetto>/. Se la shell è impostata come in Sezione 1.4.2, «Personalizzare bash», digitare quanto segue.

$ cd <nome_pacchetto>
$ pager README.Debian
$ mc

Per informazioni dettagliate potrebbe essere necessario installare il pacchetto di documentazione corrispondente il cui nome ha il suffisso "-doc".

Se si stanno avendo problemi con un pacchetto specifico, ricordarsi come prima cosa di controllare il sito del Sistema Debian di tracciamento dei bug (BTS).

Tabella 2.5. Elenco dei siti web importanti per la risoluzione di problemi con un pacchetto specifico

sito web comando
Pagina web del Sistema Debian di tracciamento dei bug (BTS) sensible-browser "http://bugs.debian.org/"
Segnalazioni di bug di un pacchetto specifico sensible-browser "http://bugs.debian.org/<nome_pacchetto>"
Segnalazione di bug corrispondente ad un numero di bug sensible-browser "http://bugs.debian.org/<numero_bug>"

Cercare conGoogle con parole chiave e aggiungendo "site:debian.org", "site:wiki.debian.org", "site:lists.debian.org", ecc.

Quando si invia una segnalazione di bug, usare il comando reportbug(1).

2.2. Operazioni base per la gestione dei pacchetti

Le operazioni di base della gestione dei pacchetti sul sistema Debian possono essere eseguite da qualsiasi strumento di gestione dei pacchetti disponibile sul sistema Debian. Qui, verranno spiegati gli strumenti base di gestione dei pacchetti: apt-get / apt-cache e aptitude.

Per operazioni di gestione dei pacchetti che comportano l'installazione o l'aggiornamento dei metadati dei pacchetti, è necessario avere privilegi di root.

2.2.1. Confronto apt-get / apt-cache - aptitude

I comandi apt-get e apt-cache sono gli strumenti di gestione dei pacchetti più a livello base.

  • apt-get e apt-cache offrono solo l'interfaccia utente a riga di comando.
  • apt-get è più adatto per gli aggiornamenti principali del sistema tra rilasci diversi, ecc.
  • apt-get offre un sistema solido e stabile di risoluzione dei conflitti dei pacchetti che utilizza i comuni dati sullo stato dei pacchetti.
  • apt-get è stato aggiornato per supportare l'installazione e la rimozione automatiche dei pacchetti raccomandati.
  • apt-get è stato aggiornato per supportare la registrazione delle attività del pacchetto.
  • apt-cache offre una ricerca standard, basata su espressioni regolari, nei nomi e nelle descrizioni dei pacchetti.
  • apt-get e apt-cache possono gestire più versioni dei pacchetti usando /etc/apt/preferences, ma è piuttosto elaborato farlo.

Il comando aptitude è lo strumento di gestione dei pacchetti più versatile.

  • aptitude offre un'interfaccia utente testuale interattiva a schermo intero.
  • aptitude offre anche un'interfaccia utente a riga di comando.
  • aptitude è più adatto per la gestione interattiva quotidiana dei pacchetti, come l'ispezione dei pacchetti installati e la ricerca dei pacchetti disponibili.
  • aptitude offre un sistema migliorato di risoluzione dei conflitti dei pacchetti che usa anche dati extra sullo stato dei pacchetti utilizzati solo da aptitude.
  • aptitude supporta l'installazione e la rimozione automatiche dei pacchetti raccomandati.
  • aptitude supporta la registrazione delle attività del pacchetto.
  • apt-cache offre una ricerca migliorata, basata su espressioni regolari, su tutti i metadati dei pacchetti.
  • aptitude può gestire più versioni dei pacchetti senza usare /etc/apt/preferences e farlo è piuttosto intuitivo.
[Nota] Nota

Sebbene il comando aptitude sia dotato di moltissime funzionalità come il suo risolutore avanzato di conflitti tra pacchetti, questa complessità ha causato (o può ancora causare) alcune regressioni quali i Bug # 411123, Bug # 514930 e Bug # 570377. In caso di dubbio, preferire i comandi apt-get e apt-cache al comando aptitude.

2.2.2. Operazioni base per la gestione dei pacchetti dalla riga di comando

Ecco alcune operazioni base di gestione dei pacchetti dalla riga di comando usando aptitude(8) e apt-get(8) /apt-cache(8).

Tabella 2.6. Operazioni base di gestione dei pacchetti dalla riga di comando usando aptitude(8) e apt-get(8) /apt-cache(8)

sintassi per aptitude sintassi per apt-get/apt-cache descrizione
aptitude update apt-get update aggiorna i metadati dell'archivio dei pacchetti
aptitude install pippo apt-get install pippo installa la versione candidata del pacchetto "pippo" con le sue dipendenze
aptitude safe-upgrade apt-get upgrade installa le versioni candidate dei pacchetti installati senza rimuovere altri pacchetti
aptitude full-upgrade apt-get dist-upgrade installa le versioni candidate dei pacchetti installati e rimuove, se necessario, altri pacchetti
aptitude remove pippo apt-get remove pippo rimuove il pacchetto "pippo" lasciando i suoi file di configurazione
N/D apt-get autoremove rimuove i pacchetti installati automaticamente che non sono più necessari
aptitude purge pippo apt-get purge pippo elimina completamente il pacchetto "pippo" con i suoi file di configurazione
aptitude clean apt-get clean pulisce completamente il repository locale dei file dei pacchetti scaricati
aptitude autoclean apt-get autoclean pulisce il repository locale dei file dei pacchetti scaricati che sono obsoleti
aptitude show pippo apt-cache show pippo mostra informazioni dettagliate sul pacchetto "pippo"
aptitude search <regex> apt-cache search <regex> cerca i pacchetti che corrispondono all'espressione regolare
aptitude why <regex> N/D spiega le ragioni per cui i pacchetti che corrispondono a <regex> dovrebbero essere installati
aptitude why-not <regex> N/D spiega le ragioni per cui i pacchetti che corrispondono a <regex> non dovrebbero essere installati

[Nota] Nota

Dato che apt-get e aptitude, a partire da lenny, condividono le informazioni suipacchetti installati automaticamente (vedere Sezione 2.5.5, «Lo stato dei pacchetti per APT»), si può mescolare l'uso diquesti strumenti senza particolari problemi (vedere il Bug #594490).

La differenza tra "safe-upgrade"/"upgrade" e "full-upgrade"/"dist-upgrade" viene a galla solamente quando nuove versioni di pacchetti hanno una diverse relazioni di dipendenza rispetto alle vecchie versioni. Il comando "aptitude safe-upgrade" non installa nuovi pacchetti né rimuove pacchetti installati.

"aptitude why <regex>" può mostrare ancor più informazioni se usato come "aptitude -v why <regex>". Informazioni simili possono essere ottenute con "apt-cache rdepends <pacchetto>".

Quando il comando aptitude è avviato in modalità a riga di comando e si trova davanti a problemi come conflitti tra pacchetti, si può passare alla modalità interattiva a tutto schermo premendo successivamente il tasto "e" al prompt.

Si possono usare opzioni per il comando immediatamente dopo "aptitude".

Tabella 2.7. Opzioni degne di nota per il comando aptitude(8)

opzione per il comando descrizione
-s simula il risultato del comando
-d scarica solamente ma non installa/aggiorna
-D mostra delle brevi spiegazioni prima di installazioni e rimozioni automatiche

Per maggiori informazioni vedere aptitude(8) e il "manuale utente di aptitude" in "/usr/share/doc/aptitude/README".

[Suggerimento] Suggerimento

Il pacchetto dselect è ancora disponibile ed è stato lo strumento a tutto schermo interattivo di gestione dei pacchetti dei rilasci passati.

2.2.3. Uso interattivo di aptitude

Per la gestione interattiva dei pacchetti, si avvia aptitude in modalità interattiva dal prompt di shell della console nel modo seguente.

$ sudo aptitude -u
Password:

In questo modo si aggiorna la copia locale delle informazioni sull'archivio e viene mostrato l'elenco dei pacchetti in una schermata a pieno schermo. Aptitude posiziona la sua configurazione in "~/.aptitude/config".

[Suggerimento] Suggerimento

Se si desidera usare la configurazione di root, invece di quella dell'utente, usare "sudo -H aptitude …" invece di "sudo aptitude …", come nell'esempio precedente.

[Suggerimento] Suggerimento

Aptitude imposta automaticamente le azioni pendenti quando viene avviato in modalità interattiva. Se ciò non piace, si può reimpostarlo usando il menu: "Azioni" → "Annulla azioni in attesa".

2.2.4. Associazioni dei tasti per aptitude

Quelle che seguono sono le associazioni di tasti degne di nota usate, nella modalità a schermo intero, per sfogliare lo stato dei pacchetti e per impostare "azioni pianificate" su di essi.

Tabella 2.8. Elenco delle associazioni di tasti per aptitude

tasto azione associata
F10 o Ctrl-t menu
? mostra l'aiuto per i tasti (elenco più completo)
F10 → Aiuto → Manuale utente mostra il Manuale utente
u aggiorna le informazioni sull'archivio dei pacchetti
+ segna il pacchetto per l'aggiornamento o l'installazione
- segna il pacchetto per la rimozione (mantiene i file di configurazione)
_ segna il pacchetto per l'eliminazione completa (rimuove i file di configurazione)
= blocca il pacchetto
U segna tutti i pacchetti aggiornabili (funziona come full-upgrade)
g inizia a scaricare e installare i pacchetti selezionati
q esce dalla schermata attuale e salva i cambiamenti
x esce dalla schermata attuale e scarta i cambiamenti
Invio visualizza le informazioni su un pacchetto
C visualizza il registro dei cambiamenti di un pacchetto
l cambia la limitazione dei pacchetti visualizzati
/ cerca la prima corrispondenza
\ ripete l'ultima ricerca

Le espressioni regolari usate per specificare il nome di pacchetto nella riga di comando e nel prompt del menu dopo aver premuto "l" o "//" sono descritte in seguito. Le espressioni regolari di aptitude possono esplicitamente trovare corrispondenze con nomi di pacchetto usando una stringa che inizia con "~n seguita dal nome del pacchetto.

[Suggerimento] Suggerimento

È necessario premere "U" per aggiornare tutti i pacchetti installati alla versione candidata nell'interfaccia interattiva. Altrimenti vengono aggiornati alla versione candidata solo i pacchetti selezionati e quelli da una cui particolare versione dipendono altri.

2.2.5. Viste dei pacchetti in aptitude

Nella modalità interattiva a tutto schermo di aptitude(8), i pacchetti nell'elenco vengono mostrati come nell'esempio seguente.

idA   libsmbclient                             -2220kB 3.0.25a-1  3.0.25a-2

Il significato degli elementi di questa riga, partendo da sinistra, è il seguente.

  • Il flag di "stato attuale" (la prima lettera)
  • Il flag di "azione pianificata" (la seconda lettera)
  • Il flag "automatico" (la terza lettera)
  • Il nome del pacchetto
  • Il cambiamento in termini di uso dello spazio su disco collegato dall'"azione pianificata"
  • La versione attuale del pacchetto
  • La versione candidata del pacchetto
[Suggerimento] Suggerimento

L'elenco completo dei flag è fornito alla fine della schermata mostrata di Aiuto mostrata se si preme "?".

La versione candidata è scelta in base alle preferenze locali attuali (vedere apt_preferences(5) e Sezione 2.7.3, «Modificare la versione candidata»).

Diversi tipi di viste per i pacchetti sono disponibili nel menu "Viste".

Tabella 2.9. Elenco delle viste di aptitude

vista stato descrizione della vista
Vista dei pacchetti Buona vedere Tabella 2.10, «Organizzazione delle viste standard dei pacchetti» (vista standard)
Controlla Raccomandati Buona elenca i pacchetti che sono raccomandati da alcuni dei pacchetti installati, ma non sono ancora installati
Elenco unico dei pacchetti Buona elenca i pacchetti senza organizzarli in gruppi (per l'uso con espressioni regolari)
Consultazione per «Debtags» Molto usabile elenca i pacchetti organizzati in base alle loro voci Debtags
Consultazione per categorie Deprecata elenca i pacchetti organizzati in base alla loro categoria (usare al suo posto Consultazione per «Debtags»)

[Nota] Nota

È estremamente benvenuto ogni aiuto per migliorare l'assegnazione di etichette Debtags ai pacchetti!

La "Vista dei pacchetti" standard organizza i pacchetti un po' nello stile di dselect con alcune funzionalità extra.

Tabella 2.10. Organizzazione delle viste standard dei pacchetti

categoria descrizione della vista
Pacchetti aggiornabili elenca i pacchetti organizzati in sezioneareapacchetto
Pacchetti nuovi " "
Pacchetti installati " "
Pacchetti non installati " "
Pacchetti obsoleti e creati localmente " "
Pacchetti virtuali elenca i pacchetti con la stessa funzione
Task elenca i pacchetti con funzioni diverse solitamente necessarie per una stessa attività

[Suggerimento] Suggerimento

La vista dei Task può essere usata per scegliere a uno a uno i pacchetti per le proprie attività.

2.2.6. Opzioni per i metodi di ricerca in aptitude

Aptitude offre diverse opzioni per cercare pacchetti usando il suo schema di espressioni regolari.

  • Nella riga di comando della shell:

    • "aptitude search '<regex_aptitude>'" per elencare lo stato di installazione, il nome del pacchetto ed una descrizione breve dei pacchetti che corrispondono.
    • "aptitude show '<nome_pacchetto>'" per elencare una descrizione dettagliata del pacchetto
  • Nella modalità interattiva a tutto schermo:

    • "l" per limitare la vista dei pacchetti ai pacchetti che corrispondono
    • "/" per cercare un pacchetto che corrisponda
    • "\" per cercare all'indietro un pacchetto che corrisponda
    • "n" per trovare il successivo
    • "N" per trovare il successivo (all'indietro)
[Suggerimento] Suggerimento

La stringa <package_name> viene usata per trovare una corrispondenza esatta con il nome di pacchetto a meno che non venga esplicitamente fatta iniziare con "~" per indicare una espressione regolare.

2.2.7. La struttura delle espressioni regolari di aptitude

La struttura delle espressioni regolari di aptitude è quella di ERE (vedere Sezione 1.6.2, «Espressioni regolari») estese in stile mutt ed il significato delle speciali regole estese di corrispondenza, specifiche di aptitude, è il seguente.

Tabella 2.11. Elenco delle regole per espressioni regolari di aptitude

descrizione della regola estesa di corrispondenza struttura della espressione regolare
corrispondenza con il nome di pacchetto ~n<regex_nome>
corrispondenza con la descrizione ~d<regex_descrizione>
corrispondenza con il nome del task ~t<regex_task>
corrispondenza con il debtag ~G<regex_debtag>
corrispondenza con il manutentore ~m<regex_mantainer>
corrispondenza con la sezione del pacchetto ~s<regex_sezione>
corrispondenza con la versione del pacchetto ~V<regex_versione>
corrispondenza con l'archivio ~A{sarge,etch,sid}
corrispondenza con l'origine ~O{debian,…}
corrispondenza con la priorità ~p{extra,important,optional,required,standard}
corrispondenza con pacchetti essenziali ~E
corrispondenza con pacchetti virtuali ~v
corrispondenza con pacchetti nuovi ~N
corrispondenza con azioni pendenti ~a{install,upgrade,downgrade,remove,purge,hold,keep}
corrispondenza con pacchetti installati ~i
corrispondenza con pacchetti installati e con l'indicatore A (pacchetti installati automaticamente) ~M
corrispondenza con i pacchetti installati e senza l'indicatore A (pacchetti selezionati dall'amministratore) ~i!~M
corrispondenza con pacchetti installati che sono aggiornabili ~U
corrispondenza con pacchetti rimossi ma non eliminati completamente ~c
corrispondenza con pacchetti rimossi, eliminati o che possono essere rimossi ~g
corrispondenza con pacchetti con relazioni con problemi ~b
corrispondenza con pacchetti con problemi di dipendenze, predipendenze e conflitti ~B<tipogt;
corrispondenza con pacchetti per i quali è definita la relazione di tipo <tipo> verso il pacchetto <termine> ~D[<tipogt;:]<termine>
corrispondenza con pacchetti per i quali è definita una relazione di tipo <type> con problemi verso il pacchetto <termine> ~DB[<tipo>:]<termine>
corrispondenza con pacchetti verso i quali il pacchetto <termine> definisce una relazione di tipo <tipo> ~R[<tipo>:]<termine>
corrispondenza con pacchetti verso i quali il pacchetto <termine> definisce una relazione ~RB[<tipo>:]<termine>
corrispondenza con pacchetti da cui dipende un qualche altro pacchetto installato ~R~i
corrispondenza con pacchetti da cui non dipende alcun pacchetto installato !~R~i
corrispondenza con pacchetti da cui dipende o che vengono raccomandati da qualche altro pacchetto ~R~i|~Rrecommends:~i
corrispondenza con pacchetti che la cui versione corrisponde al filtro e che corrispondono a <termine> ~S filtro <termine>
corrispondenza con tutti i pacchetti (vero) ~T
corrispondenza con nessun pacchetto (falso) ~F

  • Il formato dell'espressione regolare è la stessa di quello ERE usato nei tipici strumenti per il testo in stile Unix "^", ".*", "$", ecc. come in egrep(1), awk(1) e perl(1).
  • Il <tipo> di relazione è uno tra (depends, predepends, recommends, suggests, conflicts, replaces, provides).
  • Il tipo di relazione predefinito è "depends".
[Suggerimento] Suggerimento

Quando <modello_regex> è una stringa vuota, mettere "~T" immediatamente dopo il comando.

Ecco alcune scorciatoie.

  • "~P<termine>" == "~Dprovides:<termine>"
  • "~C<termine>" == "~Dconflicts:<termine>"
  • "…~W termine" == "(…|termine)"

Gli utenti che hanno familiarità con mutt imparano presto, dato che la sintassi per le espressioni si è ispirata a mutt. Vedere "SEARCHING, LIMITING, AND EXPRESSIONS" nel "Manuale utente", "/usr/share/doc/aptitude/README".

[Nota] Nota

Con la versione lenny di aptitude(8), può essere usata la nuova sintassi in forma lunga come "?broken" invece del vecchio equivalente in forma breve " "~b". Il carattere di spazio " " è ora considerato uno dei caratteri che terminano l'espressione regolare, oltre al carattere tilde "~". Vedere il "Manuale utente" per la sintassi della nuova forma lunga.

2.2.8. Risoluzione delle dipendenze di aptitude

Se la voce di menuF10 → Options → Gestione delle dipendenze" è impostata in modo appropriato, selezionando un pacchetto in aptitude non si richiamano solamente i pacchetti definiti nel suo elenco "Depends:", ma anche quelli nell'elenco "Recommends:". Questi pacchetti installati automaticamente vengo rimossi automaticamente se non sono più necessari secondo aptitude.

[Nota] Nota

Prima del rilascio lenny, apt-get e gli altri strumenti APT standard non offrivano la funzionalità di rimozione automatica.

2.2.9. Registri delle attività sui pacchetti

Si può controllare lo storico delle attività sui pacchetti nei file di registro.

Tabella 2.12. File di registro per le attività sui pacchetti

file contenuto
/var/log/dpkg.log Registro delle attività a livello dpkg per tutte le attività sui pacchetti
/var/log/apt/term.log Registro delle attività APT generiche
/var/log/aptitude Registro delle attività di comandi aptitude

In realtà non è facile ottenere delle informazioni immediatamente comprensibili da questi file di registro. Vedere Sezione 9.2.10, «Registrare i cambiamenti a file di configurazione» per un metodo più facile.

2.3. Esempi di operazioni con aptitude

Ecco alcuni esempi di operazioni con aptitude(8).

2.3.1. Elencare pacchetti in base alla corrispondenza del nome con espressioni regolari

Il seguente comando elenca i pacchetti i cui nomi corrispondono alle espressioni regolari specificate.

$ aptitude search '~n(pam|nss).*ldap'
p libnss-ldap - NSS module for using LDAP as a naming service
p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces

È piuttosto utile se si desidera trovare il nome esatto di un pacchetto.

2.3.2. Sfogliare le corrispondenze ad una espressione regolare

L'espressione regolare "~dipv6" nel prompt di "l" nella vista "Nuovo elenco unico dei pacchetti", limita la visualizzazione dei pacchetti a quelli la cui descrizione corrisponde all'espressione "ipv6" e permette di sfogliare interattivamente le loro informazioni.

2.3.3. Eliminare completamente i pacchetti rimosssi

Si possono eliminare tutti i file di configurazione rimasti di pacchetti rimossi.

Controllare il risultato del comando seguente.

# aptitude search '~c'

Se si pensa che sia giusto rimuover i pacchetti elencati, eseguire il comando seguente.

# aptitude purge '~c'

Si può fare la stessa cosa in modalità interattiva per avere un controllo più dettagliato.

Fornire l'espressione regolare "~c" al prompt di "l" nella vista "Nuovo elenco unico dei pacchetti". In questo modo si limita la visualizzazione a quei pacchetti che corrispondono all'espressione regolare, cioè "rimossi ma non eliminati completamente". Tutte le corrispondenze trovate possono essere mostrate premendo "[" nelle intestazioni di primo livello.

Premere poi "_" nell'intestazione di primo livello, come "Pacchetti installati". In questo modo vengono selezionati per l'eliminazione completa solo quei pacchetti contenuti sotto l'intestazione che corrispondono all'espressione regolare. Si possono escludere alcuni pacchetti dall'eliminazione premendo "=" per ciascuno di essi.

Questa tecnica è piuttosto comoda e funziona per molti altri tasti di comando.

2.3.4. Mettere ordine nello stato di installazione automatico/non automatico

Ecco come faccio per mettere ordine nello stato di installazione automatico/non automatico per i pacchetti (dopo aver usato un installatore che non sia aptitude, ecc.).

  1. Avviare da root aptitude in modalità interattiva.
  2. Digitare "u", "U", "f" e "g" per aggiornare l'elenco dei pacchetti e i pacchetti stessi.
  3. Digitare "l" per impostare la limitazione della visualizzazione con "~i(~R~i|~Rrecommends:~i)" e digitare "M" su "Pacchetti installati" per marcarli come installati automaticamente.
  4. Digitare "l" per impostare la limitazione della visualizzazione dei pacchetti con "~prequired|~pimportant|~pstandard|~E" e digitare "m" su "Pacchetti installati" per marcarli come installati manualmente.
  5. Digitare "l" per impostare la limitazione della visualizzazione dei pacchetti con "~i!~M" e rimuovere i pacchetti inutilizzati digitando "-" su ciascuno di essi dopo averli visualizzati digitando "[" su "Pacchetti installati".
  6. Digitare "l" per impostare la limitazione della visualizzazione dei pacchetti con "~i" e digitare "m" su "Task" per marcarli come installati manualmente.
  7. Uscire da aptitude.
  8. Avviare "apt-get -s autoremove|less" da root per controllare quelli che non sono usati.
  9. Riavviare aptitude in modalità interattiva e segnare i pacchetti necessari con "m".
  10. Riavviare "apt-get -s autoremove|less" da root per controllare che in REMOVED siano contenuti soltanto i pacchetti attesi.
  11. Avviare "apt-get autoremove|less" da root per rimuovere automaticamente i pacchetti non utilizzati.

L'azione "m" sopra "Task" è opzionale e server per prevenire situazioni di rimozioni di massa di pacchetti in futuro.

2.3.5. Aggiornamento di tutto il sistema

[Nota] Nota

Quando si passa ad un nuovo rilascio, ecc. si dovrebbe considerare una installazione pulita di un nuovo sistema anche se è possibile aggiornare Debian nel modo descritto in seguito. Ciò dà la possibilità di rimuovere la spazzatura raccolta nel tempo e fornisce la migliore combinazione dei pacchetti più nuovi. Naturalmente si dovrebbe fare un backup completo del sistema in un posto sicuro (vedere Sezione 10.1.6, «Backup e ripristino») prima di farlo. Raccomando di creare una configurazione con due sistemi avviabili usando due diverse partizioni per avere una transizione il più lineare possibile.

Si può fare l'aggiornamento completo del sistema ad un nuovo rilascio cambiando il contenuto del file "/etc/apt/sources.list" facendolo puntare al nuovo rilascio ed eseguendo il comando "apt-get update; apt-get dist-upgrade".

Per aggiornare da stable a testing o unstable, sostituire ""squeeze" nel file "/etc/apt/sources.list" di esempio descritto in Sezione 2.1.4, «Nozioni di base sugli archivi Debian» con "wheezy" o "sid".

In realtà si possono dover affrontare alcune complicazioni a causa di problemi di transizione dei pacchetti, per lo più a causa di dipendenze. Più è grande la differenza nell'aggiornamento, più è probabile dover affrontare problemi più grossi. Per la transizione dal vecchio rilascio stable al nuovo stable si possono leggere le nuove Note di rilascio e seguire esattamente la procedura che vi è descritta per minimizzare i problemi.

Quando si decide di passare da stable a testing prima del suo rilascio formale non ci sono Note di rilascio che possano aiutare. La differenza tra stable e testing potrebbe essere diventata piuttosto grande dopo il precendente rilascio stable e potrebbe rendere l'aggiornamento complicato.

SI dovrebbero prendere misure precauzionali per l'aggiornamento completo raccogliendo le informazioni più aggiornate da mailing list ed usando il buon senso.

  1. Leggere le "Note di rilascio" precedenti.
  2. Fare il backup dell'intero sistema (specialmente dei dati e della configurazione).
  3. Tenere a portata di mano supporti avviabili in caso di problemi con il bootloader.
  4. Informare con un buon anticipo gli utenti nel sistema.
  5. Registrare l'attività di aggiornamento con script(1).
  6. Applicare l'opzione "unmarkauto" ai pacchetti richiesti, ad esempio "aptitude unmarkauto vim, per prevenire la loro rimozione.
  7. Minimizzare i pacchetti installati per ridurre le probabilità di conflitti tra i pacchetti, ad esempio rimuovere i pacchetti dell'attività desktop.
  8. Rimuovere il file "/etc/apt/preferences" (disabilitare apt-pinning).
  9. Cercare di aggiornare per gradi: oldstablestabletestingunstable.
  10. Aggiornare il file "/etc/apt/sources.list per farlo puntare solamente al nuovo archivio ed eseguire "aptitude update".
  11. Installare, opzionalmente i nuovi pacchetti partendo dai pacchetti fondamentali, ad esempio "aptitude install perl".
  12. Eseguire il comando "apt-get -s dist-upgrade" per avere un'idea dell'impatto dell'aggiornamento.
  13. Eseguire da ultimo il comando "apt-get dist-upgrade".
[Attenzione] Attenzione

Non è saggio saltare un rilascio principale Debian quando si aggiorna da un rilascio stable ad un altro.

[Attenzione] Attenzione

Nelle "Note di rilascio" precedenti GCC, il kernel Linux, initrd-tools, Glibc, Perl, APT tool chain, ecc. hanno richiesto un po' di attenzione particolare per gli aggiornamenti dell'intero sistema.

Per gli aggiornamenti quotidiani in unstable, vedere Sezione 2.4.3, «Salvaguardarsi da problemi coi pacchetti».

2.4. Operazioni avanzate per la gestione dei pacchetti

2.4.1. Operazioni avanzate per la gestione dei pacchetti dalla riga di comando

Ecco un elenco di altre operazioni di gestione dei pacchetti per i quali aptitude è di livello troppo altro o manca delle funzionalità richieste.

Tabella 2.13. Elenco delle operazioni avanzate per la gestione dei pacchetti

comando azione
COLUMNS=120 dpkg -l <modello_nome_pacchetto> elenca lo stato di un pacchetto installato per una segnalazione di bug
dpkg -L <nome_pacchetto> elenca il contenuto di un pacchetto installato
dpkg -L <nome_pacchetto> | egrep '/usr/share/man/man.*/.+' elenca le pagine man di un pacchetto installato
dpkg -S <modello_nome_file> elenca i pacchetti installati che uno un file con un nome che corrisponde al modello
apt-file search <modello_nome_file> elenca i pacchetti nell'archivio che hanno un file con un nome che corrisponde al modello
apt-file list <modello_nome_pacchetto> elenca il contenuto dei pacchetti nell'archivio che corrispondono al modello
dpkg-reconfigure <nome_pacchetto> riconfigurare il pacchetto con esattamente quel nome
dpkg-reconfigure -p=low <nome_pacchetto> riconfigurare il pacchetto con esattamente quel nome ponendo le domande più dettagliate
configure-debian riconfigura i pacchetti da un'interfaccia a tutto schermo a menu
dpkg --audit controlla il sistema alla ricerca di pacchetti parzialmente installati
dpkg --configure -a configura tutti i pacchetti parzialmente installati
apt-cache policy <nome_pacchetto_binario> mostra la versione disponibile, la priorità e le informazioni nell'archivio di un pacchetto binario
apt-cache madison <nome pacchetto> mostra la versione disponibile e le informazioni nell'archivio di un pacchetto
apt-cache showsrc <nome_pacchetto_binario> mostra informazioni sul pacchetto sorgente di un pacchetto binario
apt-get build-dep <nome_pacchetto> installa i pacchetti richiesti per compilare un pacchetto
apt-get source <nome_pacchetto> scarica un sorgente (da un archivio standard)
dget <URL del file dsc> scarica un pacchetto sorgente (da un altro archivio)
dpkg-source -x <nome_pacchetto>_<versione>-<versione_debian>.dsc crea un albero dei sorgetti a partire da un insieme di pacchetti sorgenti ("*.orig.tar.gz" e "*.debian.tar.gz"/"*.diff.gz")
debuild binary compila pacchetti da un albero dei sorgenti locale
make-kpkg immagine_kernel compila un pacchetto kernel a partire da un albero dei sorgenti del kernel
make-kpkg --initrd immagine_kernel compila un pacchetto kernel con initramfs abilitato, a partire da un albero dei sorgenti
dpkg -i <nome_pacchetto><versione>-<versione_debian><arch>.deb installa un pacchetto locale nel sistema
debi <nome_pacchetto><versione>-<versione_debian><arch>.dsc installa pacchetti locali nel sistema
dpkg --get-selections '*' >selection.txt salva le informazioni di stato sui pacchetti selezionati a livello di dpkg
dpkg --set-selections <selection.txt imposta le informazioni di stato sui pacchetti selezionati a livello di dpkg
echo <package_name> hold | dpkg --set-selections impostare lo stato di selezione di un pacchetto a livello di dpkg a hold (equivalente a "aptitude hold<nome_pacchetto>")

[Attenzione] Attenzione

Gli strumenti per i pacchetti a più basso livello, come "dpkg -i …" e "debi …" dovrebbero essere usati con molta cura dall'amministratore di sistema. Non si prendono cura in modo automatico delle dipendenze richieste dai pacchetti. Le opzioni "--force-all" e simili, per la riga di comando di dpkg (vederedpkg(1), sono pensate per essere usate solamente da utenti esperti. Usarle senza comprenderne pienamente l'effetto potrebbe portare tutto il sistema in uno stato problematico.

Notare quanto segue.

  • Tutti i comandi di configurazione ed installazioni di sistema devono essere eseguiti da root.
  • A differenza di aptitude che usa espressioni regolari (vedere Sezione 1.6.2, «Espressioni regolari»), gli altri comandi di gestione dei pacchetti usano espansioni di modelli in stile shell (vedere Sezione 1.5.6, «Glob sella shell»).
  • Per apt-file(1), fornito dal pacchetto apt-file, è necessario eseguire prima "apt-file update".
  • configure-debian(8), fornito dal pacchetto configure-debian esegue dpkg-reconfigure(8) come suo backend.
  • dpkg-reconfigure(8) esegue gli script dei pacchetti usando debconf(1) come suo backend.
  • I comandi "apt-get build-dep", "apt-get source" e "apt-cache showsrc" richiedono la voce "deb-src" in "/etc/apt/sources.list".
  • dget(1), debuild(1) e debi(1) richiedono il pacchetto devscripts.
  • Vedere la procedura per (ri)creare pacchetti usando "apt-get source" in Sezione 2.7.10, «Fare il port di un pacchetto nel sistema stabile».
  • Il comando make-kpkg richiede il pacchetto kernel_package (vedere Sezione 9.7, «Il kernel»).
  • Vedere Sezione 12.11, «Creare pacchetti Debian» per informazioni generali sulla creazione di pacchetti.

2.4.2. Verifica dei pacchetti installati

L'installazione di debsums permette la verifica dei file di pacchetto installati in base ai valori delle somme di controllo MD5sum nei file "/var/lib/dpkg/info/*.md5sums" con debsums(1). Per il funzionamento di MD%sum vedere Sezione 10.4.5, «Somme di controllo MD5».

[Nota] Nota

Dato che il database MD5sum può essere manomesso da un intruso, debsums ha un'utilità limitata come strumento di sicurezza. È adatto solo per controllare modifiche fatte dall'amministratore o danni dovuti ad errori dei supporti.

2.4.3. Salvaguardarsi da problemi coi pacchetti

Molti utenti preferiscono usare il rilascio unstable del sistema Debian per avere le nuove funzionalità ed i nuovi pacchetti. Questo rende il sistema più esposto a bug critici sui pacchetti.

L'installazione del pacchetto apt-listbugs salvaguarda il sistema dai bug critici controllando automaticamente, al momento degli aggiornamenti fatti con il sistema APT, il BTS Debian alla ricerca dei bug critici.

L'installazione del pacchetto apt-listchanges fornisce importanti notizie contenute in NEWS.Debian quando si fanno aggiornamenti con il sistema APT.

2.4.4. Cercare tra i metadati dei pacchetti

Sebbene visitare il sito Debian http://packages.debian.org/ faciliti oggi giorno la ricerca nei metadati dei pacchetti, ci sono metodi più tradizionali per farlo.

I comandi grep-dctrl(1), grep-status(1) e grep-available(1) possono essere usati per cercare in qualsiasi file che sia nel formato generico dei file di controllo dei pacchetti di Debian.

"dpkg -S <modello_nome_file>" può essere usato per cercare i pacchetti che contengono al loro interno file installati da dpkg il cui nome corrisponde al modello. Ma non trova i file creati dagli script dei manutentori.

Se è necessario fare ricerche più elaborate sui metadati dei pacchetti, è necessario eseguire il comando "grep -e modello_regex *" nella directory "/var/lib/dpkg/info/". In questo modo si cercano le parole indicate negli script e nei testi con le domande di installazione dei pacchetti.

Se si desiderano vedere in modo ricorsivo le dipendenze dei pacchetti, si dovrebbe usare apt-rdepends(8).

2.5. Aspetti tecnici della gestione dei pacchetti in Debian

Verranno ora trattati alcuni aspetti tecnici interni del funzionamento del sistema di gestione dei pacchetti Debian. Queste informazioni dovrebbero aiutare a trovare soluzioni proprie ai problemi con i pacchetti.

2.5.1. Metadati degli archivi

I file con i metadati per ciascuna distribuzione sono archiviati in "dists/<codename>" su ciascun sito mirror di Debian, ad esempio "http://ftp.us.debian.org/debian/". La struttura del suo archivio può essere navigata con il browser web. Ci sono 6 tipi di metadati.

Tabella 2.14. Il contenuto dei metadati dell'archivio Debian

file posizione contenuto
Release directory della distribuzione di più alto livello descrizione dell'archivio e informazioni sull'integrità
Release.gpg directory della distribuzione di più alto livello file di firma per il file "Release" firmato con la chiave dell'archivio
Contents-<architettura> directory della distribuzione di più alto livello elenca tutti i file per tutti i pacchetti nell'archivio relativo
Release directory più elevata per ciascuna combinazione distribuzione/area/architettura descrizione dell'archivio usata per le regole di apt_preferences(5)
Packages directory più elevata per ciascuna combinazione distribuzione/area/architettura-binaria dati debian/control concatenati dei pacchetti binari
Sources directory più elevata per ciascuna combinazione distribuzione/area/source dati debian/control concatenati dei pacchetti sorgenti

Negli archivi recenti questi metadati sono memorizzati come file compressi e file di differenze per ridurre il traffico di rete.

2.5.2. File "Release" nella directory principale ed autenticità

[Suggerimento] Suggerimento

Il file "Release" nella directory di livello più alto è usato per firmare gli archivi nel sistema secure APT.

Ogni suite dell'archivio Debian ha un file "Release" nella sua directory di livello più alto, ad esempio "http://ftp.us.debian.org/debian/dists/unstable/Release", di questo tipo.

Origin: Debian
Label: Debian
Suite: unstable
Codename: sid
Date: Sat, 26 Jan 2008 20:13:58 UTC
Architectures: alpha amd64 arm hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc
Components: main contrib non-free
Description: Debian x.y Unstable - Not Released
MD5Sum:
 e9f11bc50b12af7927d6583de0a3bd06 22788722 main/binary-alpha/Packages
 43524d07f7fa21b10f472c426db66168  6561398 main/binary-alpha/Packages.gz
...
[Nota] Nota

Qui si può scoprire il motivo per cui un questa guida si è scelto di usare "suite" e "codename" in Sezione 2.1.4, «Nozioni di base sugli archivi Debian». Il termine "distribuzione" è usato per riferirsi sia a "suite" sia a "codename". Tutti i nomi delle "aree" dell'archivio offerte da un archivio sono elencate in "Componente".

L'integrità del file "Release" nella directory base viene verificata usando l'infrastruttura crittografica chiamata secure apt.

  • Il file "Release.gpg" con la firma crittografica viene creato a partire dal file "Release" nella directory base e dalla chiave segreta dell'archivio Debian.
  • La chiave pubblica dell'archivio Debian può essere inserita in "/etc/apt/trusted.gpg"

  • Il sistema secure APT verifica crittograficamente l'integrità del file "Release" di più alto livello scaricato con questo file "Release.gpg" e la chiave pubblica dell'archivio Debian in "/etc/apt/trusted.gpg".

L'integrità di tutti i file "Packages" e "Sources" viene verificata usando i valori MD5sum nel file "Release" nella ripsettiva directory base. L'integrità di tutti i file di pacchetto viene verificata usando i valori MD5sum nei file "Packages" e "Sources". Vedere debsums(1) e Sezione 2.4.2, «Verifica dei pacchetti installati».

Dato che la verifica crittografica della firma è un processo molto dispendioso in termini di uso della CPU rispetto al calcolo di valori MD5sum, l'uso di valori MD5sum per ciascun pacchetto mentre viene usata la firma crittografica per il file "Release" principale, fornisce una buona sicurezza con buone prestazioni (vedere Sezione 10.4, «Infrastruttura di sicurezza dei dati»).

2.5.3. File "Release" a livello di archivio

[Suggerimento] Suggerimento

I file "Release" a livello di archivio sono usati per le regole di apt_preferences(5).

Ci sono file "Release" a livello di archivio per tutte le posizioni nell'archivio specificate dalla riga "deb" in "/etc/apt/sources.list", come "http://ftp.us.debian.org/debian/dists/unstable/main/binary-amd64/Release" o "http://ftp.us.debian.org/debian/dists/sid/main/binary-amd64/Release" nell'esempio seguente.

Archive: unstable
Component: main
Origin: Debian
Label: Debian
Architecture: amd64
[Attenzione] Attenzione

Nell'archivio Debian, per la voce "Archive: vengono usati i nomi di suite ("stable", "testing", "unstable", …), mentre vengono usati i nomi in codice ("dapper", "feisty", "gutsy", "hardy", "intrepid", …) nell'archivio Ubuntu.

Per alcuni archivi, come experimental e squeeze-backports, che contengono pacchetti che non dovrebbero essere installati automaticamente, c'è una riga addizionale, come ad esempio nell'esempio seguente da "http://ftp.us.debian.org/debian/dists/experimental/main/binary-amd64/Release".

Archive: experimental
Component: main
Origin: Debian
Label: Debian
NotAutomatic: yes
Architecture: amd64

Notare che per gli archivi normali senza la riga "NotAutomatic: yes", il valore predefinito per la priorità di Pin è 500, mentre per gli archivi speciali con "NotAutomatic: yes", il valore predefinito per la priorità di Pin è 1 (vedere apt_preferences(5) e Sezione 2.7.3, «Modificare la versione candidata»).

2.5.4. Recuperare i metadati per un pacchetto

Quando si usano strumenti APT, quali aptitude, apt-get, synaptic, apt-file, auto-apt…, è necessario aggiornare le copie locali dei metadati contenenti le informazioni sull'archivio Debian. Queste copie locali hanno i seguenti nomi di file che corrispondono ai nomi di distribuzione, area e architettura specificati in "/etc/apt/sources.list" (vedere Sezione 2.1.4, «Nozioni di base sugli archivi Debian»).

  • "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribuzione>_Release"
  • "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribuzione>_Release.gpg"
  • "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribuzione>_<area>_binary-<architettura>_Packages"
  • "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribuzione>_<area>_source_Sources"
  • "/var/cache/apt/apt-file/ftp.us.debian.org_debian_dists_<distribuzione>_Contents-<architettura>.gz" (per apt-file)

I primi quattro tipi di file sono condivisi da tutti i comandi APT pertinenti e vengono aggiornati dalla riga di comando con "apt-get update" e "aptitude update". I metadati "Packages" sono aggiornati se esiste la riga "deb" in "/etc/apt/sources.list". I metadati "Sources" sono aggiornati se esiste la riga "deb-src" in "/etc/apt/sources.list".

I metadati "Packages" e "Sources" contengono la voce "Filename:" che punta alla posizione dei file dei pacchetti binari e sorgenti. Attualmente questi pacchetti sono posizionati nell'albero di directory "pool/" per una transizione migliore tra i rilasci.

Le copie locali dei metadati "Packages" possono essere ricercate interattivamente con l'aiuto di aptitude. Il comando specializzato di ricerca grep-dctrl(1) può cercare nelle copie locai dei metadati "Packages" e "Sources".

La copia locale dei metadati "Contents-<architettura>" può essere aggiornata con "apt-file update" e la sua posizione è diversa da quella degli altri quattro file. Vedere apt-file(1). (auto-apt usa in modo predefinito una posizione differente per la copia locale di "Contents-<architettura>.gz".)

2.5.5. Lo stato dei pacchetti per APT

In aggiunta ai metadati recuperati da remoto, lo strumento APT, a partire da lenny, memorizza le informazioni generate localmente sullo stato delle installazioni in "/var/lib/apt/extended_states" che è usato da tutti gli strumenti APT per tenere traccia dei pacchetti installati automaticamente.

2.5.6. Lo stato dei pacchetti per aptitude

In aggiunta ai metadati recuperati da remoto, il comando aptitude memorizza le informazioni generate localmente sullo stato delle installazioni in "/var/lib/aptitude/pkgstates" che è usato solo da esso.

2.5.7. Copie locali dei pacchetti scaricati

Tutti i pacchetti scaricati da remoto attraverso il meccanismo APT vengono salvati nella directory "/var/cache/apt/packages" fino a che non vengono cancellati.

2.5.8. Nomi dei file di pacchetto di Debian

I file di pacchetto Debian hanno nomi con una particolare struttura.

Tabella 2.15. La struttura dei nomi dei pacchetti Debian

tipo di pacchetto struttura del nome
Il pacchetto binario (alias deb) <nome-pacchetto>_<epoca>:<versione-originale>-<versione.debian>-<architettura>.deb
Il pacchetto binario (alias udeb) <nome-pacchetto>_<epoca>:<versione-originale>-<versione.debian>-<architettura>.udeb
Il pacchetto sorgente (sorgenti originali) <nome-pacchetto>_<epoca>:<versione-originale>-<versione.debian>.orig.tar.gz
Il pacchetto sorgente 1.0 (modifiche Debian) <nome-pacchetto>_<epoca>:<versione-originale>-<versione.debian>.diff.gz
Il pacchetto sorgente 3.0 (quilt) (modifiche Debian) <nome-pacchetto>_<epoca>:<versione-originale>-<versione.debian>.debian.tar.gz
Il pacchetto sorgente (descrizione) <nome-pacchetto>_<epoca>:<versione-originale>-<versione.debian>.dsc

[Suggerimento] Suggerimento

Sono qui descritti solamente i formati base dei pacchetti sorgenti. Per ulteriori informazioni vedere dpkg-source(1).

Tabella 2.16. I caratteri utilizzabili all'interno di ciascuna porzione del nome dei pacchetti Debian

nome porzione caratteri utilizzabili (espressione regolare) presenza
<nome-pacchetto> [a-z,A-Z,0-9,.,,-] richiesta
<epoca>: [0-9]+: opzionale
<versione-originale> [a-z,A-Z,0-9,.,,-,:] richiesta
<versione.debian> [a-z,A-Z,0-9,.,,~] opzionale

[Nota] Nota

Si può controllare l'ordine delle versioni dei pacchetti con dpkg(1), per esempio con "dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?".

[Nota] Nota

L'installatore Debian (d-i) usa come estensione per i suoi pacchetti binari udeb invece della normale deb. Un pacchetto udeb è un pacchetto deb ridotto al minimo, con rimossi alcuni contenuti non essenziali come la documentazione, per risparmiare spazio seguendo meno rigorosamente i requisiti richiesti dalle norme per i pacchetti. Entrambi i pacchetti deb e udeb condividono la stessa struttura di pacchetto. La "u" sta per micro.

2.5.9. Il comando dpkg

dpkg(1) è lo strumento di più basso livello per la gestione dei pacchetti Debian. È molto potente e deve essere usato con cautela.

Quando installa un pacchetto chiamato "<nome_pacchetto>", dpkg fa nell'ordine elencato le seguenti operazioni.

  1. Spacchetta il file deb (equivalente di "ar -x")
  2. Esegue "<nome_pacchetto>.preinst" usando debconf(1)
  3. Installa il contenuto del pacchetto nel sistema (equivalente di "tar -x")
  4. Esegue "<nome_pacchetto>.postinst" usando debconf(1)

Il sistema debconf fornisce un'interazione standard con l'utente con supporto per internazionalizzazione e localizzazione (Capitolo 8, I18N e L10N).

Tabella 2.17. I file degni di nota creati da dpkg

file descrizione del contenuto
/var/lib/dpkg/info/<nome_pacchetto>.conffiles elenco di file di configurazione (modificabile dall'utente)
/var/lib/dpkg/info/<nome_pacchetto>.list elenco dei file e delle directory installate dal pacchetto
/var/lib/dpkg/info/<nome_pacchetto>.md5sums elenco dei valori degli hash MD5 per i file installati dal pacchetto
/var/lib/dpkg/info/<nome_pacchetto>.preinst script eseguito prima dell'installazione del pacchetto
/var/lib/dpkg/info/<nome_pacchetto>.postinst script eseguito dopo l'installazione del pacchetto
/var/lib/dpkg/info/<nome_pacchetto>.prerm script eseguito prima della rimozione del pacchetto
/var/lib/dpkg/info/<nome_pacchetto>.postrm script eseguito dopo la rimozione del pacchetto
/var/lib/dpkg/info/<nome_pacchetto>.config script per il sistema debconf
/var/lib/dpkg/alternatives/<nome_pacchetto> informazioni sulle alternative usate dal comando update-alternatives
/var/lib/dpkg/available informazioni sulla disponibilità per tutti i pacchetti
/var/lib/dpkg/diversions le informazioni sulle diversioni usate da dpkg(1) e impostate con "dpkg-divert"(8)
/var/lib/dpkg/statoverride le informazioni di sovrascrittura di stato usate da dpkg(1) e impostate da "dpkg-statoverride"(8)
/var/lib/dpkg/status le informazioni sullo stato per tutti i pacchetti
/var/lib/dpkg/status-old la prima generazione di backup del file "var/lib/dpkg/status"
/var/backups/dpkg.status* la seconda generazione e le generazioni precedenti di backup del file "var/lib/dpkg/status"

Il file "status" è anche usato da altri strumenti come dpkg(1): "dselect update" e "apt-get -u dselect-upgrade".

Il comando di ricerca specializzato grep-dctrl(1) può ricercare nelle copie locali dei metadati "status" e "available"

[Suggerimento] Suggerimento

Nell'ambiente dell'installatore Debian, viene usato il comando udpkg per aprire i pacchetti udeb. Il comando udpkg è una versione ridotta al minimo del comando dpkg.

2.5.10. Il comando update-alternative

Il sistema Debian ha un meccanismo per installare senza problemi programmi che si sovrappongono nelle loro funzioni usando update-alternatives(8). Per esempio, si può far sì che il comando vi esegue vim quando si sono installati entrambi i pacchetti vim e nvi.

$ ls -l $(type -p vi)
lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi
$ sudo update-alternatives --display vi
...
$ sudo update-alternatives --config vi
  Selezione    Percorso
 ----------------------------------------------
      1        /usr/bin/vim
*+    2        /usr/bin/nvi

Premere Invio per mantenere il valore predefinito[*] o digitare il numero della selezione: 1

Il sistema delle alternative Debian mantiene le proprie selezioni in forma di collegamenti simbolici in "/etc/alternatives/". Il procedimento di selezione usa i file corrispondenti in "/var/lib/dpkg/alternatives/".

2.5.11. Il comando dpkg-statoverride

La sovrascrittura dello stato fornita dal comando dpkg-statoverride(8) è un modo per dire a dpkg(1) di usare un proprietario o una modalità diversa per un file quando viene installato un pacchetto. Se viene specificato "--update" e il file esiste già, viene immediatamente impostato con il prorpietario e la modalità nuovi.

[Attenzione] Attenzione

La modifica diretta del proprietario o della modalità, usando chmod o chown, di un file che appartiene ad un pacchetto da parte dell'amministratore del sistema viene vanificata dal successivo aggiornamento del pacchetto.

[Nota] Nota

È stata usata la parola file, ma in realtà si può trattare di un qualsiasi oggetto nel file system gestito da dpkg, inclusi directory, device, ecc.

2.5.12. Il comando dpkg-divert

Le deviazioni per i file fornite dal comando dpkg-divert(8) sono un modo per forzare dpkg(1) a non installare un file nella sua posizione predefinita, ma in una posizione deviata. L'uso di dpkg-divert è pensato per gli script di manutenzione dei pacchetti. Il suo uso in maniera superficiale da parte dell'amministratore di sistema è deprecato.

2.6. Ripristino da un sistema con problemi

Quando si usa il sistema unstable, l'amministratore deve saper ripristinare le cose da una situazione problematica di gestione dei pacchetti.

[Attenzione] Attenzione

Alcuni dei metodi descritti comportano azioni ad alto rischio. Ci si consideri avvertiti!

2.6.1. Incompatibilità con vecchie configurazioni utente

Se un programma con interfaccia grafica per il desktop presenta problemi di instabilità dopo un importante aggiornamento della versione originale, si dovrebbero sospettare interferenze con vecchi file locali di configurazione creati da esso. Se è stabile per account utente creati da zero, questa ipotesi è confermata. (Questo è un bug nella creazione del pacchetto e viene solitamente evitato dal curatore del pacchetto.)

Per ripristinare la stabilità, si dovrebbero spostare i corrispondenti file locali di configurazione e riavviare il programma GUI. Potrebbe essere necessario leggere il contenuto dei vecchi file di configurazione per ripristinare successivamente le informazioni di configurazione. (Non cancellarli troppo di fretta.)

2.6.2. Pacchetti diversi con file sovrapposti

I sistemi di gestione dei pacchetti a livello dell'archivio, come aptitude(8) o apt-get(1) non provano nemmeno ad installare pacchetti con file sovrapposti, basandosi sulle dipendenze dei pacchetti (vedere Sezione 2.1.5, «Dipendenze dei pacchetti»).

Errori dei manutentori dei pacchetti o l'uso di fonti degli archivi mescolate in modo incoerente (vedere Sezione 2.7.2, «Pacchetti da fonti mescolate di archivi») dall'amministratore di sistema possono creare situazioni con dipendenze dei pacchetti non correttamente definite. Quando, in una situazione di questo tipo, si installa un pacchetto con file sovrapposti usando aptitude(8) o apt-get(1), dpkg(1) che spacchetta i pacchetti si assicura di restituire un errore al programma che lo ha invocato senza sovrascrivere file esistenti.

[Attenzione] Attenzione

L'uso di pacchetti di terze parti introduce significativi rischi per il sistema attraverso gli script dei manutentori che sono eseguiti con privilegi di root e che possono fare qualsiasi cosa nel sistema. Il comando dpkg(1) protegge solo contro la sovrascrittura in fase di spacchettamento.

Si possono risolvere installazioni problematiche di questo tipo rimuovendo prima il vecchio pacchetto che crea problemi: <vecchio-pacchetto>.

$ sudo dpkg -P <vecchio-pacchetto>

2.6.3. Risolvere problemi negli script di pacchetto

Quando un comando nello script di un pacchetto restituisce un errore per una qualche ragione e lo script finisce con un errore, il sistema di gestione dei pacchetti cancella l'azione e finisce con pacchetti parzialmente installati. Quando un pacchetto contiene bug nei suoi script di rimozione, il pacchetto può diventare impossibile da rimuovere e fonte di problemi.

Per i problemi di script di pacchetto di "<nome_pacchetto>", si dovrebbe guardare negli script di pacchetto seguenti.

  • "/var/lib/dpkg/info/<nome_pacchetto>.preinst"
  • "/var/lib/dpkg/info/<nome_pacchetto>.postinst"
  • "/var/lib/dpkg/info/<nome_pacchetto>.prerm"
  • "/var/lib/dpkg/info/<nome_pacchetto>.postrm"

Modificare dall'account root lo script di pacchetto che causa problemi usando le tecniche seguenti.

  • disabilitare la riga che causa problemi facendola precedere da "#"
  • forzare la restituzione di esecuzione con successo aggiungendo in fondo alla riga che causa problemi "|| true"

Configurare tutti i pacchetti parzialmente installati con il comando seguente.

# dpkg --configure -a

2.6.4. Ripristinare con il comando dpkg

Dato che dpkg è uno strumento per pacchetti a livello molto basso, può funzionare anche in situazioni molto brutte come un sistema non avviabile senza una connessione di rete. Assumiamo, per esempio, che il pacchetto pippo sia difettoso e debba essere sostituito.

Si possono trovare copie di versioni più vecchie del pacchetto pippo, libere dal bug, nella directory della cache dei pacchetti: "/var/cache/apt/archives/". (Se non ci sono, se ne può scaricare una dall'archivio di http://snapshot.debian.net/ o copiarla dalla cache dei pacchetti di una macchina funzionante.)

Se si può avviare il sistema, lo si può installare con il comando seguente.

# dpkg -i /percorso/di/pippo_<vecchia_versione>_<arch>.deb
[Suggerimento] Suggerimento

Se il danno al sistema è piccolo, si può in alternativa retrocedere tutto il sistema ad una versione precedente come in Sezione 2.7.7, «Retrocessione di emergenza alla versione precedente», usando il sistema di più alto livello APT.

Se il sistema non è avviabile dal disco fisso, si dovrebbe cercare un altro modo per fare l'avvio.

  1. Avviare il sistema usando il CD dell'installatore Debian in modalità ripristino.
  2. Montare il sistema non avviabile sul disco fisso in "/destinazione".
  3. Installare una versione più vecchia del pacchetto pippo con il comando seguente.
# dpkg --root /destinazione -i /percorso/di/pippo_<vecchia_versione>_<arch>.deb

Questo esempio funziona persino se il comando dpkg sul disco fisso è danneggiato.

[Suggerimento] Suggerimento

Per ripristinare il sistema danneggiato, può essere usato in modo simile qualsiasi sistema GNU/Linux avviato da un altro sistema sul disco fisso, CD live GNU/Linux, chiavetta USB avviabile o avvio di rete.

Se il tentativo di installare un pacchetto in questo modo fallisce a causa di qualche violazione di dipendenze e si deve necessariamente farlo come ultima spiaggia, si possono sovrascrivere le dipendenze usando "--ignore-depends", "--force-depends" e altre opzioni di dpkg. Se lo si fa, è necessario in seguito fare tutti gli sforzi possibili per ripristinare le dipendenze corrette. Per i dettagli vedere dpkg(8).

[Nota] Nota

Quando il sistema è seriamente danneggiato, se ne dovrebbe fare un backup completo in un posto sicuro (vedere Sezione 10.1.6, «Backup e ripristino») e fare un'installazione pulita. Ciò comporta meno perdita di tempo e alla fine produce un risultato migliore.

2.6.5. Ripristinare i dati sui pacchetti selezionati

Se "/var/lib/dpkg/status" diventa corrotto per una qualsiasi ragione, il sistema Debian perde i dati sulla selezione dei pacchetti e ne ha grave danno. Cercare il vecchio file "/var/lib/dpkg/status" in "/var/lib/dpkg/status-old" o "/var/backups/dpkg.status.*".

Mantenere "/var/backups/" in una partizione separata può essere una buona idea dato che questa directory contiene molti dati importanti per il sistema.

Per danni molto seri, raccomando di fare una re-installazione pulita dopo aver fatto il backup del sistema. Anche se tutto ciò che era in "/var/" è andato perduto, è sempre possibile recuperare alcune informazioni dalle directory in "/usr/share/doc/" per guidare le nuove installazioni.

Reinstallare un sistema (desktop) minimale

# mkdir -p /percorso/del/vecchio/sistema

Montare il vecchio sistema in "percorso/del/vecchio/sistema/".

# cd /percorso/del/vecchio/sistema/usr/share/doc
# ls -1 >~/ls1.txt
# cd /usr/share/doc
# ls -1 >>~/ls1.txt
# cd
# sort ls1.txt | uniq | less

Verranno mostrati i nomi dei pacchetti da installare. (Ci potrebbero essere alcuni nomi non di pacchetto, come "texmf".)

2.7. Suggerimenti per la gestione dei pacchetti

2.7.1. Come scegliere i pacchetti Debian

Si possono cercare i pacchetti che soddisfano i propri bisogni con aptitude in base alla descrizione del pacchetto o dall'elenco in "Task".

Quando si incontrano più di due pacchetti simili e non si sa quale installare senza doverli installare per prova, si dovrebbe usare un po' di buon senso. Considero i punti seguenti un buon consiglio per i paccchetti da preferire.

  • Essenziale: sì > no
  • Componente: main > contrib > non-free
  • Priorità: richiesto > importante > standard > opzionale > extra
  • Task: pacchetti elencati in task come "Ambiente desktop"
  • Pacchetti selezionati da pacchetti di dipendenze (es, python2.4 selezionato da python)
  • Popcon: maggior numero di voti e di installazioni
  • Changelog: aggiornamenti regolari da parte del manutentore
  • BTS: nessun bug RC (nessun bug critico, grave o serio)
  • BTS: manutentore sensibile alle segnalazioni di bug
  • BTS: maggior numero di bug risolti di recente
  • BTS: minor numero di bug rimanenti non wishlist

Essendo Debian un progetto di volontari con modello di sviluppo distribuito, i suoi archivi contengono molti pacchetti con scopi e qualità molto differenti. Si deve scegliere con la propria testa che uso farne.

2.7.2. Pacchetti da fonti mescolate di archivi

[Attenzione] Attenzione

Installare pacchetti da fonti mescolate di archivi non è supportato dalla distribuzione Debian ufficiale, tranne che per particolari combinazioni supportate ufficialmente, come stable con security updates e squeeze-updates.

Ecco un esempio di operazioni da fare per includere, sporadicamente, versioni originali più recenti di specifici pacchetti presenti in unstable pur mantenendo testing.

  1. Cambiare temporaneamente il file "/etc/apt/sources.list" ad una singola voce "unstable".
  2. Eseguire "aptitude update".
  3. Eseguire "aptitude install <nome-pacchetto>".
  4. Ripristinare il file "/etc/apt/sources.list" originale per testing.
  5. Eseguire "aptitude update".

Con questo approccio manuale non si deve creare il file "/etc/apt/preferences" né ci si deve preoccupare dei pin di apt. Ma è piuttosto laborioso.

[Attenzione] Attenzione

Quando si usano fonti di archivi mescolate, si deve assicurare la compatibilità tra i pacchetti da soli, dato che Debian non la garantisce. Se esistono incompatibilità tra i pacchetti, si può danneggiare il sistema. Si deve essere in grado di giudicare queste esigenze tecniche. L'uso di fonti mescolate di archivi non correlati è una modalità di funzionamento totalmente opzionale e il suo uso non è per nulla raccomandato.

Le regole generali per installare pacchetti da archivi diversi sono le seguenti.

  • L'installazione di pacchetti non binari ("Architecture: all") è più sicura.

    • pacchetti di documentazione: nessun requisito particolare
    • pacchetti programma per interpreti: deve essere disponibile un interprete compatibile
  • L'installazione di pacchetti binari (non "Architecture: all") di solito comporta molte difficoltà e non è sicura.

    • compatibilità di versione con librerie (inclusa "libc")
    • compatibilità di versione con programmi applicativi correlati
    • compatibilità con l'ABI del kernel
    • compatibilità con l'ABI C++
[Nota] Nota

Per rendere l'installazione di un pacchetto più sicura, possono essere forniti alcuni pacchetti binari applicativi commerciali non liberi con librerie completamente statiche. Si dovrebbe anche per essi controllare in ogni caso la compatibilità con ABI, ecc.

[Nota] Nota

Installare pacchetti binari da archivi non ufficialmente supportati è generalmente una cattiva idea, tranne che per evitare pacchetti danneggiati per un breve tempo. Questo è vero anche se si usano i pin di APT (vedere Sezione 2.7.3, «Modificare la versione candidata»). Si dovrebbe considerare chroot o tecniche simili (vedere Sezione 9.8, «Sistema virtualizzato») per eseguire programmi da archivi differenti.

2.7.3. Modificare la versione candidata

Senza il file "/etc/apt/preferences", il sistema APT sceglie la versione più recente disponibile come versione candidata usando la stringa di versione. Questa è la situazione normale e l'uso raccomandato del sistema APT. Tutte le combinazioni di archivi supportate ufficialmente non necessitano del file "/etc/apt/preferences", dato che gli archivi che non dovrebbero essere usati come fonti automatica per gli aggiornamenti sono marcati come NotAutomatic e trattati in modo appropriato.

[Suggerimento] Suggerimento

La regola di comparazione della stringa di versione può essere verificata con, ad esempio, "dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?" (vedere dpkg(1)).

Quando si installano regolarmente pacchetti da fonti di archivi mescolate (vedere Sezione 2.7.2, «Pacchetti da fonti mescolate di archivi»), si possono automatizzare queste operazioni complicate creando il file "/etc/apt/preferences" con le voci appropriate e modificando la regola di selezione dei pacchetti per le versioni candidate come descritto in apt_preferences(5). Questo è chiamato usare i pin di APT.

[Avvertimento] Avvertimento

L'uso dei pin di APT da parte di un utente inesperto è una fonte sicura di grossi problemi. Si dovrebbe evitare l'uso dei pin di APT se non strettamente necessario.

[Attenzione] Attenzione

Quando si usano i pin di APT si deve assicurare la compatibilità dei pacchetti da soli dato che Debian non la garantisce. L'uso dei pin di APT è una modalità di funzionamento totalmente opzionale e il suo uso non è per nulla consigliato.

[Attenzione] Attenzione

Per le regole di apt_preferences(5) sono usati i file Release a livello di archivio (vedere Sezione 2.5.3, «File "Release" a livello di archivio»). I pin di APT perciò funzionano solo con il nome della "suite" per i normali archivi Debian e per gli archivi di sicurezza Debian. (Ciò è diverso per gli archivi Ubuntu). Per esempio nel file "/etc/apt/preferences" si può usare "Pin: release a=unstable", ma non "Pin: release a=sid".

[Attenzione] Attenzione

Quando si usano archivi non Debian con i pin di APT si dovrebbe controllare quale sia il loro scopo e la loro credibilità. Ubuntu e Debian, per esempio, non sono fatti per essere mescolati.

[Nota] Nota

Anche se non si crea il file "/etc/apt/preferences" si possono fare operazioni piuttosto complesse (vedere Sezione 2.6.4, «Ripristinare con il comando dpkg» e Sezione 2.7.2, «Pacchetti da fonti mescolate di archivi») senza l'uso dei pin di APT.

Quella che segue è una spiegazione semplificata delluso dei pin di APT.

Il sistema APT sceglie, dalle fonti per i pacchetti disponibili definite nel file "/etc/apt/sources.list", il pacchetto di aggiornamento con la priorità di pin più elevata come versione candidata del pacchetto. Se la priorità di pin del pacchetto è maggiore di 1000, la restrizione a versioni di aggiornamento non viene considerata per permettere la retrocessione ad una versione precedente (vedere Sezione 2.7.7, «Retrocessione di emergenza alla versione precedente»).

Il valore della priorità di pin per ciascun pacchetto è definito dalle voci "Pin-Priority" nel file "/etc/apt/preferences o viene usato il valore predefinito.

Tabella 2.18. Elenco dei valori predefiniti di priorità di pin per ciascun tipo di fonte dei pacchetti

priorità di pin predefinita tipo di fonte dei pacchetti
990 archivio del rilascio definito
500 archivio normale
100 pacchetto installato
1 archivio Non automatico

L'archivio del rilascio definito può essere impostato in svariati modi.

  • nel file di configurazione "/etc/apt/apt.conf" con la riga "APT::Default-Release "stable";"
  • con l'opzione per la riga di comando, ad esempio, "apt-get install -t testing qualche-pacchetto"

L'attributo di archivio Non automtico è impostato dal server dell'archivio che ha il file Release a livello di archivio (vedere Sezione 2.5.3, «File "Release" a livello di archivio») che contiene "NotAutomatic: yes".

La situazione dei pin di APT di <pacchetto> da diverse fonti di archivi viene mostrata con "apt-cache policy <pacchetto>".

  • Una riga che inizia con "pacchetto pin:" elenca la versione del pacchetto di pin se è definita un'associazione specifica per <pacchetto>, ad esempio "Package pin: 0.190".
  • Non esiste alcuna riga con "Package pin:" se non è definita alcuna associazione solamente con <pacchetto>.
  • Il valore di priorità di pin associato solamente con <pacchetto> viene mostrato alla destra di tutte le sringhe di versione, ad esempio "0.181 700".
  • Se non è definita un'associazione specifica con <pacchetto> viene mostrato "0" alla destra di tutte le stringhe di versione.
  • I valori di priorità di pin degli archivi (definiti come "Package: *" nel file "/etc/apt/preferences" sono elencati alla sinistra di tutti i percorsi di archivio, ad esempio "200 http://backports.debian.org/debian-backports/ squeeze-backports/main Packages".

Quello che segue è un esempio di uso dei pin di APT per includere pacchetti specifici con versioni originali più recenti presenti in unstable aggiornandoli regolarmente pur mantenendo testing. Si devono elencare nel file "/etc/apt/sources.list" tutti gli archivi necessari nel modo seguente.

deb http://ftp.us.debian.org/debian/ testing main contrib non-free
deb http://ftp.us.debian.org/debian/ unstable main contrib non-free
deb http://security.debian.org/ testing/updates main contrib

Impostare il file "/etc/apt/preferences" come segue.

Package: *
Pin: release a=testing
Pin-Priority: 500

Package: *
Pin: release a=unstable
Pin-Priority: 200

Quando, con questa configurazione, si desidera installare un pacchetto chiamato "<nome-pacchetto>" con le sue dipendenze dall'archivio unstable, usare il comando seguente che cambia il rilascio definito con l'opzione "-t" (la priorità di pin di unstable diventa 990.).

$ sudo apt-get install -t unstable <nome-pacchetto>

Con quessta configurazione, la normale esecuzione di "apt-get upgrade" e "apt-get dist-upgrade" (o "aptitude safe-upgrade" e "aptitude full-upgrade") aggiorna i pacchetti che erano stati installati dall'archivio testing usando l'attuale archivio testing e i pacchetti che erano stati installati dall'archivio unstable usando l'attuale archivio unstable.

[Attenzione] Attenzione

Fare attenzione a non rimuovere la voce "testing" dal file "/etc/apt/sources.list". Senza di essa il sistema APT aggiorna i pacchetti usando l'archivio unstable più recente.

[Suggerimento] Suggerimento

Io di solito modifico il file "/etc/apt/sources.list per commentare le voci relative all'archivio "unstable immediatamente dopo l'azione descritta sopra. Questo evita il rallentamento del processo di aggiornamento dovuto a troppe voci nel file "/etc/apt/sources.list" anche se impedisce l'aggiornamento, usando l'attuale archivio unstable dei pacchetti che erano stati installati dall'archivio unstable.

[Suggerimento] Suggerimento

Se viene usato "Pin-Priority: 20" invece di "Pin-Priority: 200" nel file "/etc/apt/preferences", i pacchetti già installati che hanno 100 come valore della priorità di pin, non vengono aggiornati dall'archivio unstable nemmeno se viene rimossa la voce "testing" dal file "/etc/apt/sources.list".

Se si desidera tenere traccia automaticamente di particolari pacchetti in unstable senza l'iniziale installazione con "-t unstable", si deve creare il file "/etc/apt/preferences" ed elencarvi esplicitamente tutti i pacchetti voluti nel modo seguente.

Package: <pacchetto-1>
Pin: release a=unstable
Pin-Priority: 700

Package: <pacchetto-2>
Pin: release a=unstable
Pin-Priority: 700

Questo imposta il valore della priorità di pin per ciascun pacchetto specifico. Per esempio, per tenere traccia della versione più recente in unstable di questo manuale "Debian Reference" in inglese, si dovrebbero avere, nel file "/etc/apt/preferences" le voci seguenti.

Package: debian-reference-en
Pin: release a=unstable
Pin-Priority: 700

Package: debian-reference-common
Pin: release a=unstable
Pin-Priority: 700
[Suggerimento] Suggerimento

Questo modo di usare i pin di APT è valido anche quando si segue l'archivio stable. Per la mia esperienza, installare i pacchetti di documentazione dall'archivio unstable è sempre sicuro.

Quello che segue è un esempio di uso dei pin di APT per includere pacchetti specifici con versioni originali più recenti presenti in experimental pur mantenendo unstable. Si devono elencare nel file "/etc/apt/sources.list" tutti gli archivi necessari nel modo seguente.

deb http://ftp.us.debian.org/debian/ unstable main contrib non-free
deb http://ftp.us.debian.org/debian/ experimental main contrib non-free
deb http://security.debian.org/ testing/updates main contrib

Il valore predefinito della priorità di pin per l'archivio experimental è sempre 1 (<<100) dato che è un archivio Non automatico (vedere Sezione 2.5.3, «File "Release" a livello di archivio»). Per usare semplicemente l'archivio experimental non c'è alcun bisogno di impostare il valore di priorità di pin esplicitamente nel file "/etc/apt/preferences", a meno che non si desideri aggiornare automaticamente da esso in futuro particolari pacchetti.

2.7.4. Updates e Backports

Esistono gli archivi del squeeze-updates e backports.debian.org che forniscono pacchetti di aggiornamento per stable (squeeze).

[Avvertimento] Avvertimento

Non usare tutti i pacchetti disponibili negli archivi Non automatici come squeeze-backports. Usare solo pacchetti selezionati che rispondano alle proprie esigenze.

Quello che segue è un esempio di uso dei pin di APT per includere pacchetti specifici con versioni originali più recenti presenti in squeeze-backports pur mantenendo squeeze e squeeze-updates. Si devono elencare nel file "/etc/apt/sources.list" tutti gli archivi necessari nel modo seguente.

deb http://ftp.us.debian.org/debian/ squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib
deb http://ftp.us.debian.org/debian/ squeeze-updates main contrib non-free
deb http://backports.debian.org/debian-backports/ squeeze-backports main contrib non-free

Il valore predefinito della priorità di pin per l'archivio backports.debian.org è sempre 1 (<<100) dato che è un archivio Non automatico (vedere Sezione 2.5.3, «File "Release" a livello di archivio»). Per usare semplicemente l'archivio backports.debian.org non c'è alcun bisogno di impostare il valore di priorità di pin esplicitamente nel file "/etc/apt/preferences", a meno che non si desideri aggiornare automaticamente da esso in futuro particolari pacchetti.

Perciò quando si desidera installare un pacchetto chiamato "<nome-pacchetto>" con le sue dipendenze dall'archivio squeeze-backports, usare questo comando che sposta il rilascio stabilito con l'opzione "-t".

$ sudo apt-get install -t squeeze-backports <nome-pacchetto>

Se si desidera aggiornare pacchetti particolari, è necessario creare il file "/etc/apt/preferences" ed elencarvi esplicitamente tutti i pacchetti voluti nel modo seguente.

Package: <package-1>
Pin: release o=Backports.org archive
Pin-Priority: 700

In alternativa si può impostare il file "/etc/apt/preferences" nel modo seguente.

Package: *
Pin: release a=stable , o=Debian
Pin-Priority: 500

Package: *
Pin: release a=squeeze-updates, o=Debian
Pin-Priority: 500

Package: *
Pin: release a=squeeze-backports, o=Backports.org archive
Pin-Priority: 200

La normale esecuzione di "apt-get upgrade" e "apt-get dist-upgrade" (o "aptitude safe-upgrade" e "aptitude full-upgrade") aggiorna i pacchetti che erano stati installati dall'archivio stable usando l'attuale archivio stable e i pacchetti che erano stati installati da altri archivi usando l'archivio corrispondente per tutti gli archivi nel file "/etc/apt/sources.list".

2.7.5. Scaricare ed aggiornare automaticamente i pacchetti

Il pacchetto apt viene fornito con il proprio script di cron, "/etc/cron.daily/apt" per permettere di scaricare automaticamente i pacchetti. Questo script può essere migliorato, installando il pacchetto unattended-upgrades, per effettuare l'aggiornamento automatico dei pacchetti. Può essere personalizzato dai parametri in "/etc/apt/apt.conf.d/02backup" e "/etc/apt/apt.conf.d/50unattended-upgrades" come descritto in "/usr/share/doc/unattended-upgrades/README".

Il pacchetto "unattended-upgrades è pensato principalmente per gli aggiornamenti di sicurezza del sistema stable. Se il rischio di danneggiare un sistema stable esistente con gli aggiornamenti automatici è minore di quello che il sistema venga danneggiato da un intruso, usando una falla nella sicurezza chiusa dall'aggiornamento di sicurezza, si dovrebbe considerare l'uso di questi aggiornamenti automatici con parametri simili ai seguenti.

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";

Se si sta usando un sistema unstable, non è bene usare gli aggiornamenti automatici perché certamente prima o poi danneggeranno il sistema. Anche per unstable però, per risparmiare tempo nell'aggiornamento interattivo, si può volere scaricare i pacchetti in anticipo usando parametri di configurazione come i seguenti.

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "0";

2.7.6. Limitare l'uso di banda di APT per gli scaricamenti

Se si desidera limitare l'uso della banda da parte di APT per gli scaricamenti, per esempio a 800Kib/sec (=100kiB/sec), si devono usare i parametri di configurazione di APT nel modo seguente.

APT::Acquire::http::Dl-Limit "800";

2.7.7. Retrocessione di emergenza alla versione precedente

[Attenzione] Attenzione

La retrocessione ad una versione precedente non è ufficialmente supportata da Debian. Dovrebbe essere fatta solamente come parte di un processo di ripristino di emergenza. Nonostante questo è noto che funziona bene in caso di molti incidenti. Per i sistemi critici, si dovrebbe fare un backup di tutti i dati importanti sul sistema dopo l'operazione di ripristino e reinstallare un nuovo sistema da zero.

Si potrebbe essere fortunati e riuscire a retrocedere da un archivio più recente ad uno più vecchio per ripristinare un aggiornamento di sistema andato male, manipolando le versioni candidate (vedere Sezione 2.7.3, «Modificare la versione candidata»). Questa è l'alternativa pigra al lavoro tediosi di dover usare molti comandi "dpkg -i <pacchetto-danneggiato>_<vecchia-versione>.deb" (vedereSezione 2.6.4, «Ripristinare con il comando dpkg»).

Cercare le righe nel file "/etc/apt/sources.list" che rimandano a unstable, come la seguente.

deb http://ftp.us.debian.org/debian/ sid main contrib non-free

Sostituirle con la seguente per puntare a testing.

deb http://ftp.us.debian.org/debian/ wheezy main contrib non-free

Impostare il file "/etc/apt/preferences" come segue.

Package: *
Pin: release a=testing
Pin-Priority: 1010

Eseguire "apt-get dist-upgrade" per forzare la retrocessione dei pacchetti in tutto il sistema.

Rimuovere questo file speciale "/etc/apt/preferences" dopo la retrocessione di emergenza.

[Suggerimento] Suggerimento

È una buona idea rimuovere (non eliminare completamente!) il maggior numero di pacchetti per minimizzare i problemi di dipendenza. Potrebbe essere necessario rimuovere o installare manualmente alcuni pacchetti per retrocedere il sistema. Il kernel Linux, il bootloader, udev, PAM, APT e i pacchetti relativi alla rete ed i loro file di configurazione richiedono particolare attenzione.

2.7.8. Chi ha caricato il pacchetto?

Anche se i nomi dei manutentori elencati in "/var/lib/dpkg/available" e"/usr/share/doc/package_name/changelog" forniscono alcune informazioni su "chi stia dietro la pacchettizzazione", l'identità di chi ha effettivamente caricato il pacchetto è un po' oscura. who-uploads(1) nel pacchetto devscripts identifica l'effettivo autore del caricamento dei pacchetti sorgenti Debian.

2.7.9. Il pacchetto equivs

Se si ha intenzione di compilare un programma dai sorgenti per rimpiazzare un pacchetto Debian, la cosa migliore è creare un vero pacchetto debianizzato locale (*.deb) e usare un archivio privato.

Se si sceglie di compilare un programma dai sorgenti e di installarlo invece in "/usr/local", si può usare equivs come ultima spiaggia per soddisfare le dipendenze mancanti del pacchetto.

Package: equivs
Priority: extra
Section: admin
Description: Circumventing Debian package dependencies
 This is a dummy package which can be used to create Debian
 packages, which only contain dependency information.

2.7.10. Fare il port di un pacchetto nel sistema stabile

Per aggiornamenti parziali del sistema stable, è una buona idea ricompilare un pacchetto, usando il pacchetto sorgente, all'interno del suo ambiente. Questo evita massicci aggiornamenti di pacchetti a causa delle dipendenze.

Aggiungere le voci seguenti al file "/etc/apt/sources.list" di un sistema stable.

deb-src http://http.us.debian.org/debian unstable  main contrib non-free

Installare i pacchetti richiesti per la compilazione e scaricare il pacchetto sorgente, come nell'esempio seguente.

# apt-get update
# apt-get dist-upgrade
# apt-get install fakeroot devscripts build-essential
$ apt-get build-dep foo
$ apt-get source foo
$ cd foo*

Cambiare i pacchetti da installare se necessario.

Eseguire quanto segue.

$ dch -i

Incrementare la versione del pacchetto, ad esempio aggiungendo "+bp1" in "debian/changelog"

Compilare i pacchetti ed installarli nel sistema nel modo seguente.

$ debuild
$ cd ..
# debi pippo*.changes

2.7.11. Server proxy per APT

Dato che fare il mirror di intere sottosezioni dell'archivio Debian spreca spazio su disco e banda, l'utilizzo di un server proxy locale per APT è una buona idea quando si amministrano molti sistemi in una LAN. APT può essere configurato per usare server proxy web generici (http), quale squid (vedere Sezione 6.10, «Altri server di rete») come descritto in apt.confo(5) ed in "/usr/share/doc/apt/examples/configure-index.gz". La variabile d'ambiente "$http_proxy" può essere usata per scavalcare l'impostazione del server proxy nel file "/etc/apt/apt.conf".

Si sono strumenti proxy specifici per l'archivio Debian. Prima di usarli si dovrebbe contollare il BTS.

Tabella 2.19. Elenco degli strumenti proxy specifici per l'archivio Debian

pacchetto popcon dimensione descrizione
approx * V:0.3, I:0.3 3896 server proxy con cache per i file di archivio Debian (programma OCaml compilato)
apt-cacher * V:0.3, I:0.4 308 proxy con cache per file di pacchetto e sorgenti Debian (programma Perl)
apt-cacher-ng * V:0.3, I:0.4 1092 proxy con cache per la distribuzione di pacchetti software (programma in C++ compilato)
debtorrent * V:0.12, I:0.17 1185 proxy Bittorrent per scaricare pacchetti Debian (programma Python)

[Attenzione] Attenzione

Quando Debian riorganizza la struttura del suo archivio, questi strumenti proxy specializzati tendono ad aver bisogno di ritocchi al codice da parte del manutentore del pacchetto e possono non essere funzionanti per un po' di tempo. D'altra parte i server proxy web generici (http) sono più robusti e gestiscono questi cambiamenti più facilmente.

2.7.12. Piccolo archivio pubblico per i paccchetti

Exxo un esempio per creare un piccolo archivio pubblico di pacchetti compatibile con il moderno sistema APT sicuro (vedere Sezione 2.5.2, «File "Release" nella directory principale ed autenticità»). Consideriamo la situazione seguente.

  • Nome account: "pippo"
  • Nome host: "www.esempio.com"
  • Pacchetti necessari: apt-utils, gnupg ed altri
  • URL: "http://www.esempio.com/~pippo/" ( → "/home/pippo/public_html/index.html")
  • Architettura dei pacchetti: "amd64"

Creare una chiave per l'archivio APT di Pippo nel sistema server, nel modo seguente.

$ ssh pippo@www.esempio.com
$ gpg --gen-key
...
$ gpg -K
...
sec   1024D/3A3CB5A6 2008-08-14
uid                  Pippo (ARCHIVE KEY) <pippo@www.esempio.com>
ssb   2048g/6856F4A7 2008-08-14
$ gpg --export -a 3A3CB5A6 >pippo.public.key

Pubblicare il file della chiave dell'archivio per Pippo, "pippo.public.key", con l'ID di chiave "3A3CB5A6"

Creare un albero di archivio chiamato "Origin: Pippo", nel modo seguente.

$ umask 022
$ mkdir -p ~/public_html/debian/pool/main
$ mkdir -p ~/public_html/debian/dists/unstable/main/binary-amd64
$ mkdir -p ~/public_html/debian/dists/unstable/main/source
$ cd ~/public_html/debian
$ cat > dists/unstable/main/binary-amd64/Release << EOF
Archive: unstable
Version: 4.0
Component: main
Origin: Pippo
Label: Pippo
Architecture: amd64
EOF
$ cat > dists/unstable/main/source/Release << EOF
Archive: unstable
Version: 4.0
Component: main
Origin: Pippo
Label: Pippo
Architecture: source
EOF
$ cat >aptftp.conf <<EOF
APT::FTPArchive::Release {
  Origin "Pippo";
  Label "Pippo";
  Suite "unstable";
  Codename "sid";
  Architectures "amd64";
  Components "main";
  Description "Archivio pubblico di Pippo";
};
EOF
$ cat >aptgenerate.conf <<EOF
Dir::ArchiveDir ".";
Dir::CacheDir ".";
TreeDefault::Directory "pool/";
TreeDefault::SrcDirectory "pool/";
Default::Packages::Extensions ".deb";
Default::Packages::Compress ". gzip bzip2";
Default::Sources::Compress "gzip bzip2";
Default::Contents::Compress "gzip bzip2";

BinDirectory "dists/unstable/main/binary-amd64" {
  Packages "dists/unstable/main/binary-amd64/Packages";
  Contents "dists/unstable/Contents-amd64";
  SrcPackages "dists/unstable/main/source/Sources";
};

Tree "dists/unstable" {
  Sections "main";
  Architectures "amd64 source";
};
EOF

Si possono automatizzare aggiornamenti regolari del contenuto dell'archivio APT nel proprio sistema server configurando dupload.

Mettere tutti i file pacchetto in "~pippo/public_html/debian/pool/main/" eseguendo "dupload -t pippo changes_file" nel client ed avendo il file "~/.dupload.conf" che contiene quanto segue.

$cfg{'pippo'} = {
  fqdn => "www.esempio.com",
  method => "scpb",
  incoming => "/home/pippo/public_html/debian/pool/main",
  # dinstall su ftp-master invia esso stesso email
  dinstall_runs => 1,
};

$cfg{'pippo'}{postupload}{'changes'} = "
  echo 'cd public_html/debian ;
  apt-ftparchive generate -c=aptftp.conf aptgenerate.conf;
  apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release ;
  rm -f dists/unstable/Release.gpg ;
  gpg -u 3A3CB5A6 -bao dists/unstable/Release.gpg dists/unstable/Release'|
  ssh pippo@www.esempio.com  2>/dev/null ;
  echo 'Archivio dei pacchetti creato!'";

Lo script automatico postupload avviato da dupload(1) crea file di archivio aggiornati per ciascun caricamento.

Si può aggiungere questo piccolo archivio pubblico nelle righe di apt del proprio sistema client con i comandi seguenti.

$ sudo bash
# echo "deb http://www.esempio.com/~pippo/debian/ unstable main" \
   >> /etc/apt/sources.list
# apt-key add pippo.public.key
[Suggerimento] Suggerimento

Se l'archivio si trova sul file system locale, si può usare invece "deb file:///home/pippo/debian/ …".

2.7.13. Registrare e copiare la configurazione di sistema

Si può creare una copia locale dello stato delle selezioni dei pacchetti e di debconf nel modo seguente

# dpkg --get-selections '*' > selection.dpkg
# debconf-get-selections    > selection.debconf

In questo esempio "*" fa sì che "selection.dpkg" includa anche le voci dei pacchetti "eliminati".

Questi 2 file possono essere trasferiti su un altro computer ed i pacchetti installati lì con i comandi seguenti.

# dselect update
# debconf-set-selections < miaselezione.debconf
# dpkg --set-selections  < miaselezione.dpkg
# apt-get -u dselect-upgrade    # o dselect install

Se si ha in progetto di gestire molti server in un cluster con praticamente la stessa configurazione, si dovrebbe considerare l'uso di pacchetti specifici come fai.per gestire l'intero sistema.

2.7.14. Convertire o installare un pacchetto binario alieno

alien(1) permette la conversione di pacchetti binari forniti in file in formato Red Hat rpm, Stampede slp, Slackware tgz e Solaris pkg in pacchetti Debian deb. Se si vuole usare un pacchetto da una distribuzione Linux diversa da quella installata sul proprio sistema, si può usare alien per convertire il formato di pacchetto ed installarlo. alien supporta anche pacchetti LSB.

[Avvertimento] Avvertimento

alien(1) non dovrebbe essere usato per rimpiazzare pacchetti di sistema essenziali, come sysvinit, libc66, libpam-modules, ecc. In pratica, alien(1) dovrebbe essere usato solamente per pacchetti solo-binari non-free che sono conformi a LSB o con link statico. Per i software liberi si dovrebbero usare i loro pacchetti sorgenti per creare veri pacchetti Debian.

2.7.15. Estrarre pacchetti senza dpkg

In qualsiasi ambiente *nix i contenuti di un pacchetto "*.deb" possono essere estratti senza usare dpkg(1) utilizzando le utilità standard ar(1) e tar(1).

# ar x /percorso/di/dpkg_<versione>_<arch>.deb
# ls
total 24
-rw-r--r-- 1 bozo bozo  1320 2007-05-07 00:11 control.tar.gz
-rw-r--r-- 1 bozo bozo 12837 2007-05-07 00:11 data.tar.gz
-rw-r--r-- 1 bozo bozo     4 2007-05-07 00:11 debian-binary
# mkdir control
# mkdir data
# tar xvzf control.tar.gz -C control
# tar xvzf data.tar.gz -C data

Si può anche navigare il contenuto del pacchetto usando il comando mc.

2.7.16. Ulteriori letture sulla gestione dei pacchetti

Si possono ottenere molte altre informazioni sulla gestione dei pacchetti dalla documentazione seguente.