web-dev-qa-db-ja.com

Chefでのapt-getupdateとapt-getupgrade

Chefのpackage "nginx"がUbuntuノードでapt-get install nginxに変換される場合、Chefレシピに記述できるものは次のようになります。

apt-get -y update
apt-get -y upgrade

aptクックブック から理解できませんでした。

17
Marius Butuc

Opscode "apt"クックブック のデフォルトレシピはapt-get updateを実行して、パッケージキャッシュが確実に更新されるようにします。後でパッケージを正しいバージョンでインストールできるように、ノードの実行リストの早い段階でこれを配置することをお勧めします。

いくつかの理由から、一般的にユーザーがレシピで「apt-get upgrade」を使用することはお勧めしません。

  1. apt-getは、構成の競合や、コマンドを再実行するか、他のapt/dpkgコマンドを手動で実行しないと解決できないその他の問題があるパッケージをアップグレードする場合があります。
  2. システム上のすべてのパッケージの自動アップグレードは、実行中のシステムに意図しない副作用をもたらす可能性があります(Edgeのケースは多く、場合によっては厄介なので、すべてを網羅することはできません)。

代わりに、常に最新バージョンに更新する必要があるパッケージに対して「アップグレード」アクションを使用してください。

package "nginx" do
  action :upgrade
end

クックブックを定義するクックブックを再利用する場合は、次のように、既存のリソースのアクションを変更するレシピを作成できます。

resources("package[nginx]").action(:upgrade)

レシピの#resourcesメソッドは、指定されたリソース(パッケージnginx)をリソースコレクションで検索します。次に、引数#actionを指定して:upgradeメソッドを送信すると、Chefにアクションをアップグレードする必要があることが通知されます。

編集更新:この方法で自動的にアップグレードされるパッケージを選択するときは注意してください。パッケージのアップストリーム変更は、システムに悪影響を与える可能性があります。これは、そのようなパッケージがインストール後のスクリプト中に管理するサービスの再起動を行う場合に特に当てはまります。インフラストラクチャを理解し、疑わしい場合は、アプリケーションスタックに必要な重要なパッケージを含む独自のパッケージリポジトリを実行してください。

44
jtimberman

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

セキュリティ更新の長期的な解決策は、更新の遅延を数時間に設定することだと思います。

0
jorfus