Quando e perché dovrei usare apt-get update?


15

Domanda generale:

Qualcuno potrebbe spiegare cosa fa il comando apt-get updatee quando dovrei davvero usarlo?


Osservazioni

Si prega di dare una risposta dettagliata . Non solo una copia della pagina man, a meno che la tua versione non sia davvero dettagliata (ho inserito una definizione dalla pagina man in basso).

apt-get update : usato per risincronizzare i file di indice del pacchetto dalle loro fonti. Gli indici dei pacchetti disponibili vengono recuperati dalle posizioni specificate in /etc/apt/sources.list(5). Un aggiornamento deve essere sempre eseguito prima di un aggiornamento o dist-upgrade.


Sub-domande:

  • Dove è memorizzato l'indice del pacchetto? Su un database? Su un file?
  • Cosa succede se faccio apt-get installsenza aggiornare la cache? È possibile che il pacchetto remoto non esista più e che il collegamento venga interrotto?
  • C'è qualche politica concordata sui repository deb? Ad esempio, un repository dovrebbe contenere solo l'ultima versione di un pacchetto o, al contrario, dovrebbe contenere tutte le versioni disponibili per una versione di distribuzione specifica?

Contesto

Faccio la mia domanda perché sto studiando il framework Docker . Una delle sue caratteristiche è il Dockerfile , che consente di creare una sorta di immagine del sistema operativo eseguendo alcune istruzioni da questo file. Una proprietà di questa immagine è che dovrebbe essere sempre la stessa, qualunque sia il contesto (tempo di costruzione, ecc.).

Temo che se avessi lanciato il apt-get updatecomando in un momento diverso, il risultato sarebbe diverso e quindi le mie immagini sarebbero diverse.


Penso che questo post possa servire da articolo wiki per come porre una domanda di alto livello. Molto utile.
Zerodf,

Risposte:


12

apt-get update scarica l'elenco dei pacchetti disponibili.

L'elenco dei pacchetti può cambiare nel tempo. Vengono aggiunti nuovi pacchetti e i vecchi pacchetti vengono rimossi. Pertanto, se si dispone di una cache molto vecchia e si tenta di eseguirne una apt-get install, potrebbe provare a scaricare un pacchetto che non esiste più.
Per quanto tempo un vecchio pacchetto viene conservato in un repository dipende dal maintainer del repository (la tua distribuzione). Pertanto, se stai usando qualcosa come docker, in cui la cache potrebbe essere molto obsoleta, dovresti sempre eseguirlo apt-get updateprima di installare qualsiasi pacchetto.

Il motivo della rimozione e dell'aggiunta di pacchetti è principalmente la correzione di bug e gli aggiornamenti di sicurezza. Tuttavia, se si utilizzano repository di terze parti come PPA, tutto va bene.

Quando si utilizza qualcosa come docker per la containerizzazione in un ambiente aziendale, è necessario creare il contenitore una volta, quindi spostarlo attraverso i vari ambienti di rilascio (sviluppo, gestione temporanea, produzione) e non ricostruire il contenitore ogni volta. Questo assicurerà di non avere un contenitore diverso che non è stato testato.

Per rispondere alla tua domanda di dove vivono i file di cache, /var/lib/apt/lists.


Bella risposta! Grazie! Voglio reagire per il paragrafo "(...) non ricostruire il contenitore ogni volta. Questo farà in modo di non avere un contenitore diverso che non sia stato testato." Ho letto che una buona pratica è non usare mai apt-get upgrade. Uno dei motivi sarebbe: "Produce anche immagini incoerenti perché non hai più una fonte di verità su come dovrebbe essere eseguita l'applicazione e quali versioni di dipendenze sono incluse nell'immagine". Non è lo stesso problema con apt-get updateallora? E Dockerfile non dovrebbe garantire l'immagine?
Pierre-Jean,

