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

目次

公開日 2023-10-12 更新日 2023-11-09

ここで何を書こうとしているのか

時は1999年末、やっと授業用コンピュータの更新が決まりました。Windows95も普及して、インターネットの体験をさせたいとの声が高まっていた時代でしたが、本校では1988年に導入されたフロッピーディスク起動のものを使い続けていました。

このときにはWindows98SE機を40台入れ、Linuxをサーバーにして移動ユーザプロファイルが使えるシステムを作りました。これは生徒がどのコンピュータを使っても自分の環境で使えるという仕組みです。その後、クライアント機もLinuxにして最初はsmb-mount, のちにはnfsを使ってUNIX系のマルチユーザーシステムとしました。

このシステムの構築のためのメモが残っていますが、読み解くのは意外に困難でした。こちらの知識不足とともに、ソフトウェアの不具合やその改善、仕様変更も絡んで二転三転します。しかも、ある問題が解決したときには次の作業で忙しくなり、記録がおろそかになっています。ソフトウェアの状況も変わっているので検証ができることも限られますので不正確になるかもしれませんが、思い出して書き留めておこうと思います。

授業のシステムに必要なこと

予算の制約があってWindows98SEは妥当な選択でした。当時のLinuxはGUIのデスクトップとして使うのは無理でした。

どちらにせよハードディスクで起動するコンピュータになることで考えなければならないことができます。フロッピー起動では毎回はじめの状態に戻ります。また、課題はフロッピーに保存して提出となりますから、次のクラスに影響が残ることもなく、故障に代替え機をあてがうことも容易です。しかし、ハードディスク起動ではそうはいきません。次のような目標をたてました。

(1)個人が保存するデータはサーバーの個人専用の場所に保存させる
生徒用機は何人かの生徒で共有されます。そのままハードディスクに保存すれば前のクラスの生徒が作って保存したものとぶつかります。生徒が意識しなくても専用の場所に保存されることが必要です。また、他の生徒の作品を盗用できず、他の生徒にいたずらされない環境が必要です。
(2)個人的な諸設定を生徒別にする
わかりやすいところでは壁紙の設定、ローマ字入力とかな入力の切り替えや辞書の学習データ、ウェブブラウザのホームページなど引き続き使いたい環境を自分で設定できるようにします。
(3)別のPCに移っても引き継いで使える
PCの故障のときに代用機をあてがわれても同じ環境で使えると便利です。また、放課後の自習などで他のクラスの生徒と使用機がかち合うときにも、別の機械に移って同じ環境で使えると便利です。
(4)課題提出はサーバーにする
機械が替わっても課題の作成を引き続きおこなえます。教師側も内容確認・評価がサーバー上でできるので課題を集める作業を省けます。
(5)ユーザーの認証はサーバーにさせる
上記の実現のためにはユーザーを特定する必要があります。サーバーがユーザーのリストを持って、なりすましができないようにパスワードで認証するようにします。

Windows95からWindows98に進むに従って、一つのコンピュータを複数のユーザで使用し、それぞれの設定を別々に記憶させることが可能になってきました。家庭での利用を意識してか「ファミリーログオン」と紹介されていたように記憶しています。ユーザーごとの設定をハードディスク内の個別の場所に保存することで実現するようになっていました。これを「ユーザープロファイル」と呼んでいました。ユーザープロファイルの内容とできるものはだんだん増えて、デスクトップアイコンやネットワークコンピュータ、スタートメニューなどを追加するかどうかの設定がGUIで設定できるように変化していきました。

Windows98のプロファイル項目の選択パネル

さらに、WindowsNTサーバーを使えば、このプロファイルをサーバーに保存しておき、ログオン時にコピーして使用し、ログオフ時に書き戻しておくという使い方ができたようです。予算の関係でNTサーバーの導入はできませんでしたが、これをLinuxサーバーで何とかできないかということだったわけです。

当時アスキー出版から「Microsoft Windows 95リソースキット」というマニュアルが販売されていました。マイクロソフトのネットワークだけではなく、NetWareにも言及があって、NTサーバーでなくても何とかなるかもしれないと思いました。マイクロソフトもネットワークの世界ではまだ肩身の狭かったことがわかります。

必要な機能のまとめ

Windowsクライアント時代に2方式、Linuxクライアント時代にも2方式とやり方を換えています。次の3つを念頭に置くと違いがわかりやすいでしょう。

