OpenWRTをPC Engines ALIXに入れる
ひさしぶりにOpenWRTをいじっています。目的はAsteriskのPBXを作ることですが、その話はまたそのうち。
ハードウェアはPC Engines ALIXです。 ちょっと非力な感じですが、Asteriskには十分な気がします。
ダウンロード
OpenWRTは、コードネームBackfire、10.03というのがリリースされています。
~% mkdir pbx pbx% cd pbx pbx% svn co svn://svn.openwrt.org/openwrt/branches/backfire
これでは、用意されているパッケージは最小限です。 その他のパッケージをビルドできるよう、パッケージの生成方法が書いてあるファイルを持って来ます。
pbx% svn co svn://svn.openwrt.org/openwrt/packages packages% cd openwrt/packages packages% ln -s ../../packages/*/* . packages% cd .. openwrt%
ビルドの設定
ビルドの内容を設定します。
openwrt% make menuconfig
設定の抜粋。
- Target System (x86)
- Subtarget (Generic)
- Target Profile (PCEngines Alix)
- Target Images
- [ ] ramdisk
- [*] squashfs
- [*] Build GRUB images (Linux x86 or x86_64 host only)
あとは、欲しいパッケージを選択する。 OpenWRTのお約束として、Y、N、Mの選択肢には、それぞれ以下の意味があります。
- Y --- ビルドし、イメージに入った状態にする。
- N --- ビルドしない。
- M --- 後からインストールできるパッケージとしてビルドする。
ビルド
openwrt% make
依存関係とかがおかしいときは「make clean」してみるといいかも。
できあがったファイルは、「bin」ディレクトリの下にある。
設定
ネットワーク設定などに限っては、ビルド前の設定でも行うことができます。 でも、どうせ、その他の設定もいろいろいじりたいですから、設定はビルド後に行うことにします。
openwrt% cd bin/x86 x86%
ちょっと裏技的ですが、QEMUを使います。 まず、最終的にインストールするCFと同じサイズか、それより小さいファイルを用意します。 いろいろな方法があるので、お好きな方法でどうぞ。
- 「sudo dd if=/dev/sdb of=img bs=10M」 --- CFカードがsdbとして認識されている場合。
- 「dd if=/dev/zero of=img bs=10M count=25」 --- だいたい250Mにしてみる場合。
作ったファイルの先頭に、起動イメージを書き込みます。 「先頭に」っていうのが重要。後半をカラのまま空けておきます。 Squashfs自体は読み出し専用なのですが、設定などの変更は、この後半の空き領域に書き込まれるのです。
x86% dd if=openwrt-x86-squashfs.image of=img bs=10M conv=notruc x86%
QEMUで起動します。 GNOMEとかのデスクトップで実行してください。 GUI無しで起動する方法もありますが、ちょっと面倒です。
x86% qemu -hda img
どういうわけか起動できないことがありますが、何度かやってると起動できます。 原因はよくわかりませんが、8259とかIRQがどうとか言ってます。 気にしないことにします。
最初の起動だけ、ファイルシステムの構築のためにちょっと時間がかかります。 「Please press Enter to acttivate this console.」って出たら完了。 リターンキーを押すとコマンドプロンプトが現れます。
あとは適宜設定を行って、「halt」コマンドで終了させます。 QEMUが勝手に終わらない場合は、ウィンドウを閉じて下さい。 これで、設定済みのイメージファイルが完成です。
CFに焼く
CFが/dev/sdbとして認識されている場合。 このCFが勝手にマウントされていないことを確認してから、以下のコマンドを実行してください。
x86% sudo dd if=img of=/dev/sdb bs=10M
あ、上記のデバイス名を間違えると悲惨なことが起きるので、気をつけて下さい。
起動
あとはALIXに載せて起動してみる。
(2010/4/9 - sgk)
