gnome-vfs-2.13.3 から、Avahi Zeroconf は >= 0.6 を要求されるようになった。以前試した時はデーモンが起動しなかったし、最新版では Howl 互換の機能が追加されたようなので、v0.6.1 をビルド・インストールすることにした。
が、またしてもデーモンが起動しない。仕方ないので、gdb 上で起動しながらデバッグしてみると、libdaemon で fork(2) した後にタイムアウト (20sec) していた。glibc の中の select(2) なんかも stepping してみたけど、まぁこちらは問題ない。次に子プロセスであるデーモン本体を stepping していくとタイムアウト後に avahi_caps_reduce() (main.c:1129) で返り値が FALSE となってデーモン処理を中断している:
1126 if (config.drop_root) {
1127 #ifdef ENABLE_CHROOT
1128 if (config.use_chroot)
1129 if (avahi_caps_reduce() < 0)
1130 goto finish;
1131 #endif
この関数 (caps.c:52) の中で cap_set_proc(3) を呼び出したところで、これまた返り値が FALSE となり、ちゃんと syslog にログを出力していた:
52 if (cap_set_proc(caps) < 0) {
53 avahi_log_error("cap_set_proc() failed: %s", strerror(errno));
54 ret = -1;
55 }
で、ログはこんな感じ:
avahi-daemon[16979]: cap_set_proc() failed: Operation not permitted
見当がつかないので検索してみると、ちゃんと先人が残してくれたメモがあるじゃないですか。Kernel の Security Option で CONFIG_SECURITY_CAPABILITIES=[y|m] しないとダメらしい。ふm…
。
今の K26 では有効にしていないので、2.6.14ベースを再構築して対応することにした。
せっかくなんで、いつもの Nitro パッチと Nvidia ドライバを最新版にして、avahi-daemon を起動してみると:
avahi-daemon[2622]: Found user 'avahi' (UID XX) and group 'avahi' (GID XX).
avahi-daemon[2622]: Successfully dropped root privileges.
avahi-daemon[2622]: avahi-daemon 0.6.1 starting up.
avahi-daemon[2622]: Successfully called chroot().
avahi-daemon[2622]: Successfully dropped remaining capabilities.
avahi-daemon[2622]: Failed to read service directory.
avahi-daemon[2622]: New relevant interface vmnet1.IPv4 for mDNS.
avahi-daemon[2622]: Joining mDNS multicast group on interface vmnet1.IPv4 with address 192.168.122.1.
avahi-daemon[2622]: New relevant interface vmnet8.IPv4 for mDNS.
avahi-daemon[2622]: Joining mDNS multicast group on interface vmnet8.IPv4 with address 192.168.31.1.
avahi-daemon[2622]: New relevant interface eth0.IPv4 for mDNS.
avahi-daemon[2622]: Joining mDNS multicast group on interface eth0.IPv4 with address 192.168.0.3.
avahi-daemon[2622]: Network interface enumeration completed.
avahi-daemon[2622]: Registering new address record for 192.168.122.1 on vmnet1.
avahi-daemon[2622]: Registering new address record for 192.168.31.1 on vmnet8.
avahi-daemon[2622]: Registering new address record for 192.168.0.3 on eth0.
avahi-daemon[2622]: Registering HINFO record with values 'I686'/'LINUX'.
avahi-daemon: S98avahi-daemon startup succeeded
avahi-daemon[2622]: Server startup complete. Host name is mikeforce2.local. Local service cookie is XXXXXXXX.
という感じで見事起動に成功。
v0.6 から外にあるドメインも参照できるようになったので、以前よりましていろいろなサービスを検出できるようになった:

Secure Programming for Linux and Unix HOWTO: 日本語版 (JFdocs から)