# Avahi (日本語)

Wikipedia:ja:Avahi より:

  "Avahi は、Zeroconf (ゼロ・コンフィギュレーション・ネットワーキング) のフリーソフトウェア実装であり、マルチキャスト DNS/DNS-SD サービスディレクトリのためのシステムを含む。Avahi は、特定の構成情報のないローカルネットワーク上のサービスホストの発行と発見を可能とする。例えば、ネットワークに接続したとき、即座にプリンタを検出し、ファイルを探し出し、他者と会話できるようにする。GNU Lesser General Public License (LGPL) の条件でライセンス提供される。"

## インストール

公式リポジトリにある avahi と nss-mdns をインストールしてください。

Avahi のデーモンは systemd で `avahi-daemon.service` を使うことで管理できます。

## Avahi を使う

### IPv4LL IP アドレスの取得

デフォルトでは、DHCP を使って IP を取得するとき、dhcpcd パッケージを使用します。DHCP で IP アドレスが取得できなかったときに IPv4LL アドレスを取得するようにすることができます。デフォルトではこのオプションは無効になっています。有効にするには noipv4ll をコメントアウトしてください:

    /etc/dhcpcd.conf

    ...
    #noipv4ll
    ...

もしくは `avahi-autoipd` を実行してください:

    # avahi-autoipd -D

### ホスト名の解決

Avahi によってホスト名を使ってコンピューターにアクセスすることが可能です。

Note: これを使うには nss-mdns をインストールして、`avahi-daemon.service` を有効にし動作させる必要があります。

Avahi を動作させている maple, fig, oak という名前のマシンがあると考えます。Avahi を設定することでそれぞれのコンピュータの `/etc/hosts` ファイルを管理する必要がなくなります。代わりに `maple.local` を使うことで maple が持っている全てのサービスにアクセスすることが可能です。ただし、デフォルトでは `.local` の問い合わせは Arch Linux では無効になっています。有効にするにはファイル `/etc/nsswitch.conf` を編集して次の行を:

    hosts: files myhostname dns

以下のように変更してください:

    hosts: files myhostname mdns_minimal [NOTFOUND=return] dns

`mdns_minimal` モジュールは `.local` TLD のクエリーだけを処理します。他の TLD を使うように Avahi を設定している場合は、最後に完全な `mdns` モジュールも追加してください。IPv4 だけや IPv6 だけのモジュール `mdns[46](_minimal)` も存在します。

Avahi にはネットワーク上で動作しているサービスを見つけるのに役立つユーティリティが複数含まれています。例えば、ネットワーク中のサービスを探すには、次を実行してください:

    avahi-browse -alr

Avahi Zeroconf ブラウザ (`avahi-discover`) はあなたのネットワーク上の様々なサービスを表示します。また、`bssh` や `bvnc` を使うことで SSH や VNC サーバーをそれぞれ閲覧することが可能です。

Avahi のウェブサイトには Avahi がサポートしているソフトウェアの一覧があります: http://avahi.org/wiki/Avah4users

Note: `avahi-discover` を使うには pygtk と python2-dbus をインストールする必要があります。

### ファイル共有

#### NFS

NFS 共有を設定している場合は、Avahi を使って Zeroconf が有効になっているブラウザ (KDE の Konqueror や OS X の Finder など) で共有を自動マウントすることができます。`/etc/avahi/services` に以下の内容で `.service` ファイルを作成してください:

    /etc/avahi/services/nfs_Zephyrus_Music.service

    <?xml version="1.0" standalone='no'?>
    <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
    <service-group>
      <name replace-wildcards="yes">NFS Music Share on %h</name>
      <service>
        <type>_nfs._tcp</type>
        <port>2049</port>
        <txt-record>path=/data/shared/Music</txt-record>
      </service>
    </service-group>

`/etc/exports` にオプションとして insecure を使っている場合ポートはこのままでいいですが、そうでない場合は変更する必要があります (OS X クライアントには insecure が必要です)。パスは export しているパスか、そのサブディレクトリになります。なんらかの理由で Leopard から自動マウント機能は削除されていますが、スクリプトを使うことができます。このスクリプトはこの投稿 に基づいています。

#### Samba

何も設定しなくても動くはずです。

#### GShare

Arch User Repository から gshare をインストールして LAN 間でファイルを共有できます。設定は必要ありません、ちゃんと動くはずです。

#### Vsftpd

  ソース: ubuntuforums.org

標準の ftp サービスを使いたい場合は、vsftpd と avahi をインストールしてください。vsftpd の設定を ubuntuforums ページに従うか、個人設定によって変更してください (`man vsftpd.conf` を参照)。

