我的学习笔记——搭建构建unikernel的环境:Unik

我的学习 笔记

2017/9/25

一、 搭建Unik的开发环境

去到官方教程网址:https://github.com/cf-unik/unik

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

然后进入到具体教程文档:https://github.com/cf-unik/unik/blob/master/docs/getting_started.md

——》unik/docs/getting_started.md

0,依据教程需要先安装如下软件包:

Docker installed and running (Docker machine and Docker for Mac are supported)

——》安装方法:

(可以参考)在Ubuntu 14.04安装和使用Docker的教程:

http://www.linuxidc.com/Linux/2015-08/121088.htm

关键命令: apt-get -y install docker.io

注意:我们需要root权限才能执行软件安装的命令,所以普通用户下 要在命令前面加上:sudo

剩下的软件安装就比较简单:例如 sudo apt-get install jq


1,安装、配置和启动Unik​​

1)安装Unik

$ git clone https://github.com/emc-advanced-dev/unik.git

$ cd unik

$ make binary

或者执行:

$ make

$ _build/unik   
#编译成功后,执行此条命令,会出现如下提示: Unik
is a tool for compiling application source code into bootable disk images. Unik also runs and manages unikernel instances across infrastructures. ...

 

 

这将在目录unik / _build / 下生成可执行文件:unik

使用./_build/unik就可运行UniK命令,或将二进制文件移动到路径的某个位置,例如/ usr / local / bin,可以在任何路径下执行unik命令:unik [command] ,执行命令如下:

$ mv _build/unik /usr/local/bin/


2、在virtualbox上配置主机网络

1)打开虚拟机:$virtualbox

2) 打开管理>全局设定>网络>仅主机网络

—》 点击用户界面右侧的绿色添加按钮

—》 记录新的仅主机适配器的名称(例如“vboxnet0”)。您将需要在UniK配置中

—》确保此主机网络启用了Virtualbox DHCP服务器:

a.选择主机网络后,单击编辑按钮(螺丝刀图像)

b.在“适配器”选项卡中,记下适配器的IPv4地址和网络掩码。

c. 在“DHCP服务器”选项卡中,选中“启用服务器”框

设置服务器在与适配器IP相同的子网上寻址IP。例如,如果适配器IP192.168.100.1,请将DHCP服务器IP设置为192.168.100.X,其中X2-254之间的数字。

d. 将服务器掩码设置为您刚刚注意到的网络掩码

将上/下地址设置为同一子网上的IP范围。我们建议使用范围X-254,其中X比您用于DHCP服务器本身的IP高一个。如果您的DHCP服务器为192.168.100.2,则可以分别将下限和上限设置为192.168.100.3192.168.100.254

例如:





3. 配置 UniK daemon (守护进程)

  • UniK 配置文件存储在 $HOME/.unik ,如果不存在,就创建此目录:


$ mkdir
$ HOME/.unik
 
