我花了两个单独的几个小时才完全理解preferences.d
apt 系统的工作方式。
在我的本地开发机器上,我有很多不同的 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
为了节省一些输入,我把所有相同的首选项都/etc/apt/preferences.d
放在有关 apt pinning 的其他 ServerFault 问题...(尽管这大多是无关紧要的)..以及一个额外的自定义固定规则packages.sury.org
,它为 nginx 和 php 提供了两个独立的存储库。(这并非无关紧要......)
结果是这样的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 }
我对如何固定自定义/第三方 apt 存储库(例如 dotdeb 和 sury.org)感到非常困惑,直到我弄清楚如何使用、、、、、以及Pin a=
:行的“origin”与“release”选项,我的 sury.org,如中所述n=
v=
c=
o=
apt_preferences 手册页。例如,为 dotdeb 的多个存储库进行 pin 很简单:
Package: *
Pin: release a=jessie
Pin-Priority: 500
Package: *
Pin: release a=jessie-nginx-http2
Pin-Priority: -1
a=
...可通过 轻松获得“存档”行 (位 ) apt-cache policy
。 (注:我不明白是否实际上在许多情况下,执行上述特定示例都是有意义的,只是一个人为的例子)。
然后,我们进入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
如您所见,这里唯一指定的是代号部分(n=jessie
),没有唯一的档案名称、组件或标签。
我尝试使用该origin
方法,例如
Package: *
Pin: origin packages.sury.org
Pin-Priority: 950
你可以在上面的apt-cache policy
输出中看到,这个做有效。但是,据我所知,没有办法将其缩小到单个/nginx/
或存储库目录部分。通过将目录/路径部分放在“ ”行中,它将停止匹配规则。也就是说,.../php/
Pin:
...
Pin: origin packages.sury.org/nginx/
无法按预期工作。有没有什么解决方法?或者这只是 sury.org 维护者的一个缺点(这不是冒犯他们,他们做得很好,……这只是一个边缘案例,而且我也很好奇)
非常感谢您的宝贵时间。