この記事はQiitaで公開されていました
INSTALL
ソースを取得
$ git clone https://github.com/9fans/plan9port plan9
ソースを取得したディレクトリに移動してビルドすれば終わりです。通常は、git pull
したディレクトリがplan9portのインストール先になりますが、異なる場所にインストールする場合は、INSTALL -r
オプションを使うか、$PLAN9_TARGET環境変数にインストール先パスをセットしておく必要があります。
$ ./INSTALL # または $ ./INSTALL -r /usr/local/plan9
ローカルでカスタムする場合は、リポジトリルートにLOCAL.configファイルを置いておくと、INSTALLスクリプトがそれを読み込んでくれます。LOCAL.configは最終的に$PLAN9/configへマージされます。このファイルには、例えば以下のような値を書きます。
LDFLAGS=-L/usr/local/lib CFLAGS=-pthread SYSVERSION=2.6.x OBJTYPE=x86_64 # 386, power, sparc CC9=gcc FONTSRV=fontsrv
また、リポジトリルートにLOCAL.INSTALLが存在し、実行属性が付いていれば、INSTALLスクリプトはインストールが終わった直後にLOCAL.INSTALLを実行します。これらのファイルは環境に合わせてカスタムする場合に便利だと思います。
いくつか警告が出ますけど無視しても大丈夫。
fontsrvのインストール
各OSのフォントにアクセスしたい場合、fontsrvのコンパイルが必要です。
$ cd plan9/src/cmd/fontsrv $ mk install $ mk clean # 必要なら
9pをマウント
9pファイルサーバをマウントしたい場合、FUSEが有効になっていなければなりません。 MacならMacFUSE(今はOSX FUSE)、LinuxならFUSEを導入してください。
exportfs/9import
まずは実験してみます。
# on Plan 9: % aux/listen1 tcp!*!17007 /bin/exportfs -a -A tcp!*!0
exportfsに-rオプションを与えた場合、initial protocolをスキップするので挙動が変わります。
# on plan9port: $ factotum $ 9import host path mtpt
引数 | 意味 |
---|---|
host | exportfsが動作しているPlan 9ホスト |
path | Plan 9ホスト上にあるマウントしたいパス |
mtpt | ローカルのマウントポイント |
mountと9importは微妙に異なるようで、上記の代わりにmount(9pfuse)を使うことはできません。 使うと"fsversion: muxrpc: unexpected eof"というエラーになります。 fossil等、tcp564なファイルサーバを直接マウントする場合はmountなのかなあと思いますが、試していませんし、 おそらく暗号化しない生のデータを送受信するため内部でのみ使うのがいいと思います。 少なくとも9importは-e clearを指定しない限り暗号化している様子。
OS X
OS Xは/etc/profileに環境変数を定義しても、シェルから起動するコマンドは反映されますが、Dockから起動するようなシェルを経由しないアプリでは/etc/profileが読まれないので定義されません。 また、OS X 10.10(Yosemite)からは、/etc/launchd.confも使えなくなったので、手間ですが自分でLaunchAgentsの設定を定義して、ユーザがログインした時にlaunchctl setenvを呼び出す必要があります。
~/Library/LaunchAgents/com.bell-labs.plan9.plist
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>localhost.plan9</string> <key>ProgramArguments</key> <array> <string>/bin/launchctl</string> <string>setenv</string> <string>PLAN9</string> <string>/usr/local/plan9</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
こうすると、ログイン時に環境変数PLAN9が定義されます。 シェル経由の場合であっても、PLAN9は定義されているのでそのまま使えます。
~/Library/LaunchAgents/com.bell-labs.plan9.fontsrv.plist
あった方が便利なのでfontsrv
も起動しておきましょう。
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>EnvironmentVariables</key> <dict> <key>PLAN9</key> <string>/usr/local/plan9</string> <key>PATH</key> <string>/usr/local/plan9/bin</string> </dict> <key>Label</key> <string>com.bell-labs.plan9.fontsrv</string> <key>ProgramArguments</key> <array> <string>/usr/local/plan9/bin/fontsrv</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
/etc/paths.d/plan9
PATHにも含めたい場合は、/etc/paths.d以下に適当なファイル名でパスを記述します。
/usr/local/plan9/bin
secstore
secstoredは$PLAN9/secstore以下を更新するので、rootで実行する必要があります。daemon型の(自前でforkする)サービスであるため、&
等は不要です。
$ sudo chmod 700 $PLAN9/secstore $ sudo secstored $ secstore -p file -s 'net!localhost!secstore'
/Library/LaunchAgents/com.bell-labs.plan9.secstored.plist
launchdはdaemon型のサービスを扱えないのでsecstored
を管理できません。
ですが、secstored
は(manには記述されていませんが)-v
オプションを与えるとforkしなくなるため、これでlaunchdから扱うことができるようになります。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>EnvironmentVariables</key> <dict> <key>PLAN9</key> <string>/usr/local/plan9</string> </dict> <key>Label</key> <string>com.bell-labs.plan9.secstored</string> <key>ProgramArguments</key> <array> <string>/usr/local/plan9/bin/secstored</string> <string>-v</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>