[an error occurred while processing this directive]
Contents
Sambaとは?
Samba日本語版
ドキュメント
技術情報
紹介&リンク
Community
プロジェクト
メーリングリスト
イベント
ユーザー会
etc...
お問合せ
ご支援・ご協力
日本 Samba ユーザ会 (Samba Users Group Japan)

Sambaを利用したCD-ROMサーバの構築

Sambaを利用したCD-ROMサーバの構築

2000/12/19
長谷川陽介 <hasepyon@alles.or.jp>

1.はじめに

私は普段、4台のPCを使ってWindows向けのソフトを開発しており、Microsoft の技術情報であるMSDN LibraryのCD-ROM(3枚組み)を頻繁に利用しています。 

ところが、それらのPCのうちのいくつかのPCはCD-ROMドライブが外付けであったり、ハードディスク残量が少なかったりで、MSDN LibraryのCD-ROM 3枚を抜き差しするのは不便極まりなく、ストレスを感じずにはいられません。
そこで、MSDN Libraryのライセンスが変更されたのを機に、LinuxとSambaを利用したCD-ROMサーバを構築することにしました。

本ドキュメントはその過程をまとめたものです。

2.ハードウェアの準備

世の中には、ネットワークに直結できるCD-ROMサーバという製品も販売されているようです。もし資金が充分にあるのであれば、それらを購入するのがもっとも簡単な解決方法でしょう。

しかし、私に入手できたのは資金ではなく、廃棄寸前のPC4台でした。幸いにも、すべてのPCには埃まみれのIDEのCD-ROMドライブが装着されており、さらにそのうちの1台は5インチベイを3台備えていました。

一般的なPCで使用されているIDEのI/Fではデバイスを最大4台まで接続することができます。そこで、内蔵HDDにLinuxをインストールし、それらの埃まみれのCD-ROMドライブを3台装備することにしました。

今回はたまたま入手できたIDEのCD-ROMドライブを使用したので、CD-ROMサーバといってもたかだか3台ですが、SCSIのCD-ROMドライブを用意できれば、コスト/需要に応じて台数を増やすことも可能です。
また、フロッピーブートにしてCD-ROMドライブ4台を使用することも可能かもしれません。

3.Linuxの準備

LinuxでCD-ROMドライブ3台を利用できるように、/etc/fstab に以下のような記述を追加します。

/dev/hdb /data/cdrom1 iso9660 exec,noauto,user,ro 0 0
/dev/hdc /data/cdrom2 iso9660 exec,noauto,user,ro 0 0
/dev/hdd /data/cdrom3 iso9660 exec,noauto,user,ro 0 0

ここで、/data/cdrom? は、CD-ROM1..3のマウントポイントです。

4.Sambaの設定

Samba では上記CD-ROMのマウントポイントをサービスとして公開するような設定となります。
具体的には以下のようになります。

[CD-ROM1]
comment = CD-ROM No.1
path = /data/cdrom1
guest ok = Yes
preexec = /usr/local/bin/cdmount %P %S %m %I
postexec = /usr/local/bin/cdmount %P %S %m %I /off
fake oplocks = Yes

実際には、CD-ROM2,3についても同じような設定を記述します。

ここでポイントとなるのは、preexecおよびpostexecパラメータです。
preexecパラメータで指定されたコマンドは、サービスへの接続時に実行され、逆に、postexecパラメータで指定されたコマンドは、サービスへの切断時に実行されます。

そこで、これらにCD-ROMをマウント/アンマウントするコマンドを指定すれば、よいことになります。

ところが、単純に mount/umount を指定しただけでは複数ユーザから同時接続があった場合に、最初のユーザがサービスを切断すると、CD-ROMがアンマウントされてしまい、2人目以降はCD-ROMが参照できなくなってしまいます。

そこで、クライアントからの接続時にすでにCD-ROMがマウントされていれば何もしない、クライアントからの切断時に他のユーザがCD-ROMを使用中であれば切断しない、というスクリプトを実行するようにしました(具体的なコードは後述)。

また、見慣れないパラメータとしてfake oploksが指定されています。マニュアルによれば、このパラメータを真に設定することによりクライアントの性能向上が見込まれるとのことです。
今回は時間が充分に取れませんでしたので、このオプションがどれぐらい影響を与えるか計測できませんでした。
この点については今後調査してみたいと思います。

5.マウント用スクリプト

前述したように、サービスへの接続/切断にあわせて単純にmount/umountを実行したのでは、複数ユーザからのアクセス時に問題が生じます。
そこで、次のようなスクリプトを作成し、CD-ROMがマウントされていないときのみmountを、他ユーザが使用中でなければumountを実行するようにしました。

01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
#!/bin/sh
DIR="$1"

SERVICE="$2"
PC="$3"
IPADDR="$4"
OPTION="$5"

MOUNT="/bin/mount"
UMOUNT="/bin/umount"

GREP="/bin/grep"
FGREP="/bin/grep -F"
NKF="/usr/bin/nkf -e"
SMBSTATUS="/usr/bin/smbstatus"

if [ "$OPTION" = "/off" ]; then
    n=`$SMBSTATUS | $NKF | $GREP "^$SERVICE" | $FGREP -c -v " $PC ($IPADDR)"`
    if [ $n -eq "0" ]; then
        $UMOUNT $DIR >/dev/null 2>&1
    fi
else
    if ! $MOUNT | $GREP " on $DIR " >/dev/null 2>&1 ;then
        $MOUNT $DIR >/dev/null 2>&1
    fi
fi    

実際の環境に合わせて8行目から13行目までを変更してください。

6.まとめ

単に3枚程度のCD-ROMを共有したいだけならば、暇そうにしているWindowsを何台か見つけて、それらのCD-ROMドライブを共有するほうが簡単かもしれません。
ただ、本ドキュメントで説明したSambaを利用した方法だと、CD-ROMドライブの配置を物理的に1箇所に集めることができ、CD-ROMの交換作業が簡単に行えます。

残念なのは、有意義な内容かつネットワーク上での共有を許可している、という共有の対象となるCD-ROMが滅多にないことです。

 


ミラーサイト: [ WWW: master ] [ FTP: ring | kddilabs | plathome | mex | master ]

Copyright © 1999-2018 日本 Samba ユーザー会 (Samba-JP)
2011-12-19 01:17:50 JST 更新