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

187

Je souhaite configurer une nouvelle machine virtuelle avec certains packages spécifiés (nom et version) fournis.

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

La solution doit fonctionner / évoluer avec plusieurs "configurations". Une autre machine virtuelle peut avoir besoin d'une version antérieure d'apache2.

Je connais actuellement certaines possibilités d’installation des packages exacts, mais n’ajoute pas cette fonctionnalité:

  1. Copiez manuellement tous les *.deb requis sur chaque machine virtuelle et entrez: dpkg -i ... - & gt; Pourrait fonctionner, mais c'est très enclin aux erreurs. (Scripts manuels, etc.)
  2. Créez et utilisez un nouveau référentiel Ubuntu pour chaque configuration. - & gt; Ne fonctionne pas parce que j'aurais besoin de n dépôts.
  3. Configurez la machine une fois et copiez la machine virtuelle / créez un instantané. - & gt; Ne fonctionne pas car je devrais stocker n VM.

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

    
posée ayckoster 01.01.2012 - 21:39
la source

4 réponses

190

Vous pouvez utiliser apt-get pour installer une version spécifique du package aussi longtemps qu’elle se trouve dans une archive connue par apt. Depuis la page de manuel apt-get :

  

Une version spécifique d’un package peut être sélectionnée pour l’installation en suivant le nom du package avec une version égale et la version du package à sélectionner. Cela entraînera la localisation et la sélection de cette version pour l'installation. Une distribution spécifique peut également être sélectionnée en suivant le nom du package avec une barre oblique et la version de la distribution ou le nom de l’archive (stable, gelé, instable).

Par exemple, vous pourriez faire:

sudo apt-get install apache2=2.2.20-1ubuntu1

Notez que vous devrez peut-être faire vous-même une résolution de dépendance dans ce cas, mais s'il y a des problèmes, apt-get vous dira ce qui les 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
    
réponse donnée fader 01.01.2012 - 21:57
la source
51

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

sudo apt-cache madison ^apache2

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

Copiez ensuite la version ou utilisez la syntaxe suivante:

sudo apt-get install apache2=2.2\*

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

dpkg -l 'apache2*' | grep ^i
    
réponse donnée kenorb 01.04.2015 - 14:44
la source
10

Je développerai les réponses précédentes avec d'autres commandes de version pratiques dans la famille apt . 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 à nouveau apt-cache policy :

# 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 souhaitez pas que des versions plus récentes soient installées sur les mises à jour, épinglez le package avec apt-mark :

# apt-mark hold apache2
apache2 set on hold.

Disons qu'une nouvelle version d'apache2 est ajoutée à l'index du package et que votre machine est synchronisée avec apt-get update . Vous verrez ceci quand vous exécuterez la prochaine fois 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.
    
réponse donnée gsf 15.07.2016 - 19:25
la source
8

En pratique, ce n’est pas possible car les anciennes versions ne sont pas conservées dans l’archive, donc à moins de disposer d’une copie de l’ancienne version quelque part, vous ne pouvez pas l’installer. Vous devriez vous demander pourquoi vous souhaitez installer une ancienne version en premier lieu. Sur une version stable, la principale raison pour laquelle une nouvelle version est publiée est de corriger une vulnérabilité de sécurité et vous ne voulez pas exécuter un serveur vulnérable.

    
réponse donnée psusi 02.01.2012 - 01:33
la source

Lire d'autres questions sur les étiquettes