CentOS 6源码编译安装Xen4.6

17 篇文章 4 订阅

因为要修改Xen的源码,所以不得不要源码编译安装Xen,这真是体力活啊。其实编译一个 Xen 内核和编译一个普通 Linux 内核没有什么不同,如果发现编译后的内核启动不了,出现 kernel panic 的情况,多半是内核与机器的硬件没有配置好的原因,和 Xen 没有关系。

本文使用的环境是:CentOS 6.5 + linux-3.16.49内核 + xen-4.6.3

安装前的配置和安装需要的软件包

CentOS6.5系统安装以后,首先是要关闭SELinux的功能(缺省为enforcing状态):

[root@centos ~]# vi /etc/sysconfig/selinux     
# This file controls the state of SELinux on the system.    
# SELINUX= can take one of these three values:    
#     enforcing - SELinux security policy is enforced.    
#     permissive - SELinux prints warnings instead of enforcing.    
#     disabled - No SELinux policy is loaded.    
SELINUX=disabled    
# SELINUXTYPE= can take one of these two values:    
#     targeted - Targeted processes are protected,    
#     mls - Multi Level Security protection.    
SELINUXTYPE=targeted   

也可以考虑配一个速度快的yum源

之后,更新系统,并且安装编译 Xen 所需要的编译器、工具、软件库等:

#yum update

# yum groupinstall "Development Tools"
# yum install transfig wget tar less texi2html libaio-devel dev86 glibc-devel e2fsprogs-devel gitk mkinitrd iasl xz-devel bzip2-devel
# yum install pciutils-libs pciutils-devel SDL-devel libX11-devel gtk2-devel bridge-utils PyXML qemu-common qemu-img mercurial texinfo
# yum install libidn-devel yajl yajl-devel ocaml ocaml-findlib ocaml-findlib-devel python-devel uuid-devel libuuid-devel openssl-devel
# yum install python-markdown pandoc systemd-devel glibc-devel.i686

安装Xen

Xen官网下载相应的源码包后编译、安装:

# tar zxvf xen-4.6.3.tar.gz 
# cd xen-4.6.3
# ./configure
# make -j4 dist
# make install

安装 dom0 内核

这一步其实就是安装一个支持Xen的内核,在安装Xen之前或者之后进行都可以,但因为要配置内核以支持Xen,所以应该只能通过编译的方式来安装内核了吧。

下载相应的 Linux 内核源代码(从内核 2.6.39+ 开始 Linux 内核全面、正式的支持 Xen,但是一些必须的backend模块,直到linux3.0才加进来,也就是说3.0后的linux kernel对xen的支持才比较完美),配置 dom0 内核、编译、安装:

# tar xf linux-3.16.49.tar.xz 
# cd linux-3.16.49
# make menuconfig
配置menuconfig选项:

1,进入 Processor type and features --->[*]   Xen guest support


选择下面这些选项:


2,进入Device Drivers  ---> Block devices  --->  <*>   Xen virtual block device support
                                                                                    <*>   Xen block-device backend driver 

3、 Device Drivers  --->Xen driver support  把下面的都选上

4, Device Drivers  ---> Network device support  ---> <*>   Xen network device frontend driver
                                                                                               <*>   Xen backend network device

注意:

有的机器可能会遇到Device Drivers —> Xen driver support这个选项失踪的问题,这跟机器架构与系统配置有关,必须得打开处理器支持虚拟化的功能(进入BOIS),但有些机器太老可能没有这个功能。

还有就是配置完menuconfig后还是最后打开.config文件看一下,确保有以下模块(我就是安装完成后才发现缺少xenfs模块):

# vi .config
...
CONFIG_X86_IO_APIC=y
CONFIG_ACPI=y
CONFIG_ACPI_PROCFS=y (optional)
CONFIG_XEN_DOM0=y
CONFIG_PCI_XEN=y
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_XEN_BLKDEV_BACKEND=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_BALLOON=y
CONFIG_XEN_SCRUB_PAGES=y
...
然后是编译安装:
# make -j 4
# make modules_install
# make install

我安装的时候出现下面这些错误,

[root@bogon linux-3.16.49]# make install
sh ./arch/x86/boot/install.sh 3.16.49 arch/x86/boot/bzImage \
		System.map "/boot"
ERROR: modinfo: could not find module freq_table
ERROR: modinfo: could not find module mperf
ERROR: modinfo: could not find module snd_page_alloc
ERROR: modinfo: could not find module output
但可以找到这些模块,我就直接忽视了,结果也可以成功启动内核。

[root@bogon linux-3.16.49]#  lsmod |grep freq_table
freq_table              4936  2 cpufreq_ondemand,acpi_cpufreq
[root@bogon linux-3.16.49]#  lsmod |grep mperf
mperf                   1557  1 acpi_cpufreq
[root@bogon linux-3.16.49]# lsmod |grep snd_page_alloc
snd_page_alloc          8856  2 snd_hda_intel,snd_pcm
[root@bogon linux-3.16.49]# lsmod |grep output
output                  2409  1 video

配置 Grub

在这之前安装的Xen和Linux内核是没有任何联系的,所以修改Grub使Linux内核以支持Xen的方式启动,其实就是添加一个含有Xen的启动项。

[root@bogon ye]# cat /etc/grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/centos-centos_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sdb
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS-Xen (3.16.49-Xen)
        root (hd0,0)
	kernel /xen.gz dom0_mem=1024M,max:1024M loglvl=all guest_loglvl=all
        module /vmlinuz-3.16.49 ro root=/dev/mapper/centos-centos_root rd_LVM_LV=centos/centos_root nomodeset rd_NO_LUKS rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=centos/centos_swap  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        module /initramfs-3.16.49.img

title CentOS (3.16.49)
	root (hd0,0)
	kernel /vmlinuz-3.16.49 ro root=/dev/mapper/centos-centos_root rd_LVM_LV=centos/centos_root nomodeset rd_NO_LUKS rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=centos/centos_swap  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
	initrd /initramfs-3.16.49.img
title CentOS (2.6.32-696.13.2.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-696.13.2.el6.x86_64 ro root=/dev/mapper/centos-centos_root rd_LVM_LV=centos/centos_root nomodeset rd_NO_LUKS rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=centos/centos_swap  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
	initrd /initramfs-2.6.32-696.13.2.el6.x86_64.img
其中,下面就是要自己手动添加的启动项:

title CentOS-Xen (3.16.49-Xen)
        root (hd0,0)
	kernel /xen.gz dom0_mem=1024M,max:1024M loglvl=all guest_loglvl=all
        module /vmlinuz-3.16.49 ro root=/dev/mapper/centos-centos_root rd_LVM_LV=centos/centos_root nomodeset rd_NO_LUKS rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=centos/centos_swap  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        module /initramfs-3.16.49.img

重启选择带有Xen的内核进入系统

安装后的操作

重启运行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 ,挂载一下就可以了:
# modprobe xenfs
# mount -t xenfs xenfs /proc/xen

# ls /proc/xen/
capabilities  privcmd  xenbus  xsd_kva  xsd_port

(我的xenfs模块没有编译进内核,希望不会有影响)


还有,运行xl list无响应是因为xencommons服务未开启,开启一下:

# /etc/init.d/xencommons start
将init.d下面的三个xen服务设成开机启动
# chkconfig xencommons on
# chkconfig xendomains on
# chkconfig xen-watchdog on




参考文献:

[1]. https://www.lvtao.net/server/574.html

[2]. http://blog.csdn.net/hustsselbj/article/details/45674159?readlog

[3].  http://bbotte.blog.51cto.com/6205307/1564187/





  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值