K instalaci Gentoo Linux serveru ve virtuálním prostředí KVM potřebujeme:

  1. Nastavit virtuální stroj v KVM na hostu (hypervisoru) — to udělám já

  2. Provést samotnou instalaci virtuálního stroje (guesta) — to budete dělat vy, studenti

Nastavení virtuálního stroje KVM na hostu (hypervisoru) - 1. část instalace

Nejprve musíme připravit virtuální disk (image), k tomu se používá program qemu-image. Virtuální disk bude obyčejný soubor na hostu.

qemu-image create -f qcow2 /home/vm/vm1/vm1.qcow2 20G (1)
1 Přepínačem -f nastavujeme typ, v našm přípedě doporučený qcow2. Další parametr je cesta, kde bude image uloženo a poslední parametr je velikost disku. Formát qcow2 nealokuje celých 20Gbyte, ale velikost image souboru roste s naplněním disku virtuálního stroje.

Vlastní virtualizaci stroje provádí program qemu-system-x86_64 s obrovským množstvím parametrů (tím se zatím nebudeme zabývat).

Spouštěcí skript nám definuje nastavení hardware virtuálního stroje.

/etc/init.d/kvm-vm01
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
extra_commands="zaloha"
CISLO="01"                                                      (1)
NAME="vm$CISLO"                                                 (2)
MEMORY="2048M"                                                  (3)
CORES=2                                                         (4)
VIRTDISK="/home/vm/${NAME}/${NAME}.qcow2"                       (5)
ZALDISK="/mnt/backup/vm"                                        (6)
ZALOHA="${ZALDISK}/${NAME}/${NAME}.qcow2"                       (7)
ISOIMG="/home/vm/iso/finnix-125.iso"                            (8)
pidfile="/run/kvm-${NAME}.pid"
PORT=59$CISLO                                                   (9)
MAC="00:25:2d:36:e6:$CISLO"                                     (10)
NETDEV="mp$CISLO"                                               (11)
BR="br0"                                                        (12)
TAP="tap$CISLO"                                                 (13)
CHANNEL=$CISLO                                                  (14)
SECRET="/etc/qemu/spice${CISLO}"                                (15)

depend() {
	use logger clock hostname net
}

start() {                                                       (16)
	ebegin "Starting ${SVCNAME}"
	mkdir -p /run/kvm-${NAME}
	qemu-system-x86_64 -enable-kvm \
			-name ${NAME} \
			-smp cores=${CORES} \
			-cpu host \
			-m ${MEMORY} \
			-drive driver=qcow2,file=${VIRTDISK},if=virtio \
			-cdrom ${ISOIMG} \
			-device virtio-net,netdev=${NETDEV},mac=${MAC} \
			-netdev tap,id=${NETDEV},ifname=${TAP},br=${BR} \
			-boot order=c \
			-object secret,id="spice${CISLO}",file=${SECRET} \
			-vga qxl -device virtio-serial-pci -spice port=${PORT},password-secret="spice${CISLO}" \
			-device virtserialport,chardev=spicechannel${CHANNEL},name=com.redhat.spice.${CHANNEL} -chardev spicevmc,id=spicechannel${CHANNEL},name=vdagent \
			-monitor unix:/run/kvm-${NAME}/monitor,server,nowait \
			-object rng-random,id=rng${CHANNEL},filename=/dev/urandom -device virtio-rng-pci,rng=rng${CHANNEL} \
			-daemonize \
			-pidfile ${pidfile}
	eend $?
}

stop() {                                                        (17)
	ebegin "Stopping ${SVCNAME}"
	echo system_powerdown | socat - UNIX-CONNECT:/run/kvm-${NAME}/monitor
	sleep 10
	start-stop-daemon --stop --pidfile ${pidfile}
	ret=$?
	eend ${ret}
}

zaloha() {                                                      (18)
	stop
	ebegin "Zalohuji ${SVCNAME}"
	mkdir -p $ZALDISK/${NAME}
	mv $ZALOHA.xz $ZALOHA.xz.old
	cat $VIRTDISK | xz > $ZALOHA.xz
	eend $?
	start
}
1 Interní číslo virtuálního stroje (guesta).
2 Interní jméno virtuálního stroje.
3 Přidělená paměť RAM.
4 Počet jader procesoru.
5 Virtuální disk.
6 Kam se bude zálohovat.
7 Jméno souboru se zálohou.
8 Instalační CDROM.
9 Na jakém portu bude virtuální stroj poslouchat (spice protokol).
10 MAC adresa síťové karty
11 Interní číslo sítě
12 Na jaký bridge hypervisoru to bude připojeno.
13 Interní TAP rozhraní
14 Interní komunikační kanál
15 V tomto souboru se nachází heslo pro připojení virt-viewerem
16 Funkce startující virtuální stroj, uvnitř je samotná definice virtuálního stroje.
17 Funkce k zastavení virtuálního stroje.
18 Funkce ke kompletní záloze virtuálního stroje.

Úkol na dnešní hodinu

Každý máte nainstalovaný miniaturní Gentoo Linux server sám pro sebe. Zkusíte si dostat se na konsoli server pomocí virt-vieweru. Nastavení je v následující tabulce. IP adresu virtuálu napíšu na tabuli. Každý bude používat svůj port a svoje heslo. Hesla jste dostali na papírku. Virtuální stroje budou bohužel přístupné jenom ve škole, protože nemáme zatím k dispozici veřejnou IP adresu pro hypervisor.

Ukázka vyplnění pole "Connection Address" virt-vieweru

virt viewer1

Úspěšné přihlášení

virt viewer2

Tabulka 1. Přihlašovací údaje
Jméno studenta Jméno virtuálního stroje Port

Černák Jiří

vm01

5901

Hlaváčková Eliška

vm02

5902

Hrzán Ondřej

vm03

5903

Chudý Marek

vm04

5904

Jakoubek David

vm05

5905

Ježek Jan

vm06

5906

Jílek Petr

vm07

5907

John Tomáš

vm08

5908

Kaplan Martin

vm09

5909

Kouba Dalimil

vm10

5910

Martinková Nela

vm11

5911

Nývltová Michaela

vm12

5912

Plocek Martin

vm13

5913

Pospíšil Jan

vm14

5914

Potočková Nikola

vm15

5915

Solawa Kordian Adam

vm16

5916

Suchánek Adam

vm17

5917

Šabata Jan

vm18

5918

Šebesta Jakub

vm19

5919

Šubrt Štěpán

vm20

5920

Tran Nam Pham

vm21

5921

Heslo roota do konsole je stejné, jako jste dostali na papírku.

Pokud chcete opustit virt-viewer protože vám chytnul myš a klávesnici, na Linuxu stiskněte klávesy pravý Ctrl + pravý Alt, na Windows Shift+F12.