apt-mark Mantendo um pacote para uma versão principal (não uma versão secundária específica)

apt-mark Mantendo um pacote para uma versão principal (não uma versão secundária específica)

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_preferencesPor 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-backportstem 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 debhelperuma 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.

informação relacionada