KVM是Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6之后集成在Linux的各个主要发行版本中, KVM可以实现全虚拟化(需要硬件支持如:Intel -VT技术),KVM已成为学术界的主流VMM之一。RedHat 发布了一个开源项目LibVirt, LibVirt提供有一套命令行工具和API,方便用户通过简洁的命令完成对虚拟机的管理。目前多数有图形交互界面的虚拟机管理工具内部都是调用了LibVirt。现在基于LibVirt的KVM管理工具中名气最大的莫过于oVirt 了,它也是RedHat 出品与LibVirt 系出同门自然一些新的技术应用、扩展支持、补丁升级、BUG修复都能第一时间得到更新。oVirt是一个开源项目,国内很多做自主可控VDI 云桌面产品的公司都有拿oVirt 做参照物。
oVirt 由客户端(oVirt-Node)与管理端(oVirt-Engine)组成, oVirt-Engine 是一个J2EE的WEB 项目,方便用户通过WEB 图形化的交化界面管理资源管理虚拟机。目前针对oVirt 的二次开发第一步都是从编译和修改oVirt-Engine 开始。如果有人足够不要脸完全可以把源码下载改个Title 后编译打包再说是自己开发的VDI拿去挣钱。
如何用源码编译出一套oVirt-Engine 的介绍很多,其实官方档也介绍的很清楚,但是依然很多人在编译过程中各种踩坑、甚至怀疑人生。说实话前几天想个做编译笔记分享给大家的过程中又踩坑,因此坚定一定要写一个《拒坑版oVirt-Engine 4.2 编译笔记》 ,争取让参照笔记的人可以一次直接编译成功(最新的 oVirt 4.2)。
首先,无论英文是否好(不用就是在线翻译)都强列建议看一下官方英文原版的编译文档,可以了解官方流程,重要的是一些特别强调的地方。
https://www.ovirt.org/develop/developer-guide/engine/engine-development-environment/
我的完整笔记:
第一步:安装操作系统及修改默认语言
安装一个干净的 Centos 7.4 选择默认语言为英语,如果你已经有一个中文版,可以通过修改 /etc/locale.conf 将默认语言改为英文,如果你偏不信坚持非要用中文后面掉坑请自责。
默认语言
vim /etc/locale.conf
LANG="en_US.UTF-8"
第二步:安装后期相关的依赖包、软件包
批量安装第三方软件包
yum install git java-devel maven openssl m2crypto python-psycopg2 python-cheetah python-daemon libxml2-python pyflakes python-pep8 python-docker-py mailcap python-jinja2 python-dateutil gdeploy unzip
这里使用yum install 批量的安装N 个软件包(名字用空格隔开),全部都是后面编译脚本执行中可能会用到的,切记不要漏装。在些异常情况下批量安装时可能个别的包安装失败了,由于滚屏速度快你没看见。到最后执行编译脚本时提示缺少某些组件(软件包)时可以回到这里再补装。
第三步:安装 postgresql 9.6 (新版)
Cenos 7 默认源中所提供的 postgresql( 一种非关系型数据库)版本比较老,oVirt 4.2 对 postgresql 的依赖要求最低是9.4 ,因此我没有在上面批量安装软件包中一并安装。在些需要先更新 postgresql 的官方安装源:
postgresql 安装步骤
yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
yum install postgresql96-server postgresql96-contrib
第四步:设置openJdk 为首选
其实如果你没有自己安装过 ORACLE JDK( SUN JDK )这一步不是必须的,因为Centos 7 自带的JAVA 就是 openJDK
设置java首选openjdk
alternatives --config java
alternatives --config javac
第五步:安装 ovirt
前面几版都只是准备工作。这里才刚刚开始触及 oVirtr 工作; 但请注意这里也仍仅是前期的相关支持库与依赖、基础环境的准备工作。正戏还是没有开始....
安装源
yum install http://resources.ovirt.org/pub/yum-repo/ovirt-release42.rpm
安装 ovirt-engine 相关服务
yum install ovirt-engine-wildfly ovirt-engine-wildfly-overlay
安装 ovirt-host 相关的库
yum install ovirt-host-deploy ovirt-setup-lib ovirt-js-dependencies
第六步:配置 postgresql 9.6 相关设置
正戏上演前的大餐,这一步有几个文件需要手工修改,还需要在命令行配置数据库,操作时要注意看清楚提示,确保每步都执行成功,否则后面又会踩坑。
初始化数据库
/usr/pgsql-9.6/bin/postgresql96-setup initdb
修改 postgresql.conf 文件
vim /var/lib/pgsql/9.6/data/pg_hba.conf
host all all 127.0.0.1/32 password
host all all ::1/128 password
修改 postgresql.conf 文件
vim /var/lib/pgsql/9.6/data/postgresql.conf
max_connections=150
autovacuum_vacuum_scale_factor=0.01
autovacuum_analyze_scale_factor=0.075
autovacuum_max_workers=6
work_mem=8192
重启PostgreSQL服务
systemctl start postgresql-9.6
设置PostgreSQL服务开机启动
systemctl enable postgresql-9.6
允许 postgresql-9.6 通过防火墙
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
创建数据库和用户:(以root身份使用以下命令)
从root 切换到 postgres
su - postgres
打开 template1 并在其下创建用户:engine 密码:engine ; 这个用户名与密码后面配置时会用到,一定要要设得自己不知道了。
psql -d template1
create user engine password 'engine';
create database engine owner engine template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8';
输入 q 返回
q
打开 engine 并在其下创建扩展 uuid-ossp ,
psql -d engine
DROP FUNCTION IF EXISTS uuid_generate_v1();
CREATE EXTENSION "uuid-ossp";
输入 q 返回,exit 退出
q
exit
第七步:克隆 ovirt-engine 的源码到本地并编译
正戏开始:
关闭防火墙(这一步其实是可选的)
systemctl stop firewalld.service
git 源码
mkdir -p "$HOME/git"
cd "$HOME/git"
git clone git://gerrit.ovirt.org/ovirt-engine
编译(不要用root用户,不要用root 用户这个是一再强调又强调的,可人偏持不信)。执行 make ,ovirt-engine 的编译脚本中有很多参数可供调用,关于这些参数的意义我会另外再写一篇。这里我只用一个参数 PREFIX="$HOME/ovirt-engine"
整个编译过程会比较长,我大约用了一个小时左右必须联网、如果上面的相关支持库、包都已经安装了,这里会比较顺利。
make install-dev PREFIX="$HOME/ovirt-engine"
检查 /usr/lib/firewalld/services/ 下是否有ovirt 的防火墙配置文件,不知道是不是我运气不好还是别的弯子我绕错了路,我从官网同步回来的文件中竟然没有?后来我在官方oVirt-engine 发行版(产品)中找到了这几个文件,我提供下载。如果你也没有下载回来直接放到 /usr/lib/firewalld/services/ 目录下面。
ovirt-imageio.xml
ovirt-provider-ovn.xml
ovirt-storageconsole.xml
ovirt-vmconsole.xml
下载我打包现成的:
https://www.yunforum.net/sfile/ovirt-firewalld.xml.zip
第八步:设置ovirt
$HOME/ovirt-engine/bin/engine-setup
如果前面所有的步骤都正确操作了,这个设置过程会很顺利,基本输入YES 后,再一路按回车就可以了(除了验证数据库的用户名密码,就是此前设置 engine )
第九步:启动ovirt-engine服务
启动ovirt-engine服务
$HOME/ovirt-engine/share/ovirt-engine/services/ovirt-engine/ovirt-engine.py start
当服务启动成功后,你可以通过浏览器直接访问管理门户,浏览器必须支持H5