jollen / blog

Jollen's Blog
http://www.jollen.org/blog
66 stars 4 forks source link

學習 Unikernel 與 Runtime.js (Part 2)-Build Runtime.js VM Image #13

Closed jollen closed 8 years ago

jollen commented 8 years ago

已發佈至 Jollen's Blog


以下步驟參考自 Runtime.js 官網 的說明,目標是初始化一個新的 Runtime.js 專案。請參考 Getting Started 上的環境安裝說明。

要使用 Runtime.js 必須安裝 Node.js 執行環境,以下步驟以 Mac 環境為主,Node.js 的版本為 v4.2.6。

建立 Runtime.js 專案

Runtime.js 仍是一個發展中的開源計畫,目前的發展狀態如下:

即便 Runtime.js 還是處於這麼早期的階段,但實作簡單的 IoT cloud VM image 問題並不大。以下是使用 runtime.js 製作 unikernel image 的準備工作說明。

1. 安裝 QEMU VM

安裝 QEMU VM 做為 Runtime.js 的執行環境。以 Mac 為例,使用 homebrew 安裝 qemu:

$ brew install qemu   

Runtime.js 目前僅支援 KVM。

2. 建立新的 Node.js 專案

使用 npm 建立新的 Node.js 專案:

$ mkdir simple-iot-runtime
$ cd simple-iot-runtime
$ npm init

這次的學習計畫,將不使用 Express。如果要實作 REST API 的話,後續就要實作一個小型的 URL router。

3. 安裝 Runtime.js 模組

安裝 Runtime.js 的 core library:

$ npm install runtimejs --save

4. 安裝 Runtime.js CLI 與 Runtimeify

Runtime.js 提供二個命令列工具(CLI):

$ sudo npm install runtime-cli -g
$ sudo npm install runtimeify -g

Browserify 原本是用給 frontend 開發使用的工具,讓 frontend 的 JavaScript 程式碼,也能以 require() 的風格引入相依模組。現在被應用於 Runtime.js 專案中。

5. 製作 Unikernel Images

將主程式 index.js 打包(bundle)成 initrd 檔案:

$ runtimeify index.js -o initrd

6. 啟動 Unikernel

使用 runtime-cli 啟動製作出來的 initrd

$ runtime start 

2016-02-15 6 58 35

小結

上述步驟得到的 initrd 就是一個 unikernel image。runtime-cliqemu 的 wrapper,測試方式是使用 runtime-cli 啟動 qemu,並載入 initrd 檔案。initrd 是 runtime.js 預設的 unikernel 檔案。

雖然 unikernel 的檔名是 initrd,但這與 GNU/Linux 上的 initrd(init process)是完全不同的實作。Runtime.js 所製作的 initrd,其實就是 browserify 所編譯出來的 JavaScript 應用程式。