VIVER

gfxboot

SUSEのインストールCDに使われているグラフィカルなブートローダは、「gfxboot」と言うものだと判明。 開発元もSUSEらしい。 syslinux/isolinxuやGRUBにパッチになっている模様。 分かってしまえば使うのは簡単だろうと思っていたら、それは大間違いであった…

XML

Long Name案 <Service> <Name>name-of-servce</Name> <Version>0.1</Version> <Release>-1test1</Release> <Summary>Summary of the service</Summary> <Summary lang="ja_JP">サービスの概要</Summary> <Dependency> <Service>service1</Service> <Service oldest="0.1">service2</service></dependency></service>

toramオプション実装完了

とりあえずできた。 オンメモリ爆速起動。

GETBLKSIZE64

GETBLKSIZE64とNBDの組み合せではまる。 uint64_t size; fd = ::open(getNodePath().c_str(), &size); ioctl(fd, GETBLKSIZE64, &size);エラー処理は省略。 NBDは、接続が完了前にioctlをやると失敗する。 失敗するのは良いのだけど、エラーを返さないで、ヘ…

近々の予定

1. toramオプションの実装 2. VIVERのパラメータ出力の各言語バインディングの実装(とりあえずsh&javascript/Cでパースしやすい形式、後でPython/Rubyを追加?) 3. プラグインシステムの依存関係&適用順制御モデルの設計 4. プラグインシステムのメタデー…

デモディスク

MacBookが予想外に早く返ってきて、Parallelsが使える。 Gigabit Ethernetだと500MBのディスクイメージも数秒で送れる。スバラシイ。 よしよし…これは良い。 今のところMacBookも落ちないし、順調順調。 ん?500MBのディスクイメージが数秒で送れるというこ…

例外設計

例外処理の設計を変えてみた。例外が発生してシェルを起動した後、ユーザーからのコマンドを受け取って、 パラメータを与えてリトライ/パラメータを設定して無視/まったく無視 ができるようにするための布石。 同時にやたらと長い(500行くらい)main()を例…

悩ましい

うーむ…一応動くようにはなったけど、他にもいろいろとやりたいことが。 Multicast DNS + DNS-SDでNBDサーバーを検出 これはすぐにできると思うので、やる。 NBDサーバーが2つ以上見つかったときに、ユーザーに聞くのは良いのだけど、そのインターフェースは…

ディストリビューションテスト 結果

テスト完了。 起動に成功したディストリビューション: Fedora Core 5 openSUSE 10.1 Ubuntu 6.06 Progeny Debian 3.0 PR2 Vine Linux 3.2 Momonga Linux 3 いゃ…マシンの負荷がとてつもなく大きい一日でした。ほぼ常に圧縮かインストールかコピーかしている…

ディストリビューションテスト

今「VIVERはディストリビューション非依存である」を実証しようということで、いろいろなディストリビューションにviverrd.gzを組み込んで起動するテストをしている。 ディストリビューションを1つインストールするごとに3GB、ディスクイメージの作成時にさ…

ext2resizeが遅い

モジュールの読み込みの並列度をもうちょっと高めたら、ちょっとだけ早くなった。VMwareだと効果がパッとしないけど、いろんなハードウェアがたっぷり装着されたマシンでは、結構効果が出るのではなかろうか。 で、今度はext2resizeが遅い。 前はファイルシ…

本体ほぼできた

