Changes for page proxmox

Last modified by Kevin Wiki on 2026/05/18 15:44

From version 2.4
edited by Kevin Wiki
on 2025/07/05 20:16
Change comment: There is no comment for this version
To version 11.5
edited by Kevin Wiki
on 2026/05/18 15:40
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -4,48 +4,276 @@
4 4  (((
5 5  {{children/}}
6 6  
7 -= Getting started - vm & lxc templates =
8 8  
9 -List and import lxc templates:
8 += Getting Started with Proxmox VE LXC and VM Templates =
10 10  
11 -```
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"}}
12 12  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"}}
13 13  pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.gz
14 14  pveam download local ubuntu-24.04-standard_24.04-1_amd64.tar.zst
15 15  pveam download local debian-12-standard_11.7-1_amd64.tar.zst
32 +{{/code}}
16 16  
17 -```
34 +Once downloaded, these templates can be used to create new LXC containers from the Proxmox web interface or via CLI.
18 18  
19 -Download ubuntu 24 and create a template:
36 +== VM Template from Ubuntu Cloud Image ==
20 20  
21 -```
22 -wget http:~/~/cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img
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"}}
23 23  qm create 910 -name template-ubuntu-jammy -memory 2048 -net0 virtio,bridge=vmbr0 -cores 2 -sockets 1
24 -qm importdisk 910 ubuntu-24.04-server-cloudimg-amd64.img nvm
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"}}
25 25  qm importdisk 910 ubuntu-24.04-server-cloudimg-amd64.img nvme
26 -qm set 910 -scsihw virtio-scsi-pci -virtio0 nvm:vm-910-disk-0
27 27  qm set 910 -scsihw virtio-scsi-pci -virtio0 nvme:vm-910-disk-0
28 -qm set 910 -scsihw virtio-scsi-pci -virtio0 unused0:nvme:vm-910-disk-0
29 -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"}}
30 30  qm set 910 -serial0 socket
31 31  qm set 910 -boot c -bootdisk virtio0
32 32  qm set 910 -agent 1
33 -qm set 910 -gotplug disk,network,usb
34 34  qm set 910 -hotplug disk,network,usb
35 35  qm set 910 -vcpus 1
36 -qm set 910 -vga qml
37 37  qm set 910 -vga qxl
38 -qm set 910 -ide2 nvm:cloudinit
39 39  qm set 910 -ide2 nvme:cloudinit
40 40  qm resize 910 virtio0 +8G
41 -qm set 910 -scsihw virtio-scsi-pci -virtio0 nvme:vm-910-disk-0
42 -qm importdisk ~-~-hwlp
43 -qm importdisk ~-~-help
44 -qm resize 9001 virtio0 +8G
45 -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"}}
46 46  qm resize 910 scsi0 +8G
83 +{{/code}}
84 +
85 +=== Convert the VM into a Template ===
86 +
87 +{{code language="bash"}}
47 47  qm template 910
48 -```
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 +(% id="cke_bm_721114S" style="display:none" %)** **(%%)**clear bash history** to not leave any configuration in history, clear and disable history file before proceeding:
142 +
143 +{{code language="bash"}}
144 +unset HISTFILE
145 +export HISTSIZE=0
146 +export HISTFILESIZE=0
147 +
148 +sudo rm /.bash_history
149 +rm ~/.bash_history
150 +{{/code}}
151 +
152 +**qemu-guest-agent** is for allowing proxmox to query information from the VM such as IP address, shutdown commands, etc
153 +
154 +{{code language="bash"}}
155 +sudo apt update
156 +sudo apt upgrade -y
157 +sudo apt install qemu-guest-agent -y
158 +
159 +sudo systemctl enable qemu-guest-agent.service
160 +sudo systemctl start qemu-guest-agent.service
161 +{{/code}}
162 +
163 +**reset machine-id** to not have overlapping ids from same template
164 +
165 +{{code language="bash"}}
166 +cat /dev/null > /etc/machine-id
167 +cat /dev/null > /var/lib/dbus/machine-id
168 +{{/code}}
169 +
170 +**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.
171 +
172 +If you used a cloud-init base image it will have run the default cloudinit which installs and configures a bunch of s
173 +
174 +{{code language="bash"}}
175 +cloud-init clean
176 +{{/code}}
177 +
178 +This is a debian example of what we are looking for:
179 +
180 +{{code language="yaml"}}
181 +# The top level settings are used as module
182 +# and system configuration.
183 +# A set of users which may be applied and/or used by various modules
184 +# when a 'default' entry is found it will reference the 'default_user'
185 +# from the distro configuration specified below
186 +
187 +# If this is set, 'root' will not be able to ssh in and they
188 +# will get a message to login instead as the default $user
189 +disable_root: true
190 +
191 +# This will cause the set+update hostname module to not operate (if true)
192 +preserve_hostname: false
193 +
194 +apt:
195 + # This prevents cloud-init from rewriting apt's sources.list file,
196 + # which has been a source of surprise.
197 + preserve_sources_list: true
198 +
199 +# manually managed resolv
200 +manage_resolv_conf: false
201 +
202 +package_update: true
203 +packages:
204 + - qemu-guest-agent
205 +
206 +# The modules that run in the 'init' stage
207 +cloud_init_modules:
208 + - seed_random
209 + - bootcmd
210 + - write-files
211 + - growpart
212 + - resizefs
213 + - disk_setup
214 + - mounts
215 + - set_hostname
216 + - update_hostname
217 + - update_etc_hosts
218 + - ca-certs
219 + - rsyslog
220 + - users-groups
221 + - ssh
222 +
223 +# The modules that run in the 'config' stage
224 +cloud_config_modules:
225 + - keyboard
226 + - locale
227 + - set-passwords
228 + - grub-dpkg
229 + - apt-pipelining
230 + - apt-configure
231 + - ntp
232 + - timezone
233 + - disable-ec2-metadata
234 + - runcmd
235 +
236 +# The modules that run in the 'final' stage
237 +cloud_final_modules:
238 + - package-update-upgrade-install
239 + - write-files-deferred
240 + - scripts-vendor
241 + - scripts-per-once
242 + - scripts-per-boot
243 + - scripts-per-instance
244 + - scripts-user
245 + - ssh-authkey-fingerprints
246 +# - keys-to-console
247 + - install-hotplug
248 +# - phone-home
249 + - final-message
250 + - power-state-change
251 +
252 +runcmd:
253 + - systemctl enable qemu-guest-agent.service
254 +
255 +# System and/or distro specific settings
256 +# (not accessible to handlers/transforms)
257 +system_info:
258 + # This will affect which distro class gets used
259 + distro: debian
260 + # Other config here will be given to the distro class and/or path classes
261 + paths:
262 + cloud_dir: /var/lib/cloud/
263 + templates_dir: /etc/cloud/templates/
264 + package_mirrors:
265 + - arches: [default]
266 + failsafe:
267 + primary: https://deb.debian.org/debian
268 + security: https://deb.debian.org/debian-security
269 + ssh_svcname: ssh
270 +{{/code}}
271 +
272 +
273 +
274 +
275 +
276 +
49 49  )))
50 50  
51 51  (% class="col-xs-12 col-sm-4" %)
image.jpg
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.kevin
Size
... ... @@ -1,1 +1,0 @@
1 -40.8 KB
Content