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

# 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コマンドで出力されたパッケージをインストールする。

* **以降の作業は、展開したdebパッケージのソースディレクトリ(今回は"minidlna-1.1.2+dfsg/")配下で実施します。**

```
cd minidlna-1.1.2+dfsg/
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と文字化け

- DLNAサーバーのフォルダ表示について - 挑戦者BBS http://bbs.ioplaza.jp/forum/index.php?topic_id=2726
- sakurapup.browserloadofcoolness.com • トピック - MiniDLNA media server http://sakurapup.browserloadofcoolness.com/viewtopic.php?p=15025&sid=c8a8249884f5e388bc5aa0b4399de330

debパッケージの再構築

- deb パッケージの再構築方法 http://espion.just-size.jp/archives/03/058092847.html
- 辻野智紀の個人ページ: debian パッケージの作成方法 http://www.rain.hyarc.nagoya-u.ac.jp/~satoki/main/Linux/configure/make_deb.html
- Debian パッケージ作成法 http://iishikawa.s371.xrea.com/note/debian-package
- 第6章 パッケージのビルド https://www.debian.org/doc/manuals/maint-guide/build.ja.html
- Rules – Debathena https://debathena.mit.edu/trac/wiki/Rules