Come posso eseguire Debian stable ma installare alcuni pacchetti dai test?


206

Supponiamo che tu stia eseguendo un server e non desideri eseguire l'aggiornamento a Testing (Squeeze) da Stable (Lenny) per installare solo uno o due pacchetti richiesti.

Qual è il modo migliore per installare solo determinati pacchetti dai test?


2
Questo è ciò che dice l'ultima documentazione ufficiale: pacchetti da fonti miste di archivi .
Alexey,

Risposte:


183

Molte persone sembrano aver paura di mescolarsi stabile con i test, ma francamente, i test sono abbastanza stabili a sé stanti e con le preferenze e il controllo della soluzione adeguati, è possibile evitare la "deriva della stabilità" che colloca i pacchetti principali sul percorso instabile.

"I test sono abbastanza stabili ??" , tu chiedi. Sì. Affinché un pacchetto passi da instabile a test, deve avere zero bug aperti per 10 giorni consecutivi. È probabile che, specialmente per i pacchetti più popolari, qualcuno invierà una segnalazione di bug per una versione instabile se qualcosa non va.

Anche se non vuoi mescolare gli ambienti, è comunque bello avere l'opzione lì nel caso in cui ti imbatti in qualcosa che richiede una versione più recente di quella che è stabile.

Ecco cosa consiglio per l'impostazione:

Innanzitutto, crea i seguenti file in /etc/apt/preferences.d:

stable.pref:

# 500 <= P < 990: causes a version to be installed unless there is a
# version available belonging to the target release or the installed
# version is more recent

Package: *
Pin: release a=stable
Pin-Priority: 900

testing.pref:

# 100 <= P < 500: causes a version to be installed unless there is a
# version available belonging to some other distribution or the installed
# version is more recent

Package: *
Pin: release a=testing
Pin-Priority: 400

unstable.pref:

# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package

Package: *
Pin: release a=unstable
Pin-Priority: 50

experimental.pref:

# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package

Package: *
Pin: release a=experimental
Pin-Priority: 1

(Non aver paura delle cose instabili / sperimentali qui. Le priorità sono abbastanza basse che non installerà mai automaticamente nessuna di quelle cose. Anche il ramo di test si comporterà, poiché installerà solo i pacchetti che vuoi essere nei test.)

Ora, creando un set di corrispondenza per /etc/apt/sources.list.d:

stable.list: Copia dall'originale /etc/apt/sources.list. Rinomina il vecchio file in qualcosa del genere sources.list.orig.

testing.list: Uguale a stable.list, tranne con testing.

unstable.list: Uguale a stable.list, tranne con unstable, e rimuovere gli elenchi di sicurezza.

experimental.list: Uguale a unstable.list, tranne con experimental.

Puoi anche aggiungere un oldstablein sources.lists.de preferences.d(usa una priorità di 1), anche se questo moniker tende a scadere e scomparire prima del prossimo ciclo stabile. In casi del genere, puoi usare http://archive.debian.org/debian/e "hardcode" la versione di Debian (etch, lenny, ecc.).

Per installare la versione di prova di un pacchetto, è sufficiente utilizzare aptitude install lib-foobar-package/testingo semplicemente passare alla GUI di aptitude e selezionare la versione all'interno dei dettagli del pacchetto (premere invio sul pacchetto che si sta guardando).

In caso di reclami per conflitti di pacchetti, esaminare prima le soluzioni. Nella maggior parte dei casi, il primo sarà "non installare questa versione". Impara come utilizzare le opzioni del risolutore di accettazione / rifiuto per pacchetto. Ad esempio, se stai installando foobar-package / testing e la prima soluzione è "non installare foobar-package / testing", allora contrassegna quella scelta come rifiutata e le altre soluzioni non torneranno più su quel percorso. In casi come questi, probabilmente dovrai installare alcuni altri pacchetti di test.

Se sta diventando troppo peloso (come se stesse cercando di aggiornare libc o il kernel o qualche altro enorme sistema di base), allora puoi rifiutare quei percorsi di aggiornamento o semplicemente uscire completamente dall'aggiornamento iniziale. Ricorda che aggiornerà le cose in testing / unstable solo se lo permetti.