(A)ログイン
使用する生徒を識別するためユーザー名とパスワードで認証する。認証はサーバー側で行う
(B)プロファイル
生徒別の設定をサーバーに保存し、ログイン時に使用する
(C)ユーザーホーム
個人ごとに割り当てたファイルの保存場所

第一期

サーバー環境は、Red Hat Linux 6.1J に samba 2.0.5a。 クライアント機はWindows98SEでした。プロファイルとユーザーホームの両立に問題があり、ユーザーホームはWSHで接続していました。

sambaはLinuxサーバーにNTサーバーの真似をさせるオープンソースlソフトウェアです。実験環境ではslackwareとsamba 1.9.18p2でしたが、本番環境では Red Hat Linux 6.1J と samba 2.0.5a を使いました。

2000年4月からの授業に向けて1月から3月までが準備期間でしたが、サーバーの認証によるログインと、移動ユーザープロファィルの実現にはかなりの紆余曲折がありました。

今から思えば、目星がついてサーバーを本番用のものに交換したときに、管理方式の異なるRedHatに移ったこと、Version2になったばかりのsambaに移ったことに加え、わかりやすく設定できるはずのRedHatのlinuxconfという管理ツールから始めてしまったために、いらない苦労をしてしまいました。sambaの設定ツールであるSWATも含め、「簡単設定ツール」を避けるようになったのはこのときの経験が原因です。

サーバーは X windowを入れずに、日常使いであったWindows98から Tera Term Pro というターミナルソフトで telnet 経由で管理をすることにしました。linuxconfも端末から操作するコマンドで、設定ファイルを編集するというものでした。

第一期のサーバーの設定

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

主要な部分のみ。

[global]
   workgroup = vine
   security = USER
   encrypt passwords = yes
   smb passwd file = /etc/smbpasswd
   domain master = yes
   preferred master = yes
   local master = yes
   os level = 32
   domain logons = yes
   logon script = logon.bat
   logon drive = U:
   logon home = \\%L\%U
   logon path = \\%L\profiles\%U
[netlogon]
   comment = netlogon
   path = /home/netlogon
[profiles]
   path = /home/profiles
   browseable = yes
   guest ok = yes
   writable = yes
[homes]
   comment = Home Directories
   browseable = no
   read only = no
   create mask = 0755
   directory mask =0755
   valid users  = %S
   only user = yes
[share]
   path = /home/share
   write list = adachi,otawa
   guest ok = Yes

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

ユーザー登録とディレクトリ整備

ユーザー名とパスワードの一覧を作り、perlスクリプトで一括してサーバーに登録しました。ユーザーの登録はunixユーザーの登録と共にsambaユーザーとしての登録も必要です。最初にsambaを試したときにはunixユーザーだけでよかったのですが、暗号化パスワードの採用と共にsamba用の登録が必要になりました。パスワードをそのままネットワークに流すのは盗聴される危険があるということで、暗号化して送信することになったのですが、その方式がそれぞれ異なるためにこのようになったということです。

このユーザー名のリストに従って、サーバー上にディレクトリ(フォルダ)を予め作成しておく必要があります。これもperlスクリプトでやりました。たとえばalphaというユーザーには /home/profiles/alpha と /home/alpha を作ります。

スクリプトについては後で詳しくのべます。

/home/netlogon に置いたlogon.bat

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

zebedeeはサーバーのhostname。 1行目は時刻の同期です。

2行目のshareは生徒用の読み出し専用の共有。実際には使うことはありませんでした。

最後の net use /home は、本来は net use * /home とすべきものです。これでは /home にしたドライブを表示するだけです。正しく指定するとうまく行かなかったのかもしれません。この時期の記録を探しましたが、無効にしている版もあり定かではありません。ここがうまく行かなくて次のWSHを使ったはずです。

/home/netlogon に置いたWSHスクリプト(w1.js)

var ObjNet;
ObjNet = WScript.CreateObject("WScript.Network");
ObjNet.MapNetworkDrive("N:","\\\\zebedee\\" + ObjNet.UserName);
WScript.Echo("\\\\zebedee\\" + ObjNet.UserName);

ObjNet.UserNameはユーザー名です。たとえば、alphaというユーザーなら、\\zebedee\alpha という共有を Nドライブとして接続するという指定です。

WScript.Echo()はただやったことを表示するだけ。

/home/netlogon に置くシステムポリシーファイル CONFIG.POL

Windows上で作成して/home/netlogonにコピーします。Windows側からは \\zebedee\netlogon にあるように見えます。

