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:

/etc/init.d/kvm-02-obsd
#!/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:

instalace 01

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.

$ ssh -L localhost:5902:kvm6.jr.lixis.cz:5902 root@kvm6.jr.lixis.cz

A potom se budeme přihlašovat takto: spice://localhost:5902

Zadáme heslo k zabezpečení komunikace

instalace 02

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

První obrazovka instalačního programu

instalace 03

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

Výběr rozložení klávesnice

instalace 04

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.

Jiná rozložení klávesnice

instalace 05

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

instalace 06

instalace 07

Nastavení IP adres síťové karty vio0

instalace 08

IPv4 si vezmeme z DHCP serveru (volba autoconf)

instalace 09

IPv6 si nastavíme sami pomocí SLAAC (volba autoconf)

instalace 10

Pokud bychom chtěli nastavit pevnou IP adresu, tak ji napíšeme místo slova autoconf.

Nastavení hesla uživatele root:

instalace 11

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.
Po startu systému budeme spouštět sshd server.

instalace 12

Stiskneme Enter.

Nastavení X Windows:

instalace 14

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 na sériovou linku

instalace 15

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

Nastavení uživatele bez administrátorských práv

instalace 16

Nastavení ssh pro roota

instalace 17

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.

Časová zóna

instalace 18

Č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.

  • sd0a se vždy používá pro kořenový filesystém /.

  • sd0b se vždy používá jako swapovací oblast

  • sd0c se nikdy nepoužívá.

Máme jediný disk sd0

instalace 19

Pro malé disky můžeme použít rozdělení MBR, pro velké je vhodnější GPT

instalace 20

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ě.

Nabídka automatického rozdělení disku

instalace 21

Automatické rozdělení disku nám nevyhovuje, musíme ho upravit. Stiskneme e.

Nápověda pro příkazy editoru rozdělení disku

instalace 22 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 ke. Příkazem p si můžeme kdykoliv vypsat jak rodělení disků na oddíly vypadá.

Znovu vytvoříme oddíl e o velikosti 10Gbyte

instalace 23

instalace 24

instalace 25

instalace 26

Teď už to vypadá tak, jak potřebujeme

instalace 27

Příkazem q můžeme tabulku rozdělení uložit

instalace 28

Stiskneme y pro uložení tabulky oddílů. Instalátor nám naformátuje všechny souborové systémy.

Vytvoření filesystémů a dotaz na instalační soubory

instalace 29

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

Cesta k instalačním souborům

instalace 30

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

Výběr balíků k instalaci.

instalace 31

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

Dotaz na ověření balíků

instalace 32

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ě.

Probíhající instalace

instalace 33

Námi zvolené balíky byla úspěšně nainstalovány

instalace 34

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

Instalace systému OpenBSD hotova.

instalace 35

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
Start systému (jádro)

instalace 36

Některé nutné věci u nově nainstalového systému

instalace 37

Hotovo, můžeme se přihlásit

instalace 38

Přihlášení do systému

instalace 39

Zjištění IP adres

instalace 41

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.

/var/nsd/zones/master/jr.lixis.cz.zone
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.

Zálohování virtuálu z hypervisoru
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.

create_obsd_vm.sh
#!/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:

obsd46
[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.