![通过 Puppet 安装带有依赖项的 Tomcat7 的最简单方法是什么?](https://linux22.com/image/655088/%E9%80%9A%E8%BF%87%20Puppet%20%E5%AE%89%E8%A3%85%E5%B8%A6%E6%9C%89%E4%BE%9D%E8%B5%96%E9%A1%B9%E7%9A%84%20Tomcat7%20%E7%9A%84%E6%9C%80%E7%AE%80%E5%8D%95%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在尝试构建如下简单的 Puppet 配方:
package { 'openjdk-7-jre-headless' : ensure => installed, }
package { 'tomcat7-common' : ensure => installed, }
package { 'tomcat7' : ensure => installed, require => Package['tomcat7-common'],}
package { 'tomcat7-admin' : ensure => installed, require => Package['tomcat7-common'], }
但是运行时sudo puppet apply -v tomcat7.pp
,仍然出现这些错误:
错误:/Stage[main]//Package[tomcat7-common]/ensure:从清除更改为呈现失败:执行“/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install tomcat7-common”返回 100:正在读取软件包列表...
以下软件包具有未满足的依赖项:tomcat7-common:
依赖:libtomcat7-java(>= 7.0.28-4+deb7u1)但是它将不会被安装
E:无法纠正问题,您持有破损的包裹。
每次添加新包时,我的文件都会变大,很难阅读。我真的需要手动指定所有 Tomcat 依赖项吗?或者有没有更简单的方法?
答案1
Puppet 应该自动处理依赖关系,因此应该起作用的简单清单是:
package { [ 'tomcat7', 'tomcat7-admin' ]: ensure => installed, }
但是,根据问题(例如安装了旧的 Tomcat 或依赖项损坏),这些问题应该手动解决。例如,通过手动运行apt-get tomcat7
并检查是什么阻止了它(例如'以下软件包将被删除' 部分)。
使用 Puppet,有以下解决方法:
package { "tomcat7":
ensure => latest,
require => Exec['apt-get update'],
}
或者通过定义absent
(或purged
),例如:
package { [ 'tomcat6', 'tomcat6-common', 'libtomcat6-java','solr-tomcat' ]:
ensure => absent
}
以确保机器上没有安装冲突的包。