システムポリシーファイルは、Windowsにポリシーエディタを追加インストールして次のように作成します。

1.
 [通常のユーザー]-[コントロールパネル]-[ネットワーク]で、
 「[ネットワーク]コントロールパネルを制限する」をチェック
2.
 [通常のユーザー]-[シェル]-[制限]で「[ネットワークコンピュータ]から
 [ネットワーク全体]を削除する」をチェック
3.
 [通常のコンピュータ]-[システム]で「実行」をチェック。
 さらに、起動時の実行プログラムの記述を追加。
 追加は名前を適当にAddNetDriveなどとし、上記のWSHスクリプトを値として指定する。
  具体的には wscript \\zebedee\nelogon\w1.js と記入

内容は、ユーザーのコントロールパネルへのアクセスの制限や、起動時の自動実行の指定です。

ポリシーエディタの設定は CONFIG.POL という名前で保存されます。これは、ログオン時に取り込まれてレジストリの一部になります。

/home/profiles/<username> に置く USER.DAT

Windows上でテストユーザーを使っていろいろ設定した際にできたUSER.DATを全部のユーザーのprofilesディレクトリにコピーします。

実際には /home/profiles/moto/ などに格納しておき、新規ユーザーを登録するときにコピーします。

alphaというユーザーを登録するには、/home/profiles/moto/をまるごと/home/profiles/alpha/としてコピーします。Windows側からは \\zebedee\profiles\alpha などにあるように見えます。これはユーザープロファイルの一部としてユーザーが変更可能なもので、デフォルトの設定を配布するという意味です。

レジストリについて

機械やソフトの諸設定を一手に引き受けて記録するデータベースのようなもの。windows3.1時代の .INI ファイルのようなテキストファイルではないが、下記の3つのファイルに分けられて保存されている。

このうちUSER.DATはユーザーの好みの設定で、ユーザープロファイルとして保存される内容。CONFIG.POLが強制する内容という位置づけになっている。

SYSTEM.DAT
ハードウェア関連の設定とその機械特有の設定
c:\windows\ に置かれる
USER.DAT
ユーザーの権限、デスクトップの設定などユーザープロファイルにあるユーザー特有の情報
c:\windows\ または、c:\windows\profiles\<username> ネットワークではユーザーのホームディレクトリに置かれる。
CONFIG.POL
システムとユーザの設定に関するポリシー情報。ポリシーエディタを使えば作成され、前者2つより優先する。
ネットワークサーバーのログオンディレクトリに置かれる。無い場合もある。

ユーザーホームの設定がおかしい

ユーザーホームについての設定が一貫していませんね。後々、マイドキュメントをネットワークドライブにしていますが、これまでの記述ではそうなっていません。w1.js により、N:ドライブができ、ユーザーalphaならば 'zebedee'のalpha(N:) というドライブが C: D: の次に並びます。しかしこれだけではマイドキュメントになりません。もともとsmb.confの「logon home = \\%L\%U」がログオン時のユーザーホームの指定で「logon drive = U:」がそれをU:に割り当てるという指定のように見えます(実はこれはNT用て98では働きません)。

第一期の設定のときには、Windows98の仕組みとしてマイトドキュメントがどこになるのかを把握できていませんでした。上に掲載した図をもう一度掲示しますが、個人的に使用したい項目(つまりはユーザープロファイル)の選択にマイドキュメントフォルダがあります。

Windows98のプロファイル項目の選択パネルの再掲。マイドキュメントが選択肢にあることを見てほしい

ここで選択した項目は、c:\windows\profiles\<username>\ に対応するフォルダが作成されてそこに格納されます。これが domain logon になっていると、\\zebedee\profiles\<username>\ にコピーされ、ログオンとログオフのときに同期されます。つまりマイドキュメントはユーザープロファイルの一項目で、ユーザープロファイルのコピーされる場所をユーザーホームと言っているようなのです。これが混乱の元であったようです。

「My Documents」を、ユーザープロファイルの項目として選択すると、ユーザーがalphaならば Windowsでは 'c:\windows\profiles\alpha\My Documents' になり、サーバー側では '\\zebedee\profiles\alpha\My Documents' と同期されます。マイドキュメントには大きなファイルも置かれる可能性が高いですから、授業が終わって全員がログオフするタイミングで、一斉にコピーされるというのはまずい設計なので、これは指定から除きました。その代わりに、ネットワークドライブをマイドキュメントにできれば、生徒が保存するタイミングがまちまちになるので、アクセスが短時間に集中しないと考えたのです。しかし、logon home と logon drive そして、net use u: /home などではうまく行かず、WSHでネットワークドライブをドライブ名(N:など)で指定し、マイドキュメントの位置をそのドライブにすることで実現しようとしたのです。

