授業用ネットワークシステム構築のお話(2)

目次

公開日 2023-11-13 更新日 -

sambaのアップデート

2001年1月。WindowsMe機の追加導入が決まったことと、Windows98がたまにシャットダウンの最終で消えないという問題があって、年度途中ながらsambaのバージョンアップをして、備えることにしました。入れてみると、かなりの改善が行われていました。今回のバージョンアップに使ったファイルはこれ。

samba-2.0.7-ja_1.3.i386.rpm

OSは引き続き Red Hat Linux 6.1J です、

この時期sambaは日本語化に力を入れて大きな変化がありましたし、日本のユーザー会も立ち上がり、マニュアルの翻訳が行われていました。また、Windows2000が普及する中で、Windows9X系との差もわかってきた時期でもありました。

移動ユーザプロファイルまわりのsambaの改善

付属文書のDOMAIN.txtの設定の手引きに次のようにありました。

注意: Samba 2.0.4 から 2.0.5 にかけては、移動ユーザプロファイル回りに関して、いろいろな混乱がみられた。Samba 2.0.6 からは移動ユーザプロファ イルの実現方式が変更になった。Samba team は現在 Windows NT と Windows 9x の両方について、移動ユーザプロファイルがどのように動作するかを理解 しているので、この機能がこれ以上変更になることはないであろう。

注意: 移動ユーザプロファイルの実現方式は Windows 9x と Windows NT とで異なっている。

DOMAIN.txt for Samba release 2.0.7 26 Apr 2000/ 翻訳者: 高橋基信 更新日: 2000/05/02

変更になったのは2.0.6からとなっていますが、manpageの記述が変わるのは2.0.7からなので、番号の取り違いだと思われます。

smb_confのmanpageの「logon home」の説明には、

以前ののSambaのバージョンでは、"logon path" パラメータが "logon home" パラメータの代わりに用いられていた。これにより、"net use /home" がうまくいかなくなる代わりに、ホームディレクトリ外にプロファイルを作成する事ができた。現在の実装は改善され、上記のトリックを使えば、このパラメータをプロファイルの位置の指定に使うことができる。 smb_conf(5)..."28 Feb 1999(JP-2000/05/14)" "Samba2.0.7"

ここに出てくる「上記のトリック」とは、

このパラメータを Windows 9X ワークステーションで使用した場合、移動プロファイルを、ユーザのホームディレクトリ中のサブディレクトリに格納される事が可能となる。これはたとえば以下の方法で行なう。

" logon home = \\%L\%U\profile"

これによって、Sambaは、クライアントが NetUserGetInfo 関数等を使ってホームディレクトリの情報を要求した場合に、上記の文字列を返すようになる。 Windows 9Xクライアントはユーザが "net use /home" コマンドを発行すると指定された文字列を \\server\share に切り捨てる。しかし、プロファイルを扱う時には上記で指定された完全なフルパス文字列で扱う。

smb_conf(5)

つまりは、Windows9xがユーザープロファイルの1項目としてユーザーホーム(ディレクトリ)を扱っていたのに合わせて、logon pathだけを使い、WindowsNTではlogon pathlogon homeを分けて使っていた。これを混同した解説があって、双方でlogon homeをうまく使えるように実装を変更したということなのだと思います。

当時の記録を見ると、/home/username にprofileデータがコピーされるようになったと書かれています。たぶんsmb.confに設定しても無視されていた logon home = \\%L\%Uという記述が、有効になったということなのでしょう。これをlogon pathと同じに、logon home = \\%L\profiles\%Uとして急場をしのいでいます。

これに伴う移動プロファイルの変更

年度替わりを機に移動プロファイルの保存位置を新しいsambaに合わせます。

smb.confの書き換え

これまで

    logon path = \\%L\Profiles\%U
    logon home = \\%L\Profiles\%U

これを変更

    logon path = \\%L\Profiles\%U
    logon home = \\%L\%U\.profile

logon path の方は無視されます。profileにドットがついているのはsmb.confの例としてあったからです。ドットで始まるファイルやフォルダはLinuxでは隠しファイルになるので、Linux側から見ると煩わしくなくなります。しかし、Windows側から見ると隠しファイルにならないので意味がありません。そこで、ある時からドット無しで使うようになっていますが、これは決め方の問題です。\\%L\%U\profile としても同じです。

logon.batの書き換え

いままで

net time \\zebedee /set /yes
net use s: \\zebedee\share
net use /home

これを変更

net time \\zebedee /set /yes
net use s: \\zebedee\share
net use u: /home

WSHスクリプトの書き換え

