我正在尝试构建如下简单的 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
}
以确保机器上没有安装冲突的包。