社区版XenServer是一款开源产品。那么拿到这款社区版首先想到的是怎么把它build出来,然后怎么把它部署起来,最后才是巴拉巴拉吧啦。。。
我们先来解决第一步,编译源码,编译之前需要先构建编译环境,构建好编译环境后以xapi为例进行编译。xapi是用OCaml这种语言写的,本人对这种语言一窍不通。这儿就不讨论了 ……
准备
本人打算使用容器进行编译xapi,所以你得先有个docker环境,然后呢编译的是xapi代码也得自己下好吧。
具体操作,巴拉巴拉吧啦。
构建编译环境
拉取xenserver-build-env
使用docker pull xenserver/xenserver-build-env
命令拉取镜像,这是个漫长的过程还有可能失败,镜像还挺大。
喝杯茶,慢慢等吧。。。
启动编译容器
走到这里,说明你的镜像拉取成功了,那么我们需要启动镜像,本人推荐使用下列方法启动镜像
1 | docker run -i -t -v /home/{xxxx}/labs/xen-api:/mnt/repos --name xapi-builder xenserver/xenserver-build-env /usr/local/bin/init-container.sh |
别傻乎乎的copy直接用啊,里面的路径要根据实际情况自己调整,我懒了你不能懒。
网上坛子里有人推荐加参数-u builder
,的确build的过程不推荐使用root用户;我用root是因为我要把它装到容器里,用builder会引入一些权限和环境问题。所以我用root了,您根据自己的情况而定。别盲从!!!
配置编译环境
你是否以为下载好了镜像,并且成功的启动的容器,就可以顺理成章的编译了?哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,别做梦了。哪有那么简单,社区版不给你点儿坑你都觉得不过瘾。
安装dep包
1 | yum-buiddep xapi |
我是root,不是root自己加sudo
去。
初始化opam
卧槽,opam什么东西,一脸的懵B啊!?不用太深究,就是一个类似pip的包管理器;想深究的可以自己研究OPAM
1 | opam init |
看到这段英文了吧,1、2、3,乖乖的照做,要不管保你编不过。
最后切记,将eval \
opam config env`加到
/.bashrc/.profile`中。或
使用opam安装包ocamlfind, cmdliner, jbuilder
1 | opam depext conf-m4.1 |
安装过程中有需要点确认的授权的,改给就给,千万别搞事情!
到此为止环境的搭建算是完成了,记住这个session不要退,再开一个session去做编译一会儿有惊喜。。。
编译xapi
使用docker exec -it xapi-builder /bin/bash
登录进你的容器,像上文说到的你可以使用-u builder
参数。
废话不多说直接编译
1 | cd /mnt/repo/ |
别急,会报错的,看到了吧。stack overflow,去网上搜吧,一搜返回一堆stack overflow的网站,哈哈哈!!!
别急,还记得之前保留的那个session吗,对,就是那个session。输入ulimit -a
看看里面的stack size
;再对比看看报错的那个session的stack size
。是不是有一种恍然大悟的感觉。没错设置一下报错session的stack size
就可以了ulimit -s 16384
。
你刚刚经历了一个华丽的分割线。。。
如果你使用xenserver-build-env
创建编译环境,可以省去很多步骤。
创建编译容器
1 | git clone git://github.com/xenserver/xenserver-build-env |
编译xapi
1 | ./run.py -p xapi --rm |
制作RPM Package
在Centos系统中制作RPM包,需要用到rpmbuild,所以你要用yum安装好。当然上面的编译容器已经将rpmbuild安装好了。那么的接下来的重点在于SPEC文件编写,SPEC用来告诉rpmbuild,制作的每一个过程需要做哪些动作。
SPEC文件:
1 | Name: xen-api |
创建目录SOURCE
,SPECS
,BUILD
,RPMS
,SRPMS
,将SPEC文件放入到SPECS
文件件中,然后将源代码做成xen-api-1.60.2_m.tar.gz
拷贝到SOURCE
目录。最后执行rpmbuild -ba {SPEC文件}
。执行完毕后,在RPM
目录中生成我们需要的RPM包