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

目次

公開日 2024-01-08 更新日 -

Joel(1)の仕様

2001/08/07に新しいサーバーを製作しOSを Miracle Linux に変更、hostnameをjoelにしたところまでお話しました。

いままで、サーバーのスペックにはあまり触れてきませんでした。これはまとまって記録に残っていないからなのですが、トラブルの記録から少しずつわかってきました。

Joel作成時の仕様
CPU:	 Intel Pentium III (Coppermine) 600MHz (slot1)
mother:	ABIT BE6-II
Memory:	128MB
HDD1:	IBM-DTLA-307030, 30GB /
HDD2:	IBM-DTLA-307030, 30GB /homeにマウント
OS:	MiracleLinux ver1.0 

(1)を付けたのは、この後大きな変化があるからです。

Joel(1)のユーザーホームの使用量制限

生徒がマイドキュメントに保存したものは、マウントされているサーバーのユーザーホームに置かれます。授業で使用するものはそれほど多くありませんが、放課後にインターネットからダウンロードしたり、家からメモリーカードなどで持ち込むことや、誤操作で大量のコピーを作ることも考えられます。HDDの総容量を使い切ると他の生徒に多大な迷惑をかけますので、使用の上限をもうけることにしました。

前のサーバーであるzebedeeではLinuxconfで設定したのですが、中途半端なツールで自由にならないので面倒でした。新たにquotaの勉強して設定します。

fstab にquotaの使用を宣言する。

/dev/cdrom  /mnt/cdrom    iso9660 noauto,owner,ro 0    0
proc    /proc   proc    defaults         0    0
none    /dev/pts        devpts  mode=0622     0    0
/dev/hdc1   /home   ext2  defaults,usrquota   1    2

ファイルシステムの最上位のディレクトリに quota.user というファイルを作る。

[root@joel /root]# touch /home/quota.user
[root@joel /root]# chmod 600 /home/quota.user
[root@joel /root]# ls /home/quota.user -l
-rw------- 1 root  root  0 Aug 23 08:43 /home/quota.user

雛型になるユーザー(ここではlamb)の制限を設定する。

[root@joel /root]# edquota lamb
Quotas for user lamb:
/dev/hdc1: blocks in use: 0, limits (soft = 90000, hard = 100000)
        inodes in use: 0, limits (soft = 3000, hard = 3100)

猶予期間を設定する。普通7daysあたりだが、動作テストをすることもあると考えて少なめにした。

[root@joel /root]# edquota -t
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/hdc1: block grace period: 1 days, file grace period: 1 days

fstabの記述を有効にするために、一度マウントを解除し再度マウントする。

[root@joel /root]# umount /home
[root@joel /root]# mount -a
[root@joel /root]# mount
/dev/hdc1 on /home type ext2 (rw,usrquota)

すでにユーザーがある(制限なし)ので現在の使用状況をチェックし、超過がないか確認してから、有効にする。-a は /home でもいいはず。

[root@joel /root]# quotacheck -a
[root@joel /root]# quotaon -a

制限のかかっているlambを表示してみる。

[root@joel adachi]# quota lamb
Disk quotas for user lamb (uid 508):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/hdc1    9628   90000  100000             237    3000    3100

次のようにすることで雛形ユーザー lamb の設定を alpha と beta にコピーできる。

edquota  -p lamb alpha beta

これを使って、現在の全生徒に容量制限を設定するようにスクリプトを書きます。

#!/usr/bin/perl
#name : cpquota
#usage: cpquota suser duserfile
#from "Switch fck3  home = user 2001\n";
#switch acording to ARGV's number
$numofargv=@ARGV;

if ( $numofargv == 2 ){    #-------------------------
   print "copy quota\n";
   $ct=0;
   ($suser,$fnamesf)=@ARGV;
   print "cp quota from $suser ";
   print "to users in $fnamesf list\n";
   open(SFILE,$fnamesf) || die "cannot open $fnamesf";
   while (<SFILE>){
      ($uname,$password,$gc,$os)=split(/ /);
      print "$uname-" ;
      `edquota  -p $suser $uname`;
      $ct=$ct+1;
      print "$ct\n";
   }
}else{                     #----------------------
   print "usage: cpquota sorce_user dist_userfile_name\n";
}

実行すると、 print "$uname-";print "$ct\n"; により、進捗状況が表示されます。

[root@joel /root]# ../cpquota lamb nampasjoel2_2.txt
copy quota
cp quota from lamb to users in nampasjoel2_2.txt list
e9naoko-1
d9misato-2
e9hisano-3
e9ran-4
d9sachi-5
b9makiko-6
a9kogawa-7
...

