這個 project 非常的酷,不過看完之後也只是覺得有趣,沒繼續追之後的消息。而這個禮拜在 Hacking Thursday 遇到 Ben, 他提到了這個專案的後續發展 - 有人利用 ppp 實作的 modem device,所以這個在瀏覽器上面運作的 Linux 現在可以上網了 XD
這個延伸的專案是 jsmodem,主要的功能是在 jslinux 這個 javascript emulator 上加上一個 modem,讓瀏覽器裡面的 Linux 可以上網,我看了一下 source code,推敲的架構如下:
說是推敲的意思,其實我看了一下沒看到在 browser 怎麼從 ppp 轉到 websocket 的地方。如果有好心的朋友知道可以告訴我一聲 :p
這個 linux 會利用 pppd 的方式開啟一個網路介面,並且接到 jsmodem。而 jsmodem 利用 websocket 的方式向 server 通訊。所以要讓 jslinux 可以上網,必須要在本機端跑一個 websocket server,並且用 iptable forward 封包。
架設步驟
我測試的環境是 Ubuntu 11.04,理論上用什麼 Linux 作法應該都一樣。首先當然是下載 jsmodem
git clone https://github.com/ewiger/jsmodem.git
接著理論上進去 emulator 目錄,打 make all 就可以了。不過不知道為什麼 http://bellard.org/ 會檔掉 wget,就算我換 user-agent 也沒辦法。懶得處理,就把四個檔案 cpux86.js cpux86-ta.js jslinux.js term.js 載下來放在原本的目錄裡面,再打 make all 就行了。
另外在 jslinux.js 裡面所指示的 binary 路徑是 vmlinux.bin, 而非 vmlinux26.bin,所以必須要將 vmlinux26.bin rename 成 vmlinux.bin 完成之後,就可以用以下指令開啟 websocket server,並且開啟一個 ppp interface 準備接收 websocket 封包。
sudo ./serve.sh
這個時候用 Google Chrome 打開 0.0.0.0:2080,應該就可以看到 Linux 開機。用 root 登入後,打 ./ppp_up 這樣就可以建立 ppp 連線。
這個時候回到本機端的 Linux 建立 package forward
# echo 1 > /proc/sys/net/ipv4/ip_forward # /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
非常好的分享。另外我曾試過,jslinux 也可以在ipad 的mobile safari 上跑起來。"如何讓jsmodem 在上面網路正常跑?"(前提不Jailbreak)。
回覆刪除目前的思路是:
jsmodem plugin for mobile safari 連到ipad外部一台linux(WS+ppp+ethx+iptables)。
這樣一來,用ipad + 藍芽keyboard 也可以在上面用tcc 寫程式了。
@ben, 沒錯,只要有台 websocket server 可以讓這個模擬器連結上網就可以了。但是如果是正式運作的環境,還要考慮很多安全性問題 :D
回覆刪除