CentOS 7源碼安裝 Xen 4.9

 CentOS 7源碼安裝 Xen跟Centos 6稍微有點不一樣,這裏記錄下來以便以後查閱。

安裝前的配置和安裝需要的軟件包

CentOS7系統安裝以後,首先查看有沒有開啓SELinux,如果開啓了要關閉SELinux的功能:

[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 -y gcc gcc-c++ git patch texinfo

# yum install -y python-devel acpica-tools libuuid-devel ncurses-devel glib2 glib2-devel libaio-devel openssl-devel yajl-devel glibc-devel glibc-devel.i686 pixman-devel

# wget http://mirror.centos.org/centos/6/os/x86_64/Packages/dev86-0.16.17-15.1.el6.x86_64.rpm
# rpm -ivh dev86-0.16.17-15.1.el6.x86_64.rpm

安裝Xen

到Xen官網下載相應的源碼包後編譯、安裝:
# tar zxvf xen-4.9.1.tar.gz     
# cd xen-4.9.1  
# ./configure --libdir=/usr/lib   
# make -j4 dist    
# make install

更新內核

CentOS 7使用的是Linux-3.10的內核,Xen 4.9無法啓動這個內核,這裏考慮更新爲最新的長期支持版本:

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# yum --enablerepo=elrepo-kernel install kernel-lt -y   

詳情可以參考<CentOS 6升級Linux內核>

配置 Grub

在這之前安裝的Xen和Linux內核是沒有任何聯繫的,所以修改Grub使Linux內核以支持Xen的方式啓動,其實就是添加一個含有Xen的啓動項。

如果是Linux4.4的內核,直接更新Grub2即可:

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

如果是其他內核,可能還需要手動配置 grub2,加上帶 Xen 的 Linux dom0 內核:

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

# vi /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 Linux, with Linux 3.15.4 Xen' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.15.4-advanced-aa64a6a3-518e-4a7c-9e88-2f3f33c8c700' {
        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'  6bc61a5c-12e3-4711-9532-61760367e0dc
        else
          search --no-floppy --fs-uuid --set=root 6bc61a5c-12e3-4711-9532-61760367e0dc
        fi
        multiboot /xen.gz
        module /vmlinuz-3.15.4 root=UUID=aa64a6a3-518e-4a7c-9e88-2f3f33c8c700 ro rd.lvm.lv=cl/root vconsole.font=latarcyrheb-sun16 crashkernel=auto  vconsole.keymap=us rd.lvm.lv=cl/swap rhgb quiet
        module /initramfs-3.15.4.img
}

# grub2-mkconfig -o /etc/grub2.cfg
上述操作是複製/etc/grub2.cfg中相應內核的引導配置,在 /etc/grub.d/40_custom 內加入自定Xen引導項目。

配置完Grub2後可以修改默認啓動內核爲Xen引導的內核:

# cat /boot/grub2/grub.cfg |grep menuentry
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'CentOS Linux (4.4.135-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.4.135-1.el7.elrepo.x86_64-advanced-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
menuentry 'CentOS Linux (3.10.0-862.3.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-862.3.2.el7.x86_64-advanced-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
menuentry 'CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-862.el7.x86_64-advanced-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
menuentry 'CentOS Linux (0-rescue-06f363a00b5c41c4920e89af9cbfcc21) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-06f363a00b5c41c4920e89af9cbfcc21-advanced-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
menuentry 'CentOS Linux, with Xen hypervisor' --class centos --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-simple-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
submenu 'Advanced options for CentOS Linux (with Xen hypervisor)' $menuentry_id_option 'gnulinux-advanced-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
	submenu 'Xen hypervisor, version 4.9.1' $menuentry_id_option 'xen-hypervisor-4.9.1-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
		menuentry 'CentOS Linux, with Xen 4.9.1 and Linux 4.4.135-1.el7.elrepo.x86_64' --class centos --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-4.4.135-1.el7.elrepo.x86_64-advanced-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
	submenu 'Xen hypervisor, version 4.9.1.config' $menuentry_id_option 'xen-hypervisor-4.9.1.config-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
		menuentry 'CentOS Linux, with Xen 4.9.1.config and Linux 4.4.135-1.el7.elrepo.x86_64' --class centos --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-4.4.135-1.el7.elrepo.x86_64-advanced-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
	submenu 'Xen hypervisor, version 4.9' $menuentry_id_option 'xen-hypervisor-4.9-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
		menuentry 'CentOS Linux, with Xen 4.9 and Linux 4.4.135-1.el7.elrepo.x86_64' --class centos --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-4.4.135-1.el7.elrepo.x86_64-advanced-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
	submenu 'Xen hypervisor, version 4' $menuentry_id_option 'xen-hypervisor-4-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
		menuentry 'CentOS Linux, with Xen 4 and Linux 4.4.135-1.el7.elrepo.x86_64' --class centos --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-4.4.135-1.el7.elrepo.x86_64-advanced-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
	submenu 'Xen hypervisor, version xen' $menuentry_id_option 'xen-hypervisor-xen-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
		menuentry 'CentOS Linux, with Xen xen and Linux 4.4.135-1.el7.elrepo.x86_64' --class centos --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-4.4.135-1.el7.elrepo.x86_64-advanced-263cd610-0e5b-4e48-a3b4-c9a751ecf5e8' {
# grub2-set-default 'CentOS Linux, with Xen hypervisor'

安裝後的操作

安裝Xen後首先重啓運行 ldconfig命令導入動態共享庫:

# ldconfig

之後運行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 

還有,運行xl list無響應是因爲xencommons服務未開啓,開啓一下:

# /etc/init.d/xencommons start  

將init.d下面的三個xen服務設成開機啓動

# chkconfig xencommons on  
# chkconfig xendomains on  
# chkconfig xen-watchdog on  

可能遇到的問題

如果在創建DomU時出現如下錯誤:

Traceback (most recent call last):
File “/usr/lib/xen/bin/pygrub”, line 20, in
import xen.lowlevel.xc ImportError: No module named xen.lowlevel.xc

可以通過重新編譯和安裝xen kernel來解決:

make dist PYTHON_PREFIX_ARG=
make install PYTHON_PREFIX_ARG=


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章