私は人形を使ってvagrantbox(この場合はUbuntu)をプロビジョニングしています。最初にvagrantボックス(vagrant up
)を開始した後、apt-get upgrade
を実行すると、いくつかの更新が一覧表示されます。これらのアップグレードを最初の起動時に実行したいのですが、パペットがapt-getupgradeを実行するのに問題があります。
# run apt-get update
exec { "apt-update":
command => "/usr/bin/apt-get update"
}
# run apt-get upgrade
exec { "apt-upgrade":
command => "apt-get upgrade -y",
path => "/usr/bin:/usr/sbin:/bin:/usr/local/bin",
require => Exec['apt-update'],
}
以下は失敗します:
err: /Stage[main]//Exec[apt-upgrade]/returns: change from notrun to 0 failed: apt-get upgrade -y returned 100 instead of one of [0] at /tmp/vagrant-puppet-1/manifests/site.pp:34
**追加の調査:** 1つのグーグルグループの投稿は、役に立たなかった次のことを示唆しました:
Exec { path => [ "/usr/bin", "/usr/sbin", "/bin", "/usr/local/bin" ] }
また、以前にもapt-get -f install -y
に呼び出しを追加してみました。どちらも機能しませんでした。
ありがとう!
したがって、パス設定は正しい方向に進んでいることがわかり、この投稿は、これを修正する方法の最後のビットを追跡するのに役立ちました: https://ask.puppetlabs.com/question/1563/why-does- exec-fail-when-executing-directly-succeeds /
基本的に、dkpg
はエラーになりました:
notice: /Stage[main]//Exec[apt-upgrade]/returns: dpkg: warning: 'ldconfig' not found in PATH or not executable.
notice: /Stage[main]//Exec[apt-upgrade]/returns: dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
notice: /Stage[main]//Exec[apt-upgrade]/returns: dpkg: error: 2 expected programs not found in PATH or not executable.
notice: /Stage[main]//Exec[apt-upgrade]/returns: Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
notice: /Stage[main]//Exec[apt-upgrade]/returns: E: Sub-process /usr/bin/dpkg returned an error code (2)
アップグレードのパスに/sbin
を追加すると、機能します。
exec { 'apt-upgrade':
command => "/usr/bin/apt-get --quiet --yes --fix-broken upgrade",
logoutput => "on_failure",
path => "/usr/bin:/usr/sbin:/bin:/usr/local/bin:/usr/local/sbin:/sbin",
require => Exec['apt-update'],
}
最初のapt-get更新リクエストを次のように変更します。
exec { 'apt-get':
command => "/usr/bin/apt-get update",
onlyif => "/bin/sh -c '[ ! -f /var/cache/apt/pkgcache.bin ] || /usr/bin/find /etc/apt/* -cnewer /var/cache/apt/pkgcache.bin | /bin/grep . > /dev/null'",
}
次に、次のことができます。
# run apt-get upgrade
exec { 'apt-upgrade':
command => "/usr/bin/apt-get upgrade -y",
require => Exec['apt-update'],
}