Tuesday, May 26, 2009

Computer::Network - ファイアウォールを越えてファイルサーバにアクセスしたい

ファイアウォールを越えてファイルサーバにアクセスしたいなぁ
と考えると夜も眠れない日々が続いています。

sshクライアントを使ったポートフォワーディングでトンネル掘って、
自宅のファイルサーバにつなごうとしたのですがうまくいかず。
というのも、クライアントがvistaだとうまくいかないようです。
というかうまくいかないのです。

443とか139番ポートを占領しちゃってるようで、
自宅のSambaサーバにアクセスできません。
vista、嫌いじゃないんですけどファッキン。

そこで、方針を変えてVPNを構築しよう!と思い、
KUROBOX-PROにOpenVPNを仕込むことにしました。
BusyBox搭載で、素の状態からこつこつと育てている私の玄箱くんは
KernelでTUNとかTAPをサポートしていませんでした。
CIFSを有効にしたときみたいに、有効にしてリビルドするかー
と思ったのですが、出来上がったカーネルイメージでは動作しませんでした。

うむむ、何かミスったんかなぁ・・・
と一瞬だけ悩んでそっこうであきらめました(笑
あきらめることに踏ん切りがついた理由は二つありまして、
ひとつは、すでにいろいろプログラムを走らせている玄箱に、
VPNサーバとか立てるのも何か気持ち悪いというのがありました。
(今のところは、まだスワップが発生してないですけどね)

もうひとつは、
うちの開発チームで私の自宅ファイルサーバのうちのひとつを
使いたいと思ってたので、VPNサーバ立てるようだったら
自宅の中でネットワークを二つに分離したいというのがありました。
VPNで自宅に入ってこられて、私の遊び用マシンとか遊び用ファイルサーバを
覗き見られるのはちょっとアレですし。
二つに分離するっていうとちょっと違うのですが、
正確にはモデムにぶら下がっているネットワークに対して
また違うネットワークをぶら下げます。
一番奥のネットワークが私のプライベート領域。

あれやこれや夜な夜な考えてたのですが、
結局PPTPサーバ機能がついたルータを購入することにしました。
まさか自宅に二台のルータが設置されることになろうとは。

Monday, May 18, 2009

Computer::KUROBOX-PRO - 外付けRAIDディスクのフォーマット

前回の記事からちょこちょこ、USB接続の外付けRAIDディスクの話をしておりますが、
これも実はフォーマットするときにちょっとどきどきだったのです。
やはりこれも中でLinuxが走っているんでしょうか。
そこらへんはわからんのですけど、
RAID0やらRAID1やら、RAID無効やらにするにはWindows側からやりざるを得ない。
BUFFALOが提供する(ディスク購入とともについてくる)アプリケーションを使って
RAIDのモードを切り替えないといけない。
ちなみに私が今回購入したのはBUFFALOのHD-W1.0TIU2/R1です。
開封後に早速RAID1に変更して、KUROBOX-PROに接続。
fdiskで中身を見てみると、なにやらsdb1とsdb5が見えます。
sdb1はパーティションタイプがW95 Ext'd(LBA)、sdb5がW95 FAT32。
・・・なぜ割れている・・・

っていうかExt'dって何?とか思いつつ。
こ、これ消していいんか?
Linuxパーティションにしちゃってええんか?
と思ってWebで情報を集めるものの、ext3でフォーマットしました!
みたいな情報はあまり集まらず。
以前、ext3でフォーマットできたよーとかいう情報をちらっと見たことがあったので、
このディスクを購入しているわけです。

ま、おかしくなってもどーにかなるだろう、と思い、
パーティションテーブルをまっさらにしてLinuxパーティションを作成しました。
まぁよくよく見てみたらトータルで1TBのこのディスクが
500GBで認識されているので、KUROBOX-PROからはRAIDかどうかは見えていないようです。
RAID関係の処理は、この外付けディスクの中で完結しているようなので、
さくっとLinuxパーティションを作成、ext3でフォーマットしておきました。
これで私の正面には、
USB接続のRAIDディスク、KURBOX-PRO、NASのRAIDディスクが並ぶことになりました。

Computer::KUROBOX-PRO - swapファイルを作っておこう

KUROBOX-PROのメモリがいっぱいいっぱいになったことは(おそらく)ないんですが、
メモリが小さいのは事実なわけです。
ということで、スワップ領域を作ります。

/home以下はUSB接続の外付けハードディスク(BUFFALOのRAID1ディスク)なので、

dd if=/dev/zero of=/home/sys/swap bs=1024 count=131072

とやってスワップファイルを作ります(ちなみにこちらを参考にやってました)
次に

swapon /home/sys/swap

とやればスワップが有効になります。
ブートごとに有効にしてほしいので、/etc/fstabに

/home/sys/swap swap swap defaults

と書いておきます。
今回の場合ですと128MBのスワップ領域が確保されたことになります。
スワップアウトが発生するようなことをやるのだろうか。
でもスワップ作る前にfreeで確認したら残り2MBくらいしか空きメモリなかったし。
あれこれKUROBOXを使うなら、確保しといたほうがいいのかもしれませんね。

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サーバ立ち上げて、アドレス帳の一元管理もよいですね。
あまりサーバ立ち上げまくるとメモリがなくなりそうで怖いですが(汗

Computer::KUROBOX-PRO - sshでlocalhostに入れない

KUROBOX-PROにsshでログインして、その後さらにlocalhostへ入ろうとすると入れない。
何でこんなまねをしようとしているのかといいますと、
今日KUROBOX-PROにSubversionをインストールしたのです
(ちなみにこちらを参考にしてビルドしました。
 最新版のSubversionだとconfigureでこけちゃいますので要注意です。
 上記のサイトと同様に、1.4.3をビルドしました。)。
svn+sshで外部からリポジトリを触りたいなぁと思って、
テストでリポジトリを作ってみてました。

で、svn+sshでリポジトリにインポートできるかと思いきや、
Host key verification failedとか言われ。
もう、ええぇぇぇぇって感じでしたけど、
こちらに掲載されているとおり、ttyのパーミッションを666に変更してやればOKでした。

BUFFALOのUSB接続のRAIDディスクも購入したので、
このディスクは/homeにマウント。
これで後はうちのチームのメンバーのアカウントを作れば
ファイル置き場は私んちのKUROBOX-PRO、開発は外部で、
っていう体制での開発環境が整います。