Sunday, May 17, 2009

Computer::KUROBOX-PRO - いまさらカーネルの再構築について書いてみる

えー、もうほとんど二ヶ月ちかく前の話になるので、
結構忘れてきちゃってます。
なので、覚えている範囲でちょこちょこと書いておこうと思います。

まず私のやりたかったことは、

・ハードディスクレスでKUROBOX-PROを動かす
・カーネルのCIFSサポートを有効にする
・Postfix/Dovecotを走らせる
・このサイトをKUROBOX-PROで運営

です。結論から書きますと、Postfix/Dovecotはあきらめました(笑
狭いディスクスペースをNASでまかなおうとしたのですが、
パーミッションがどうしてもnobodyになる。
これがPostfix/Dovecotをインストールする際の弊害になってました。
インストール作業を進めると、いろいろエラーをはいてくれるので。

最初にやりたかったハードディスクレスですが、
ようはフラッシュメモリからブートできるようにしたい、というお話。
エレキジャックさんのところを参考にしながらすすめていきました。
(私はDebian化はしてないので)
フラッシュメモリからのブートにはシリアルコンソールケーブルが必要で、
普通に玄人志向のものを購入してもよかったのですが、
いや、ここは自作だろうということで自作しました。
コネクタ部はこちらを参考にしながら、
シリアル・USB変換モジュールにはFT232RLを秋月で購入しました。
ドライバとかが必要なのですが、モジュールの説明書とこちらを参考にしながらPCのセットアップも行いました。
コネクタ部の作成についてですが、誤ってUSBコネクタメスBを購入してしまい、
金具部抽出に猛烈に苦戦しました。
あとはユニバーサル基盤を加工して、コネクタの土台を作成。
(ガラスエポキシは加工が難しい・怪我しやすいそうなので避けました。)
金具、ケーブル、基板を半田付けし、その上からホットボンドで保護。
一応これで完成です。
KUROBOX-PROの底にある、何かはまりそうな穴にブスっとさして使います。
なんとこのコネクタ。
押し込みきると導通しなくなるという(爆
うまい位置で押し込むのをとめないと、うまく通信できません。
自作感満載ですね。

さて、これでKUROBOXとシリアル通信ができるようになったわけです
(通信するときには、ボーレートを115200にすることを忘れずに。。。)。
次にUSBフラッシュからの起動ですが、
これはハードディスクブートのセットアップ手順と同じで、
気をつけるべきはu-boot環境変数。
エレキジャックさんとこでも書かれていますが、
rootreadyを書いておかないとうまくブートできません。

2GBのフラッシュメモリを用意して、
フラッシュメモリからブートできるようにセットアップしていきます。
ここらへんの作業はごちゃごちゃやってて記憶が薄いのではしょります。
あーでもエレキジャックさんとこはDebian化してるのが前提で、
私は最初っから入っているLinuxを利用。
この、フラッシュメモリからのブートでも何か引っかかったような・・・
すいません、記憶があやふやです。

フラッシュメモリからブートできるようにしたら、
次はカーネルのCIFSサポート有効化です。
これがホント悩みました。
Debian化だのGentoo化だの、Fedora化だのしていれば楽勝だったんでしょうけど。
なんせKUROBOX付属の開発環境ではカーネルの再構築ができない。
ドキュメントにのっていたクロスコンパイル環境を構築しても
何か変なのです。
運よく起動しても、pingが返ってきたり来なかったりという現象に遭遇。
だ、だれか素の状態のLinuxでカーネルを再構築している人いませんかぁぁぁ
と探しまくってたら、まぁクロスコンパイル環境を構築している人自体少ない。
んなことせずに、とっととDebian化しろ、って話でしょうか。
いや、屈しないよ私は!と探しに探したところ。
BUFFALOのNASをハックしよう!というサイトでしょうか。
海外サイトですが、こちら(Buffalo @ NAS-Central)にクロスコンパイル環境の構築方法が記載されていました。
クロスコンパイル環境を構築するOSは、
私のWindowsマシン上でVMware Playerを使って走らせたFedoraに構築しました。
FedoraはWeb上にあった仮想マシンイメージを使ってます。
(ここらへんの話はhttp://www.still-ai.net/blog/2009/02/computerkurobox-pro.htmlでも書きました)
このFedora上に、上記のクロスコンパイル環境を構築。
devioがFedoraに入っていなかったので、Webから適当に探してきてインストール。
あとはCIFSサポートを有効にして、
Buffalo @ NAS-Centralに掲載されている手順でビルドすればOKです。
(追記:エレキジャックさんとこに記載のとおり,カーネルにパッチを当てないと
 コンパイルできなかったことを忘れてました)

で、ですよ。
ちょいちょいカーネルをビルドしては起動を試していては
フラッシュメモリの寿命を縮めていくので気持ちが悪い
(知れてるかもしれませんけど)。
TFTP経由でカーネルイメージをダウンロードしてきてブートですよここで。
TFTPDをWindowsにインストールして、NAS上にカーネルイメージをおき、
TFTPDで公開するフォルダをカーネルイメージを置いたフォルダにする。
という妙ちくりんな構成にしてあります。
ここでTFTPDマシンのIPアドレスを192.168.1.2、
KUROBOXのIPアドレスを192.168.1.4として、
私のKUROBOXのu-bootの設定は下記のようになりました。


baudrate=115200
loads_echo=0
rootpath=/nfs/arm
cpuName=926
CASset=min
MALLOC_len=4
bootargs_end=:::DB88FXX81:eth0:none
ethact=egiga0
ethaddr=00:16:01:A4:F0:99
buffalo_ver=BOOTVER=1.091
build_time=18:10:02
initrd=initrd.buffalo
kernel=uImage.buffalo
nand_uImage_offset=20000
def_tftp=tftp $(default_kernel_addr) $(kernel); tftp $(default_initrd_addr) $(initrd); setenv bootargs $(bootargs_base) $(bootargs_root) rw initrd=0x02000040,20M panic=5 $(buffalo_ver); bootm $(default_kernel_addr) $(default_initrd_addr)
nand_boot=no
default_initrd_addr=0x02000000
default_kernel_addr=0x00100000
bootargs_base=console=ttyS0,115200
bootargs_root=root=/dev/sda2 rw rootdelay=15 panic=5
ipaddr=192.168.1.4
bootcmd=tftp $(default_kernel_addr) $(kernel); bootm $(default_kernel_addr)
serverip=192.168.1.2
bootargs=console=ttyS0,115200 root=/dev/sda1 rootdelay=15 rw panic=5 BOOTVER=1.091
stdin=serial
stdout=serial
stderr=serial
enaMonExt=no
enaFlashBuf=yes
enaCpuStream=no
ethprime=egiga0
bootdelay=3
disaMvPnp=no
overEthAddr=no
usb0Mode=host
usb1Mode=host


あとはHTTPサーバ、FTPサーバのセットアップなのですが、
付属のthttpdとproftpdでまかないます。
thttpdは/etc/thttpd.confでcharset=""にしておきます
(そうでないと文字化けしまくりでした。)

最後にルータにいくつか穴をあけて
(HTTP通信を許可するとかポートフォワードさせるとか)
完了です。

上記の作業以外にPostfixをインストールしようとして
挫折している過程もあります。
一月か二月くらいかけてなんとか上記のセットアップが終わりました。
まぁ、夜な夜な1、2時間しか時間が避けなかったので
進行速度は非常にゆっくりでした。

最近ではUPSも購入して、結構頑健なサーバ稼動環境になった気がします。
サーバ本体はディスクレス、外部ストレージはRAID1のディスク、
電源はUPS、停電時はUPSからNASのほうへシグナルが飛んで
自動的にシャットダウン。
KUROBOXは停電時に自動的にシャットダウンしてくれないので、
NASに定期的にpingを飛ばして、返ってこなかったら停電していると判断し、
自動でシャットダウンさせる、といったスクリプトを書きますかねー。

前の記事でも書きましたけど、今はSubversionもインストールして
プロジェクトでの開発にも使おうかと考えています。
LDAPサーバ立ち上げて、アドレス帳の一元管理もよいですね。
あまりサーバ立ち上げまくるとメモリがなくなりそうで怖いですが(汗

No comments: