小论文的实验需要去修改xen的源代码。因此,需要搭建xen的环境,由于需要修改源代码,因此在构建环境的时候必须从源码安装开始。电脑很早之前装了个Fedora21,平时都是师兄在用,发现系统已经被更新成了Fedora25,参考网上的链接,今天总算安装成功了。其实,安装过程中很多步骤以及命令我都是一知半解。下面,主要介绍安装过程,而不涉及每一步是什么意思。
主要参考链接:
Fedora20上Xen的安装与部署
在CentOS7.0上源码安装Xen4.5
准备工作
更新系统,并且安装编译Xen所需要的一些工具以及依赖等。
我也不清楚,他们是怎么知道需要这些工具以及依赖包的,如果按照README一个一个搜索的话特别麻烦。
# 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
关闭SELinux
修改/etc/selinux/config文件,将SELINUX改为disabled,如下第7行。更改完以后,重启电脑。
# 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=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
下载、安装Xen
下载地址:Xen源码下载链接
我下载的是目前最新的版本“Supported Xen Project 4.8 Series ”,网上搜索了解压命令,解压后进入目录。然后安装xen
#make clean
#./configure
#make dist
#make install
安装Domain0内核
Domain0内核的版本最好与当前正在使用的Linux的内核版本保持一致。如下所示,我当前的内核版本是4.9.10
#uname -a
Linux localhost.localdomain 4.9.10-200.fc25.x86_64 #1 SMP Wed Feb 15 23:28:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
去内核的官网下载对应版本的内核,进行配置,编译,安装。
#wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.10.tar.xz
#tar xf linux-4.9.10.tar.xz
#cd linux-4.9.10
#make menuconfig
make menuconfig命令执行后,会出来内核配置的界面。但是,我不太清楚,需要配置什么。我看了一下虚拟化支持那里差不多都选上了就按照默认设置退出了。这时会在对应的目录下自动生成一个.config文件。没有自动生成说明,没弄好,我记得就是进去,然后Exit就会提示是否生成.config文件。接着,修改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
#make modules
#make modules_install
#make install
配置Grub
# grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2
Windows 10 (loader) (on /dev/sda1)
Fedora (4.9.10-200.fc25.x86_64) 25 (Workstation Edition)
Fedora, with Xen hypervisor
#grub2-set-default 'Fedora, with Xen hypervisor'
# grub2-editenv list
saved_entry=Fedora, with Xen hypervisor
修改错误
重启以后尝试命令xl info发现有错。
参考在CentOS7.0上源码安装Xen4.5可能出现的错误和解决办法
进入/usr/lib/目录将/usr/local/lib/目录下所有的绿色文件做了链接,链接到/usr/lib/目录下。最后别忘了执行ldconfig。
[root@localhost lib]# cd /usr/lib/
[root@localhost lib]# ln -s /usr/local/lib/libxlutil.so.4.8.0 libxlutil.so.4.8
[root@localhost lib]# ln -s /usr/local/lib/libxlutil.so.4.8.0 libxlutil.so
[root@localhost lib]# ln -s /usr/local/lib/libxenlight.so.4.8.0 libxenlight.so.4.8
[root@localhost lib]# ln -s /usr/local/lib/libxenlight.so.4.8.0 libxenlight.so
[root@localhost lib]# ln -s /usr/local/lib/libxenctrl.so.4.8.0 libxenctrl.so.4.8
[root@localhost lib]# ln -s /usr/local/lib/libxenctrl.so.4.8.0 libxenctrl.so
[root@localhost lib]# ln -s /usr/local/lib/libxenguest.so.4.8.0 libxenguest.so.4.8.0
[root@localhost lib]# ln -s /usr/local/lib/libxenguest.so.4.8.0 libxenguest.so.4.8
[root@localhost lib]# ln -s /usr/local/lib/libxenguest.so.4.8.0 libxenguest.so
[root@localhost lib]# ln -s /usr/local/lib/libxenstat.so.0.0 libxenstat.so.0
[root@localhost lib]# ln -s /usr/local/lib/libxenstat.so.0.0 libxenstat.so
[root@localhost lib]# ln -s /usr/local/lib/libxenstore.so.3.0.3 libxenstore.so.3.0
[root@localhost lib]# ln -s /usr/local/lib/libxenstore.so.3.0.3 libxenstore.so
[root@localhost lib]# ln -s /usr/local/lib/libxenvchan.so.4.8.0 libxenvchan.so.4.8
[root@localhost lib]# ln -s /usr/local/lib/libxenvchan.so.4.8.0 libxenvchan.so
[root@localhost lib]# ln -s /usr/local/lib/libblktapctl.so.1.0.0 libblktapctl.so.1.0
[root@localhost lib]# ln -s /usr/local/lib/libblktapctl.so.1.0.0 libblktapctl.so
[root@localhost lib]# ln -s /usr/local/lib/libfsimage.so.1.0.0 libfsimage.so.1.0
[root@localhost lib]# ln -s /usr/local/lib/libfsimage.so.1.0.0 libfsimage.so
[root@localhost lib]# ln -s /usr/local/lib/libvhd.so.1.0.0 libvhd.so.1.0
[root@localhost lib]# ln -s /usr/local/lib/libvhd.so.1.0.0 libvhd.so
[root@localhost lib]# ln -s /usr/local/lib/libxencall.so.1.0 libxencall.so.1.0
[root@localhost lib]# ln -s /usr/local/lib/libxencall.so.1.0 libxencall.so
[root@localhost lib]# ln -s /usr/local/lib/libxenevtchn.so.1.0 libxenevtchn.so.1.0
[root@localhost lib]# ln -s /usr/local/lib/libxenevtchn.so.1.0 libxenevtchn.so
[root@localhost lib]# ln -s /usr/local/lib/libxenforeignmemory.so.1.0 libxenforeignmemory.so.1.0
[root@localhost lib]# ln -s /usr/local/lib/libxenforeignmemory.so.1.0 libxenforeignmemory.so
[root@localhost lib]# ln -s /usr/local/lib/libxengnttab.so.1.1 libxengnttab.so.1
[root@localhost lib]# ln -s /usr/local/lib/libxengnttab.so.1.1 libxengnttab.so
[root@localhost lib]# ln -s /usr/local/lib/libxentoollog.so.1.0 libxentoollog.so.1
[root@localhost lib]# ln -s /usr/local/lib/libxentoollog.so.1.0 libxentoollog.so
[root@localhost lib]# ldconfig
再次运行xl info成功,如下:
[root@localhost lib]# xl info
host : localhost.localdomain
release : 4.9.10-200.fc25.x86_64
version : #1 SMP Wed Feb 15 23:28:59 UTC 2017
machine : x86_64
nr_cpus : 4
max_cpu_id : 3
nr_nodes : 1
cores_per_socket : 4
threads_per_core : 1
cpu_mhz : 3192
hw_caps : b7ebfbff:77bae3ff:28100800:00000001:00000001:00000281:00000000:00000100
virt_caps : hvm hvm_directio
total_memory : 8122
free_memory : 128
sharing_freed_memory : 0
sharing_used_memory : 0
outstanding_claims : 0
free_cpus : 0
xen_major : 4
xen_minor : 8
xen_extra : .0
xen_version : 4.8.0
xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
xen_scheduler : credit
xen_pagesize : 4096
platform_params : virt_start=0xffff800000000000
xen_changeset :
xen_commandline : placeholder
cc_compiler : gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)
cc_compile_by : bearox
cc_compile_domain : localdomain
cc_compile_date : Wed Feb 22 10:07:48 CST 2017
build_id : 308d8cce77adca4d502c71a2dc66202a0b6cff9e
xend_config_format : 4
最后,启动xencommons,旧版本的xend已经被xencommons取代了。
root@localhost lib]# /etc/init.d/xencommons start
Starting /usr/local/sbin/oxenstored...Setting domain 0 name, domid and JSON config...
Done setting up Dom0
Starting xenconsoled...
Starting QEMU as disk backend for dom0
[root@localhost lib]# xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 7881 4 r----- 966.2
Xen 从 4.1 版本开始引入了新版工具集 xl/libxl,并在后续的版本中逐步替代旧的 xm/xend,在 4.5 版本中已经完全删除了 xm/xend.