Chefのpackage "nginx"
がUbuntuノードでapt-get install nginx
に変換される場合、Chefレシピに記述できるものは次のようになります。
apt-get -y update
apt-get -y upgrade
apt
クックブック から理解できませんでした。
Opscode "apt"クックブック のデフォルトレシピはapt-get update
を実行して、パッケージキャッシュが確実に更新されるようにします。後でパッケージを正しいバージョンでインストールできるように、ノードの実行リストの早い段階でこれを配置することをお勧めします。
いくつかの理由から、一般的にユーザーがレシピで「apt-get upgrade
」を使用することはお勧めしません。
apt-get
は、構成の競合や、コマンドを再実行するか、他のapt/dpkgコマンドを手動で実行しないと解決できないその他の問題があるパッケージをアップグレードする場合があります。代わりに、常に最新バージョンに更新する必要があるパッケージに対して「アップグレード」アクションを使用してください。
package "nginx" do
action :upgrade
end
クックブックを定義するクックブックを再利用する場合は、次のように、既存のリソースのアクションを変更するレシピを作成できます。
resources("package[nginx]").action(:upgrade)
レシピの#resources
メソッドは、指定されたリソース(パッケージnginx)をリソースコレクションで検索します。次に、引数#action
を指定して:upgrade
メソッドを送信すると、Chefにアクションをアップグレードする必要があることが通知されます。
編集更新:この方法で自動的にアップグレードされるパッケージを選択するときは注意してください。パッケージのアップストリーム変更は、システムに悪影響を与える可能性があります。これは、そのようなパッケージがインストール後のスクリプト中に管理するサービスの再起動を行う場合に特に当てはまります。インフラストラクチャを理解し、疑わしい場合は、アプリケーションスタックに必要な重要なパッケージを含む独自のパッケージリポジトリを実行してください。
Aptシェフのレシピは、シェフが実行されるたびに更新されるわけではありません。これを制御する属性はperiodic_update_min_delay
と呼ばれ、86400に設定されます(属性はsec_delayと呼ばれる必要があります)。次のファイルが存在し、24時間以上経過している場合、aptはキャッシュを更新します。
/var/lib/apt/periodic/update-success-stamp
また、aptレシピ(default.rb)には、レシピが呼び出すことができる更新を強制するディレクティブが含まれているようです。
# For other recipes to call to force an update
execute 'apt-get update' do
ただし、これを行う場合は、not_ifを頻繁に実行しないようにする必要があります。その時点で、自分で手動で呼び出すこともできます。私はこれをいじるのにうんざりして、インストールする前にスタンザでapt-getupdateを呼び出すだけで終わりました。
execute "apt-get-update" do
command "apt-get update"
end
セキュリティ更新の長期的な解決策は、更新の遅延を数時間に設定することだと思います。