18

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

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

aptクックブックからはわかりませんでした。

4

2 に答える 2

44

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

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

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

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

package "nginx" do
  action :upgrade
end

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

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

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

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

于 2013-02-26T15:51:22.217 に答える
0

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-get update を呼び出すだけになりました。

execute "apt-get-update" do
  command "apt-get update"
end

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

于 2016-02-17T18:22:27.367 に答える