Zeroconf ( Avahi ) をインストールしてみる

2012.02.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今回はZeroconf(Zero Configuration Networking)って言葉は聞くけどなんのこっちゃ?と言う素朴な疑問からスタンダード的存在であるAvahiをセットアップしてみます。相変わらずニッチなものを検証するのが好きですが、、、

Wikipediaには「サーバ個々にDHCPサーバとDDNSクライアントがあるような仕組み」です。と書いてありますが、なかなかピンときませんが、 個々のサーバ上で起動したAvahiがIPアドレスを自分自身で割り振り、マルチキャストDNSリクエスト(mDNS)で周りのBonjourサーバ(レシーバ?)へ自分の存在を通知します。稼働しているサービスの種類も登録できるので、どこで何が動いているのかを見つけ出すのが簡単になります。但し、*.serviceファイルで定義したもののみ。 と言う説明を読んでなんとなく分かった様な気になりました。

とは言え、実際に動かしてみてどうなるのか?を実際に確認しないと済まない性格なので、Avahiをセットアップしてみることにしました。

まずはavahi-0.6.28で本体のモジュールをダウンロードします。Avahiの必須依存パッケージはintltool-0.50.0Glib-2.30.2が必須のようなので、それも一緒にダウンロードします。

それ以外にもconfigureする際に依存しているパッケージが山ほどありますが、オプション(--disable-gtk 等)で使わないようにしておけば以下の依存パッケージは不要です。(以下はあくまでも任意) D-Bus Python Bindings-0.84.0, gobject-introspection-1.30.0, gtk+-2.24.8, gtk+-3.2.3, libdaemon-0.14, libglade-2.6.4, Python-2.7.2, PyGTK-2.17.0, Qt-3.3.8d, Qt-4.8.0 ただし、オプションで使わないと明示的にしないとconfigureの際にエラーになるので、何度かトライする必要が出てくるかもしれません。

とりあえず必須依存パッケージをセットアップします。 intltool-0.50.0をインストールするにはXML::Parser-2.40と言うパッケージが必須依存となっているので、それをインストールします。で、今度はXML-Parser-2.40の必須依存パッケージとして、expat-2.0.1が必須依存となっているので、それを先にインストールします。expat-2.0.1をインストールする場合、必須パッチ(expat-2.0.1-fixes-3.patch)がありますので、それもインストールします。あぁ~依存関係は相変わらずめんどい。。。

※ユーザはとりあえず、rootになっている前提です。

tar xvfz expat-2.0.1.tar.gz
cd expat-2.0.1
./configure

という事で、早速エラーですw 素のCentOSなので、開発ツールがなんにも入ってませんでした>< ということで、開発ツールをインストールしました。 これで再度実行して、無事終了。次にパッチを当てます

patch -Np1 -i ../expat-2.0.1-fixes-3.patch && 
./configure --prefix=/usr && 
make

無事パッチも完了。う~ん順調でなんだか怖いw 次ステップは以下のコマンドでインストールします。

make install && 
install -v -m755 -d /usr/share/doc/expat-2.0.1 &&
install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.0.1

次にXML-Parser-2.40をセットアップします。

tar xvfz XML-Parser-2.40.tar.gz
cd XML-Parser-2.40
perl Makefile.PL && make && make test
make install

ようやく Intltool のインストールに入ります。

tar xvfz intltool-0.50.0.tar.gz
cd intltool-0.50.0
./configure --prefix=/usr && make
make install &&
install -v -m644 -D doc/I18N-HOWTO \ 
    /usr/share/doc/intltool-0.50.0/I18N-HOWTO

次にavahiで2つ目の必須依存パッケージであるGLib-2.30.2をセットアップします。

こちらについてもGLib-2.30.2に対して必須依存パッケージがありますので、それを先にインストールしておきます。(libffi-3.0.10 と Python-2.7.2) 拡張子.xzは解凍が面倒だったので、Python-2.7.2については.tgzのアーカイブを落としてきました。

tar xvfz libffi-3.0.10.tar.gz
cd libffi-3.0.10
./configure --prefix=/usr && make
make install
tar xvfz Python-2.7.2.tgz
cd Python-2.7.2

Pythonをビルドします。

sed -i "s/ndbm_libs = \[\]/ndbm_libs = ['gdbm', 'gdbm_compat']/" setup.py &&
./configure --prefix=/usr --enable-shared && make
make install && chmod -v 755 /usr/lib/libpython2.7.so.1.0

これでようやくGLib のインストールに入れます。※Python-2.7.2の時と同様に拡張子.xzのアーカイブではなく、別フォーマットの.tar.bz2のアーカイブをダウンロードしてきました。

bunzip2 glib-2.30.2.tar.bz2
tar xvf glib-2.30.2.tar
cd glib-2.30.2

GLib のインストール

PCRE_LIBS=-lpcre  PCRE_CFLAGS=" "                                \
LIBFFI_LIBS=-lffi LIBFFI_CFLAGS=-I/usr/lib/libffi-3.0.10/include \
./configure --prefix=/usr --sysconfdir=/etc --with-pcre=system &&
make

