Poznámky z instalace Gentoo jako virtualizačního serveru II.
Tento článek navazuje na Poznámky z instalace Gentoo jako virtualizačního serveru I.
Instalace a nastavení KVM.
KVM je jen jaderný modul, který můžeme ovládat pomocí různých aplikací.
Pro ovládání jsem vybral qemu-kvm. Textový režim umožňuje pohodlné psaní vlastních skriptů a otevírá tak mnoho možností nastavení celého systému.
Instalace KVM a potřebných programů.
Genkernel automaticky zkompiloval potřebné moduly (kvm-intel, bridge, tun).
[root@machine]# emerge bridge-utils
[root@machine]# emerge usermode-utilities
[root@machine]# emerge socat
Automatické načtení modulů při startu serveru.
modules="kvm-intel bridge tun"
Úprava sítě pro bridge /etc/conf.d/net
# This blank configuration will automatically use DHCP for any net.* # scripts in /etc/init.d. To create a more complete configuration, # please review /etc/conf.d/net.example and save your configuration # in /etc/conf.d/net (this file :]!). dns_domain_lo="mojedomena" #config_eth0=( "192.168.0.1 netmask 255.255.255.0 brd 192.168.0.255" ) #routes_eth0=( "default gw 192.168.1.100" ) bridge_br0="eth0" config_eth0=( "null" ) config_br0=( "192.168.0.1/24" ) routes_br0=( "default via 192.168.0.100" ) dns_servers_br0=( "192.168.0.100" ) brctl_br0=( "setfd 0" "stp off" ) rc_need_br0=( "net.eth0" )
[root@machine]# ln -s net.lo net.br0
[root@machine]# rc-update add net.br0 default
[root@machine]# rc-update del net.eth0 default
IPForwarding automaticky po bootu
net.ipv4.ip_forward = 1
Vytvoření ovládacích skriptů virtuálních PC
O automatické spouštění, zastavení a restart virtuálů se postarají 3 bash skripty.
1. Skript na spuštění/ukončení/restart Virtuálního PC.
Pro každý virtuál budeme mít samostatný ovládací soubor. V něm nastavíme požadované parametry virtuálního stroje (CPU, RAM, MAC, ...)
[root@machine]# mkdir /home/virtual/run_scripts
[root@machine]# mkdir /home/virtual/run_scripts/vm
[root@machine]# nano -w /home/virtual/run_scripts/vm/virtual01
#!/bin/sh VM_NAME='virtual01' VM_PATH='/home/virtual/virtual01.qcow2' VM_MAC='DE:AC:BC:DE:EE:FE' VM_RAM='2048' VM_CPU='2' VM_TAP='qtap1' VM_VNC='1' VM_PID=/var/run/vm_$VM_NAME.pid case $1 in start) echo starting $VM_NAME tunctl -b -u root -t $VM_TAP > /dev/null ifconfig $VM_TAP up > /dev/null brctl addif br0 $VM_TAP > /dev/null qemu-kvm \ -drive file=$VM_PATH,if=ide,boot=on \ -m $VM_RAM -smp $VM_CPU -localtime \ -cdrom /home/kvmshare/debian.iso \ -net nic,macaddr=$VM_MAC \ -net tap,ifname=$VM_TAP,script=no,downscript=no \ -usbdevice tablet -vnc :$VM_VNC \ -pidfile $VM_PID \ -monitor unix:/var/run/$VM_NAME,server,nowait ifconfig $VM_TAP down brctl delif br0 $VM_TAP tunctl -d $VM_TAP > /dev/null rm -f $VM_PID ;; stop) echo -n stopping $VM_NAME sleep 1 && (echo "system_powerdown"; sleep 1) | socat - UNIX-CONNECT:/var/run/$VM_NAME > /dev/null & while true; do if [ ! -f $VM_PID ]; then echo stopped break else echo -n . sleep 1 fi done ;; *) echo use: "$0 start|stop" ;; esac
2. Skript na automatické ovládání více virtuálních PC najednou.
Tento skript projde adresář kde máme uložené předchozí spouštěcí skripty jednotlivých strojů a provede zadanou akci (start/stop/restart). Nezapomenout spouštěcí práva.
#!/bin/sh VMP=/home/virtual/run_scripts/vm vm_start() { for vm in `find $VMP -type f`; do $vm start & done } vm_stop() { for vm in `find $VMP -type f`; do $vm stop done } case $1 in start) vm_start ;; stop) vm_stop ;; restart) $0 stop sleep 1 $0 start ;; *) echo use: "$0 start|stop" ;; esac
3. Vytvoření služby/démona.
Nakonec vytvoříme jednoduchou službu, která se postará o ovládání předchozího hromadného skriptu.
#!/sbin/runscript # Copyright 1999-2008 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ depend() { need net.br0 } start() { ebegin "Loading virtual machines" sh /home/virtual/run_scripts/kvm.sh start eend $? "Failed to load the virtual machines" eend 0 } stop() { ebegin "Stopping virtual machines" sh /home/virtual/run_scripts/kvm.sh stop eend $? "Failed to stop virtual machines" eend 0 } restart() { ebegin "Restarting virtual machines" svc_stop svc_start eend $? "Failed to restart virtual machines" }
Ovládání služby:
[root@machine]# /etc/init.d/kvmservice stop
[root@machine]# /etc/init.d/kvmservice restart
Přidání služby do výchozího runlevelu.
Toto nastavení se postará o automatické spouštění služby po startu serveru.
[root@machine]# rc-update add kvmservise default
Samba pro sdílení souborů.
Pro sdílení souborů mezi hostem a guestem nainstalujeme a nastavíme sambu.
[root@machine]# smbpasswd -a kvmuser
[kvmshare] comment = KVM Share path = /home/kvmshare valid users = kvmuser public = no writable = yes printable = no create mask = 0765
Základní funkčnost virtualizačního serveru je hotova.
Poznámky z instalace Gentoo jako virtualizačního serveru I. - základní systém