9front

以前にも書いたけど、米原真理さんの本を、ちまちまと読んでいる。今回は『心臓に毛が生えている理由』なんてエッセイに手を出している。

彼女を知って初めて読んだ、噓つきアーニャの真っ赤な真実の本を書いた理由ってのが載ってた。 それによると、自力で昔の級友を探すも手掛かりが得られず、諦めかけていた頃、NHKの番組である、世界・わが心の旅に出てくれませんかと依頼があり、それによって消息が掴めたとか。 その記録を元に、小説を起こしたそうだ。

この番組は評判がよくて、何度も再放送されたとか。NHKよし、作家よし、読者・視聴者よしの 三方佳しの成功例。だったら、オイラーも映像で見てみたいな。2000年の事だから、アーカイブ残って いないかな?

残っていても、単発で見られるのだろうか? NHK友の会とかに入会しないとだめ? それより、ネットを通じてTVを見るってどうよ?

最近は、「遅くて使いものにならない」という光回線への声、定額制も限界かなんて声もあるな。

4Kの映像をかけ流しなんかされたら、帯域がいくらあっても足りない事は目に見えている。 いきおい、従量制で縛りたいってのもISPからすれば、切なる願いだろう。 一部と言うか映像大好き人間のあおりを喰って、FTPとかが不自由させられるのは、頭にくる事だ。

映像とかは、禁止にしちゃえ。ついでに、Windowsの半年に一度の改変も止めてしまえ。 もう、セキュリティのアップデートだけにしろ。何しろupdateする度に遅くなるわ、人の設定を 勝手に壊すはの傍若無人ぶりですから。

以上、ISPの代弁でした。

かけ流ししていいのは、温泉の源泉かけ流しだけです。日本は災害が多いけど、水と温泉には 恵まれているのが救いだな。雪を見ながら露天風呂なんて、至高の贅沢ですよ。

9front

Plan 9経由で、 9frontなんてのを知ったものだから、インストール してみる事にした。

219MのISO.gzを取り寄せ。圧縮を解いたら500M。それをvboxに入れたら、1.2Gになった。 i386で動くんだろうと思って、OSはその他。32Bitを選んであげた。DISKサイズは12G以上に すると拡張のfsになるらしい。

今回はvesaも普通に動いて、グラフィック画面だった。/bin/games/sudoku も普通に動いて まあ、よかったね、の口だ。

マウスでぐりぐりやる事を強要されて、オイラーにとっては心ときめくOSとは言い難い。 sshdを立てて、外部からssh接続すればいいじゃんと思うのだけど、誰もsshdを立てている人は いない。

ひょっとして、 9front tutorials あたりを見て、特殊な操作をするのかなあ? それより、GUIの使い方の初歩を Plan 9初心者ガイド を見て、覚えろよ。

それから、システムの停止方法は、fshalt らしい。こういう本当の初歩は、なかなか探し あてるのに苦労する。

drawterm -a authserver.example.com -c cpuserver.example.com

unix側から9frontに乗り入れようとすると、drawtermを使うのが唯一の方法っぽい。 こやつは、Xのアプリだ。コピペは不可能っぽいんで、うだうだやって結果をHPに張り付ける には向かない。よって、9frontとの戯れは、ここまでにする。なお、drawtermを使おうとすると、 tcp 567 17010 のパケットが通るようにして、9front側でも、cpuをネットに公開するとかの 設定が必要みたいだ。

疑惑

そもそもPlan9なんてOSに目覚めたのは、ITproの記事、『不遇のUNIX後継OS「Plan 9」をラズパイで体験』だった。(前回参照)

この記事では、Plan9ってなってるけど、本当にPlan9の直系のやつかね? 少なくとも2002年頃には、Plan9の開発が終了したはず。それをそのまま、ラズパイに移植したってのは、ちと無理が有るように思うぞ。(オイラーの思い込みなら、スマソ)

そんな折、9frontのfaqにラズパイの記述を発見。

8.9.2 - Raspberry Pi

The most convenient way to use an rpi is to cross compile and install the
arm binaries and the bcm kernel on the network file server,
and then tcp boot the rpi.

For bcm (Raspberry Pi, etc.):
cd /sys/src/9/bcm
mk install # kernel is copied to /arm/9pif

9frontは、現在進行形なOS。ならば、安い石に食指を動かして、世界征服を狙う事も十分に 考えられる。やり方は簡単そうだしね。bin/gamesにも、ITproで紹介されたのと同じものが 鎮座してたぞ。