全部すでにあるユーザーなので、offにした上で現在の使用状況をチェックする。そのあと再びonにする。

[root@joel /root]# quotaoff -a
[root@joel /root]# quotacheck -a
[root@joel /root]# quotaon -a

ステータスのチェックの命令もあるが、そう必要がないように思える。

[root@joel /root]# quotastats
Number of dquot lookups: 52296
Number of dquot drops: 52296
Number of still active inodes with quota : 0
Number of dquot reads: 719
Number of dquot writes: 847
Number of quotafile syncs: -1073742712
Number of dquot cache hits: 11272
Number of allocated dquots: 736
Number of free dquots: 24
Number of in use dquot entries (user/group): 712

レポートの方が使える。

[root@joel adachi]# /usr/sbin/repquota /home
                        Block limits               File limits
User            used    soft    hard  grace    used  soft  hard  grace
root      --    1740       0       0             41     0     0
adachi    --    5772       0       0             92     0     0
alpha     --    3236   90000  100000            178  3000  3100
beta      --   79240   90000  100000            402  3000  3100
bravo     --    1524   90000  100000            113  3000  3100
lamb      --    9628   90000  100000            237  3000  3100
f8souma   --    8104   90000  100000            226  3000  3100
f8yumiko  --   23420   90000  100000            853  3000  3100
...

Joel(1)の障害発生

2002.1.28の6校時Joel(1)のサーバー機能に障害が発生しました。授業に甚大な影響があったのはこれが後にも先にも唯一のことです。

私的な記録にはサーバー停止と書いていますが、「停止」だと自然に止まった、または手動で止めたという実際とは異なる印象があります。よく聞く「障害」としてみましたが、こちらはサーバー(の構築者・管理者)の責任外で起こることを示唆するような表現なんだと改めて感じました。

実際に起こったことは、授業開始直前に、ログインできない、ファイルが開けないなどのトラブルが続出したことです。授業開始直前というのは、負荷分散の観点から、教室に来たら随時ログインするようにしていたことによります。サーバーの応答を待っているような様子から、ネットワークが原因かと考え、待っているPCが多いことからHUBかと考え、2つ以上のハブにまたがっているのでサーバーかと原因を探っていきました。サーバーは停止してはいませんが、ログにはpageが確保できないようなメッセージがコンソールに次々と流れています。発信元は samba httpd canna などさまざまです。ログインできません。リモートからもログインできませんが、ping には応答しています。

しかたなく、ネットワークケーブルをはずした後リセットかけると、HDDにアクセスしますが、起動画面がでません。ケーブルをつけるとpingは通るようになります。webやファイルサーバーにアクセスできる生徒もいますが、認証でとまっている生徒もいます。機器を使用しての授業は諦めざるを得ない状態でした。

授業後、とにかく画面が出ないので、手持ちの古いPCIバス用のカードに換えてLinuxのレスキューディスクで起動、ハードディスクをfsck.ext2 などでチェックし、問題なしと判断しました。結局、このグラフィックカードの交換だけで正常に機能するようになりましたので、原因はAGPのグラフィックカードの故障だと思います。AGPのグラフィックカードはメインのメモリを自分のものとして使用できるような仕様でした。壊れたカードが不正にメモリを占有したため、メモリの管理に不整合が生じエラーを起こしていたと解釈すると筋が通ります。

サーバーは普段 X-window を起動しておらず(この時代はそもそもインストールされてなかったかもしれない)、コンソールでの運用だったので高性能なグラフィックカードは必要はありません。古いPCIバス用のカードのまま使ったか、新しいAGPカードを用意したかは記憶にありません。

とにかく、この年の3月まではこのまま使用し、新年度に向けてメモリ増設とOSの更新をおこなっています。マザーボードはまだ使えるという判断です。

Joel(2)への強化内容

BIOS更新

マザーボードはABITのBE6-II(V1.0)で、UltraDMA66を使えるようになるということで、BIOSのアップデートをしました。ver1.0はハードウェアのバージョンでBIOSのバージョンではありません。これに翻弄されながらも現verQJから最新版verXUにアップデートしました。BIOSのアップデートそのものはうまく行ったのですが、/dev/hdaなどの割付が換わるので、ちょっと面倒なことになりました。この話は省略します。

メモリ追加

CPUとHDDはそのままですが、メモリを512MBに増やしました。スワップの発生が頻繁に起こっていたので、やってみました。

