O que é mais confiável - apt-mark ou APT-pin (/etc/apt/preferences.d/pin) para bloqueio de versão?

3

Normalmente, no meu Ubuntu 16.04 LTS, bloqueio versões de pacotes com a funcionalidade APT-pin.

Por exemplo, se eu quiser pin meld para a versão 1.5.3-1ubuntu1 eu crio o seguinte arquivo pin:

cat <<EOF | sudo tee /etc/apt/preferences.d/pin-meld
Package: meld
Pin: version 1.5.3-1ubuntu1
Pin-Priority: 1337
EOF

Este arquivo aplica configurações em todo o sistema: as ferramentas apt , apt-get , aptitude e GUI, como synaptic e muon , respeitam isso.

Eu conheço outro mecanismo - apt-mark . Vamos assumir. Meu ponto de partida - eu instalei manualmente meld_1.5.3-1ubuntu1 , seu pin foi removido.

$ apt-mark showhold
$ apt-cache policy meld 
meld:
  Installed: 1.5.3-1ubuntu1
  Candidate: 3.14.2-1
  Version table:
     3.14.2-1 500
        500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
        500 http://archive.ubuntu.com/ubuntu xenial/universe i386 Packages
 *** 1.5.3-1ubuntu1 100
        100 /var/lib/dpkg/status

Então eu mantenho a versão instalada.

$ sudo apt-mark hold meld
meld set on hold.

$ dpkg -l | grep meld
hi  meld                                          1.5.3-1ubuntu1                               all          graphical tool to diff and merge files

O APT-mark mostra que está em espera. Mas apt-cache policy meld não tem alterações

$ apt-cache policy meld 
meld:
  Installed: 1.5.3-1ubuntu1
  Candidate: 3.14.2-1
  Version table:
     3.14.2-1 500
        500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
        500 http://archive.ubuntu.com/ubuntu xenial/universe i386 Packages
 *** 1.5.3-1ubuntu1 100
        100 /var/lib/dpkg/status

apt-get upgrade informa que meld é retido :

$ sudo apt-get upgrade 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  meld
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

Mas se eu iniciar o aptitude no modo interativo, tenho meld em Pacotes atualizáveis :

Actions  Undo  Package  Resolver  Search  Options  Views  Help
C-T: Menu  ?: Help  q: Quit  u: Update  g: Preview/Download/Install/Remove Pkgs
aptitude 0.7.4
--\ Upgradable Packages (1)
  --\ gnome - The GNOME Desktop Environment (1)
    --\ universe - Unsupported Free Software. (1)                                                                                                    
ih    meld    1.5.3-1ubuntu1 3.14.2-1      

e se eu acidentalmente selecionar Ações - > Cancelar ações pendentes a retenção será removida.

Até onde eu posso entender, synaptic ignora apt-mark marcações, sua versão de bloqueio funciona de maneira diferente.
meld está listado aqui como Instalado (atualizável) . O botão Marcar todas as atualizações não o seleciona automaticamente, mas o pacote pode ser atualizado acidentalmente por Marcar para atualização .

O Muon funciona da mesma maneira com pacotes, mantido por apt-mark . Mas o que é interessante é que a opção Bloquear na versão atual escreve o arquivo PIN em /etc/apt/preferences.d/meld .

Estou entendendo que o pino APT é mais confiável do que apt-mark ?

    
por N0rbert 03.02.2018 / 18:32

1 resposta

3

Sim, a fixação é mais confiável do que apt-mark .

O que descobri:

  • últimos 12-14 anos a Synaptic usa seu próprio arquivo de fixação (/ var / lib / synaptic / preferences) - veja bug 42178 na barra de ativação . Para todo o sistema, pode-se querer definir o symlink entre /etc e Synaptic

    sudo ln -s /etc/apt/preferences.d/synaptic /var/lib/synaptic/preferences
    

    Portanto, é uma solução alternativa, bloquear versões no Synaptic não é um método recomendado (esse arquivo não é lido por apt-get e aptitude ).

  • O Muon usa arquivos pin de todo o sistema por aplicativo em /etc/apt/preferences.d .

  • aptitude tem dois erros:

    1. no 14.04 LTS ele não respeita apt-mark completamente (veja meu bug 1747189 no launchpad ).
    2. em 16.04 As retenções de LTS, que foram definidas por apt-mark , são perdidas após clicar em Ações - > Cancelar ações pendentes (veja meu bug 1747191 no launchpad ).

    mas em 18.04 LTS aptitude não tem esses bugs, é ótimo.

Então, minha conclusão é a seguinte: apt-mark é utilizável somente se você instalar / remover / atualizar o software somente com apt-get , caso contrário você deve usar pinagem (ou seja, /etc/apt/preferences.d/ ), é mais confiável e simples.

    
por N0rbert 03.02.2018 / 22:01