事情的開始又是在01上看到這篇『在 linux 上 架設 iTunes Server』的分享,用的是套叫做『mt-daapd』的*nix套件。咦?竟然有OSX的說明文件耶?在OSX上裝這個,會不會有點...嗯...奇怪?OSX上不是可以直接跑iTunes來分享嗎?是沒錯,可是這樣就必須隨時把iTunes開著...開玩笑,有文字模式,槓嘛要弄個GUI來浪費資源?當然還是CLI萬萬歲啦。
根據mt-daapd站上的說明文件,要在OSX上安裝mt-daapd,步驟如下:
- 到mt-daapd站上下載最新的tarball檔,回來準備自己編譯。
- 安裝Fink:Fink是OSX與廣大*nix軟體間的橋樑,透過Fink,可以輕易地(如果不要發生一堆莫名其妙的相依性問題Orz)安裝與管理文字模式的軟體套件。Fink的安裝可以參考這裡。
- 用Fink安裝libid3tag與gdbm3兩個套件:
% fink install libid3tag
% fink install gdbm3 - 把上述套件安裝妥後,把mt-daapd的tarball解出來,進到解出的目錄,開始進行編譯:
% ./configure --with-id3tag=/sw --with-gdbm-includes=/sw/includes --with-gdbm-libs=/sw/lib
% sudo make
% sudo make install - 現行0.2.4版的intall script在OSX上好像不會自己把所有該建的目錄、該複製的檔案弄好,所以得自己來:
% sudo mkdir /etc/mt-daapd
% sudo cp contrib/mt-daapd.conf /etc/mt-daapd/
% sudo cp contrib/mt-daapd.playlist /etc/mt-daapd/ - 修改/etc/mt-daapd/mt-daapd.conf,這是mt-daapd的設定檔,主要要改的部份如下(其他的用預設值就可):
# the location for the db files
db_dir /var/cache/mt-daapd
# change the freakin' default password
admin_pw put_top_secret_admin_pass_here
# put whatever directory you want here. No trailing slash and no spaces! (no you can't use backslashes to make this work!)
mp3_dir /Volumes/Decoy/iTunes/iTunes Music
# Set the servername for Rendezvous/Bonjour
servername G3BW500 - /etc/mt-daapd/mt-daapd.conf裡的『db_dir』參數所指定的目錄,也別忘了要手動建立,否則mt-daapd跑不起來(也不會自己去建):
% sudo mkdir /var/cache
% sudo mkdir /var/cache/mt-daapd - 因為我的OSX上也裝了有iTunes,所以『mp3_dir』指向的目錄就是iTunes Music檔案夾的位置,這樣也可以方便用iTunes來管理歌曲。
- 接著可以先來測試一下是否可以順利分享了:
% /usr/local/sbin/mt-daapd -c /etc/mt-daapd/mt-daapd.conf
啟動另一部PC或Mac上的iTunes,如果在左邊sidebar看到先前設定的servername出現,那就成功了。 - 接著是最後的仕上 - 設定StartupItems,讓mt-daapd可以在開機後自動啟動。這需要先在/Library/StartupItems下新增一個目錄,並在其下準備兩個檔案:
% sudo mkdir /Library/StartupItems/mt-daapd
% sudo touch /Library/StartupItems/mt-daapd/mt-daapd
% sudo touch /Library/StartupItems/mt-daapd/StartupParameters.plist
mt-daapd的檔案權限是755,內容如下:#!/bin/sh
. /etc/rc.common
StartService ()
{
ConsoleMessage "Starting mt-daapd"
/usr/local/sbin/mt-daapd -c /etc/mt-daapd/mt-daapd.conf
}
StopService ()
{
ConsoleMessage "Stopping mt-daapd"
killall mt-daapd
}
RestartService ()
{
StopService
StartService
}
RunService "$1"
StartupParameters.plist的內容如下:{
Description = "mt-daapd iTunes server";
Provides = ("mt-daapd");
Require = ("Disks", "Resolver", "Network");
Uses = ("Network", "mDNSResponder");
OrderPreference = "Last";
Messages =
{
start = "Starting mt-daapd";
stop = "Stopping mt-daapd";
restart = "Reloading mt-daapd";
};
}
原本安裝的步驟到此就完成,但是我自己卻卡在最後StartupItems的地方,怎麼弄就是無法自動啟動mt-daapd,但是在Terminal手動執行(步驟9)卻很正常,以SystemStarter指令測試步驟10的StartupItems也OK。
% sudo SystemStarter start mt-daapd
搞了一天,做了各種測試與檢查,最後發現問題是出在我把『mp3_dir』設在非啟動磁碟上(而且是被ATA界面卡模擬成SCSI磁碟);而OSX從Panther開始,就不會在有使用者登入GUI前,掛載任何非啟動磁碟的非IDE磁碟或分割區(相對地也會在使用者登出GUI後卸載這類非IDE磁碟或分割區)。所以在mt-daapd的StartupItems被執行時,mp3_dir指向的磁區尚未被掛上來,當然mt-daapd就立即退出了。解決之道只需要一行,只要在Terminal執行:
sudo defaults write /Library/Preferences/SystemConfiguration/autodiskmount AutomountDisksWithoutUserLogin -bool true