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 purge puppet ← Puppet 0.24.5-3 が既にインストールされている場合は、アンインストール

# 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 も安心だ。

Comments are closed.