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


Je veux 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 (n) "configurations". Une autre machine virtuelle peut avoir besoin d'une ancienne version d'apache2.

Je connais actuellement certaines possibilités qui installent les packages exacts, mais ne les adaptent pas bien:

  1. Copier tout requis *.deb à chaque machine virtuelle manuellement et entrez: dpkg -i ... -> Peut fonctionner, mais il est très sujet aux erreurs. (Scripts manuels, etc.)
  2. Créez et utilisez un nouveau référentiel Ubuntu pour chaque configuration. -> Ne fonctionne pas parce que j'aurais besoin de n dépôts.
  3. Configurez la machine une fois et copiez la VM / créez un instantané. -> 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 avec la version actuelle. Mon objectif est d'installer d'anciens paquets.


188
2018-01-01 20:39


origine




Réponses:


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

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

Par exemple, vous pouvez 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

190
2018-01-01 20:57



comment savoir quelles versions sont disponibles? - Rodrigo Gurgel
@Rodrigo Gurgel, "aptitude versions apache2" - user169015
@ user169015 "la version existe"! = "la version est fournie pour Ubuntu et disponible avec apt" - Kyle Strand
Salut Kyle, je n'ai pas eu ton commentaire, mais oui, le paquet peut aussi être installé avec apt. Je reste juste avec aptitude parce que je l'utilise depuis longtemps ... :) - user169015
@ user169015 Je pense que vous manquez le point du commentaire de Kyle. Regardez la réponse de psusi ci-dessous. Apparemment, les dépôts APT d'Ubuntu ne continuent pas à héberger d'anciennes versions de paquets! Donc, contrairement aux gestionnaires de packages d'exécution (pip, gem, maven, etc.), vous ne pouvez pas compter sur les dépôts APT d'Ubuntu si vous souhaitez reconstituer une ancienne configuration connue. J'ai été surpris et déçu de réaliser cela moi-même. Peut-être qu'Arch gère cela mieux? ( askubuntu.com/questions/728439/… ) - algal


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

sudo apt-cache madison ^apache2

Si ça ne marche pas, pensez à courir sudo apt-get update avant de mettre à jour la liste des paquets.

Ensuite, copiez 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

51
2018-04-01 12:44



Merci beaucoup d'avoir souligné le =2.2\* option comme un moyen d'utiliser un caractère générique pour sélectionner une sous-version disponible. C'est ce que je voulais savoir mais je ne savais pas comment demander :) - aexl
En listant les versions en utilisant dpkg -l <packageName>, le numéro de version est parfois tronqué. Pour éviter cela, utilisez COLUMNS=100 dpkg -l <packageName> - CJBS
Sur Yakkety, la première commande me donne juste: N: Unable to locate package ^apache2 - Jesse Glick
@ JesseGlick Run sudo apt-get update premier. Assurez-vous d'avoir les bonnes sources d'Apt configurées. - kenorb
N: Impossible de localiser le paquet ^ apache2 après $ sudo apt-get update mais sudo apt-get install apache2 = 2.2 * fonctionne pour moi - Braian Mellor


Je vais développer les réponses précédentes avec d'autres commandes de version pratiques dans le 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 cours d'exécution 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 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 courrez 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.

10
2017-07-15 17:25





En pratique, ce n'est pas possible car les anciennes versions ne sont pas conservées dans l'archive, donc à moins d'avoir une copie de l'ancienne version qui se trouve 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 utiliser un serveur vulnérable, n'est-ce pas?


8
2018-01-02 00:33



J'en ai besoin pour reproduire des copies exactes d'anciens environnements à des fins de développement. Est-il possible de configurer un miroir qui ne supprime pas les anciennes versions de package pour accéder aux packages requis ou dois-je configurer plusieurs référentiels contenant uniquement des diffs? - ayckoster
@psusi: Pas exactement une réponse juste, il pourrait y avoir plusieurs raisons. Dans mon cas, la version la plus récente pourrait en fait avoir un bogue, et pour vérifier que la version la plus ancienne est nécessaire. Juste un exemple. - Cookie
@nomen, non, c'est une seule distribution qui fait ne pas utiliser un modèle de version à roulement. Nous veillons à ce que, lorsque des bogues critiques et des vulnérabilités de sécurité sont corrigés dans la version stable, ils ne provoquent pas de régression, mais dans ce cas, génèrent un rapport de bogue marqué d'une version de régression. arrière. - psusi
@nomen, si vous voulez définir vos propres mots pour les mots, vous aurez du mal à communiquer avec les autres. Pour tout le monde dans le monde, ce n'est pas ce qu'est une version à rouler, et la sortie à chaud est l'exact opposé, et donc, mutuellement exclusive avec une version stable. Et maintenant que j'y pense, la version originale livrée avec la version est en fait conservée dans la pochette de la version et les mises à jour sont placées dans la pochette -updates ou -security. peut revenir à la version d'origine. - psusi
@psusi: Voici un autre pour vous. Unison doit toujours être la même version sur toutes les machines. Pourtant, le 13.10, il s’agit d’une version différente de celle du 12.04 LTS. Et maintenant? En arrivant à une question comme celle-ci, recevoir une réponse comme pourquoi vous voulez faire est vraiment inutile et une perte de temps pour tout le monde. - Cookie