puppet を動かしてみる
puppet をはじめて動かす場合の最低限の手順について説明します。本当に最低限なので、puppet を使ってシステムをどう管理するか、といった説明は別のページに譲り、ここでは puppet 利用するために最低限必要となるデーモンを起動するまでの手順を説明します。
目次
puppet サーバとクライアントの準備
puppet サーバとクライアントを準備します。同一マシンであっても構いません。
puppet サーバは、 manifest と呼ばれる、puppet 言語によりシステムの状態がどうあるべきかが記述されたファイルを管理し、puppet クライアントからのリクエストに応答します。
puppet クライアントは、puppet サーバに対して自身のシステム状態がどうあるべきかを問い合わせ、それに応じて自身の設定を行います。
site manifest 作成
manifest は複数のファイルに分散することが可能ですが、必ず1つ、大本となる manifest を作成する必要があり、これを site manifest と呼びます。site manifest のデフォルトパスは、/etc/puppet/manifests/site.pp です。(パスは変更することが可能です。)
site manifest の内容は以下の様な感じです。
# site.pp
file { "/etc/sudoers":
owner => root, group => root, mode => 440
}
また、別ファイルの manifest をインポートすることも可能です。
# site.pp # import the functions import "functions.pp" # import all of the os classes, like redhat.pp and solaris.pp import "os/*" # import all of the server classes, like webserver.pp import "classes/*"
site manifest はファイルさえ存在すれば、空でも動作します。
puppet サーバでのデーモン起動
puppet サーバでは、puppetmasterd というデーモンを起動します。
初回起動時に --mkusers オプションをつけることで、このデーモン用のユーザ/グループが作成されます。
$ sudo puppetmasterd --mkusers
初回以外は、--mkusers オプションは必要ありません。
$ sudo puppetmasterd
puppet クライアントでのデーモン起動
puppet クライアントでは、puppetd というデーモンを起動します。このデーモンが定期的にサーバへの問い合わせを行い、自身のシステムをサーバで設定された状態に保ちます。
はじめて puppetd を起動する際には、SSLv3 認証のための証明書をサーバに対してリクエストし、サーバ側で署名してもらう必要があります。そのためのオプションが --waitforcert です。(通信の仕組み 参照。)
また、--test オプションをつけることで、バックグラウンドで常駐させずに、メッセージをログファイルではなくコンソールに出力させることができます。
$ puppetd --server server.example.com --verbose info: Creating a new certificate request for client.example.com info: Creating a new SSL key at /etc/puppet/ssl/private_keys/client.example.com.pem warning: peer certificate won't be verified in this SSL session notice: Did not receive certificate
この状態になったら、サーバ側でクライアントからの証明書リクエストに対して署名を行います。
$ sudo puppetca --list client.example.com $ sudo puppetca --sign client.example.com
クライアント側で少し待つと、以下の様に表示され、プロンプトが返ってきます。
err: Could not retrieve configuration: Could not find client.example.com with names client.example.com, client warning: Not using cache on failed configuration
エラー自体は site manifest にこのクライアント用の node 設定がないためで、通信自体は問題なくできています。
site manifest に以下の様な記述を追加すると、このエラーは出なくなります。
# site.pp
node 'client.example.com' {
}
以上で、サーバ、クライアントともに必要なデーモンを起動することができる状態となりました。
