なんとかTeraStationでMediaTombを動かしたいと思ってねばってみる。
昨日のエラー(/mnt/array1/opt/usr/bin/../lib/gcc-lib/ppc-vine-linux/3.3.6/../../../libm.so: undefined reference to `_rtld_global_ro@GLIBC_PRIVATE')について調べてみると、/lib/ld.so.1と/opt/usr/lib/libm.soのバージョン不整合が問題らしいことがわかった。
ここで一度整理しておくと、
  • /lib には、TeraStationにもともと入っていたファイルが入っている。
  • /opt/lib, /opt/usr/lib, /opt/usr/local/lib には、どこかから持ってきたrpmや、自分でコンパイルしたライブラリが入っている。
  • /opt/usr/lib, /opt/usr/local/lib から、/usr/lib, /usr/local/libにシンボリックリンクを張っている。
  • /lib/ld.so.1はld-2.3.2.so
  • /opt/lib/ld.so.1はld-2.3.4.so
  • /lib/libm.so.6はlibm-2.3.2.so
  • /opt/usr/lib/libm.soはlibm-2.3.4.so
と言う状態。
なので、/opt/usr/lib/libm.soを一度削除し、/lib/libm.so.6へのシンボリックリンクにしてみたところ、configureが進むようになった。
今度は、sqlite3かmysqlが必要だよんと言うエラーになったので、sqlite3を入れてみることに。
sqlite-3.5.4.tar.gz を持ってきて、configure (--prefix=/opt/usr/local --disable-tcl), make。すんなり通・・・らない。
--disable-tclしても、コンパイルするのにtclshを使おうとする。
いい加減TeraStationにtclまで入れるのは嫌だったので、その時点のソースをtarで固めてFreeBSDに持ってきて、
% tclsh tool/mksqlite3c.tcl
を実行して再びTeraStationに持って行き、Makefileの中でsqlite3.cを作っているところをコメントアウトして、先に進む。(ライブラリはできてるっぽいので、コマンドラインがいらないならこの作業は不要かも)
無事に最後まで通ったので、make install。

再びmediatombに戻ってconfigure。
最後の方でいろいろないない言われて気になっていたら、
CONFIGURATION SUMMARY ----

sqlite3       : yes
mysql         : missing
libjs         : missing
libmagic      : missing
inotify       : missing
libexif       : missing
id3lib        : missing
taglib        : missing
libextractor  : disabled
とか言われた。いろいろ入れないと満足に使えないのかな?と思ったけど気にせずmake。
if g++ -DHAVE_CONFIG_H -I. -I. -I.. -I../tombupnp/upnp/inc    -I../src -I../tombupnp/ixml/inc -I../tombupnp/threadutil/inc -I../tombupnp/upnp/inc -I..            -pthread  -g -O2 -MT libmediatomb_a-action_request.o -MD -MP -MF ".deps/libmediatomb_a-action_request.Tpo" -c -o libmediatomb_a-action_request.o `test -f '../src/action_request.cc' || echo './'`../src/action_request.cc; \
then mv -f ".deps/libmediatomb_a-action_request.Tpo" ".deps/libmediatomb_a-action_request.Po"; else rm -f ".deps/libmediatomb_a-action_request.Tpo"; exit 1; fi
In file included from ../src/zmm/zmm.h:37,
                 from ../src/zmmf/zmmf.h:35,
                 from ../src/common.h:42,
                 from ../src/action_request.h:36,
                 from ../src/action_request.cc:36:
../src/zmm/object.h:35:29: new: No such file or directory
なんて言われる。ん~、libstdc++まわりが入ってない?
かなりくじけそうになりつつ、ftp://ftp.kddilabs.jp/pub/Linux/packages/Vine/Vine-4.0/ppc/Vine/pool/ からlibstdc++3-3.3.6-0vl7.ppc.rpm, libstdc++3-devel-3.3.6-0vl7.ppc.rpmを持ってきてrpm2cpioとか使ってインストールする。(rpm2cpio *.rpm | cpio -idvして、必要なファイルだけtarでコピー)
これで、コンパイルは進んだけど、最後のリンクするところでlibiconv絡みでundefined referenceエラー。
原因を調べるのも面倒なので、build/MakefileのLIBSに-liconvを追加したら通った。(→configure時に--enable-iconv-libを付けるのが正しいらしい)
試しに実行してみようとしたら、libiconv.soとlibstdc++.soが見つけられなくてエラーが出る。
設定ファイルの位置も良くわからない。と言うか、FreeBSDであったconfig.xmlとか、rcスクリプトとかはない模様。
かろうじて、/opt/usr/local/share/mediatombにmappings.xmlとか言うファイルがあった。
しょうがないので、FreeBSDのconfig.xmlを元に設定ファイルを作成。
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://mediatomb.cc/0.10.0/config" xmlns:xsi="http://www.w3.org/2
  <server>
    <ui enabled="yes">
      <accounts enabled="yes" session-timeout="30">
        <account user="username" password="password"/>
      </accounts>
    </ui>
    <name>TeraStation</name>
    <home>/opt/var/mediatomb</home>
    <webroot>/opt/usr/local/share/mediatomb/web</webroot>
    <storage driver="sqlite3">
      <database-file>mediatomb.db</database-file>
    </storage>
  </server>
  <import hidden-files="no">
    <filesystem-charset>CP932</filesystem-charset>
    <metadata-charset>CP932</metadata-charset>
    <scripting script-charset="UTF-8">
      <common-script>/opt/usr/local/share/mediatomb/js/common.js</common-script>
      <playlist-script>/opt/usr/local/share/mediatomb/js/playlists.js</playlist-
      <virtual-layout type="builtin">
        <import-script>/opt/usr/local/share/mediatomb/js/import.js</import-scrip
      </virtual-layout>
    </scripting>
    <mappings>
      <extension-mimetype ignore-unknown="no">
        <map from="mp3" to="audio/mpeg"/>
        <map from="ogg" to="application/ogg"/>
        <map from="asf" to="video/x-ms-asf"/>
        <map from="asx" to="video/x-ms-asf"/>
        <map from="wma" to="audio/x-ms-wma"/>
        <map from="wax" to="audio/x-ms-wax"/>
        <map from="wmv" to="video/x-ms-wmv"/>
        <map from="wvx" to="video/x-ms-wvx"/>
        <map from="wm" to="video/x-ms-wm"/>
        <map from="wmx" to="video/x-ms-wmx"/>
        <map from="avi" to="video/avi"/>
        <map from="m3u" to="audio/x-mpegurl"/>
        <map from="pls" to="audio/x-scpls"/>
      </extension-mimetype>
      <mimetype-upnpclass>
        <map from="audio/*" to="object.item.audioItem.musicTrack"/>
        <map from="application/ogg" to="object.item.audioItem.musicTrack"/>
        <map from="video/*" to="object.item.videoItem"/>
        <map from="image/*" to="object.item.imageItem"/>
      </mimetype-upnpclass>
      <mimetype-contenttype>
        <treat mimetype="audio/mpeg" as="mp3"/>
        <treat mimetype="application/ogg" as="ogg"/>
        <treat mimetype="audio/x-flac" as="flac"/>
        <treat mimetype="image/jpeg" as="jpg"/>
        <treat mimetype="audio/x-mpegurl" as="playlist"/>
        <treat mimetype="audio/x-scpls" as="playlist"/>
      </mimetype-contenttype>
    </mappings>
  </import>
</config>
そして、/etc/init.d/mediatombを作成。
#!/bin/bash
#
# Init file for MediaTomb server daemon
#
# chkconfig: 2345 55 25
# description: MediaTomb server daemon
#
# processname: mediatomb
# pidfile: /var/run/mediatomb.pid

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

# pull in sysconfig settings
[ -f /etc/sysconfig/mediatomb ] && . /etc/sysconfig/mediatomb

RETVAL=0
prog="mediatomb"

# Some functions to make the below more readable
MEDIATOMB=/opt/usr/local/bin/mediatomb
PID_FILE=/var/run/mediatomb.pid
OPTIONS="-d -c /opt/usr/local/etc/mediatomb/config.xml -l /opt/var/mediatomb/med
export LD_LIBRARY_PATH=/opt/usr/lib:/opt/usr/local/lib

start()
{
        echo -n $"Starting $prog:"
        initlog -c "$MEDIATOMB $OPTIONS" && success || failure
        RETVAL=$?
        [ "$RETVAL" = 0 ] && touch /var/lock/subsys/mediatomb
        echo
}

stop()
{
        echo -n $"Stopping $prog:"
        killproc $MEDIATOMB -TERM
        RETVAL=$?
        [ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/mediatomb
        echo
}

case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                stop
                start
                ;;
        *)
                echo $"Usage: $0 {start|stop|restart}"
                RETVAL=1
esac
exit $RETVAL
後は、/opt/var/mediatombディレクトリを作成し、/opt/usr/local/etc/mediatomb/config.xmlと/opt/var/mediatombディレクトリをnobodyで書き込み可にして、/etc/init.d/mediatomb startで無事に起動できた。
起動できたけど、今手元にないので動作確認は後ほど。

一応、PS3から見たときのことも。
  • 日本語のフォルダ名、ファイル名は化ける。(filesystem-charsetとか、metadata-charsetとか言う設定項目があるらしいので、直るかも)
    →filesystem-charsetをファイルシステムの文字コードにしたら、web uiでもPS3でも表示できるようになった。
  • divxのaviはPS3で再生できたけど、早送り/巻戻しができない。PS3のせいかMediaTombのせいかは謎。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: MediaTomb(2)

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/1304

コメントする

このブログ記事について

このページは、falseが2007年12月19日 15:29に書いたブログ記事です。

ひとつ前のブログ記事は「MediaTomb」です。

次のブログ記事は「MediaTomb(3)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1