Linux Server

iTunesサーバ構築(mt-daapd + Samba)

  

ご注意下さい

この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。

0
(0)

iTunes用のサーバを立ててどのPCからでもどのユーザからもライブラリを参照するようにしてみることに挑戦してみましたのでその備忘録。

と、いうのもうちにはPCが全部でサーバ1台の、クライアント3台の大所帯。
基本的にCDを取り込むPCは決まっているんだけど、嫁と取り込んだ曲を共有できないし、できればプレイリストも共有したい。いろいろ試してみたけどiTunesでライブラリ共有するしか方法がないらしい。
それだと1つのPCでは必ずiTunesを起動していないといけなくなり、リソースも無駄だし嫁もPCを利用できない。

ってことでいろいろ調べてみると Linux + Howl + mt-daapd + Sambaでこれに近いことができそうなのです。

iTunesライブラリを共有するにはRendezvous(ランデブーと読みます)というミドルウェアとDAAP(Digital Audio Access Protocol)サーバで実現できるみたい。
余談ですが、Rendevousとはマルチキャストを使うミドルウェアでReutersのニュース配信の仕組みなんかでも使われてます。何度か仕事で使ったことあります。こんなところでも出会うとは…。

最終的な使い方イメージは以下のようになります。この使い方に合う方がいらっしゃればご参考にどうぞ。

・どのPCでも家族の誰もがCDをインポート可能。
→ でも取り込んだPCで、かつ取り込んだユーザでしか取り込んだライブラリは参照できない。
・CDを取り込んだユーザは取り込んだライブラリのコメントを記入する
→ サーバ側のプレイリストに反映させるため

あとはiTunesの機能でライブラリを共有可能になります。

こんな感じ

共有ライブラリに共有プレイリストが表示されます。

では開始。ダウンロードするものの一覧は↓

今回は以下のバージョンで試してみました。
howl-0.9.5.tar.gz
libid3tag-0.15.1b.tar.gz
mt-daapd-0.2.4.tar.gz

インストールは単純に上記を解凍して、configure後make、make installのみ。

次は設定方法。
今回は以下のiTunesServer構成を考えました。
・iTunesServer名:iTunes Server
・音楽(mp3)格納ディレクトリ:/export/music/mp3/
・ライブラリ格納ディレクトリ:/export/music/mt-daapd/

さて流れは以下の通り。
① mt-daapd.confの編集
② mt-daapd.playlistの編集
③ Sambaの設定変更
④ iTunes(主PC)の設定変更
⑤ iTunes(クライアントPC)の設定変更

① mt-daapd.confの編集
基本的な事項を設定すればOK。

# $Id: mt-daapd.conf,v 1.15 2004/12/29 06:20:26 rpedde Exp $
#
# This is the mt-daapd config file.
#
# If you have problems or questions with the format of this file,
# direct your questions to rpedde@users.sourceforge.net.
#
# You can also check the website at http://mt-daapd.sourceforge.net,
# as there is a growing documentation library there, peer-supported
# forums and possibly more.
#

#
# web_root (required)
#
# Location of the admin web pages.
#
# If you installed from .RPM, .deb, or tarball with --prefix=/usr, then
# this is correct.
#
# If you installed from tarball without --prefix=/usr, then the correct
# path is probably /usr/local/share/mt-daapd/admin-root.
#

web_root /usr/local/share/mt-daapd/admin-root

#
# port (required)
#
# What port to listen on. It is possible to use a different
# port, but this is the default iTunes port
#

port 3689

#
# admin_pw (required)
#
# This is the password to the administrative pages
#

admin_pw xxxxxx

#
# db_dir (required)
#
# This is where mt-daapd stores its database of song information.
#
# If you installed from .RPM or .deb, then this directory already
# exists. If not, then YOU MUST CREATE THIS DIRECTORY!
#

db_dir /export/music/mt-daapd

#
# mp3_dir (required)
#
# Location of the mp3 files to share. Note that because the
# files are stored in the database by inode, these must be
# in the same physical filesystem.
#

mp3_dir /export/music/mp3

