Configurare apt per cancellare i pacchetti dalla cache

Sezione dedicata alle problematiche sull'uso dei tool di installazione e gestione di pacchetti, in una distribuzione Debian-based.
Rispondi
Aki
Hero Member
Hero Member
Messaggi: 9970
Iscritto il: 27/12/2007, 16:59

Configurare apt per cancellare i pacchetti dalla cache

Messaggio da Aki »

Ciao,

A vostra conoscenza, è possibile configurare apt in modo che, durante un upgrade o dist-upgrade, subito dopo l'installazione con successo di ciascun singolo pacchetto "deb" tramite dpkg e prima di passare all'installazione del pacchetto successivo, ne effettui la cancellazione dalla cache dei pacchetti scaricati dalle rete in modo da liberare spazio sul disco (sopratutto sui sistemi con poco spazio libero sul disco) ?

Grazie.
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ Debian - The universal operating system
⢿⡄⠘⠷⠚⠋⠀ https://www.debian.org
⠈⠳⣄⠀
Avatar utente
azioga
Hero Member
Hero Member
Messaggi: 1330
Iscritto il: 03/09/2018, 7:53

Re: Configurare apt per cancellare i pacchetti dalla cache

Messaggio da azioga »

Ho trovato questo, da provare:

Codice: Seleziona tutto

sudo sh -c "echo 'DSELECT::Clean "always";' >> /etc/apt/apt.conf.d/99AutomaticClean"
Selky
wiki member
wiki member
Messaggi: 1628
Iscritto il: 30/12/2011, 1:00

Re: Configurare apt per cancellare i pacchetti dalla cache

Messaggio da Selky »

