292 votes

Comment installer des paquets Ubuntu spécifiques, avec la version exacte ?

Je veux configurer une nouvelle machine virtuelle avec certains paquets spécifiés (nom et version), qui sont fournis.

Par exemple, apache2 en version 2.2.20-1ubuntu1 avec toutes les dépendances. Même s'il existe une nouvelle version de ce paquet sur les serveurs, celle-ci doit être installée.

La solution doit fonctionner et s'adapter à plusieurs (n) "configurations". Une autre machine virtuelle peut avoir besoin d'une version plus ancienne d'apache2.

Je connais actuellement quelques possibilités qui installent les paquets exacts, mais qui ne sont pas aussi efficaces :

  1. Copiez tous les documents requis *.deb à chaque machine virtuelle manuellement et entrez : dpkg -i ... -> Cela pourrait fonctionner, mais c'est très sujet aux erreurs. (Manuel scripts etc.)
  2. Créez et utilisez un nouveau dépôt Ubuntu pour chaque installation. -> Cela ne fonctionne pas car j'aurais besoin de n dépôts.
  3. Configurez la machine une fois et copiez la VM / créez un snapshot. -> Ne fonctionne pas car j'aurais besoin de stocker n VMs.

Mon problème pourrait être qualifié de gestion des correctifs, mais je ne veux pas mettre à jour mes paquets à la version actuelle. Mon objectif est d'installer les anciens paquets.

291voto

Edo Points 861

Vous pouvez utiliser apt-get pour installer une version spécifique du paquet, à condition qu'elle se trouve dans une archive connue d'apt. Depuis le apt-get page de manuel :

Une version spécifique d'un paquet peut être sélectionnée pour l'installation en faisant suivre le nom du paquet d'un signe égal et de la version du paquet à sélectionner. Cela aura pour effet de localiser et de sélectionner cette version pour l'installation. Vous pouvez également sélectionner une distribution spécifique en faisant suivre le nom du paquet d'une barre oblique et de la version de la distribution ou du nom de l'archive (stable, gelée, instable).

Par exemple, vous pourriez le faire :

sudo apt-get install apache2=2.2.20-1ubuntu1

Notez que vous devrez peut-être effectuer vous-même la résolution des dépendances dans ce cas, mais s'il y a des problèmes, apt-get vous dira ce qui en est la cause. Sur mon système 11.10, je devrais faire ce qui suit pour que cela fonctionne :

sudo apt-get install apache2=2.2.20-1ubuntu1 \
                     apache2.2-common=2.2.20-1ubuntu1 \
                     apache2.2-bin=2.2.20-1ubuntu1 \
                     apache2-mpm-worker=2.2.20-1ubuntu1

Vous pouvez afficher les versions de paquet disponibles comme suit :

sudo apt list -a apache2

88voto

kenorb Points 8840

Pour vérifier quelles versions sont disponibles, vous pouvez vérifier via :

sudo apt-cache madison ^apache2

Si cela ne fonctionne pas, envisagez d'exécuter sudo apt-get update avant de mettre à jour la liste des paquets.

Copiez ensuite la version ou utilisez la syntaxe suivante :

sudo apt-get install apache2=2.2.\*

Pour vérifier la version que vous avez installée, exécutez :

dpkg -l 'apache2*' | grep ^i

Si l'information sur la version est tronquée, essayez :

COLUMNS=100 dpkg -l <packageName>

25voto

gsf Points 351

Je développerai les réponses précédentes avec d'autres commandes de versionnement pratiques dans la section apt famille. Pour voir quelles versions sont disponibles, exécutez apt-cache policy :

# apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
     2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

Ensuite, comme mentionné ailleurs, installez une version spécifique avec apt-get :

# apt-get install apache2=2.4.7-1ubuntu4.5
...

Vous pouvez maintenant voir quelle version vous avez installée en exécutant apt-cache policy encore :

# apt-cache policy apache2
apache2:
  Installed: 2.4.7-1ubuntu4.5
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
 *** 2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

Si vous ne voulez pas que des versions plus récentes soient installées lors des mises à jour, épinglez le paquet avec apt-mark :

# apt-mark hold apache2
apache2 set on hold.

Disons qu'une nouvelle version d'apache2 est ajoutée à l'index des paquets et que votre machine est synchronisée avec apt-get update . Vous verrez cela lors de votre prochain passage apt-get upgrade :

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  apache2
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

8voto

soger Points 661

Comme l'explique psusi, les anciennes versions ne sont pas conservées dans le dépôt ubuntu, mais apparemment vous pouvez toujours les trouver sur launchpad. Donc, vous allez sur (remplacez trusty et amd64 par votre version et architecture ubuntu) :

https://launchpad.net/ubuntu/trusty/amd64/apache2

et sélectionnez la version que vous souhaitez. Ensuite, vous téléchargez le deb comme un fichier et l'installez avec :

dpkg -i apache2_2.4.7-1ubuntu4.20_amd64.deb

Encore une fois, remplacez le nom du fichier par votre fichier. Cela devient fastidieux si vous devez rétrograder un grand nombre de paquets, mais c'est mieux que rien si vous êtes désespéré.

5voto

psusi Points 35613

En pratique, ce n'est pas possible car les anciennes versions ne sont pas conservées dans l'archive. Par conséquent, si vous n'avez pas une copie de l'ancienne version qui traîne quelque part, vous ne pouvez pas l'installer. Vous devriez vous demander pourquoi vous voulez installer une ancienne version en premier lieu. Dans une version stable, la principale raison pour laquelle une nouvelle version est publiée est la correction d'une faille de sécurité, et vous ne voulez pas faire tourner un serveur vulnérable, n'est-ce pas ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X