我使用官方的 Puppet apt 模块来添加这个 Java 启动板并安装 Oracle Java 8。
apt::ppa{ 'ppa:webupd8team/java': }
package {
"oracle-java8-installer":
ensure => 'installed',
}
当 apt 模块添加启动板时,它会通知另一个清单运行“apt-get update”。
apt/manifests/ppa.pp
exec { "add-apt-repository-${name}":
environment => $_proxy_env,
command => "/usr/bin/add-apt-repository ${options} ${name}",
unless => "/usr/bin/test -s ${::apt::sources_list_d}/${sources_list_d_filename}",
user => 'root',
logoutput => 'on_failure',
notify => Exec['apt::update::apt_update'],
require => $_require,
}
问题是我无法确保在安装开始之前运行源更新。
使用“require”或“before”运行更新后安装(添加源->安装 Java->apt-get 更新),订阅返回一个依赖循环,并且在更新我的源之前不使用任何关系进行安装。
解决方案是什么?
使用 Frank 的代码:
apt::ppa{ 'ppa:webupd8team/java': }
package {
"oracle-java8-installer":
ensure => 'installed',
require => Apt::Ppa['ppa:webupd8team/java'],
}
我收到此错误信息:
==> xxx:通知:/Stage[main]/Main/Node[xxx]/Apt::Ppa[ppa:webupd8team/java]/Exec[add-apt-repository-ppa:webupd8team/java]/returns:执行成功
==> xxx:错误:执行“/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install oracle-java8-installer”返回 100:正在读取软件包列表...
==> xxx:正在构建依赖关系树...
==> xxx:正在读取状态信息...
==> xxx:E:无法找到软件包 oracle-java8-installer
==> xxx:错误:/Stage[main]/Main/Node[xxx]/Package[oracle-java8-installer]/ensure:从清除更改为当前失败:执行“/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install oracle-java8-installer”返回 100:正在读取软件包列表...
==> xxx:正在构建依赖关系树...
==> xxx:正在读取状态信息...
==> xxx:E:无法找到软件包 oracle-java8-installer
==> xxx:通知:/Stage[main]/Apt::Update/Exec[apt_update]:依赖包[oracle-java8-installer] 出现故障:true
==> xxx:警告:/Stage[main]/Apt::Update/Exec[apt_update]:由于依赖项失败而跳过
==> xxx:通知:/Stage[main]/Apt::Update/Exec[apt_update]:从 1 个事件触发“刷新”
使用这个:
package {
"oracle-java8-installer":
ensure => 'installed',
require => Exec['apt::update::apt_update'],
}
我收到此错误:
Error: Failed to apply catalog: Could not find dependency Exec[apt::update::apt_update] for Package[oracle-java8-installer]
答案1
你的发现令人困惑。require
真的应该让你到达那里。
package {
"oracle-java8-installer":
ensure => 'installed',
require => Apt::Ppa['ppa:webupd8team/java'],
}