Comment puis-je exécuter Debian stable mais installer des paquets à partir de tests?

206

Supposons que vous utilisez un serveur et que vous ne voulez pas passer de Stable (Lenny) à Testing (Squeeze) pour installer simplement un ou plusieurs packages requis.

Quel est le meilleur moyen d'installer uniquement certains packages à partir de Testing?

Gareth
la source
2
C’est ce que dit la dernière documentation officielle: Des paquets provenant de sources mixtes d’archives .
Alexey

Réponses:

183

Beaucoup de gens semblent craindre de mélanger stabilité et test, mais franchement, le test est assez stable et, avec les préférences et la vérification des solutions appropriées, vous pouvez éviter la "dérive de stabilité" qui met vos packages centraux sur le chemin instable.

"Le test est assez stable ??" , tu demandes. Oui. Pour qu'un paquet migre d'instable à testing, il doit avoir zéro bogue ouvert pendant 10 jours consécutifs. Il y a des chances pour que, surtout pour les paquets les plus populaires, quelqu'un soumette un rapport de bogue pour une version instable si quelque chose ne va pas.

Même si vous ne voulez pas mélanger les environnements, il est toujours agréable d’avoir cette option au cas où vous rencontriez quelque chose qui nécessite une version plus récente que celle qui est dans stable.

Voici ce que je recommande pour mettre cela en place:

Tout d’abord, créez les fichiers suivants dans /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

(N'ayez pas peur des éléments instables / expérimentaux ici. Les priorités sont suffisamment faibles pour ne jamais installer ces éléments automatiquement. Même la branche testing se comportera, car elle ne fera qu'installer les packages que vous voulez installer. en test.)

Maintenant, créez un ensemble correspondant pour /etc/apt/sources.list.d:

stable.list: Copie de votre original /etc/apt/sources.list. Renommez l’ancien fichier en quelque chose comme sources.list.orig.

testing.list: Identique à stable.list, sauf avec testing.

unstable.list: Identique à stable.list, sauf avec unstable, et supprime les listes de sécurité.

experimental.list: Identique à unstable.list, sauf avec experimental.

Vous pouvez également ajouter un oldstabledans sources.lists.det preferences.d(utiliser une priorité de 1), bien que ce sobriquet aura tendance à expirer et disparaître avant le prochain cycle stable. Dans de tels cas, vous pouvez utiliser http://archive.debian.org/debian/et "coder en dur" la version de Debian (Etch, Lenny, etc.).

Pour installer la version de test d'un paquet, utilisez simplement aptitude install lib-foobar-package/testingou sautez simplement dans l'interface graphique d'aptitude et sélectionnez la version dans les détails du paquet (appuyez sur la touche entrée du paquet que vous regardez).

Si vous recevez des plaintes concernant des conflits de paquets, examinez d'abord les solutions. Dans la plupart des cas, le premier sera "ne pas installer cette version". Apprenez à utiliser les choix de résolveur accept / rejet par paquet. Par exemple, si vous installez foobar-package / testing et que la première solution est "n’installez pas foobar-package / testing", indiquez ce choix comme étant rejeté et les autres solutions ne basculeront plus jamais vers ce chemin. Dans de tels cas, vous devrez probablement installer quelques autres packages de test.

Si cela devient trop poilu (comme si on essayait de mettre à jour libc, le noyau ou un autre système central énorme), vous pouvez alors rejeter ces chemins de mise à jour ou simplement vous retirer de la mise à jour initiale. Rappelez-vous que la mise à jour des choses à testing / unstable ne sera possible que si vous le permettez.

EDIT: Correction de quelques pins de priorité et mise à jour de la liste.

