高性能1FDデータサーバーの構築(第2報)

西村 良弘 奥田 斂 永井 英幹

2000年2月1日 

counter

はじめに

これは、前報で述べた1FD-SAMBAの改良版です。

 SAMBAで暗号によるユーザ認証を行えるように、いくつかのファイルを追加しました。

 また、SYSLOGDと連携してlogをはくことが出来るようにSAMBAを再コンパイルしました。

 しかしSYSLOGについては時間が無くまだ試していません。IDEのディスクも使えるようにwdをカーネルに追加しました。

私のところでは、外付けのRAIDディスク50GBをつけて動いていますが、IDEのディスクのミラーコントローラなどをつけると安くファイルサーバーが構築できることでしょう。

特徴

前報と基本的に同じですが、

  1. フロッピー1枚でPCがSAMBAのサーバになる。ローカルHDDがあればそれを共有できる。

  2. i486からi686まで動く。I386では試せるPCが無いだけ。

  3. システムのコピーが簡単、fdだから当然。障害時の復旧や立ち上げ時間が短い。

  4. FreeBSDで使えるNICは全て使える。

     

  5. syslogにlogをはけるはず。

     

  6. 98/NTでサポートされた暗号によるパスワード認証が使える

     

本フロッピーの構成

前報と同様で特に変っていません。ユーザのパスワード認証のため/usr/local/samba/libの下にファイルが増えました。

### /bin

BIN = cat chmod cp df echo hostname kill ln ls \

mkdir mv pwd rm sh sleep stty sync test ps smbd nmbd smbclient

BIN_LK = [ -sh -u

### /sbin

SBIN = clri fsck ifconfig init mount \

newfs ping reboot route umount dset dhcpc \

# gated ripquery ospf_monitor gdc

SBIN_LK = halt mount_mfs

### /usr/bin

USRBIN = passwd login uname more bad144 gzip # netstat

USRBIN_LK = gunzip zcat

### /usr/sbin

USRSBIN = chown inetd traceroute sysctl syslogd

#以後のコマンドは今つかえなくなっています。

改良版1FD-SAMBAフロッピーの作り方

1)雛型起動フロッピーの作り方

ファイル名はsamba1.flpです。これから3.5インチブートフロッピーを作ります。

以下、前報と全く同様です。

dosマシンで作るなら

c>ren samba1.flp boot.flp

c>fdimage boot.flp a:

としてブートフロッピーを作ります。

freebsdマシンで作るなら

#dd if=samba1.flp of=/dev/fd0

で出来あがりです。

2)自分の環境に合わせるためファイルを設定する

雛型FDはIntel EEP100B(+)1枚とAHA2940またはNCR53c810またはIDEコントローラー(wdc)を装着したPCでSAMBAのサーバーを実現します。ホスト名はcmttt2になっています。NICの数は自由に増やせますし、NIC自身も自由に変更可能ですが、その場合はkernelの再構築が必要になります。ファイル共有されるディスクはSCSIまたはIDEのものです。

NICの変更さえなければ、それ以外の変更に必要な設定ファイルは全て、/etcの中にあります。1)で作成したフロッピーをFreeBSDマシンに入れて編集したほうが簡単です、(私の環境がそうなだけ)

とにかく、以下のように編集します。

#mount /dev/fd0 /mnt

#vi /mnt/etc/rc

.

.

.

#umount /mnt

の様に編集してください。変更すべきファイル、

rc, smb.conf resolv.conf, syslog.conf, host, fstab

rcの中身は以下のようになっています。

#!/bin/sh

PATH=/sbin:/bin:/usr/bin:/usr/sbin

export PATH

mount_mfs -s 720 -c 1 -m 0 /dev/fd0.1440 /var

mkdir /var/tmp

chmod 1755 /var/tmp

mkdir /var/locks /var/spool /var/run /var/db /var/log /var/spool/lock /var/spool

/uucp

hostname cmttt2.nimc.go.jp<--------1.PCのホスト名

ifconfig fxp0 150.29.144.26 netmask 255.255.254.0 broadcast 255.255.255.255<---2.PCのIP設定

# /sbin/dhcpc fxp0<------3.多分DHCPでも動くのだろうが、まだちゃんと試していない。

# sleep 20<-------4.DHCPを使う場合は必要かも知れない

ifconfig lo0 127.0.0.1

mount -a -t nonfs

echo "Starting inetd"

/usr/sbin/inetd

NICを変更したり、アドレスを変更する場合は2,3を変更する必要がります。(NICが変ったらkernelも再構築しなければなりません)