これで \\zebedee\username を U:ドライブに割り当てる w1.js は不要になりました。しかし、これまでの98SE機にはレジストリの中に AddNetDriveという値が残っていて、w1.jsを実行してu:ドライブに接続しようとします。しかし、logon.bat 中の net use u: /home ですでにu:ドライブに接続されているので、上記と同じ「ローカルデバイス名がすでに使用されている」というエラーになります。w1.js を書き換えて、w1.jsを実行する設定を消去することにします。

var objShell;
var nResult;
var strReg = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\run\\AddNetDrive";
objShell = WScript.CreateObject("WScript.Shell");
objShell.RegDelete(strReg);

複数回実行しても大丈夫なはず。全機でログインされたら、w1.jsはサーバーから削除します。

第二期をはっきり決められない事情

このように、第二期のポイントはsambaのバージョンアップに伴い logon home の扱いが変更になったので、これに従ったというところです。この後、以下に表にしたようなことがあって、さらに小さな変更があります。

年月日サーバー名できごと
2001/01/14 zebedee samba2.0.7に合わせて、logon home の変更(上記)
2001/04/某 zebedee WindowsMe機40台追加と新学年に伴い設定に若干の変更
2001/08/06 zebedee システム用HDDが故障で停止。データ用HDDを分けていたので生徒のデータは無事。
2001/08/07 joel 新しいサーバーを製作し、移行。OSが Miracle Linux に変更になる。新サーバー名をjoelとする。
2001/08/20 zebedee HDDを交換して復活させる。内部DNSとインターネットアクセス用のproxyの役割を分担させることにする。OSは Miracle Linux

ユーザーホームが、Linuxのユーザーホームと同じ //zebedee/<usernsme>/ を指すようになり、プロファイルの位置が //zebedee/<usernsme>/.profile に移動してきたので、マイドキュメントの位置を //zebedee/<usernsme>/user に変更しました。これがどの時点だったかははっきりしません。

以下は、サーバーがまだ zebedee だったときに変更になったとして記述しています。

第二期のサーバーの設定

第一期に準じて設定を概観します。

sambaの設定ファイル/etc/smb.conf

主要な部分のみ。

#======================= 全体的な設定 ==================================
[global]
   client code page = 932
#  coding system = EUC
   coding system = HEX
   workgroup = vine
   server string = Samba %v
   security = user
   encrypt passwords = yes

   domain master = yes
   local master = yes
   preferred master = yes
   os level = 65
   domain logons = yes
   logon script = logon.bat

   logon path = \\%N\%U\.profile #Windows 95/98では無視されます
   logon home = \\%N\%U\.profile

   wins server = 192.168.1.1 #教員用のsambaサーバーがwinsの役目をしています
   wins support = no
   dns proxy = no
   hosts allow = 192.168.1. 127.
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
   oplocks = no
   log file = /var/log/samba/log.%m
   max log size = 50
   deadtime = 15
   read size = 65536

;  level2 oplocks = Yes
   level2 oplocks = no
# ========================== 各共有の定義 ===========================
[netlogon]
   comment     = Network Logon Service
   path        = /home/netlogon
   write list  = adachi,otawa
   browseable  = no
[printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = no
   printable = yes
[homes]
    comment      = %U s Home Directories
    browseable   = no
    writable     = yes
     # デフォルトでは、UNC で指定することで、他人のホームディレクトリにも接
     # 続が可能です。これを禁止する場合は、以下を設定してください。
    valid users  = %S
[public]
    path = /home/public/%U
    write list     = %U
    create mask    = 0755
    directory mask = 0755
    browseable     = No
[share]
    path = /home/share
    write list     = adachi,otawa
    guest ok       = Yes
[www]
    path = /shome/httpd/html
    valid users    = adachi,otawa,ohno
    write list     = adachi,otawa,ohno
    create mask    = 0775
    directory mask = 0775
    browseable     = No
[prog]
    path = /shome/dosprog
    create mask    = 0755
    directory mask = 0755
    writeable      = Yes
 ;  write list     = adachi,otawa,ohno
    browseable     = Yes

[profiles]のサービスは不要になり、削除しています。(Widowx9Xはユーザーホームに置くため)

sambaは \\サーバー名\サービス名 (UNC)でアクセスします。例えば[share]には \\zebedee\share でアクセスします。[home]だけは例外で、サービス名はhomeでなく、ユーザー名が当てられます。

それぞれのサービスの用途は次のとおりです。

サービス用途
[netlogon] 第一期からあり。ドメインログオンするときに使用する logon.bat などを格納する
[printers] samba経由でサーバーのプリンタを使えた。授業で使ったプリンタはこれでなく、ネットワークアダプタを取り付けた1教室4台の EPSON PM-880C,または770C を使う。
[homes] 第一期からあり。ユーザーホーム。profilesとマイドキュメントがここに置かれる。普通path=の指定をせず、Linuxのユーザーホームを使う。
[public] 生徒が授業で作成するウェブページの場所として用意
[share] 第一期からあり。生徒に配布するファイルを置く。
[www] 第一期からあり。授業で使うテキストを置く。
[prog] 第一期からあり。Windowsのソフトウェアを置く。クライアントPCのショートカットから起動する。

前にも書きましたが、%に英字(大小を区別)は置換されて接続に応じた値になります。主なものをいくつか書いておきます。

smb_conf(5)

第二期のユーザプロファイルとマイドキュメントの構成

.profileとすることでLinuxでは隠しファイルになりますが、Windowsからは見えてしまうので、マイドキュメント中に自分で作ったものでないフォルダを生徒が目にすることになります。そこで、\\zebedee\<username> の中に user というフォルダを作っておいて、\\zebedee\<username>\user をマイドキュメントに指定するという構成にしました。実はこうすることで、Al-Mailのメールボックスフォルダも見えなくなるので好都合です。

例として、alphaというユーザーがログオンしているときの接続の様子を図示します。

Windows\Profiles\alpha の内容と /home/alpha/.profile の内容が同期されます。

U:はあくまで /home/alpha に接続されていて、マイドキュメントは u:\user に割り当てられます。

プロファイルとマイドキュメントを分けて接続したことが分かるように新たに書いた図

WindowsMeの設定

今回も授業の前日になってしまいました。販売店に並ぶのと同じ設定のWindows機が40台で、最初は一台ずつ設定しなければなりません。情報科の教員2人に加え一般教員が3人応援に入ってもらっての作業でした。

使用したバッチファイル

<yesというのはキーボードからy[enter]と入力したことにする仕掛けです。実際のファイルは残っていませんが、たぶん y\d\a の3バイトが入ったファイルでしょう。

rem はコメントです。

WindowsMeの設定に使ったバッチファイル
rem desktop
del   "c:\windows\デスクトップ\オンライン サービス\*.*" <yes
rmdir "c:\windows\デスクトップ\オンライン サービス"
del   "c:\windows\デスクトップ\Windows Media Player.lnk"
del   "c:\windows\デスクトップ\Acrobat Reader 4.0.lnk"
copy  "c:\windows\デスクトップ\お知らせ.LNK" c:\backup
del   "c:\windows\デスクトップ\お知らせ.LNK"
copy  "c:\windows\デスクトップ\ユーザーズ マニュアル.pdf" c:\backup
del   "c:\windows\デスクトップ\ユーザーズ マニュアル.pdf"

rem プログラム
del   "c:\windows\スタート メニュー\Windows Update.lnk"
del   "c:\windows\スタート メニュー\プログラム\オンライン サービス\*.*" <yes
rmdir "c:\windows\スタート メニュー\プログラム\オンライン サービス"
del   "c:\windows\スタート メニュー\プログラム\ゲーム\インターネット スペード.lnk"
del   "c:\windows\スタート メニュー\プログラム\ゲーム\インターネット ハーツ.lnk"
del   "c:\windows\スタート メニュー\プログラム\ゲーム\インターネット バックギャモン.lnk"
del   "c:\windows\スタート メニュー\プログラム\ゲーム\インターネット チェッカー.lnk"
del   "c:\windows\スタート メニュー\プログラム\ゲーム\インターネット リバーシ.lnk"

rem MyDoc
mkdir "c:\backup\My Pictures"
copy  "c:\My Documents\My Pictures" "c:\backup\My Pictures"
del   "c:\My Documents\My Pictures\*.*" <yes
rmdir "c:\My Documents\My Pictures"
rem rmdir "c:\mydocu~1\mypict~1"

mkdir "c:\backup\My Music"
copy  "c:\My Documents\My Music\*.*" c:\backup\Music"
del   "c:\My Documents\My Music\*.*" <yes
rmdir "c:\My Documents\My Music"

書き加えるレジストリ

機械固有の設定(HKEY_LOCAL_MACHINE)とデフォルトのユーザー設定(HKEY_USERS\.DEFAULT)を変更します。これをマージすることで設定が変わります。

これに対して、個々のユーザーの設定の初期値はUSER.DATで設定します。雛形ユーザーで設定したものを、プロファイルディレクトリ(/home/<username>/.profiles/ )にコピーします。

設定値や変更の制限はシステムポリシーファイル CONFIG.POLで行います。これは /home/netlogon に置くだけです。

WindowsMeの設定に使ったレジストリ断片
  REGEDIT4

[HKEY_USERS\.DEFAULT\Software\Microsoft\Internet Explorer\Main]
"Start Page"="http://www.seiai.ed.jp/home/"
"First Home Page"="http://www.seiai.ed.jp/home/"

[HKEY_LOCAL_MACHINE\Network\Logon]
"DontShowLastUser"=dword:00000001

[HKEY_USERS\.DEFAULT\Control Panel\desktop]
"Wallpaper"="C:\\WINDOWS\\abblue.bmp"
"TileWallpaper"="1"

[HKEY_USERS\.DEFAULT\Control Panel\Colors]
"Background"="0 0 128"

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\DISPLAY\0000\MODES\32\1024,768]
@="60,70,75,85"
"RefreshRate"="60"

