web-dev-qa-db-ja.com

人形を使用してvagrantboxがアップグレードされていることを確認する

私は人形を使って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に呼び出しを追加してみました。どちらも機能しませんでした。

ありがとう!

2
Rob

したがって、パス設定は正しい方向に進んでいることがわかり、この投稿は、これを修正する方法の最後のビットを追跡するのに役立ちました: 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'],
}
1
Rob

最初の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'],
}
0
RaginBajin