黑帽联盟

 找回密码
 会员注册
查看: 1675|回复: 0
打印 上一主题 下一主题

[资源教程] 基于xen和busybox创建虚拟机

[复制链接]

295

主题

18

听众

965

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    难过
    2024-11-13 00:16
  • 签到天数: 370 天

    [LV.9]以坛为家II

    相关链接:xen虚拟化部署centos6.7系统

    xen的简介

    Xen是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。

    在旧(无虚拟硬件)的处理器上执行Xen,操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。


    Xen的架构如图:

    105ZT2W-0.jpg


    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).模拟创建虚拟机磁盘设备,构建本地环回文件:

    30.png

    2).格式化虚拟磁盘设备
    31.png

    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:
    21.png
    # make menuconfig

    配置如下图所示:

    选择“Busybox settings”:


    22.png


    选择“Build options”选项,以静态二进制创建busybox,不共享库文件:
    23.png

    配置完成后点击exit,退出后点击yes保存:
    32.jpg

    执行安装
    make

    此处会有报错,诸如:
    nsenter.c:(.text.nsenter_main+0x1be): undefined reference to `setns'
    sync.c:(.text.sync_main+0x74): undefined reference to `syncfs'

    重新执行make menuconfig
    取消以下几项即可,看截图
    24.png

    25.png

    26.png

    27.png

    再次执行make操作,成功编译
    28.png

    最后执行安装
    make install

    29.png

    编译安装busybox完成后在这个目录会生成安装好的文件_install目录,我们将_install目录拷贝到挂载的虚拟磁盘中:
    33.png

    如果希望busybox这个用户空间能够设置网卡,我们还需要加载xen-netfront.ko进入虚拟机磁盘的指定目录,我们将Dom0中的xen-netfront.ko模块复制进虚拟机磁盘的lib/modules/目录中,并需要查看模块依赖关系,右下图可知,可以发现无依赖关系,我们可以直接使用:
    34.png

    复制完成后卸载虚拟机磁盘:

    # umount /mnt


    至此,虚拟磁盘就构建完成了。

    4).构建DomU虚拟机
    复制虚拟机配置文件并编辑配置文件:

    36.png

    35.png

    启动创建busybox这个虚拟机:
    xl create busybox -c

    查看虚拟机DomU中的ip地址,发现只存在lo环回设备,我们还未加载xen-netfront模块,我们加入网卡模块
    37.png

    设置IP地址
    38.png

    我们来进行ping测试
    39.png


    至此,一个简单的虚拟机的创建就完成了。


    以上我们是用Guest0的vmlinuz和initramfs文件,这里我们也可以把文件放入到DomU的虚拟磁盘目录中,即使用DomU自有kernel来运行DomU,操作如下:
    首先创建虚拟磁盘文件,以及拷贝xen的配置文件
    21.png

    首先我们需要对该虚拟磁盘进行分区格式化,分两个区,其中一个分区存放boot和kernel,以及initrd文件,另一个分区存放根文件系统

    对虚拟磁盘进行分区,这里我们可以把其关联到本地回环设备上来,用losetup来实现
    查看当前空闲的loop设备,使用losetup -f,这里显示的是/dev/loop1

    22.png

    由于上面我们已经有一个虚拟机busybox了,所以/dev/loop0正在使用当中,可使用losetup -a查看
    23.png

    开始实现关联本地回环设备
    24.png

    开始对/dev/loop1进行分区
    25.png

    查看/dev/loop1磁盘设备下的区分

    26.png

    我们在/dev/下并没有看到这两个分区设备,我们需执行下面这个步骤,来添加分区到map(/dev/mapper)中
    27.png

    接着对分区进行格式化
    28.png

    创建对应的挂载目录,并挂载分区至该目录上
    29.png

    拷贝kernel和initrd文件至/mnt/boot目录下,并且再安装grub,在/mnt/boot下多出来grub目录

    30.png

    在/mnt/boot/grub下创建编辑配置文件grub.conf
    31.png

    之前我们已经编译安装好busybox了,我们直接拷贝相关的根系统文件至/mnt/sysroot目录下,并创建其它相关的根系统文件,还要拷贝网卡设备xen-netfront.ko文件至/mnt/sysroot/lib/modules目录下
    32.png

    下面我们就可以拆除本地关联回环设备了,首先使用把映射文件删除,用kpartx -d /dev/loop1,再进行拆除,用losetup -d /dev/loop1,拆除之前,我们要卸载
    33.png

    编辑/etc/xen/busybox2配置文件
    35.png

    创建虚拟机,却报错,无法创建
    36.png

    错误原因:在宿主机上使用losetup对loop设备(qcow2格式的)进行关联、分区,格式化等,在GuestU中无法识别此类分区,反之,亦然。


    这里我们还是使用raw格式的吧,重新创建虚拟磁盘文件
    34.png

    剩下的其它操作和上面一样,参考以上操作,诸如:拷贝kernel和initrd等文件,这里我就不重复操作了

    修改配置文件里面的虚拟磁盘格式为raw,其它不需要动
    37.png

    创建启动虚拟机,有报错了
    40.png

    后来我把/mnt/boot/grub/grub.conf里面的xvda1改为了xvda2,才成功创建,不明白此处为什么xvda1不可以
    43.png

    针对上面的错误,网上查询给的原因:busybox不支持虚拟终端,需要真实存在的,到这里我也不知道怎么解决了,有知道的,回帖留言哈,万分感谢

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部