2010/05/19

Debian lennyにcfengine 3.0.4を導入してみる

UbuntuではPPAで3.0.2が10.04 lucid用のパッケージが配布されていますが、今回はDebian lennyをターゲットにしています。 www.cfengine.comではパッケージを配布しているとありますが、設定ファイル集ぐらいしか見つからなかったので自分でコンパイルする事にしました。

cfengineは2.0を数年前に確認していますが、その時は、管理するためにはcfengineに合わせたプロセスを考えないと使えないなぁ、という印象だったと記憶しています。

コンパイル

基本的な開発環境の導入

gccが入っていなかったので、お手軽に"build-essential"パッケージを導入しました。

$ sudo apt-get install build-essential
prerequisitesの導入

INSTALLファイルに書かれている前提ソフトウェアは次の通りです。

INSTALLファイルらの前提ライブラリ一覧

Openssl
BerkeleyDB
flex
bison
PCRE

debianのdebパッケージから準備するために次のパッケージを導入しました。

導入したパッケージリスト

libssl-dev
libdb4.6-dev
flex
bison
libpcre3-dev
$ sudo apt-get install libssl-dev libdb4.6-dev flex bison libpcre3-dev

マニュアルをみると、OpenLDAPやらMySQLやらのクライアントライブラリがあればオプションで組み込まれると書かれています。 リストは挙げられていませんでしたが、configure.acをみると次のライブラリに反応するようです。

必要に応じて追加するライブラリパッケージ

libldap2-dev
libmysqlclient15-dev
libpq-dev
graphviz

あとはlibcfnovaなどにも反応するようですが、これはおそらく商用製品向けのオプションでしょう。

後からコードを眺めて気がつきましたが、LDAPやらRDBMSとの連携は製品版であるNOVAのfeaturesでした。 なのでlibcfnova.soやらのライブラリがないと、いろいろな機能が無効になっています。

コンパイル

とりあえず必要と思えるパッケージを導入してコンパイルしたところ無事に終りました。

ただ後からlibpq-devを導入したところ問題が発生しました。 libpq-fe.hファイルが/usr/include/postgresql/libpq-fe.hにあるために発見できずに、src/conf.hファイルでフラグが設定されない結果になっていました。

libpq.soは認識しているので、これを回避するためにCFLAGSに

CFLAGS="-I/usr/include/postgresql" ./configure --prefix=/usr/local/stow/cfengine-3.0.4

/usr/local直下にインストールしてみたのですが、将来のバージョンの事を考えてxstowを使って別ディレクトリにインストールをやり直しました。

$ ./configure --prefix=/usr/local/stow/cfengine-3.0.4
$ sudo make install
$ cd /usr/local/stow
$ sudo xstow cfengine-3.0.4

設定ファイルの準備

実際に動かすためには/var/cfengineディレクトリが存在する必要があったり、設定ファイルを準備したりする必要があります。

ただ設定ファイルを書くためにcfengineがどういう名前で認識されているかなどの情報を確認しておく必要があります。

まずはcfengineが認識しているシステム情報を確認する
$ sudo cf-promises -v

cf-promises -vの出力抜粋

cf3 Host name is: vlcf02
cf3 Operating System Type is linux
cf3 Operating System Release is 2.6.26-2-amd64
cf3 Architecture = x86_64
cf3 Using internal soft-class linux for host vlcf02
cf3 The time is now Tue May 18 22:06:46 2010
....
cf3 Looking for Debian version...
cf3 This appears to be a Debian 5.0 system.
cf3 This appears to be a Debian 5 system.
cf3 This system seems to have the aptitude package system
...

エラーはいろいろ出てきますが、このコマンドを実行すると/var/cfengineディレクトリがセットアップされるので、 ちゃんと動かすべく設定ファイルを準備していきます。

設定ファイルの配置

まずはソースコードに含まれる設定ファイルをコピーすることにします。

$ cd cfengine-3.0.4/inputs
$ sudo cp *.cf /var/cfengine/inputs/

とりあえず設定ファイルが正しいかどうかは、先ほどと同じcf-promisesコマンドで確認することができます。 今回はリポートを出力させる -r オプションも指定していますが、エラーは出ずに、配置した /var/cfengine/inputs/promises.cf を認識するはずです。

$ sudo cf-promises -r -v

cf-promises -r -vコマンドの出力抜粋