[HKEY_LOCAL_MACHINE\Config\0001\Display\Settings]
"RefreshRate"="60"

[HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemStart\.Current]
@=""

最後のは起動時の音のファイルです。

ユーザー登録スクリプト

ユーザー名とパスワードの作成については、第一期と同じです。

登録のもとになるユーザー名とパスワードの元ファイルをつくります。次のようなものです。

a8hanako 8ydq6din hanazawa hanako
a8wakame hjrmr0kd isono wakame
a8nobita t8wc1gxr nobi nobita
a8sizuka jdbtu4j8 minamoto shizuka
a8takesi 5nczum4c gouda takesi
.....

これを使って3つの作業をします。(1)unixユーザー登録、(2)sambaユーザー登録、(3)プロファイルフォルダを用意 です。

(1)unixユーザー登録

今年のポイントはプライベートグループを使用することにして、その他の所属グループとして vine グループへ登録したことです。

-g オプションはプライマリーグループの指定です。これをなくせば自動的にプライベートグループになります。もっと昔は users というグループになりましたね。-G オプションはその他のグループに加えるオプションです。-m は/home/User を作って必要なファイルをコピーするオプションです。

ptest:unixユーザー登録スクリプト
#!/usr/bin/perl
# -g $def_group for primary group
# if not exist -g , set private group 
print "add new user\n";

$filename="nampast.txt";

open(SFILE,$filename) || die "cannot open $filename";
while (<sfile>){
   chop;
   chop;
   ($uname,$password,$gc,$os)=split(/ /);
   print "$u - $p - $gc / $os\n";
   $user_fullname=$gc . " " .  $os;
   print "$user_fullname\n"; 
   `/usr/sbin/useradd -c \"$user_fullname\" -m -G vine $uname`;
    open(CMD, "| /usr/sbin/chpasswd > /dev/null");
    print CMD "$uname:$password\n";
    close(CMD);
}
close(SFILE);

(2)sambaユーザー登録

第一期で使ったものと同等です。

sptest:sambaユーザー登録スクリプト
#!/usr/bin/perl
print "set samba passwd\n";

$filename="nampast.txt";

$ct=0;
open(SFILE,$filename) || die "cannot open";
while (<SFILE>){
   chop;
   chop;
   ($uname,$password,$gc,$os)=split(/ /);
   print "\n";
   $user_fullname=$gc . " " .  $os;
   print "$uname  $user_fullname  -"; 
   #`/usr/bin/smbadduser $uname:$password`;
    open(CMD, "| /usr/bin/smbpasswd -as $uname > /dev/null");
    print CMD "$password\n$password\n";
    close(CMD);
    $ct=$ct+1;
    print "$ct\n";
}
close(SFILE);

-a は add でユーザーの追加。-s は標準入力からデータを受け入れる指定。

ユーザーの削除は /use/bin/smbpasswd -x username と -x オプションを使います。

(3)プロファイルフォルダなどを用意

/home/<username> は /usr/sbin/useradd の -m オプションでやってくれているので、その中に .profile フォルダを作成して /home/testu/.profile/ にある雛形ユーザーのプロファイルデータをコピーし、マイドキュメントになる user フォルダを用意しています。

cptest:プロファイルフォルダ作成・内容コピースクリプト
#!/usr/bin/perl
print "helo!\n";

$filename="nampast.txt";

$ct=0;
open(SFILE,$filename) || die "cannot open";
while (<SFILE>){
   chop;
   chop;
   ($uname,$password,$gc,$os)=split(/ /);
   print "$gc $os -";
   `mkdir  /home/$uname/.profile`;
   `mkdir  /home/$uname/user`;
   `cp  -rf /home/testu/.profile/* /home/$uname/.profile`;
   `chown   $uname:$uname /home/$uname/.profile -R`; 
   `chown   $uname:$uname /home/$uname/user`;
   `chmod   0755 /home/$uname/`; 
   `chmod   0700 /home/$uname/.profile -R`; 
   `chmod   0770 /home/$uname/user`; 
   $ct=$ct+1;
   print "$ct\n";
}
close(SFILE);

