puppet を動かしてみる

puppet をはじめて動かす場合の最低限の手順について説明します。本当に最低限なので、puppet を使ってシステムをどう管理するか、といった説明は別のページに譲り、ここでは puppet 利用するために最低限必要となるデーモンを起動するまでの手順を説明します。

目次

  1. puppet サーバとクライアントの準備
  2. site manifest 作成
  3. puppet サーバでのデーモン起動
  4. puppet クライアントでのデーモン起動
  5. 関連ページ

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' {
}

以上で、サーバ、クライアントともに必要なデーモンを起動することができる状態となりました。

関連ページ