それにしても、ITproも手を変え品を変えて、色々やるものだ。中身は全くないミーハーな 記事だけどね。

折角 /bin/gamesの下に居るので、どんな奴が有るか確認してみたよ。そしたら、懐かしい life(生命保険のやつじゃないよ)が有った。走らせてみる。

term% life
Usage: life [-3bo] [-d delay] [-r rules] file
term% life hoge
life can't read /sys/games/lib/life/hoge: '/sys/games/lib/life/hoge' does not exist

多分、初期化のファイルが必要なんだろうと思って、適当に名前を設定すると、見てる所をさらけ出してくれた。Tipsと言えないような技ですなあ。

色々なパターンファイルが置いてあったよ。34oscとかsq.11とか。色々と楽しめました。

それにしても、端末の文字が小さいな。こういう時は、拡大眼鏡が必要。/bin/lens を使うと 最大16倍まで拡大したビットマップを拝めるぞ。

plan9の使い道

ちょっと愚痴ちゃったけど、plan9の正当な応用ってどんなのが有るの? ちょいとぐぐったら、情報処理学会の研究報告書が出てきた。

『Plan9 による分散シェルシステム』なんて言うpdfファイルを見ている。 流行りの分散処理。Hakellでもscalaでも、研究されてるんで、ホットな話題なんだろうね。 ビットコインの採掘を、アクセスしてきたWebに肩代わりさせる輩がいて話題になってたしー。

やってる事は、ググル様が昔提唱した、MapReduceね。パイプ記法を拡張して、ユーザーには 負担をかけない状態で、仕事の分割をする。そのために、何個かのコマンド追加と、パーサーを 書いたとな。

なかなか面白いな。

総括の所で述べられているけど、ネットワーク帯域をどう確保するかが分かれ目になるみたいだ。これをとことん突き詰めるて行くと、トーラス構造でコンピュータを接続した、京みたいな スーパーコンピューターになるんだな。

pipe

上の記事にも出てたけど、plan9ではパイプが大活躍するようだ。パイプを使った実験を 下記の方もやっておられた。興味深く読ませて頂きましたよ。

pipe

その中で、listen1を使って、unixとチャットの実験例が出てた。unix側から文字列を 送り、それをplan9側のshellに喰わせて実行させる。 これって、使い道あるじゃん。そう、FreeBSD側から、簡易接続した端末が構成出来るって事だ。

記事をそのまま実行したら、telnet側が付加するCRコードを除去出来ずにエラーになったので、 8進数で除去するコードを指定したよ。

term% cat chat1
#!/bin/rc
tr -d \015 | {prompt='* ' /bin/rc -i}

# aux/listen1 -t 'tcp!*!2323' ./chat1
# telnet Windows-IP 2323    on FreeBSD
# Ctl-] Ctl-D                to exit

Windows10に入れてあるvboxで、ポートフォワーディングしておいて、9frontを起動。 そして、aux/listen1を実行(フサフサポートで聞き耳する)。

それから、VMWare側のFreeBSDでtelnetを実行。接続されても特に何も出てこないけど、コマンドの送信と受信が出来る状態になってる。

[fb11: tmp]$ telnet win-ip 2323
Trying xxx.xxx.xxx.xxx ...
Connected to xxx.xxx.xxx.xxx.
Escape character is '^]'.

pwd
/usr/glenda/bin
ls -l
d-rwxrwxr-x M 26 glenda glenda      0 Jan 18  2012 386
--rwxr-xr-x M 26 glenda glenda    165 Nov 23 15:58 chat1
d-rwxrwxr-x M 26 glenda glenda      0 Nov 20 13:41 rc
^]
telnet> Connection closed.     ;; CTL-D
[fb11: tmp]$

上記は、telnet画面をそのままコピペしたもの。plan9側のプロンプトは残念ながら表示されて いない。

下記は、コピペしたものに、プロンプト(term%)を追加して、少し雰囲気を出したもの。 実行例を豊富に載せて、悪あがきを楽しんでもらう編集方針なので、こういうのも有り かなと思う。

term% netstat -n
tcp  0    glenda     Listen       2323       0          ::
tcp  1    network    Established  2323       56777      10.0.2.2
udp  0    network    Closed       0          0          ::
term% ps -a
  :
glenda          499    0:00   0:00       44K Open     aux/listen1 -t tcp!*!2323 ./chat1
glenda          500    0:00   0:00        0K Wakeme   #I0tcpack
glenda          501    0:00   0:00      148K Await    chat1 ./chat1
glenda          503    0:00   0:00       40K Pread    tr -d \015
glenda          504    0:00   0:00      152K Await    /bin/rc -i
glenda          733    0:00   0:00        0K Wakeme   closeproc
glenda          734    0:00   0:00       92K Pread    ps -a

