Wiki source code of proxmox

Version 10.2 by Kevin Wiki on 2026/05/18 08:18

Show last authors
1 (% class="row" %)
2 (((
3 (% class="col-xs-12 col-sm-8" %)
4 (((
5 {{children/}}
6
7
8 = Getting Started with Proxmox VE LXC and VM Templates =
9
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
20 {{code language="bash"}}
21 pveam list
22 {{/code}}
23
24 === Download Templates ===
25
26 Use the pveam download command to import templates to the local storage:
27
28 {{code language="bash"}}
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
32 {{/code}}
33
34 Once downloaded, these templates can be used to create new LXC containers from the Proxmox web interface or via CLI.
35
36 == VM Template from Ubuntu Cloud Image ==
37
38 KVM VMs are ideal when you need full virtualization, for instance, to run Windows or more complex Linux systems.
39
40 === Download Ubuntu Cloud Image ===
41
42 Download the official Ubuntu 24.04 cloud [[image:]]
43
44 {{code language="bash"}}
45 wget http://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img
46 {{/code}}
47
48 === Create the Virtual Machine ===
49
50 Create a new VM with ID 910 (you can pick any unused ID):
51
52 {{code language="bash"}}
53 qm create 910 -name template-ubuntu-jammy -memory 2048 -net0 virtio,bridge=vmbr0 -cores 2 -sockets 1
54 {{/code}}
55
56 === Import and Attach the Disk ===
57
58 Choose the correct storage (replace nvme if you use a different storage name):
59
60 {{code language="bash"}}
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
63 {{/code}}
64
65 === Configure the VM ===
66
67 {{code language="bash"}}
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
76 {{/code}}
77
78
79 If your disk is using SCSI instead of virtio, resize like this:
80
81 {{code language="bash"}}
82 qm resize 910 scsi0 +8G
83 {{/code}}
84
85 === Convert the VM into a Template ===
86
87 {{code language="bash"}}
88 qm template 910
89 {{/code}}
90
91 Now you can use this template to clone new VMs instantly.
92
93 == Bash Script to Automate Setup ==
94
95 Install the above using bash script below
96
97 === setup_proxmox_templates.sh ===
98
99 {{code language="bash"}}
100 #!/bin/bash
101
102 # Exit on errors
103 set -e
104
105 echo "Downloading LXC templates..."
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
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..."
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
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
128 # qm resize 910 scsi0 +8G
129
130 read -p "Confirm converting to template by pressing Enter"
131 qm template 910
132
133 echo "Templates setup complete."
134 {{/code}}
135
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
141 **qemu-guest-agent** is for allowing proxmox to query information from the VM such as IP address, shutdown commands, etc
142
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
152 **reset machine-id** to not have overlapping ids from same templat
153
154 {{code language="bash"}}
155 cat /dev/null > /etc/machine-id
156 cat /dev/null > /var/lib/dbus/machine-id
157 {{/code}}
158
159 **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.
160
161
162 This is a debian example of what we are looking for:
163
164 {{code language="yaml"}}
165 # The top level settings are used as module
166 # and system configuration.
167 # A set of users which may be applied and/or used by various modules
168 # when a 'default' entry is found it will reference the 'default_user'
169 # from the distro configuration specified below
170 users:
171 - default
172
173 # If this is set, 'root' will not be able to ssh in and they
174 # will get a message to login instead as the default $user
175 disable_root: true
176
177 # This will cause the set+update hostname module to not operate (if true)
178 preserve_hostname: false
179
180 apt:
181 # This prevents cloud-init from rewriting apt's sources.list file,
182 # which has been a source of surprise.
183 preserve_sources_list: true
184
185 # The modules that run in the 'init' stage
186 cloud_init_modules:
187 - seed_random
188 - bootcmd
189 - write-files
190 - growpart
191 - resizefs
192 - disk_setup
193 - mounts
194 - set_hostname
195 - update_hostname
196 - update_etc_hosts
197 - ca-certs
198 - rsyslog
199 - users-groups
200 - ssh
201
202 # The modules that run in the 'config' stage
203 cloud_config_modules:
204 - locale
205 - set-passwords
206 - grub-dpkg
207 - apt-pipelining
208 - apt-configure
209 - ntp
210 - timezone
211 - disable-ec2-metadata
212 - runcmd
213
214 # The modules that run in the 'final' stage
215 cloud_final_modules:
216 - package-update-upgrade-install
217 - write-files-deferred
218 - scripts-vendor
219 - scripts-per-once
220 - scripts-per-boot
221 - scripts-per-instance
222 - scripts-user
223 - ssh-authkey-fingerprints
224 # - keys-to-console
225 - install-hotplug
226 # - phone-home
227 - final-message
228 - power-state-change
229
230 # System and/or distro specific settings
231 # (not accessible to handlers/transforms)
232 system_info:
233 # This will affect which distro class gets used
234 distro: debian
235 # Default user name + that default users groups (if added/used)
236 default_user:
237 name: debian
238 lock_passwd: True
239 gecos: Debian
240 groups: [sudo]
241 # Disables password-less sudo commands for default/debian user
242 sudo: ["ALL=(ALL) ALL"]
243 shell: /bin/bash
244 # Other config here will be given to the distro class and/or path classes
245 paths:
246 cloud_dir: /var/lib/cloud/
247 templates_dir: /etc/cloud/templates/
248 package_mirrors:
249 - arches: [default]
250 failsafe:
251 primary: https://deb.debian.org/debian
252 security: https://deb.debian.org/debian-security
253 ssh_svcname: ssh
254 {{/code}}
255
256
257
258
259
260
261 )))
262
263 (% class="col-xs-12 col-sm-4" %)
264 (((
265 (% class="box" %)
266 (((
267 |=Site|[[Proxmox>>https://proxmox.com]]
268 |=Dashboard|
269 |=Servers|1200 €
270 |=Image|[[Credits>>https://commons.wikimedia.org/wiki/File:FalabellaFestivo.jpg]]
271 )))
272
273 (% class="box" %)
274 (((
275 **Contents**
276
277 {{toc/}}
278 )))
279 )))
280 )))