#
# servername (required)
#
# This is both the name of the server as advertised
# via rendezvous, and the name of the database
# exported via DAAP. Also know as "What shows up in iTunes".
#

servername iTunesServer

#
# runas (required)
#
# This is the user to drop privs to if running as
# root. If mt-daapd is not started as root, this
# configuration option is ignored. Notice that this
# must be specified whether the server is running
# as root or not.
#

runas nobody

#
# playlist (optional)
#
# This is the location of a playlist file.
# This is for Apple-style "Smart Playlists"
# See the mt-daapd.playlist file in the
# contrib directory for syntax and examples
#
# This doesn't control static playlists... these
# are controlled with the "process_m3u" directive
# below.
#

playlist /export/music/etc/mt-daapd.playlist

#
# password (optional)
#
# This is the password required to listen to MP3 files
# i.e. the password that iTunes prompts for
#

#password mp3

#
# extensions (optional)
#
# These are the file extensions that the daap server will
# try to index and serve. By default, it only indexes and
# serves .mp3 files. It can also server .m4a and .m4p files,
# and just about any other files, really. Unfortunately, while
# it can *attempt* to serve other files (.ogg?), iTunes won't
# play them. Perhaps this would be useful on Linux with
# Rhythmbox, once it understands daap. (hurry up!)
#
#

extensions .mp3,.m4a,.m4p

#
# logfile (optional)
#
# This is the file to log to. If this is not configured,
# then it will log to the syslog.
#
# Not that the -d switch will control the log verbosity.
# By default, it runs at log level 1. Log level 9 will churn
# out scads of useless debugging information. Values in between
# will vary the amount of logging you get.
#

#logfile /var/log/mt-daapd.log

#
# art_filename (optional)
#
# There is experimental support thanks to Hiren Joshi
# (hirenj@mooh.org) for dynamically adding art to the id3v2
# header as it is streamed (!!). If you were using a music system
# like zina or andromeda, for example, with cover art called
# "_folderOpenImage.jpg", you could use the parameter
# art_file _folderOpenImage.jpg and if the file _folderOpenImage.jpg
# was located in the same folder as the .mp3 file, it would appear
# in iTunes. Cool, eh?
#

#art_filename _folderOpenImage.jpg

#
# rescan_interval
#
# How often to check the file system to see if any mp3 files
# have been added or removed.
#
# if not specified, the default is 0, which disables background scanning.
#
# If background rescanning is disabled, a scan can still be forced from the
# "status" page of the administrative web interface
#
# Setting a rescan_interval lower than the time it takes to rescan
# won't hurt anything, it will just waste CPU, and make connect times
# to the daap server longer.
#
#

#rescan_interval 300
rescan_interval 300

# always_scan
#
# The default behavior is not not do background rescans of the
# filesystem unless there are clients connected. The thought is to
# allow the drives to spin down unless they are in use. This might be
# of more importance in IDE drives that aren't designed to be run
# 24x7. Forcing a scan through the web interface will always work
# though, even if no users are connected.

# always_scan 0

#
# process_m3u
#
# By default m3u processing is turned off, since most m3u files
# sitting around in peoples mp3 directories have bad paths, and
# I hear about it. :)
#
# If you are sure your m3u files have good paths (i.e. unixly pathed,
# with relative paths relative to the directory the m3u is in), then
# you can turn on m3u processing by setting this directive to 1.
#
# I'm not sure "unixly" is a word, but you get the idea.
#

# process_m3u 0

#
# scan_type
#
#
# This sets how aggressively mp3 files should be scanned to determine
# file length. There are three values:
#
# 0 (Normal)
# Just scan the first mp3 frame to try and calculate size. This will
# be accurate for most files, but VBR files without an Xing tag will
# probably have wildly inaccurate file times. This is the default.
#
# 1 (Aggressive)
# This checks the bitrates of 10 frames in the middle of the song.
# This will still be inaccurate for VBR files without an Xing tag,
# but they probably won't be quite as inaccurate as 0. This takes
# more time, obviously, although the time hit will only happen the
# first time you scan a particular file.
#
# 2 (Painfully aggressive)
# This walks through the entire song, counting the number of frames.
# This should result in accurate song times, but will take the most
# time. Again, this will only have to be incurred the first time
# the file is indexed.
#