(备注说明:.表示是隐藏文件,这里的HOME/表示目录:home/用户名
  • $HOME/.unik/目录下创建一个daemon-config.yaml文件,写入以下内容:

providers:

  virtualbox:

    -name: my-vbox

      adapter_type: host_only

      adapter_name: NEW_HOST_ONLY_ADAPTER

 

 

用您创建的网络适配器的名称替换NEW_HOST_ONLY_ADAPTER


4. 启动UniK并自动部署VirtualBox实例侦听器( Virtualbox Instance Listener

  • 打开一个新的终端窗口。 这个终端将是我们离开UniK守护进程的地方。

  • cd到由make创建的_build目录

  • 执行命令:sudo unik daemon --debug (--debug标志是可选的,如果你想看到更详细的输出)

  • UniK将编译和部署自己的30 MB unikernel。 这个unikernelUnik Instance Listener. The Instance Listener uses udp广播来检测(IP地址)和在Virtualbox上运行的引导实例.

  • 完成后,UniK正在运行并准备好接受命令.
    如图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 打开一个新的终端窗口执行命令:unik target --host localhostCLI目标设置为本地计算机。


 

 

二、写一个Go HTTP服务器

  1. 从守护进程运行的窗口离开 ,打开一个新的终端窗口。此窗口将用于运行UniK CLI命令。

  2. 使用文本编辑器创建一个文件 :httpd.go 。 将以下代码复制并粘贴到该文件中:

package
maind import
( "fmt"

    "net/http"

)

func
main() {

    http.HandleFunc("/",
handler)

    http.ListenAndServe(":8080",
nil)

}

func
handler(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w,
"my first unikernel!")

}

 

  1. 尝试运行此代码:go run http.go.访问 http://localhost:8080/ 看到服务器正在运行。

 

 

 

我们需要创建一个虚拟的Godep文件。告诉Go编译器如何构建Go项目及其依赖关系是必要的。幸运的是,在这个例子中,我们的项目没有依赖关系,我们可以填写一个简单的Godep文件,而无需安装godep.注意:对于具有导入依赖关系的Go项目和嵌套包,您将需要安装Godeps并在项目中运行GO15VENDOREXPERIMENT=1 godep save ./.. 。有关详细信息,请参阅使用UniK编译Go应用程序: Compiling Go Apps with UniK

具体操作步骤https://github.com/tools/godep

其他学习网站:

http://www.codeweblog.com/go%E8%AF%AD%E8%A8%80%E7%9A%84gopath%E4%B8%8E%E5%B7%A5%E4%BD%9C%E7%9B%AE%E5%BD%95%E8%AF%A6%E8%A7%A3/

GOPATH设置

go 命令依赖一个重要的环境变量:$GOPATH

$ gedit ~/.bashrc

在打开的.bashrc文件中加入如下内容:

export GOPATH=/home/shm/gocode

再执行安装命令:$ go get github.com/tools/godep

注意:执行该命令后,可能会遇到一些问题,需要根据内容提示,一步步来解决)

  • 要创建虚拟Godeps文件,请在与httpd.go相同的目录中创建名为Godeps的文件夹。 在里面,创建一个名为Godeps.json的文件并粘贴以下内容:

{

        "ImportPath":
"my_httpd",

        "GoVersion":
"go1.6",

        "GodepVersion":
"v63",

        "Packages":
[

                "./.."

        ],

        "Deps":
[

                {

                        "ImportPath":
"github.com/cf-unik/unik/docs/examples",

                        "Rev":
"f8cc0dd435de36377eac060c93481cc9f3ae9688"

                }

        ]

}

 

  • 为了这个例子的目的,这里重要的是my_httpd。 它指示go编译器,该项目应该从$ GOPATH / src / my_httpd安装。

    例如
    '/home/shm/gocode/src/my_httpd/httpd.go'

  1. 很好! 现在我们已经准备好将这个代码编译成unikernel



三、 编译镜像并在Virtualbox上运行

  1. httpd.go所在的目录运行以下命令:

unik
build --name myImage --path ./ --base rump --language go --provider
virtualbox



 

 

 

 

 

该命令将指示UniK使用rump-go-virtualbox编译器编译工作目录(./)中找到的源。

2.您可以在运行守护程序的终端窗口中观察build命令的输出。

3.构建完成后,生成的磁盘映像将驻留在$ HOME / .unik / virtualbox / images / myImage /boot.vmdk


 

 

 

 

 

4.运行此映像的实例

unik
run --instanceName myInstance --imageName myImage








  1. 当实例完成启动时,我们来检查它的IP,看看它正在运行我们的应用程序。

  2. 执行命令: unik instances应列出实例IP地址。

 

 

 

 

 

 

 

7.将您的浏览器指向http// instance-ip8080,并看到您的实例正在运行!

测试结果图:

 

 

 

 

 

 

 

 

8.清理您的镜像和您创建的实例

unik rmi --force --image myImage






posted @ 2017-09-25 20:50  莎茉儿  阅读(2321)  评论(0编辑  收藏  举报