ここで解説した設定ファイルの内容は3月21日あたりの記録にあるもので、全体を総合すると不要な設定があったりドライブ名が異なったりしています。授業の始まる4月10日あたりまではまだ日があります。この後変更があったか、多少矛盾したままでも動いたのかわかりませんが、正確な記録がないのでこのままにしておきます。次の年の改訂ではきちんとした物になります。

最終的なマイドキュメントはこれ

設定は疑問が残っても実際の接続は記録があります。6月になって作成した、生徒に画像を保存する場所を説明する図があります。次の図がそれです。

授業で示したマイドキュメントの位置。最終的な接続がこれで判明する

この図ではユーザーは架空のN8hogeになっています。\\zebedee\N8hoge が U:ドライブに接続されていて、それが「マイ ドキュメント」になっていることがわかります。

\\zebedee\share は U: ではなく、S:になっています。

使用した画像処理ソフトのデフォルトの保存場所がソフトのインストールディレクトリ内のImagesフォルダになっていて、変更しようとすると、ディレクトリツリーが表示されるのですが、マイドキュメントが隠れていて「zebedeeのN8hoge」が先に見えるのでこの説明図を作ったという次第です。

というわけで、smb.conf, logon.batとw1.jsは次のようになっていたのではないかと推測されます。

推測のsmb.confの [global] セクションの要点

domain logons = yes
logon script = logon.bat
logon path = \\%L\profiles\%U

推測の logon.bat

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

推測の WSHスクリプト(w1.js)

var ObjNet;
ObjNet = WScript.CreateObject("WScript.Network");
ObjNet.MapNetworkDrive("U:","\\\\zebedee\\" + ObjNet.UserName);
WScript.Echo("\\\\zebedee\\" + ObjNet.UserName);

実はsambaの仕様にも変更があって(たぶんWindowsにも変更があって)齟齬が生じていたようです。sambaの次のバージョンのマニュアルでそれが明かされます。つまりは正しくはないけれど、総合的には結果としてうまくいっていたということらしいので、これ以上追求しないことにします。

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

以上、ユーザープロファイルとマイドキュメントを分け、ユーザープロファイルは logon path で指定し、マイドキュメントはネットワークドライブとしてU:に接続してマイドキュメントに指定するという構成になりました。

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

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

プロファイルはログオンとログアウトで相互にコピーして同期します。ログアウト後もデータがクライアント機に残ります。

もしも全部のクライアント機にログオンしたことのあるユーザーがいれば、全部のクライアント機の C:\windows\Profiles にデータが残ります。

逆に図にある gamma の様にサーバーに登録されたユーザーであっても、それを使ったことのないクライアント機にはプロファイルデータは残りません。

マイドキュメントは、サーバーに直接読み書きし、クライアントとは同期しません。つまりどのクライアント機にもデータは残りません。

Windows98SEの設定

授業前の設定はサーバーだけではありません。クライアント機となるWindows機の設定も必要です。

実習室に納品されたWindows機は、通常にプレインストールされたWindowsマシンと同様で所有者を入力し、プロダクトコードを入力する必要がありました。40台ありますが、この時代は一つずつやるしかありません。ついでに次のような設定をします。

(*1)により、マイドキュメントが U: になっていたのかもしれない。

(*2)(*3)は重複している気もするが、Windowsが98SEにバージョンアップするときに [パスワード]の項目をそのままにして、[ユーザー]の項目を作ったということらしいので念のために両方やっておく。プロファイルには[My Documents]は加えない。

Windows98のコントロールパネルに[パスワード]と[ユーザー]という機能が似た項目がある

[パスワード]から入ったときの選択

[パスワード]から入ってプロファイル項目を選ぶパネル

[ユーザー]から入ったときの選択

[ユーザー]から入ってプロファイル項目を選ぶパネル

ユーザー名

移動ユーザープロファイルのために、ユニークなユーザー名が必要になります。加えて、なりすましを防ぐためにパスワードが必要です。

ユニークである必要から、学籍番号のようなものになりがちですが、自分の名前のほうが嬉しいものです。

しかし、さすがに全校で同姓同名の管理をするのは大変です。そこで、ローマ字で表した名前に入学(転入)時のHR名と年度の下一桁を加えて作ることにしました。

