V tomto článku se naučíme nainstalovat systém OpenBSD do virtuálního stroje KVM na Gentoo Linuxu.
Hypervisor KVM se jmenuje kvm6.jr.lixis.cz, náš virtuální stroj se bude jmenovat obsd2.jr.lixis.cz. (Každý student bude mít svoje vlastní číslo stroje, na kterém se dohodneme a napíšu ho na tabuli).
Příprava na KVM hypervisoru
Přípravou hypervisoru se studenti nebudou zabývat, udělám ji sám.
Vytvoření disku o velikosti 40GB pro systém OpenBSD.
Virtuální disk uděláme v adresáři /home/vm/02-obsd.
kvm6 /home/vm/02-obsd # qemu-img create -f qcow2 obsd-disk1.qcow2 40G
Formatting 'obsd-disk1.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=42949672960 lazy_refcounts=off refcount_bits=16
kvm6 /home/vm/02-obsd #
Konfigurační a startovací skript na hypervisoru pro virtuální stroj:
#!/sbin/openrc-run
# Konfigurace KVM virtualu OpenBSD pro studenty
#
extra_commands="zaloha zalstop"
CISLO="02"
NAME="obsd${CISLO}"
VIRTIMG="/home/vm/iso/install-amd64-78.iso" (1)
DISK="obsd-disk1.qcow2" (2)
VIRTDISK="/home/vm/${CISLO}-obsd/${DISK}" (3)
ZALOHA_DIR="/data5/vm/${CISLO}-obsd"
ZALOHA="${ZALOHA_DIR}/${DISK}" (4)
pidfile="/run/kvm-${NAME}.pid"
MEMORY=1000 (5)
CORES=2 (6)
PORT=59${CISLO} (7)
MAC="00:25:2d:35:e6:${CISLO}" (8)
NETDEV="mp${CISLO}"
BR="br0"
TAP="tap${CISLO}"
CHANNEL=${CISLO}
SECRET="/etc/qemu/spice_secrets_${CISLO}" (9)
depend() {
use logger clock hostname net
}
start() { (10)
ebegin "Starting ${SVCNAME}"
mkdir -p /run/kvm-${NAME}
qemu-system-x86_64 --enable-kvm \
-name ${NAME} \
-cpu host \
-smp cores=${CORES} \
-m ${MEMORY} \
-drive driver=qcow2,id=disk1,file=${VIRTDISK},if=none -device ahci,id=ahci1 -device ide-hd,drive=disk1,bus=ahci1.0 \
-cdrom ${VIRTIMG} \
-boot c \
-device virtio-net,netdev=${NETDEV},mac=${MAC} \
-netdev tap,id=${NETDEV},ifname=${TAP},br=${BR} \
-rtc base=utc,clock=host \
-object secret,id=spice_sec,file=${SECRET} \
-vga qxl -device virtio-serial-pci -spice port=${PORT},ipv4=off,ipv6=on,password-secret=spice_sec \
-device virtserialport,chardev=spicechannel${CISLO},name=com.redhat.spice.${CISLO} -chardev spicevmc,id=spicechannel${CISLO},name=vdagent \
-monitor unix:/run/kvm-${NAME}/monitor,server,nowait \
-object rng-random,id=rng0,filename=/dev/urandom -device virtio-rng-pci,rng=rng0 \
-daemonize \
-pidfile ${pidfile}
eend $?
}
stop() { (11)
ebegin "Stopping ${SVCNAME}"
echo system_powerdown | socat - UNIX-CONNECT:/run/kvm-${NAME}/monitor
sleep 40
start-stop-daemon --stop --pidfile ${pidfile}
ret=$?
eend ${ret}
}
zaloha() { (12)
stop
ebegin "Zalohuji ${SVCNAME}"
mkdir -p ${ZALOHA_DIR}
mv ${ZALOHA}.4 ${ZALOHA}.5
mv ${ZALOHA}.3 ${ZALOHA}.4
mv ${ZALOHA}.2 ${ZALOHA}.3
mv ${ZALOHA}.1 ${ZALOHA}.2
mv ${ZALOHA} ${ZALOHA}.1
zstd -10 -T8 -k -c -o ${ZALOHA}.1.zstd ${VIRTDISK}
eend $?
start
}
zalstop() { (13)
stop
ebegin "Zalohuji ${SVCNAME} a potom stop"
mkdir -p ${ZALOHA_DIR}
mv ${ZALOHA}.4 ${ZALOHA}.5
mv ${ZALOHA}.3 ${ZALOHA}.4
mv ${ZALOHA}.2 ${ZALOHA}.3
mv ${ZALOHA}.1 ${ZALOHA}.2
mv ${ZALOHA} ${ZALOHA}.1
zstd -10 -T8 -k -c -o ${ZALOHA}.1.zstd ${VIRTDISK}
eend $?
}
| 1 | Instalační DVD (.iso). |
| 2 | Soubor s virtuálním diskem systému. |
| 3 | Kde je virtuální disk. |
| 4 | Kam se bude celý systém ve vypnutém stavu zálohovat. |
| 5 | Velikost operační paměti RAM přidělené virtuálnímu stroji. |
| 6 | Počet jader procesoru přidělený virtuálnímu stroji. |
| 7 | Číslo TCP portu, kde poslouchá virtuální obrazovka (spice). |
| 8 | MAC adresa ethernetu virtuálního stroje. |
| 9 | Soubor s heslem pro připojení k virtuální obrazovce. |
| 10 | Funkce pro nastartování virtuálního stroje. |
| 11 | Funkce pro zastavení virtuálního stroje. |
| 12 | Funkce pro vypnutí virtuálního stroje, zazálohování jeho disku a opětovné nastartování. |
| 13 | Funkce pro vypnutí virtuálního disku a zazálohování jeho disku. |
Instalace OpenBSD
Nastartujeme virtuální stroj a začneme instalaci:
kvm6 /etc/init.d # /etc/init.d/kvm-02-obsd start
* Caching service dependencies ... [ ok ]
* Starting kvm-02-obsd ... [ ok ]
kvm6 /etc/init.d #
Tohle už budete dělat vy, studenti.
Přihlásíme se pomocí virt-viewer na server kvm6.jr.lixis.cz na port 5902:

