icon

Fekete BT

Publikálva: 2026.03.11
Frissítve: 2026.03.15

Tartalomjegyzék

Proxmox VM Template

A Proxmox lehetőséget biztosít nekünk arra, hogy egy már előre feltelepített VM-ből template-t készítsünk, melyet klónozva, újra felhasználhassuk azt. Ez akkor jó, hogy ha egyszerre nagy mennyiségű VM-t szeretnénk telepíteni haosnló paraméterekkel, vagy szimplán csak szeretünk egyszer dolgozni. Milyen lehetőségeink vannak? Gondolkozhatunk abban, hogy egy VM-t megcsinálunk és abból szeretnénk egy sablont készíteni, vagy használhatjuk az előre elkészített Cloud Image-ket, amik technikailag pont erre lettek kitalálva.

Őszintén szólva a telepített VM-ből készült sablonról nem feltétlenül beszélnék, mert az egy alap dolog. Előre meg lett csinálva áltlunk és már csak paraméterezni kell a klónt az első boot után. Első sorban a Cloud-Init témára koncentrálnék.

Ubuntu 24.04 LTS server Template Proxmox oldali beállításokkal

A General fülön adjunk egy olyan nevet a gépnek, ami DNS név kompatibilis. Tehát speciális karaktert nem tartalmazhat (Leginkább kötőjelben gondolkozzunk elválasztásnál)!

vm_general

Az OS fülön: "Do not use any media"

vm_os

A Disks fülön: Töröljük a disk-et. Ezt később importáljuk be:

vm_disks

Lépjünk oda, ahova letöltöttük az image fájlt: (Alapértelmezetten)

cd /var/lib/vz/template/iso/

A következő lépésben megnöveljük a disk méretét. A +57G helyett tetszőleges számot is írhatunk. Ezzel a növeléssel együtt nagyjából 60 GB-os lesz a diszkünk.

qemu-img resize ubuntu-24.04-server-cloudimg-amd64.img +57G

Ezt követően importáljuk a meghajtót a megfelelő számú VM alá:

qm disk import <vm_id> <img_file> <storage>

Esetemben:

qm disk import 999 ubuntu-24.04-server-cloudimg-amd64.img local-lvm

A VM Hardware résznénél megjelent egy "unused disk":

hardware_unused_disk

Ezt vegyük használatba a következő paraméterekkel:

hardware_unused_disk1

A CD-ROM-ot töröljük, ugyanis nem lesz rá szükség, illetve vegyünk fel egy új "CloudInit Drive"-ot. Nyomjuk az "Add" gombra -> CloudInit Drive opció. IDE helyett használjunk inkább SCSI-t.

Ha mindent jól csináltunk, akkor így kell kinéznie a Hardware résznek nagyjából:

hardware_done

Az Options résznél ne felejtsük el megváltoztatni a "Boot Order"-t!

Menjünk át a Cloud-Init részhez

cloud-init

Végül nyomjunk rá a "Regenerate Image" gombra.

Lehetőség szerint ne bootoljuk be a gépet, hanem ha mindent jónak látunk, akkor jobb egérgomb a VM nevére és válasszuk a "Convert to template" opciót.

Ha klónozni szeretnénk a template-t, akkor jobb egérgomb a template-re és válasszuk a "Clone" opciót.

clone_vm

Az új VM esetében töltsük ki az IP Config opciót a Cloud-Init résznél, majd indíthatjuk is a gépet. Az első boot kicsit lassabb.

Mivel az élet sajnos nem habos torta, emiatt persze itt is akadnak gondok. Console esetében a billentyűzet nyelve angol, szóval bejelentkezésnél figyeljünk oda erre. Az időzóna szintén nem a magyarnak megfelelő. Szóval első bejelentkezést követően ezeket kezelni kell. Az alábbi parancsokat nem fogom mélységekbe menően magyarázni, de ide rakom, hogy mik az alapok.

sudo dpkg-reconfigure locales
	sudo dpkg-reconfigure keyboard-configuration
	sudo timedatectl set-timezone Europe/Budapest
	sudo reboot

Ubuntu 24.04 LTS server Template egyedi snippet-tel

Mi van akkor, ha nem elég nekünk a Proxmox Web UI-ja által nyújtott lehetőségek, mert többet szeretnénk. (Vagy biztonsági szempontból mást sem győsz meg az, hogy plain text formátumban ott van a jelszó a felületen.) Legnagyobb szerencsénkre lehetőségünk van egyedi snippet csinálni és azt megadni. Amivel tisztában kell lenni, hogy ez egy .yaml fájl kell, hogy legyen és a formátuma is meg kell, hogy feleljen a yaml követelményeinek.