Brendan Byrd
la source
4
Avez-vous couru apt-get updateaprès avoir créé les fichiers de configuration?
Débit
3
Ce qui me semble avoir des comportements incohérents avec cette méthode. "apt-get install -t testing appX" ne donne pas la même chose que "apt-get install appX / testing" (voir serverfault.com/q/646934/132528 ) - J'imagine que c'est à peu près la façon dont cette méthode fonctionne provoque la résolution des priorités, même si cela n’est pas intuitif pour moi?
eugenevd
7
IMPORTANT: l'auteur a choisi une valeur de préférence d'épinglage pour stable / security supérieure à la valeur par défaut de la version ... voir serverfault.com/a/653552/120130 pour plus d'informations
Alex Ryan
7
Cette réponse vient de briser mon système. Après une tentative sudo apt-get update, j'ai eu une erreur de mise à jour. Puis redémarré, ce qui m’a donné Xsession error, redémarré à nouveau, et maintenant je n’ai plus de gui. le /dev/sda1/est maintenant complet. Génial.
luchonacho
3
Je vais recommander aux gens de tenir compte des commentaires négatifs sur ce post. Je viens tout juste de prendre connaissance de la récente mise à jour de Debian 9, qui a été corrigée en annulant ces modifications. Tenez compte des conseils formulés dans l'article de Debian à ce sujet: wiki.debian.org/DontBreakDebian ( faites défiler jusqu'à Don't ne faites pas de FrankenDebian)
Brandon Arnold
98

En /etc/apt/apt.conf.dajouter le fichier suivant

99defaultrelease:

APT::Default-Release "stable";

in /etc/apt/sources.list.d- ajoute des URL pour les sources test / instables

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

courir

apt-get update

puis installez ce dont vous avez besoin avec

apt-get -t testing install something

Soyez très très prudent si vous installez des éléments comportant de nombreuses dépendances. De préférence, ne le faites pas en production.

Vous pouvez également tenter votre chance dans des backports ou des référentiels similaires.

pQd
la source
1
Sensationnel. C'était rapide. Je postais afin de partager les informations que je venais de rencontrer! Joli!
Gareth
Je n'ai jamais utilisé la méthode apt.conf auparavant. Cela semble plus simple que la méthode du fichier de préférences, mais vous offre un contrôle moins précis. - Coops
Coops
4
La réponse doit être améliorée; cette configuration va complètement casser les choses maintenant que squeeze est devenu stable et que Lenny est devenu oldstable.
El Yobo
1
Plus utilisable, veuillez mettre à jour
Lothar, le
4
dans les nouvelles versions de debian, il n'y a pas de fichier apt.conf, mais plutôt éditez /etc/apt/apt.conf.d/70debconf
Hayden Thring
49

apt_preferences

Définissez le niveau par défaut que le système doit mettre à niveau dans le fichier / etc / apt / preferences:
man apt_preferences

Avec apt_preferences, vous pouvez faire beaucoup de choses, mais dans un souci de simplicité ...

J'avais besoin d'installer un seul package (autoMysqlBackup) disponible uniquement dans Testing. La solution consistait à ajouter ce qui suit dans / etc / apt / preferences:

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

