Dnes je posledný deň v roku 2025 a ja som vydal predošlí článok 07.08.2025 čo je takmer 5 mesiacov späť. V predošlom blogovom článku som sa chystal po prázdninách aktualizovať takmer všetko. Čas to rozhodol tak, že som sa k tomu dostal až tesne pred Vianocami, resp.tesne po Vianociach. Aj keď väčšina úloh sa mi podarila (Proxmox už beží na ver. 9.1.2 a pfSense na ver. 2.8.1, čo je vlastne gro), LXCs a Dockers stále čakajú na aktualizáciu. Avšak dnes by som sa chcel na svojom blogu podeliť o to ako jednoducho nainštalovať Debian 13 do VM za 20 sekúnd.
V minulosti som inštaloval Debian do VM klasickým spôsobom ako na holé železo.
- Z oficiálnej stránky Debian som stiahol ISO obraz pre moju platformu (amd64)
- ISO súbor som nahral do ISO images na Proxmoxe
- Cez Web GUI Proxmox som si vyklikal Virtual Machine (VM)
- ISO obraz som pripojil do virtuálnej mechaniky
- Spustil som boot na VM
- Inštaloval som pomocou sprievodcu
Netvrdím, že to bolo komplikované, ale možno trocha zdĺhavé. Od teraz to už budem robiť jednoduchšie, kratšie a hlavne bude všetko automatizované.
Keď som bol na webovej stránke Debian v sekcii download, tak som si všimol, že okrem ISO obrazov je tam ďalšia možnosť a to cloudové obrazy pre OpenStack, QEMU, alebo tiež Amazon (AWS), či Microsoft Azure. Z toho vyplíva že Debian oficiálne vydáva aj kvázi virtuálne disky, ktoré stačí do VM pripojiť. Pre moju platformu amd64 je správny qcow2, alebo raw.
Mám 2 možnosti ako dostanem raw do Proxmoxu. V rámci uzlu (NODE) kliknem na storage (local-proxmox), Import a potom uploadujem súbor priamo na Proxmox. Ešte jednoduchšie a fektívnejšie je použiť položku Download from URL (vtedy nesťahujeme súbor k sebe a následne upload na Proxmox, ale priamo z Debian úložiska sťahujeme priamo na Proxmox).