例えば

n8hanako

n:登録時のクラス名。本校ではa,b,c,d,…です。

8:入学年度の下一桁。ここまでで、同姓同名の管理はHR単位ですればよいことになります。10年経てば同じユーザー名があっても良いとします。

hanako:生徒の名前または名字から6文字をとります。多少長くても問題ないのですが、いろいろな都合で全部で8文字にしています。

本校の歴史的理由からひらがなのよみをローマ字に変換するプログラムを作っていたのでこの発想は自然でした。

文字の打ちやすさから、全部小文字とします。漢字をいれないのはOSの制約と、文字コードの問題です。当時はWindowsがShift_JIS、LinuxはEUCで運用していました。いつの頃からかWindowsも最初のユーザー登録で日本語モードがデフォルトでONになりましたが、実はそれは別名で、裏では英字からできたユーザー名を使っていました。教員のsambaサーバーへの接続で支障がでて判明しました。

パスワード

英字と数字からなる8桁の文字列を自動生成しました。当時キーボードが初めてという生徒もいたのでShiftキーの使用を避け、l(エル)と1(いち)など判別しずらいものは片方しか使わないこととしました。

生徒には名刺より少し小さい紙に「氏名、ユーザー名、パスワード」を個別に印刷したものを配布し、最初の時間に暗記するように指導しました。パスワードは管理者が知らなくても運営ができるし、そうするのが正しいと示すために、パスワードの一覧表をつくらず、パスワードを忘れた場合は再設定して知らせるという方針にしました。運用してみると忘れたと申し出る生徒が多く、流石に手間なのでパスワードの一覧を隠し持っておき、知らせることにしました。それでも一月ぐらいすると落ち着きます。

当初は生徒が自分でパスワードを設定することを考えたのですが、単純なパスワードにしないようにするのが厄介な上、unixユーザーとsambaユーザーのパスワードの同期も必要だし、忘れてしまったときの対処が管理者による再設定となり、授業進行の妨げになるので断念しました。

乱数でパスワードを作るBASICプログラム(自作)を作りました。英字候補を文字列として与えています(abc順でなく、キーボードの並びです)。候補を文字列で表すことで候補に入れない文字を簡単に設定できます。

また、数字よりも英字が多く選ばれるように候補をつなげています。出来上がった8文字が英字だけ、または数字だけであったときには修正される様になっています。

一度走らせると40人分のパスワードがranpas.txtというファイルになります。

ranpas.BAS 乱数を使用したパスワード生成プログラム(F-BASIC v6.0)
''ransuu ni yori password o tsukuru
TRUE=(1=1):FALSE=not TRUE
randomize val(mid$(time$,4,2))+val(mid$(time$,7,2))
KOUHON$="1234567890"
KOUHOA$="zxcvbnmasdfghjkqwertyuiop"
KOUHO$=KOUHOA$+KOUHON$+KOUHOA$
KLN =len(KOUHO$)
KLNA=len(KOUHOA$)
KLNN=len(KOUHON$)
NMAX=40
WORDLEN=8
DFILE$="ranpas.txt"

open DFILE$ for create as #2
  for N=1 to NMAX
     PAS$="":NEXIST=FALSE:AEXIST=FALSE
     while len(PAS$)<WORDLEN
        I=0:while (I=<0 or I>KLN)   :I=int(rnd*KLN+1)    :wend
        P1$=mid$(KOUHO$,I,1)
        if NEXIST=FALSE then if instr(KOUHON$,P1$)>0 then NEXIST=TRUE
        if AEXIST=FALSE then if instr(KOUHOA$,P1$)>0 then AEXIST=TRUE
        PAS$=PAS$+P1$
     wend
     if NEXIST=FALSE then 
        I=0:while (I=<0 or I>WORDLEN):I=int(rnd*WORDLEN+1):wend
        J=0:while (J=<0 or J>KLNN)   :J=int(rnd*KLNN+1)   :wend
        mid$(PAS$,I,1)=mid$(KOUHON$,J,1)
     else if AEXIST=FALSE then 
        I=0:while (I=<0 or I>WORDLEN):I=int(rnd*WORDLEN+1):wend
        J=0:while (J=<0 or J>KLNA)   :J=int(rnd*KLNA+1)   :wend
        mid$(PAS$,I,1)=mid$(KOUHON$,J,1)
     endif
     print    PAS$
     print #2,PAS$
  next
  ''s$=input$(1)