Ciao Aki,
forse ho capito male e nel caso mi scuso.
A me piace molto utilizzare un file apt.conf dove imposto alcune cose relative soprattutto all'output perché lo voglio ordinato.
Detto questo, non so (perché non l'ho mai utilizzato) se
Clean
Modalità di pulizia della cache; i valori permessi sono always, prompt, auto, pre-auto e never. always e prompt rimuovono tutti i pacchetti dalla cache dopo ogni aggiornamento; prompt (il valore predefinito) lo fa in modo condizionato. auto rimuove solo quei pacchetti che non sono più scaricabili (ad esempio perché sostituiti da una nuova versione). pre-auto effettua questa azione prima di scaricare i nuovi pacchetti.
può essere utile.
Gli esempi sono in

Codice: Seleziona tutto

/usr/share/doc/apt/examples/apt.conf
/usr/share/doc/apt/examples/configure-index.gz
Poi va beh c'è anche questo ma non penso sia quello che cerchi:
Clean-Installed
Attiva in modo predefinito. Quando attiva, la funzionalità autoclean rimuove dalla cache ogni pacchetto che non può più essere scaricato. Se disattivata, allora sono esclusi dalla rimozione anche i pacchetti che sono installati; fare attenzione però al fatto che APT non fornisce alcun mezzo diretto per reinstallarli.
Avatar utente
mark
Hero Member
Hero Member
Messaggi: 871
Iscritto il: 10/01/2007, 16:53

Re: Configurare apt per cancellare i pacchetti dalla cache

Messaggio da mark »

una soluzione alternativa potrebbe essere cambiare la cartella dove vengono scaricati i pacchetti, puntando ad una partizione/disco meno utilizzato, che deve essere sempre montato quando si scaricano pacchetti:
change location of the “lists” and “archives” folders
Aki
Hero Member
Hero Member
Messaggi: 9970
Iscritto il: 27/12/2007, 16:59

Re: Configurare apt per cancellare i pacchetti dalla cache

Messaggio da Aki »

Ciao a tutti,

Vi ringrazio innanzitutto per le risposte rapide, dettagliate e puntuali.

Per quanto riguarda "DSELECT::Clean" nella mia installazione (una Debian Buster "standard") dselect non è installato e, quindi, credo non sia applicabile (dselect è un front-end analogo ad apt-get e che lo ha preceduto).

Per quanto riguarda il parametro "Clean" in /etc/apt/apt.conf è la stessa che ha indicato azioga:
APT IN DSELECT
Quando APT viene usato come metodo per dselect(1) svariate direttive di configurazione controllano il comportamento
predefinito; queste sono nella sezione DSelect.

Clean
Modalità di pulizia della cache; i valori permessi sono always, prompt, auto, pre-auto e never. always e
prompt rimuovono tutti i pacchetti dalla cache dopo ogni aggiornamento; prompt (il valore predefinito) lo fa in

modo condizionato. auto rimuove solo quei pacchetti che non sono più scaricabili (ad esempio perché sostituiti
da una nuova versione). pre-auto effettua questa azione prima di scaricare i nuovi pacchetti.
In ogni caso, credo che il "clean" si applichi alla fine dell'upgrade o dist-upgrade e non dopo l'installazione di ogni singolo pacchetto.

Per quanto riguarda la possibilità di collocare la cache (anche temporaneamente) nella partizione di un altro disco, è sicuramente fattibile e, se un altro disco è disponibile, è forse il modo più pulito per ottenere il risultato senza modificare le configurazione e/o il funzionamento ordinario di apt.

Sulla base delle vostre osservazioni e della richiesta di chiarimenti di Selky, provo, a specificare meglio il quesito, facendo un esempio, anche per approfondire come apt (in qualità di front-end verso il gestore di pacchetti) utilizza il gestore dei pacchetti ("package manager) che in Debian Buster è il programma dpkg.

Ad esempio, provando ad installare il pacchetto "hello" (presente nei repository debian), questo è l'output di apt quando si chiede di mostrare come dpkg è invocato dal comando apt-get (che, a sua volta, è invocato dal comando apt):

Codice: Seleziona tutto

root@debian:~# apt-get -o Debug::pkgDPkgPM=true install hello
Lettura elenco dei pacchetti... Fatto
Generazione albero delle dipendenze       
Lettura informazioni sullo stato... Fatto
I seguenti pacchetti NUOVI saranno installati:
  hello
0 aggiornati, 1 installati, 0 da rimuovere e 0 non aggiornati.
È necessario scaricare 0 B/56,1 kB di archivi.
Dopo quest'operazione, verranno occupati 287 kB di spazio su disco.
/usr/bin/dpkg --status-fd 27 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/hello_2.10-2_amd64.deb 
/usr/bin/dpkg --status-fd 27 --configure --pending 
Come vedete, dpkg è invocato due volte:

1) la prima con il comando /usr/bin/dpkg --unpack rispetto al pacchetto della cache di apt ; questo comando decomprime il contenuto del nuovo pacchetto, attività preceduta da altre attività qualora il pacchetto fosse già installato ad una precedente versione; qualora la richiesta di installazione fosse per più pacchetti, comparirebbe qui l'elenco dei pacchetti da installare dalla cache;

2) la seconda con il comando /usr/bin/dpkg --configure --pending ; questo comando fa sì che dpkg configuri tutti i pacchetti che, dal registro dei pacchetti installati, risultano in stato di "unpacked"; dal manuale di dpkg:
Package states
[..]
unpacked
The package is unpacked, but not configured.
Quello che ipotizzavo di provare a realizzare è fare in modo che il pacchetto scaricato nella cache di apt fosse cancellato tra il comando 1) e 2), con il beneficio di occupare meno spazio, ma con l'indubbio svantaggio che in caso di errori di configurazione del pacchetto si renderebbe necessario un nuovo download del pacchetto.
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ Debian - The universal operating system
⢿⡄⠘⠷⠚⠋⠀ https://www.debian.org
⠈⠳⣄⠀
Avatar utente
s3v
Hero Member
Hero Member
Messaggi: 5964
Iscritto il: 31/12/2008, 11:54

Re: Configurare apt per cancellare i pacchetti dalla cache

Messaggio da s3v »

