我的学习笔记——搭建构建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)
-
Virtualbox (if using the virtualbox provider)
——》安装方法:
(可以参考)在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。例如,如果适配器IP为192.168.100.1,请将DHCP服务器IP设置为192.168.100.X,其中X为2-254之间的数字。
d. 将服务器掩码设置为您刚刚注意到的网络掩码
将上/下地址设置为同一子网上的IP范围。我们建议使用范围X-254,其中X比您用于DHCP服务器本身的IP高一个。如果您的DHCP服务器为192.168.100.2,则可以分别将下限和上限设置为192.168.100.3和192.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。 这个unikernel是Unik Instance Listener. The Instance Listener uses udp广播来检测(IP地址)和在Virtualbox上运行的引导实例.
-
完成后,UniK正在运行并准备好接受命令.
如图:
-
打开一个新的终端窗口执行命令:unik target --host localhost,将CLI目标设置为本地计算机。
二、写一个Go HTTP服务器
-
从守护进程运行的窗口离开 ,打开一个新的终端窗口。此窗口将用于运行UniK CLI命令。
-
使用文本编辑器创建一个文件 :
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!") }
-
尝试运行此代码: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
其他学习网站:
GOPATH设置
go 命令依赖一个重要的环境变量:$GOPATH
$ gedit ~/.bashrc
在打开的.bashrc文件中加入如下内容:
export GOPATH=/home/shm/gocode
再执行安装命令:$ go get github.com/tools/godep
(注意:执行该命令后,可能会遇到一些问题,需要根据内容提示,一步步来解决)
{ "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'
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
-
当实例完成启动时,我们来检查它的IP,看看它正在运行我们的应用程序。
-
执行命令:
unik instances
。
应列出实例IP地址。
7.将您的浏览器指向http:// instance-ip:8080,并看到您的实例正在运行!
测试结果图:
8.清理您的镜像和您创建的实例:
unik rmi --force --image myImage