我想将特定的包(比如说redis-server
)固定到特定的版本,在我的例子中7.0.*
,这似乎很简单:
Package: redis-server
Pin: version 7.0.*
Pin-Priority: 1001
现在,当 7.0.* 不可用时我也希望失败apt
,要么是因为只有较新的版本可用,例如 7.2.* 或 7.4.*,要么是因为只有较旧的版本可用,例如 6.*。
我似乎找不到实现该目标的方法。我读过各种资源,也咨询过man 5 apt_preferences
,但仍然不知道该怎么做。
我尝试将前一个固定规则与另一个具有优先级的规则相结合-1
,如下所示:
Package: redis-server
Pin: release *
Pin-Priority: -1
但不幸的是,这似乎导致所有版本都不可用。以下是我所看到的:
$ apt-cache policy redis-server
redis-server:
Installed: (none)
Candidate: 5:7.0.15-1build2
Version table:
5:7.0.15-1build2 500
500 [http://no.archive.ubuntu.com/ubuntu](http://no.archive.ubuntu.com/ubuntu) noble/universe amd64 Packages
$ cat > /etc/apt/preferences.d/redis-server
Package: redis-server
Pin: version 7.0.15*
Pin-Priority: 1001
Package: redis-server
Pin: release *
Pin-Priority: -1
$ apt-cache policy redis-server
redis-server:
Installed: (none)
Candidate: (none)
Version table:
5:7.0.15-1build2 -1
500 [http://no.archive.ubuntu.com/ubuntu](http://no.archive.ubuntu.com/ubuntu) noble/universe amd64 Packages
我希望这个配置能够提供一个可用的候选项,因为存在一个(7.0.15),但是它不起作用。
请注意,对我来说成功的结果是:
- 定义目标想要的版本,例如
redis-server=7.0.*
- 提供一个 apt preference.d 文件,以便:** 当有任何 7.0.* 版本可用时,apt 将安装该版本 ** 当没有 7.0.* 版本可用时,apt 将无法安装任何内容
一个糟糕的结果是,安装了 redis-server,但其软件包版本与我指定的要求不匹配(因此与 7.0.* 不同)。
这是在 Ubuntu 24.04 上,虽然我认为这里没有什么特定于 24.04 或 Ubuntu 的东西。
有什么想法吗?