...
cf3   > Parsing file /var/cfengine/inputs/promises.cf
cf3 Initiate variable convergence...
cf3 Initiate control variable convergence...
cf3   > Parsing file /var/cfengine/inputs/update.cf
cf3   > Parsing file /var/cfengine/inputs/site.cf
cf3   > Parsing file /var/cfengine/inputs/library.cf
cf3 Initiate variable convergence...
cf3 # Knowledge map reporting feature is only available in version Nova and above
cf3  -> Defined classes = { 10_0_0_2 172_16_73_129 64_bit Day18 Evening GMT_Hr14 Hr23 Hr23_Q1 Lcycle_0 May Min00 Min00_05 Q1 Tuesday Yr2010 _ any cfengine_3 cfengine_3_0 cfengine_3_0_4 common community_edition compiled_on_linux_gnu debian debian_5 debian_5_0 fe80__20c_29ff_fe3b_dece fe80__20c_29ff_fe3b_ded8 have_aptitude ipv4_10 ipv4_10_0 ipv4_10_0_0 ipv4_10_0_0_2 ipv4_172 ipv4_172_16 ipv4_172_16_73 ipv4_172_16_73_129 linux linux_2_6_26_2_amd64 linux_x86_64 linux_x86_64_2_6_26_2_amd64 linux_x86_64_2_6_26_2_amd64__1_SMP_Tue_Mar_9_22_29_32_UTC_2010 net_iface_eth0 net_iface_eth1 net_iface_lo org verbose_mode vlcf02 vlcf02_vm_example_org vm_example_org x86_64 example_org }
...

レポートは /var/cfengine/reports ディレクトリ以下に出力されるので、どういう設定が入っているのか確認することができると思います。

リファレンスマニュアルとの整合性

リファレンスマニュアルにはサンプルとして unit_null_config.cftest.cf ファイルが載っています。 確認のためにrootユーザを使わずに一般ユーザでcf-promisesコマンドを動かす時には ~/.cfagent/reports ディレクトリに出力されるので、*.cfファイルを ~/.cfagent/inputs ディレクトリに配置しておきます。

$ mkdir -p ~/.cfagent/inputs
$ vi ~/.cfagent/inputs/test.cf
$ /usr/local/sbin/cf-primises -r -v -f test.cf

ここではtest.cfを相対パスで指定しているので、自動的に~/.cfagent/inputs/test.cfファイルを探してくれます。

cfengineの設定ファイルは、いろいろな手掛りがたくさんあるのに、どうすれば良いのか分からないところです。 www.cfengine.orgのドキュメントをみても、cfengineをどうやって使い始めれば良いのか分かりずらいのは、あいかわらずのようです。

動かしてみる

とりあえずサンプルのpromises.cfファイルをそのまま動かします。 いくつか設定が変更されるので事前に現状を確認しておきます。

現状の確認

どこら辺が変更されそうか/var/cfengine/reports/promise_output_common.txtファイルを確認しておきます。

/var/cfengine/reports/promise_output_common.txtファイルの抜粋

...
      files promise by '/var/cfengine/inputs' (implicit) if context is any
      files promise by '/var/cfengine/bin' (implicit) if context is any
      files promise by '/var/spool/cron/crontabs/root' (implicit) if context is any
...

だいたい、ここに出てくるディレクトリやファイルの内容を確認しておけば良さそうな感じです。

ls -al /var/cfengine/inputsの出力

total 116
drwxr-xr-x  2 root root  4096 2010-05-18 22:53 .
drwxr-xr-x 10 root root  4096 2010-05-18 22:53 ..
-rw-r--r--  1 root root  1188 2010-05-18 22:51 failsafe.cf
-rw-r--r--  1 root root  3502 2010-05-18 22:51 library.cf
-rw-r--r--  1 root root  2882 2010-05-18 22:51 promises.cf
-rw-r--r--  1 root root 55101 2010-05-18 23:00 promises.cf.html
-rw-r--r--  1 root root 20653 2010-05-18 23:00 promises.cf.txt
-rw-r--r--  1 root root  6990 2010-05-18 22:51 site.cf
-rw-r--r--  1 root root  1955 2010-05-18 22:51 update.cf

ls -al /var/cfengine/binの出力

total 8
drwxr-xr-x  2 root root 4096 2010-05-18 22:06 .
drwxr-xr-x 10 root root 4096 2010-05-18 22:53 ..

sudo cat /var/spool/cron/crontabs/rootの出力

cat: /var/spool/cron/crontabs/root: No such file or directory

ファイルが存在しない場合には、何も起こらない感じがするので、rootファイルはあらかじめ作成しておきます。

$ sudo crontab - < /dev/null
cf-agentコマンドの実行

とりあえず実行してみます。

$ sudo -b cf-agent

sudo -b cf-agent実行時の出力