OS変更

OSをReHat Linux 7.2 にしました。MiracleLinux ver1.0 は samba 日本語化の部分に期待して選択したのですが、ver2.0になるときに、Turbo Linux ベースから RedHat ver7.1 ベースに変わってしまったのです。ハードの自動認識、解説、rpmのアップデートなどはやはりRedHatが一番しっかりしているので、RedHat 7.2 の製品版を購入することにしました。

製品版を購入するのは後にも先にもこれ一回でした。解説書がついていること、サポートがついていることが期待されるところでしたが、不具合を発見するのが夜で、時間はかかるけれども問い合わせのために調べているうちに解決策が見えてきて、自己解決してしまうことで、サポートを利用する場面がなかったというのが理由です。

この7.2でのインストールで象徴的なことが起こります。購入したCDの2枚目が読めず、雑誌の付録のCDの2枚目で代用できてしまったということでした。

IDE-RAIDカード追加

生徒データのバックアップのために、HDDのミラーリングを考えました。

追加したのは PROMISEの fastTRAK100TX2 V2.00B2 です。これはIDE-RAIDカードで、2チャンネルのIDE-HDD(最大4台)をRAID0,1,0+1で構築可能という触れ込みでした。ところが、導入の時点で ReHat 7.2 ではRRIDの設定ができませんでした。Redhat用のドライバも見つけて試しましたが、kernel version が異なると言われて使うことができません。(2.4.7-10用なのに2.4.9-13に入れようとしている)。将来もOSのアップグレードもあることを考えるて、単なるIDE増設カードとして使うことにしました。

適宜手動で全体をコピーしてバックアップすることとし、将来的にはcroneで自動化することを考えます。

全部を生かすと、IDE-HDDの配置がこうなります。

IDE プライマリ┬マスター /dev/hda  DMA 33
         └スレーブ /dev/hdb  DMA 33
IDE セカンダリ┬マスター /dev/hdc  DMA 33
         └スレーブ /dev/hdd  DMA 33
Fast Trak CH1 ┬マスター /dev/hde  DMA100
              └スレーブ /dev/hdf  DMA100
Fast Trak CH2 ┬マスター /dev/hdg  DMA100
              └スレーブ /dev/hdh  DMA100
UD66プライマリ┬マスター /dev/hdi  DMA 66
         └スレーブ /dev/hdj  DMA 66
UD66プライマリ┬マスター /dev/hdk  DMA 66
         └スレーブ /dev/hdl  DMA 66

HDD構成の整理

元々このマザーには、HDDのコネクタが4つあり、IDE1、IDE2が DMA33用です。他にUltraDMA66用にIDE3とIDE4があって、BIOS更新でこれが使えるようになっています。そこに追加したfastTRAKはDMA100のコネクタが2つということになりました。

BIOS SETUP で標準のIDEのプライマリを使用しない設定にすると、UltraDMA66のドライブが /dev/hda に格上げになります。それも含めて、次のようなレイアウトとしました。

UD66プライマリ┬マスター /dev/hda  DMA 66 システム(/) 20GB (Model=IBM-DPTA-372050)
         └スレーブ /dev/hdb  DMA 66 
IDE セカンダリ┬マスター /dev/hdc  DMA 33 CD-ROM
         └スレーブ /dev/hdd  DMA 33
Fast Trak CH1 ┬マスター /dev/hde  DMA100 生徒ホーム(/home) 40GB (Model=IC35L040AVVA07-0)
              └スレーブ /dev/hdf  DMA100
Fast Trak CH2 ┬マスター /dev/hdg  DMA100 バックアップ 40GB (Model=IC35L040AVVA07-0)
              └スレーブ /dev/hdh  DMA100
UD66セカンダリ┬マスター /dev/hdi  DMA 33 旧A旧/shome 30GB (Model=IBM-DTLA-307030)
         └スレーブ /dev/hdj  DMA 33

DMA100 とありますが、dmesgの中に記録された起動時のHDDの認識情報では、DMA66の様です。

出来上がったJoel(2)の仕様

Joelグレードアップ時の仕様(2002.4)
CPU:	Intel Pentium III (Coppermine) 600MHz (slot1)(変化なし)
mother:	ABIT BE6-II(BIOS更新)
Memory:	512MB
HDD1:	IBM-DPTA-372050, 20GB /(root)
HDD2:	IC35L040AVVA07-0, 40GB /homeにマウント 
HDD3:	IC35L040AVVA07-0, 40GB /homeのバックアップ
HDD4:	IBM-DTLA-307030, 30GB /旧システムの参照用
OS:	ReHat Linux 7.2

