黑帽联盟
标题: 基于xen和busybox创建虚拟机 [打印本页]
作者: admin 时间: 2019-11-8 16:07
标题: 基于xen和busybox创建虚拟机
相关链接:xen虚拟化部署centos6.7系统
xen的简介Xen是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。
在旧(无虚拟硬件)的处理器上执行Xen,操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。
Xen的架构如图:
Xen虚拟机的组成:
Xen Hypervisor:
虚拟化技术通过在现有平台(机器)上添加一层薄的虚拟机监控程序(Virtual Machine Monitor,简称 VMM)软件而实现对系统的虚拟化,如虚拟处理器,虚拟内存管理器(MMU)和虚拟 I/O 系统等。虚拟机监控程序又被称之为监管程序(Hypervisor)。
Domain(Dom0,DomU):
特权虚拟机:Dom0;特权域
为Xen提供控制工具的;直接驱动IO硬件设备;
与DomU交互;
Linux-2.6.37内核开始直接运行在Dom0上;
其他普通虚拟机:DomU;非特权域
Linux-2.6.24+内核开始支持
Xen的虚拟化实现方式:
Type-I型:二级虚拟化技术;直接在硬件上安装hypervisor,直接接管硬件资源,运行在其上的系统都是虚拟机;
管理方面更彻底;必须让hypervisor驱动硬件,
出现的问题是必须开发驱动程序?
解决方案:Xen只是驱动CPU和内存,不驱动IO设备
当系统启动时,硬件设备加载后加载hypervisor,hypervisor拥有访问硬件权限,hypervisor加载完成后启动一个虚拟机,虚拟机有自己的内核和用户空间,这个虚拟机是 特权虚拟机,为底层hypervisor提供管理程序,能功能是为hypervisor提供IO设备硬件驱动 程序的;
我们新建的虚拟机调用IO设备硬件时,是通过特权虚拟机驱动程序连接硬件实现;
xen虚拟化实现在CentOS 6.7上安装所需要的条件:
1).需要在物理机上安装CentOS 6.7操作系统
2).安装Xen软件包
3).安装4.9.188的内核,可以使Xen运行在Dom0上
4).配置好grub,然后启动Xen
5).在用户空间上安装虚拟机Guest OS即可;
注意:最新版本的xen在CentOS 6.7平台上是只有DomU可以使用,Dom0是不能通过CentOS 6.6的原有内核实现,我这里是安装的xen-4.2.5版本的xen,还有将内核版本更新到了4.9.188;
简单介绍一些XEN和KVM:
Xen:CentOS4-CentOS5是支持的;后续就是xen了,但是在内核版本Linux 2.6.37将xen收录进内核,CentOS7收录进内核;可以实现内核直接运行在Dom0上;
KVM:2006才出现;CentOS5.8开始支持;但是不稳定,红帽的收购造成了KVM的发展;
CentOS6.6的内核为2.6.32,不直接支持内核运行Xen的Dom0特权域;
可以支持直接运行在DomU
红帽为了支持KVM这个亲儿子的发展,将xen给赶出家门了。 -_-!
后来意识到XEN的使用率还是很高,所以又在后来收录进内核。
- xen的安装及Dom0的配置
- 安装xen-4.2.5版本的软件,更新内核版本到3.7.10
- 配置grub.conf配置文件
- 将xen设置为内核启动,而将CentOS的内核设置为Xen虚拟化平台的一个模块;
- 配置完成后重新启动Linux系统,启动完成后自动进入了Xen的Dom0环境
以上5个步骤参考最上面的相关链接部署
xen虚拟机的安装和配置
上面安装好Dom0D虚拟机后,下面我们就可以在其之上配置安装DomU虚拟机了。
DomU虚拟机的安装问题思考:
1).DomU虚拟机的内核文件存放位置。
我们是在Dom0上构建DomU虚拟机,所以我们的内核文件存放在Dom0上;
第二种方式就是我们将内核文件存放在DomU虚拟机的虚拟磁盘中;
2).DomU虚拟机的创建:
内核kernel,ramdisk都由Dom0提供,而DomU只提供用户空间;
由于Dom0虚拟机有完整的用户空间,我们可以将其复制进DomU虚拟机上使用;
1.简单DomU虚拟机构建
内核kernel和ramdisk都由Dom0提供,使用busybox为DomU虚拟机提供简单的用户空间;
1).模拟创建虚拟机磁盘设备,构建本地环回文件:
2).格式化虚拟磁盘设备
3).编译安装busybox为DomU虚拟机提供用户空间
编译环境需要开发包组支持:
# yum groupinstall -y Development tools
# yum install -y ncurses-devel glibc-static
获取busybox软件:
wget https://busybox.net/downloads/busybox-1.29.3.tar.bz2
编译配置busybox:
# make menuconfig
配置如下图所示:
选择“Busybox settings”:
选择“Build options”选项,以静态二进制创建busybox,不共享库文件:
配置完成后点击exit,退出后点击yes保存:
执行安装
make
此处会有报错,诸如:
nsenter.c:(.text.nsenter_main+0x1be): undefined reference to `setns'
sync.c:(.text.sync_main+0x74): undefined reference to `syncfs'
重新执行make menuconfig
取消以下几项即可,看截图
再次执行make操作,成功编译
最后执行安装
make install
编译安装busybox完成后在这个目录会生成安装好的文件_install目录,我们将_install目录拷贝到挂载的虚拟磁盘中:
如果希望busybox这个用户空间能够设置网卡,我们还需要加载xen-netfront.ko进入虚拟机磁盘的指定目录,我们将Dom0中的xen-netfront.ko模块复制进虚拟机磁盘的lib/modules/目录中,并需要查看模块依赖关系,右下图可知,可以发现无依赖关系,我们可以直接使用:
复制完成后卸载虚拟机磁盘:
# umount /mnt
至此,虚拟磁盘就构建完成了。
4).构建DomU虚拟机
复制虚拟机配置文件并编辑配置文件:
启动创建busybox这个虚拟机:
xl create busybox -c
查看虚拟机DomU中的ip地址,发现只存在lo环回设备,我们还未加载xen-netfront模块,我们加入网卡模块
设置IP地址
我们来进行ping测试
至此,一个简单的虚拟机的创建就完成了。
以上我们是用Guest0的vmlinuz和initramfs文件,这里我们也可以把文件放入到DomU的虚拟磁盘目录中,即使用DomU自有kernel来运行DomU,操作如下:
首先创建虚拟磁盘文件,以及拷贝xen的配置文件
首先我们需要对该虚拟磁盘进行分区格式化,分两个区,其中一个分区存放boot和kernel,以及initrd文件,另一个分区存放根文件系统
对虚拟磁盘进行分区,这里我们可以把其关联到本地回环设备上来,用losetup来实现
查看当前空闲的loop设备,使用losetup -f,这里显示的是/dev/loop1
由于上面我们已经有一个虚拟机busybox了,所以/dev/loop0正在使用当中,可使用losetup -a查看
开始实现关联本地回环设备
开始对/dev/loop1进行分区
查看/dev/loop1磁盘设备下的区分
我们在/dev/下并没有看到这两个分区设备,我们需执行下面这个步骤,来添加分区到map(/dev/mapper)中
接着对分区进行格式化
创建对应的挂载目录,并挂载分区至该目录上
拷贝kernel和initrd文件至/mnt/boot目录下,并且再安装grub,在/mnt/boot下多出来grub目录
在/mnt/boot/grub下创建编辑配置文件grub.conf
之前我们已经编译安装好busybox了,我们直接拷贝相关的根系统文件至/mnt/sysroot目录下,并创建其它相关的根系统文件,还要拷贝网卡设备xen-netfront.ko文件至/mnt/sysroot/lib/modules目录下
下面我们就可以拆除本地关联回环设备了,首先使用把映射文件删除,用kpartx -d /dev/loop1,再进行拆除,用losetup -d /dev/loop1,拆除之前,我们要卸载
编辑/etc/xen/busybox2配置文件
创建虚拟机,却报错,无法创建
错误原因:在宿主机上使用losetup对loop设备(qcow2格式的)进行关联、分区,格式化等,在GuestU中无法识别此类分区,反之,亦然。
这里我们还是使用raw格式的吧,重新创建虚拟磁盘文件
剩下的其它操作和上面一样,参考以上操作,诸如:拷贝kernel和initrd等文件,这里我就不重复操作了
修改配置文件里面的虚拟磁盘格式为raw,其它不需要动
创建启动虚拟机,有报错了
后来我把/mnt/boot/grub/grub.conf里面的xvda1改为了xvda2,才成功创建,不明白此处为什么xvda1不可以
针对上面的错误,网上查询给的原因:busybox不支持虚拟终端,需要真实存在的,到这里我也不知道怎么解决了,有知道的,回帖留言哈,万分感谢
欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) |
Powered by Discuz! X2.5 |