Először is ellenőrizzük, hogy az adott storage-n, amin dolgozni szeretnénk, engedélyezve van-e a "Snippets" opció: Datacenter -> Storage -> például local.

enable_snippets

Bemásolok egy konkrétan elkészített snippet, ez viszont nem felel meg a formai követelményeknek. Ezen kóddal szeretném szemléltetni, illetve magyarázni, hogy mi mindent lehet megtenni egy ilyen fájlban. Lentebb biztosítok letöltési linket egy txt fájlhoz, ami minden igényt kielégít.

nano /var/lib/vz/snippets/ubuntu-24.yaml
#cloud-config
preserve_hostname: false
manage_etc_hosts: true

users:
  - name: feketebt
    groups: sudo
    shell: /bin/bash
    lock_passwd: false
    passwd: "$6$v4pWfv2/1rR24SDS$TE4yxcNddNZTa/N50AmN5onikC6rfG1pZS2f1aN4TzWY5X3pfhlDNENUxOxTVImakdITSA4la8r3zW/Y8HB5S/"
    ssh_authorized_keys:
      - ssh-rsa AAAAB3...
      - ssh-dss AAAAB3...
      - ssh-ed25519 AAAA...

package_update: true
package_upgrade: true
package_reboot_if_required: true

locale: hu_HU.UTF-8
timezone: Europe/Budapest

ntp:
  enabled: true
  servers:
    - 0.hu.pool.ntp.org
    - 1.hu.pool.ntp.org
    - 2.hu.pool.ntp.org

keyboard:
  layout: hu
  variant: nodeadkeys
  model: pc105

apt:
  proxy: http://proxy.feketebt.net:8080
  conf: |
    Acquire::Retries "5";
    Acquire::http::Pipeline-Depth "0";
    Acquire::http::No-Cache "true";

write_files:
  - path: /etc/apt/apt.conf.d/95proxies
    permissions: '0644'
    content: |
      Acquire::http::Proxy "http://proxy.feketebt.net:8080";

  - path: /etc/profile.d/proxy.sh
    permissions: '0644'
    content: |
      export http_proxy="http://proxy.feketebt.net:8080"
      export no_proxy="localhost,127.0.0.1,10.0.0.0/8,172.24.0.0/16,192.168.0.0/16"

packages:
  - qemu-guest-agent

runcmd:
  - sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
  - sed -i 's/^#\?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
  - systemctl reload ssh
  - systemctl enable qemu-guest-agent
  - systemctl start qemu-guest-agent
  - echo "snoopy snoopy/install-ld-preload boolean true" | debconf-set-selections
  - DEBIAN_FRONTEND=noninteractive apt-get install -y snoopy

Nagyjából összefoglalva:

Hashelt jelszó létrehozása Linux esetében:

sudo apt install whois -y

Majd:

mkpasswd -m sha-512 "abc123"

Az itt kapott értéket másoljuk be a passwd részhez.

A kezdeti template VM létrehozása történhet a fentiekben leírtaknak megfelelően. Annyi különbséggel, hogy a User, Password és SSH public key részeket jelen esetben hagyjuk üressen.

Végezetül, ha végeztük a .yaml fájl szerkesztésével, a következő paranccsal rendeljük hozzá a megfelelő VM-hez:

qm set 999 --cicustom "user=local:snippets/ubuntu-24.yaml"

Lehetőség szerint ne bootoljuk be a gépet, hanem ha mindent jónak látunk, akkor jobb egérgomb a VM nevére és válasszuk a "Convert to template" opciót.

Ha klónozni szeretnénk a template-t, akkor jobb egérgomb a template-re és válasszuk a "Clone" opciót.

Az új VM esetében töltsük ki az IP Config opciót a Cloud-Init résznél, majd indíthatjuk is a gépet. Az első boot kicsit lassabb és mire minden csomagot és beállítást elvégez, az időbe telik (kb. 2-3 perc).

Mivel az élet sajnos továbbra sem habos torta, emiatt persze itt is akadnak gondok.A VM hostnevének a megváltoztatása ránk lesz bízva, mert sajnos azt már nem szedi át a Proxmox-ból.

sudo nano /etc/hostname
	sudo hostname --file /etc/hostname

illetve

sudo nano /etc/hosts

Debian 13 Template egyedi snippet-tel

