puppetを試す(再)。

先日Kが来たので、うちのPCをつかってpuppetチャレンジしたときの記録を、以下、追記しながら書き直します。

まだイマイチpuppetの良さが分からないがひとまずFC5にインストールしてみて動くことまで確認。ひとまず参考の例をそのまま実行したけど、いろいろハマった(というかイマイチ全体像とか手順が分かってなかった)のでハマった部分を記録に残すことにする。

環境

1台はサーバ、もう1台はクライアント
両方ともFedora Core 5

手順
メジャーディストリビューションならパッケージ管理を使うのがもっとも手軽だと思われる。(ここから実況開始。現在進行形で書いていきます。)


インストール

  • サーバのインストール

# yum install puppet-server ←これだけ

これだけで、必要な物は一通りインストールしてくれます。インストールされるのは、

puppet-server
facter
puppet
ruby
ruby-libs

この時点で、サーバ側の/etc/puppetに

fileserver.conf manifests/ puppetca.conf puppetd.conf puppetmasterd.conf

というファイルとディレクトリが出来ます。

  • クライアントのインストール

yum install puppet ←こっちもこれだけ

これだけで、必要な物は一通りインストールしてくれて、インストールするものは

puppet
facter
ruby
ruby-libs

この時点でクライアント側の/etc/puppetに

puppetd.conf

というファイルが出来ます。


設定

  • サーバ側の設定

サーバ側にはクライアントへの指示にあたるsite.ppを記述しておく必要があります。
例のサイトと同じように以下のように記述してみます。sudoの設定ファイルをroot権限にして読み書きを440にするってだけですね。

# site.pp
file { "/etc/sudoers":
owner => root, group => root, mode => 440
}

  • サーバのデーモン起動

# puppetmasterd --mkusers
# ps -A | grep puppet
9928 ? 00:00:00 puppetmasterd ←確認

  • クライアントのデーモン起動

# puppetd --server サーバ名 --waitforcert 60 --test
info: Creating a new certificate request for サーバ名
info: Creating a new SSL key at /var/lib/puppet/ssl/private_keys/サーバ名.pem
err: Could not call puppetca.getcert: #
/usr/lib/ruby/site_ruby/1.8/puppet/network/client/ca.rb:31:in `request_cert': Certificate retrieval failed: No route to host - connect(2) (Puppet::Error)
from /usr/sbin/puppetd:342

エラーです。サーバのポートを開いてなかったです。で、手持ちの環境に合わせた方法で、あらかじめサーバの8140ポートをあけておきます。そうするとこんどは以下のようになります。

# puppetd --server サーバ名 --waitforcert 60 --test
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
err: Could not call puppetmaster.getconfig: #
err: Could not retrieve configuration: HTTP-Error: 500 Internal Server Error
warning: Not using cache on failed configuration

これは証明書の検証が出来なかったと言うエラーのようです。
サーバ側で、

# puppetca --list
クライアント名

とやるとクライアントのリストが現れるので、正しいクライアントには署名をつけて上げる必要があるということで、以下のコマンドを実施。

# puppetca --sign クライアント名

全部のクライアントからの署名要求にこたえると、それ以降、サーバ上で

# puppetca --list

とやっても

No certificates to sign

となります。
さらに、site.ppに以下を追加すると準備完了です。

# site.pp
node 'クライアント名' {
}


実行

  • クライアントからの実行

#chmod 777 /etc/sudoers ←あぶないので実サーバでやらないこと

  • rwxrwxrwx 1 root root 1051 2月 12 2006 /etc/sudoers

#puppetd --server サーバ名 --test
notice: Ignoring cache
info: Caching configuration at /var/lib/puppet/localconfig.yaml
notice: Starting configuration run
notice: //File[/etc/sudoers]/mode: mode changed '777' to '440'
notice: Finished configuration run in 0.05 seconds
#ls -l /etc/sudoers

  • r--r----- 1 root root 1051 2月 12 2006 /etc/sudoers

どんなもんでしょ。
今後もう少し触っていろいろ出来るようになったらちょっと便利かな。まあ、そんなサーバ台数無いけど・・・。

参考