qemuとbusyboxでhttpサーバ起動
qemu上にbusyboxのhttpdで、簡易HTTPサーバを立ち上げた際のメモ。
前準備
qemu上にHTTPサーバを起動し、ホストOS又は別PCからhttpアクセスさせるには、qemuがネットワークにアクセスできるようにする為にホストOS側でTUN/TAPデバイスの使用するための設定をする必要がある。
まずは必要なツール(bridge-utils)がホストOSにインストールされているか確認
#yum list installed | grep bridge-utils
インストールされていなければ、yumでインストールする。
#yum -y install bridge-utils
/dev/net/tunというデバイスファイルが存在するか確認し、なければ作成する。
#mknod /dev/net/tun c 10 200
ブリッジ接続設定
ホストOS側のネットワークにブリッジ接続の設定を行う。
まず、ブリッジさせたいNICのスクリプトファイル(今回はeth0)をブリッジ用にコピーする。
#cd /etc/sysconfig/network-scripts #cp ifcfg-eth0 ifcfg-br0
それぞれ修正
ifcfg-br0
下記の項目をブリッジ用に修正
DEVICE=br0 NM_CONTROLLED=no TYPE=Bridge
TAPの設定
$vi ~/qemu-ifup #!/bin/sh /sbin/ifconfig $1 0.0.0.0 promisc up /usr/sbin/brctl addif br0 $1 $chmod +x ~/qemu-ifup
qemu起動
作成したTAPスクリプト指定して、起動する。
TAPを設定してqemuを実行する場合、ルートユーザでないと起動が失敗するようなので、ルートになって実行
$su #qemu-system-arm -M versatilepb -m 256 -kernel zImage -hda rootfs.img -serial stdio -append "root=/dev/sda rw console=ttyAMA0 init=/sbin/init" -net nic -net tap,ifname=tap0,script=~/qemu-ifup
ゲストOS(qemu上の組込みLinux側)のネットワーク設定
qemuが起動し、組込みLinuxが起動したら、ネットワーク設定を行う。
ホストOSのIPが192.168.137.105でデフォルトゲートウェイが192.168.137.1なので、ゲスト側は以下に設定。
#ifconfig eth0 192.168.137.100 #route add default gw 192.168.137.1
HTTPサーバ起動(qemu側)
とりあえず、ブラウザからアクセスされたときの為に簡単なHTMLを作成
#mkdir -p /var/www #vi /var/www/index.html <html> <body> <h1>hello linux</h1> </body> </html>
下記コマンドでHTTPサーバを起動
#httpd -h /var/www
後は実際にホストOSや他のネットワークが繋がっているPCからアクセスすれば、index.htmlが参照できるはず。
http://192.168.137.100/
一応、今回は、htmlを表示してみるだけだったが、busyboxのhttpdにはリバースプロキシなどの機能もあるので、結構色々なことができるようです。
使い方はbusyboxのソース(networking/httpd.c)に書かれています。