Valószínűleg sokan az Ubunut mellett fognak dönteni, de szerintem nem csak én vagyok az egyedüli, aki sok esetben inkább Debian-t használ. Az alap VM beállítása és a Proxmox által felkínált alap Cloud-Init opciók ugyanazok, mint Ubuntu alatt. Ezekben semmi eltérés nincs, azt leszámítva, hogy Ubuntu helyett Debain image-t használunk.

Az alábbi paranccsal az alapértelmezett helyre töltjük le:

wget -P /var/lib/vz/template/iso https://cloud.debian.org/images/cloud/trixie/20260220-2394/debian-13-genericcloud-amd64-20260220-2394.qcow2

Egyfajta összefogalalásképpen, amit az Ubuntu 24.04-gyel két részben írtam le, itt egyben újra megmutatom az egészet.

A template létrehozása:

A General fülön adjunk egy olyan nevet a gépnek, ami DNS név kompatibilis. Tehát speciális karaktert nem tartalmazhat (Leginkább kötőjelben gondolkozzunk elválasztásnál)!

vm_d13_general

Az OS fülön: "Do not use any media"

vm_os

A Disks fülön: Töröljük a disk-et. Ezt később importáljuk be:

vm_disks

Lépjünk oda, ahova letöltöttük az image fájlt: (Alapértelmezetten)

cd /var/lib/vz/template/iso/

A következő lépésben megnöveljük a disk méretét. A +20G helyett tetszőleges számot is írhatunk.

qemu-img resize debian-13-genericcloud-amd64-20260220-2394.qcow2 +20G

Ezt követően importáljuk a meghajtót a megfelelő számú VM alá:

qm disk import <vm_id> <img_file> <storage>

Esetemben:

qm disk import 997 debian-13-genericcloud-amd64-20260220-2394.qcow2 local-lvm

A VM Hardware résznénél megjelent egy "unused disk":

hardware_d13_unused_disk

Ezt vegyük használatba a következő paraméterekkel:

hardware_d13_unused_disk1

A CD-ROM-ot töröljük, ugyanis nem lesz rá szükség, illetve vegyünk fel egy új "CloudInit Drive"-ot. Nyomjuk az "Add" gombra -> CloudInit Drive opció. IDE helyett használjunk inkább SCSI-t.

Ha mindent jól csináltunk, akkor így kell kinéznie a Hardware résznek nagyjából:

hardware_d13_done

Az Options résznél ne felejtsük el megváltoztatni a "Boot Order"-t!

Menjünk át a Cloud-Init részhez

d13_cloud-init

Végül nyomjunk rá a "Regenerate Image" gombra.

A snippet létrehozása:

Először is ellenőrizzük, hogy az adott storage-n, amin dolgozni szeretnénk, engedélyezve van-e a "Snippets" opció: Datacenter -> Storage -> például local.

enable_snippets

Bemásolok egy konkrétan elkészített snippet, ez viszont nem felel meg a formai követelményeknek. Ezen kóddal szeretném szemléltetni, illetve magyarázni, hogy mi mindent lehet megtenni egy ilyen fájlban. Lentebb biztosítok letöltési linket egy txt fájlhoz, ami minden igényt kielégít.

nano /var/lib/vz/snippets/debian-13.yaml
#cloud-config
	preserve_hostname: false
	manage_etc_hosts: true

	users:
  - name: feketebt
    groups: sudo
    shell: /bin/bash
    lock_passwd: false
    passwd: "$6$v4pWfv2/1rR24SDS$TE4yxcNddNZTa/N50AmN5onikC6rfG1pZS2f1aN4TzWY5X3pfhlDNENUxOxTVImakdITSA4la8r3zW/Y8HB5S/"
    ssh_authorized_keys:
      - ssh-rsa AAAAB3...
      - ssh-dss AAAAB3...
      - ssh-ed25519 AAAA...

	package_update: true
	package_upgrade: true
	package_reboot_if_required: true

	locale: hu_HU.UTF-8
	timezone: Europe/Budapest

	apt:
  proxy: http://proxy.feketebt.net:8080
  conf: |
    Acquire::Retries "5";
    Acquire::http::Pipeline-Depth "0";
    Acquire::http::No-Cache "true";

	ntp:
  enabled: true
  servers:
    - 0.hu.pool.ntp.org
    - 1.hu.pool.ntp.org
    - 2.hu.pool.ntp.org

	packages:
  - qemu-guest-agent
  - debconf-utils
  - keyboard-configuration
  - console-setup
  - rsyslog
  - dnsutils

	write_files:
  - path: /etc/default/keyboard
    permissions: "0644"
    content: |
      XKBMODEL="pc105"
      XKBLAYOUT="hu"
      XKBVARIANT="nodeadkeys"
      XKBOPTIONS=""
      BACKSPACE="guess"

  - path: /etc/profile.d/proxy.sh
    permissions: "0644"
    content: |
      export http_proxy="http://proxy.feketebt.net:8080"
      export no_proxy="localhost,127.0.0.1,127.0.1.1,10.0.0.0/8,172.24.0.0/16,192.168.0.0/24"

  - path: /etc/systemd/journald.conf.d/persistent.conf
    permissions: "0644"
    content: |
      [Journal]
      Storage=persistent
      SystemMaxUse=200M
      RuntimeMaxUse=100M

	runcmd:
  - mkdir -p /var/log/journal
  - systemctl restart systemd-journald
  - setupcon
  - sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
  - sed -i 's/^#\?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
  - systemctl reload ssh
  - systemctl enable qemu-guest-agent
  - systemctl start qemu-guest-agent
  - systemctl enable --now rsyslog
  - |
    echo "snoopy snoopy/install-ld-preload boolean true" | debconf-set-selections
    export DEBIAN_FRONTEND=noninteractive
    apt-get update
    apt-get install -y snoopy
	

