ChefSoloを使用してVagrantをプロビジョニングしていますVM Ubuntu 12.04用のOpscodeの「Bento」ボックスに基づいています。プロビジョニングが完了し、初めてSSHで接続すると、MOTDから次のように通知されます。パッケージとセキュリティアップデート。次にSudo apt-get upgrade
を手動で実行すると、後続のログインでメッセージが削除されます。Chefでこの手順を自動化する方法はありますか?「apt」クックブックはこれを処理していないようです。すべてのGoogle検索ではapt-get update
についてのみ検索され、apt-get upgrade
については検索されません。Chefレシピでapt-getコマンドを実行することはできますが、アップグレードプロセス中に、ピンク色の画面に疑似GUIが表示されます。インストールするドライブを選択する必要があり(これはGRUBと呼ばれ、Ubuntuは初めてです)、Chefでこの部分を自動化する方法がわかりません。
Chef + vagrantでこの正確な問題に自分で遭遇したところ、次のことがうまくいきました。
Sudo dpkg-reconfigure -plow grub-pc
これにより、grub-pcを再構成し、grubをインストールするデバイス(存在する場合)を選択できます。ここでデバイスをデフォルトとして設定すると、grubを含むアップグレードで、デバイスの選択を求めないようにする必要があります。この時点で、新しいvagrantボックスを作成し、それをデフォルトとして使用できます。
または
プロンプトを表示せずにapt-getupgrade/dist-upgradeを実行するには、次のコマンドを使用できます。
Sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade
DEBIAN_FRONTEND=noninteractive
は、任意のプロンプトに対するデフォルトの回答を使用します。Dpkg::Options::="--force-confdef"
dpkgが変更していない設定ファイルのみを上書きすることを保証しますDpkg::Options::="--force-confold"
は、現在の構成ファイルが上書きされないようにします。新しい設定ファイルは、.dpkg-distサフィックスで作成されます。「-y」を追加すると、プロンプトを通過します。
Sudo apt-get upgrade -y
Chefがパッケージバージョンをaptデータベースにキャッシュしている可能性があるため、chefを実行する前にこれを行う必要があります。
Jtimberman自身によると、apt-getupgradeを自動的に実行するべきではありません。
Opscodeが推奨するアップグレード方法は、パッケージリソースを使用してパッケージごとに行うことです。
package "php5-curl" do
action :upgrade
end
詳細については、 Chefでapt-get upgradeを自動的に実行しないでください をお読みください。