Wiki source code of proxmox

Version 10.3 by Kevin Wiki on 2026/05/18 08:20

Hide last authors
Kevin Wiki 1.1 1 (% class="row" %)
2 (((
3 (% class="col-xs-12 col-sm-8" %)
4 (((
Kevin Wiki 2.1 5 {{children/}}
Kevin Wiki 1.1 6
7
Kevin Wiki 3.1 8 = Getting Started with Proxmox VE LXC and VM Templates =
Kevin Wiki 1.1 9
Kevin Wiki 3.1 10 Proxmox VE (PVE) allows users to create and manage both LXC containers and KVM virtual machines (VMs). This guide walks you through the process of downloading, importing, and creating templates for both.
11
12 == LXC Templates ==
13
14 LXC containers are lightweight and ideal for running Linux services with minimal overhead.
15
16 === List Available Templates ===
17
18 To view the available LXC templates:
19
Kevin Wiki 4.1 20 {{code language="bash"}}
Kevin Wiki 2.2 21 pveam list
Kevin Wiki 4.1 22 {{/code}}
23
Kevin Wiki 3.1 24 === Download Templates ===
25
26 Use the pveam download command to import templates to the local storage:
27
Kevin Wiki 4.1 28 {{code language="bash"}}
Kevin Wiki 2.3 29 pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.gz
30 pveam download local ubuntu-24.04-standard_24.04-1_amd64.tar.zst
31 pveam download local debian-12-standard_11.7-1_amd64.tar.zst
Kevin Wiki 4.1 32 {{/code}}
33
Kevin Wiki 3.1 34 Once downloaded, these templates can be used to create new LXC containers from the Proxmox web interface or via CLI.
Kevin Wiki 1.1 35
Kevin Wiki 3.1 36 == VM Template from Ubuntu Cloud Image ==
Kevin Wiki 2.3 37
Kevin Wiki 3.1 38 KVM VMs are ideal when you need full virtualization, for instance, to run Windows or more complex Linux systems.
Kevin Wiki 2.4 39
Kevin Wiki 3.1 40 === Download Ubuntu Cloud Image ===
41
Kevin Wiki 4.1 42 Download the official Ubuntu 24.04 cloud [[image:]]
Kevin Wiki 3.1 43
Kevin Wiki 4.1 44 {{code language="bash"}}
Kevin Wiki 3.1 45 wget http://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img
Kevin Wiki 4.1 46 {{/code}}
47
Kevin Wiki 3.1 48 === Create the Virtual Machine ===
49
50 Create a new VM with ID 910 (you can pick any unused ID):
51
Kevin Wiki 4.1 52 {{code language="bash"}}
Kevin Wiki 2.4 53 qm create 910 -name template-ubuntu-jammy -memory 2048 -net0 virtio,bridge=vmbr0 -cores 2 -sockets 1
Kevin Wiki 4.1 54 {{/code}}
55
Kevin Wiki 3.1 56 === Import and Attach the Disk ===
57
58 Choose the correct storage (replace nvme if you use a different storage name):
59
Kevin Wiki 4.1 60 {{code language="bash"}}
Kevin Wiki 2.4 61 qm importdisk 910 ubuntu-24.04-server-cloudimg-amd64.img nvme
62 qm set 910 -scsihw virtio-scsi-pci -virtio0 nvme:vm-910-disk-0
Kevin Wiki 4.1 63 {{/code}}
64
Kevin Wiki 3.1 65 === Configure the VM ===
66
Kevin Wiki 4.1 67 {{code language="bash"}}
Kevin Wiki 2.4 68 qm set 910 -serial0 socket
69 qm set 910 -boot c -bootdisk virtio0
70 qm set 910 -agent 1
71 qm set 910 -hotplug disk,network,usb
72 qm set 910 -vcpus 1
73 qm set 910 -vga qxl
74 qm set 910 -ide2 nvme:cloudinit
75 qm resize 910 virtio0 +8G
Kevin Wiki 4.1 76 {{/code}}
77
78
Kevin Wiki 3.1 79 If your disk is using SCSI instead of virtio, resize like this:
Kevin Wiki 4.1 80
81 {{code language="bash"}}
Kevin Wiki 2.4 82 qm resize 910 scsi0 +8G
Kevin Wiki 4.1 83 {{/code}}
84
Kevin Wiki 3.1 85 === Convert the VM into a Template ===
86
Kevin Wiki 4.1 87 {{code language="bash"}}
Kevin Wiki 2.4 88 qm template 910
Kevin Wiki 4.1 89 {{/code}}
90
Kevin Wiki 3.1 91 Now you can use this template to clone new VMs instantly.
92
Kevin Wiki 5.1 93 == Bash Script to Automate Setup ==
94
Kevin Wiki 6.1 95 Install the above using bash script below
Kevin Wiki 5.1 96
97 === setup_proxmox_templates.sh ===
98
Kevin Wiki 6.1 99 {{code language="bash"}}
Kevin Wiki 5.1 100 #!/bin/bash
101
102 # Exit on errors
103 set -e
104
105 echo "Downloading LXC templates..."
Kevin Wiki 8.1 106 pveam download nvme ubuntu-22.04-standard_22.04-1_amd64.tar.zst
107 pveam download nvme ubuntu-24.04-standard_24.04-2_amd64.tar.zst
108 pveam download nvme alpine-3.21-default_20241217_amd64.tar.xz
109 pveam download nvme debian-12-standard_12.7-1_amd64.tar.zst
Kevin Wiki 5.1 110
111 echo "Downloading Ubuntu cloud image..."
112 wget -N http://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img
113
114 echo "Creating VM Template..."
Kevin Wiki 8.1 115 qm create 910 -name template-ubuntu-jammy -memory 2048 -net0 virtio,bridge=vmbr0 -cores 2 -sockets 1 && 1
116
117 # qm importdisk 910 ubuntu-24.04-server-cloudimg-amd64.img nvme
118 # qm set 910 -scsihw virtio-scsi-pci -scsi0-virtio0 nvme:910/vm-910-disk-0
119 qm set 910 -scsihw virtio-scsi-pci -scsi0 nvme:0,import-from=/mnt/nvmestorage/template/iso/ubuntu-24.04-server-cloudimg-amd64.img
120
Kevin Wiki 5.1 121 qm set 910 -serial0 socket
122 qm set 910 -boot c -bootdisk virtio0
123 qm set 910 -agent 1
124 qm set 910 -hotplug disk,network,usb
125 qm set 910 -vcpus 1
126 qm set 910 -vga qxl
127 qm set 910 -ide2 nvme:cloudinit
Kevin Wiki 8.1 128 # qm resize 910 scsi0 +8G
129
130 read -p "Confirm converting to template by pressing Enter"
Kevin Wiki 5.1 131 qm template 910
Kevin Wiki 7.1 132
133 echo "Templates setup complete."
Kevin Wiki 6.1 134 {{/code}}
Kevin Wiki 5.1 135
Kevin Wiki 8.2 136
137 = VM runtime setup =
138
139 After creating the VM and before making it into a template there are some programs and settings we want to ensure exists always.
140
Kevin Wiki 10.2 141 **qemu-guest-agent** is for allowing proxmox to query information from the VM such as IP address, shutdown commands, etc
Kevin Wiki 8.2 142
Kevin Wiki 8.6 143 {{code language="bash"}}
144 sudo apt update
145 sudo apt upgrade -y
146 sudo apt install qemu-guest-agent -y
147
148 sudo systemctl enable qemu-guest-agent.service
149 sudo systemctl start qemu-guest-agent.service
150 {{/code}}
151
Kevin Wiki 10.3 152 **reset machine-id** to not have overlapping ids from same template
Kevin Wiki 9.2 153
Kevin Wiki 10.2 154 {{code language="bash"}}
155 cat /dev/null > /etc/machine-id
156 cat /dev/null > /var/lib/dbus/machine-id
157 {{/code}}
158
Kevin Wiki 10.3 159 **clear bash history** to not leave any configuration in history
Kevin Wiki 10.2 160
161
Kevin Wiki 10.3 162 **cloud-init** is a great hook for installing or configuring programs or receiving variables from cloudinit CDROM drive. Making it easier to change IP, hostname, DNS, username/password, etc between VMs
163
164 {{code language="bash"}}
165 cloud-init clean
166 {{/code}}
167
Kevin Wiki 10.1 168 This is a debian example of what we are looking for:
169
Kevin Wiki 9.4 170 {{code language="yaml"}}
171 # The top level settings are used as module
172 # and system configuration.
173 # A set of users which may be applied and/or used by various modules
174 # when a 'default' entry is found it will reference the 'default_user'
175 # from the distro configuration specified below
176 users:
177 - default
Kevin Wiki 9.2 178
Kevin Wiki 9.4 179 # If this is set, 'root' will not be able to ssh in and they
180 # will get a message to login instead as the default $user
181 disable_root: true
Kevin Wiki 9.2 182
Kevin Wiki 9.4 183 # This will cause the set+update hostname module to not operate (if true)
184 preserve_hostname: false
Kevin Wiki 9.2 185
Kevin Wiki 9.4 186 apt:
187 # This prevents cloud-init from rewriting apt's sources.list file,
188 # which has been a source of surprise.
189 preserve_sources_list: true
190
191 # The modules that run in the 'init' stage
192 cloud_init_modules:
193 - seed_random
194 - bootcmd
195 - write-files
196 - growpart
197 - resizefs
198 - disk_setup
199 - mounts
200 - set_hostname
201 - update_hostname
202 - update_etc_hosts
203 - ca-certs
204 - rsyslog
205 - users-groups
206 - ssh
207
208 # The modules that run in the 'config' stage
209 cloud_config_modules:
210 - locale
211 - set-passwords
212 - grub-dpkg
213 - apt-pipelining
214 - apt-configure
215 - ntp
216 - timezone
217 - disable-ec2-metadata
218 - runcmd
219
220 # The modules that run in the 'final' stage
221 cloud_final_modules:
222 - package-update-upgrade-install
223 - write-files-deferred
224 - scripts-vendor
225 - scripts-per-once
226 - scripts-per-boot
227 - scripts-per-instance
228 - scripts-user
229 - ssh-authkey-fingerprints
Kevin Wiki 9.7 230 # - keys-to-console
Kevin Wiki 9.4 231 - install-hotplug
Kevin Wiki 9.7 232 # - phone-home
Kevin Wiki 9.4 233 - final-message
234 - power-state-change
235
236 # System and/or distro specific settings
237 # (not accessible to handlers/transforms)
238 system_info:
239 # This will affect which distro class gets used
240 distro: debian
241 # Default user name + that default users groups (if added/used)
242 default_user:
243 name: debian
244 lock_passwd: True
245 gecos: Debian
Kevin Wiki 9.7 246 groups: [sudo]
247 # Disables password-less sudo commands for default/debian user
248 sudo: ["ALL=(ALL) ALL"]
Kevin Wiki 9.4 249 shell: /bin/bash
250 # Other config here will be given to the distro class and/or path classes
251 paths:
252 cloud_dir: /var/lib/cloud/
253 templates_dir: /etc/cloud/templates/
254 package_mirrors:
255 - arches: [default]
256 failsafe:
257 primary: https://deb.debian.org/debian
258 security: https://deb.debian.org/debian-security
259 ssh_svcname: ssh
260 {{/code}}
261
262
263
264
265
Kevin Wiki 3.1 266
Kevin Wiki 1.1 267 )))
268
269 (% class="col-xs-12 col-sm-4" %)
270 (((
271 (% class="box" %)
272 (((
273 |=Site|[[Proxmox>>https://proxmox.com]]
274 |=Dashboard|
275 |=Servers|1200 €
276 |=Image|[[Credits>>https://commons.wikimedia.org/wiki/File:FalabellaFestivo.jpg]]
277 )))
278
279 (% class="box" %)
280 (((
281 **Contents**
282
283 {{toc/}}
284 )))
285 )))
286 )))