minidlnaでの文字化けとパッケージの再構築 (Raspbian jessie)

  • 4
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

minidlnaのディレクトリ表示が文字化けする(Raspbian jessie)

環境

  • raspberry pi 1 Model B
  • Raspbian GNU/Linux 8 (jessie)
  • minidlna 1.1.2+dfsg-1.1

(2016/02/17現在)

現象

raspberry pi を Raspbian でOS起動。minidlna をインストールしてDLNAサーバを立ち上げ。DLNAクライアントから接続したところ、ディレクトリ名が "?????" のように文字化け表示されており、共有したメディアのファイルなどは表示されない状態となってしまう。
ちなみに、サーバ上のメディアファイルのファイル名はUTF-8の日本語混じりのもの。

DLNAサーバにアクセスはできても、文字が化けたままでメディアファイルの再生もできないので、minidlnaでのフォルダの文字化けを対策したい。

対処方法

minidlnaを"--disable-nls" オプションを有効にしてビルドすることで文字化けは解消された。

今回は、debパッケージの再構築を用いて、"--disable-nls" オプションを有効にしたminidlnaをビルド、debパッケージを再構築・インストールして、文字化けを回避しました。以下ではconfigureオプションを追加してdebパッケージを再構築する方法として手順にします。

参考

minidlnaの設定ファイルでは、文字コードやロケールなどに関する指示子は見つからなかった。

ネット上では同様の事例や対処方法が確認できた。以下は、minidlnaのキャッシュデータベースを明示的に削除し、minidlnaを起動する際に再作成させるというもの。残念ながら、今回の自分の使用環境では文字化けを回避するには至らなかった。

# /etc/init.d/minidlna stop
Stopping minidlna (via systemctl): minidlna.service.
# rm /var/cache/minidlna/files.db
# /etc/init.d/minidlna start

minidlna パッケージの再構築

minidlnaがビルド時に "--disable-nls" が設定されていないため、文字化けが発生している可能性を指摘する情報を見つけました。minidlnaのdebパッケージソースを取得して、configureオプションを調整してパッケージをビルドしなおします。ここではraspberry pi上でビルドします。

注意

以下では単純にminidlnaのdebパッケージを再ビルドのみ行っています。
debパッケージ管理時のバージョン管理やchanglog更新などについては考慮していないので、より適切にdebパッケージを構築管理したい方は補足して確認してみてください。

debファイル構築関連パッケージのインストール

debパッケージ構築用パッケージのインストール

sudo apt-get install dpkg-dev devscripts

minidlnaソースファイルのダウンロード

deb構築用ソースファイルをダウンロードできるよう、sources.listのdeb-src 行のコメントを外す。

  • /etc/apt/sources.list
/etc/apt/sources.list
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi

ソースのダウンロード。 apt-get sourceを実施すると、カレントディレクトリに関連ファイルがダウンロードされる。

mkdir ~/minidlna
cd ~/minidlna
sudo apt-get update
sudo apt-get source minidlna

パッケージビルド時のconfigureオプション設定修正

目的のパッケージビルド時のconfigureオプション設定を修正する。

ダウンロード直後は以下のようなファイルやディレクトリが存在している。

raspberrypi:~/minidlna $ ls -l
合計 484
drwxr-xr-x 10 root root   4096  2月 17 03:53 minidlna-1.1.2+dfsg
-rw-r--r--  1 root root  25924  2月 17 03:44 minidlna_1.1.2+dfsg-1.1.debian.tar.xz
-rw-r--r--  1 root root   1161  2月 17 03:44 minidlna_1.1.2+dfsg-1.1.dsc
-rw-r--r--  1 root root 302068  5月  9  2014 minidlna_1.1.2+dfsg.orig.tar.xz
raspberrypi:~/minidlna $ 

パッケージビルド時のconifgureオプションの修正は、以下のrulesファイルを修正する。
修正方法はいくつかパターンがあるが、今回のminidlnaでは簡単に以下のように修正した。

  • minidlna-1.1.2+dfsg/debian/rules

修正前

minidlna-1.1.2+dfsg/debian/rules
...
override_dh_auto_configure:
    ./configure --prefix=$(PREFIX) --sbindir=$(PREFIX)/bin
...

修正後(configure行に --disable-nls を追加)