|
Pokud chceme zapezpečit naše spojení na vzdálený server a nemáme VPN, můžeme si klidně udělat jednoduchou VPN pomocí ssh.
A potom se budeme přihlašovat takto: |

Pokud chceme vyskočit z virt-vieweru, musíme stisknout Shift+F12 a hned Alt+Tab

Budeme instalovat nový systém, proto stiskneme klávesu i.

Obvykle nám bude vyhovovat předem nastavená americká klávesnice, stiskneme Enter.
Pokud bychom chtěli jiné rozložení, můžeme si seznam klávesnic vypsat stisknutím ? nebo L, česká klávesnice však není k dispozici.

Nastavení jména virtuálního stroje (hostname). Napíšu obsd2 a stisknu Enter


vio0
autoconf)
autoconf)
Pokud bychom chtěli nastavit pevnou IP adresu, tak ji napíšeme místo slova autoconf.
root:
Heslo se nám nebude zobrazovat, musíme ho napsat 2x stejně a stisknout 2x Enter.
| Ve virt-vieweru máme americkou klávenici, přestože na našem systému máme nastavenu českou. |

Stiskneme Enter.

X Windows se používá na desktopech, na serveru ho na nic nepotřebujeme.
Napíšeme no a stiskneme Enter

Přesměrování konzole nepotřebujeme, proto napíšeme no a stiskneme Enter


