複数台のサーバーを運用する場合、各種設定ファイルやパッケージの状態を管理するのに、オープンソースのシステム管理自動化ツール Puppet は非常に便利だ。サーバーの台数が少なければ手作業でも何とかなるが、ある程度の規模になると、効率的なシステム管理には、部分的にでも管理を自動化するツールが必須になって来る。

CentOS が中心の我が家のサーバー群もかつては手作業で状態を管理していたが、数ヶ月前に Puppet を導入してからは、サーバー管理の自動化の恩恵に与っている。ファイルをコピーすると言った単純な操作だけでなく、クラスやテンプレートを活用して、OS や用途ごとにパッケージの状態等まで管理できるのが非常に便利だ。

しかしこの便利な Puppet
も、CentOS に導入時する際にはちょっとした罠が仕掛けられている。新ファイルサーバー構築中にこの罠が再現して懐かしい気分になったので、エントリーに残しておくことにする。初めて
Puppet の導入を試みた時は、ここでハマって悩んだものだ。出だしでつまづくと、実に萎える。


CentOS の場合はこちらのサイトで詳しく解説されているように yum でリポジトリからインストールできて便利なのだが、僕の環境の問題なのかインストーラーに不備があるのか、インストール後に Puppet を起動しても、以下のようなエラーを吐いて正常に起動しない。

Starting puppet: /usr/lib/ruby/site_ruby/1.8/puppet.rb:3:in `require': no such file to load -- facter (LoadError)
        from /usr/lib/ruby/site_ruby/1.8/puppet.rb:3
        from /usr/sbin/puppetd:157:in `require'
        from /usr/sbin/puppetd:157

問題の puppet.rb の 3行目を見ると facter のロードに失敗しているようで、ではロードに失敗していない 2行目のsingleton はどこにあるかと find してみると、/usr/lib/ruby/1.8/singleton.rb にある。と言うことは恐らく facter.rb と言うファイルもその近所にあるべきなのに存在しないか、マズい場所にあるのかなと再び find すると、/facter.rb と /facter ディレクトリが見つかる。

要するに /usr/lib/ruby/1.8 以下にあるべき facter パッケージの関連ファイルが "/" 直下に配置されてしまっているのがこの不具合の原因なので、然るべき場所に手動で移動させてやればいい。

# mv /facter* /usr/lib/ruby/1.8/ ← "/" 直下の facter ディレクトリと facter.rb を移動

# /etc/init.d/puppet start ← Puppet を起動

尚、Puppet に関する理解を深めるのに、月刊 Software Design の特集記事や、同じ筆者氏が執筆されたこちらの一連の記事が非常に役立つ。サーバー管理の自動化に興味のある方は、ぜひ一読をお勧めする。

Comments are closed.