.png)
Quero manter versões de pacotes em meus servidores para evitar que alterações significativas na infraestrutura quebrem nosso código (mudanças do mongodb 2.4 para 2.6, por exemplo).
Eu sei que posso (por exemplo) apt-mark hold package
, por exemplo, mas paro de receber patches de segurança e pequenas atualizações.
Também gostaria de instalar pacotes com a configuração de uma versão principal (mas não secundária)
por exemplo, eu sei que posso:
sudo apt-get install -y rabbitmq-server=3.3.5
Mas quero apenas fixar a instalação em uma versão principal (3.*)
Como isso pode ser alcançado?
Responder1
Você pode fixar um conjunto curinga de números de versão. Verman apt_preferences
Por exemplo:
O formulário específico atribui uma prioridade (uma "Prioridade Pin") a um ou mais pacotes especificados com uma versão ou intervalo de versões especificado. Por exemplo, o registro a seguir atribui alta prioridade a todas as versões do pacote perl cujo número de versão começa com "5.10". Vários pacotes podem ser separados por espaços.
Package: perl Pin: version 5.10* Pin-Priority: 1001
Assim, por exemplo, no Ubuntu 16.04, onde xenial-backports
tem uma prioridade padrão de 100, a política inicial 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
Em seguida, fixei backports em uma prioridade mais alta:
$ 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
Novamente fixando 9.*
versões de debhelper
uma prioridade ainda maior:
$ 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
Então você só precisa criar um arquivo /etc/apt/preferences.d/
que tenha:
Package: rabbitmq-server
Pin: version 3.*
Pin-Priority: 1001
Nenhum repositório tem prioridade maior que 1000 por padrão, 1001 é suficiente para forçar o downgrade, se necessário:
P >= 1000 faz com que uma versão seja instalada mesmo que isso constitua um downgrade do pacote.