2011年3月3日木曜日

wikifs + acme wiki

wikiを導入してみました。

参考: Inferno Wiki

すでにwikifsが組み込まれているacme-sacにて作業。

ローカルwiki

wikiの元になるディレクトリを用意。
空だとうまくいかなかったので、
このへん
から作成済みのディレクトリを持ってきた。

wikiディレクトリを/usr/USER/lib/wikiとして配置。


mount {wikifs -d $HOME/lib/wiki} /mnt/wiki

とする。
こうすると、/mnt/wikiにwikifsがマウントされる。
この状態でAcmeからアクセス可能。

acmeでWikiを記述し、中クリックするとWikiインターフェースが起動する。
カバーページがまず表示されるので、それを編集し、putすると更新される。
Newすると新規ページが作られる。
一行目にnameをつけてputするとその名前のページが作成される。
リンクは[名前]とする。
右クリックでジャンプ。

段落以外の改行はputの時に取り除かれるようだ。ちょっと面倒。

wikiをウェブで公開

wikiをウェブで公開可能。
/services/httpd/root/wikiディレクトリをつくっておく。
先程の/sys/lib/wikiの直下のファイルをそこに置いておこう(ウェブでwikiを編集するときに使われる)。


bind /mnt/wiki /services/httpd/root/wiki
svc/httpd/httpd &

とすると、wikiがhttp://ホスト/wiki というアドレスで参照可能となる。

ブラウザでアクセスするとカバーページが見える。
編集機能も使えるっぽいが、編集後のジャンプ先のページのURLがおかしいのと、
日本語が化ける問題がある。
ブラウザからは閲覧のみがよさそう。

ウェブ上のwikiをacmeで直接編集


ndb/cs
mount -9 tcp!plan9.bell-labs.com!wiki /mnt/wiki


とすると外部公開されているplan9のwikiがマウントできる。
編集はさすがに試していないが、ジャンプは可能だった。

自分で同じようなことをする場合は、


ndb/cs
listen -A tcp!*!wiki {export /mnt/wiki &}

とかするといいのかな?(公開するのは$HOME/lib/wikiじゃないよね?)

所感

なかなか使えそうなので使ってみよう。
分散してストアしたいが、それは今後の課題とする。
通常のhosted inferno、native infernoでもやってみる予定。

2011年2月27日日曜日

libinterp.aが見つからない

Native infernoをクロスビルドしようとすると、libinterp.aが見つからないと
言われることがある。
その対処法がなんとなくわかったのでメモ。

mkconfigを編集する。


SYSHOST=Linux
SYSTARG=Inferno
OBJTYPE=arm


などとする。
Linuxの上でarmのnative infernoをビルドする設定ね。


cd libinterp
mk install


とすると、Inferno/arm/libにライブラリがインストールされる。
なるほど。

2011年2月4日金曜日

Kuro-sheeva(sheevaplug)でInferno

どうしてもARMのNative Inferno環境が欲しくなったので、玄人志向のkuro sheevaを買ってしまいました。
コンパクトで非常にcoolです。

linuxにはそれほど興味はないので、いきなりinfernoを動かします。

○ビルド

過去の日記参照。
ビルド環境は、アットマークテクノで提供しているATDE3というVMware用のイメージを
つかわせてもらった。とても便利。

○シリアルの用意

windowsでつなぐことにした。
sheevaplugのサポートサイト?からドライバを持ってきてインストール。
kuro sheevaとUSBで接続すると、kurosheevaはUSBシリアルに見える。

なお、USBコントローラーはFTDIで、シリアルのブリッジをしている。
kuro sheevaがおかしくなったとしてもシリアルは無事の可能性が高い。
電源を切るとFTDIも落ちるのでちょっと不便だけど、こういった構成は今後も使われるであろう。

シリアルコンソールはteratermを使用した。
何でもいいんだけど。

○ubootでtftpブートの設定。

あらかじめPCではtftpを立ち上げておく。
poor tftp serverがとても良い感じ。
PCはIPアドレス192.168.12.12を割り当てておく。PCとkuro sheevaはEtherで直結。
ビルドでできたuisheeva.gzを持ってきて、
tftpのルートに置いておく。

kuro sheevaを立ち上げるとlinuxが立ち上がってしまう。
rootでログインし、shutdown -r nowでリブート。
hit any keyと言われるのでキー入力すると、ubootのコンソールに入れる。

そこで、

setenv ipaddr 192.168.12.11
setenv serverip 192.168.12.12
setenv bootfile uisheeva.gz
saveenv
tftpboot
bootm

とすると、一瞬でinfernoのシェルが現れる。


Inferno Fourth Edition (20101127)
Vita Nuova
conf sheeva (1293936724) jit 0

kirkwood 88F6281-A0

mvfeat 0x41410000
l2: on, ecc off, mode writethrough
icache on, 16kb, 4-way associative, 32 byte lines
dcache on, 16kb, 4-way associative, 32 byte lines
Initial Dis: "/osinit.dis"
sheevainit...
shell...
;


かっこ良すぎ。

○ネットワーク設定

はて、ネットワーク設定はどうやるのか?

/netrcというスクリプトを用意してくれていた。
dhcpもいけるようだが、今回は固定IPで試した。


sh /netrc


を実行するとstaticかdynamicか聞かれるので、staticと答える。
残念ながらIPは決め打ちになっていて、192.168.12.11が選ばれる。
このスクリプトをみると、ネットワーク設定の方法の参考になる。
マニュアルをみただけでは難しいのでありがたい。

設定を変えようにも、エディタがないので現時点では無理(不可能ではないけど面倒)。

○Telnetで接続

netrcに驚きの箇所が。


ndb/cs
listen -A net!*!telnet {sh -i >[2=1]} &


