GLAN TANK - 導入編

先週末にGLAN TANK(いわゆる新白箱)を秋葉で購入。
この一週間でやったことをメモ。

一緒に買ったハードディスク

Western DigitalのWD3200JBを二つ。計640GB。
ミラーリングではなく、スパニングモードでインストール。
デフォルトだと、/bootとスワップ以外は一つのパーティションになってしまうのが少し気になるが、早く使いたかったのでとりあえずそのまま。。

Jumbo Frameの設定

事前にネットワークスイッチとクライアントマシンはギガ化してあったので、Jumbo Frameを設定。スイッチが7kまで対応なので、7kに。
とりあえずは、

# ifconfig eth0 mtu 7000

で、設定可。
設定を保存するためには、/etc/network/interfaces の末尾に

up ifconfig eth0 mtu 7000

を追加。

NFSサーバの導入

録画サーバとはLinux同士なのでNFSで結ぶことに。

  • インストール

# apt-get install nfs-common nfs-kernel-server

/etc/exportsに公開ディレクトリを追記。
ほんとはNISなどでクライアント側とuid,gidの同期を取るべきだが、面倒だし、録画サーバからは1ユーザしかアクセスしないので、すべて特定のuid,gidマッピングするように設定。

# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
/share 192.168.1.111(rw,all_squash,anonuid=1001,anongid=1001,async)

  • クライアント(録画サーバ)からmount

バッファサイズをrsize=8192,wsize=8192にすると良いらしい(man nfs)。
Jumbo Frameの値と一緒にチューニングするともっと良いのかも?

mount -o rsize=8192,wsize=8192 192.168.1.222:/share /mnt/glantank

Sambaの導入 apt-get

# apt-get install samba

でSamba 3.0.14aがインストールできた。
自宅でdebianを使うのは初めてだが、apt-getでの一発インストールはやっぱ便利。
以下、設定項目。

  • 日本語対応

EUC-JP-MS対応のglibcが入っていたので、
/etc/samba/smb.confの[global]セクションに

unix charset = EUC-JP-MS

を追加して、日本語対応は完了。

[home]セクションが最初から設定済みなので、特に共有の設定を追加することなくホームディレクトリを共有可。

  • 性能チューニング

sendfileを使うようにするとreadが少し早くなる。

use sendfile = yes

Sambaの導入 最新版3.0.21b

せっかくのNAS専用機なので(?)、Sambaの最新版をインストールしてみた。
3.0.14aより多少性能が良く、バグフィックスもかなり入ってるはず。

  • 開発環境のインストール

とりあえずこの辺を参考に基本的な開発環境をapt-getでインストール。
http://eggplant.ddo.jp/www/pukiwiki/index.php?%B3%AB%C8%AF%B4%C4%B6%AD%20(debian26%C8%C7)

# apt-get install dpkg-dev binutils gcc g++ make libncurses5-dev

あと、他にもSambaのビルドに必要なパッケージがソースアーカイブのpackaging/Debian/README に書かれているので、インストールされていないものはapt-get install。

  • ビルド

# tar xvzf samba-3.0.21b.tar.gz
# cd samba-3.0.21b
# cp -a packaging/Debian/debian-sarge/ debian
# ./debian/rules binary

で、ビルドをはじめると、debianパッチの適用で何箇所かrejectされ、最後のパッケージング段階でもエラーで終わってしまう。changelogのバージョンが3.0.20bのままだったので、パッケージングファイルはそれ以降メンテされていないようだ。
なので、以下のように修正。ついでにkernel oplocksとkernel change notifyとkernel share modeの機能も有効にした。

samba-3.0.21b/packaging/Debian/debian-sargeに対するパッチ。
[追記2/11] samba本家の修正を見てみたら、2/9付けのコミットで直されてました。http://websvn.samba.org/cgi-bin/viewcvs.cgi?rev=13411&view=rev

diff -uNr packaging/Debian/debian-sarge.org/changelog packaging/Debian/debian-sarge/changelog
--- packaging/Debian/debian-sarge.org/changelog	2005-11-10 03:29:06.000000000 +0900
+++ packaging/Debian/debian-sarge/changelog	2006-02-10 19:12:15.049831000 +0900
@@ -1,6 +1,6 @@
-samba (3.0.20b-1) stable; urgency=low
+samba (3.0.21b-1) stable; urgency=low
 
-  * samba 3.0.20b Samba Team Release
+  * samba 3.0.21b Samba Team Release
 
  -- Simo Sorce <idra@samba.org>  Sun, 23 Oct 2005 11:58:30 +0200
 
diff -uNr packaging/Debian/debian-sarge.org/config.cache packaging/Debian/debian-sarge/config.cache
--- packaging/Debian/debian-sarge.org/config.cache	2005-11-10 03:29:04.000000000 +0900
+++ packaging/Debian/debian-sarge/config.cache	2006-02-10 19:10:03.109831000 +0900
@@ -34,9 +34,9 @@
 # These are options which are supported on 2.4 kernels, but not on 2.2
 # kernels.
 
-samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=${samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no}
-samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=${samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no}
-samba_cv_HAVE_KERNEL_SHARE_MODES=${samba_cv_HAVE_KERNEL_SHARE_MODES=no}
+samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=${samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes}
+samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=${samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes}
+samba_cv_HAVE_KERNEL_SHARE_MODES=${samba_cv_HAVE_KERNEL_SHARE_MODES=yes}
 
 
 # These are present in 2.2 kernels, but not in 2.0...
