多くのサーバーがありますが、それでもすべてを更新したいと考えています。実際の方法は、システム管理者のいずれかがサーバーからサーバーに移動してaptitude update && aptitude upgrade
を作成することです-それはまだクールではありません。
私は今、さらに優れた非常にスマートなソリューションを探しています。人形はこの仕事をすることができますか?どうやってやるの?
次のようなexec
タイプを使用できます。
exec { "upgrade_packages":
command => "apt-get upgrade -q=2",
path => "/usr/local/bin/:/bin/:/usr/bin/",
# path => [ "/usr/local/bin/", "/bin/" ], # alternative syntax
}
正直なところ、私は自分で試したわけではありませんが、そのようなexec定義を含む新しいモジュールを作成する必要があると思います。
apt-get upgrade
コマンドはインタラクティブです。静かに実行するには、上記のようにオプション-q=2
を追加できます。
すべてのホストがdebianの場合、無人アップグレードパッケージを試すことができます。
http://packages.debian.org/sid/unattended-upgrades
ここでは、Puppetを使用してDebian仮想マシンを管理してきました。Puppetを使用すると、すべてのサーバーで不要なアップグレード構成を有効にして管理できます。
最近、私たちのチームはすべてのサーバーでコマンドを実行するためにmcollectiveツールをテストしていますが、mcollectiveを使用するにはRubyスキルが必要です。
[s]ぐと
Puppet、facter、mCollectiveに行くことをお勧めします。
mCollectiveは、facterをフィルターとして使用して、一連のホスト上で(並列に)コマンドを実行できる非常に優れたフレームワークです。
これにローカルプロキシ/キャッシュを追加すると、サーバー管理の準備が整います。
複数のサーバーで単一のコマンドを実行するように作成されたツールを使用します。そしてそれは、ターミネーターやClusterSSHで数千万の端末を開くことを意味するのではなく、その代わりに、ジョブに適したツールを実行する管理サーバーへの単一の端末を持つことを意味します。
このコンテキストでは、func、Salt、またはmCollectiveをお勧めします。既にPuppetがある場合は、mCollectiveを使用してください(Puppetにうまく統合されます)。そうでない場合で、古いPythonがマシンにある場合は、funcを楽しむことができます。新しいPythonの場合は、Saltを試してください。これらすべてツールは、コマンドラインで指定されたコマンドを非同期で実行します。これは、シーケンシャルsshループや、umpteenターミネーターウィンドウでumpteenサーバーに対して同じaptitudeコマンドを実行するよりもはるかに楽しいです。
あなたは間違いなくlove塩 でしょう。
ですから、良い解決策に貢献するものはたくさんあると思います。
Bandwidth:基本的に、帯域幅を節約するための2つの選択肢が思い浮かびます:
Administration: [〜#〜] pdsh [〜#〜] 、 のような並列シェルを構成します[〜#〜] pssh [〜#〜] 、 GNU Parallel 以前にサンプルマシンでコマンドをテストした場合は、すべてのクライアントでコマンドを発行します。そうすれば、他のすべてで失敗する可能性はほとんどありません。または、すべてのクライアントでcronジョブを検討することもできますが、自動的に失敗する可能性があるため、最初の解決策をお勧めします。
アップグレードの同時性が心配な場合は、at
を使用してコマンドをスケジュールできます。
Logging:並列シェルと同様に、出力をリダイレクトする可能性があります。stderrとstdoutを組み合わせて、ログファイルに書き込みます。
Execを使用した答えはかなり役に立ちます。
ただし、apt-getマニュアルによると、この方法で-q = 2を使用することはお勧めできません(私は何年も問題なく使用してきましたが)
-q, --quiet
Quiet; produces output suitable for logging, omitting progress indicators. More q's will produce more quiet up to a maximum of 2. You can also use -q=# to set the
quiet level, overriding the configuration file. Note that quiet level 2 implies -y, you should never use -qq without a no-action modifier such as -d, --print-uris or
-s as APT may decided to do something you did not expect. Configuration Item: quiet.
私は何年もの間自分でスクリプトを使用し、apt-getを次のように実行しています。
ssh example.org "apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade && apt-get clean"
人形やその他の人々が確かに言及した他のツールのようなものは確かに機能するかもしれませんが、基本的に人間が入力したいくつかのコマンドを模倣しているだけではやり過ぎのようです。特定のジョブに最も単純なツールを使用することを信じています。この場合、bashスクリプトは、機能を失うことなく、ほぼ同じくらい単純です。
Fabric を使用できます。ファブリックは、Python(2.5-2.7)ライブラリおよびコマンドラインツールであり、アプリケーションのデプロイメントまたはシステム管理タスクでのSSHの使用を効率化します。
私自身の並列sshラッパー: classh は、さまざまな並列およびクラスターsshツールに代わるものです。
あなたはそれをより良く好むかもしれないし、嫌いかもしれない。ここで言及する理由は3つだけです。
subprocess.communicate()
メソッドの制限に関連する唯一の制限---したがって、64dまでのstdoutと、最大64Kまでのstderrのみをキャプチャできます。例;また、stdinから読み取ろうとするリモートプロセスは、ローカルのsshサブプロセスが強制終了されるまで、classhのタイムアウト処理によって自動的に停止します。classh.pyをモジュールとして使用するカスタムスクリプトをPythonで作成するのは非常に簡単です。したがって、次のようなものを書くのは非常に簡単です。
!#/bin/env python
import classh
job = classh.SSHJobMan(cmd, targets)
job.start()
while not job.done():
completed = job.poll()
for i in completed:
# do something with the classh.JobRecord object referenced by i
# done
# You can optionally do post-processing on the dictionary of JobRecords here
# keyed off the target strings (hostnames)
</code></pre>
これですべてです。たとえば、入れ子の完了したループでは、特定の終了ステータスを返したすべてのリストまたは特定のエラーメッセージをスキャンするリストを収集し、それらを処理するフォローアップジョブを設定できます。 (ジョブは同時に実行されます。デフォルトでは、それぞれが完了するまでいつでも100ジョブです。したがって、通常、数百のホストでの単純なコマンドは数秒で完了し、非常に複雑なシェルスクリプトは単一の長いコマンド文字列で完了します。 。50行ほど言うと...数千のホストを約10分で完了できます...私の環境では1時間あたり約10Kのホストがあり、それらの多くは大陸間で配置されています)。
したがって、これは、パペット構成を実装して十分にテストするまで、アドホックな手段として使用できるものかもしれません...また、ホストのアドホック調査を実行して、どのホストが標準から逸脱しているかを確認するのにも非常に役立ちます。さまざまな小さな方法。
すべてのホストがDebian(または派生物)を実行している場合の別の解決策は、 cron-aptパッケージ を使用することです。ただし、ドキュメントで提案されているように、少し注意が必要です。
現在、多数のサーバーでcron-aptを使用して、すべてのセキュリティ更新を自動的に無人で実行しています。不要なアップグレードを回避するために、Debian安定ディストリビューションを実行するサーバーでのみcron-aptを使用し、aptソースを構成するようにしているので、ディストリビューション名wheezy、エイリアスではありません(安定)。
私が使用する特定のcron-apt構成は、1つのアクションファイルに要約されています:/etc/cron-apt/action.d/5-install
dist-upgrade -y -o APT::Get::Show-Upgraded=true -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts="/dev/null"
その他のアップグレードは、アップグレード中に手動で介入する必要がある場合があるため、画面または最も適切なものを使用して手動で実行されます。
webmin 、、、を使用し、そのwebminクラスター機能を使用します。この機能では、すべてのシステムを1つのwebminコンソールに追加し、任意のコマンドを発行するか、すべてを1か所から制御できます。
または
Clustersshを使用する
または
PSSH