Puppet

2008/5/8更新

対応バージョン: 0.24.4

当該ホスト(クライアント)がサーバから認証されていない。

puppetdをいったん停止し、サーバ側にて以下の手順でクライアントを認証して再度puppetdを起動する。

例) クライアントのホスト名が「client.bar.com」の場合

% sudo puppetca --list
client.bar.com

% sudo puppetca --sign client.bar.com
Signed client.bar.com

2008/5/8更新

対応バージョン: 0.24.4

何らかの理由でサーバに接続できない。

例えば以下のような原因が考えられる。

サーバが外部ホストから8140ポートへの接続を許可していない。
サーバまでの経路上(ルータやファイアウォール等)で8140ポートへのアクセスをブロックしている。

2008/5/8更新

対応バージョン: 0.24.4

公式サイト

準備

あらかじめインストールしておくもの

Ruby 1.8.1以降
OpenSSL (サーバ - クライアント間はSSL通信)

導入OS

Fedora 8 ... サーバ/クライアント
Mac OS X 10.5(Leopard) ... クライアント

管理用アカウント作成

アカウント (UID)

puppet (任意)

グループ (GID)

puppet (任意)

ホームディレクトリ

/nonexistent (*)

ログインシェル

/sbin/nologin (*)

(*) このアカウントではログインしない

関連資料・記事

インストール

まずfacterをインストールする。

配布ファイル展開

% tar zxvf facter-1.3.8.tgz
% cd facter-1.3.8

インストール

% sudo ruby install.rb

インストール物 (man,infoは除く)

(Fedora)

/usr/bin/facter

