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
公式サイト
http://reductivelabs.com/trac/puppet
準備
あらかじめインストールしておくもの
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