Fstabの中身は以下のようになっています。

/dev/fd0cはフロッピーディスクですが、これは変更する必要ありません。/dev/sd0s1はSCSIのHDDです。HDDを増設したり、IDEである場合には、それにあわせてこのファイルを変更する必要があります。

# /dev/sd0s1b none sap sw 0 0

/dev/fd0c / ufs rw 1 1

/dev/sd0s1 /mnt ufs rw 2 2

SAMBAの通常の使用法で最も重要な設定ファイル:smb.confです。機能が豊富ですので、専門書籍をご覧ください。

[global]

workgroup = nimc<----1.自分のワークグループ名にしてください

security = user<-----2.ユーザー毎の認証を行います. 

encrypt passwords = yes<-----3.パスワードを暗号化する 

wins server = 150.29.144.64<-----4.WINSサーバがあればそのアドレス 

client code page = 932

coding system = euc

[public]

path = /tmp<---------5.共有させたいディレクトリ

public = yes

writable = yes

browseable = yes

guest only = yes

guest account = root<---------6.passwdファイルの中のroot権限で読み書きする

[homes]<---------7.ユーザー毎のホームディレクトリをpasswdファイルの中の各ユーザに公開します

public = no

writable = yes

browseable = no

hostファイルには自分のエントリーが必要です。DHCPCを使った場合どうなるか分かりませんがまだ成功していません。

150.29.154.90 cmh2

150.29.144.26 cmttt2 cmttt2.nimc.go.jp

resolv.confは設定してもしなくてもかまいませんが、sambaサーバにログインして、そこからドメインネームを引きたい場合に使用します。

domain nimc.go.jp<----変更してください

nameserver 150.29.144.64<−−−変更してください

syslog.confは、ログが必要な人は設定してください。その場合ログを受けるサーバーが別途必要になります。

 

3)さてブートし、立ち上がったところでルートでログインし、sambaで共有させたいディスクを/mntにmountします。

samba1.flpの中では、例としてユーザーtestuserが登録されています。グループはuser、パスワードはtest1test1、ホームディレクトリは/mnt/testuserです.

このユーザーのホームディレクトリを作成します。

# mkdir /mnt/testuser

# chown testuser.user /mnt/testuser

次にSAMBAを起動します。

#/bin/smbd -D -s /etc/smb.conf

#/bin/nmbd -D -s /etc/smb.conf

4)Windows98などで、このtestuserのアカウントを作って、再ログインしてください。

WIN95/98/NTのネットワークコンピュータからうまく見えたら、成功です。共有名publicと共有名testuserが見えるはずです。

5)SAMBAを自動的に起動したければ/etc/rcに追加するだけです。

ユーザ登録の仕方

2段階に分かれています。UNIXへのユーザー登録とSAMBAへのユーザー登録です.

1)UNIXへのユーザ登録

UNIXマシンに1fd-SAMBAのフロッピーをmountしてviによりユーザーとグループの追加を行います。

# vi /etc/master.passwd

testuser::5002:500::0:0:Mr.test:/mnt/testuser:/bin/sh を追加する。

# vi /etc/passwd

testuser:*:5002:500:Mr.test:/mnt/testuser:/bin/sh を追加する

これは、1fd-SAMBAでブートしてもechoを使っても出来ます。

さらに

# vi /etc/group

user:*:500:

としてグループを追加します。

ここから先は、1FD-SAMBAからブートして行います。

フロッピーの容量がほとんど無いのでかなりトリッキーです。

まず

# cp /kernel /mnt/kernel

# rm /kernel

 

として作業領域を確保します。

次に、パスワードのデータベースを作りなおします。

#cd /etc  

#pwd_mkdb -d. master.passwd

次に、パスワードを設定します

# passwd sample

さらにホームディレクトリを作成します。

# mkdir /mnt/testuser

# chown testuser.user /mnt/testuser

後はディレクトリの環境設定です。

忘れていました。kernelを戻します。

# cp /mnt/kernel /

2)SAMBAへのユーザ登録

rootでログインします

インストールされているsmbpasswdを、利用するユーザ名の引数をつけて起動します。

# /bin/smbpasswd -a testuser

New SMB password:

Retype new SMB password:

Added user testuser.

Password changed for user testuser.

#

以上でユーザー登録が出来ました。

HDDの追加の方法

以上は1FD-SAMBAで共有できるHDDが既にあることが前提でしたが、PCに既存のHDDを一台そっくり共有専用としたり、新たにHDDを一台追加して共有するためには、それにUNIXのファイルシステムを作成する必要があります。