OS(ディストリビューション)の交代と生徒データのバックアップへの考慮が大きな変更です。機能自体はさほど変更ありません。

sambaの様子

miracleからRedHatになっての変化もありますが、この時期のsambaも細かな変化がかなりあって設定項目が増えて来ています。smb.confにはかなりの説明があって読みながらデフォルトや設定例を変更する形で設定ができるようになってきました。そしてほとんど変更が必要ない設定項目はsmb.confには書かれなくなりました。testparmコマンドで確認すると、全部の設定が表示されるので、必要なひとはそこから項目を拾ってsmb.confに追加するという仕組みになりました。

というわけで、再び解説を読みながら設定をしました。結果としてあまり大きな変化はありません。

授業用ネットワークシステム構築のお話(2)の第二期のサーバーの設定に合わせた項目比較です。#*が異なる部分ですが、多くは変更になったデフォルト値を素直に受け入れたものです。

#======================= 全体的な設定 ==================================
[global]		
	client code page = 932	
		
	coding system = HEX	
	workgroup = VINE	
	server string = Samba Server %v	
	security = USER	
	encrypt passwords = Yes	
		
	domain master = True	#*Yesと書いてもtestparmでTrueになる
	local master = Yes	
	preferred master = True	#*
	os level = 33	 #*推奨値が変わった他に遠慮すべmasterがいないので大きくても良い
	domain logons = Yes	
	logon script = logon.bat	
		
	logon path = \\%L\%U\.profile	
	logon home = \\%N\%U	#*u:\userをマイドキュメントにしたので、プロファイルはu:においてもいいのではと。
		
	wins server = 192.168.1.1	
	wins support = No	
	dns proxy = No	
	hosts allow = 192.168.1. 127.	
	socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192	
	oplocks = Yes	#*推奨値に従うことにした。
	log file = /var/log/samba/%m.log	#*log.%mから変更
	max log size = 0	#*
	deadtime = 0	#*
	read size = 16384	#*
	level2 oplocks = Yes	#*
		
# ========================== 各共有の定義 ===========================
[netlogon]		
	comment = Network Logon Service	
	path = /home/netlogon	
	write list = adachi,otawa	
	share modes = No	#*
[printers]		
	comment = All Printers	
	path = /var/spool/samba	
	browseable = No	
	printable = Yes	
[homes]		
	comment = Home Directories	
	browseable = No	
	read only = No	
	create mask = 0600	#*
	directory mask = 0700	#*
	valid users = %S	
[public]		
	comment = public_html	
	path = /home/public/%U	
	write list = %U	
	create mask = 0644	
	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 = 0644	#*
	directory mask = 0775	
	browseable = No	
[prog]		
	path = /shome/dosprog	
	create mask = 0644	#*
	read only = No	
		
#*
[kadai]		
	path = /zhome/otawa	
	valid users = adachi,otawa	
	write list = adachi,otawa	
	force group = tch	
	create mask = 0660	
	directory mask = 0770	
	browseable = No	

一番大きな変更は、ユーザープロファイルを入れる場所の.profileを廃し、/home/<username> にしたというところです。logon home = \\%N\%U の指定がそれに当たります。マイドキュメントの指定先を u:\user にしたので、ユーザープロファイルが u:\ に生においてあってもいいだろうということです。

[public]共有は生徒が授業で作成するウェブページを置くためのところです。Linuxを使い始めたときには、ユーザーホームのファイルパーミッションは 644 でした。その中に public_html フォルダがあって、ウェブサーバーの設定をすれば、ここに個人のウェブページを置くようになっていました。

ところが、このころからユーザープライマリーグループが採用されるようになりました。デフォルトで全員 users という共通のグループになっていたものがユーザー名と同じ名前のグループが作られて、全員個別グループのただ一人のメンバーになります。加えて、ユーザーホームのファイルパーミッションが 600 (640だったかもしれない)となって、ユーザーホームのファイルが他人から見えなくなりました。セキュリティ上はうなずける仕組みです。しかし、ウェブページは他人からも見えることが必要なので、別の共有を作ることにしたわけです。

ウェブページのための共有については、二転三転するので、詳しい説明は省いておきます。

ユーザーホームとプロファイル、マイドキュメントの関係図は以下のように変わりました。

logon.bat

ウェブページのための共有を W: ドライブとして接続するために、logon.bat

