2011年12月3日更新

Plan 9のアップデート

似たような記事がファイルサーバのインストール にもありますが、こちらはPlan 9環境全体のアップデート。 あちらはken fsソースそのもののアップデートになります。

fs環境で使っていると、/dist/replica/networkが うまく動いてくれません。fossilもkfsも無いからね。 なので、replicaするには自分で設定ファイルを作ります。

fs: create /dist/replica/inst sys sys 775

以下が/dist/replica/instの内容。

#!/bin/rc

# Generic plan9 installation template.
# Assumes that distribution CD or sources
# is mounted at /n/dist, and should be installed
# to /n/inst.

s=/n/dist/dist/replica
serverroot=/n/dist
serverlog=$s/plan9.log
serverproto=$s/plan9.proto
fn servermount { status='' } 
fn serverupdate { status='' }

fn clientmount { status='' }
c=/n/inst/dist/replica
clientroot=/n/inst
clientproto=$c/plan9.proto
clientdb=$c/client/plan9.db
clientexclude=(dist/replica/client)
clientlog=$c/client/plan9.log

applyopt=(-t -u -T$c/client/plan9.time)

実際にreplicaするときは以下のように。 ファイルサーバ側でallowするのを忘れないように。

% mount -c /srv/boot /n/inst
% 9fs sources
% bind /n/sources/plan9 /n/dist
fs: allow
% replica/pull -v /dist/replica/inst

以上でアップデートが行われます。 とても時間がかかるので、ゲームでも遊びながら待ちましょう。

pullに-vオプションを与えると詳細が表示されます。 このとき出てくる文字は、

a
追加
c
ファイル内容の変更
d
ファイルの削除
m
メタデータ(パーミッションとか)の変更
!
競合しているので変更しない

のようになっています。 競合した場合、サーバのファイルで更新したいときは、 全体のアップデートが終わった後で以下のように書きます。

% replica/pull -s sys/src/9/pcflop /dist/replica/inst

これでしばらく待つと、/sys/src/9/pcflopがサーバのもので更新されます。 競合が複数ある場合は、-sオプションを必要なだけ使って指示します。

% replica/pull -s file1 -s file2 /dist/replica/inst

終わったら後始末。

fs: disallow
% unmount /n/dist
% unmount /n/sources
% rm /srv/sources
% unmount /n/inst