netstatはunix譲りのコマンドだ。どんなIPアドレスとやり取りしてるか確認出来る。10.0.2.2のアドレスは、vboxのデフォルトゲートウェイアドレスになる。そのアドレスのport2323に パイプが接続。もう一方のパイプは、glendaちゃんのプロセスに接続されているとな。

psの結果の一部も表示させてみた。listen1コマンドがOpenされ、chat1のサブコマンド内の trとかrcは、データが流れて来るのを待ち構えているとな。コマンドの状態表示が、unixの それと違って、説明的で親切だな。

rcコマンドは、-iってオプションを付けている。このオプションは何よ。gaucheにも同じオプションが有ったと思うので、大体想像が付くけど、念のため確認しとく。

          -i         If -i is present, or rc is given no arguments and
                     its standard input is a terminal, it runs inter-
                     actively.  Commands are prompted for using
                     $prompt.

今回は記事に従ってtelnetを使ったけど、OpenBSDみたいにtelnetは安全の為使うなと言う事で 入っていない場合が有る。そんな時は、焦らずにncを使えば良い。尚、plan9への接続はダイレクトに行われ、パスワードの認証も無いので、くれぐれも注意の事。とか言っても、ユーザーが 出来る対応は、フサフサポートと言う想像し易いのを止め、ランダムにポートを選ぶぐらいですかね。(乱数は、どうやって得るんだろう? 要調査の事)

ed sam acme

どうやら上の例で、plan9とのセッションをunix側から採取出来た。次は、プログラマーの必需品である editorだな。どんな物が用意されてるかと言うと、タイトルに記した通り。

edは古の昔からあるやつ。samは簡易版のグラフィックタイプの物のようだ。そして、最後に 登場するのは、 acme(1)だ。viが無いのが不思議。ああ、viはビル・ジョイ 作なんで、plan9には取り込まれなかったんだな。

acmeの使い方を見ていると、edの影を引きずっている事が良く分かる。viの代わりを 務める塩梅なんですな。なんたって、バークレー vs. ATT。もっと言うと、西海岸対東海岸の 戦いですから!

オイラーが当然の如く使うのは、edになるな。これ、完全にCUI対応ですから。普段からこれを 使っておけば、災害訓練にもなりますからね。

とは言え、9frontと戯れるなら、嗜みとしてsam,acmeは押さえておこう。前回入れたplan9port(略してp9p)にも入っているからね。で、これらをちょっと使った感想。オイラーはsamの方がすっきりしてて好き。起動時に編集対象のファイルを指定しておく事。表示エリアでマウスの 右クリックで、ファイルを自由なサイズの窓に表示出来る。欠点は、コピペ機能が、編集対象ファイルに限定される事(sam外のターミナル上のデータをコピペ出来ない)

acmeの方は、要になるメニュー文字列を(誤って)変更出来ちゃう。何だか不安だ。オイラーが 慣れていないだけかも知れないけどね。それに、複数ファイルを指定すると、どんどん表示エリアが少なくなって行く。タイル式なんでしょうがないけどね。

samを試している人がいた。有名な Plan9日記の方。オイラーと趣味趣向が一致するんで、何処かでニアミスしてるかも知れない。

探検

まだオイラーは、plan9に対してはひよっこさん。ググル様のおかげで、多少の知識は得たけど、それだけじゃ何の発展もない。色々と探検して、擦り傷を作ってこそ、血肉になるだろう。 身の回りから探検を始める。という事で、自dirの中に配置されてたものの一部。

term% pwd
/usr/glenda/bin/rc
term% cat riostart
#!/bin/rc
window 0,0,161,117 stats -lmisce
window -miny 130

これ、rioと言うWindowシステムが動いた時の、初期画面を作っているんだな。左上にステータスのグラフ。そのやや下に小さい端末が現れている。windowってのは窓を作るコマンドだな。 分からない時は、manが鉄則。

     RIO(1)                                                     RIO(1)[280/1028]

     NAME
          rio, label, window, wloc - window system

     SYNOPSIS
          rio [ -i 'cmd' ] [ -k 'kbdcmd' ] [ -s ] [ -b ] [ -f font ]

          label name

          window [ -m ] [ -r minx miny maxx maxy ] [ -dx n ] [ -dy n ]
          [ -minx n ] [ -miny n ] [ -maxx n ] [ -maxy n ] [ -cd dir ]
          [ -hide ] [ -scroll ] [ -noscroll ] [ cmd arg ... ]

          wloc