adachi@banach:/media/adachi/S1T$ cat old/adtec1/_jugyou/logon/logon.bat (=04summer)
net time \\joel /set /yes
net use s: \\joel\share
net use u: /home
net use w: \\joel\public

マンドキュメントは前回から u:/user になっています。この設定は、レジストリの結合で行っています。つまり、設定した USER.DAT を各ユーザーのプロファイルディレクトリに置きます。

ウェブページのための共有

logon.bat中に w: \\joel\public というのが出てきたので、調べてみました。授業に使用したテキストに、ウェブページ作成準備や最初のページの保存場所、ウェブページの閲覧に使うURLなどが書かれているので年ごとの変化がわかります。サーバーから見た位置はApacheの設定によるので確かではありません。

w:\のようにドライブを割当て、その後\\サーバー名\サービス名(UNCというらしい)の形式に戻しているのは、たまに起こるWindowsのシャットダウン中にハングアップする問題の原因かと疑われたからです。

位置の表記の中の「alpha」は仮のユーザー名です。

年度 保存場所へのアクセスルートを用意する作業 Windowsから見た位置 サーバーから見た位置 Webでの位置
2000 それぞれのユーザーのマイドキュメントに public_html というフォルダを作らせる マイドキュメント\public_html\ /home/alpha/public_html/ www.seiai.ed.jp/~alpha/
2001 用意されたJScriptで、それぞれのユーザーのマイドキュメントに public_html というショートカットを用意 \\joel\public\ /home/public/alpha/ www.seiai.ed.jp/~alpha/
2002 用意されたJScriptで、それぞれのユーザーのマイドキュメントに public_html というショートカットを用意 W:\ /home/public/alpha/ www.seiai.ed.jp/~alpha/
2003 それぞれのユーザーのマイドキュメントに public_html.lnk というショートカットをコピー \\joel\public\ /home/public/alpha/ www.seiai.ed.jp/~alpha/
2004 それぞれのユーザーのマイドキュメントに public_html.lnk というショートカットをコピー \\joel\public\ (W:) /home/public/alpha/ www.seiai.ed.jp/~alpha/
2005 \\joel\publicへのショートカットを各自作成 \\joel\public\ /home/public/alpha/ www.st.seiai.ed.jp/~alpha/
2006 \\jonah\publicへのショートカットを各自作成 \\jonah\public\ /home/public/alpha/ www.st.seiai.ed.jp/~alpha/
2007 \\jonah\publicへのショートカットを各自作成 \\jonah\public\ /home/public/alpha/ www.st.seiai.ed.jp/~alpha/

jonahはjoelの次のサーバー機の名前です。2007年にクライアントもLinuxにするので、ここで区切っています。

2005年に www.seiai.ed.jp が www.st.seiai.ed.jp になりますが、seiai.ed.jpのドメインを正式に取得したので、内部のアドレスをサブドメイン風に変更したものです。サブドメインにするにはDNSにそれなりの設定を必要としますが、外部には出さずに、外にアクセスしないためのアドレスという位置づけになっています。

ハードから見たサーバーの歴史

授業用ネットワークシステム構築のお話も(3)になりました。(3)ではありますが、第3期ではなく、第2期の延長にあると考えています。注目点は認証とプロファイル、ユーザーホームの割当方法です。

これと別にハードウェアの更新も記録しておきます。ハードウェアとしては2台です。この頃はハードウェアごとにサーバー名を付けていました。サーバー名の後ろの(2)は「2代目」の意味でHDDやメモリ、OSの入れ替えで代が変わったことを示しています。

zebedeeのCPU,マザーについては記録がありません。

サーバー名(代)稼働年数 稼働開始稼働終了 OSHDDmemory CPUmother boad備考
zebedee1.5年 2000-32001-8 RedHat 6.1J2.5GB(+20GB)64MB 不詳不詳第1期,第2期
joel(1)0.5年 2001-82002-1+ miracle 1.030GB+30GB128MB Pentium III 600MHzABIT BE6-II第2期
joel(2)3.6年 2002-32005-9+ ReHat 7.230GB+40GBx2512MB Pentium III 600MHzABIT BE6-II第2期
zebedee(2)5.3年 2001-82006-10 turbo→miracle4GB64MB 不詳不詳補助のサーバー

zebedee(2)はメインのサーバーを退役後、補助のサーバーとして使われたことは、授業用ネットワークシステム構築のお話(2)の最後に記述があります。

この後joelはjonahに席を譲りますが、それはまた後に。