玄箱 Vine 2.6 に samba 3 を入れる [Linux]
DLNA サーバの TwonkyMedia 導入により Mac/Win からフォルダ/ファイル名を UTF-8 で手軽に玄箱へコピーする必要に迫られ、 Vine Linux 2.6 の samba 2.0.10 を 3.x にアップグレードする事にした。UTF-8 未対応の samba 2.x では Mac OS X からの日本語フォルダ/ファイルの書き込みにも難が有り、アップグレードは以前にも一度トライしたのだが、結構大変だったので挫折した経緯がある。普通のファイルなら名前を英数字に変えたり rsync 等の smb 共有以外の転送手段を使うことで済ませられるが、メディアコンテンツを取り扱う DLNA のような用途ではかなり不便が伴う為、頑張ってみることに。
【バージョンの選定】
レガシー な Vine 2.6 用の samba 3.x のパッケージなど見当たらない為、ソースからビルドすることになる。いきなり最新版の 3.0.25 から行こうかとも考えたが、ちょっと古めで Mac OS X 10.4.9 でも採用している 3.0.10 を何となく選定。(うまく行けばまたアップデートして行けば良いだろう。)
【修正 libiconv の導入】
samba 3.x が文字コード変換に使う glibc の iconv() には不具合があるらしく、修正した libiconv を別途導入する方が良いとの話をあちこちで見るので、そうすることに。
# curl -OR http://ftp.kddilabs.jp/GNU/libiconv/libiconv-1.10.tar.gz # tar zxf libiconv-1.10.tar.gz # curl -OR http://www2d.biglobe.ne.jp/~msyk/software/libiconv/libiconv-1.10-ja-1.patch.gz # cd libiconv-1.10 # gunzip -c ../libiconv-1.10-ja-1.patch.gz | patch -p1 # ./configure # make ; make check # su # make install # vi /etc/ld.so.conf /usr/local/lib を追加 # ldconfig -v
【Samba 3.0.10 のダウンロード及びビルド設定】
# curl -OR http://us1.samba.org/samba/ftp/old-versions/samba-3.0.10.tar.gz # tar zxf samba-3.0.10.tar.gz # cd samba-3.0.10/packaging/RedHat # vi makerpms.sh 以下3行をコメントアウト(ビルドはせず、spec ファイルの生成だけをさせる為)。
#echo Getting Ready to build release package #cd ${SPECDIR} #${RPM} -ba --clean --rmsource $SPECFILE |
--with-libiconv=/usr/local \ |
これですんなりビルドが通れば苦労は無いのだが、以下の依存パッケージがインストールされていない場合はそれらを逐一入れて行くことになる。
Requires: pam openldap krb5-libs BuildRequires: openldap-devel krb5-devel pam-devel
【依存パッケージのインストール】
# apt-get install pam # apt-get install pam-devel # apt-get install openldap # apt-get install openldap-devel
ここまでは Vine 2.6 に含まれているが、Kerberos認証用ライブラリ krb5 は無いようなのでビルドが必要。
【krb5 のビルドとインストール】
krb5 は Redhat の SRPM があるのでこれを使うことに。Vine 2.6 と glibc のバージョン(2.2.4)が同じ Redhat 7.2 用の krb5-1.2.2-24.src.rpm にしておけばいいかな?という事で:
# cd /usr/src/redhat/SRPMS/ # curl -OR http://ftp.riken.go.jp/Linux/fedoralegacy/redhat/7.2/updates/SRPMS/krb5-1.2.2-24.src.rpm # rpm --rebuild krb5-1.2.2-24.src.rpm e2fsprogs-devel is needed by krb5-1.2.2-24 libtermcap-devel is needed by krb5-1.2.2-24 rsh is needed by krb5-1.2.2-24 texinfo is needed by krb5-1.2.2-24
良くある依存パッケージの依存パッケージが山ほど出るパターンだが、めげずに進める。
# apt-get install e2fsprogs-devel # apt-get install libtermcap-devel # apt-get install rsh # apt-get install texinfo # rpm --rebuild krb5-1.2.2-24.src.rpm /var/tmp/rpm-tmp.62937: libtoolize: command not found # apt-get install libtool # rpm --rebuild krb5-1.2.2-24.src.rpm
何とか apt-get だけでしのげた。以下の4パッケージが生成される:
/usr/src/redhat/RPMS/ppc/krb5-devel-1.2.2-24.ppc.rpm /usr/src/redhat/RPMS/ppc/krb5-libs-1.2.2-24.ppc.rpm /usr/src/redhat/RPMS/ppc/krb5-server-1.2.2-24.ppc.rpm /usr/src/redhat/RPMS/ppc/krb5-workstation-1.2.2-24.ppc.rpm
samba 3 に必要な物だけをインストール。
# rpm -ivh krb5-libs-1.2.2-24.ppc.rpm krb5-libs ################################################## # rpm -ivh krb5-devel-1.2.2-24.ppc.rpm krb5-devel ##################################################
【Samba 3.0.10 のビルド(rpm 作成)】
やっと samba のビルドが出来る環境が整った。
# rpm -bb /usr/src/redhat/SPECS/samba3.spec
待つ事2時間(遅っ)、以下のパッケージ(サイズ22MB)がめでたく完成する。
/usr/src/redhat/RPMS/ppc/samba-3.0.10-1.ppc.rpm
早速インストール。まずは Samba 2.x の削除から。
# service smb stop Shutting down SMB services: [ OK ] Shutting down NMB services: [ OK ] # # rpm -qa | grep samba samba-common-2.0.10_ja_1.2-0vl3.26 samba-client-2.0.10_ja_1.2-0vl3.26 samba-2.0.10_ja_1.2-0vl3.26 # rpm -e samba-client # rpm -e samba # rpm -e samba-common
# rpm -ivh /usr/src/redhat/RPMS/ppc/samba-3.0.10-1.ppc.rpm error: failed dependencies: libiconv.so.2 is needed by samba-3.0.10-1
libiconv は rpm では無く /usr/local に手動で入れてあるので、このエラーだけなら依存関係を無視して強制インストールして良いはず。
# rpm -ivh --nodeps /usr/src/redhat/RPMS/ppc/samba-3.0.10-1.ppc.rpm samba ################################################## Installing stack version of /etc/pam.d/samba...
【設定&起動】
smb.conf の編集、smbpasswd の移動。
# cd /etc/samba # vi smb.conf
[global] dos charset = CP932 unix charset = UTF-8 display charset = CP932 (その他諸々) |
samba 3.0.10 の起動スクリプトは Vine 2.6 と相性が悪く、stop した時に pid ファイルを削除してくれない等の不具合多し。中身を比べた結果さほどやってる事は変わらなさそうなので、以前の samba 2.x の物を編集して使うことにした。
# cd /etc/rc.d/init.d # mv smb smb3 # mv smb.rpmsave smb # vi smb (「/etc/smb.conf 」を 「/etc/samba/smb.conf」 に変更するだけ) # chkconfig --del smb # chkconfig --add smb # chkconfig smb on # service smb start Starting SMB services: [ OK ] Starting NMB services: [ OK ]
(おまけ) ちゃんと修正 libiconv が使われているかどうかをチェックする為、smb.conf で unix charset に EUCJP-MS 等の標準 glibc iconv()には無いコードを指定し、service smb restart してみる。/var/log/samba/log.smbd に何もエラーが出なければOK。
【smbchartool によるフォルダ/ファイル名変換】
samba 2.x で作られた EUC のフォルダ/ファイル名を UTF-8 に一括変換する為に smbchartool + libiconv対応パッチを導入する。最近は convmv がメジャー?のようだが、こっちは perl 5.8 が必須。またもや必死こいて perl 5.8 for Vine 2.6 をビルドするのも疲れるのでやめ。
まずは、Text::iconv モジュールと jcode.pl ライブラリから:
# curl -OR http://ftp.kddilabs.jp/CPAN/modules/by-module/Text/Text-Iconv-1.4.tar.gz # tar zxf Text-Iconv-1.4.tar.gz # cd Text-Iconv-1.4 # perl Makefile.PL LIBS='-L/usr/local/lib' INC='-I/usr/local/include' -liconv # make install # # curl -OR http://www.srekcah.org/jcode/jcode.pl-2.13 # mv jcode.pl-2.13 /usr/local/lib/site_perl/jcode.pl
続いて、smbchartool:
# curl -OR ftp://ftp.samba.gr.jp/pub/samba-jp/tool/smbchartool-2.3a.tar.gz # tar zxf smbchartool-2.3a.tar.gz # curl -OR http://www.miraclelinux.com/technet/samba30/download/smbchartool-2.3a_3.0a.diff.gz # cd smbchartool # gunzip -c ../smbchartool-2.3a_3.0a.diff.gz | patch -p1 # ./INSTALL.sh Where do you want to install? [/usr/local/bin/] Now start install smbcharconv tool to /usr/local/bin/ sure? (y/[n])y Install smbfnconv ... Install capecho ... Install hexecho ... Do you wanto to make symlink like 'euctohex'? (y/[n])n # # smbfnconv -d -f euc -t utf8 共有フォルダのパス (-d で確認モードになっているので、出力を見ながら期待通りの動作が行われることを確認) # smbfnconv -f euc -t utf8 共有フォルダのパス (実際にフォルダ/ファイル名変換が行われる)
【動作確認】
・Mac OS X から日本語フォルダ/ファイル名の読み書き → OK。
・DLNA サーバ TwonkyMedia へ接続したクライアントでの日本語表示 → OK。
玄箱vine2.6にsamba3を入れるのに参考にさせて頂いています。
【Samba 3.0.10 のビルド(rpm 作成)】
において、以下のエラーで止まってしまいました。
libiconvはインストールと動作確認できているのですが、
御教授願えないでしょうか。
よろしくお願いします。
エラー部分
---------------------------------
configure: creating ./config.status
config.status: creating include/stamp-h
config.status: creating Makefile
config.status: creating script/findsmb
config.status: creating smbadduser
config.status: creating script/gen-8bit-gap.sh
config.status: creating include/config.h
+ --with-libiconv=/usr/local
/var/tmp/rpm-tmp.43850: --with-libiconv=/usr/local: そのようなファイルやディレクトリはありません
/var/tmp/rpm-tmp.43850 の不正な終了ステータス (%build)
---------------------------------
SPEC修正部分
---------------------------------
CFLAGS="$RPM_OPT_FLAGS $EXTRA" ./configure \
--prefix=%{prefix} \
--localstatedir=/var \
--with-configdir=/etc/samba \
--with-privatedir=/etc/samba \
--with-fhs \
--with-quotas \
--with-smbmount \
--with-pam \
--with-pam_smbpass \
--with-syslog \
--with-utmp \
--with-sambabook=%{prefix}/share/swat/using_samba \
--with-swatdir=%{prefix}/share/swat \
--with-libsmbclient
--with-libiconv=/usr/local \
make -j${NUMCPU} proto
make -j${NUMCPU} all nsswitch/libnss_wins.so
make -j${NUMCPU} debug2html
---------------------------------
by youfi (2009-02-01 16:38)