上図の右上にある、280/1028は、FreeBSD側のtmuxでヒストリーモードにした時の行数情報。 9frontのmanはcatされちゃうんで、tmuxで上図にスクロールするのが得策。

で、 どうやら、数字が4つ並んでいるのは、窓の大きさと配置っぽいな。statsとかは、窓内で動かすコマンドと思われる。wlocって、多分、今開いてる窓の位置を報告するのだろう。 左上にステータスって、オイラーの趣味じゃないので、右上に移動。

term% wloc
window -r 3 237 603 539 rc
window -r 864 2 1025 119 stats
window -r 283 54 1008 707 rc 496

これを参考に、statsの窓を移動させておこう。

次は、stats -lmisce の意味だな。

          l load       (default) system load average.  The load is
                       computed as a running average of the number of
                       processes ready to run, multiplied by 1000.
          m mem        total pages of active memory.  The graph dis-
                       plays the fraction of the machine's total mem-
                       ory in use.
          i intr       number of interrupts per second.
          s syscall    number of system calls per second.
          c context    number of process context switches per second.
          e ether      total number of packets sent and received per
                       second.

そう言えば、memoryなんてコマンドやsysinfo(出力が長いので実行例は省略。ハード好きな人は結果を眺めてニヤニヤすべし)なんてコマンドが有るな。

term% memory
total          0.996 GB
total kernel   256 MB
total user     768 MB

used  user     27 MB
used  kernel   1.41 MB
used  draw     2.98 MB

今度は、libの下に有ったやつ。unixで言う、.profileになるのかな。辞書と首ったけになって 翻訳してみろよ。ああ、下記で、$homeって出て来てる。環境変数はunixの流儀だと大文字だけど、plan9は頓着しないのね。環境変数はplan9の流儀だとファイルになってる。

term% cat /env/home
/usr/glenda

catはファイルのありのままを表示するんで、改行は(環境変数には入っていない)行われない。びっくりしないように!

term% cat lib/profile
bind -a $home/bin/rc /bin
bind -a $home/bin/$cputype /bin
if(! syscall create /tmp/xxx 1 0666 >[2]/dev/null)
        ramfs   # in case we're running off a cd