Avec plusieurs référentiels ajoutés à /etc/apt/sources.list, aptitude ne sera désormais mise à niveau que vers la version que vous avez spécifiée, même si les versions ultérieures sont répertoriées (dans ce cas, «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

Donc, pour installer ce paquet, il suffit de:

$ aptitude install -t testing packageName 
Gareth
la source
C’est également une bonne méthode, pas aussi rapide que facile comme apt.conf, mais vous permet de contrôler toutes vos sources de manière relative.
Coops
2
C’est trop compliqué pour la tâche ... Utiliser APT :: Default-Release définit la priorité des broches de la version sur 990 (comme vous le définissez sur 900) et l’épinglage négatif pour le reste n’est pas vraiment nécessaire. De toute façon, pendant les mises à niveau distantes, le paquetage stable a toujours la priorité et dès que vous listez quelque chose de manière explicite sur la ligne de commande, sa priorité d'épinglage négative est généralement ignorée.
Raphaël Hertzog
Je ne sais pas comment vous répondre @Raphael. Cela semble être une façon très élégante de faire les choses. J'ai déjà utilisé apt pinning il y a quelques années, mais je ne l'ai jamais vraiment compris. Les exemples que j'ai utilisés ci-dessus sont directement issus de la page de manuel apt_preferences.
Gareth
2
Confirmez que cela fonctionne très bien sur squeeze
tomfanning
3
@ Lothar: Cela fonctionne sous Debian 6. Ce n'est pas parce que le fichier n'existe pas que cela ne fonctionne pas. Créez simplement le fichier et ajoutez les paramètres. Extrait de la page de manuel: "S'il n'y a pas de fichier de préférences ou s'il n'y a aucune entrée dans le fichier qui s'applique à une version particulière, la priorité affectée à cette version est la priorité de la distribution à laquelle appartient cette version."
Rzetterberg
13

Pour ce que ça vaut, le conseil général que j'ai toujours vu est "Ne mélangez pas stable avec quoi que ce soit." La plupart des tutoriels sur les systèmes mixtes sont destinés aux tests de mélange et instables.

Le raisonnement semble être que si vous mélangez de manière stable les tests, les paquets très basiques (comme libc6) nécessiteront des mises à jour (afin d'installer des logiciels à partir des tests), et une fois que ces paquets basiques passeront aux tests, l'ensemble du système pourra dériver de cette façon.

Voici deux alternatives:

  1. Utilisez des backports .
  2. Installez une ligne source à partir de testing et essayez de créer la version ultérieure que vous voulez depuis la source .
Télémaque
la source
1
Je suis d'accord. Je viens d'essayer de mettre à jour libdvdread4 à partir d'un test à cause d'un bogue dans la version de Wheezy / stable. Il veut cependant importer la dernière libc. Je viens donc de récupérer le paquet source pour libdvdread4 chez stable et de le corriger avec le changement de source à une ligne et de le reconstruire. Bien mieux que de tirer dans toutes sortes de paquets de tests. Maintenant, tous les paquets sont toujours les "stables" et je n'ai que le changement d'une ligne dont j'ai besoin.
Dgrant
12

La documentation de Debian est très étendue sur le sujet et je vous conseille vivement de creuser car elle dévoilera véritablement la beauté du système Debian.

Regardez comment garder un système mixte , cela vous expliquera tout ce que vous devez savoir.

Tomdeb
la source
1
Cela semble être la même méthode utilisée dans la réponse de @pQd, elle ne s'applique donc pas à debian> = 6.0. De plus, le titre du lien dit "documentation obsolète" maintenant. Également la plupart du temps lien seulement répondre.
dequis
Bien que @dequis ait raison en ce que le lien semble être obsolète, je viens de suivre les instructions sur une Debian 8 (test) pour installer un paquet d'unstable, et tout semble fonctionner parfaitement. Quelqu'un a-t-il un lien vers la documentation à jour?
Domsson
1
C'est probablement ce que vous cherchez: debian.org/doc/manuals/debian-reference/…
tomdeb
7

Une autre façon, qui pourrait empêcher d’installer trop de dépendances à partir de Testing ou de Sid, est la suivante: vous demandez à apt-get d’obtenir le code source du paquet à partir de Testing ou de Sid et de créer un paquet pour votre système avec les outils Debian (inutile de modifier manuellement avec des sources).

Citant ici:
https://wiki.debian.org/DebianUnstable#How_do_I_backport_a_sid_package_to_testing_or_stable.3F

Comment puis-je backporter un paquet Sid vers testing ou stable?

Installez le source Debian (et les outils de développement, en particulier debhelper, devscripts et build-essential), puis générez le paquet.

Pas à pas:

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 

Les debs résultants doivent être dans le répertoire en cours et peuvent être installés avec dpkg -i the.deb.

gerlos
la source
4

Je le fais depuis longtemps pour pouvoir affirmer que le système est suffisamment sûr et peut être rendu pratique. Avec la configuration stable ci-dessous, la version stable sera installée par défaut, mais Aptitude vous permettra également de choisir la version rétroportée ou instable si vous le souhaitez:

entrez la description de l'image ici

Il y a quatre choses à modifier, la version d'épinglage par défaut doit être définie, les sources ont besoin de backports et d'unstable ajoutés, réduisant la priorité d'épinglage des paquets backports / unstable, et les paramètres d'affichage d'aptitude doivent être modifiés pour afficher l'épinglage.

  • Créez un '/etc/apt/apt.conf.d/10defaultrelease' et créez son contenu comme suit:
Apt :: default-Release "stable";
  • Modifiez votre '/etc/apt/sources.list' pour ajouter des sources unstable et backports afin qu'il ressemble à ceci:
# deb cdrom: [Debian GNU / Linux 6.0.0 _Squeeze_ - Multi-architecture officielle 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, auparavant connu sous le nom de 'volatile'
deb http://ftp.us.debian.org/debian/ squeeze-updates main
deb-src http://ftp.us.debian.org/debian/ squeeze-updates main

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

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

# non libre ex. soleil java
#deb http://ftp.us.debian.org/debian/ squeeze non-free
# deb-src http://ftp.us.debian.org/debian/ squeeze non-free
  • Editer etc/apt/preferencesfichier épinglant - si le fichier n'existe pas, créez-le.
# Priorités d'épinglage du paquet
# Voir http://wiki.debian.org/AptPreferences et http://manpages.debian.net/cgi-bin/man.cgi?query=apt_preferences
#
# Le NIP le plus élevé du shell shell est installé
#
# Les paramètres par défaut sont les suivants, en plus de nos paramètres:
# 990 - pour les versions qui ne sont pas installées mais appartiennent à notre paramètre `APT :: Default-Relase" stable "`.
# 500 - pour les versions qui ne sont pas installées et qui n'appartiennent pas à la version cible
# 100 - pour les packages déjà installés, cela signifie également les autres versions du même package
# 1 - pour les paquets expérimentaux; forfaits avec "NotAutomatic: yes"
#
# Nos épinglettes
# 400 - les backports pouvant être installés en toute sécurité sans qu'il soit nécessaire de mettre à jour d'autres packages
# 50 - Les paquets instables, l'installation imposée dans l'écran des détails, peuvent entraîner des conflits

Paquet: *
Pin: release n = squeeze-backports
Priorité de broche: 400

Paquet: *
Pin: relâchez a = instable
  • Créez '/etc/apt/apt.conf.d/100guiconf' et configurez Aptitude pour qu'il affiche les informations d'épinglage.
Aptitude :: UI :: Package-Display-Format "% c% a% M% p% Z% v% V% i";
Daniel Sokolowski
la source
1
Juste une mise à jour qui, en plus de ce qui précède, j'ai décidé d'exécuter tous mes packages système à partir des référentiels de développement 'testing'. Donc, source.listil devrait dire nom de code jessieau lieu de squeeze. La politique de Debian testingest presque stable et les paquets sont presque aussi nouveaux que ceux du unstableréférentiel. Je manque d'espace ici, alors jetez un coup d'œil à: wiki.debian.org/DebianReleases , wiki.debian.org/StableUpdates , et wiki.debian.org/StableProposedUpdates ; les deux derniers sont des sources de référentiel supplémentaires.
Daniel Sokolowski
2

Si votre sélection de packages est plus complexe ou si l'installation est répétée sur plusieurs machines, vous pouvez envisager de configurer un référentiel privé qui reflète un sous-ensemble des référentiels officiels. Cela nécessite un peu de travail pour configurer le référentiel, mais la récompense est facile à maintenir avec un minimum de configuration sur chaque client et des résultats répétables lors de dizaines d’installations. Je trouve cela utile même lorsque seulement un ou deux packages sont en cours d'installation et j'utilise cette méthode pour automatiser et gérer les installations dans le cloud. Un serveur unique sur un serveur virtuel virtuel peut gérer des dizaines de référentiels privés.

Pour configurer votre serveur de référentiel privé:

# 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

Configurez ensuite le serveur Web de votre choix pour qu'il serve les fichiers du référentiel statique. Protégez éventuellement le référentiel avec un certificat de sécurité et une authentification de base.

Pour gérer automatiquement votre référentiel privé et extraire les mises à jour depuis l'amont, insérez ce qui précède dans un script et exécutez-le à partir d'un travail cron.

Pour configurer votre poste client, sur votre poste 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:[email protected]/ 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

Pour maintenir votre ordinateur client et extraire toutes les mises à jour de votre référentiel privé, sur votre ordinateur client:

# Update.
apt-get update

# Upgrade.
apt-get upgrade
Daniel Kauffman
la source
1

Une autre option consiste à télécharger le paquet source à partir de testing. APT peut construire automatiquement le paquet source après l'avoir téléchargé. De cette façon, vos packages stables ne seront pas affectés par les tests de mise à jour. Le seul inconvénient est qu'il faudra plus de temps que le simple téléchargement et l'installation du paquet binaire.

Pour configurer APT afin qu'il télécharge les packages source à partir des tests, ajoutez simplement:

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

Si vous souhaitez simplement suivre les tests en cours et non les tests à venir, remplacez "testing" par le nom de code actuel (à ce jour, il s'agit de "buster")

temy
la source