Sshd nastavíme nejprve tak, aby se mohl root přihlásit heslem. Napíšeme yes a stiskneme Enter.
Poté, co nahrajeme rootovi veřejný ssh klíč do /root/.ssh/authorized_keys, přihlášení pro roota zakážeme v konfiguračním souboru /etc/ssh/sshd_config.
Z hlediska bezpečnosti serveru je lepší nepovolit darebákům vůbec zkoušet uhodnout heslo roota.

Časovou zónu nám instalátor nastavil správně (Europe/Prague), stačí stisknout Enter.
Rozdělení disku a vytvoření filesystémů
V systému OpenBSD se celé SATA disky jmenují sd0, sd1, sd2 atd.
Diskové oddíly se značí malými písmenky abcedy. První oddíl na prvním disku bude mít označení sd0a.
-
sd0ase vždy používá pro kořenový filesystém/. -
sd0bse vždy používá jako swapovací oblast -
sd0cse nikdy nepoužívá.
sd0
MBR, pro velké je vhodnější GPT
Máme malý disk, uděláme rozdělení MBR, stačí stisknout Enter.
Instalátor nám nabízí automatické rozdělení disku, které je pro naše použití systému OpenBSD jako webserveru poněkud nevyhovující.
Soubory webu budou umístěny v adresáři /var/www, ale oddíl e, kam se bude připojovat /var je poněkud malý.
Zvětšíme oddíl e na aspoň 10GByte a oddíl i vynecháme, protože nebudeme kompilovat systém ze zdrojových kódů.
Toto všechno musíme udělat ručně.

Automatické rozdělení disku nám nevyhovuje, musíme ho upravit. Stiskneme e.
Budeme potřebovat příkazy:
-
a— přidat oddíl -
d— smazat oodíl -
p— výpis tabulky oddílů -
q— uložení tabulky oddílů a odchod z editoru.
Smažeme oddíly k až e.
Příkazem p si můžeme kdykoliv vypsat jak rodělení disků na oddíly vypadá.
e o velikosti 10Gbyte




q můžeme tabulku rozdělení uložit
Stiskneme y pro uložení tabulky oddílů. Instalátor nám naformátuje všechny souborové systémy.

Instalační soubory máme na instalačním DVD cd0, zvolíme si ho. Pokud bychom chtěli instalovat ze sítě protokolem http, tak napíšeme http.
Stiskneme Enter

Tady je to správně, stačí stisknout Enter

Nejméně problematické je nainstalovat všechno. Systém OpenBSD i se všemi utilitami je poměrně malý, nic neriskujeme.

Nemusíme provádět ověření instalačních balíků, pokud jsme již před tím udělali ověření celého instalačního DVD. Toto ověření je nutné provádět, pokud neinstalujeme z DVD, ale třeba ze sítě.


Pokud nechceme instalovat nic dalšího (a to nechceme, protože jsme nainstalovali všechno), stiskneme Enter.

Napíšeme h a Enter a tím zastavíme systém.
Po ukončení instalace musíme editovat na host systému konfiguraci virtuálního stroje
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
start() {
ebegin "Starting ${SVCNAME}"
mkdir -p /run/kvm-${NAME}
qemu-system-x86_64 --enable-kvm \
-name ${NAME} \
-cpu host \
-smp cores=${CORES} \
-m ${MEMORY} \
-drive driver=qcow2,id=disk1,file=${VIRTDISK},if=none -device ahci,id=ahci1 -device ide-hd,drive=disk1,bus=ahci1.0 \
-cdrom ${VIRTIMG} \
-boot d \
-device virtio-net,netdev=${NETDEV},mac=${MAC} \
-netdev tap,id=${NETDEV},ifname=${TAP},br=${BR} \
-rtc base=utc,clock=host \
-object secret,id=spice_sec,file=${SECRET} \
-vga qxl -device virtio-serial-pci -spice port=${PORT},ipv4=off,ipv6=on,password-secret=spice_sec \
-device virtserialport,chardev=spicechannel${CISLO},name=com.redhat.spice.${CISLO} -chardev spicevmc,id=spicechannel${CISLO},name=vdagent \
-monitor unix:/run/kvm-${NAME}/monitor,server,nowait \
-object rng-random,id=rng0,filename=/dev/urandom -device virtio-rng-pci,rng=rng0 \
-daemonize \
-pidfile ${pidfile}
eend $?
}
-boot d musíme zaměnit na -boot c.
A zrestartovat virtuální stroj.
# /etc/init.d/kvm-02-obsd restart