/usr/lib/ruby/site_ruby/1.8/facter.rb
/usr/lib/ruby/site_ruby/1.8/facter/*

(Mac OS X)

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/facter

/Library/Ruby/Site/1.8/facter.rb
/Library/Ruby/Site/1.8/facter/*

続いてpuppetをインストールする。

配布ファイル展開

% tar zxvf puppet-0.24.4.tgz
% cd puppet-0.24.4

インストール

% sudo ruby install.rb

インストール物 (man,infoは除く)

(Fedora)

/usr/bin/filebucket
/usr/bin/puppet
/usr/bin/puppetca
/usr/bin/puppetd
/usr/bin/puppetdoc
/usr/bin/puppetmasterd
/usr/bin/puppetrun
/usr/bin/ralsh

/usr/lib/ruby/site_ruby/1.8/puppet.rb
/usr/lib/ruby/site_ruby/1.8/puppet/*

(Mac OS X)

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/filebucket
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/puppet
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/puppetca
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/puppetd
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/puppetdoc
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/puppetmasterd
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/puppetrun
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ralsh

/Library/Ruby/Site/1.8/puppet.rb
/Library/Ruby/Site/1.8/puppet/*

各種設定 (サーバ用)

設定ファイル格納ディレクトリ作成

% sudo mkdir -p /etc/puppet/manifests

マニフェスト作成

とりあえずメインのマニフェストファイルであるsite.ppの空ファイルを用意しておく。

% sudo touch /etc/puppet/manifests/site.pp

動作確認

puppetmasterd起動

まずはサーバであるpuppetmasterdを起動する。

% sudo puppetmasterd --verbose

最初に起動した時は/etc/puppet/ssl配下にSSL関連ファイルが作成される。

csr_<自ホスト>.pem

サーバ証明書のCSR

ca/*

独自CAの証明書関連ファイル

関連資料・記事

certs/ca.pem

独自CAの公開鍵証明書

certs/<自ホスト>.pem

サーバ証明書

private_keys/<自ホスト>.pem

サーバ証明書の秘密鍵

public_keys/<自ホスト>.pem

サーバ証明書の公開鍵

独自CAの公開鍵証明書は以下のような内容で作られる(CNはダミー)。

% sudo openssl x509 -in certs/ca.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 0 (0x0)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=foo.bar.com
        Validity
            Not Before: May  2 16:53:49 2008 GMT
            Not After : May  1 16:53:49 2013 GMT
        Subject: CN=foo.bar.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:c5:50:0f:34:7f:5b:c5:84:b4:06:b6:5c:50:1d:
                    cc:5d:6c:46:62:68:72:4e:f8:f5:0d:e7:69:e0:a4:
                    a2:a2:11:ca:81:89:7d:2b:5f:79:87:87:2c:94:1d:
                    37:fd:ad:3d:83:97:10:a5:59:0b:2f:ee:fd:d5:88:
                    cd:6e:e5:50:77:f4:39:8b:51:3d:3e:05:3f:f9:80:
                    42:27:e2:1a:69:a3:12:85:b6:f2:7e:80:05:4e:1b:
                    70:4b:12:60:f1:e3:48:16:22:54:68:0c:20:d1:56:
                    07:81:2c:6f:56:17:71:6f:19:79:55:39:3a:ce:f3:
                    3d:53:4c:d4:d6:50:da:89:bf
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            Netscape Comment: 
                Puppet Ruby/OpenSSL Generated Certificate
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier: 
                00:96:49:87:7A:0B:6C:63:A4:00:83:84:63:2B:4C:2B:38:36:E6:67
            X509v3 Key Usage: 
                Certificate Sign, CRL Sign
    Signature Algorithm: sha1WithRSAEncryption
        01:89:ff:98:ce:4d:33:ca:67:44:d7:79:4c:44:fe:07:b4:e6:
        91:48:cb:98:01:be:e5:fa:41:f8:47:f9:01:9f:87:53:ae:ae:
        95:1f:0b:5c:a0:5a:16:93:d1:91:5c:5d:25:77:0e:4b:bd:f1:
        26:9d:32:20:45:7c:58:63:d0:18:8d:99:b2:ef:d3:7f:4f:a9:
        af:20:6c:c5:1b:8b:a4:ae:cd:90:ac:6a:26:be:12:0d:7d:bc:
        67:cd:4c:b5:c3:b8:c0:26:6d:8e:4a:a8:95:41:58:4b:55:df:
        ef:0c:54:8f:14:43:13:9a:e2:d2:50:93:c7:42:59:a9:6e:d1:
        87:c0
-----BEGIN CERTIFICATE-----
MIICJzCCAZCgAwIBAgIBADANBgkqhkiG9w0BAQUFADAcMRowGAYDVQQDDBFmZWRv
cmEucHJpdmF0ZS5qcDAeFw0wODA1MDIxNjUzNDlaFw0xMzA1MDExNjUzNDlaMBwx
GjAYBgNVBAMMEWZlZG9yYS5wcml2YXRlLmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQDFUA80f1vFhLQGtlxQHcxdbEZiaHJO+PUN52ngpKKiEcqBiX0rX3mH
hyyUHTf9rT2DlxClWQsv7v3ViM1u5VB39DmLUT0+BT/5gEIn4hppoxKFtvJ+gAVO
G3BLEmDx40gWIlRoDCDRVgeBLG9WF3FvGXlVOTrO8z1TTNTWUNqJvwIDAQABo3kw
dzA4BglghkgBhvhCAQ0EKxYpUHVwcGV0IFJ1YnkvT3BlblNTTCBHZW5lcmF0ZWQg
Q2VydGlmaWNhdGUwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUAJZJh3oLbGOk
AIOEYytMKzg25mcwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4GBAAGJ/5jO
TTPKZ0TXeUxE/ge05pFIy5gBvuX6QfhH+QGfh1OurpUfC1ygWhaT0ZFcXSV3Dku9
8SadMiBFfFhj0BiNmbLv039Pqa8gbMUbi6SuzZCsaia+Eg19vGfNTLXDuMAmbY5K
qJVBWEtV3+8MVI8UQxOa4tJQk8dCWalu0YfA
-----END CERTIFICATE-----

また/var/puppet配下にサーバの動作状況を記録する各種ファイルが作成される。

masterhttp.log

サーバログ

run/puppetmasterd.pid

puppetmasterdのPIDファイル

puppetd起動

次にクライアントであるpuppetdを起動する。

% sudo puppetd --server=foo.bar.com --verbose

puppetdを起動すると/var/puppet配下に動作状況を記録する各種ファイルが作成される。

run/puppetd.pid

puppetdのPIDファイル

state/localconfig.yaml

キャッシュ状況

state/state.yaml

puppetd実行状態

マニフェスト試験

簡単なマニフェストを作成してみる。

ここでは/tmp/testというファイルのモードが644以外になったかどうかをチェックするルールを作成する。

まずサーバ上でsite.ppを以下のように編集する。

% sudo vi /etc/puppet/manifests/site.pp

file { '/tmp/test':
    owner => 'guest',
    group => 'users',
    mode  => 644,
}

マニフェストを編集したらサーバを再起動する。

% sudo kill `cat /var/puppet/run/puppetmasterd.pid`
% sudo puppetmasterd --verbose

次にクライアント上で当該ファイルのモードを変更してクライアントを再起動する。

% sudo chmod 600 /tmp/test
% sudo kill `cat /var/puppet/run/puppetd.pid`
% sudo puppetd --server=foo.bar.com --verbose

するとsyslogに以下のような内容が出力され、ファイルのモードが(本来の)644に変更される。

(//File[/tmp/test]/mode) mode changed '600' to '644'

puppetmasterd起動設定 (サーバ用)

initスクリプト作成

/etc/rc.d/init.d/puppetmasterdを作成する。

#!/bin/bash
#
# puppetmasterd
#
# chkconfig: 345 80 20
# description: puppetmasterd

TARGET=puppetmasterd
DST_BIN=/usr/bin/${TARGET}
PIDF=/var/puppet/run/${TARGET}.pid

start()
{
  echo -n "Starting ${TARGET}: "
  ${DST_BIN} --verbose
  echo
}

stop()
{
  echo -n "Shutting down ${TARGET}: "
  kill `cat ${PIDF}`
  echo
}

case "$1" in
  start)
    start
    ;;

  stop)
    stop
    ;;

  restart)
    stop
    start
    ;;

  *)
    echo "Usage: `basename $0` {start|stop|restart}" >&2
    exit 1
esac

exit 0

puppetd起動設定 (クライアント用)

plist作成(Mac OS X)

/Library/LaunchDaemons/puppetd.plistを作成する。

initスクリプト作成(Fedora)

/etc/rc.d/init.d/puppetdを作成する。

(plist)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>puppetd</string>
	<key>ProgramArguments</key>
	<array>
		<string>/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/puppetd</string>
		<string>--server</string>
		<string><サーバ></string>
		<string>--verbose</string>
	</array>
</dict>
</plist>

(initスクリプト)

#!/bin/bash
#
# puppetd
#
# chkconfig: 345 80 20
# description: puppetd

TARGET=puppetd
SERVER=foo.bar.com
DST_BIN=/usr/bin/${TARGET}
PIDF=/var/puppet/run/${TARGET}.pid

start()
{
  echo -n "Starting ${TARGET}: "
  ${DST_BIN} --server=${SERVER} --verbose
  echo
}

stop()
{
  echo -n "Shutting down ${TARGET}: "
  kill `cat ${PIDF}`
  echo
}

case "$1" in
  start)
    start
    ;;

  stop)
    stop
    ;;

  restart)
    stop
    start
    ;;

  *)
    echo "Usage: `basename $0` {start|stop|restart}" >&2
    exit 1
esac

exit 0

サービス登録/起動

puppetmasterd
% sudo chkconfig --add puppetmasterd
% sudo chkconfig --list puppetmasterd
puppetmasterd  0:off  1:off  2:off  3:on  4:on  5:on  6:off
% sudo service puppetmasterd start
puppetd

(Mac OS X)

% sudo launchctl load /Library/LaunchDaemons/puppetd.plist
% sudo launchctl start puppetd

(Fedora)

% sudo chkconfig --add puppetd
% sudo chkconfig --list puppetd
puppetd        0:off  1:off  2:off  3:on  4:on  5:on  6:off
% sudo service puppetd start