Ez a full snippet, ettől lehet egyszerűbbet és bonyolultabbat is cisnálni. De ez egy jó magyarázati alap.

Nagyjából összefoglalva:

Hashelt jelszó létrehozása Linux esetében:

sudo apt install whois -y

Majd:

mkpasswd -m sha-512 "abc123"

Az itt kapott értéket másoljuk be a passwd részhez.

Ha végeztük a .yaml fájl szerkesztésével, a következő paranccsal rendeljük hozzá a megfelelő VM-hez:

qm set 997 --cicustom "user=local:snippets/debian-13.yaml"

Lehetőség szerint ne bootoljuk be a gépet, hanem ha mindent jónak látunk, akkor jobb egérgomb a VM nevére és válasszuk a "Convert to template" opciót.

A VM klónozása:

Ha klónozni szeretnénk a template-t, akkor jobb egérgomb a template-re és válasszuk a "Clone" opciót.

clone_d13_vm

Az új VM esetében töltsük ki az IP Config opciót a Cloud-Init résznél, majd indíthatjuk is a gépet. Az első boot kicsit lassabb lesz és még nem feltétlenül lesz magyar a billentyűzet. Viszont hagyni kell egy kicsit gondolkozni, majd jó eséllyel reboot-ol magától a gép és utána jó lesz.

Utólagos teendők a VM-n:

A VM hostnevének a megváltoztatása ránk lesz bízva, mert sajnos azt nem szedi át a Proxmox-ból.

sudo nano /etc/hostname
	sudo hostname --file /etc/hostname

illetve

sudo nano /etc/hosts

Hasznos parancsok

Teljes Cloud-init törlése (nem a csomagé). Ennek segítségével újra inicializálhatjuk a változtatásokat. Reboot kell utána.

sudo cloud-init clear --logs

Tárhely növelése. Ellőte a Proxmox-on meg kell növelni a disk mértetét: VM neve -> Hardware -> Hard Disk -> Disk Action -> Resize. Utána lehet kiadni ezt a parnacsot magán a VM-n.

sudo growpart /dev/sda 1

Cloud-init státusz lekérdezés:

cloud-init status

vagy:

cloud-init status --long

Logok ellenőrzése:

cat /var/log/cloud-init.log

Milyen modulok futottak le:

grep "Running module" /var/log/cloud-init.log

Mely modulok futnak milyen fázisban:

Stage Mit csinál
init datasource + háló
config config modulok
final runcmd, packages
cloud-init modules --mode=config
cloud-init modules --mode=final

Teljes futási idő elemzés:

	cloud-init analyze

Ez megmutatja mi lassítja a bootot:

cloud-init analyze blame

Minden cloud-init adat listázása:

cloud-init query --all

Az egyedi snippet-hez köthető ellenőrzések:

sudo cloud-init query userdata

!Figyelem!
Mindenki a saját maga meglátása és megítélése szerint cselekedjen az itt olvasottakkal és látottakkal kapcsolatban. Felelőléssget NEM válalok semmi iránt amit leírok, ez szimplán csak annak a dokumentálása, ami számomra működött. Senkit nem buzdítok arra, hogy illegális forrásból szerezzen be bármit is. A lehetséges adatvesztésért felelősséget nem vállalok. A SAJÁT CSELEKEDETEIDÉRT, SAJÁT MAGAD FELELSZ!