サービス設定
提供サービスの設定
avahiでは/etc/avahi/services/*.serviceにそのホストが提供するサービスの一覧を置く。FreeBSDだと/usr/local/etc/avahi/services/*.serviceとなる。例えばsshのサービスを提供する場合は、ssh.serviceというファイルに内容を書く。内容はXMLで記述されている。
ここで書くべき内容はavahi.service(5)を見て欲しいが、XML Tagの部分を以下に簡単に訳してみた。
説明
/etc/avahi/services/*.serviceは、静的なDNS-SDサービスデータを含んでいる、複数のファイルである。全てのサービスファイルは同じ名前を共有する複数のサービス定義を記述できる。これは複数のプロトコルを実装したサービスを配信するのに役に立つ。(例: _ipp._tcp と _printer.tcp の二つのサービスを持つプリンタ実装)
トップレベル要素。一つの
ならない。
提供するサービスの名前。もしもreplace-wildcards属性がyesであれば、"%h"というはローカルのホスト名に置き換えられる。例えば"Remote Terminal on %h"などのように使う。初期値は"no"である。
一つのサービスに関する情報を指定する要素。必ず一つの
protocol属性は配信するプロトコルを指定する。もしも"any"であればIPv4とIPv6の両方を配信する。また、初期値は"any"である。
提供するサービスを指定する。もし省略された場合は、avahi daemonの初期設定を使用する。(おそらく ".local"であろう)
サービスを提供するホスト名を指定する。このホスト名はMulticast DNSかunicast DNSで解決できなければならない。注意してほしいのは、FQDNで指定する必要があるという点である。例えば、.localなどが暗黙のうちに追加されたりしないことに注意。ホスト名は
もっと詳しくホスト名マッピングについて知りたい場合はavahi.hosts(5)を参照すること。
listenするポート番号を指定する。
DNS-SD TXT のレコード情報を指定する。
サービスの設定
サービス配信を行うにはDNS-SDに登録されたサービスタイプを設定しなければいけない。自分で設定したサービスの登録などしてられないが、手元で使う分には特にDNS-SDに登録する必要はない。
例として、DNS-SDに登録されていない、synergy(http://synergy2.sourceforge.net/)のサービスを登録してみた。/usr/local/etc/avahi/service/synergy.serviceに以下の内容でファイルを作って置き、avahi-daemonをrestartする。
<?xml version="1.0" standalone='no'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">Synergy server of %h</name> <service> <type>_synergy._tcp</type> <port>24800</port> <txt-record>Synergy service</txt-record> </service> </service-group>
すると、今までできなかった synergyサービスの発見が、以下のコマンドでできるようになる。
% sudo /usr/local/etc/rc.d/avahi-daemon.sh restart Stopping avahi-daemon. Starting avahi-daemon. % avahi-browse -r _synergy._tcp + re0 IPv6 Synergy server of exhost _synergy._tcp local + re0 IPv4 Synergy server of exhost _synergy._tcp local = re0 IPv6 Synergy server of exhost _synergy._tcp local hostname = [exhost.local] address = [fe80:3::abe:deff:fef7:2a08] port = [24800] txt = ["Synergy service"] = re0 IPv4 Synergy server of exhost _synergy._tcp local hostname = [exhost.local] address = [192.168.0.10] port = [24800] txt = ["Synergy service"]