2
Tipo. apt-get updateinteresserà solo i pacchetti appena installati. I pacchetti esistenti verranno aggiornati solo se necessario dai nuovi pacchetti (questo dovrebbe essere minimo). Con apt-get upgradel'aggiornamento di tutti i pacchetti, compresi quelli esistenti, si ottiene un'immagine notevolmente diversa. Sebbene ciò possa comportare un risultato diverso ogni volta che si genera dal file docker, personalmente non penso che questo sia un problema serio se si passa attraverso una versione multi-ambiente. Penso che questo sia più un problema se distribuisci il file docker ad altre persone e lo fai costruire.
Patrick,

0

Qualcuno potrebbe spiegare cosa fa il comando apt-get update e quando dovrei davvero usarlo?

apt-get update scarica gli indici aggiornati dai repository di pacchetti della distribuzione, elencando tutti i pacchetti disponibili e le loro versioni precise.

Le distribuzioni comuni come Ubuntu e Debian sono generalmente conservative e retrocompatibili nelle loro offerte di pacchetti, quindi le versioni non cambieranno molto nel tempo; cambieranno a causa di aggiornamenti di sicurezza o correzioni di bug. Ad esempio, mysql potrebbe essere aggiornato da 5.7.18a 5.7.19ma non a 6.x.

Dove è memorizzato l'indice del pacchetto? Su un database? Su un file?

Di solito è memorizzato in uno o più file all'interno /var/lib/apt. Nel contesto di Docker, questi file sono all'interno dell'immagine. Quando creano il Dockerfile, vengono archiviati nei nuovi livelli del filesystem che vengono creati e resi persistenti come l'immagine appena costruita.

Cosa succede se eseguo apt-get install senza aggiornare la cache?

Puoi provare a scaricare versioni di pacchetti che non esistono più. Questo è abbastanza comune nelle macchine virtuali, ma è possibile anche all'interno dei container se i repository di distribuzione hanno rilasciato nuovi pacchetti dopo la creazione dell'immagine di base. Potrebbe non esserci alcun coordinamento tra i manutentori della distribuzione e i manutentori Dockerfile, che sono a valle della distribuzione e possono essere di numero maggiore. Esiste un solo repository Debian ma migliaia di jessieimmagini contenitore e Dockerfile basati su.

Inoltre, alcune immagini a monte come Ubuntu rimuovono l'indice scaricato per rendere l'immagine più piccola ed evitare file obsoleti lì. Quindi si prevede che un indice aggiornato debba essere scaricato quando si costruisce sopra un'immagine di base, non per ogni versione di un'immagine di base da spedire con l'indice più recente.

È possibile che il pacchetto remoto non esista più e che il collegamento venga interrotto?

Sicuramente, perché le versioni memorizzate nell'indice sono molto precise come 5.7.19(semplificazione; sono più simili a 5.7.19-0ubuntu1).

C'è qualche politica concordata sui repository deb? Ad esempio, un repository dovrebbe contenere solo l'ultima versione di un pacchetto o, al contrario, dovrebbe contenere tutte le versioni disponibili per una versione di distribuzione specifica?

È comune che le vecchie versioni secondarie vengano rimosse rapidamente quando è disponibile un aggiornamento; Suppongo che questo sia per risparmiare spazio sui server poiché i binari possono pesare diverse decine di megabyte, moltiplicati per tutte le versioni e le architetture supportate. Quindi di solito è impossibile appuntare, diciamo, mysql-5.7.18nel successivo apt-get install; non appena mysql-5.7.19viene rilasciato nella distribuzione, quello precedente verrà rimosso.

Per essere onesti con Docker, questo non determinismo di apt-get updateè un problema che viene introdotto come parte della gestione dei pacchetti di ogni distribuzione. Avresti lo stesso problema nel provare a costruire ripetutamente una macchina virtuale EC2 o Vagrant.

Alcuni amministratori di sistema utilizzano servizi come Aptly per eseguire il mirroring dei repository originali ed essere in grado di bloccare una versione particolare, ma si corre il rischio di perdere gli aggiornamenti di sicurezza a meno che non si disponga di un processo separato eseguito di frequente per testare gli aggiornamenti e modificare ciò che si stanno bloccando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.