この方法はFreeBSDハンドブックにありますが、ここでも紹介しておきます。

SCSIディスクを増設し、そっくりFreeBSDで使う場合以下のようにします。上の例では/mnt以下のドライブを共有させるので次のようにします.

# dd if=/dev/zero of=/dev/rsd0 count=2

# disklabel /dev/rsd0 | disklabel -BrR sd0 /dev/stdin

# newfs /dev/rsd0c

# vi /etc/fstab <--- /dev/sd0c のエントリをつくる

# mount /dev/sd0 /mnt

このように/mnt以下にmountすればSAMBAでそっくり共有させることが出来ます。

# mount /dev/sd0c /mnt

1FD-SAMBAにdisklabelとnewfsを含めておいても良かったのですが、SAMBAサーバーではめったに使うコマンドではないのでFDスペース節約のため特に入れていません。

これらの作業をするときに便利なのが広大の田岡さんの作られたFreeBSDをフロッピーディスク一枚で動かすためのパッケージです。

newfsを実行できるようにbootsd,sdboot等のファイルを追加したものがemerg.flpです。まず、このFDで立ち上げてrootでログインすれば、ここで説明したコマンドが実行でき、HDDの増設等が行えます。

NICやHDDコントローラの変更方法

NICの変更は前報と特に変わっていません。以下は添付ファイルの中身でカーネル設定ファイルです。 

#

machine "i386"

cpu "I386_CPU"

cpu "I486_CPU"

cpu "I586_CPU"

cpu "I686_CPU"

ident SMBSVR

maxusers 10

options INET #InterNETworking

options FFS #Berkeley Fast Filesystem

options MFS #Memory File System

options PROCFS #Process filesystem

options "COMPAT_43" #Compatible with BSD 4.3 [KEEP THIS!]

options BOUNCE_BUFFERS #include support for DMA bounce buffers

config kernel root on fd0

controller isa0

controller pci0

controller fdc0 at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr

disk fd0 at fdc0 drive 0

controller wdc0 at isa? port "IO_WD1" bio irq 14 vector wdintr<------HDDコントローラの組み込みです。

disk wd0 at wdc0 drive0

disk wd1 at wdc0 drive1

# A single entry for any of these controllers (ncr, ahb, ahc) is sufficient

# for any number of installed devices.

controller ahc0<------HDDコントローラの組み込みです。

controller scbus0

device sd0

# syscons is the default console driver, resembling an SCO console

device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr

# Mandatory, don't remove

device npx0 at isa? port "IO_NPX" irq 13 vector npxintr

# Order is important here due to intrusive probes, do *not* alphabetize

# this list of network interfaces until the probes have been fixed.

# Right now it appears that the ie0 must be probed before ep0. See

# revision 1.20 of this file.

device fxp0<------NICの組み込みです。

pseudo-device loop

pseudo-device ether

pseudo-device log

pseudo-device pty 16

pseudo-device bpfilter16

pseudo-device gzip # Exec gzipped a.out's

--------------------------------------------

0)rootになります。

1)これをfreebsd2.2.8の/sys/i386/confに適当な名前で(例えばSMBSVR)コピーします。

2)/sys/i386/confで、

#config SMBSVR

とやり

3)#cd ../../compile/SMBSVRとやって

4)#make depend;makeとするとカーネルができあがります。

5)これを

#kzip kernel

とやると

6)kernel.kzができるので、これをフロッピーに書き込んでやるのです。

7)1FDーSAMBAのフロッピーをマウントして、新しいカーネルで置き換えます。

#mount /dev/fd0 /mnt

#rm /mnt/kernel<-----既存のカーネルを消さないと書き込めません。

#cp kernel.kz /mnt/kernel

#umount /mnt

8)以上で新しいカーネルの出来上がりです。

後は、前に述べたように、新しいNICの追加やその名前に合わせて/etcの下の

ファイルを変更するだけです。

以上で、自分のネットワーク環境で動作する1FD-SAMBAが出来あがりました。

終わりに

このFDができて動かし始めてから2ヶ月ほどたちましたが順調に動いています。デフォルト設定ではドメインマスタブラウザを探しに行くようになっていますので、正しく指定してやるか、自分自身がそれになるようにしてやる必要があります。でないと「ドメインマスタ勿彝枝が見つからない」と言うメッセージがうるさく出てきます。

プリンタサーバをするにはlpdが必要ですが、現状では組み込んでいません。時間が無いのと、需要がどれほどあるのか疑問であるためです。