Как установить определенные пакеты Ubuntu с точной версией?

193

Я хочу настроить новую виртуальную машину с определенными пакетами (имя и версия), которые предоставляются.

Например, apache2 в версии 2.2.20-1ubuntu1 со всеми зависимостями. Даже если на серверах есть новая версия этого пакета, этот должен быть установлен.

Решение должно работать / масштабироваться с несколькими (n) «настройками». Другой виртуальной машине может понадобиться более старая версия apache2.

В настоящее время я знаю о некоторых возможностях, которые устанавливают точные пакеты, но не масштабируйте это хорошо:

  1. Скопируйте все необходимые *.deb на каждую виртуальную машину вручную и введите: dpkg -i ... - > Может работать, но он очень подвержен ошибкам. (Ручные скрипты и т. Д.).
  2. Создайте и используйте новый репозиторий Ubuntu для каждой установки. - > Не работает, потому что мне понадобятся n репозиториев.
  3. Настройте машину один раз и скопируйте VM / создайте снимок. - > Не работает, потому что мне нужно будет хранить n виртуальных машин.

Моя проблема может быть помечена как управление исправлениями, но я не хочу обновлять свои пакеты до текущей версии. Моя цель - установить старые пакеты.

    
задан ayckoster 01.01.2012 в 21:39
источник

5 ответов

194

Вы можете использовать apt-get , чтобы установить определенную версию пакета так долго, как в архиве, о котором знает apt. На странице apt-get manpage:

A specific version of a package can be selected for installation by following the package name with an equals and the version of the package to select. This will cause that version to be located and selected for install. Alternatively a specific distribution can be selected by following the package name with a slash and the version of the distribution or the Archive name (stable, frozen, unstable).

Например, вы можете сделать:

sudo apt-get install apache2=2.2.20-1ubuntu1

Обратите внимание, что в этом случае вам может понадобиться некоторое разрешение зависимости, но если есть какие-либо проблемы, apt-get расскажет вам, что их вызывает. В моей системе 11.10 мне нужно будет сделать следующее, чтобы это получилось:

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
    
ответ дан fader 01.01.2012 в 21:57
источник
57

Чтобы проверить, какие версии доступны, вы можете проверить через:

sudo apt-cache madison ^apache2

Если это не сработает, рассмотрите возможность запуска sudo apt-get update перед обновлением списка пакетов.

Затем скопируйте версию или используйте следующий синтаксис:

sudo apt-get install apache2=2.2\*

Чтобы проверить, какая версия была установлена, запустите:

dpkg -l 'apache2*' | grep ^i
    
ответ дан kenorb 01.04.2015 в 14:44
10

Я расскажу о более ранних ответах с помощью других удобных команд управления версиями в семействе apt . Чтобы узнать, какие версии доступны, запустите 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

Затем, как упоминалось в другом месте, установите определенную версию с apt-get :

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

Теперь вы можете увидеть, какую версию вы установили, снова запустив 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

Если вы не хотите устанавливать более новые версии обновлений, подключите пакет с помощью apt-mark :

# apt-mark hold apache2
apache2 set on hold.

Предположим, что новая версия apache2 добавлена в индекс пакета, и ваша машина синхронизируется с apt-get update . Вы увидите это при следующем запуске 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.
    
ответ дан gsf 15.07.2016 в 19:25
8

Практически это невозможно, потому что старые версии не хранятся в архиве, поэтому, если у вас нет копии старой версии, расположенной где-то, вы не можете ее установить. Вы должны спросить себя, почему вы хотите установить более старую версию в первую очередь. В стабильном выпуске основной причиной выпуска новой версии является исправление уязвимости безопасности, и вы не хотите запускать уязвимый сервер?

    
ответ дан psusi 02.01.2012 в 01:33
0

Как объясняет psusi, старые версии не хранятся в репозитории ubuntu, но, видимо, вы все еще можете найти их на панели запуска. Итак, вы идете (замените trusty и amd64 на вашу версию и архитектуру ubuntu):

Ссылка

и выберите желаемую версию. Затем вы загружаете deb в файл и устанавливаете с помощью:

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

Снова замените имя файла на файл. Это утомительно, если вам нужно понизить количество пакетов, но это лучше, чем ничего, если вы в отчаянии.

    
ответ дан soger 18.10.2018 в 00:40