close #2
end

作られるファイルの例です。

8ydq6din
hjrmr0kd
t8wc1gxr
jdbtu4j8
....

ユーザー登録スクリプト

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

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ユーザー登録

Linuxサーバーのユーザー登録ですが、unixのOSの形式ということで、unixユーザー登録と呼ばれているようです。

自作のperlスクリプトです。ユーザー名, パスワード, コメント(姓名をローマ字で)をスペース区切りで書いたASCIIテキストファイルを読み、useradd コマンドを使ってユーザーを登録をします。

スクリプトの名前がptestなのは、動作testのつもりのスクリプトがそのまま本番用になってしまい、名前にtestがついたものがアカウント登録用のperlスクリプトという括りになってしまったというだけです。Linuxなんだから.plなどという拡張子をつけたくないという心理も働いたような気がします。

ptest:unixユーザー登録スクリプト
#!/usr/bin/perl
print "add new user\n";

# $filename="nampasyy003.txt";
# $def_group="g981";

# $filename="nampasyy002.txt";
# $def_group="g991";

$filename="nampasyy.txt";
$def_group="g981";

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 $def_group $uname`;
    open(CMD, "| /usr/sbin/chpasswd > /dev/null");
    print CMD "$uname:$password\n";
    close(CMD);
}
close(SFILE);

$def_group は主グループ名で、この時は学年ごとにしていますが、使うことはありませんでした。ほどなく ユーザー名と同じ名前のグループ、つまり「ユーザープライベートグループ」が一般的になるので、指定しないようになります。

スクリプトの解説

(2)sambaユーザー登録

Linuxサーバー機で働くsambaサーバーへのユーザー登録ですが、sambaユーザー登録と呼んでunixユーザー登録と区別します。unixユーザーを登録していなければsambaユーザーは登録できません。

これも自作のperlスクリプトです。ユーザー名, パスワード, コメント(姓名をローマ字で)をスペース区切りで書いたASCIIテキストファイルを読み、smbpasswd コマンドを使ってユーザーを登録をします。

sptest:sambaユーザー登録スクリプト
#!/usr/bin/perl
print "set samba passwd\n";
# $filename="nampasyy003.txt";
# $filename="nampasyy002.txt";
 $filename="nampasyy.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);

スクリプトの解説

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

ptestで使ったユーザー一覧ファイルを読み、新規ユーザー名のフォルダを作り、雛形ユーザーのプロファイルをコピーし、パーミッションを設定する perlスクリプトです。

雛形ユーザーのプロファイルは /home/profiles/moto/ に入れてあります。

主グループ名を学年ごとにしています。$def_group がそれですが、使うことはありませんでした。ほどなく ユーザー名と同じ名前のグループ、つまり「ユーザープライベートグループ」が一般的になるので、$uname:$def_group は $uname:$uname になります。

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

# $filename="nampasyy003.txt";
# $def_group="g981";

# $filename="nampasyy002.txt";
# $def_group="g991";

 $filename="nampasyy.txt";
 $def_group="g981";

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

授業開始

ネットワークは1ギガビットのネットワークでしたが、接続の遅れを感ずることはありませんでした。学校のネットワーク利用では教師の号令で一斉に何かをすることが多く、突風が吹くような使い方になると心配したのですが、それほどではありませんでした。ただし、ここに紹介しなかったインターネットへの接続はダイアルアップルーターでのADSL接続でしたのでそこそこ遅かったのですが、校内のサーバーにsquidというプロキシーサーバーをいれてキャッシュしましたのでイライラしない程度には使えました。

普通高校に教科「情報」が入るのは2003年度から。この年の授業は学校設定の科目としてのものでした。

テキストはhtmlで自作して校内のサーバーに置いて生徒がログオンした自分のコンピュータから見られるようにしました。予算の関係でプロジェクターなどを用意できなかったので、これは苦しかったのですが、おかげでテキストはそのまま残っています。

ウェブページ仕立ての授業テキストのもくじ

当時はキーボードを触るのが初めてというのが大半で、マウスの操作も、ウインドウ操作も説明が必要でした。

Linuxサーバーを使っているので、校内にミニインターネット環境があるわけですから、最終的にhtmlでウェブページを作成して校内で公開するとか、メールを送受するなどの体験からその仕組みに触れてもらおうという方針を決めました。

授業が進むに従い書き加えていきましたから、1年目は最初からこの分量ではありません。使用したソフトウェアなどについては、ページを改めて書きます。