icon

Fekete BT

Publikálva: 2026.03.11
Frissítve: 2026.03.18

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.

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

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

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

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

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

Utóhangolások

1. Diszk méretének csökkentése első boot előtt

Mi van akkor, ha elmértük magunkat és az erdeti méret helyett nagyobb vagy kisebb diszket szeretnénk? Első körben én úgy gondolkodok, hogy mindig túlméretezem a diszket a template-ben. Szóval a leírtakkal ellentétben mindig nagyobban gondolkozom, mint ami ténylegesen kellhet. De gondoljuk azt, hogy van egy 63 GB-os template-ünk, ami feleslegesen nagy helyet foglalna, mivel soha nem használnánk. Ebből kiindulva csökkeneteni szeretnénk a klónozott gépünk diszkjének a méretét. Itt azért két külön iskolát kell megkülönböztetni. Ha megosztott tárhelyet használunk (pl. ZFS-t HA miatt), akkor mások a lépések, mint ha egy alap telepítésű Proxmox-t használnánk. Remélem azt nem kell kiemelnem, hogy ez a parancsok első sorban FULL clone-os VM-ek esetében működnek!

1.1 Méret csökkentés alap Proxmox esetén

Első körben nem árt tudni pontosan minek is szeretnénk csökkenteni a méretét, így a Web UI segítségével tájékozódjunk. Az esetemben a 996-os számú VM SCSI 0-ás diszkjét szeretném megkurtítani, ami vm-996-disk-1 néven fut.

Szerkesszük a VM config fájlját:

nano /etc/pve/qemu-server/996.conf

Egy a lentihez hasonló sort keressünk:

scsi0: local-lvm:vm-996-disk-1,discard=on,iothread=1,size=63G,ssd=1

Itt a "size" részt írjuk át egy számunkra megfelelő méretre:

scsi0: local-lvm:vm-996-disk-1,discard=on,iothread=1,size=20G,ssd=1

Ha ez meg van, akkor keressük meg a megfelelő diszk elérési útvonalát:

pvesm path local-lvm:vm-<VM_ID>-disk-<DISK_NUMBER>

Esetemben:

pvesm path local-lvm:vm-996-disk-1

Parancs kimenete:

root@feketebt:# pvesm path local-lvm:vm-996-disk-1
		/dev/pve/vm-996-disk-1
    

A következő parancsokkal csökkenthetjük a meghajtó méretét:

Ezzel konkrét mérettel tudjuk csökkenteni:

lvreduce -L -43G /dev/pve/vm-996-disk-1

Abszolút érétket adunk meg:

lvreduce -L 20G /dev/pve/vm-996-disk-1

1.2 Méret csökkentés megosztott tárhely esetén

Ez a rész akkor vonatkozik ránk, ha a VM disk-eket egy külön tárhelyre rakjuk, mert plusz tárhelynél nem az alapértelmezett helyen tárolódnak a VM diszkek.

Az én esetemben a "migration" egy ZFS tárhely. Ez tetszés szerint változhat, szóval a sajátunknak megfelelőt helyettesítsük be.

cd /mnt/pve/migration/images/996

Méretezzük át:

qemu-img resize -f raw --shrink vm-996-disk-1.raw 20G

Az alábbi parancs automatán átírja a config fájlt.

qm rescan

Mindkettő esetében hasznos parancs a diszk méretének az ellenőrzése:

qemu-img info vm-996-disk-1.raw

2. Diszk méretének növelése

Igazából ezt már bármikor elvégezhetjük. 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 bebootolt VM-n:

sudo growpart /dev/sda 1

3. IP-cím megváltozatása futási időben:

Előfordulnak esetek mikor tesztelni kell valamit és változtatni kell a VM IP-címén. Mivel VLAN-t tudunk változtatni a VM NIC-jén úgy is, hogy az fut, emiatt ez nem okozhat problémát. Az IP-címet egyébként a gép az első boot-ja során olvassa fel, így elvileg az sem okoz gondot, ha nem írjuk át a későbbiekben a Cloud-Init-ben a címet, de azért javallott. Pont ebből következik az is, hogy hiába fogunk a "Regenerate Image"-re rámenni, tényleges változás nem fog történni. Az új IP-t a Cloud-Initből csak a fentebb említett clean parancs után fogja felolvasni.

A VM-en szerkesszük a netplan-t:

sudo nano /etc/netplan/50-cloud-init.yaml

Itt az "addresses" részt szerkesszük és írjuk át az IP-t.

Ezt követően apply-zuk a változtatást:

sudo netplan apply

A leírtak Debian és Ubuntu esetében is igazak.

!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!