ソースからminiDLNAのコンパイルを試みる

昨日どうするか調べると書いたminiDLNAのコンパイルに挑戦したいと思います。

ソースファイルは、Source Forgeのここ(URL:http://sourceforge.net/projects/minidlna/develop)にソースファイルの取り出し方が書いてありましたので、それに従います。
その前に、cvsがSheevaPlug+にはないようでしたので、apt-getでインストールしました。
$ sudo apt-get install cvs

cvsの使い方がよくわかりませんが、まず、/var/cvsディレクトリを作成しました。
$ sudo mkdir /var/cvs
で、作成し、そのディレクトリに移動して、
$ sudo cvs -d:pserver:anonymous@minidlna.cvs.sourceforge.net:/cvsrooot/minidlna login
password入力を促されます。ここで悩みましたが、結局何も入力せず、リターンでOKみたいでした。

$ sudo cvs -z3 -d:pserver:anonymous@minidlna.cvs.sourceforge.net:/cvsroot/minidlna co -P minidlna
このコマンドの最後の部分は、modulenameを入れるということなのですが、具体的にに何を指定するのかはっきり記載されておらず、最初は*を入れてみたりしました。最終的にえいやと、minidlnaを入力したら、ダウンロード(チェックアウト)が始まりました。少し長くなりますが、ログを示しておきます。
cvs checkout: Updating minidlna
U minidlna/INSTALL
U minidlna/LICENCE
U minidlna/LICENCE.miniupnpd
U minidlna/Makefile
U minidlna/README
U minidlna/TODO
U minidlna/albumart.c
U minidlna/albumart.h
U minidlna/daemonize.c
U minidlna/daemonize.h
U minidlna/genconfig.sh
U minidlna/getifaddr.c
U minidlna/getifaddr.h
U minidlna/icons.c
U minidlna/image_utils.c
U minidlna/image_utils.h
U minidlna/inotify.c
U minidlna/inotify.h
U minidlna/log.c
U minidlna/log.h
U minidlna/metadata.c
U minidlna/metadata.h
U minidlna/minidlna.c
U minidlna/minidlna.conf
U minidlna/minidlnapath.h
U minidlna/minidlnatypes.h
U minidlna/minissdp.c
U minidlna/minissdp.h
U minidlna/minixml.c
U minidlna/minixml.h
U minidlna/options.c
U minidlna/options.h
U minidlna/playlist.c
U minidlna/playlist.h
U minidlna/scanner.c
U minidlna/scanner.h
U minidlna/sql.c
U minidlna/sql.h
U minidlna/testupnpdescgen.c
U minidlna/tivo_beacon.c
U minidlna/tivo_beacon.h
U minidlna/tivo_commands.c
U minidlna/tivo_commands.h
U minidlna/tivo_utils.c
U minidlna/tivo_utils.h
U minidlna/upnpdescgen.c
U minidlna/upnpdescgen.h
U minidlna/upnpdescstrings.h
U minidlna/upnpevents.c
U minidlna/upnpevents.h
U minidlna/upnpglobalvars.c
U minidlna/upnpglobalvars.h
U minidlna/upnphttp.c
U minidlna/upnphttp.h
U minidlna/upnpreplyparse.c
U minidlna/upnpreplyparse.h
U minidlna/upnpsoap.c
U minidlna/upnpsoap.h
U minidlna/utils.c
U minidlna/utils.h
U minidlna/uuid.c
U minidlna/uuid.h
cvs checkout: Updating minidlna/linux
U minidlna/linux/inotify-syscalls.h
U minidlna/linux/inotify.h
U minidlna/linux/minidlna.init.d.script
cvs checkout: Updating minidlna/tagutils
U minidlna/tagutils/misc.c
U minidlna/tagutils/misc.h
U minidlna/tagutils/tagutils-aac.c
U minidlna/tagutils/tagutils-aac.h
U minidlna/tagutils/tagutils-asf.c
U minidlna/tagutils/tagutils-asf.h
U minidlna/tagutils/tagutils-flc.c
U minidlna/tagutils/tagutils-flc.h
U minidlna/tagutils/tagutils-misc.c
U minidlna/tagutils/tagutils-mp3.c
U minidlna/tagutils/tagutils-mp3.h
U minidlna/tagutils/tagutils-ogg.c
U minidlna/tagutils/tagutils-ogg.h
U minidlna/tagutils/tagutils-pcm.c
U minidlna/tagutils/tagutils-pcm.h
U minidlna/tagutils/tagutils-plist.c
U minidlna/tagutils/tagutils-wav.c
U minidlna/tagutils/tagutils-wav.h
U minidlna/tagutils/tagutils.c
U minidlna/tagutils/tagutils.h
U minidlna/tagutils/textutils.c
U minidlna/tagutils/textutils.h
/var/cvs/の下に、minidlnaというディレクトリができていました。
Makefileとか、INSTALLをのぞいてみます。INSTALLには、必要なライブラリが記載されています。そして、Buildする方法、これは単にmakeだけと書かれていました。

SheevaPlug+にどんなライブラリが入っているか調べること、どうインストールするか調べないといけませんね。

ところで、make自体もSheevaPlug+には、入っていませんでした。
開発環境が必要ですね。Makefileを見ると、makeと、gccは必要そうです。INSTALLには、以下の8つのライブラリが必要と書いてあります。
- libexif
- libjpeg
- sqlite3
- libavformat (the ffmpeg libraries)
- libid3tag
- libFLAC
- libvorbis
- libuuid

まずは、makeとgccをインストールしてしまいます。
$ sudo apt-get install make gcc
[sudo] password for user:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
binutils gcc-4.3 libc6 libc6-dev libgomp1 linux-libc-dev
提案パッケージ:
binutils-doc gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb
gcc-doc libmudflap0-4.3-dev gcc-4.3-doc gcc-4.3-locales libgcc1-dbg libgomp1-dbg
libmudflap0-dbg glibc-doc make-doc
以下のパッケージが新たにインストールされます:
binutils gcc gcc-4.3 libc6-dev libgomp1 linux-libc-dev make
以下のパッケージはアップグレードされます:
libc6
アップグレード: 1 個、新規インストール: 7 個、削除: 0 個、保留: 92 個。
10.3MB のアーカイブを取得する必要があります。
この操作後に追加で 24.7MB のディスク容量が消費されます。
続行しますか [Y/n]? y     ←yを入力
取得:1 http://ports.ubuntu.com jaunty/main libc6 2.9-4ubuntu6 [4848kB]
取得:2 http://ports.ubuntu.com jaunty/main binutils 2.19.1-0ubuntu3 [1410kB]
取得:3 http://ports.ubuntu.com jaunty/main libgomp1 4.3.3-5ubuntu4 [15.1kB]
取得:4 http://ports.ubuntu.com jaunty/main gcc-4.3 4.3.3-5ubuntu4 [659kB]
取得:5 http://ports.ubuntu.com jaunty/main gcc 4:4.3.3-1ubuntu1 [5126B]
取得:6 http://ports.ubuntu.com jaunty/main linux-libc-dev 2.6.28-11.42 [753kB]
取得:7 http://ports.ubuntu.com jaunty/main libc6-dev 2.9-4ubuntu6 [2484kB]
取得:8 http://ports.ubuntu.com jaunty/main make 3.81-5 [156kB]
10.3MB を 18s で取得しました (565kB/s)
パッケージを事前設定しています ...
(データベースを読み込んでいます ... 現在 15309 個のファイルとディレクトリがインストールさ れています。)
libc6 2.9-0ubuntu7 を (.../libc6_2.9-4ubuntu6_armel.deb で) 置換するための準備をしています ...
Checking for services that may need to be restarted...
Checking init scripts...
libc6 を展開し、置換しています...
古いパッケージ belocs-locales-bin 中のファイルを置換しています ...
libc6 (2.9-4ubuntu6) を設定しています ...
Checking for services that may need to be restarted...
Checking init scripts...
いつものようにインストールが完了すると思っていたら、画面が突然切り替わりました。
画像

読んでみると、lib6がアップデートされ、その中で、NSSとかいうプログラムを使っていたsambaとcronが再起動必要ということのようです。ここでリターンを押すと、自動的にリスタートとなり、問題なかった(restarted successfully.)ようです。とても親切設計ですね。

binutils gcc-4.3 libc6 libc6-dev libgomp1 linux-libc-dev
提案パッケージ:
binutils-doc gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb
gcc-doc libmudflap0-4.3-dev gcc-4.3-doc gcc-4.3-locales libgcc1-dbg libgomp1-dbg
libmudflap0-dbg glibc-doc make-doc
以下のパッケージが新たにインストールされます:
binutils gcc gcc-4.3 libc6-dev libgomp1 linux-libc-dev make
以下のパッケージはアップグレードされます:
libc6
アップグレード: 1 個、新規インストール: 7 個、削除: 0 個、保留: 92 個。
10.3MB のアーカイブを取得する必要があります。
この操作後に追加で 24.7MB のディスク容量が消費されます。
続行しますか [Y/n]? y     ←yを入力
取得:1 http://ports.ubuntu.com jaunty/main libc6 2.9-4ubuntu6 [4848kB]
取得:2 http://ports.ubuntu.com jaunty/main binutils 2.19.1-0ubuntu3 [1410kB]
取得:3 http://ports.ubuntu.com jaunty/main libgomp1 4.3.3-5ubuntu4 [15.1kB]
取得:4 http://ports.ubuntu.com jaunty/main gcc-4.3 4.3.3-5ubuntu4 [659kB]
取得:5 http://ports.ubuntu.com jaunty/main gcc 4:4.3.3-1ubuntu1 [5126B]
取得:6 http://ports.ubuntu.com jaunty/main linux-libc-dev 2.6.28-11.42 [753kB]
取得:7 http://ports.ubuntu.com jaunty/main libc6-dev 2.9-4ubuntu6 [2484kB]
取得:8 http://ports.ubuntu.com jaunty/main make 3.81-5 [156kB]
10.3MB を 18s で取得しました (565kB/s)
パッケージを事前設定しています ...
(データベースを読み込んでいます ... 現在 15309 個のファイルとディレクトリがインストールさ れています。)
libc6 2.9-0ubuntu7 を (.../libc6_2.9-4ubuntu6_armel.deb で) 置換するための準備をしています ...
Checking for services that may need to be restarted...
Checking init scripts...
libc6 を展開し、置換しています...
古いパッケージ belocs-locales-bin 中のファイルを置換しています ...
libc6 (2.9-4ubuntu6) を設定しています ...
Checking for services that may need to be restarted...
Checking init scripts...

Restarting services possibly affected by the upgrade:
samba: stopping...starting...done.
cron: stopping...starting...done.

Services restarted successfully.           ←ちゃんとリスタートできたようです。

libc6 のトリガを処理しています ...
ldconfig deferred processing now taking place
未選択パッケージ binutils を選択しています。
(データベースを読み込んでいます ... 現在 15309 個のファイルとディレクトリがインストールさ れています。)
(.../binutils_2.19.1-0ubuntu3_armel.deb から) binutils を展開しています...
未選択パッケージ libgomp1 を選択しています。
(.../libgomp1_4.3.3-5ubuntu4_armel.deb から) libgomp1 を展開しています...
未選択パッケージ gcc-4.3 を選択しています。
(.../gcc-4.3_4.3.3-5ubuntu4_armel.deb から) gcc-4.3 を展開しています...
未選択パッケージ gcc を選択しています。
(.../gcc_4%3a4.3.3-1ubuntu1_armel.deb から) gcc を展開しています...
未選択パッケージ linux-libc-dev を選択しています。
(.../linux-libc-dev_2.6.28-11.42_armel.deb から) linux-libc-dev を展開しています...
未選択パッケージ libc6-dev を選択しています。
(.../libc6-dev_2.9-4ubuntu6_armel.deb から) libc6-dev を展開しています...
未選択パッケージ make を選択しています。
(.../archives/make_3.81-5_armel.deb から) make を展開しています...
binutils (2.19.1-0ubuntu3) を設定しています ...

libgomp1 (4.3.3-5ubuntu4) を設定しています ...

gcc-4.3 (4.3.3-5ubuntu4) を設定しています ...
gcc (4:4.3.3-1ubuntu1) を設定しています ...

linux-libc-dev (2.6.28-11.42) を設定しています ...
libc6-dev (2.9-4ubuntu6) を設定しています ...
make (3.81-5) を設定しています ...
libc6 のトリガを処理しています ...
ldconfig deferred processing now taking place

これで、とりあえず、makeとgccはインストールされました。
試しにsudo makeしてみると、当たり前ですが、例のライブラリがないとエラーが出て止まりました。

ライブラリのインストールをしないといけません。ライブラリは、必要な名称に-devをつけるみたいですが、そうでないものもあるようで、検索して調べるのが良いようです。
$ sudo apt-cache search libexif
とすると、パッケージを検索してくれるようです。
libexif-dev - library to parse EXIF files (development files)
libexif12 - library to parse EXIF files
libexif-gtk-dev - Library providing GTK+ widgets to display/edit EXIF tags (development files)
libexif-gtk5 - Library providing GTK+ widgets to display/edit EXIF tags
libexif-ruby - EXIF tag parsing Library for ruby (dummy package)
libexif-ruby1.8 - EXIF tag parsing Library for ruby1.8
libexif-ruby1.9 - EXIF tag parsing Library for ruby1.8
どうも、-devが付いたものが対象のものらしいですので、試しに1つだけインストールしてみます。既にインストールされているかどうかはapt-getが判断してくれているようなので、調べずに任せます。
$ sudo apt-get install libexif-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
libexif-dev
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 92 個。
159kB のアーカイブを取得する必要があります。
この操作後に追加で 815kB のディスク容量が消費されます。
取得:1 http://ports.ubuntu.com jaunty/main libexif-dev 0.6.16-2.1ubuntu1 [159kB]
159kB を 2s で取得しました (67.1kB/s)
未選択パッケージ libexif-dev を選択しています。
(データベースを読み込んでいます ... 現在 16568 個のファイルとディレクトリがインストールさ れています。)
(.../libexif-dev_0.6.16-2.1ubuntu1_armel.deb から) libexif-dev を展開しています...
libexif-dev (0.6.16-2.1ubuntu1) を設定しています ...

この時、特にインストールするかどうか聞かれませんでしたが、問題はなかったようです。残りのライブラリも一気にインストールしてしまいましょう。と思ってやりましたが、libid3tagが見つからないというエラーが出て、止まってしまったので、1個ずつやりました。

結局、libid3tagとlibuuidのライブラリは、パッケージが見つからないというエラーが出てしまいました。apt-cache searchで調べてみると、少し違う名前になっています。
それらしい、libid3tag0-devとuuid-devをインストールしました。
最後に残したsqlite3もパッケージを調べると、これは、たくさん出てきますが、やはりそれらしいlibsqlite3-devをインストールしました。

さて、ようやく全ての用意ができたはずですので、sudo makeを実行してみます。
warningはいっぱいでましたが、コンパイルできたようです。最後の部分だけ表示しておきます。
$ sudo make

   (途中省略)

Linking minidlna
Compiling testupnpdescgen.c
Linking testupnpdescgen
実行ファイルとして、minidlnaとtestupnpdescgenができあがったようです。
でも、sudo make installとしないと正しい場所に格納されないようです。(ネット情報&Makefileの記述) これで、minidlnaが/usr/sbin下に格納され、/etc下にminidlna.confが格納されます。

daemon起動スクリプトが、cvsで取り込んだディレクトリ内のlinux下にあります。(私は最初どこにlinuxがあるのかとあせりました)
私の場合、先人にならって、/var/cvs/minidlna/linux/minidlna.init.d.scriptを/etc/init.dの下にminidlnaというファイル名でコピーしました。もちろん、sudoで。

さて、最後に、設定です。先人の情報を元に、/etc/minidlna.confを書き換えます。ファイル内にも書き方が書いてありましたね。これに準じて記述します。
# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music)
# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos)
# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
miniDLNAは、8200ポートを使っているようです。

さて、いよいよ起動します。
$ sudo /etc/init.d/minidlna start
sudo: /etc/init.d/minidlna: command not found
あれ、起動失敗。実行パーミッションが付いていませんでした。
再起動開始、
$ sudo /etc/init.d/minidlna start
* Starting minidlna minidlna Media directory not accessible! [/media/sdmemory/DCIM]
[ OK ]
ああ、ディレクトリ指定をミスった。あせらない、あせらない。修正して、
$ sudo /etc/init.d/minidlna restart
* Restarting minidlna minidlna [ OK ]
やりました。起動成功です。続いてBraviaから接続、「SheevaPlug: root 成功」と表示されました。やったー。
長くなったので、今日はここまでとします。

この記事へのコメント

この記事へのトラックバック