Plan 9

分散システムのインストール

2006年10月30日更新

Plan 9は、各端末や認証サーバでさえも、 ファイルサーバをルートファイルシステムとして扱えます。 ちょっと手間ですし、いくつか認証サーバ構築の時と 同じ設定をしなければいけませんが、 一度やってしまえばディスクレス運用も可能になるのでオススメです。

以下、認証サーバとファイルサーバを切り替えながら構築していきます。 プロンプトでどちらの作業か分かるように書いていく予定です。

# 認証サーバ、ホストオーナー
#

# 認証サーバ、一般ユーザ
%

# ファイルサーバ、configモード
config:

# ファイルサーバ、通常モード
fs:

配布ファイルの展開

現状、Installing a Plan 9 File Serverにあるwrap/instコマンドがありません。 9fansで調べるとproblems installing the plan9 distribution on fileserverというのがあったので、それに沿って対応。

% 9fs sources
% bind /n/sources/plan9 /n/dist
% srv fairy
% mount -c /srv/fairy /n/inst
% cp /n/dist/dist/replica/inst /dist/replica (#instが無かったので作成)
% chmod +x /dist/replica/inst
fs: create /dist sys sys 775 d
fs: create /dist/replica sys sys 775 d
fs: create /dist/replica/ndist sys sys 775
fs: create /dist/replica/client sys sys 775 d
fs: create /dist/replica/client/plan9.db sys sys 664
fs: create /dist/replica/client/plan9.log sys sys 664 a
% replica/pull -v /dist/replica/inst

cpu/auth: nvramの設定

最初の立ち上げ時に聞かれます。 自分で呼び出す場合はauth/wrkey。

authid: bootes
authdom: mana.lufia.org
secstore: xxxxx    # bootesは使わないけど、とりあえず設定
password: zzzzz

ファイルサーバ: cronの準備

fs: create /sys/log/cron sys sys 666 a

ファイルサーバ: secstoreの準備

fs: create /adm/secstore adm adm 775 d

ファイルサーバ: cpu/authで使うファイルの編集

cpu/authからファイルサーバをマウントして作業。 このあたりは認証サーバのインストールそのまま。

% 9fs $fileserver
  • /rc/bin/termrc (# 端末がなければどうでもいい)
  • /rc/bin/cpurc
  • /adm/timezone/local
  • /lib/ndb/local
  • /lib/ndb/auth
  • /rc/bin/^(service service.auth) # cpurcから変更されるので作業はない

補足として、secstoreを有効にするために、 cpurcのauth/cronの次行に、auth/secstoredを追加しています。

ファイルサーバ: /bin/cpurcでmvの行を有効にしたなら

fs: newuser sys +bootes

cpu/auth: plan9.iniの設定

# 9fat:
# cd /n/9fat
# ramfs
# ed plan9.ini
# unmount /n/9fat

plan9.iniの必要なところだけ抜粋。

bootfile=sdC0!9fat!9pcauth
bootargs=il -g x.x.x.x ether /net/ether0 y.y.y.y m.m.m.m
fs=z.z.z.z
auth=y.y.y.y

だいたい分かるかと思われますが、いちおう。

x.x.x.x
デフォルトゲートウェイ
y.y.y.y
いま構築している認証サーバ のIPアドレス
m.m.m.m
y.y.y.yのマスク
z.z.z.z
ファイルサーバのIPアドレス

cpu/auth: 再起動

# fshalt
# ^t ^t r

/rc/bin/service/^(il566 tcp567)が無くてエラーになるけど、 目的はサービスの無効化なので無視

ファイルサーバ: ユーザの作成

fs: newuser lufia
fs: newuser adm +bootes

bootesをadmに所属させない限り、 auth/changeuserの結果を保存できません。

cpu/auth: ユーザの作成

# auth/changeuser -p bootes  (# パスワードはnvramと同じにする)
# auth/changeuser -p lufia

cpu/auth: 認証でadmとsysをはじく

# cat >>/lib/ndb/auth
hostid=bootes
    uid=!sys uid=!adm uid=**
^D

cpu/auth: secstoreの設定

# auth/secuser -v lufia
# echo 'key proto=p9sk1 dom=mana.lufia.org user=lufia !password=xxxx' >/mnt/factotum/ctl  (# 最初のdrawterm接続のため)

drawtermで接続テスト

secstoreに何も保存されてない場合、 secstoreパスワードを入力するとエラーになるので、空にしてログインする。

drawterm -a wisp -c wisp
user[none]: lufia
password: xxxx
secstore password:

lufiaの環境設定

% /sys/lib/newuser

これで、メールやらなにやらのファイルが作られます。

lufiaのsecstoreに、drawterm他用のアカウントを保存

ファイル名をfactotum以外にすると、次回ログイン時に secsotreがremote file factotum does not existsとエラーを吐くので注意。

% ramfs
% cd /tmp
% echo 'key proto=p9sk1 dom=mana.lufia.org user=lufia !password=xxxx' >factotum
% auth/secstore -p factotum
% rm factotum

ちなみに、すでにアカウントが保存されている場合はこちら

% ramfs
% cd /tmp
% auth/secstore -g factotum
% echo 'key proto...' >>factotum
% auth/secstore -p factotum
% rm factotum

cpu/auth: 再起動して動作確認

# fshalt

ファイルサーバ: 後始末

drawtermでlufiaがログインできるのを確認してから後始末。 というのも、(たぶんkeyfsの)停止時に/adm/keysに書くため、 bootesadm権が必要だから。

fs: newuser sys -bootes
fs: newuser adm -bootes