2020年現在、ユーザが作成したPlan 9関連ソースコードの多くは9p.io/contribでホストされています。9p.ioは元々、ベル研の公式サイトが不安定だった頃に、ドキュメントやWikiが読めなくて困るので善意でミラーを行っていただけでしたが、公式が消滅してからは事実上のオフィシャル扱いになっていますね。
Contribディレクトリ以下には、9p.ioに登録されたユーザごとにサブディレクトリが用意されていて*1、これらの読み込みは匿名ユーザ(none)でも可能ですが、ファイルを書き込むためには当然アカウントが必要になります。しかし9p.ioにアカウントを作る方法は、おそらくどこにも書かれていません。今回、自分のディレクトリを作ってもらったので、メモも兼ねて公開します。
アカウント作成
アカウントを作るためのフォームなどは何も用意されていません。なので9p.ioを管理されている@0introさんに直接メールしましょう。@0introさんのメールアドレスをここで公開するのは穏やかではないので、GitHubや9fans MLなどから調べてください。依頼するときの文章は、この程度で大丈夫でした。
Hi, David.
Please would you create my account (id: lufia) on 9p.io/contrib?
おそらく善意での運用なのでのんびり待ちましょう。自分のアカウントを作ってもらった時は1ヶ月ほど経ってから返信がありました。
認証ドメインの追加
アカウントが作られたら、/lib/ndb/localに認証ドメインを追加します。
authdom=9p.io auth=cetus.9grid.fr
これでPlan 9端末の設定は終わりです。
マウントする
次のコマンドで、9p.ioの正式なユーザ権限で9p.io/sourcesを/n/sourcesにマウントできます。
% srv -a 9p.io
% mount /srv/9p.io /n/sources
このコマンドの途中で、今回作ってもらったユーザ名とパスワードの入力が必要です。入力すればいいだけですが、とはいえ接続のたびに毎回パスワードを入力するのは面倒なので、factotumまたはsecstoreに入れておくと良いでしょう。
% echo 'key proto=p9sk1 role=client dom=9p.io user=lufia !password=xxx' >/mnt/factotum/ctl
factotumに入れておくと、認証が必要な時はfactotumが自動で行ってくれるようになるので便利ですね。
contribディレクトリの使い方
現在Plan 9 Wikiへの反映は止まっていますが、他の誰かが見る場所なので、以下のルールは守っておいて損はないと思います。
READMEとINDEX
ユーザディレクトリ直下にREADMEとINDEXファイルを置きましょう。READMEはContrib indexページの各ユーザごとにあるテキストに使われるもので、作者情報やライセンスなどを書きます。最初16行までが認識されます。INDEXは公式WikiのContribページによると、パッケージ名と説明を1行ごとに書き並べるファイルです。
package_name: Description here
package_nameはcontrib/$USERからのファイル名またはディレクトリ名です。その後にコロンで区切ってパッケージの説明を書きます。例えばディレクトリの内容が
. |-- patch | |-- cpp.diff | `-- il.c `-- git-credential-factotum `-- mkfile
の場合、INDEXはこのようになります(通常は英語で書きますがこの記事では雰囲気だけ)。
patch/cpp.diff: Cプリプロセッサのパッチ patch/il.c: ILをIPv6対応したもの git-credential-factotum: Git credential helper
コーディングスタイル
公開するソースコードやパッチなどは、どちらもPlan 9コーディング規約を守っておくと良いですね。
contrib/install
fgbさんによって作られた、Contrib以下のツールをインストールするためのスクリプトです。バイナリを公開する時は、これに対応しておくと喜ばれます。実際はreplica(1)のフロントエンドになっているようですね。
contribをGitリポジトリのremoteにする
contribディレクトリはマウントして使うので、通信が遅いことを除けば通常のファイルと何も違いがありません。だいたいこんな雰囲気です。
% cd /n/sources/contrib/lufia/git-credential-factotum % git init % cd $home/src % git clone -l /n/sources/contrib/lufia/git-credential-factotum % git remote add 9p.io /n/sources/contrib/lufia/git-credential-factotum % git push 9p.io