Yosemiteの次、「El Capitan」の足音が迫りつつある今日この頃。開発者版/Public Beta版に手を出すのもいいが、趣味でOS Xを使うのならば、正式リリースまで他ジャンルをチェックして見聞を拡げてもいいのでは……というわけで、「OS XとRaspberry Pi」の第2弾をお送りする。
Raspberry Piでも「Bonjour」を
Raspberry PiでRaspbianベースのLinuxディストリビューションを利用していると実感するのが、「Zeroconf」というコンセプトの有難味だ。アップルを中心としたIETFのワーキンググループは、仕様をRFC 3927として標準化するとともに、mDNSResponderなど主要部分はオープンソース化された。
Bonjour(旧称:Rendezvous)はそのOS X/iOS向け実装であり、Linuxに収録されている「Avahi」も基本的な仕様は変わらず、両者には互換性が確保されている。乱暴な表現をすれば、LinuxなどのフリーなOSで動作するBonjourがAvahi、という理解でいいだろう。
Raspbianの初期設定ではAvahiが有効なため、有線/無線LANの基本設定を終えれば「○○○.local」の形式でアドレスを指定できる。Raspberry Piはローカルにキーボードを接続しない活用スタイルが一般的 -- 好みの問題だがバッテリー消費量やGUIの負荷からするとリモートアクセスがベター -- という事情もあり、IPアドレスの設定なしに運用を開始できることは大きなメリットだ。
前置きが長くなったが、その「Avahi」はBonjour互換でありつつも独自に実装されているソフトウェアだ。Raspbianに収録されているAvahiは、デーモンやライブラリ以外にも「avahi-utils」というパッケージを提供しており、OS XのBonjourにはない機能を備えている。
サービスをリストアップ
「avahi-browse」は、同じネットワークに属すZeroconfネットワーク(Bonjour/Avahi)をブラウズするためのコマンド。実行中のすべてのサービスを表示するには「-a」オプション、ひととおり表示したあとにコマンドを終了するための「-t」オプションとセットで利用するのがオーソドックスな利用法だ(例1)。
例1:すべてのサービスをリストアップする(処理後停止)
$ avahi-browse -a -t
サービス名を特定できる場合は、「_ssh._tcp」(SSHサーバ)や「_afpovertcp._tcp」(AFPサーバ)といった文字列を引数として与え、さらに前述の「-t」オプションもあわせて指定する(例2)。これで、LAN上に存在するすべてのAFPサーバを表示できる。
例2:ネットワーク上のAFPサーバをリストアップする
$ avahi-browse _afpovertcp._tcp -t
IPアドレスとホスト名を相互変換
ホストのIPアドレスを知りたい場合には、「-n」オプションに続けて対象のホスト名(Bonjour名)を指定する。これで、そのホストのIPアドレスが表示されるはずだ(例3)。「-a」オプションを使えば、反対にIPアドレスからホスト名を割り出すこともできる(例4)。OS Xにはありそうでない機能なだけに、このコマンドの存在を知っていれば(当然Avahi収録のマシン使用時に限るが)役に立つこともあるはずだ。
例3:ホスト名からIPアドレスを割り出す
$ avahi-resolve -n LaCie-d2.local
LaCie-d2.local 192.168.12.25
例4:IPアドレスからホスト名を割り出す
$ avahi-resolve -a 192.168.12.7
192.168.12.7 MBAir.local
ホスト名にIPアドレスを割り当てる
ホスト名にIPアドレスを割り当てることができる。OS XのBonjourでは、自分のマシンについてのみ「システム環境設定」の「共有」パネルでホスト名(Bonjour名)を設定できるが、ネットワーク上に存在する他のホストに対しては何もできない。しかし、avahi-publishコマンドを使えば、Bonjour/Avahiが動作していないマシンも「○○○.local」の形式でホスト名を割り当てることができるのだ。
たとえば、IPアドレスが192.168.12.4のホストに「nasne.local」という名前を割り当てるには、例5のとおりコマンドを実行する。ただし、サービスとして実行することはできず、Control-Zを押してジョブをバックグラウンドに切り替えなければ他のコマンドは実行できない。一時的にBonjour名を割り当てたいときに使える方法だ。
例5:ホスト名にIPアドレスを割り当てる
$ avahi-publish -a nasne.local 192.168.12.4
Established under name 'nasne.local'
avahi-utilsパッケージに含まれるコマンド | |
---|---|
コマンド名 | 機能 |
avahi-resolve | IPアドレスとホスト名の相互変換を行う |
avahi-set-host-name | 現在のAvahiデーモンに対しmDNSホストを割り当てる |
avahi-publish | ホスト/IPアドレスおよびサービスのマッピングを行う |
avahi-browse | Zeroconfネットワークをブラウズする |
avahi-publish-address | 「avahi-publish -a」と同じ |
avahi-publish-service | 「avahi-publish -s」と同じ |
avahi-browse-domains | 外部のmDNSドメインを検索する |
avahi-resolve-address | 「avahi-resolve -a」と同じ |
avahi-resolve-host-name | 「avahi-resolve -n」と同じ |