V každom prípade raw/qcow2 nejakým spôsobom dostaneme na Proxmox. Tento raw ma vekosť cca 3 GB. Teraz by sme si mali pripraviť VM. To znamená, že klikneme v rámci Proxmox na Create VM, nastavíme Meno, OS, disk, Procesor, Pamäť, Sieť, atď, ale ako som už na začiatku uviedol, budeme to robiť jednoduchšie. Všetky tieto otravné zaklikávatka si uložíme do skriptu a nakoniec spustíme skript.
Na Proxmox Shell (alebo cez SSH) vytvoríme súbor na editovanie a pomenujeme ho napr.
nano create_vm_debian_13.sh
Do súboru vložíme tento skript
#!/bin/bash
# --- KONFIGURACIA ---
VM_ID=$(pvesh get /cluster/nextid)
VM_NAME="debian-13-test"
STORAGE="local-zfs"
IMAGE_PATH="/var/lib/vz/import/debian-13-generic-amd64.raw"
BRIDGE="vmbr1"
MEMORY=2048
CORES=2
# Cloud-init udaje
USER_NAME="jany"
SSH_KEY_PATH="$HOME/ssh.key"
echo "Vytvaram VM $VM_ID ($VM_NAME) so SeaBIOS..."
# 1. Vytvorenie zakladnej VM
qm create $VM_ID --name $VM_NAME --memory $MEMORY --cores $CORES --cpu host \
--net0 virtio,bridge=$BRIDGE --ostype l26 --scsihw virtio-scsi-pci \
--agent 0 --machine q35 --bios seabios --vga virtio --onboot 1
# 2. Importovanie disku
echo "Importujem disk..."
qm importdisk $VM_ID $IMAGE_PATH $STORAGE
# 3. Pripojenie disku a zvacsenie (Cloud obrazy sú malé, pridame 10GB)
qm set $VM_ID --scsi0 $STORAGE:vm-$VM_ID-disk-0,discard=on
qm resize $VM_ID scsi0 +10G
# 4. Pridanie Cloud-Init mechaniky
qm set $VM_ID --ide2 $STORAGE:cloudinit
# 5. --- CLOUD-INIT NASTAVENIA ---
echo "Konfigurujem Cloud-init (User: $USER_NAME)..."
qm set $VM_ID --ciuser $USER_NAME
qm set $VM_ID --sshkeys $SSH_KEY_PATH
qm set $VM_ID --ipconfig0 ip=dhcp
# 6. Povieme BIOSu, aby startoval prioritne z disku scsi0
qm set $VM_ID --boot order=scsi0
echo "Hotovo! VM $VM_ID je vytvorena."
# 7. SPUSTENIE VM
echo "Spustam VM $VM_ID..."
qm start $VM_ID
echo "VM $VM_ID uspesne spustena."
Skript je okomentovaný, ale trocha si popíšeme čo sa deje počas behu skriptu. Na začiatku si stanovme premenné. Aj keď by sme mohli VM_ID nastaviť na pevné číslo, tak aby nedošlo k omylu, bude lepšie aby systém generoval prvé voľné ID pre VM. Čo sa týka úložiska STORAGE, to musíme nastaviť podľa toho ako je v našom systéme pomenované (u mňa local-zfs). Ďalej v pemennej IMAGE_PATH bude cesta k raw súboru. BRIDGE mám nastavenú na vmbr1. Na to treba tiež dávať pozor, pretože niekto môže mať na servery viac sieťových (virtuálnych kariet (ja mám napr. 6)). MEMORY a CORES môžeme tiež nastaviť ako premenné.
Dôležité je nastaviť aj premenné pre Cloud-init. V mojom prípade nastavujem USER_NAME. To je vlastne meno, ktorým sa budem prihlasovať do Debianu cez SSH. Heslo z bezpečnostných dôvodov nenastavujem, ale použijem SSH_KEY_PATH (to je casta k môjmu SSH kľúču). Tento kľúč nemusí mať každý uložený striktne na tomto mieste, ale ja som si zvolil túto cestu.
Predpokladám, že ako pracovný PC používame linux. Ak v linuxe nemáme vygenerovaný SSH kľúč, tak to môžeme napraviť napr. takto ssh-keygen -t ed25519. Kľúč potom pošleme na server. V každom prípade cesta a názov kľúča musí na servery existovať a musí sa zhodovať s cestou v premennej SSH_KEY_PATH
- Pomocou parametra qm create vytvoríme samotný VM
- Pomocou qm importdisk importujeme disk.
- Pomocou qm set a qm resize pripojíme a zväčšíme disk
- Ďalej nastavíme CLOUD-INIT (meno, SSH key a sieť)
- Bootovanie nastavíme na scsi0
- Na konci môžeme nastaviť aby s VM po vytvorení spustila
Skriptu nastavíme právo na spustenie a hneď ho spustíme
chmod +x create_vm_debian_13.sh
./create_vm_debian_13.sh
V závislosti od výkonu servera na ktorom beží Proxmox sa vygeneruje hotový VM s Debianom 13. Ja som túto procedúru absolvoval za 19 sekúnd.
Všimnime si v skripte riadok 38 ipconfig0. Nastavené je to tak, aby OS Debian dostal IP adresu z nadradeného DHCP servera. Ak by sme pre OS Debian požadovali pevnú IP adresu (napr. na 192.168.1.50), tak v skripte upravíme riadok 38 asi takto:
qm set $VM_ID --ipconfig0 ip=192.168.1.50/24,gw=192.168.1.1
Ak sme nenastavili v skripte IP adresu na statickú, tak ďalšou našou úlohou je zistiť, akú IP adresu od DHCP servera obdržal náš nový Debian 13. Bez ohľadu aký používame router, tak IP adresy pridelené pre zariadenia v LAN nájdeme v časti DHCP leases. Ak sme sa nakoniec dopracovali k IP adrese nášho novo vytvoreného servera debian, tak hneď sa môžeme prihlásiť cez SSH a spraviť aspoň nutný základ
ssh jany@192.168.1.50
Zrejme bude potrebné upraviť aj časovú zónu, ale najprv skontrolujeme, či je čas v poriadku.
timedatectl
Ja som videl niečo také a problém je vidieť v riadku 4 „Time zone: Etc/UTC (UTC, +0000)„, pretože ja sa nachádzam UTC +01
Local time: Wed 2025-12-31 12:18:32 UTC
Universal time: Wed 2025-12-31 12:18:32 UTC
RTC time: Wed 2025-12-31 12:18:32
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Upravím to na
sudo timedatectl set-timezone Europe/Bratislava
výsledok bude
Local time: Wed 2025-12-31 13:19:02 CET
Universal time: Wed 2025-12-31 12:19:02 UTC
RTC time: Wed 2025-12-31 12:19:02
Time zone: Europe/Bratislava (CET, +0100)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Následne môžeme aktualizovať systém
sudo apt update && sudo apt upgrade -y
Záver
Bežná príprava VM a inštalácia OS Debian mi zabrala ohromné množstvo času (odhadom cca 20-30 minút). Pri inštalácii pomocou Cloud Init je to 20 sekúnd. To znamená, že za 20 sekúnd mám pripravený čistý funkčný OS Debian. Pri ďalšej inštalácii stačí upraviť niekoľko premenných v skripte. V mojom prípade bude stačiť úprava len VM_NAME, pretože premenne ako STORAGE, IMAGE_PATH, BRIDGE, MEMORY, CORES, USER_NAME, SSH_KEY_PATH, sa prakticky nemenia. Samozrejme, že môže sa meniť veľkosť RAM, počet jadier CPU, alebo sieťová karta, ale v 99,99% budú nastavené parametre pre VM korektné a postačujúce. Keď som spravil prvú zálohu pomocou vzdump, komprimovanú v zstd, tak veľkosť bola len 424MB. Na koniec spomeniem ešte jednu výhodu, ktorú poskytuje Cloud Init. Pri vytváraní užívateľa, zamyká root heslo a užívateľa pridáva do skupiny sudo. Nastaví pravidlo pre užívateľa aby nemusel zadávať heslo. Čiže ako bežný užívateľ nemusím zadávať pri použití sudo, heslo (pretože pre roota žiadne heslo neexistuje).
