現在、宮下家でのパソコン環境は以下の様になっている。
Note PC : Panasonic Let’s Note : Windows XP
Desktop(Living) PC : Apple Macmini (Intel Core Duo) : Mac OS X 10.4.7 + Windows XP(Bootcamp)
この環境で仕事なりウェブを見たりしているわけだが、1つ歯痒い思いをしていたことを今日解決した。普段、家にいる時は常に音楽を聞いている。主にCDプレーヤー+AVアンプで聞いているが、一方でJPopなどはパソコンにHDDに保存されているMP3, MPEG4ファイルで聞く機会も多い。Macmini, Let’s Noteともに、PC(iTunes) > Apple AirMac Express : AirTunes機能 > 光ディジタルケーブル > AVアンプの環境で聞いているため、理論的にはアナログ的な伝送劣化なく再生している。歯痒い問題とは、音楽ファイル(MP3, MPEG4など)が3環境(Let’s Note Windows, Macmini Mac OS X, Macmini Windows)にそれぞれ置いてあることである。つまり約10GBytes程度ある全く同じ音楽ファイルが、それぞれの環境でHDDを消費しており非常にもったいない状態である。そこで、個人で管理しているLinuxサーバ(遠隔地に配置)に音楽ファイルを一括で管理し、iTunesのリモートサーバ(音楽共有)を起動し、上記の3環境はそのサーバを参照するようにした。今回はそのサーバ構築の過程を簡単に紹介する。テクニカルの内容であるため,主に私への備忘録でもあるが、興味のある方は参考にしてほしい。
構築システム概要(箇条書き)
・遠隔地にあるLinuxにiTunesサーバを立てる
・iTunesサーバ(DAA protocol daemon)は、free softwareのdaapdを利用する
・iTunesサーバへは、DAAクライアントであるiTunesを使ってBonjour(Rendezvous)経由で接続するが、家のLANとiTunesサーバ on Linuxは違うサブネットであるため、SSHのポートフォワード(Local Port Forwarding)で家LANからiTunesサーバまでトンネルを作り、RendezvousProxyを経由して接続する。
・iTunes上での音楽ファイルデータ(ID3タグ) の文字化けを防ぐ
といった方法で構築することにした。
構築手順
(1) iTunesサーバ(daapd)の構築
1.1 Bonjourサーバの構築
Linux上にBonjourサーバを構築しないと、せっかくiTunesサーバを起動しても、iTunesがBonjour経由で検索することができない。Appleがオープンソースで公開しているので、それを利用して構築した(Open Source Bonjour (mDNSResponder) @ Apple Developer Connection)。Bonjourのうち、DAAPのみ3689/TCPで公開するように/etc/rendezvous.confにて設定。ちなみにBonjourプロトコルについての詳しい解説は、Bonjour Protocol Specification @ appleを参照。
— /etc/rendezvous.conf 設定例(はじまり):
iTunes Server
_daap._tcp.
none
3689
— /etc/rendezvous.conf 設定例(終わり):
1.2 iTunesサーバ(DAAPD)の構築
DAAP(Digital Audio Access Protocol – RFCなし)のサーバ(Daemon)はいくつかあるようだが、一番最初にみつけたdaapdを採用した。daapdのウェブにも書いてあるようにdaapd構築前に、必要なライブラリ群をインストールしなければならない。Debian系Linuxだとパッケージでいけそうだが、私のRPMベースLinux(CentOS 4系)ではパッケージが少し探しただけでは見つからず全てソースインストールした。
1.2.1 daapdに必要なライブラリ
・libid3tag
・zlib
・howl (for Zeroconf/Rendezvous)
・mpeg4ip (for AAC metadata)
*2006/09/24現在howlの大元のサーバがなぜかダウンしていた。ウェブ上のキャッシュで見かけたのでそれを利用した:http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/h/ho/howl/howl-0.9.9.tar.gz
基本的に./configure, make, make install後で通った。/etc/ld.so.confへの登録と/sbin/ldconfigは忘れずに。
1.2.2 daapdの構築
上記のライブラリが用意されていれば、問題なくコンパイルが通るはずである(makeのみ)。daapdという実行ファイルが生成されていれば成功である。/etc/daapd.confを編集して、daapdをデーモンとして起動する。以下の例は、ITUNESSERVERNAMEというサーバに3689/TCPポートにDBNAMEという名前で、パスワードを設定してDAAP daemonを起動する場合の設定例である。
— /etc/daapd.conf 設定例(はじまり):
Port 3689
ServerName ITUNESSERVERNAME
DBName DBNAME
Password passworddayo
Root /home/itunesroot
Cache /var/cache/daapd/daapd.cache
Timescan 2
Rescan 0
— /etc/daapd.conf 設定例(終わり):
(2)家庭内LANからiTunesサーバ(DAAPD)までの接続の確立
2.1 iTunesサーバ(3689/TCP)への外部からのアクセスをブロック
・利用しているFirewallを使ってiTunesサーバに外部からのアクセスをブロックする.サーバ自身のIPのみアクセスを許可する(後述するSSH ポートフォワードのみの接続を許可する)
2.2 iTunesサーバにアクセスするクライアントPC(家庭内LANなどに配置)からSSHのポートフォワード接続する
例:ssh USERNAME@ITUNESSERVERNAME -L 36890:127.0.0.1:3689
* ローカルPCで36890/TCPポートへのアクセスをSSHトンネルを通して,iTunesサーバの3689/TCPに接続する.
2.3 RendezvousProxyの起動
RendezvousProxyの設定で,Add Hostボタンを押し
IP Address : localhost (or 127.0.0.1)
Port : 36890
Host Labe(たぶん何でも良い) : ITUNESSERVERNAME
Service Text(たぶん何でも良い) : iTunesRemoteServer
Service Type : _daap._tcp.local.
(3) iTunesの起動
今までの設定,接続が全て動作すれば,iTunesを起動したときに左側に”共有”として,2.3で設定した”Service Text”の名前が表示され,クリックした際に,パスワード(1.2.2で設定したもの)が聞かれて,入力後問題無ければ接続は完了である.
(4) 音楽ファイルの配置
音楽ファイルの配置であるが,最初曲名・アルバム名などの文字化けに悩んだ.ウェブを見渡すといろいろ対策がとられているようであるが,私が今回構築した環境での対策方法を紹介する.MP3ファイルは,ID3タグによって曲名,アルバム名,ジャンルなどが記録されているが,このバージョンを調整すれば文字化けを防ぐ事ができる.実際には,このタグの内容がUNICODEエンコーディングでないと文字化けされるらしい.音楽ファイルを1.2.2で指定したディレクトリに配置する前に,iTunes上でファイルを選択し,右クリックして”ID3タグを変換”を選び,タグバージョンをv2.3に変換する.ID3タグもVersionがあり,v2系からUNICODEが採用されているようだ.つまりiTunesでタグバージョンをv2系に変換すれば,曲情報がUNICODEに変換され文字化けが起こらないようだ.IDタグの最新はv2.4だが,v2.4にしてしまうと文字化けが起こってしまった.そこで,1つ前のv2.3に変換するのが,今回構築したiTunesサーバでの文字化け回避する方法である.
(5) その他補足
5.1 daapdの起動スクリプト
起動スクリプトは,HOWTO/Set Up daapd on Fedora Linuxここを参考にして作った.このサイトでは,起動スクリプトの他にdaapdに関わるいろいろな情報が載っている.
以上により,外部のLinuxにiTunesサーバを起動し,家の3環境どこからでも音楽データが参照できるようになった.ノートPCなどのHDDを大きな音楽データで圧迫することもなく快適である.当然,SSHのポートフォワードと,RendezvousProxyは自動起動にしてあるため,普段通りiTunesを起動すれば共有音楽データにアクセスできる.とても快適になった.
*これを起動したあとで,daapdではなく,mt-daapdのほうがなんか簡単そうな気がしてきました・・・.