SSブログ

玄箱 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
# sh makerpms.sh The RPM Version on this machine is: 3.0.6 RPM build command is "rpm" `samba3.spec' -> `/usr/src/redhat/SPECS/samba3.spec' Done. # vi /usr/src/redhat/SPECS/samba3.spec CFLAGS=以下に次の行を追加
--with-libiconv=/usr/local \
# rpm -bb /usr/src/redhat/SPECS/samba3.spec

これですんなりビルドが通れば苦労は無いのだが、以下の依存パッケージがインストールされていない場合はそれらを逐一入れて行くことになる。

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 (その他諸々)
# mv /etc/smbpasswd /etc/samba/smbpasswd

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。


nice!(0)  コメント(1)  トラックバック(1) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 1

youfi

玄箱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) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。