可以固定源代码包吗?如果可以的话,怎么做呢?

鉴于这个 /etc/apt/sources.list 文件:
deb     http://us.archive.ubuntu.com/ubuntu/ cosmic main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ cosmic main restricted universe multiverse
deb     http://us.archive.ubuntu.com/ubuntu/ disco  main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ disco  main restricted universe multiverse

这个 `/etc/apt/preferences` 文件:
Package: *
Pin: release a=cosmic
Pin-Priority: 900

Package: *
Pin: release a=disco
Pin-Priority: -10

运行apt install some-package将安装来自cosmic的版本,这是我所期望的。
然而,运行apt source some-package将下载来自disco的(更新的)版本。
我如何让apt source遵守优先级设置?

你使用的是哪个版本的Ubuntu?如果你不知道,请运行lsb_release -a命令并将输出结果发布出来。 - Vijay
@Vijay很明显,因为他固定了宇宙(18.10),我猜这就是他目前的主要版本和迪斯科(19.04)。 - Videonauth
1@smammy,你能否尝试使用 apt source -t cosmic <软件包名称> 并告诉我这对你是否有效? - Videonauth
@Videonauth 是的,那个方法可以,但我希望不必记住使用“-t”开关。 - smammy
2个回答

据APT团队的一个朋友所说,事实证明这是不可能的。apt source命令并不关注pinning。

好知道,因为我在虚拟机中摆弄来寻找一种方法 :) - Videonauth

严格来说,源代码包和二进制包是不同的命名空间。最近版本的apt(在Buster之后,目前只在测试中)开始支持按源代码包而不是二进制包进行固定,使用src:前缀。
例如,如果Buster已经支持它,我会设置以下固定条目,以便优先选择来自backports的Ceph 14软件包(而不是来自stable的过时v12软件包)。
Package: src:ceph
Pin: version 14.*
Pin-Priority: 1002

比起列举由一个源生成的数十个二进制包,这要好得多。
我已经检查过更近期的apt了,可悲的是即使有这个新特性,`apt source`仍然会忽略pinning。:-(