CentOS7 源码安装Xen

之前已经写过一篇 Fedora25下源码安装Xen4.8 。但是由于条件受限,实验需要在CentOS7的环境下进行。本来想着这两者应该差不多,但是在CentOS7上源码安装时却出现了很多问题。挣扎了近一个星期,现在将这些错误总结一下。

1. /etc/grub2.cfg文件的修改
在之前,安装完Xen和Domain0以后,会自动生成Fedora, with Xen hypervisor的启动选项。进入以后就没有问题了。在CentOS7下,安装完以后没有with xen hypervisor的选项,因此需要手动添加。添加过程其实很简单,但是之前不敢改。先看看可以启动的一些列表是怎么写的。下面是能正常启动的,内核版本为4.9.13的centos系统,也是Domain0系统。
(我遇到的很多问题都是因为xen hypervisor服务没有起来, Domain0是正常的)

# less /etc/grub2.cfg
***
menuentry 'CentOS Linux (4.9.13) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.9.13-advanced-ed7325d2-37d5-47ac-b284-6c03eb2b0c4f' {
        load_video
        insmod gzio
        insmod part_msdos
        insmod xfs
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  8bc8dcdd-f939-48ff-a294-8ca57cb89ac9
        else
          search --no-floppy --fs-uuid --set=root 8bc8dcdd-f939-48ff-a294-8ca57cb89ac9
        fi
        linux16 /vmlinuz-4.9.13 root=/dev/mapper/cl-root ro crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet 
        initrd16 /initramfs-4.9.13.img
}
***

我对比了这个启动项和之前的启动项发现大部分内容都是相同的,只需要在 fi 后面添加一个启动xen服务即可。/etc/grub2.cfg文件不能直接修改,因此我们要增加启动项需要去修改/etc/grub.d/40_custom。將上面的部分(复制自己grub2.cfg里面的)修改部分有三个:

  1. menuentry 后面的名字,這個名字自己取一个就行了。
  2. fi 下面加以行 multiboot /xen.gz
  3. 最后兩行的linux16和initrd16都改爲了module
#vim /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'CentOS, with Xen' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.9.13-advanced-ed7325d2-37d5-47ac-b284-6c03eb2b0c4f' {
        load_video
        insmod gzio
        insmod part_msdos
        insmod xfs
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  8bc8dcdd-f939-48ff-a294-8ca57cb89ac9
        else
          search --no-floppy --fs-uuid --set=root 8bc8dcdd-f939-48ff-a294-8ca57cb89ac9
        fi
        multiboot /xen.gz
        module /vmlinuz-4.9.13 root=/dev/mapper/cl-root ro crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet 
        module /initramfs-4.9.13.img
}

修改完以后要更新/etc/grub2.cfg, 命令如下:

#grub2-mkconfig -o /etc/grub2.cfg

2. xl info提示以下错误

xl info 
xc: error: Could not obtain handle on privileged command interface (2 = No such file or directory): Internal error
libxl: error: libxl.c:99:libxl_ctx_alloc: cannot open libxc handle: No such file or directory
cannot init xl context

出现类似的错误的原因总结起来有几点:

  • 没有挂载xenfs,这时候尝试挂载xenfs。如果挂载失败,那么很有可能和我一样,就是xen
    hypervisor没有启动。本来正常的启动顺序应该是,grub先启动xen
    hypervisor,然后再进入dom0。我直接进入了dom0,没有启动xen hypervisor。
# modprobe xenfs
# mount -t xenfs xenfs /proc/xen
  • 需要运行以下几条命令,然后重启:
systemctl enable xen-qemu-dom0-disk-backend.service
systemctl enable xen-init-dom0.service
systemctl enable xenconsoled.service
systemctl enable xendomains.service
systemctl enable xen-watchdog.service

如果是ubuntu/debian可能是以下的命令:

update-rc.d xencommons defaults 19 18
update-rc.d xendomains defaults 21 20
update-rc.d xen-watchdog defaults 22 23

3.安装顺序
官方文档里面推荐先安装Dom0,然后再安装xen工具。但实际上,对于CentOS来说应该先安装xen工具,然后再安装Dom0.(我也不懂为什么,在什么地方看到的也找不到了。但最后成功了)

你可能感兴趣的:(Linux学习心得)