EDIT: corretti alcuni pin prioritari e aggiornato l'elenco.


4
Sei stato eseguito apt-get updatedopo aver creato i file di configurazione?
Flusso

3
Ricevo (ciò che mi sembra) comportamenti incoerenti usando questo metodo. "apt-get install -t testing appX" non fornisce lo stesso di "apt-get install appX / testing" (vedere serverfault.com/q/646934/132528 ) - Immagino che si tratti proprio del modo in cui questo metodo fa sì che le priorità vengano risolte, anche se per me non è intuitivo?
Eugenevd,

7
IMPORTANTE: l'autore ha scelto un valore di preferenza di blocco per stable / security che è superiore al valore di Release predefinito ... vedi serverfault.com/a/653552/120130 per maggiori informazioni
Alex Ryan,

7
Questa risposta ha appena rotto il mio sistema. Dopo un tentativo sudo apt-get update, ho ricevuto un errore di aggiornamento. Quindi riavviato, il che mi ha dato Xsession error, riavviato di nuovo, e ora non ho la GUI. l' /dev/sda1/ora è pieno. Grande.
luchonacho,

3
Consiglierò alle persone di prestare attenzione ai commenti negativi su questo post. L'ho appena preso un po 'dal recente aggiornamento di Debian 9, che è stato corretto ripristinando queste modifiche. Seguire i consigli nell'articolo di Debian su questo argomento: wiki.debian.org/DontBreakDebian (scorrere fino a Non fare un FrankenDebian)
Brandon Arnold,

98

In /etc/apt/apt.conf.daggiungi il seguente file

99defaultrelease:

APT::Default-Release "stable";

in /etc/apt/sources.list.d- aggiungi URL per test / fonti instabili

stable.list:

deb     http://ftp.de.debian.org/debian/    stable main contrib non-free
deb-src http://ftp.de.debian.org/debian/    stable main contrib non-free

deb     http://security.debian.org/         stable/updates  main contrib non-free

testing.list:

deb     http://ftp.de.debian.org/debian/    testing main contrib non-free
deb-src http://ftp.de.debian.org/debian/    testing main contrib non-free

deb     http://security.debian.org/         testing/updates  main contrib non-free

correre

apt-get update

e quindi installa ciò di cui hai bisogno

apt-get -t testing install something

Fai molta attenzione se installi roba che ha molte dipendenze. Preferibilmente non farlo sulla produzione.

Puoi anche tentare la fortuna con backport o repository simili.


1
Wow. È stato veloce. Stavo postando in modo da condividere le informazioni che avevo appena incontrato! Ben fatto!
Gareth,

Non ho mai usato il metodo apt.conf prima. Sembra più semplice il metodo del file delle preferenze, ma ti dà un controllo meno preciso. - Coops
Coops

4
La risposta deve essere aggiornata; questa configurazione spezzerà completamente le cose ora che la compressione è diventata stabile e Lenny è diventato vecchio.
El Yobo,

1
Non più utilizzabile, si prega di aggiornare
Lothar

4
nelle versioni debian più recenti non esiste un file apt.conf, invece modifica /etc/apt/apt.conf.d/70debconf
Hayden Thring il

49

apt_preferences

Definire il livello predefinito a cui il sistema deve "eseguire l'aggiornamento sicuro" nel file / etc / apt / preferenze:
man apt_preferences

C'è molto che puoi fare con apt_preferences ma per semplicità ...

Avevo bisogno di installare un singolo pacchetto (autoMysqlBackup) che era disponibile solo in Test. La soluzione era aggiungere quanto segue a / etc / apt / preferenze:

Explanation: Uninstall or do not install any Debian-originated
Explanation: package versions other than those in the stable distro
Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10

Con più repository aggiunti a /etc/apt/sources.list aptitude ora eseguirà l'upgrade alla versione specificata anche se sono elencati i repository della versione successiva (in questo caso 'stable').