minidlna-1.1.2+dfsg/debian/rules
...
override_dh_auto_configure:
    ./configure --prefix=$(PREFIX) --sbindir=$(PREFIX)/bin --disable-nls
...

不足依存パッケージの確認、インストール

minidlnaのビルドに必要な、依存性のある関連devパッケージをチェック。
dpkg-checkbuilddepsコマンドで出力されたパッケージをインストールする。

sudo dpkg-checkbuilddeps
sudo aptitude install <package names>

パッケージのビルド

sudo debuild -us -uc -d

実行ログ。configureオプションの反映状態について確認。

...
raspberrypi:~/minidlna/minidlna-1.1.2+dfsg $ sudo debuild -us -uc -d
 dpkg-buildpackage -rfakeroot -d -us -uc
dpkg-buildpackage: warning: using a gain-root-command while being root
dpkg-buildpackage: source package minidlna
dpkg-buildpackage: source version 1.1.2+dfsg-1.1
dpkg-buildpackage: source distribution unstable
dpkg-buildpackage: source changed by Anibal Monsalve Salazar <anibal@debian.org>
 dpkg-source --before-build minidlna-1.1.2+dfsg
dpkg-buildpackage: host architecture armhf
 fakeroot debian/rules clean
dh clean --with autoreconf
   dh_testdir
   dh_auto_clean
   dh_autoreconf_clean
   dh_clean
 dpkg-source -b minidlna-1.1.2+dfsg
 ....
 ...
 akefile.am:24: but option 'subdir-objects' is disabled
Makefile.am:24: warning: source file 'tagutils/tagutils.c' is in a subdirectory,
Makefile.am:24: but option 'subdir-objects' is disabled
   debian/rules override_dh_auto_configure
make[1]: Entering directory '/home/hooboo/minidlna/minidlna-1.1.2+dfsg'
./configure --prefix=/usr --sbindir=/usr/bin --disable-nls
checking build system type... armv6l-unknown-linux-gnueabihf
checking host system type... armv6l-unknown-linux-gnueabihf
checking target system type... armv6l-unknown-linux-gnueabihf
...

./configure --prefix=/usr --sbindir=/usr/bin --disable-nls

configureオプションに --disable-nls が反映されている。

...
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for shared library run path origin... done
checking for iconv... yes
checking for working iconv... yes
checking for iconv declaration...
         extern size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
checking whether NLS is requested... no
checking for msgfmt... /usr/bin/msgfmt
checking for gmsgfmt... /usr/bin/msgfmt
checking for xgettext... /usr/bin/xgettext
...

checking whether NLS is requested... no

NLS が noになっている。NLS無効化が反映されている。

ビルドが継続し、完了します。

パッケージの確認とインストール

ソースファイルをダウンロードしたディレクトリに、debパッケージが生成されています。

  • minidlna_1.1.2+dfsg-1.1_armhf.deb
raspberrypi:~/minidlna $ ls -l
合計 484
drwxr-xr-x 10 root root   4096  2月 17 03:53 minidlna-1.1.2+dfsg
-rw-r--r--  1 root root  25924  2月 17 03:44 minidlna_1.1.2+dfsg-1.1.debian.tar.xz
-rw-r--r--  1 root root   1161  2月 17 03:44 minidlna_1.1.2+dfsg-1.1.dsc
-rw-r--r--  1 root root  21530  2月 17 03:56 minidlna_1.1.2+dfsg-1.1_armhf.build
-rw-r--r--  1 root root   1462  2月 17 03:54 minidlna_1.1.2+dfsg-1.1_armhf.changes
-rw-r--r--  1 root root 119066  2月 17 03:54 minidlna_1.1.2+dfsg-1.1_armhf.deb
-rw-r--r--  1 root root 302068  5月  9  2014 minidlna_1.1.2+dfsg.orig.tar.xz
raspberrypi:~/minidlna $

パッケージをインストール。
併せてminidlnaのDBを明示的に削除してminidlnaを起動し直します。

sudo dpkg -i minidlna_1.1.2+dfsg-1.1_armhf.deb
sudo /etc/init.d/minidlna stop
sudo rm /var/cache/minidlna/files.db
sudo /etc/init.d/minidlna start

再度DLNAクライアントからアクセスして確認。文字化けは解消されました。

参考

minidlnaと文字化け

debパッケージの再構築