首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用木偶从特定的回购包中安装软件包

用木偶从特定的回购包中安装软件包
EN

Stack Overflow用户
提问于 2019-04-22 10:05:03
回答 1查看 1.5K关注 0票数 0

我在一个有两个回复的系统中安装Debian buster repo软件包时遇到了一个问题,这个问题将影响我们部署的大多数傀儡包。傀儡正试图从我们当地的回购中安装它。

我们使用Ubuntu 16在硬件上和VM上运行多个Ganeti集群,现在我们决定将硬件转移到Debian。我们有一个本地回购公司提供我们的具体包,以及一些Ubuntu包。我在测试阶段用Debian和一些VM建立了一个新的Ganeti集群。

我使用的代码如下:

代码语言:javascript
复制
package { 'haproxy':
  ensure => latest,
}

在VM上,我手动安装了包haproxy,因为我有下面描述的错误,我试着看看如果包已经出现在系统上会发生什么,这样我就有了以下情况:

代码语言:javascript
复制
# 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
  .....
  .....
  .....

当我在节点上运行傀儡代理时,会得到一个错误:

代码语言:javascript
复制
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有关。我不想将“确保”属性更改为installedpresent,而是试图让代码在Ubuntu (它确实使用)和Debian上工作。更改Pin-Priority也不是一个好主意,因为我们需要在每个系统上安装一些本地回购的标准包,而不必修改每个模块中的傀儡代码。我想到的唯一工作是添加属性install_options,以便包资源如下所示(我还没有测试它):

代码语言:javascript
复制
if $facts['operatingsystem'] == 'Debain' {
  package { 'haproxy':
    ensure          => latest,
    install_options => ['-t', 'buster'],
  }
} else {
  package { 'haproxy':
    ensure => latest,
  }
}

但这意味着当发生冲突时,我必须修改每个模块中的所有包资源,这是我想要避免的。

是否有更好的方法来实现这一点?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-22 15:40:07

如果您是从命令行手动安装包,这取决于您描述的存储库配置,那么每次都需要提供一个命令行选项,对吗?您需要指定特定的包版本或对源列表进行调整。

木偶对此没有神奇的解决办法。如果您需要覆盖特定包的存储库配置,那么您需要以某种方式在受影响的Package资源上提供相应的属性。有两种基本途径:

  1. 更新存储库配置,这样就不需要额外的选项了。例如,您可以将本地回购分成两个部分,一个优先级低于发行版,另一个优先级更高。或者你需要一个单独的Debian回购,而不是Ubuntu。或
  2. 修改您的木偶清单中声明的Package资源,可能是以特定于发行版的方式。尽管您可以使用条件语句来实现任何必要的发行版专用性,但我建议采用依赖参数化类和Hiera的数据驱动方法。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55792631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档