pivot_rootでパスが役に立たなくなる問題は、結局マウントポイントのパスをpublicにする(と言うか、setとgetを両方作る)ことで解決。…まぁいっか。 pivot_rootは本当にあまりに天変地異過ぎる。絶対パスが絶対じゃない。 pivot("/sysroot", "/sysroot/init…

cow溢れ 2

とりあえず用語を決めてみる。 元データファイル = FixedImage(←ディスクイメージ(losetupするとブロックデバイスになる) 書き込み可能領域 = ShadowScreen(←ファイルシステム) 書き込み可能領域に置く、差分データファイル = ShadowImage(←ディスクイ…

cow溢れ 1

MacBookが修理に行ってしまった今日このごろ、デスクトップマシンの直Linuxで開発中です。 cow溢れが悩ましい。 VIVERでは読み取り専用のディスクに対して書き込み可能な状態をエミュレートするために、いわゆる「Copy-on-Write」を使って、どこか別の書き込…

Zeroconf

そろそろネットワーク周りのところに差し掛かってきたので、Zeroconfについて計画を練らないと。 VIVERはローカルエリアネットワークがターゲット、と決めてしまっているので、Zeroconfは極めて便利。極めて便利。便利なんです。 Zeroconfと総称してしまうと…

インテリジェントな検出

しまった。昨日書きかけのままだった。本日は、昨日の「1. /proc/bus/pciを使う」の方法でPCIの自動検出ツールを実装完了。 まず/proc/bus/pci/devicesを見ると、接続されているPCIデバイスすべての情報がカーネルから出力される。 1行につき1デバイスで、1…

PCIデバイスの自動検出を

いろいろネットで調べていると、どうやら/proc/pciの情報はアテにならないらしい。カーネルのバージョンアップで消されるかもしれないと。 実際、私が使っているカーネルが出力する/proc/pciは、標準的カーネルが出力する/proc/pciと全然違うことが判明した…

devicemanager.cc

class DeviceManager { std::list<DeviceNode> m_node_list; std::list<DeviceNode*> m_optical_device; std::list<DeviceNode*> m_hdd_device; std::list<PhysicalDevice> m_known_device;clas DeviceNode { major_t m_major minor_t m_minor std::vector<const char*> m_not_tested_fstype; std::string testMout(void);ブ…</const></physicaldevice></devicenode*></devicenode*></devicenode>

pipe.cc device.cc

ようやくマルチプロセスでマルチスレッドな泥沼になってしまったProcessクラスを再設計。 パイプからread()システムコールで読み込む前に、fcntl()システムコールでO_NONBLOCKフラグを設定しておくと、「読み込もうとしたけど、まだ書き込まれていない」とき…

display.cc

本日はメッセージ出力を管理するクラスを再設計、書き直し。 Display display(); display.error() << "Message " << "output" << std::endl;のように使って、エスケープシーケンスを出力してからメッセージを出力することにしていた。 以前のDisplayクラスは…

SimpleDetect

むむ。日記にブランクが。 しかし開発にブランクがあったわけではなく。 ということで、ハードウェア自動検出ツールを開発。SimpleDetect。 PCIデバイスやUSBデバイスは、自分のVendorIDやDeviceIDをアナウンスしている。それらのIDと、カーネルのコンパイル…

vi process.cc; make

またしてもprocesss.ccを。 forkした子プロセスの標準出力と標準エラー出力を親プロセスでぶんどって、ごにょごにょやろうという処理。 pipeをぶんどった後、そこからread()し続けてstringstreamにどんどん入れていくスレッドを立ち上げる。stringstreamにな…

ハードウェア自動検出

libkudzuを直接使ってやろうと思い、hwsetupを自分なりに書き直してみた。(私にはhwsetupは非常に解読しにくい… kudzuは、どうやらpci.idsファイル(PCIデバイスが教えてくれるIDと、ベンダー名や概要文などのデータベース)を読み込み、ベンダー名などを教…

差分保持

差分保持について備忘録メモ。 今のVIVER(version 0.2)では、データの書き込みを疑似的に再現するために、読み取り専用の元データに対して、ブロックデバイスレベルの差分を保存することで対応している。 ブロックデバイスレベルというところは諸刃であり、…

vi process.cc

今日一番多くタイプしたコマンド、vi process.cc。…いや、lsかな? ということで、今日はVIVERのプログラミングをごそごそと。その前に昨日のIMAPサーバーの続きも。 pipeのforkのexecのreadのwaitpid。ファイルディスクリプタ、何故にistreamやostreamでは…

プラグインメモ

今日ACな溜り場(WORDとも言う)でごちゃごちゃと話していたことをメモ。 落ちない仮想サーバー HypervisorのXenには、「Live Migration」という機能がある。これはあるホストで動作しているVMを、物理的に別のホストに「VMを止めずに」移動させることが出来…

目標列挙

そろそろVIVERを開発再開したい。というか、する。VIVER本体は、結局RubyもC++もやめて、C書くことにになりました。ごっそり作り直すことになるので、ここで目標を列挙してみます。 いろんな人々の協力で、いろんなことできそうです。 VIVER本体 ・新構想に…

言語 RubyかC++か

シェルスクリプトは、もうイヤなんです。ということで、言語を変えて全部書き直すわけですが、言語の選択がこの先に大きな影響をあたえるはず。 今の自分のスキル(CとPHPしかやったことないんですけど...)から考えて、C、C++、Ruby、Javaが考えられます。ま…

計画崩壊1

久しぶりになってしまいました。バージョン0.2.5を出そうと言うことでいろいろとやっていたのですが、一気に0.3に飛びます。 cloopには移行しない。SquashFS 3.0を使う デバイスノードでデバイスを管理することに、そもそもムリがあるんじゃないか x86_64に…

zlibに落ち着く

今日はlzoをSquashFSで使えるようにしようと、かなりがんばっていたのですが、技術不足であります…。lzoは高速圧縮・高速展開に焦点を合わせた圧縮アルゴリズムで、圧縮率は低めですが、zlibと比べて特に圧縮速度は圧倒的に速いです。今後の記録メディアや、…