risposta-alla-domanda-sullo-sviluppo-web-bd.com

Perché le versioni precedenti dei pacchetti Debian scompaiono nei repository dei pacchetti? (altamente rilevante per la configurazione del sistema controllato dalla versione)

Scenario: nella configurazione del sistema controllata dalla versione basata su Puppet, Chef ecc., È necessario riprodurre un determinato stato del sistema. Questo viene fatto specificando esplicitamente le versioni del pacchetto di sistema.

Di recente abbiamo riscontrato un problema in cui alcune versioni dei pacchetti mancavano nei repository Debian. Un esempio: il pacchetto "patch" era richiesto nella versione 2.7.5-1 + deb9u1, ma era disponibile solo 2.7.5-1 + deb9u2. Un altro esempio ancora più grave: è richiesto "linux-headers-4.9.0-9-common" (a causa dell'installazione del kernel associato) ed è disponibile solo "linux-headers-4.9.0-11-common".

Ciò rende impossibile riprodurre un certo stato di un sistema.

I pacchetti di cui sopra sono solo esempi (che in effetti ho riscontrato). Sono interessato a comprendere e risolvere il problema generale.

Qual è l'idea alla base di questi aggiornamenti, pacchetti "in via di estinzione" e versioni dei pacchetti?

Dove posso trovare le versioni precedenti (non le versioni più vecchie, ma quelle vecchie di un paio di settimane) dei pacchetti Debian? Dovrebbe essere possibile automatizzare il processo di installazione in modo generale.

39
Flo

Essere in grado di riprodurre una configurazione specifica, fino alla versione esatta, è il tuo requisito , non quello di Debian.

Debian supporta solo una singola versione di ciascun pacchetto binario in una data versione; la contropartita è che si presta molta attenzione a garantire che gli aggiornamenti del pacchetto in una data versione non introducano regressioni e, quando tale cura non è possibile, per documentare tale fatto. Mantenere più versioni di un determinato pacchetto aumenterebbe solo il carico di supporto e i requisiti di test: ad esempio, i manutentori dei pacchetti dovrebbero testare i pacchetti aggiornati rispetto a tutte le versioni disponibili delle librerie che usano, anziché solo le versioni attualmente supportate ... I pacchetti vengono aggiornati in una versione stabile solo quando veramente necessario, cioè per correggere un bug grave (compresi i problemi di sicurezza). Nel caso del kernel, questo a volte significa che l'ABI del kernel cambia e il nome del pacchetto cambia di conseguenza (per forzare la ricostruzione di pacchetti dipendenti); ci sono meta-pacchetti che puoi estrarre invece di codificare l'ABI (linux-image-AMD64, linux-headers-AMD64, eccetera.).

Esiste tuttavia una soluzione alternativa per la tua situazione: ogni pacchetto binario e sorgente pubblicato viene archiviato su snapshot.debian.org . Quando crei un'impostazione con versione, puoi scegliere l'istantanea corrispondente (ad esempio, una delle le istantanee di settembre 2019 ) e usarla come URL del repository:

deb https://snapshot.debian.org/archive/debian/20190930T084755Z/ buster main

Se finisci per fare affidamento su questo, utilizza un mirror di memorizzazione nella cache di qualche tipo, ad esempio Apt-Cacher NG . Ciò non solo ridurrà il carico sul server di snapshot, ma assicurerà di avere una copia locale di tutti i pacchetti necessari.

(La situazione relativa ai pacchetti di origine è leggermente più complessa e gli archivi contengono più versioni di alcuni pacchetti di origine in una data versione, a causa delle licenze dipendenze, ma non è rilevante qui. A rigor di termini, Debian fornisce versioni multiple di alcuni binari nelle versioni supportate: la versione corrente nella versione attuale, insieme a tutti gli aggiornamenti nei repository di sicurezza e repository di aggiornamento; questi ultimi sono piegati in la prossima versione del punto. Pertanto, mantenere una configurazione di sistema riproducibile e controllata dalla versione è possibile senza ricorrere a istantanee, purché si aggiorni ogni volta che viene rilasciata una versione del punto.)

65
Stephen Kitt

Non fare affidamento su server non sotto il tuo controllo per riprodurre uno stato di sistema specifico. Anche se i server Debian sono abbastanza affidabili, non sai mai cosa potrebbe accadere in futuro. Ciò è particolarmente rilevante con altri repository, che potresti utilizzare.

È necessario mantenere il proprio mirror per ottenere stati di sistema riproducibili. In questo modo puoi persino avere uno stato di produzione per i tuoi sistemi normali e diversi stati di test per nuove configurazioni.

Lo strumento di gestione dei repository giustamente è in grado di creare mirror dei repository. È possibile scegliere i pacchetti per il mirroring, creare istantanee del contenuto del repository in un determinato momento e combinare più mirror o snapshot in un unico repository. In questo modo è possibile riprodurre completamente gli stati di sistema in grado.

16
Charleston

Sebbene la risposta di Stephen Kitt sia certamente una possibile soluzione, penso che sarebbe più sicuro per te conservare le tue copie dei pacchetti necessari.

Quando si registra un'installazione di sistema, assicurarsi di salvare copie del .deb- file da /var/cache/apt/archives/. Puoi anche usare apt-get download.

Quando ripristini un'installazione di sistema, devi essere molto severo con apt per evitare di innescare azioni automatiche potenzialmente pericolose.

Probabilmente sarà più facile usare dpkg direttamente per installare esattamente quello che vuoi.

8
Stig Hemmer