É possível apt-pin dois repositórios packages.sury.org, que não possuem Label, Component, Origin, etc?

2

Isso me levou a duas sessões separadas de várias horas para compreender completamente como o sistema preferences.d funciona no apt.

Na minha máquina local de desenvolvimento, eu tenho muito de diferentes fontes apt ..:

/etc/apt/sources.list.d
; ls
total 64
-rw-r--r-- 1 root root  55 Jan 23 14:08 deb-backports.list
-rw-r--r-- 1 root root 158 Mar  4 06:05 deb-experimental.list
-rw-r--r-- 1 root root 164 Jan 23 14:23 deb-security.list
-rw-r--r-- 1 root root 146 Mar  4 06:05 deb-stable.list
-rw-r--r-- 1 root root 148 Mar  4 06:05 deb-testing.list
-rw-r--r-- 1 root root 150 Mar  4 06:05 deb-unstable.list
-rw-r--r-- 1 root root  42 Nov 30 22:35 dotdeb.list
-rw-r--r-- 1 root root  54 Nov 30 22:35 dotdeb.nginx-http2.list
-rw-r--r-- 1 root root 189 Oct  2 00:59 google-chrome.list
-rw-r--r-- 1 root root  49 Feb  6 18:51 suryorg-nginx.list <-- here
-rw-r--r-- 1 root root  47 Feb  6 18:53 suryorg-php.list   <-- here

Para economizar um pouco de digitação, tenho todas as mesmas preferências em /etc/apt/preferences.d do que esta outra pergunta do ServerFault referente ao apt pinning ... (mesmo que isso seja principalmente irrelevante) ... bem como uma regra de fixação personalizada adicional para packages.sury.org , que fornece dois repositórios separados para nginx e php. (isso não é irrelevante ...)

Isso resulta nesse apt-cache policy :

Package files:
 100 /var/lib/dpkg/status
     release a=now
 950 https://packages.sury.org/php/ jessie/main amd64 Packages
     release n=jessie,c=main
     origin packages.sury.org
 950 https://packages.sury.org/nginx/ jessie/main amd64 Packages
     release n=jessie,c=main
     origin packages.sury.org
 900 http://dl.google.com/linux/chrome/deb/ stable/main amd64 Packages
     release v=1.0,o=Google, Inc.,a=stable,n=stable,l=Google,c=main
     origin dl.google.com
 500 http://packages.dotdeb.org/ jessie-nginx-http2/all amd64 Packages
     release o=packages.dotdeb.org,a=jessie-nginx-http2,n=jessie-nginx-http2,l=packages.dotdeb.org,c=all
     origin packages.dotdeb.org
 500 http://packages.dotdeb.org/ jessie/all amd64 Packages
     release o=packages.dotdeb.org,a=jessie,n=jessie,l=packages.dotdeb.org,c=all
     origin packages.dotdeb.org
 500 http://ftp.us.debian.org/debian/ unstable/non-free Translation-en
 500 http://ftp.us.debian.org/debian/ unstable/main Translation-en
 500 http://ftp.us.debian.org/debian/ unstable/contrib Translation-en
  50 http://ftp.us.debian.org/debian/ unstable/non-free amd64 Packages
     release o=Debian,a=unstable,n=sid,l=Debian,c=non-free
     origin ftp.us.debian.org
     ... { snipped }

Eu estava muito confuso sobre como fixar repositórios aptos / de terceiros, como o dotdeb e o sury.org, até descobrir como usar o a= , n= , v= , c= , o= , bem como as opções "origin" vs "release" para o Pin: line, my sury.org, conforme descrito em página do manual apt_preferences . Por exemplo, fazer um pin para os múltiplos repositórios do dotdeb é simples:

Package: *
Pin: release a=jessie
Pin-Priority: 500

Package: * 
Pin: release a=jessie-nginx-http2 
Pin-Priority: -1 

... com a linha "archive" ( a= bit) prontamente disponível via apt-cache policy . (Nota: eu não entendo se realmente fazendo esse exemplo específico acima faria sentido em muitas situações, apenas um exemplo artificial).

Então, chegamos ao sury.org:

 950 https://packages.sury.org/php/ jessie/main amd64 Packages
     release n=jessie,c=main
     origin packages.sury.org
 950 https://packages.sury.org/nginx/ jessie/main amd64 Packages
     release n=jessie,c=main
     origin packages.sury.org

Como você pode ver, a única coisa especificada aqui é a parte do nome de código ( n=jessie ) e nenhum nome de arquivo, componente ou rótulo exclusivo.

Eu tentei usar o método origin , e.x.

Package: *
Pin: origin packages.sury.org
Pin-Priority: 950

E você pode ver acima no apt-cache policy output, isso faz funcionar. No entanto, não há como restringi-lo às partes individuais do diretório de repositório /nginx/ ou /php/ , tanto quanto eu posso dizer. Ao colocar a parte do diretório / caminho na linha " Pin: ", ela pára de corresponder à regra. Isto é, ...

...
Pin: origin packages.sury.org/nginx/

Não funciona como esperado. Existe alguma solução para isso? Ou isso é simplesmente uma falha do mantenedor do sury.org (o que não é ofensivo para eles, eles fazem um ótimo trabalho, .. isso é apenas um caso extremo, e eu também sou apenas honestamente curioso)

Muito obrigado pelo seu tempo.

    
por A.B. Carroll 04.03.2017 / 12:36

0 respostas

Tags