Changes for page proxmox

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

From version 3.1
edited by Kevin Wiki
on 2025/07/05 20:18
Change comment: There is no comment for this version
To version 11.1
edited by Kevin Wiki
on 2026/05/18 09:20
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -17,14 +17,20 @@
17 17  
18 18  To view the available LXC templates:
19 19  
20 +{{code language="bash"}}
20 20  pveam list
22 +{{/code}}
23 +
21 21  === Download Templates ===
22 22  
23 23  Use the pveam download command to import templates to the local storage:
24 24  
28 +{{code language="bash"}}
25 25  pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.gz
26 26  pveam download local ubuntu-24.04-standard_24.04-1_amd64.tar.zst
27 27  pveam download local debian-12-standard_11.7-1_amd64.tar.zst
32 +{{/code}}
33 +
28 28  Once downloaded, these templates can be used to create new LXC containers from the Proxmox web interface or via CLI.
29 29  
30 30  == VM Template from Ubuntu Cloud Image ==
... ... @@ -33,22 +33,32 @@
33 33  
34 34  === Download Ubuntu Cloud Image ===
35 35  
36 -Download the official Ubuntu 24.04 cloud image:
42 +Download the official Ubuntu 24.04 cloud [[image:]]
37 37  
44 +{{code language="bash"}}
38 38  wget http://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img
46 +{{/code}}
47 +
39 39  === Create the Virtual Machine ===
40 40  
41 41  Create a new VM with ID 910 (you can pick any unused ID):
42 42  
52 +{{code language="bash"}}
43 43  qm create 910 -name template-ubuntu-jammy -memory 2048 -net0 virtio,bridge=vmbr0 -cores 2 -sockets 1
54 +{{/code}}
55 +
44 44  === Import and Attach the Disk ===
45 45  
46 46  Choose the correct storage (replace nvme if you use a different storage name):
47 47  
60 +{{code language="bash"}}
48 48  qm importdisk 910 ubuntu-24.04-server-cloudimg-amd64.img nvme
49 49  qm set 910 -scsihw virtio-scsi-pci -virtio0 nvme:vm-910-disk-0
63 +{{/code}}
64 +
50 50  === Configure the VM ===
51 51  
67 +{{code language="bash"}}
52 52  qm set 910 -serial0 socket
53 53  qm set 910 -boot c -bootdisk virtio0
54 54  qm set 910 -agent 1
... ... @@ -57,13 +57,204 @@
57 57  qm set 910 -vga qxl
58 58  qm set 910 -ide2 nvme:cloudinit
59 59  qm resize 910 virtio0 +8G
76 +{{/code}}
77 +
78 +
60 60  If your disk is using SCSI instead of virtio, resize like this:
80 +
81 +{{code language="bash"}}
61 61  qm resize 910 scsi0 +8G
83 +{{/code}}
84 +
62 62  === Convert the VM into a Template ===
63 63  
87 +{{code language="bash"}}
64 64  qm template 910
89 +{{/code}}
90 +
65 65  Now you can use this template to clone new VMs instantly.
66 66  
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 +{{code language="bash"}}
173 +cloud-init clean
174 +{{/code}}
175 +
176 +This is a debian example of what we are looking for:
177 +
178 +{{code language="yaml"}}
179 +# The top level settings are used as module
180 +# and system configuration.
181 +# A set of users which may be applied and/or used by various modules
182 +# when a 'default' entry is found it will reference the 'default_user'
183 +# from the distro configuration specified below
184 +users:
185 + - default
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 +# The modules that run in the 'init' stage
200 +cloud_init_modules:
201 + - seed_random
202 + - bootcmd
203 + - write-files
204 + - growpart
205 + - resizefs
206 + - disk_setup
207 + - mounts
208 + - set_hostname
209 + - update_hostname
210 + - update_etc_hosts
211 + - ca-certs
212 + - rsyslog
213 + - users-groups
214 + - ssh
215 +
216 +# The modules that run in the 'config' stage
217 +cloud_config_modules:
218 + - locale
219 + - set-passwords
220 + - grub-dpkg
221 + - apt-pipelining
222 + - apt-configure
223 + - ntp
224 + - timezone
225 + - disable-ec2-metadata
226 + - runcmd
227 +
228 +# The modules that run in the 'final' stage
229 +cloud_final_modules:
230 + - package-update-upgrade-install
231 + - write-files-deferred
232 + - scripts-vendor
233 + - scripts-per-once
234 + - scripts-per-boot
235 + - scripts-per-instance
236 + - scripts-user
237 + - ssh-authkey-fingerprints
238 +# - keys-to-console
239 + - install-hotplug
240 +# - phone-home
241 + - final-message
242 + - power-state-change
243 +
244 +# System and/or distro specific settings
245 +# (not accessible to handlers/transforms)
246 +system_info:
247 + # This will affect which distro class gets used
248 + distro: debian
249 + # Default user name + that default users groups (if added/used)
250 + default_user:
251 + name: debian
252 + lock_passwd: True
253 + gecos: Debian
254 + groups: [sudo]
255 + # Disables password-less sudo commands for default/debian user
256 + sudo: ["ALL=(ALL) ALL"]
257 + shell: /bin/bash
258 + # Other config here will be given to the distro class and/or path classes
259 + paths:
260 + cloud_dir: /var/lib/cloud/
261 + templates_dir: /etc/cloud/templates/
262 + package_mirrors:
263 + - arches: [default]
264 + failsafe:
265 + primary: https://deb.debian.org/debian
266 + security: https://deb.debian.org/debian-security
267 + ssh_svcname: ssh
268 +{{/code}}
269 +
270 +
271 +
272 +
273 +
67 67  
68 68  )))
69 69  
image.jpg
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.kevin
Size
... ... @@ -1,1 +1,0 @@
1 -40.8 KB
Content