cf-promises needs to be installed in /var/cfengine/bin for pre-validation of full configuration
cf-agent was not able to get confirmation of promises from cf-promises, so going to failsafe

/usr/local/sbin/の中身を全部コピーしてしまうと、おもしろくなさそうなのですが、~/.cfagent/ディレクトリのセットアップ方法をリファレンスマニュアルで確認すると、全てのファイルをコピーしています。

今回はおとなしく全ての実行ファイルを/var/cfengine/binにコピーしておきます。

$ sudo cp /usr/local/sbin/* /var/cfengine/bin

ここで再度/var/cfengine/bin以下と/var/spool/cron/crontabs/rootの中身を確認しておきます。

ls -al /var/cfengine/binの出力、再び

total 18568
drwxr-xr-x  2 root root    4096 2010-05-19 00:33 .
drwxr-xr-x 10 root root    4096 2010-05-19 06:40 ..
-rwxr-xr-x  1 root root 2261919 2010-05-19 00:33 cf-agent
-rwxr-xr-x  1 root root 2060308 2010-05-19 00:33 cf-execd
-rwxr-xr-x  1 root root 2010210 2010-05-19 00:33 cf-key
-rwxr-xr-x  1 root root 2149692 2010-05-19 00:33 cf-know
-rwxr-xr-x  1 root root 2132456 2010-05-19 00:17 cf-monitord
-rwxr-xr-x  1 root root 2024225 2010-05-19 00:33 cf-promises
-rwxr-xr-x  1 root root 2097049 2010-05-19 00:33 cf-report
-rwxr-xr-x  1 root root 2044719 2010-05-19 00:33 cf-runagent
-rwxr-xr-x  1 root root 2168710 2010-05-18 23:57 cf-serverd

sudo cat /var/spool/cron/crontabs/rootの出力、再び

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (- installed on Wed May 19 00:37:38 2010)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
やり直して、再度cf-agentの起動
$ sudo cf-agent

cf-agentの出力

R: Added a 5 minute schedule to crontabs

一度、正常にcf-agentが起動してからやり直している場合は、正常終了していない事が原因でcf-agentが起動しないかもしれません。 /var/spool/cron/crontabs/rootファイルにcf-execd関連の記述がないのに、cf-agentがメッセージを出さない場合には、$ sudo cf-agent -Kオプションで、lockファイルを無視して起動するのが良いでしょう。

改めて各ディレクトリファイルを確認すると、パーミッションが -rw--------rwx------ になっている事がわかります。 またcronからcf-execdが5分間隔で実行されるようになっています。

cf-agent実行後のls -al /var/cfengine/inputsの出力

total 116
drwxr-xr-x  2 root root  4096 2010-05-18 22:53 .
drwxr-xr-x 10 root root  4096 2010-05-19 06:40 ..
-rw-------  1 root root  1188 2010-05-18 22:51 failsafe.cf
-rw-------  1 root root  3502 2010-05-18 22:51 library.cf
-rw-------  1 root root  2882 2010-05-18 22:51 promises.cf
-rw-------  1 root root 55101 2010-05-18 23:00 promises.cf.html
-rw-------  1 root root 20653 2010-05-18 23:00 promises.cf.txt
-rw-------  1 root root  6990 2010-05-18 22:51 site.cf
-rw-------  1 root root  1955 2010-05-18 22:51 update.cf

cf-agent実行後のls -al /var/cfengine/binの出力

total 18568
drwxr-xr-x  2 root root    4096 2010-05-19 00:33 .
drwxr-xr-x 10 root root    4096 2010-05-19 06:40 ..
-rwx------  1 root root 2261919 2010-05-19 00:33 cf-agent
-rwx------  1 root root 2060308 2010-05-19 00:33 cf-execd
-rwx------  1 root root 2010210 2010-05-19 00:33 cf-key
-rwx------  1 root root 2149692 2010-05-19 00:33 cf-know
-rwx------  1 root root 2132456 2010-05-19 00:17 cf-monitord
-rwx------  1 root root 2024225 2010-05-19 00:33 cf-promises
-rwx------  1 root root 2097049 2010-05-19 00:33 cf-report
-rwx------  1 root root 2044719 2010-05-19 00:33 cf-runagent
-rwx------  1 root root 2168710 2010-05-18 23:57 cf-serverd

cf-agent実行後のsudo cat /var/spool/cron/crontabs/rootの出力

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (- installed on Wed May 19 00:37:38 2010)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /var/cfengine/bin/cf-execd -F

とりあえず動いたので、ここを足がかりにいろいろ確認していこうと思います。

0 件のコメント: