我在一个有两个回复的系统中安装Debian buster repo软件包时遇到了一个问题,这个问题将影响我们部署的大多数傀儡包。傀儡正试图从我们当地的回购中安装它。
我们使用Ubuntu 16在硬件上和VM上运行多个Ganeti集群,现在我们决定将硬件转移到Debian。我们有一个本地回购公司提供我们的具体包,以及一些Ubuntu包。我在测试阶段用Debian和一些VM建立了一个新的Ganeti集群。
我使用的代码如下:
package { 'haproxy':
ensure => latest,
}在VM上,我手动安装了包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
.....
.....
.....当我在节点上运行傀儡代理时,会得到一个错误:
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.所以很明显,木偶试图将包升级到1.8.19-1ppa1~xenial,这与包资源中的latest有关。我不想将“确保”属性更改为installed或present,而是试图让代码在Ubuntu (它确实使用)和Debian上工作。更改Pin-Priority也不是一个好主意,因为我们需要在每个系统上安装一些本地回购的标准包,而不必修改每个模块中的傀儡代码。我想到的唯一工作是添加属性install_options,以便包资源如下所示(我还没有测试它):
if $facts['operatingsystem'] == 'Debain' {
package { 'haproxy':
ensure => latest,
install_options => ['-t', 'buster'],
}
} else {
package { 'haproxy':
ensure => latest,
}
}但这意味着当发生冲突时,我必须修改每个模块中的所有包资源,这是我想要避免的。
是否有更好的方法来实现这一点?
谢谢
发布于 2019-04-22 15:40:07
如果您是从命令行手动安装包,这取决于您描述的存储库配置,那么每次都需要提供一个命令行选项,对吗?您需要指定特定的包版本或对源列表进行调整。
木偶对此没有神奇的解决办法。如果您需要覆盖特定包的存储库配置,那么您需要以某种方式在受影响的Package资源上提供相应的属性。有两种基本途径:
Package资源,可能是以特定于发行版的方式。尽管您可以使用条件语句来实现任何必要的发行版专用性,但我建议采用依赖参数化类和Hiera的数据驱动方法。https://stackoverflow.com/questions/55792631
复制相似问题