Taď už jenom zbývá zapsat do DNS název stoje a jeho IPv6 adresu. IPv4 nebudeme používat, protože nemáme k dispozici veřejnou IP adresu.
obsd IN AAAA 2a0e:5340:4:1:fd5a:75db:edab:478c
Zrestarujeme autoritativní nameserver a můžeme nakopírovat ssh klíč pro uživatele root na stroj obsd2.jr.lixis.cz.
$ scp .ssh/id_ed25519.pub root@obsd2.jr.lixis.cz:/tmp/
$ ssh root@obsd2.jr.lixis.cz
obsd2# cat /tmp/id_ed25519.pub >>/root/.ssh/authorized_keys
Dále se budeme zabývat dodatečným nastavením systému a konfigurací httpd serveru.
kvm6 ~ # /etc/init.d/kvm-02-obsd zaloha
* Stopping kvm-02-obsd ...
QEMU 10.0.5 monitor - type 'help' for more information
(qemu) system_powerdown [ ok ]
* Zalohuji kvm-02-obsd ...
mv: cannot stat '/data5/vm/02-obsd/obsd-disk1.qcow2.4': No such file or directory
mv: cannot stat '/data5/vm/02-obsd/obsd-disk1.qcow2.3': No such file or directory
mv: cannot stat '/data5/vm/02-obsd/obsd-disk1.qcow2.2': No such file or directory
mv: cannot stat '/data5/vm/02-obsd/obsd-disk1.qcow2.1': No such file or directory
mv: cannot stat '/data5/vm/02-obsd/obsd-disk1.qcow2': No such file or directory
/home/vm/02-obsd/obsd-disk1.qcow2 : 33.18% ( 2.59 GiB => 881 MiB, /data5/vm/02-obsd/obsd-disk1.qcow2.1.zstd) [ ok ]
* Starting kvm-02-obsd ... [ ok ]
kvm6 ~ #
Pomůcky
Vytvoření několika virtuálů najednou.
#!/bin/bash
cd /data1/vm
cisla="03 04 05 06 07 08 09 10 11 12 13 14 15 16"
for i in $cisla ; do
mkdir -p ${i}-obsd
cd ${i}-obsd
rm obsd-disk1.qcow2
qemu-img create -f qcow2 obsd-disk1.qcow2 40G
cd ..
cp kvm-01-obsd /etc/init.d/kvm-${i}-obsd
str1="CISLO=\"01\""
rstr="CISLO=\"${i}\""
# uprava konfiguracniho souboru
sed -i "s/$str1/$rstr/g" /etc/init.d/kvm-${i}-obsd
echo -n "hesloprokomunikaci${i}" >/etc/qemu/spice_secrets_${i}
chmod 640 /etc/qemu/spice_secrets_${i}
done
Automatizace remote-vieweru
Pokud chceme zautomatizovat přihlašování na konzoli operačního systému pomocí remote-vieweru tak existuje pěkná pomůcka.
Vytvoříme si adresář, kam si budeme ukládat nastavení, třeba remote-kvm.
V tomto adresáři si můžeme vytvořit textové konfigurační soubory pro připojování.
Třeba takto:
[virt-viewer]
type=spice
host=kvm6.jr.lixis.cz
port=5946
password=hesloprokomunikaci
Potom už jenom z terminálu na našem počítači spustíme remote-viewer takto:
cd remote-kvm
remote-viewer obsd46
A nemusíme si pamtovat a vyplňovat žádné věci a jsma na konzoli vzdáleného virtuálu.