Inferno-mount

local_hostとremote_hostをつなげるほーほー(mount)

inferno日記を参考にしました。

1. IPアドレス登録

local_hostとremote_hostの両方で

/services/cs/db
  $SIGNER  your_authentication_server

をそのinfernoが動いているマシンのIPアドレス(ホスト名でも可)に置き換える。

2. ユーザ作成

shell上で
  % changelogin USER_NAME(作成するユーザ名)
とし、ユーザを作成する。この時、パスワードなども訊かれるので適当に。

  ; changelogin shirou
  new account
  password: 
  confirm: 
  expires [DDMMYYYY, return = 12072004]: 
  free form info [return = ]: 
  change written

同様なことをlocal_hostおよびremote_host上でおこなう。

3. 通信用鍵の作成

remote_host上で

  % lib/createsignerkey USER_NAME(先ほど作成したユーザ名)
とする。エラーがなければそのままプロンプトが返ってくる。 これでそのユーザ専用通信用鍵が作成された。

二回目以降は、この作業はする必要はありません。

  % lib/srv
  % netstat 

とする。

  ; lib/srv
  ; netstat
  tcp/0      shirou     0.0.0.0!6669         0.0.0.0!0
  ; Announced
  tcp/1      shirou     0.0.0.0!6668         0.0.0.0!0
  ; Announced
  tcp/2      shirou     0.0.0.0!6666         0.0.0.0!0
  ; Announced
  tcp/3      shirou     0.0.0.0!6672         0.0.0.0!0
  ; Announced
  tcp/4      shirou     0.0.0.0!6673         0.0.0.0!0
  ; Announced
  tcp/5      shirou     0.0.0.0!6671         0.0.0.0!0
  ; Announced
  udp/0      shirou     0.0.0.0!2202         0.0.0.0!0
  ; Announced
  % getauthinfo default

save in file [yes]: yes がでると終了。しかし、その後続けて作成するようになるのでctrl-Dを 押して終了させる。

  getauthinfo: can't write certificate to /usr/shirou/keyring/default:
  file does not exist

と言われるようだったたら、ファイルおよびディレクトリを作成する(touchな どを使用)。

  ; getauthinfo default   
  use signer [hogehoge.jp]: 
  remote user name [shirou]: 
  password: 
  New client (/dis/lib/logind.dis): /net/tcp/7 XXX.XX.XX.XX!1638
  save in file [yes]: yes
  getauthinfo: can't write certificate to /usr/shirou/keyring/default:
  file does not exist
  use signer [hogehoge.jp]: ; 

途中まではremote_hostと同様

  % lib/srv
  % netstat                                             
  % getauthinfo default
と入力。

getauthinfoで

  use signer [XX.XX.XX.XX] 
と言われたら、 remote_hostのIPアドレス(あるいはホスト名)を入力

そうすると、remote_host上で

  New client (/dis/lib/logind.dis): /net/tcp/6
  local_host.ip.address.!49979
と出てくるはず。 これでlocal_hostとremote_hostがつながりました。

4. Mount

あとはlocal_host上での作業です。

  ; ls /n/remote
として、/n/remoteというディレクトリになにもないことを確認。
  % mount tcp!(remote_hostのIPアドレス) /n/remote  

でmount。

再度

  ; ls /n/remote
して、remote_hostの/が見えることを確認しましょう。

ちなみに、remote_hostの方では

  New client (/dis/lib/styxd.dis): /net/tcp/6
  local_host.ip.address!49984
と出てきます。

5. umount

local_hostで

  % unmount /n/remote
でmountを解除しましょう。umountではないことに注意。unです。

remote_hostの実行ファイルをlocal_hostで動かす。

可能です。

  % /n/remote/tmp/reversi
  % /tmp/reversi

などしてみてください。 どこかで実行ファイルを作成すれば、あとはmountすればどこでも 実行可能になるのです。

local file systmをmountすることってできないのかな?

Infernoからローカルのネイティブな資源を利用したいときは、

  1. ネイティブな資源にアクセスするビルトインモジュールを書く。
  2. ネイティブの資源へのインタフェースになるデバイスドライバを書く。
  3. ホストOSで動くStyxをしゃべるファイルサーバを書く。 のどれかだと思われ。 参考は http://www.topica.com/lists/inferno/read/message.html?mid=806567930&sort=d&start=547

古い話だけど、ホストで ftp サーバ起動して ftpfs する。