# scan_type 0

#
# compress
#
# Whether to use gzip content-encoding when transferring playlists etc.
# This was contributed as a patch by Ciamac Moallemi just prior to the 0.2.1
# release, and as such, hasn't gotten as much testing as other features.
#
# This feature should substantially speed up transfers of large databases
# and playlists.
#
# It will eventually default to 1, but currently it defaults to 0.
#

# compress 0

これができたところでmt-daapdと叩いて起動してみてエラーがでなければほぼ問題なし。
エラーが出ていないことを確認して、IEでアクセスしてみる。

URLは、http://(iTunesサーバ=LinuxサーバのIP):3689/で認証は上記ファイルで指定したパスワード。

この画面が出ればOK。

ここまでできたらmt-daapdが自動的に起動されるように小細工。
/etc/init.d/mt-daapdを適当に作成して、

# chkconfig --add mt-daapd
# ntsysv

で登録。

/etc/init.d/mt-daapdは↓

#!/bin/sh
#
# chkconfig: 345 81 35
# description: Starts and stops the mt-daap daemon

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

CONFIG=/etc/mt-daapd.conf

# Check that mt-daapd.conf exists.
[ -f $CONFIG ] || exit 0

# See how we were called.
case "$1" in
start)
echo -n "Starting MT-DAAP services: "
daemon /usr/local/sbin/mt-daapd
touch /var/lock/subsys/mt-daapd
echo ""
;;
stop)
echo -n "Shutting down MT-DAAP services: "

## we have to get all the smbd process here instead of just the
## main parent (i.e. killproc) because it can take a long time
## for an individual process to process a TERM signal
daappids=`ps guax | grep mt-daapd | grep -v grep | awk '{print $2}'`
for pid in $daappids; do
kill -TERM $pid
done
rm -f /var/lock/subsys/mt-daapd
echo ""
;;
restart)
echo -n "Restarting MT-DAAP services: "
$0 stop
$0 start
echo "done."
;;
*)
echo "Usage: mt-daap {start|stop}"
exit 1
esac

service mt-daapd startにて起動、service mt-daapd stopで停止できることを確認。

② mt-daapd.playlistの編集
本来であれば、マイレートを全PC、全ユーザで共有したかったんですが、それはなかなか厳しいようなので、コメントを利用することに。コメントに書いたものはIDタグとして音楽ファイル(mp3)の中に埋め込まれる模様デス。

ちなみに僕のプレイリストは以下の通り。

