Я использую марионетку, чтобы подготовить бродячий ящик (в данном случае Ubuntu). После первоначального запуска бродячей коробки (vagrant up
), Бег apt-get upgrade
перечислит несколько обновлений. Я хотел бы запустить эти обновления при первой загрузке, но мне не удается заставить марионетку запускать даже apt-get upgrade:
# 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
** Дополнительное исследование: ** в одном сообщении группы Google было предложено следующее, что не помогло:
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'],
}