.png)
Я хочу хранить версии пакетов на своих серверах, чтобы предотвратить нарушение работы нашего кода из-за критических изменений в инфраструктуре (например, изменения с mongodb 2.4 на 2.6).
Я знаю, что могу (например) apt-mark hold package
, но тогда я перестаю получать исправления безопасности и мелкие обновления.
Также я хотел бы установить пакеты с указанием основной версии (но не второстепенной)
например, я знаю, что могу:
sudo apt-get install -y rabbitmq-server=3.3.5
Но я хочу просто закрепить установку за основной версией (3.*)
Как этого можно добиться?
решение1
Вы можете прикрепить к подстановочному набору номеров версий. Смотретьman apt_preferences
например:
Специфическая форма назначает приоритет ("Pin-Priority") одному или нескольким указанным пакетам с указанной версией или диапазоном версий. Например, следующая запись назначает высокий приоритет всем версиям пакета perl, номер версии которых начинается с "5.10". Несколько пакетов могут быть разделены пробелами.
Package: perl Pin: version 5.10* Pin-Priority: 1001
Так, например, в Ubuntu 16.04, где xenial-backports
приоритет по умолчанию равен 100, начальная политика debhelper
выглядит так:
$ apt-cache policy debhelper
debhelper:
Installed: 9.20160115ubuntu3
Candidate: 9.20160115ubuntu3
Version table:
10.2.2ubuntu1~ubuntu16.04.1 100
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
*** 9.20160115ubuntu3 500
500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
100 /var/lib/dpkg/status
Затем я присвоил бэкпортам более высокий приоритет:
$ cat /etc/apt/preferences.d/debhelper
Package: *
Pin: release v=16.04,o=Ubuntu,a=xenial-backports,n=xenial,l=Ubuntu,c=main,b=amd64
Pin-Priority: 600
$ apt-cache policy debhelper
debhelper:
Installed: 9.20160115ubuntu3
Candidate: 10.2.2ubuntu1~ubuntu16.04.1
Version table:
10.2.2ubuntu1~ubuntu16.04.1 600
600 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
*** 9.20160115ubuntu3 500
500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
Снова закрепляем 9.*
версии с debhelper
еще более высоким приоритетом:
$ cat /etc/apt/preferences.d/debhelper
Package: *
Pin: release v=16.04,o=Ubuntu,a=xenial-backports,n=xenial,l=Ubuntu,c=main,b=amd64
Pin-Priority: 600
Package: debhelper
Pin: version 9.*
Pin-Priority: 800
$ apt-cache policy debhelper
debhelper:
Installed: 9.20160115ubuntu3
Candidate: 9.20160115ubuntu3
Version table:
10.2.2ubuntu1~ubuntu16.04.1 600
600 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
*** 9.20160115ubuntu3 800
500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
100 /var/lib/dpkg/status
Итак, вам просто нужно создать файл, в /etc/apt/preferences.d/
котором есть:
Package: rabbitmq-server
Pin: version 3.*
Pin-Priority: 1001
Ни один репозиторий не имеет приоритета выше 1000 по умолчанию, 1001 достаточно, чтобы заставить apt понизить версию при необходимости:
P >= 1000 приводит к установке версии, даже если это означает понижение версии пакета.