# $Id: mt-daapd.playlist,v 1.7 2004/12/22 05:05:47 rpedde Exp $
#
# This is the playlist file, for specifying iTunes-style
# "Smart Playlists".
#
# The syntax is as follows:
#
# "Playlist Name" { expression }
#
# An expression consists of:
#
# ID3-tag-name operator operand
#
# Where valid ID3-tag-names are:
# Artist (string)
# Album (string)
# Genre (string)
# Path (string) -- full path to song, including filename
# Composer (string)
# Orchestra (string)
# Conductor (string)
# Grouping (string) -- I don't even know what this is...
# Comment (string)
# Type (string) -- "mp3 audio file", "m4a audio file", etc.
# Year (int)
# BPM (int)
# Bitrate (int)
# Date (date)
#
# Valid operators include:
# is, includes (string)
# >, <, <=, >=, = (int)
# after, before (date)
#
# the "is" operator must exactly match the tag,
# while the "includes" operator matches a substring.
# Both matches are case-insensitive
#
# Valid operands include:
# "string value" (string)
# integer (int)
#
# Multiple expressions can be anded or ored together,
# using the keywords OR and AND (or || and &&).
# The unary not operator is also supported using the
# keyword NOT (or !)
#
# Examples:
#
# "techno" {
# genre includes "techno" ||
# artist includes "zombie"
# }
#
# This would match songs by "Rob Zombie" or "White Zombie",
# as well as those with a genre of "Techno-Industrial" or
# "Trance/Techno", for example.
#
# "AAC Files" {
# path includes ".m4a" ||
# path includes ".m4p"
# }
#
# This would match all m4a and m4p files -- i.e. iTunes-ripped aac files
# or songs downloaded from iTMS.
#
# "Orchestral Music" {
# Orchestra !IS "" ||
# Conductor !IS ""
# }
#
# This would match anything with *anything* entered as a
# orchestra or conductor... this would probably include any
# orchestral music. Kind of ugly, but works!
#
#
# DATES
#
# Dates are kind of funky. The "date" of a file is when it
# was created on the file system, or the date that it was first
# entered into the database, whichever is earlier. The date of
# a file can be matched with the terms "before" or "after".
#
# One example of a valid date is a date in yyyy-mm-dd format:
#
# "Files added after January 1, 2004" {
# date after 2004-01-01
# }
#
# There are also some special date keywords:
# "today", "yesterday", "last week", "last month", "last year"
#
# A valid date can also be made by appling an interval to a
# date. As an example, a valid date might be:
#
# 3 weeks before today
# or
# 3 weeks ago
#
# You can combine these, of course.
#
# "3 weeks before today" is the same as "2 weeks before last week"
# or "1 week after last month" or "21 days before today" or
# "20 days before yesterday" or "7 days after last month". You get
# the idea.
#
# Note that the playlists are only generated at the time that mt-daapd
# starts... so while the dates will be accurate at start time, they
# may become inaccurate with time. Yes, I know... it's on my list. :)
#
# So, examples:
#
# "Recently Added MP3s" {
# date after last month AND file includes ".mp3"
# }
#
# This matches only mp3 files added in the last 30 days.
#
#
# SUMMARY
#
# I expect that this language will grow over time. If you want
# to hack on it, see src/lexer.l, src/parser.y, and src/playlist.c
#
# If there is something missing you particularly want, let me
# (rpedde@users.sourceforge.net) know!
#

"60's Music" {
Year >= 1960 && Year < 1970
}

"70's Music" {
Year >= 1970 && Year < 1980
}

"80's Music" {
Year >= 1980 && Year < 1990
}

"90's Music" {
Year >= 1990 && Year < 2000
}

"2000's Music" {
Year >= 2000
}

"Recently Added" {
Date after 3 month ago
}

"Favolites" {
comment includes "melody"
}

"Ballads" {
comment includes "ballad"
}

"Piano Songs" {
comment includes "piano"
}

"Up Tempo Songs" {
comment includes "up tempo"
}

"R&B" {
genre includes "R&B"
}

上記の太字で書いた部分は自分でPCからコメント欄に記入した文字です。

③ Sambaの設定変更
/export/music/mp3をユーザに開放するだけ。

[music]
comment = iTunes Server
path = /export/music/mp3
writeable = Yes
readonly = No
browseable = Yes
create mode = 0644
directory mode = 0775

さらにうちの環境では、ログオンスクリプトでMドライブにマッピングしています。

④ iTunes(主PC)の設定変更
まずはローカルにあるライブラリをSambaサーバ上に移行します。iTunesの[編集]→[設定]の[詳細]タブで②でMドライブを割り当てます。

iTunes Musicフォルダは事前に作成が必要?だと思われ。

続いて[詳細]メニューの[ライブラリを統合]でライブラリを全部Sambaサーバにコピーします。
以降このPCで取り込んだCDはすべてSambaサーバ上にコピーされます。

⑤ iTunes(クライアントPC)の設定変更
上記④と同じなんですが、各PC、各ユーザのiTunesに対して[編集]→[設定]→[詳細]のiTunes Musicフォルダの場所をM:iTunes Musicに変更します。
単にサーバ上のライブラリを共有するだけなら必要ないかも。

この記事は役に立ちましたか? | Is this article useful for you?

評価をお願いします | Please leave your rating.

平均 | Av.: 0 / 5. 投票数 | Votes: 0

最初の評価を下さい | Please vote for the first rating.

-Linux Server
-,

© 1999 - 2021 蒲田ネット