makeでエラー発生。。。 configure: error: *** Working zlib library and headers not found *** という事で、zlib-1.2.6.tar.gzのソースをダウンロードしてインストールします。

cd /usr/local/src
mv /tmp/zlib-1.2.6.tar.gz .
tar xvfz zlib-1.2.6.tar.gz
cd zlib-1.2.6
./configure -shared
make
make install

再度GLib のインストールをしますが、またmakeでエラー発生。。。 configure: error: *** The system-supplied PCRE does not support Unicode properties or UTF-8. 推奨って書いてたからPCRE-8.30入れてなかったですが、結局入れることにします。PCRE-8.30

bunzip2 pcre-8.30.tar.bz2
tar xvf pcre-8.30.tar
cd pcre-8.30
./configure --prefix=/usr --disable-static --libdir=/lib \
  --docdir=/usr/share/doc/pcre-8.30 --enable-utf8 --enable-unicode-properties \
  --enable-pcregrep-libz --enable-pcregrep-libbz2 &&
make

今度はPCRE-8.30のmakeでエラー発生。。。 ** Cannot --enable-pcregrep-libbz2 because bzlib.h was not found とりあえず先に進めたいので、オプションの--enable-pcregrep-libbz2を外してmake成功。

make install

make installも無事成功したので、Glibのインストールに再度チャレンジします。

PCRE_LIBS=-lpcre  PCRE_CFLAGS=" "                                \
LIBFFI_LIBS=-lffi LIBFFI_CFLAGS=-I/usr/lib/libffi-3.0.10/include \
./configure --prefix=/usr --sysconfdir=/etc --with-pcre=system &&
make

無事Glibのmakeが成功しました!最後のmake installがどうなるか。。。

make install &&
ln -v -sfn ../../lib/glib-2.0/include/glibconfig.h /usr/include/glib-2.0/glibconfig.h

Glibのmake installも成功しました!ということで、ようやくavahi-0.6.28のセットアップに入ります。

事前準備として、デーモン avahi-daemon が起動した後は、これを制御するために、専用のユーザーおよびグループを利用することが推奨されているとのことなので、root ユーザーとなって以下を実行しますと記述があったので、作ろうと思ったのですが、ここまでセットアップ作業をしている中でいつの間にかavahiユーザが作られていましたw なので、下記ユーザ追加はavahiユーザがない場合に実行ってことになります。。。

groupadd -fg 84 avahi && 
useradd -c "Avahi Daemon Owner" -d /dev/null -u 84 \
    -g avahi -s /bin/false avahi  || [ $? == 9 ]

※追加されている場合は上記を飛ばして、以下を追加します。

groupadd -fg 86 netdev
tar xvf avahi-0.6.28.tar.gz
cd avahi-0.6.28
./configure --prefix=/usr \
            --sysconfdir=/etc \
            --localstatedir=/var \
            --disable-gtk \
            --disable-gtk3 \
            --disable-qt3 \
            --disable-qt4 \
            --disable-mono \
            --disable-monodoc \
            --disable-python \
            --disable-dbus \
            --disable-libdaemon \
            --enable-core-docs \
            --with-distro=lfs &&
make

はい、makeでエラーです>< configure: error: *** libgdbm not found *** も~ってことで、ぐぐってみると。。。 Typically you will need the “-devel” package when running into an error with a configure script so based on the above output the gdbm-devel package would need to be installed as shown in the below example output. と書いてあったのでyum install gdbm-develでインストールすればいいんだと思い、コマンドを実行してみました。

yum install gdbm-devel

すると。。。

There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   No module named yum

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.7.2 (default, Feb 22 2012, 17:51:13)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)]

If you cannot solve this problem yourself, please go to
the yum faq at:
  http://wiki.linux.duke.edu/YumFaq

ってそろそろ挫折感たっぷりなんですけど。。。 気を取り直して先に進むとしよう。で、どうもpythonのバージョンの問題と言ってるようです。確かにpythonは2.7.2のバージョンをいれてます。多分、pythonのバージョンアップによりなんかモジュールが必要なのでしょうが、何が必要かはわからないので、yumをfindしてみたら、 /usr/lib/python2.4/site-packages/yum にあったので、/usr/bin/yum を vi で開いて#!/usr/bin/python → #!/usr/bin/python2.4 に無理やり書き換えて再度実行してみました。

とりあえずyum install gdbm-develは問題なく動作してインストールが完了しましたので、再度avahiのインストールにチャレンジ。

./configure --prefix=/usr \
            --sysconfdir=/etc \
            --localstatedir=/var \
            --disable-gtk \
            --disable-gtk3 \
            --disable-qt3 \
            --disable-qt4 \
            --disable-mono \
            --disable-monodoc \
            --disable-python \
            --disable-dbus \
            --disable-libdaemon \
            --enable-core-docs \
            --with-distro=lfs &&
make

avahiのmakeが成功しました!ということで、最後にmake installをしてみます。

make install

avahiのmake installも成功しました!疲れ果てたので、今日はこの辺で。。。