Debian
DEB:“提供:”欄位被忽略
我需要用一個自定義的包替換一個包,它有自己的名字(foo-origpackage)。為了允許它用作直接替換,我將這
Provides: origpackage
一行添加到控製文件中。apt-cache show foo-origpackage
列出“提供”條目就好了。但是,當我想根據 origpackage 安裝文件時,它會失敗(“未安裝包 origpackage”)。我缺少的“真實”和虛擬包之間有什麼區別嗎?
編輯:
準確地說,我要替換的是用於 Squeeze 的 xen-utils-common。我的 tao-xen-utils-common 有以下
control
文件:來源:tao-xen-utils-common 部分:核心 優先級:可選 維護者:Creshal <administration@tao.at> 建構依賴:debhelper 標準版本:3.8.0 首頁:http://tao.at 包:tao-xen-utils-common 架構:全部 取決於:gawk、lsb-base、udev、xenstore-utils、tao-firewall 提供:xen-utils-common 衝突:xen-utils-common 替換:xen-utils-common 說明:Xen管理工具-通用文件(修改) 用於管理通過 Xen 虛擬化的系統的使用者空間工具 機監視器。 修改為與 TAO 防火牆一起使用。
但是,安裝 xen-utils-4.0 失敗:
foo@bar# apt-cache showpkg tao-xen-utils-common 包:tao-xen-utils-common 版本: 4.0.0-1tao1 (/var/lib/apt/lists/repo.tao.at_dists_stable_main_binary-amd64_Packages) (/var/lib/dpkg/status) 描述語言: 文件:/var/lib/apt/lists/repo.tao.at_dists_stable_main_binary-amd64_Packages MD5:7c2503f563fca13b33b4eb3cbcb3c129 反向取決於: tao-firewall,tao-xen-utils-common tao-firewall,tao-xen-utils-common 依賴項: 4.0.0-1tao1 - gawk (0 (null)) lsb-base (0 (null)) udev (0 (null)) xenstore-utils (0 (null)) tao-firewall (0 (null)) xen-utils -common (0 (null)) xen-utils-common (0 (null)) 提供: 4.0.0-1tao1 - xen-utils-common 反向提供: foo@bar# apt-get install xen-utils-4.0 閱讀包裹清單...完成 建構依賴樹 讀取狀態資訊...完成 將安裝以下額外軟體包: xen-utils-common 推薦套餐: xen-docs-4.0 以下軟體包將被刪除: tao-xen-utils-common 將安裝以下新軟體包: xen-utils-4.0 xen-utils-common
編輯:
foo@bar# apt-cache 策略 xen-utils-4.0 xen-utils-4.0: 已安裝:(無) 候選人:4.0.1-4 版本表: 4.0.1-4 0 500 [http://ftp.at.debian.org/debian/stable/main](http://ftp.at.debian.org/debian/) amd64 包 4.0.1-4 0 500 [http://security.debian.org/stable/updates/main](http://security.debian.org/) amd64 包
我花了相當長的時間調查同樣的問題,我得出的結論是“Provides”被忽略了,因為 xen-utils-4.0 在 xen-utils-common 上有一個版本化的“Depends”。
引用Debian 政策手冊:
Provides 欄位可能不包含版本號,在考慮對虛擬包名稱的依賴或衝突時,將不考慮提供特定虛擬包的具體包的版本號。
如果 Depends 沒有版本化,provides 就會得到滿足,但是始終沒有版本化的 Provides 永遠無法滿足版本化的 Depends。
不幸的是,除了您已經提出的解決方案之外,我沒有其他解決方案:保持相同的包名稱並具有更高的版本號。