Qui dovresti trovare quello che cerchi:
https://sources.debian.org/src/apt/2.1. ... ure-index/

Magari disabilitando completamente la cache (cancelli i file *.bin che contengono la cache e imposti il valore opportuno in apt.conf.d a "") ottieni quello che desideri.
In particolare:

Codice: Seleziona tutto

Dir::Cache
Dir::Cache::pkgcache
Dir::Cache::archives
Avatar utente
azioga
Hero Member
Hero Member
Messaggi: 1330
Iscritto il: 03/09/2018, 7:53

Re: Configurare apt per cancellare i pacchetti dalla cache

Messaggio da azioga »

questo non è elegantissimo, ma potrebbe funzionare ;)

Codice: Seleziona tutto

DPkg::Post-Invoke {"/bin/rm -f /var/cache/apt/archives/*.deb || true";};
Avatar utente
mark
Hero Member
Hero Member
Messaggi: 871
Iscritto il: 10/01/2007, 16:53

Re: Configurare apt per cancellare i pacchetti dalla cache

Messaggio da mark »

ps. un disco di rete sarebbe ipotizzabile?
Selky
wiki member
wiki member
Messaggi: 1628
Iscritto il: 30/12/2011, 1:00

Re: Configurare apt per cancellare i pacchetti dalla cache

Messaggio da Selky »

Questa discussione é un modo per apprendere cose nuove, ormai la figuraccia con Aki l'ho fatta quindi...

Ho trovato ma per aptitude sempre da inserire nel file apt-conf

Codice: Seleziona tutto

Opzione: Aptitude::Clean-After-Install
Predefinito: false
Descrizione: Se questa opzione è true, aptitude ripulisce tutti i file nella directory della cache dei pacchetti (vedere Azioni → Pulisci la cache dei pacchetti) dopo l'installazione con successo di pacchetto (o operazioni simili). Questa opzione è simile a Aptitude::Autoclean-After-Update. 
Però Aki con aptitude non ho confidenza, probabilmente pure questa indicazione é sbagliata perché la descrizione riporta

Codice: Seleziona tutto

dopo l'installazione con successo di pacchetto
Ombra
wiki member
wiki member
Messaggi: 479
Iscritto il: 11/08/2007, 18:06
Località: Bologna

Re: Configurare apt per cancellare i pacchetti dalla cache

Messaggio da Ombra »

Quello che ipotizzavo di provare a realizzare è fare in modo che il pacchetto scaricato nella cache di apt fosse cancellato tra il comando 1) e 2)
Ciao a tutti,
Leggendo la discussione mi è sorta una curiosità: dentro ogni deb ci sono due archivi (data e control).
Sicuramente durante l'unpack dpkg spacchetta l'archivio "data" nel sistema, mentre a leggere la man di dpkg sembra che "control", che contiene il postinst script, venga spacchettato durante il configure.
In quale directory viene conservato l'archivio "control" ( nel tempo che intercorre tra unpack e configure)?

Il punto, giusto per tornare a tema col quesito iniziale, è che "control" contiene lo script postinst che viene eseguito durante il configure e bisogna essere sicuri che lo script sia disponibile in quella fase..
Aki
Hero Member
Hero Member
Messaggi: 9970
Iscritto il: 27/12/2007, 16:59

Re: Configurare apt per cancellare i pacchetti dalla cache

Messaggio da Aki »

Ombra ha scritto:[..] sembra che "control", che contiene il postinst script, venga spacchettato durante il configure. In quale directory viene conservato l'archivio "control" ( nel tempo che intercorre tra unpack e configure)?
Sono archiviati in /var/lib/dpkg/info/ dove gli script di configurazione del pacchetto sono conservati prima della configurazione del pacchetto (tra unpack e configure) ed anche dopo la configurazione del pacchetto.
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ Debian - The universal operating system
⢿⡄⠘⠷⠚⠋⠀ https://www.debian.org
⠈⠳⣄⠀
Rispondi