deb http://mirror.aarnet.edu.au/debian/ lenny main
deb-src http://mirror.aarnet.edu.au/debian/ lenny main
deb http://mirror.aarnet.edu.au/debian/ squeeze main
deb-src http://mirror.aarnet.edu.au/debian/ squeeze main

Quindi per installare quel pacchetto, tutto ciò che devi fare è:

$ aptitude install -t testing packageName 

Anche questo è un buon metodo, non facile come apt.conf, ma ti consente di controllare tutte le tue diverse fonti in modo relativo.
Coop

2
Questo è troppo complicato per l'attività ... L'uso di APT :: Default-Release imposta la priorità dei pin della versione su 990 (simile a come la si imposta su 900) e il pin negativo per il resto non è davvero necessario. durante gli aggiornamenti dist il pacchetto stabile ha comunque la priorità e non appena si elenca qualcosa in modo esplicito sulla riga di comando, la sua priorità di blocco negativa verrà per lo più ignorata.
Raphaël Hertzog,

Non sono sicuro di come risponderti @Raphael. Sembra un modo molto elegante di fare le cose. Ho usato l'appuntamento appropriato prima di anni fa, ma non l'ho mai "capito". Gli esempi che ho usato sopra sono direttamente dalla pagina man apt_preferences.
Gareth,

2
Conferma che funziona bene su squeeze
tomfanning

3
@Lothar: funziona su Debian 6. Solo perché il file non esiste non significa che non funzioni. Basta creare il file e aggiungere le impostazioni. Citazione dalla pagina man: "Se non ci sono file delle preferenze o se non ci sono voci nel file che si applicano a una versione particolare, la priorità assegnata a quella versione è la priorità della distribuzione a cui appartiene quella versione."
rzetterberg,

13

Per quello che vale, il consiglio generale che ho sempre visto è "Non mescolare stabile con niente". La maggior parte delle esercitazioni sui sistemi misti sono per la miscelazione di test e instabili.

Il ragionamento sembra essere che se si mescola stabile con i test, i pacchetti molto basilari (come libc6) richiedono aggiornamenti (per installare il software dai test), e una volta che questi pacchetti base passano ai test, l'intero sistema può andare alla deriva in quel modo.

Ecco due alternative:

  1. Usa backport .
  2. Installa una linea di origine dai test e prova a creare la versione successiva che desideri dall'origine .

1
Sono d'accordo. Ho appena provato ad aggiornare libdvdread4 dai test a causa di un bug nella versione in wheezy / stable. Vuole portare l'ultimo libc però. Quindi ho appena preso il pacchetto sorgente per libdvdread4 da stabile e l'ho riparato con il cambio di sorgente a 1 riga e lo ho ricostruito. Molto meglio che estrarre tutti i tipi di pacchetti dai test. Ora tutti i pacchetti sono ancora quelli "stabili" e ho solo il cambio di 1 riga di cui ho bisogno.
Dgrant,

12

La documentazione di Debian è ampia in materia e consiglio vivamente di approfondire in quanto svelerà davvero la bellezza del sistema Debian.

Dai un'occhiata a Come mantenere un sistema misto , spiegherà tutto ciò che devi sapere.


1
Questo sembra essere lo stesso metodo usato nella risposta di @pQd, quindi non si applica a debian> = 6.0. Anche il titolo del link dice ora "documentazione obsoleta". Anche per lo più link solo risposta.
dequis,

Mentre @dequis ha ragione nel ritenere che il collegamento non sia aggiornato, ho appena seguito le istruzioni su un Debian 8 (test) per installare un pacchetto da unstable e tutto sembra funzionare perfettamente. Qualcuno ha un link alla documentazione aggiornato?
domsson,

1
Questo è probabilmente quello che stai cercando: debian.org/doc/manuals/debian-reference/…
tomdeb

7

Un altro modo, che potrebbe impedire l'installazione di troppe dipendenze da Testing o Sid, è questo: dici a apt-get di ottenere il sorgente del pacchetto da Testing o Sid e creare un pacchetto per il tuo sistema usando gli strumenti Debian (non c'è bisogno di armeggiare manualmente con fonti).

