【发布时间】:2019-04-22 10:05:03
【问题描述】:
我在一个有两个存储库的系统中从 Debian buster 存储库安装软件包时遇到问题,这个问题将影响我们使用 puppet 部署的大多数软件包。 Puppet 正在尝试从我们的本地存储库中安装它。
我们在硬件和虚拟机上运行多个带有 Ubuntu 16 的 Ganeti 集群。现在我们决定将硬件转移到 Debian 稳定版。我们在公司有一个本地仓库来提供我们的特定软件包以及一些 Ubuntu 软件包。我用 Debian 和一些虚拟机建立了一个新的 Ganeti 集群,用于测试阶段。
我使用的代码如下:
package { 'haproxy':
ensure => latest,
}
在虚拟机上我手动安装了包haproxy,因为我遇到了下面描述的错误,我试图看看如果系统上已经存在包会发生什么,所以我有以下情况:
# apt-cache policy haproxy
haproxy:
Installed: 1.8.19-1
Candidate: 1.8.19-1ppa1~xenial
Version table:
1.8.19-1ppa1~xenial 500
500 http://our.local.repo/local-xenial local-xenial/main amd64 Packages
*** 1.8.19-1 500
500 http://ftp.de.debian.org/debian buster/main amd64 Packages
100 /var/lib/dpkg/status
.....
.....
.....
当我在节点上运行 puppet 代理时出现错误:
The following packages have unmet dependencies:
haproxy : Depends: libssl1.0.0 (>= 1.0.2~beta3) but it is not installable
E: Unable to correct problems, you have held broken packages.
Error: /Stage[main]/puppet_haproxy::Base/Package[haproxy]/ensure: change from 1.8.19-1 to 1.8.19-1ppa1~xenial failed: Could not update: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install haproxy' returned 100: Reading package lists...
Building dependency tree...
Reading state information...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
haproxy : Depends: libssl1.0.0 (>= 1.0.2~beta3) but it is not installable
E: Unable to correct problems, you have held broken packages.
显然 puppet 正在尝试将包升级到与包资源中的latest 相关的1.8.19-1ppa1~xenial。
我不想将 ensure 属性更改为 installed 或 present,而是试图让代码在 Ubuntu(它确实如此)以及 Debian 上运行。
更改 Pin-Priority 也不是一个好主意,因为我们需要在每个系统上安装来自本地 repo 的一些标准包,而无需修改每个模块中的 puppet 代码。
我想到的唯一工作是添加属性install_options,以便包资源如下(我还没有测试过):
if $facts['operatingsystem'] == 'Debain' {
package { 'haproxy':
ensure => latest,
install_options => ['-t', 'buster'],
}
} else {
package { 'haproxy':
ensure => latest,
}
}
但这意味着当发生冲突时,我必须修改每个模块中的所有包资源,这是我想避免的。
有没有更好的方法来实现这一点?
谢谢
【问题讨论】:
标签: puppet