我有我的官方 Debian 存储库(比如说repo1
)。现在我添加来自package X
( )的供应商的仓库repo2
。 Package X 不在官方 Debian 存储库中。当然,repo 2
可以有一些与 重叠的包repo 1
,例如package Y
,有些甚至可能从来没有,并且需要package X
运行(repo 1::package Y
has version 1.0
,repo 2::package Y
has version 2.0
)。
我想知道,当package X
从repo 2
.最好甚至阻止从安装任何软件包repo 2
,以避免它弄乱我的系统。
我目前的想法是限制repo2
,以便只能package X
从那里安装,但我不知道该怎么做。
为什么我可能想要这个:
我可能不完全信任
repo2
,并且我想跟踪来自那里的包裹如果有除
package X
来自之外的软件包repo2
,而我不允许安装这些软件包,它就会中断package X
,但那没问题,我可以在那时决定是否允许来自该来源的这些软件包,但我会提前了解正在发生的事情
基本上我想apt
告诉我,如果有其他内容,除了Package X
从repo 2
.
我考虑过的一些解决方案:
apt-固定:
- 我认为行不通,因为 if
package X
requireversion 2.0
ofpackage Y
和repo1
hasversion 1.0
,repo 2
将被使用,无论固定如何
调整Packages.gz
来自repo 2
:
- 我不知道这如何实现
答案1
apt
固定可以在这里工作。添加一个条目,例如
Package: *
Pin: origin repo2
Pin-Priority: 100
这将允许从 进行安装repo2
,但将确保两个版本中都存在软件包repo1
,并且repo2
首选repo1
升级版本。如果repo2
另一个包需要某个版本repo2
,apt
可以要求将其与适当的-t
选项一起使用。这与向后移植存储库使用的设置相同。
您最终会出现以下行为:
$ sudo apt install moosefs-client/bullseye-backports
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Selected version '3.0.116-1~bpo11+1' (Debian Backports:bullseye-backports [amd64]) for 'moosefs-client'
Starting pkgProblemResolver with broken count: 0
Starting 2 pkgProblemResolver with broken count: 0
Done
The following packages were automatically installed and are no longer required:
gconf2 libgsf-bin
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
libmfsio1
The following NEW packages will be installed:
libmfsio1 moosefs-client
0 upgraded, 2 newly installed, 0 to remove and 15 not upgraded.
Need to get 504 kB of archives.
After this operation, 1,580 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 http://deb.debian.org/debian bullseye/main amd64 libmfsio1 amd64 3.0.115-1 [171 kB]
Get:2 http://deb.debian.org/debian bullseye-backports/main amd64 moosefs-client amd64 3.0.116-1~bpo11+1 [333 kB]
Fetched 504 kB in 0s (1,395 kB/s)
...
我要求提供 的向后移植版本moosefs-client
,并apt
选择了默认版本libmfsio1
而不是向后移植版本。如果我指定了-t bullseye-backports
,它会从向后移植中选择两者。对于仅在 中可用的包,您根本repo2
不需要指定;/repo2
如果该软件包可以卸载,而无需从中提取repo2
包含旧版本的其他软件包repo1
,apt
则除非您指定,否则将失败-t repo2
。