Citando da qui:
https://wiki.debian.org/DebianUnstable#How_do_I_backport_a_sid_package_to_testing_or_stable.3F

Come posso eseguire il backport di un pacchetto Sid su testing o stable?

Installa il sorgente Debian (e gli strumenti di sviluppo, in particolare debhelper, devscripts e build-essential), quindi costruisci il pacchetto.

Passo dopo passo:

add a deb-src line for sid to your sources.list

apt-get update

apt-get build-dep PACKAGE_NAME

apt-get -b source PACKAGE_NAME 

I debs risultanti dovrebbero essere nella directory corrente e possono essere installati con dpkg -i the.deb.


4

Lo sto facendo da un lungo periodo di tempo per essere fiducioso nel dire che è abbastanza sicuro e può essere reso conveniente. Con la seguente versione stabile installata verrà installata di default, tuttavia Aptitude ti permetterà anche di scegliere la versione backported o instabile, se lo desideri:

inserisci qui la descrizione dell'immagine

Ci sono quattro cose che devono essere modificate, la versione di pinning predefinita deve essere impostata, le fonti hanno bisogno di backport e unstable aggiunti, abbassando la priorità di pinning di backport / pacchetti unstable e le impostazioni di visualizzazione di aptitude devono essere modificate per visualizzare pinning.

  • Crea un '/etc/apt/apt.conf.d/10defaultrelease' e crea i suoi contenuti come segue:
Apt :: default-Release "stable";
  • Modifica il tuo '/etc/apt/sources.list' per aggiungere fonti instabili e backport in modo che assomigli a questo:
# deb cdrom: [Debian GNU / Linux 6.0.0 _Squeeze_ - Multi-architettura ufficiale amd64 / i386 NETINST # 1 20110205-14: 45] / squeeze main

deb http://ftp.us.debian.org/debian/ squeeze main
deb-src http://ftp.us.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze / updates main
deb-src http://security.debian.org/ squeeze / updates main

# squeeze-update, precedentemente noto come 'volatile'
deb http://ftp.us.debian.org/debian/ squeeze-updates main
deb-src http://ftp.us.debian.org/debian/ squeeze-updates main

# spremere i backport
# http://backports.debian.org/Instructions/
deb http://backports.debian.org/debian-backports squeeze-backports main

# instabile
# http://wiki.debian.org/AptPreferences
deb http://ftp.us.debian.org/debian/ unstable main
deb-src http://ftp.us.debian.org/debian/ main instabile

# non gratuito ex. sole java
#deb http://ftp.us.debian.org/debian/ squeeze non-free
# deb-src http://ftp.us.debian.org/debian/ squeeze non-free
  • Modifica il etc/apt/preferencesfile di pinning: se il file non esiste, crealo.
# Priorità di pinning del pacchetto
# Vedi http://wiki.debian.org/AptPreferences e http://manpages.debian.net/cgi-bin/man.cgi?query=apt_preferences
#
# Nella shell nut viene installato il PIN più alto
#
# I valori predefiniti di Pining sono i seguenti che si aggiungono alle nostre impostazioni:
# 990 - per versioni non installate ma che appartengono alla nostra impostazione "stabile" `APT :: Default-Relase.
# 500 - per le versioni che non sono installate e non appartengono alla versione di destinazione
# 100 - per i pacchetti già installati, ciò significa anche altre versioni dello stesso pacchetto
# 1 - per pacchetti sperimentali; pacchetti con "NotAutomatic: si"
#
# I nostri appuntamenti
# 400 - backport che possono essere installati in sicurezza senza la necessità di aggiornare altri pacchetti
# 50 - pacchetti instabili, installazione forzata nella schermata dei dettagli, possono causare conflitti

Pacchetto: *
Pin: rilascio n = squeeze-backport
Priorità pin: 400

Pacchetto: *
Pin: rilasciare a = instabile
  • Crea "/etc/apt/apt.conf.d/100guiconf" e imposta Aptitude in modo che visualizzi le informazioni di blocco.
