Logo address

配布ファイルの更新

目次

Plan9 の配布版の更新の方法はバージョンを重ねるに連れて変化している。
第4版ではベル研のサーバのファイルシステムをマウントし、それをコピーする方法になった。ここではその方法について解説する。
解説は以下の順に行う。

  1. 利用者登録
  2. /lib/ndb/local の設定
  3. replica/pull
  4. /dist/replica/client/plan9.log

利用者登録

更新を行うにはベル研のサーバ(sources.cs.bell-labs.com)への利用者登録が必要になる。登録は
	http://plan9.bell-labs.com/plan9dist

	Create an Update Account
のメニューがあるので、そこから行う。
ユーザ ID とパスワードをメモするのを忘れないこと!

/lib/ndb/local の設定

/lib/ndb/local に以下のタプルを追加する
	authdom=outside.plan9.bell-labs.com
		auth=sources.cs.bell-labs.com
この設定を見て分かる通り、配布サーバ sources.cs.bell-labs.com は認証サーバを兼ねている。(複数の認証サーバを持っており、これは外部者(outside)専用のものであろう)

replica/pull

/dist/replica/network の中の
	fn servermount {  XXX  }

	fn servermount {
		srv tcp!sources.cs.bell-labs.com sources /n/sources
		bind /n/sources/plan9 /n/dist
	}
に改める。さらに、
	/n/sources
を作成しておく。これでベル研の配布サーバをマウントできる。
	term% 9fs sources.cs.bell-labs.com /n/sources
	post...

	!Adding key: dom=outside.plan9.bell-labs.com proto=p9sk1
	user[arisawa]:
	password:
	!
	term%
実際、
	ls /n/sources
を実行すると
	/n/sources/adm
	/n/sources/contrib
	/n/sources/extra
	/n/sources/plan9
が表示される。/n/sources/plan9 以下に配布ファイルが置かれている。
配布ファイルに基づいてシステムを更新するには
	disk/kfscmd allow
	replica/pull /dist/replica/network
を実行する。すると例えば次のようになるであろう。
	term% disk/kfscmd allow
	term% replica/pull /dist/replica/network
	post...
	386/9pc.gz: locally created; will not overwrite
	386/bin/ftpfs: locally modified; will not overwrite
	386/bin/upas/ratfs: locally modified; will not overwrite
	...
	sys/src/9/pc/usbuhci.c: locally modified; will not update
	sys/src/9/boot/libboot.a8: locally created; will not update
replica/pull はユーザが変更したファイルを更新しない。その場合には単に更新しなかったと言う旨のメッセージを出すだけである。それらを更新するには replica/pull に s オプションを付ける。
(一旦は s オプションなしで実行し、その後で更新を必要とするファイルにに対して個別に s オプションを指定するのが良いであろう。)
	term% replica/pull -s /dist/replica/network sys/src/9/pc/usbuhci.c
マニュアル replica(1) によれば
	/bin/replica/pull [-cnsv] name path
となっておりパスは1個のみと思えるが、/rc/bin/replica/pull を見ると
	usage: replica/pull [-csnv] replica-name [paths]
と書かれており、パスは複数形になっている。そして実際に複数のパスが許される。

/dist/replica/client/plan9.log

ファイル /dist/replica/client/plan9.log には更新された配布版の記録が載っている。この記録は、クライアントの現在のファイルが配布されたものであるか否かの判断に使用される。(配布時のアクセスモードやオーナー、グループ情報なども含まれる)
従って他のコピーツール(cp や cpdir) を使って更新しても、後に replica/pull を実行した時に未配布扱いになる。
	注釈: cpdir は筆者によるディレクトリツリーをコピーするツールです。
	http://plan9.aichi-u.ac.jp/netlib/
	に置かれています。