SDB:厂商变更
这篇文章解释了厂商粘性概念并且提供了关于如何覆盖这一默认行为的信息。
目录
概述
版本:11.2+ 下面的介绍适用于openSUSE 11.2+。
软件包管理器 Zypp 使用 厂商粘性 概念。这意味着当你更新你的系统时,如果一个更新的版本由另外一个不同的厂商提供,那么已经安装的软件包不会更新到这个更新的版本。
厂商粘性的优势:
- 当你更新的时候,你不必承担因为使用测试版本的软件包替换掉稳定版本的软件包带来的偶然性风险。
- 当相同的软件包存在于不同的软件源时,你不必承担每次更新时不同软件源间软件包乒乓效应带来的风险。
厂商粘性的不足:
- 需要厂商变更的可用更新有些隐藏在YAST
- 更新或者变更一个软件包到其他不同的厂商需要多一点的工作
- 从今往后,软件包管理器将询问你是否确实想要变更厂商,这样会有点烦人,可怕,无助。
执行厂商变更更新
这些都是你用来执行厂商变更更新的不同方式。
单个软件包厂商变更
使用 YAST
搜索你想要更新的软件包,然后进入 版本(V) 标签,并且选择你想要安装的版本。
使用 zypper
使用zypper指定安装的版本,比如:
zypper install 'amarok=2.3.1'
或者指定一个软件源:
zypper install --from [repository] [package]
整个软件源的厂商变更
使用 YAST
如果你想切换所有已安装的软件包到一个指定软件源的版本,打开 安装源(R) 标签,选择所需要的软件源并且点击 Switch system packages to the versions in this repository
使用 zypper
你也可以使用zypper为软件源的所有软件包切换厂商:
zypper dup --from [repository]
允许厂商变更的一般做法
允许对选定的软件源进行厂商变更
你可以通过在/etc/zypp/vendors.d/目录下创建一个定义了不同对等厂商软件源的列表文件,并写入以下内容:
[main] vendors = suse,opensuse,obs://build.suse.de,Packman,http://packman.links2linux.de
你可以通过YAST("版本"标签)或者命令行"zypper if <package>"来查找厂商。
- 你可以使用任何文件名,但是这个目录的每个文件影响一组对等的厂商。
- Libzypp 仅做一个字符串开头比较(像strncmp, 大小写不敏感)。比如厂商 "opensuse11.0" 和 "openSUSE" 兼容。
禁用厂商粘性
如果你希望你可以完全禁用厂商粘性 - 这种情况下软件包管理器不会在再询问为软件包变更厂商的权限,并且更新都只会安装软件包所具有的最高版本,不管它来自何方。
在 /etc/zypp/zypp.conf 设置:
solver.allowVendorChange = true
现在 zypper up 将会从任何一个厂商安装其最新版本。而且 YaST 将会标记有可用更新的软件包为蓝色,即使这个更新来自于不同的厂商。