続Gshell

開発:さて、UDPでデータ転送の件は一段落したので、gshellに戻りたいとおもいます。

基盤:というかさっきから扇風機の風が生暖かいと思ったら、室内が32.6度に達しています。

社長:この扇風機がなかったら我々は終わっていますね。ありがたいことです。

経理:3万円の扇風機… 100日間使って一日300円、1000日使っても一日30円。

基盤:10年は使わないと割にあわないですね。

社長:エアコンを平均500W一日24時間30日回し続けたら、360kWh。25円/kWhだとすれば9,000円/月です。実際以前夏場はそれくらいかそれ以上の料金上積みでした。まあそれでも、飲み代2回分より安いわけで、気にしてなかったんです。

経理:会社の経費の基準は飲み代ではないですからね。

基盤:今はアマゾンセール$5がコスト比較原器です。

開発:最近はでんこ家計簿が超お楽しみコンテンツになりましたが、もう200W程度で下限で安定してしまっていて面白くなくなりました。

社長:200Wって、ちょっとしたソーラーパネルでできちゃいますよね。日中はそれでいけちゃいそうな気もしますが。

基盤:アマゾンで見ると、パネル自体は100Wで1万円というところですね。大きさは1m x 50cm くらいので扱いやすいかなと。

社長:うーん、ここはなまじヒサシが深いですからねぇ。屋上におかせてもらえると良いのですが…

開発:でも、元が取れるとかどうかではなくて、遊びとしては面白いですよね。そのためにはベランダに置いたほうが良いと思います。

社長:一応災害時への備えとかにもなりますしね。

* * *

開発:まずは gsh の現状版。v0.0.4です。

開発:現在Goで574行。

基盤:Cで書いている部分が700行を超えてますが。

開発:それはshell自体の機能というより個別の外部コマンドです。あと、システムコール周りとか、Cなら簡単に書ける部分も多い。

社長:全部Goで書いたほうが移植性は良いと思いますが。

開発:我々はUnixとWindows以外への移植性を考える必要は無いと思います。DeleGateはCで書かれましたが、Windows でも LinuxでもMacOSでもBSDでも、どこでも動きますよね。使っている外部のライブラリはOpenSSLとZlibだけで、しかも動的リンクのオプショナル。問題ないと思います。

社長:まあ、Cプログラムのビルド環境がデフォでは無い場合もあるし、バイナリ配布が必要になりますね。

開発:DLLで配れば良いのかなと思います。

基盤:しかし、コマンドライン入力部分をCで書いているのはユニークかなと。

開発:tty の処理はもう何十年前からCで書いてなれてますし。要はttyというプロセスとgshellで通信するのが、端末も遠隔に出来て良いのではないかと思うわけです。

社長:ttyとネットワークで繋がるということは、要はリモートシェルになるわけですね。

開発:リモートであるとかローカルであるとかは見えなくなると思います。あるいは、一つの端末を複数のshellの間でattach/detachする。gshell自体はずっとマシンの中で生き続けていて、それにつなぐだけです。ログインに時間がかるような事もありません。

社長:ずっと状態が残っているのは便利ですね。

基盤:一種の仮想マシンのような状態なわけですね。

開発:gshellというのは基本は永続的なサービスとして生きていて、thin client的なクライアント、例えばtelnetから接続する感じかなと思います。

社長:複数同時に動いているgshellの間のネットワークを作って、横方向にも協調させると良いですね。それ自体が、アプリケーションレベルのVPNのような世界を作る。

開発:あとはファイル空間ですね。仲間のgshellが見ているファイルシステムを他のgshellでも見える。これは、NFSをgshellのネットワークで中継すれば良いかなと思います。実際、何でもできちゃうログインをしたいわけではなくて、単にそのホストにあるファイルをみたいだけということが多いです。だから、ログイン的なセッションを張っている間だけ、互いのファイルがマウントされて見えるようなのが良いかなと思いますね。便利だし、安全性の面でも。まあ要するにプライベートな automount 的な。

基盤:unfs3に出会う前は、open/read/write/close といったファイル関係のシステムコールを動的ライブラリで置き換えるって話でしたよね。

開発:その線も捨ててはいません。適材適所かなと。

社長:Gshellにtelnetで接続する様を是非見てみたいです。それ、最優先で。

基盤:macOSってtelnet無いんですよね。インストールしないと… えっと… brew install telnet。15秒でインストール完了です。