今回は、Windows98SEとWindowsMeの二種類の生徒機があって、授業ではクラスごとに実習室を固定しているものの、放課後や情報以外の授業では渡り歩くことも考えられます。どちらからログインしてもマイドキュメントは同じで、少なくとも授業で使うソフトについては同じというところを目指しました。概ね良好でした。

サーバーにプロファイルがないと、各機械のデフォルトユーザーのプロファイルが使用されます。多少違っていても問題なかったのだろうと思います。

もともとWindows98SEだけの場合でもプロファイルのフォルダ名が異なる場合がありました。「NetHood」と「ネットワークコンピュータ(半角)」、「Recent」と「最新」と言う具合です。Meが加わって全角カナのフォルダも出現し手に負えなくなって放置しました。顕在化した不具合は一つだけで、ディスプレイの色深度に関するものでした。これは別の機会に解説することとします。

実習室が2つとなり、両方を同時に使うと最大で80台のクライアント機が一つのサーバーにぶら下がることになります。特に、2つ目の実習室は1GBのケーブル1本でつないでいるので多少不安ではありましたが、どちらの要因でも動作が遅く感じられることはありませんでした。

サーバーの交代

2001年の8月6日に、授業用のサーバーであったzebedeeのシステム用HDDが動作不良になり、強制的に停止させました。夏休み中ですから授業に支障なく、生徒データの入ったHDDは無事でしたので、こちらも問題ありません。

もともと、このサーバーはWindows機として退役したものに Linuxをインストールしたものです。HDDの寿命を考慮してデータ用のHDDは新品で追加しました。ですから、想定内の故障の仕方です。

データ用HDDは/homeにマウントされていました。/home以下のフォルダ名がユーザー名ですから、ユーザー名とパスワードの表があれば戻せます。ただし、各フォルダの所有者はuidという番号になっています。ユーザー名とuidが正しく対応付けられないとフォルダのとりちがいが起こります。uidは大抵1000番から登録順につけられていきますから、登録順に注意すればなんとかできるはずではあります。今回は、/etc/passwd と /etc/shadow と /etc/smbpasswd が救出できましたので、新OSをインストール後に1000番以降をコピーすることで手間を省くことができました。

故障したサーバーは Red Hat Linux 6.1J でしたが、新しいサーバーは Miracle Linux 1.0 にしました。このディストリビューションはsambaの日本語版を使用することを中心に考えられているものなので、設定のわかりやすさと不具合の修正がいち早く入ることを期待しての選択でした。Linuxのディストリビューションでは普通ですが、OSは無料で使え、もし、サポートを必要とするなら有料でいたしますというものでした。無料で使わせていただきました。Turbo Linux というディストリビューションをベースにしたものでした。

サーバー名はjoelにしました。やはり X は入れずにCUIで運用することにしました。普段使用しているWindowsから TeraTrem というソフトを使ってtelnetで操作して使うというやり方が便利です。セキュリティ上の理由からtelnetがsshに代わるのは、2002年でした。

サーバーの追加

新サーバーを設置して落ち着いた後、故障したzebedeeのHDDを交換して復活させ、(1)内部DNSと(2)インターネットアクセス用のproxyの役割を分担させることにしました。OSはjoelとおなじ Miracle Linux 1.0 とし、proxyはsquidを使用。インターネット接続を実習室ごとに許可/不許可を切り替える働きをさせます。

当時作成した画像がありましたので掲載しておきます。

サーバーのスペックと役割分担

judasは教員用に以前(1997年)から動いていたもので、ちょうど同時期(2001/8/30)にシステムHDD故障してので更新したものです。

applicationとあるのはWindowsのソフトを置いてクライントから実行するための機能という意味ですが、実際にzebedeeで使っていたのはAl-Mailだけだったと思います。K2Editorはユーザーごとの設定ファイルをプロファイルではなくプログラムファイルの配下に保存しようとするので、書き込み権限が必要となり、joelに置かざるを得なくなっていました。

166MHzなどの記述はCPUの周波数、64MBなどはメモリ容量です。こういう時代でした。

記録には突然の停電が3回ほどあったとあります。8月6日の前後は筆者は出張中でしたが、そういえば毎年この時期に電気設備の点検のための停電があります。サーバーが常時動いていることは、まだあまり意識されない時代でした。

この年の10月に中古の無停電電源装置を導入します。