virt-manager install on CentOS7-mini

We use virt-manager to boot VM on CentOS mini. This paper guide to install and configure the virt-manager and linux bridge. Because the virt-manager need display, we should install desktop(xfce) and vnc-server(tigervnc-server) at first. To avoid some issue, we disable and stop firewalld and selinux.

1. Stop firewall and selinux

1.1 firewall

1 systemctl stop firewalld 
2 systemctl disable firewalld 
3 iptables -F

# Check

1 systemctl status firewalld
2 iptables -L

1.2 selinux

Set selinux to permissive

1 setenforce 0 

Set selinux to disabled (need reboot the system to enable the config)

1 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

2 Desktop and VNC

# virt-manager need display

2.1 Install Desktop

1 yum install epel-release
2 yum groupinstall xfce
3 yum groupinstall "X Window System" #To enable startx
4 systemctl set-default graphical.target #Set the graphical as default

2.2 Install vnc-server

1 yum install tigervnc-server

2.3 Configure vnc-server

# Generate the configuration file when VNC is first enabled.

1 vncserver
2 cp ~/.vnc/xstartup ~/.vnc/xstartup.bak
3 vim ~/.vnc/xstartup
#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
#exec /etc/X11/xinit/xinitrc
startxfce4 &
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
4 vncserver -kill :1

2.4 Verify vnc-server

1 vncserver -geometry 1600x900

3 Install virt-manager

3.1 Install virt-manager and dependences

# add repo for libvirt latest

1 vim /etc/yum.repos.d/libvirt-latest.repo
[libvirt-latest]
baseurl = https://buildlogs.centos.org/centos/7/virt/x86_64/libvirt-latest/
gpgcheck = 0
name = libvirt-latest for CentOS7

# Install virt-manager virt-viewer and virt-v2v. virt-v2v is the uefi(/usr/share/AAVMF).

1 yum install virt-manager virt-viewer virt-v2v

3.2 Update qemu to 2.10.2

3.2.1 add repo for ceph 10.2.10

# need enable rbd to use ceph as backend on openstack

# jewel is ceph 10.2.10 and has ceph-devel

1 vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1

3.2.2 Install dependences

# Build & install need some dependences

1 yum -y install gcc gcc-c++ automake libtool zlib-devel glib2-devel bzip2-devel libuuid-devel spice-protocol spice-glib-devel usbredir-devel libaio-devel librbd-devel flex bison

3.2.3 Download source code

1 wget https://download.qemu.org/qemu-2.10.2.tar.xz
2 tar -xf qemu-2.10.2.tar.xz
3 cd qemu-2.10.2

3.2.4 Config, build and install

# If use ceph as backend storage, add "--enable-rbd", and install librbd-devel as dependences

1 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-rbd --enable-kvm
2 make –j
3 make -j install

3.2.5 Link the new qemu

1 ln -s /usr/bin/qemu-system-x86_64 /usr/libexec/qemu-kvm

3.3 Update libvirt to 4.0.0

3.3.1 Install dependences

1 yum -y install gcc libnl-devel libxml2-devel libxslt device-mapper-devel libpciaccess-devel yajl-devel

3.3.2 Download the packages

1 wget https://libvirt.org/sources/libvirt-4.0.0.tar.xz 
2 tar -xf libvirt-4.0.0.tar.xz
3 cd libvirt-4.0.0

3.3.3 Configure & make & install

1 systemctl stop libvirtd
2 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
3 make -j
4 make -j install
5 ldconfig
6 systemctl daemon-reload
7 systemctl restart libvirtd

3.4 Config libvirt to enable tcp connection

1 vim /etc/libvirt/libvirtd.conf
listen_tls = 0 
listen_tcp = 1 
tcp_port = "16509" 
listen_addr = "10.64.4.12" #the IP of your server 
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0777"
auth_tcp = "none"
host_uuid = "a3dbe9e0-4a05-58f3-b4b1-2cc0f42d4513" #host_uuid should be different
2 vim /etc/sysconfig/libvirtd
LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
LIBVIRTD_ARGS="--listen"
3 systemctl restart libvirtd
4 virsh -c qemu+tcp://10.64.4.12/system

3.5 Update uefi via edk2

Because virt-v2v can't boot cirros, we use edk2 to update uefi.

1 wget https://rpmfind.net/linux/fedora-secondary/releases/27/Everything/aarch64/os/Packages/e/edk2-aarch64-20170209git296153c5-5.fc27.noarch.rpm
2 rpm –i edk2-aarch64-20170209git296153c5-5.fc27.noarch.rpm
3 rm -rf /usr/share/AAVMF
4 mkdir /usr/share/AAVMF
5 ln /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw /usr/share/AAVMF/AAVMF_CODE.fd
6 ln /usr/share/edk2/aarch64/vars-template-pflash.raw /usr/share/AAVMF/AAVMF_VARS.fd

4 Linux bridge

4.1 Install bridge

1 yum install bridge-utils

4.2 Configure eth0 to br0 (temporary)

1 brctl addbr br0
2 brctl addif br0 eth0
3 ifconfig eth0 0
4 ifconfig br0 192.168.3.9 netmask 255.255.255.0 broadcast 192.168.3.255

4.3 Configure eth0 to br0 (permanent)

1 vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
BRIDGE=br0
IPV6INIT=no
HWADDR=8c:fd:f0:08:18:ab
2 vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR="10.64.37.158"
PREFIX="24"
GATEWAY="10.64.37.1"
DNS1="10.128.0.10"
IPV6INIT=no
DELAY=0
3 systemctl restart network