の一行でtelnetサーバーを立ち上げている。
listenの仕組みで即telnetができてしまうとは。
認証していないのでセキュリティ的にはアレですが。

○リモートファイルシステムをマウント

・kuro sheeva側


listen net!*!styx {export /&}


・PC側
Infernoを立ち上げる。


ndb/cs
mount -A net!192.168.12.11!styx /n/remote


これで設定をacmeで変えられる。

○今後

wikiサーバーでも立ち上げようかと思ったけど、HTTPdは入っていなかった。
その前に、ストレージはどこまで対応しているのだろうか。
wikifsを使った個人用wikiがほしい。
インターネットにさらすのは恐いが。

2011年1月2日日曜日

Inferno 関連PDF

Inferno関連のPDFもあるようです。

inferno programmer's guide

ページが重く感じるのでPDFをダウンロードすることに。
そのためには、、、

・自分の所有するファイルをアップロードする

or

・お金を払う

どちらかをしなければなりません。
悩んだあげく、支援の意味を込めてお金を払うことに。
一度払うとある期間ダウンロードし放題なので、inferno、plan9関連のPDFをすべて落とした。

2011年1月1日土曜日

Infernoでtwitter

明けましておめでとうございます。

冬休みの自由研究の一つにInfernoでtwitterというものがありましたが、
ほぼコーディング無しで実現できました。

直接Twitterにアクセスするのは大変そうだったので、
IRCに変換する公開ゲートウェイをお借りしました(1)。

IRCクライアントはcaerwyn先生のacmeで動くircクライアントを
ベースにしました(2)。

(1) OpenTIG - TweetIrcGateway Hosted Service

(2)inferno programmer's notebook lab 44 - acme irc client

ircクライアントはそのままではうまく動かなかったので、一部修正しました。
コードは

https://subversion.assembla.com/svn/yosinori_public/trunk/limbo/twitter

にコミットしたので、参考までにどうぞ。
readmeja.txtに説明があります。
Acme上でタイムラインの読み込みと、tweetの投稿が可能です。

※本当は直接twitterにアクセスしたかったのですが、
認証とか大変そうなのでひとまずopentigをつかわせていただくことに。
余裕があればtwitter-fsを作るか。

2010年12月24日金曜日

FPGAでCPU作成

電子工作に興味がわきました。

そもそもの発端は
名著「CPUの創りかた」を読んだからです。

http://www.amazon.co.jp/dp/4839909865

本に従い、ロジックICを買ってきて組み立てようかと誘惑に駆られたのですが、
作ってそこで終わりな気がしたので、ちょっと方向を変えることにし、
以前から気になっていたFPGAに手を出すことにしました。

参考にしたサイトは
触って学ぼう FPGA開発入門です。
非常にわかりやすいです。

ちなみに、同じ著者の「【実践】C言語による組込みプログラミングスタートブック」も買ってはみたものの、Cでロジックを書く意味が見いだせず、こちらはお蔵入りとなりました。

上記サイトにて使用されているEDX-002を購入し、サイトの記述に従って
実際にやってみました。
わからないことはいろいろありますが、まずはLED制御がなんとなくできるようになりました。

わかった気になったので、CPUをつくることにしました。
アーキテクチャは「CPUの~」の設計(TD4)をそのままつかわせてもらいました。
命令セットが見事です。

で、ごにょごにょやっていると、なんとなく動くものができました。
まだバグがあり、
・入力ポートが動かないっぽい
・クロックが適当
という不具合があるものの、
プログラムが動き、LEDが点滅しました。
すばらしい。

ソースは公開しておきますか。

https://subversion.assembla.com/svn/yosinori_public/trunk/fpga/spartan2/cpu1/

cpu.vがソース。たったの187行。
FPGAって楽だなぁ。

ハードのことがわからない人間がFPGAの知識もほぼない状態で
CPUを作るとこんな感じになる、というモデルケースの一つとして参考にしてください。

次なるステップは
・実用的なCPUを作る(設計も自分流に)
・既存のIPコア、picoblaze or pacoblazeを試す
・シリアル通信などのハード制御をしてみる。
あたりですかね。

ゆくゆくはdis VMをハードウェア化したプロセッサを作ればな、
などと考えてはいますが、
disの命令セットが一筋縄では実装できなさそう。
forkとかあるみたいだし。

2010年12月12日日曜日

Inferno 関連書籍

書籍をいくつか購入したのでまとめ。
こうして見ると結構ある。


Principles of Operating Systems: Design & Applications



http://www.amazon.co.jp/Principles-Operating-Systems-Design-Applications/dp/1418837695

OSについての教科書。じっくり読む価値があると思う。


Inferno Programming with Limbo



http://www.amazon.co.jp/Inferno-Programming-Limbo-Phillip-Stanley-Marbell/dp/0470843527


Inferno 3rdの時の本だが有用とのこと。
4thでの変更に注意しながら読む必要がある。

差分がまとまっている所は見つけられなかったので、自分で作ろうかな。


Inferno (Operating System)



http://www.amazon.co.jp/Inferno-Operating-System-Frederic-Miller/dp/6130282990


Wikipediaの記述をまとめただけという驚きの本。やられた。


Limbo (Programming Language)

(画像なし)

http://www.amazon.co.jp/Limbo-Programming-Language-Lambert-Surhone/dp/6133174110

こちらも、wikipediaの記述をまとめたもの。
嫌な予感はしたが、的中。



〜〜〜以下、購入できず。〜〜〜



Inferno Programmer's Manual


(画像なし)

http://www.amazon.co.jp/gp/product/0953870103


The Inferno Programming Book: An Introduction to Programming for the Inferno Distributed System



http://www.amazon.co.jp/Inferno-Programming-Book-Introduction-Distributed/dp/0470849711