Debian GNU/Linux 5.0 (以下 lenny) にシステム管理自動化ツール Puppet をインストールするには、aptitude 一発で片付けるのが楽だ。しかし我が家のように Puppet サーバーが CentOS 5.x で稼働している環境に lenny を Puppet クライアントとして組み入れようとすると、問題が発生する。
CentOS 5.x で Puppet サーバーとして稼働する Puppet のバージョンは、DAG リポジトリからインストールした 0.22.4。一方 lenny の Puppet は 0.24.5-3 で、これをそのまま起動すると、ログファイルに
Failed to retrieve current state of resource: Cannot currently copy links Could not describe /~
と言うエラーが記録され、ファイルサーバー機能経由でファイルをコピーできない。クライアント側の設定ファイルに問題はなさそうだし、Puppet サーバー上のマニフェストも読めているが、ファイルのコピーに失敗してしまうのだ。
しばらく足掻いてみたが上手く行かないので、試行錯誤中に発見した 「Puppet のサーバーとクライアントでバージョンが違うと具合が悪い」と言う話を信じ、lenny の Puppet を 0.22.4 にダウングレードすることにした。我が家の lenny マシンは (VM の) 1台だけなので、テスト環境も含めると 10台近くある全 CentOS の Puppet のバージョンを上げるのは、極力避けたい。
しかし過去の Debian の公式パッケージを見ると、0.24.5-3 より前のものは 0.20.1-1。これでは古過ぎるので、あちこち探し回って発見した puppet_0.22.4-2_all.deb を使うことにした。入手可能な場所は他にもあるかもしれないが、僕はとりあえずここからダウンロードし、以下の手順でインストールした。
# aptitude install facter ← Puppet と一緒にアンインストールされたパッケージがあれば、Puppet 以外を再インストール
# dpkg -i puppet_0.22.4-2_all.deb ← Puppet 0.22.4-2 をインストール。足りないパッケージがある場合は、aptitude で該当パッケージをインストール後に再実行
# dpkg -l | grep puppet ← 確認
ii puppet 0.22.4-2 centralised configuration management for networks
# vi /etc/puppet/puppetd.conf ← 設定ファイルを編集 (CentOS 5.x のデフォルトをベースに一部変更)
[puppet]
vardir = /var/lib/puppet
logdir = /var/log/puppet
rundir = /var/run
ssldir = $vardir/ssl
[puppetd]
classfile = $vardir/classes.txt
localconfig = $vardir/localconfig
# vi /etc/default/puppet ← 設定ファイルを編集 (新規作成)
START=yes ← 自動起動
DAEMON_OPTS="--server <PUPPET_SERVER>" ← Puppet サーバーを指定
# /etc/init.d/puppet start ← Puppet を起動
# tail -f /var/log/daemon.log | grep puppet ← ログを確認
# aptitude hold puppet ← Puppet のバージョンを固定
これで lenny でも Puppet 0.22.4 が稼働し、CentOS 5.x 上の Puppet サーバーと正常に通信ができるようになった。Puppet がマトモに動けば、(個人的に) 不慣れな Debian も安心だ。