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


39

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 vecchie versioni, ma le versioni che sono vecchie di un paio di settimane) dei pacchetti Debian? Dovrebbe essere possibile automatizzare il processo di installazione in modo generale.


1
In qualche modo dipende dal software utilizzato per configurare il repository. Reprepro, iirc, consente solo una singola versione di ciascun pacchetto
muru

2
stablerimane coerente, almeno fino al rilascio del punto successivo. stable-updates, testing e unstable contengono solo l'ultima versione di un determinato pacchetto. Per qualsiasi altra cosa, dovresti guardare su archive.debian.org (o snapshot.debian.org come menzionato nella risposta di SK)
cas

5
C'è un motivo per cui non stai eseguendo il tuo repository su cui puoi controllare la politica di sostituzione e le versioni dei pin (che avranno il vantaggio di rendere locali le future installazioni automatiche)?
Eric Towers

2
Il nuovo linuxnome pkg è un'eccezione: in generale, i pacchetti di Debian stable hanno lo stesso nome di pacchetto e cambiano solo il numero di versione. linux-image-amd64non cambia mai nome e dipende sempre dalle ultime linux-image-4.9.0-*. Il nuovo linux-image-4.9.0-*nome pkg contrassegna le modifiche incompatibili ABI del kernel richieste per eseguire il backport di alcune correzioni di bug e consente di gestire la necessaria ricompilazione di moduli personalizzati (dkms, ecc.). Allo stesso modo per linux-headers-*.
ignis

1
Qual è l'idea alla base di questi aggiornamenti apt-get changelog packagename
ignis

Risposte:


65

Essere in grado di riprodurre un setup specifico, 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 di ciò è che si presta molta attenzione per garantire che gli aggiornamenti dei pacchetti 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, ad esper correggere un bug grave (inclusi 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 i meta-pacchetti che si può tirare in, invece di codificare l'ABI ( linux-image-amd64, linux-headers-amd64, ecc).

Esiste tuttavia una soluzione alternativa per la tua situazione: ogni sorgente e pacchetto binario pubblicati sono archiviati su snapshot.debian.org . Quando crei un'impostazione con versione, puoi scegliere l'istantanea corrispondente (ad esempio, una delle 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, ti preghiamo di utilizzare 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 per quanto riguarda i pacchetti sorgente è leggermente più complessa e gli archivi contengono più versioni di alcuni pacchetti sorgente in una data versione, a causa delle dipendenze delle licenze. Ma non è rilevante qui. A rigor di termini, Debian fornisce versioni multiple di alcuni binari nelle versioni supportate: la versione corrente nella versione corrente, insieme a tutti gli aggiornamenti nei repository di sicurezza e nei repository di aggiornamento; questi ultimi vengono ripiegati nella versione successiva, quindi è possibile mantenere una configurazione di sistema riproducibile e controllata dalla versione senza ricorrere alle istantanee, a condizione che lo si aggiorni ogni volta che viene rilasciato un rilascio punti.)


Si noti che a volte sono disponibili alcune versioni precedenti - apt-cache madison packagenamemostrerà tutte le versioni che aptpossono vedere tramite repository configurati.
Ivanivan,

5
(Si prega di non sovraccaricare i server di snapshot / archivio utilizzandoli inutilmente, invece di un mirror vicino. Quindi lasciare il proprio mirror normale nel proprio source.list con una priorità maggiore rispetto all'istantanea, quindi i pacchetti ancora disponibili da esso possono essere recuperati in questo modo .)
Peter Cordes,

3
Giusto per verificare di aver capito bene: in pratica, non si tratta delle versioni che specifico durante l'installazione dei pacchetti (perché le versioni precedenti potrebbero non essere disponibili), ma piuttosto lo stato del repository di pacchetti che sto usando. Quindi, se voglio un Debian 9.8 "fresco", ho bisogno del repository di pacchetti in quello stato (es. Un'istantanea o un repository che ho creato io stesso), e quindi, naturalmente, il pacchetto linux-header- * corretto continua ad essere disponibile . Se voglio migrare su Debian 9.9, ottengo il repository dei pacchetti nello stato associato ed eseguo apt-get dist-upgrade. È corretto?
Flo

2
Sì, è corretto.
Stephen Kitt,

3
@Flo noti, che le versioni dei punti (come debian X.9 o X.8) sono pensate solo per iso scaricabili, quindi le nuove installazioni non scaricano tonnellate di pacchetti. Nei repository, non c'è distinzione tra nessuna delle release point, si ottiene sempre il pacchetto più recente.
Braiam,

16

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 si sa 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 è in grado di creare correttamente mirror dei repository. È possibile scegliere i pacchetti per il mirroring, creare istantanee dei contenuti 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.


8

Mentre la risposta di Stephen Kitt è 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 dei file .debda /var/cache/apt/archives/. Puoi anche usare apt-get download.

Quando si ripristina un'installazione di sistema, è necessario essere molto severi aptper evitare l'attivazione di azioni automatiche potenzialmente pericolose.

Probabilmente sarà più facile da usare dpkgdirettamente per installare esattamente quello che vuoi.


6
Un approccio ancora migliore IMO sarebbe quello di utilizzare una cache APT locale. Ciò evita i problemi nel terzo paragrafo e evita anche di dover raccogliere /var/cache/apt.
Stephen Kitt,

3
Ci sono due varianti di questo: uno è usare qualcosa come apt-mirror per clonare un intero repository, l'altro è scaricare solo pacchetti e dipendenze specifici . Quindi eseguire lo snapshot della directory - ad es. Con btrfs as pkgs-20190501, quindi pubblicare la directory dello snapshot come repository. Al momento della compilazione, mettere il controllo di versione repo URL (ad esempio http://debmirror/pkgs-20190501/...) in sources.list, quindi eseguire apt-get update, apt-get install $ pkgs, ecc
bain
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.