JavaScriptだけで動くLinux、jslinuxを今さら使ってみる
1年半ほど前に話題になった
[jslinux](http://bellard.org/jslinux/) (JavaScriptだけで動くLinux)を
今さらながら動かしてみました。
実は地味に進化していて、IDEドライブのエミュレーションが出来るようになっているし、
「4MB以下のRAMディスクしか使えない」という制限もなくなってます。
– [Javascript PC Emulator – News](http://bellard.org/jslinux/news.html)
実際、今のjslinuxのディスクイメージは57MBほどあり、
なんと gcc 4.3.5 が入ってたりします!
サイズの制限などもあり、libcには[uClibc](http://www.uclibc.org/)、
コマンド類には[BusyBox](http://www.busybox.net/)
が使われてますが、これを GNU libc や GNU coreutils に置き換えることも出来そう。
実用化への期待が持てそうです!(何に使うんだよという話はさて置き…)
とりあえずソースやディスクイメージを取得して、
中身を入れ替える方法を書いてみます。
## ソースとディスクイメージの取得
ディスクイメージは64KBごとに分割されて hdaXXXXXXXXX.bin という名前で置いてあるので、
これらをすべて持って来ないといけません。
1つ1つ落としてると時間がかかるので、
wgetをバックグラウンドジョブとして起動して並列ダウンロードしてます。
#!/bin/bash
host=http://bellard.org/jslinux/
wget $host/cpux86-ta.js
wget $host/cpux86.js
wget $host/jslinux.js
wget $host/term.js
wget $host/utils.js
wget $host/linuxstart.bin
wget $host/vmlinux-2.6.20.bin
i=0
while [ $i -le 999 ]; do
hda=$(printf ‘hda%09d.bin’ $i)
if [ ! -f $hda ]; then
wget $host/$hda &
fi
i=$(( $i + 1 ))
done
## ディスクイメージの編集
まずは分割されているディスクイメージをくっつけて1つにします。
cat hda000000*.bin > hda.bin
出来た hda.bin を loopback mount。
sudo mount -t ext2 -o loop hda.bin /mnt
これでディスクイメージの中身が /mnt にマウントされたので、
あとは /mnt の下を好きなようにいじります。
終わった後はディスクイメージのマウントを解除し、
sudo umount /mnt
hda.bin を再び 64KBごとに分割しておきます。
#!/bin/bash
rm hda000000.bin
split -a 9 -d -b 65536 hda.bin hda
for f in hda000000*.bin; do
mv $f $f.bin
done
これで終了。ちなみに glibc と GNU coreutils の cat を入れてみたところ、
ちゃんと動くことを確認しました。
## 参考
– [ブラウザでJavaScriptが動く時代がやってきた! – 葉っぱ日記](http://d.hatena.ne.jp/hasegawayosuke/20110518/p1)
– [jslinuxで遊んでみる – file-glob こと k.daibaの日記](http://d.hatena.ne.jp/kdaiba/20110613/p1)
– [javascript – jslinuxをローカルで – 404 Blog Not Found](http://blog.livedoor.jp/dankogai/archives/51683749.html)
– [Perl5 works on browser!](http://blog.64p.org/entry/20110519/1305779739)