diff -uNr packaging/Debian/debian-sarge.org/patches/VERSION.patch packaging/Debian/debian-sarge/patches/VERSION.patch
--- packaging/Debian/debian-sarge.org/patches/VERSION.patch	2005-11-10 03:29:05.000000000 +0900
+++ packaging/Debian/debian-sarge/patches/VERSION.patch	2006-02-10 19:10:20.789831000 +0900
@@ -1,8 +1,9 @@
 --- samba-3.0.0rc2/source/VERSION.orig	2003-09-02 21:56:11.000000000 -0400
 +++ samba-3.0.0rc2/source/VERSION	2003-09-02 21:56:30.000000000 -0400
-@@ -78,4 +78,4 @@
+@@ -78,5 +78,5 @@
  # e.g. SAMBA_VERSION_VENDOR_SUFFIX=vendor_version()    #
  #  ->  "CVS 3.0.0rc2-VendorVersion"                    #
  ########################################################
 -SAMBA_VERSION_VENDOR_SUFFIX=
 +SAMBA_VERSION_VENDOR_SUFFIX="Debian"
+ SAMBA_VENDOR_PATCH=
diff -uNr packaging/Debian/debian-sarge.org/patches/fhs.patch packaging/Debian/debian-sarge/patches/fhs.patch
--- packaging/Debian/debian-sarge.org/patches/fhs.patch	2005-11-10 03:29:05.000000000 +0900
+++ packaging/Debian/debian-sarge/patches/fhs.patch	2006-02-10 19:10:20.809831000 +0900
@@ -155,9 +155,9 @@
 --- samba-3.0.10.orig/source/lib/account_pol.c	2004-12-17 03:50:08.000000000 -0800
 +++ samba-3.0.10/source/lib/account_pol.c	2004-12-17 03:55:29.000000000 -0800
 @@ -35,7 +35,7 @@
- 
- 	if (tdb)
  		return True;
+	}
+
 -	tdb = tdb_open_log(lock_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
 +	tdb = tdb_open_log(state_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
  	if (!tdb) {
@@ -449,25 +449,29 @@
  	pstrcat(printdb_path, ".tdb");
  
 diff -uNr samba-3.0.20b.orig/source/registry/reg_db.c samba-3.0.20b/source/registry/reg_db.c
---- samba-3.0.20b.orig/source/registry/reg_db.c	2003-07-02 23:26:47.000000000 -0500
-+++ samba-3.0.20b/source/registry/reg_db.c	2003-07-02 23:19:02.000000000 -0500
-@@ -198,13 +198,13 @@
-	if ( tdb_reg )
-		return True;
-
+--- samba-3.0.20b.orig/source/registry/reg_db.c	2005-10-18 11:45:06.000000000 +0900
++++ samba-3.0.20b/source/registry/reg_db.c	2006-02-08 00:44:33.164370000 +0900
+@@ -205,9 +205,9 @@
+ 	if ( tdb_reg )
+ 		return True;
+ 
 -	if ( !(tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600)) )
 +	if ( !(tdb_reg = tdb_open_log(state_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600)) )
-	{
+ 	{
 -		tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
 +		tdb_reg = tdb_open_log(state_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
-		if ( !tdb_reg ) {
-			DEBUG(0,("init_registry: Failed to open registry %s (%s)\n",
--				lock_path("registry.tdb"), strerror(errno) ));
-+				state_path("registry.tdb"), strerror(errno) ));
-			return False;
-		}
-		
-		DEBUG(10,("init_registry: Successfully created registry tdb\n"));
+ 		if ( !tdb_reg ) {
+ 			DEBUG(0,("regdb_init: Failed to open registry %s (%s)\n",
+ 				lock_path("registry.tdb"), strerror(errno) ));
+@@ -252,7 +252,7 @@
+ 	
+ 	become_root();
+ 
+-	tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600);
++	tdb_reg = tdb_open_log(state_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600);
+ 	if ( !tdb_reg ) {
+ 		result = ntstatus_to_werror( map_nt_error_from_unix( errno ) );
+ 		DEBUG(0,("regdb_open: Failed to open %s! (%s)\n", 
 diff -uNr samba-3.0.10.orig/source/rpc_server/srv_srvsvc_nt.c samba-3.0.10/source/rpc_server/srv_srvsvc_nt.c
 --- samba-3.0.10.orig/source/rpc_server/srv_srvsvc_nt.c	2004-12-17 03:50:09.000000000 -0800
 +++ samba-3.0.10/source/rpc_server/srv_srvsvc_nt.c	2004-12-17 03:55:31.000000000 -0800
diff -uNr packaging/Debian/debian-sarge.org/rules packaging/Debian/debian-sarge/rules
--- packaging/Debian/debian-sarge.org/rules	2005-11-10 03:29:04.000000000 +0900
+++ packaging/Debian/debian-sarge/rules	2006-02-10 19:11:22.549831000 +0900
@@ -229,7 +229,7 @@
 
 	# The smbwrapper package is not being generated anymore, so we must
 	#	delete the related man pages.
-	rm $(DESTDIR)/usr/share/man/man1/smbsh.1
+	#rm $(DESTDIR)/usr/share/man/man1/smbsh.1
 
 	# We're not providing findsmb (should we?) so let's remove the man
 	#	pages.