font=/lib/font/bit/vga/unicode.font
switch($service){
case terminal
        if(! webcookies >[2]/dev/null)
                webcookies -f /tmp/webcookies
        webfs
        plumber
        echo -n accelerated > '#m/mousectl'
        echo -n 'res 3' > '#m/mousectl'
        prompt=('term% ' '      ')
        fn term%{ $* }
        rio -i riostart
case cpu
        bind /mnt/term/dev/cons /dev/cons
        bind -q /mnt/term/dev/consctl /dev/consctl
        >[2] /dev/null {
                cp /dev/sysname /mnt/term/dev/label
                if(wsys=`{cat /mnt/term/env/wsys})
                        wsys=/mnt/term^$wsys
        }
        bind -a /mnt/term/dev /dev
        prompt=('cpu% ' '       ')
        fn cpu%{ $* }
case con
        prompt=('cpu% ' '       ')
}

大事なPATHを見ておく。

term% cat /env/path
/bin.
term% xd -b1 /env/path
0000000  2f 62 69 6e 00 2e 00
0000007
term% xd -c /env/path
0000000   /  b  i  n 00  . 00
0000007

path-dirの区切りがunix流のコロンじゃなくて、C語の文字列を連結したものになってるのね。 大胆と言うか、合理的と言うか。。。

term% xd -b1 -c ts.cirno.1
0000000  32 33 39 39 39 39 35 32 33 31 20 36 36 37 20 31
      0   2  3  9  9  9  9  5  2  3  1     6  6  7     1
0000010  20 2d 33 34 33 30 37 39 38 0a 0a
     10      -  3  4  3  0  7  9  8 \n \n
000001b

これが普通のxdの使い方になるか。plan9のrcには、aliasて便利な機構は(多分)無いんだろうな。そういう時は、hexdumpとかの名前で、スクリプトを登録しておくんだろうな。引数は どういう風に受け取ればいいの? 例を探して彷徨ってみるか。どうもplan9のマニュアルの 書かれ方に馴染めないな。

これで、全てを賄っているって事は、unix流の、/sbin,/usr/sbinとかで分ける方式を 止めた訳ね。目的に応じて、/binの下にサブディレクトリを置いて、そこに関連コマンドを 放り込む。ユーザー固有のコマンドは、$homeに置いておけとな。

ls -l /bin | grep d-
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:41 /bin/ape
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/ape
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/audio
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/auth
d-rwxrwxr-x M 26 sys    sys           0 Jan 18  2012 /bin/aux
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/aux
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/bitsy
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/dial
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/disk
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/fs
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/games
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:41 /bin/inst
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/ip
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:41 /bin/ipconf
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/ndb
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/nusb
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:41 /bin/patch
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:41 /bin/postscript
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:41 /bin/rc-httpd
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:41 /bin/replica
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/replica
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:41 /bin/service
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:41 /bin/service.auth
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/upas
d-rwxrwxr-x M 26 sys    sys           0 Nov 20 13:40 /bin/venti

Windows7でも

入れておくかな。VMWareとvboxが御多分に漏れずに入っている。VMWareでも動くかの 検証をするため、そちらを選んだ。

何ら問題もなく入ったよ。起動も速いし快適。

メモリーがきついかと思ったけど、1Gを割り振った。必要になった時に、VMWareがWindows7に 請求するんで、実メモリー消費はわずかな物。

重いアプリは、firefoxってのが実感されますだ。 ああ、plan9にも

term% lookman web
man 1 abaco # abaco(1)
man 1 fedex # fedex(1)
man 1 hg # hg(1)
man 1 hget # hget(1)
man 1 htmlroff # htmlroff(1)
man 1 mothra # mothra(1)
man 1 python # python(1)
man 1 sysinfo # sysinfo(1)
man 1 tinyurl # tinyurl(1)
man 1 torrent # torrent(1)
man 2 html # html(2)
 :

モジラ対抗でモスラなんて言うブラウザーが搭載されてる。重いのかな? それより、fedexって何よ?ヤマト運輸の対抗馬か? 荷送り状のコードトラッキングを してくれるみたい。fedexだけじゃなくて、Upsも有るぞ。米国の佐川便か。独禁法に 抵触しないように、plan9でも気を使っているとな。

pythonの案内が出てきたので、起動したら、2.5.1ですって言ってきたぞ。 何処にも蛇は居るな。アナコンダは、さすがにいないけどね。

fshalt

最初の方で、システムを止める時には、fshalt を実行しますって習った。 これって、読んで字のごとく、ファイルサーバーを停止するって意味だ。 なんで、これがシステム停止に結びつくか?

term% pwd
/usr/glenda/tmp
term% fshalt

halting.../srv/cwfs.cmd...
done halting
term% pwd
pwd: './pwd' i/o on hungup channel

ファイルサーバーが停止すると、端末サーバーやCPUサーバーは全く用をなさなくなる。 上の例だと、最初のpwdは、ファイルサーバー上の/bin/pwdを使えた。サーバーを止めた後は、/bin/pwdが使えなかったんで、端末サーバー上で探したけど、pwdは見つからなかった、という事だろう。

前の方の論文にも有ったけど、plan9は、ファイルサーバー、認証サーバー、複数のCPU(計算)サーバー、複数の端末サーバーをネットワークで結合したものだ。

だから、計算能力が不足してると思ったら、CPUサーバーを増設すれば済む。端末サーバー(CPUサーバーも)はDISKなんて不要。昔流行ったThinクライアントで十分(ネットに接続出来て、キーボートとマウスと表示器という構成)。

認証サーバーを独立させてるのは、頑固なセキュリティが必要だからだろうな。これとて、端末サーバーに毛の生えたような構成で十分なはず。なんたって、アカウントの情報を保持するだけのはずですから(多分)。

ああ、端末と言うとオイラーはRS232Cで接続されたCUIなやつに思いが行くけど、plan9(9front)が要求するやつは、グラフィック端末ね。ここに世代間ギャップが有りますよ。

こうして見ると、スーパーコンピューターの構成のように見えてくるな。近頃発表されて、スパコンのランキングTop500だかによると、スパコンに採用されてるOSは、Linux一色になったそうな。これをplan9とかの勢力で盛り返せないかね?

そりゃダメだろうよ。Plan9には、dfとかfindとかのコマンドが無いからね。要するに、ファイルサーバーの中身は、端末サーバーを使うユーザーは触れる必要無いって言ってるんだ。 その代わり、duコマンドは、お情けで搭載されてるけどね。

etc

仮想ドライブを使ってレジストリを操作する

変数の型は入力値で決まる、環境変数も簡単に操作

パイプを活用して複雑な処理を1行で記述

Plan 9システム管理

Plan9 メモ