固定和本地存储库

固定和本地存储库

我无法完全理解 Debian 中的固定问题。我尝试首先从本地项目存储库自动安装软件包,然后从本地稳定存储库,然后从官方 Debian 存储库自动安装软件包,以相同的顺序根据需要满足依赖项。

所以我在 /etc/apt/sources.list 中有三个存储库:

deb http://our-stable-repo/ our-squeeze-stable main
deb http://official-debian-repo/ squeeze main
deb http://our-project-repo/ our-project main

发布文件如下,our-stable-repo:

Origin: Ourname
Label: Ourname
Suite: our-squeeze-stable
Components: backports main
Architectures:  
MD5Sum:
 [...]
SHA1:
 [...]

和我们的项目仓库:

Origin: Ourname
Label: Ourname
Archive: our-project
Component: main
Architecture: amd64

我们所有的包都在 our-stable-repo 和 our-project-repo 中。我想测试 our-project-repo 中的一个包,该包几乎没有来自相同的依赖项,还有一些来自 our-stable-repo 的依赖项(那些不需要测试的包)。

现在我设置我的 /etc/apt/preferences:

Package: *
Pin: release a=our-project
Pin-Priority: 900

Package: *
Pin: release a=our-squeeze-stable
Pin-Priority: 750

Package: *
Pin: release a=squeeze
Pin-Priority: 600

所以我希望 apt 尝试安装任何首先从我们的项目中打包。

但这种情况并没有发生。我们的挤压稳定似乎总是“赢”。即使-t our-project在命令行上提供也无济于事。我能够从项目存储库中安装我的软件包的唯一方法是去除其他来源,但这样我就失去了依赖关系。

我尝试使用 进行调试apt-cache policy,但这更令人困惑:

root@test:~# apt-cache policy
Package files:
 100 /var/lib/dpkg/status
     release a=now
 500 http://our-project-repo/ our-project/main amd64 Packages
     origin our-project-repo
 500 http://official-debian-repo/debian-security/ squeeze/updates/non-free amd64 Packages
     release v=6.0,o=Debian,a=oldstable,n=squeeze,l=Debian-Security,c=non-free
     origin official-debian-repo
 500 http://official-debian-repo/debian-security/ squeeze/updates/contrib amd64 Packages
     release v=6.0,o=Debian,a=oldstable,n=squeeze,l=Debian-Security,c=contrib
     origin official-debian-repo
 500 http://official-debian-repo/debian-security/ squeeze/updates/main amd64 Packages
     release v=6.0,o=Debian,a=oldstable,n=squeeze,l=Debian-Security,c=main
     origin official-debian-repo
 500 http://official-debian-repo/debian/ squeeze/non-free amd64 Packages
     release v=6.0.7,o=Debian,a=oldstable,n=squeeze,l=Debian,c=non-free
     origin official-debian-repo
 500 http://official-debian-repo/debian/ squeeze/contrib amd64 Packages
     release v=6.0.7,o=Debian,a=oldstable,n=squeeze,l=Debian,c=contrib
     origin official-debian-repo
 500 http://official-debian-repo/debian/ squeeze/main amd64 Packages
     release v=6.0.7,o=Debian,a=oldstable,n=squeeze,l=Debian,c=main
     origin official-debian-repo
 750 http://our-stable-repo/ our-squeeze-stable/main amd64 Packages
     release o=Ourname,a=our-squeeze-stable,l=Ourname,c=main
     origin our-stable-repo
Pinned packages:
root@test:~# 

为什么在这个 apt-cache 策略输出中,项目仓库仍然有 500 个?

这个设置有什么问题吗?

答案1

 500 http://our-project-repo/ our-project/main amd64 Packages
     origin our-project-repo

请注意缺少释放线。这很重要,因为您正在尝试在发布字段上设置固定。最有可能的是,您的存档中没有正确的发布文件(或者至少没有设置字段)。

不确定您使用什么来维护包存档,但是(例如)对于 mini-dinstall,您需要设置release_*配置选项。您可以检查 /var/lib/apt/lists 以查找 apt-get 的存档的当前版本文件(如果有)。如果您apt-get update仔细观察,您可以看到它下载(或无法下载)发布文件以及相关内容(例如 Release.gpg,发布文件的签名)。

如果您无法修复发布文件,请在源上设置固定:

Package: *
Pin: origin "our-project-repo"
Pin-Priority: 900

相关内容