`/etc/avahi/services` に `ftp.service` ファイルを作成して、そのファイルの中に以下を貼り付けて下さい:

    <?xml version="1.0" standalone='no'?>
       <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
       <service-group>
       <name>FTP file sharing</name>
       <service>
       <type>_ftp._tcp</type>
       <port>21</port>
       </service>
       </service-group>

設定が完了したら、`avahi-daemon.service` と `vsftpd.service` のサービスを再起動してください。

これでネットワークの他のコンピュータから ftp サーバーを通して閲覧できるようになっているはずです。このセクションに書かれた手順が作られて ftp サーバーは avahi によってローカルの Zeroconf ネットワークになります。

GNOME や KDE を使っていない場合、ファイルマネージャを使って直接 ftp サーバーにログインすることができないかもしれません。そのときは ftp クライアントを使ってマシンのサーバーの IP アドレスか (このセクションで説明しているように) ホスト名を指定してください。

#### Giver

Giver は Giver を動作させている2つのデスクトップ間で簡単にファイルを共有できる mono のプログラムです。必要な操作はファイルをクリックしてファイルを送信したい相手の名前か写真にドラッグするだけです。

パッケージは giver です。

Giver は gnome-sharp に依存しており、gnome-sharp は GNOME のパッケージに依存しているので注意してください。

### リンクローカル (Bonjour/Zeroconf) 通信

Avahi を linux の bonjour プロトコルのサポートのために使うことができます。Wikipedia:Comparison of instant messaging clients や List of Applications (日本語)#インスタントメッセージ で bonjour プロトコルをサポートしているクライアントのリストを確認してください。

### 携帯デバイスからの Airprint

Avahi は CUPS と協同して airprint 対応の携帯デバイスからほとんど全てのプリンターに印刷する機能も提供します。デバイスからの印刷機能を有効にするには、プリンターの avahi サービスファイルを /etc/avahi/services に作成して avahi を再起動してください。HP-Laserjet プリンターの一般的なサービスファイルは以下の例のようになります。name, rp, ty, adminurl, note は変えて下さい。ファイルは /etc/avahi/services/youFileName.service として保存します:

     <?xml version="1.0" standalone='no'?>
     <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
     <service-group>
       <name>yourPrnterName</name>
       <service>
         <type>_ipp._tcp</type>
         <subtype>_universal._sub._ipp._tcp</subtype>
         <port>631</port>
         <txt-record>txtver=1</txt-record>
         <txt-record>qtotal=1</txt-record>
         <txt-record>rp=printers/yourPrnterName</txt-record>
         <txt-record>ty=yourPrnterName</txt-record>
         <txt-record>adminurl=http://198.168.7.15:631/printers/yourPrnterName</txt-record>
         <txt-record>note=Office Laserjet 4100n</txt-record>
         <txt-record>priority=0</txt-record>
         <txt-record>product=virtual Printer</txt-record>
         <txt-record>printer-state=3</txt-record>
         <txt-record>printer-type=0x801046</txt-record>
         <txt-record>Transparent=T</txt-record>
         <txt-record>Binary=T</txt-record>
         <txt-record>Fax=F</txt-record>
         <txt-record>Color=T</txt-record>
         <txt-record>Duplex=T</txt-record>
         <txt-record>Staple=F</txt-record>
         <txt-record>Copies=T</txt-record>
         <txt-record>Collate=F</txt-record>
         <txt-record>Punch=F</txt-record>
         <txt-record>Bind=F</txt-record>
         <txt-record>Sort=F</txt-record>
         <txt-record>Scan=F</txt-record>
         <txt-record>pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf</txt-record>
         <txt-record>URF=W8,SRGB24,CP1,RS600</txt-record>
       </service>
     </service-group>

もしくは、https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py を使って Avahi のサービスファイルを生成することができます。このスクリプトは python2 と pycups に依存しています。スクリプトを実行するには:

    # python2 airprint-generate.py -d /etc/avahi/services

### ファイアウォール

iptables を使っている場合 UDP ポート 5353 を開いて下さい:

     # iptables -A INPUT -p udp -m udp --dport 5353 -j ACCEPT

ファイアウォールとして Simple stateful firewall フォーマットを使っている場合は:

     # iptables -A UDP -p udp -m udp --dport 5353 -j ACCEPT

## 参照

- Avahi - 公式プロジェクトウェブサイト
- Bonjour for Windows - Windows で Zeroconf を有効にする
- http://www.zeroconf.org/

Category:

- Networking (日本語)