開発:ええええええええ!ずっと不便だと思いながら耐えてきたのに…

会社:もう身体にしみついちゃってるから、無意識に telnet って打っちゃいますよね (笑)

* * *

開発:とこで、フランクフルトにsshでログインするのに4秒以上かかるのがすごいストレスなんですが。

基盤:まあ汎用にできてるでしょうから色々ネゴしているでしょうね。1ネゴに0.5秒掛かるわけで。

社長:じゃーん。そういう時のために、私が昔作ったリモートシェルサーバはいかがでしょうか?実は昔の名残で、全ライトセール機でサーバ自体は動いているのです。あとはファイアーウォールを通してもらえれば。

基盤:ポート番号は?

社長:ごにょごにょ…

基盤:では、我社のIPアドレスからだけ、TCPを通します…

開発:しかしライトセールって、日本語のわかるスタッフ雇ってないんでしょうね。ここでもてにをはがおかしい。

社長:なにせ安くあげるのが至上命題でしょうからね。我々もその恩恵を受けている。サービス提供では人件費が一番金を食う。

基盤:はい、全ライトセール機のファイアウォールを設定しました。

社長:それでは、さっそく。えーと使い方は、ああ、単にホスト名を指定すれば良いのでした。ではログイン。

基盤:なんかさくっと入りましたね。

社長:まあ、入った後は、キー入力のエコーとかは0.5秒かかるのはどうにもならないですが。RTT 0.25秒ですから。

開発:ちょっとログインの所要時間を測ってみましょう。

開発:4秒は耐え難いですが、1秒はまあありですね。1秒ということは、認証に2往復しているんですね?

社長:yysh に -fv オプションを付けると、HTTP風なメッセージのやりとりが見えますよ。まあ繋がると同時に両側から情報を出せばもう一段高速化はするかと思います。

基盤:普通に使えるんですか?

社長:昔はsshサーバとかほとんど無かったし、これで何年も暮らしてました。X Windowも中継しますよ。何段でも多段中継して。

基盤:TCPコネクションは一本なんですか?

社長:そうです。YYMUXという自作のマルチプレクサーです。

開発:暗号化は?

社長:鍵交換は自作のDiffie-Hellmanです。当時はOpenSSLがまだ広くは普及してませんでしたしね。というかSSLeayでしたけど。暗号化はCredhyというこれも自作のストリーム暗号アルゴリズム(^-^)

開発:鉄壁ですねw

社長:では思い出しがてら、デモをば… ドイツ支所に居るxeyesでつくば本社内を監視させてみます。

フランクフルトからつくば本社内を監視するxeyes

基盤:おおぅ。一応カクカク追随しますね。

社長:まあ、RTTが250msなもので。

開発:なんにしても長距離でキーのエコーとか遅延がどうにもならないですから、エディタ的なインタラクティブなものは手元で動かして、ファイルシステムだけ遠方のをマウントするという事になるでしょうね。

社長:せっかくなので、我社世界5拠点を数珠つなぎに一周してみたいですね。

基盤:では各サイトのファイアウォールをそのように設定…

社長:では、東京>オレゴン>フランクフルト>ムンバイ>シドニーを一巡りしてみます。えい。

基盤:3秒で帰ってきました。なかなかですね。

開発:これって、通過したところでそれぞれにトンネルを作りますよね。一本のシリアルバス状のトンネルを作ると、通過した地点の間のVPN的なものができると便利かなと思います。

基盤:それって乗り合いバスというより、乗り合いタクシーみたいですね。

社長:面白いけど、隣以外と通信する時にいちいち多段中継されるのでは、遅延が厳しい気はしますね。何かスター状のバスもはらないと…

開発:たぶん、リフレクタ的なバスをどこかに作って、そこに対するアクセス許可をシリアルバスで順次申し伝えするって感じですかね。

社長:アクセス権の面でも、そいつがどこからどうやって来た馬の骨かがわかると、面白い管理ができるかも知れません。

開発:ドメイン名システムができる前のUUCPのパスアドレスを思い出します。

社長:ドメイン名が今みたいな商売になるとは当時は全く想像しなかったですね。

開発:そもそもインターネット、IPがこんな風に一般社会の基盤になるとは。

社長:まあ、なるといいなとは思ってましたけどね。

— 2020-0809 SatoxITS