Publikálva: 2026.03.11
Frissítve: 2026.03.18
Publikálva: 2026.03.11
Frissítve: 2026.03.18
Ez az egész sztori a Proxmox VE-hez tartozik, viszont szerintem megér egy külön cikket, mert hosszasan lehet erről beszélni. Illetve a Proxmox VE már nagyon telítve van így is, szóval ezért is gondoltam, hogy ezt a témát külön szedem. Igazából mindig az a kérdés, hogy honnan szeretnénk megközelíteni a dolgot és technikailag mire is van szükségünk?
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.
Hogy hogyan kell létrehozni egy új linux-os VM-t, arra részletekbe menően nem szeretnék kitérni, mert itt írtam már róla egy lépésről lépésre útmutatót. Jelen részben kizárólag a különbségekre koncentrálnék csak.
Első körben töltsük le az éppen aktuális ubuntu szerver image-t a nekünk tetsző módon (wget vagy "Download from URL"). Az alábbi linken keressük ezt a fájlt: ubuntu-24.04-server-cloudimg-amd64.img.
https://cloud-images.ubuntu.com/releases/server/24.04/release/
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)!
Az OS fülön: "Do not use any media"
A Disks fülön: Töröljük a disk-et. Ezt később importáljuk be:
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":
Ezt vegyük használatba a következő paraméterekkel:
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:
Menjünk át a Cloud-Init részhez
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.
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
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.
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
Az előre elkészített változatok letölthetőek innen: (A fájlt kiterjesztését meg kell változtatni .yaml-re, illetve az első 2 sort törölni kell!)
Az alap verzió. - ubuntu24-04.txt
Ez tartalmazza a szükséges proxy konfigot is, csak át kell írni. - ubuntu24-04-proxy.txt
Ez tartalmazza a szükséges proxy konfigot, ntp-t, és egy prompt nélküli snoopy csomag telepítést is. Csak át kell írni. - ubuntu24-04-full.txt
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 linkről töltsük le az éppen aktuális image-t. Az Ubuntu-val ellentétben ez egy ".qcow2" kiterjesztésű állomány lesz, így lehetőség szerint wget-tel töltsük le egy nekünk tetsző helyre. Egy ehhez hasonló elnevezésű fájlt keressünk: debian-13-genericcloud-amd64-20260220-2394.qcow2. Lényegében csak a dátum fog eltérni ettől a névtől.
https://cloud.debian.org/images/cloud/trixie/
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)!
Az OS fülön: "Do not use any media"
A Disks fülön: Töröljük a disk-et. Ezt később importáljuk be:
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":
Ezt vegyük használatba a következő paraméterekkel:
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:
Menjünk át a Cloud-Init részhez
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.
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.
Az előre elkészített változatok letölthetőek innen: (A fájlt kiterjesztését meg kell változtatni .yaml-re, illetve az első 2 sort törölni kell!)
Az alap verzió. - debian13.txt
Ez tartalmazza a szükséges proxy konfigot is, csak át kell írni. - debian13-proxy.txt
Ez tartalmazza a szükséges proxy konfigot, ntp-t, és egy prompt nélküli snoopy csomag telepítést is. Csak át kell írni. - debian13-full.txt
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.
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
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
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!
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
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.
Felhasznált linkek:
https://pve.proxmox.com/wiki/Cloud-Init_Support (Proxmox VM Template)
https://superuser.com/questions/1022019/how-to-increase-size-of-an-ubuntu-cloud-image (Hasznos parancsok)
https://pve.proxmox.com/wiki/Resize_disks (Hasznos parancsok)
https://forum.proxmox.com/threads/reduce-raw-size-in-vm-disk.51161/ (Utóhangolások)
!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!