Apt-mark

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
APT
Arrow left.png

Gestori di pacchetti

Comandi utili

Configurazione del sistema

Altro

Arrow right.png



Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

apt-mark è un comando per visualizzare e modificare lo stato dei pacchetti installati nel sistema, in particolare se sono stati installati in automatico (stato: auto) o manualmente (stato: manual), e se futuri aggiornamenti sono bloccati (stato: hold) oppure no.

Fa parte del pacchetto apt, assieme per esempio a:

  • apt-get per svolgere le operazioni di installazione, aggiornamento e rimozione dei pacchetti;
  • apt-cache per effettuare operazioni di ricerca su tutti i pacchetti di Debian.

Comandi principali

Modifica

Con privilegi di amministratore i comandi di questa sezione modificano gli stati dei pacchetti scelti.

Lo stato hold ha effetto anche per dpkg, mentre auto e manual soltanto per APT, in quanto è legato al concetto di dipendenze dei pacchetti.

auto
# apt-mark auto pacchetto1 pacchetto2 ... pacchettoN

Modifica lo stato della lista dei pacchetti come installati in automatico, e quindi installati solo per soddisfare le dipendenze di altri pacchetti. Si noti che un pacchetto con tale stato può essere rimosso automaticamente con apt-get autoremove oppure durante un aggiornamento, in base alle impostazioni del comando utilizzato, se non c'è almeno un pacchetto installato manualmente che dipende da esso.

manual
# apt-mark manual pacchetto1 pacchetto2 ... pacchettoN

Modifica lo stato della lista dei pacchetti come installati manualmente, e quindi segnalati al sistema APT come richiesti specificatamente dall'utente. Non saranno quindi rimovibili in automatico durante un aggiornamento o in seguito alla rimozione di altri pacchetti, anche se non essenziali.

hold
# apt-mark hold pacchetto1 pacchetto2 ... pacchettoN

Previene l'aggiornamento di tutti i pacchetti, marcandoli come hold.

unhold
# apt-mark unhold pacchetto1 pacchetto2 ... pacchettoN

Rimuove il blocco sull'aggiornamento dei pacchetti, rimuovendo lo stato hold, se precedentemente impostato.

Visualizza

Questi comandi non richiedono alcun privilegio, e si limitano a listare i pacchetti del sistema secondo i criteri scelti.

showauto
$ apt-mark showauto

Lista tutti i pacchetti installati automaticamente sul sistema per soddisfare altre dipendenze.

showmanual
$ apt-mark showmanual

Lista tutti i pacchetti installati manualmente sul sistema, compresi quelli in fase di installazione.

showhold
$ apt-mark showhold

Lista tutti i pacchetti installati sul sistema per i quali sono impediti futuri aggiornamenti.

Esportare e importare la lista dei pacchetti installati e il loro stato

Questa operazione può essere effettuata solo se si utilizza la stessa release di Debian e la stessa architettura sia sulla macchina da cui si esporta sia su quella in cui si importano i pacchetti. Attenzione va posta inoltre per quelli specifici all'hardware, se le due macchine non sono uguali, e si consiglia in tal caso di effettuare prima una simulazione, prestando attenzione alle operazione che verrebbero svolte, modificando all'occorrenza i file generati.

È efficace anche usata sulla stessa macchina, per riportare tutto il software installato con APT a una precedente configurazione.

L'esportazione si effettua con apt-mark, mentre si utilizza apt-mark e anche apt-get per importare la lista.

Esportare

Creo due file (lista_pacchetti_manual.txt e lista_pacchetti_auto.txt) nella cartella corrente, con le liste dei pacchetti installati manualmente e in automatico:

$ apt-mark showmanual > lista_pacchetti_manual.txt
$ apt-mark showauto > lista_pacchetti_auto.txt

Posso visualizzare e modificare le liste, che sono semplici file di testo, e poi salvarli da qualche parte per importarli in seguito.

Soltanto la prima lista, con pacchetti installati manualmente, sarà utilizzata effettivamente. L'altra serve soltanto in caso di problemi, per poter risalire a tutti i pacchetti precedentemente installati.

Importare

Sulla macchina in cui intendo importare la lista dei pacchetti copio il file di testo contenente la lista dei pacchetti installati manualmente (lista_pacchetti_manual.txt, se non abbiamo scelto un altro nome), creata nella sezione precedente, in una directory nota (per esempio /tmp).

Con privilegi di amministratore marco tutti i pacchetti attualmente installati come installati in automatico:

# apt-mark auto $(apt-mark showmanual)

Installo i pacchetti installati precedentemente, importandoli dalla lista dei pacchetti, e li marco come installati manualmente (è sufficiente il singolo comando apt-get install):

# apt-get install $(cat /tmp/lista_pacchetti_manual.txt)

Infine rimuovo tutti quelli non più necessari:

# apt-get autoremove

A questo punto, in un sistema con la stessa architettura e la stessa release, saranno presenti soltanto i pacchetti installati manualmente, come contenuti nella lista precedentemente esportata, e le loro dipendenze. E saranno preservati anche i loro stati di installazione (manuale o automatico).

Controllare lo stato di un pacchetto

I comandi showauto, showmanual e showhold possono essere usati con degli argomenti, per specificare l'insieme di pacchetti tra cui limitare la selezione degli stati desiderati.

Quindi per esempio:

$ apt-mark showauto nomepacchetto

restituisce nomepacchetto soltanto se è stato installato in automatico, e niente altrimenti (pacchetto non installato oppure installato manualmente).

Mentre per controllare se è installato manualmente, il seguente comando deve restituire nomepacchetto:

$ apt-mark showmanual nomepacchetto

In uno script

Per controllare lo stato di un pacchetto (nomepacchetto) in uno script quindi è sufficiente controllare se viene restituito il nome del pacchetto oppure no:

# inserire il nome del pacchetto nella variabile
pacchetto="nomepacchetto"

if [ "$(apt-mark showauto "$pacchetto")" = "$pacchetto" ]; then
   echo "Pacchetto installato automaticamente"

elif [ "$(apt-mark showmanual "$pacchetto")" = "$pacchetto" ]; then
   echo "Pacchetto installato manualmente"

else
   echo "Pacchetto non installato"

fi

Purtroppo non esiste un altro modo, se non ricorrendo ad aptitude, dato che per apt-mark non c'è nemmeno un valore di ritorno da controllare.

Alternativamente si può controllare l'installazione con dpkg-query, contenuto in un pacchetto essenziale del sistema, in modo da usare soltanto una volta apt-mark per leggere gli stati, che è più lento di dpkg-query:

# inserire il nome del pacchetto nella variabile
pacchetto="nomepacchetto"

# stato del pacchetto (eliminando il secondo carattere)
stato=$(dpkg-query -f '${db:Status-Abbrev}' -W "$pacchetto" 2> /dev/null) &&
stato=${stato%?} ||
   stato=""
if [ "$stato" != "i" ]; then
   echo "Pacchetto non installato"

elif [ "$(apt-mark showauto "$pacchetto")" = "$pacchetto" ]; then
   echo "Pacchetto installato automaticamente"

else
   echo "Pacchetto installato manualmente"

fi

Manpages

man apt-mark




Guida scritta da: HAL 9000 13:01, 19 apr 2015 (CEST) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

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