Aptitude :: UI :: Formato di visualizzazione pacchetto "% c% a% M% p% Z% v% V% i";

1
Solo un aggiornamento che oltre a quanto sopra ho deciso di eseguire tutti i miei pacchetti di sistema dai repository di sviluppo "testing". Quindi in source.listesso dovrebbe essere indicato il nome in codice jessieanziché squeeze. La politica di Debian testingè pressoché stabile e i pacchetti sono stati quasi nuovi come dal unstablerepository. Sto esaurendo lo spazio qui, quindi dai un'occhiata a: wiki.debian.org/DebianReleases , wiki.debian.org/StableUpdates e wiki.debian.org/StableProposedUpdates ; le ultime due sono fonti di repository aggiuntive.
Daniel Sokolowski l'

2

Se la selezione dei pacchetti è più complessa o l'installazione verrà ripetuta su più macchine, è possibile prendere in considerazione la configurazione di un repository privato che rispecchi un sottoinsieme dei repository ufficiali. Ciò richiede un po 'di lavoro per configurare il repository ma la ricompensa è facile da mantenere con un minimo di configurazione su ciascun client e risultati ripetibili quando si eseguono dozzine di installazioni. Lo trovo utile anche quando vengono installati solo uno o due pacchetti e utilizzo questo metodo per automatizzare e mantenere le installazioni cloud. Un singolo server su un VPS economico può gestire dozzine di repository privati.

Per configurare il server del repository privato:

# Install aptly.
apt-get install aptly

# Create local mirror (choose a source mirror near you).
aptly mirror create -filter="mirror-contains-no-packages" stretch-roundcube http://httpredir.debian.org/debian stretch main

# Configure filters for local mirror.
aptly mirror edit -filter="Name (% roundcube*)" stretch-roundcube

# Update local mirror.
aptly mirror update stretch-roundcube

# Drop previously published repositories and mirrors, if running these commands in a script.
aptly publish drop stretch

# Drop snapshot, if running these commands in a script.
aptly snapshot drop stretch-roundcube

# Create new snapshot.
aptly snapshot create stretch-roundcube from mirror stretch-roundcube

# Publish snapshot.
aptly publish snapshot -architectures=i386,amd64 -distribution=stretch -component=roundcube -label="Your Name" -origin="Your Name" stretch-roundcube

Quindi configura il tuo server Web preferito per servire i file del repository statico. Possibilmente proteggere il repository con un certificato di sicurezza e autenticazione di base.

Per mantenere automaticamente il tuo repository privato ed estrarre gli aggiornamenti dall'upstream, inserisci quanto sopra in uno script ed eseguilo da un processo cron.

Per configurare il computer client, sul computer client:

# Configure private repository without authentication.
echo 'deb http://private.repository.example.com/ stretch roundcube' > /etc/apt/sources.list.d/private.repository.example.com.list

# Configure private repository with authentication.
echo 'deb https://hostname:password@private.repository.example.com/ stretch roundcube' > /etc/apt/sources.list.d/private.repository.example.com.list
apt-get install apt-transport-https

# Update.
apt-get update

# Install package.
apt-get install roundcube

Per mantenere la macchina client e inserire tutti gli aggiornamenti del repository privato, sulla macchina client:

# Update.
apt-get update

# Upgrade.
apt-get upgrade

1

Un'altra opzione è quella di scaricare invece il pacchetto sorgente dai test. APT può compilare automaticamente il pacchetto sorgente dopo averlo scaricato. In questo modo, i pacchetti stabili non saranno interessati dai test di aggiornamento. L'unico compromesso è che ci vorrà più tempo rispetto al semplice download e installazione del pacchetto binario.

Per configurare APT per scaricare i pacchetti di origine dai test, basta aggiungere:

deb-src http://<your debian mirror here> testing main

Se vuoi semplicemente seguire i test attuali e non i test futuri, sostituisci "testing" con il nome in codice corrente (al momento della stesura è "buster")

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.