Install Proxmox and Build a Linux VM
Set up a bare-metal hypervisor and create a reusable Ubuntu VM template.
Introduction
30 Second Summary
Every cloud platform you have ever used runs on the same idea: one physical machine pretending to be many. That is virtualization, and you can run it on your own hardware at home.
In this project, you will install Proxmox VE on a dedicated machine, create an Ubuntu virtual machine using cloud-init, learn essential Linux commands, and convert that VM into a reusable template you can clone in seconds.
What You'll Build
A complete virtualization server running Proxmox VE on your dedicated hardware, managed entirely from your Mac's browser and Terminal.
By the end of this project, you'll have:
- A working Proxmox VE bare-metal hypervisor you can access from your Mac's browser.
- An Ubuntu 24.04 LTS virtual machine configured with cloud-init and SSH key-based authentication.
- Hands-on experience with essential Linux CLI commands for navigation, package management, and file editing.
- A reusable VM template for rapid cloning, ready to power a Kubernetes cluster in a follow-up project.
Are there any prerequisites?
You need a dedicated x86_64 machine with an ethernet connection to your router, a USB flash drive (2 GB or larger), and a Mac to manage everything from. If your dedicated machine does not have a built-in ethernet port, you will need a USB-to-Ethernet adapter ($10-15). No prior Linux experience is required.
Prepare the Proxmox Installer on Your Mac
Before you can install Proxmox VE on your dedicated machine, you need a bootable USB drive with the installer on it. Your Mac is the command center for this entire project. You will use it to prepare the USB drive, and later to manage your Proxmox server through a web browser.
In This Step, Get Ready To:
- Download the Proxmox VE 9.1 ISO and install balenaEtcher on your Mac.
- Flash the Proxmox ISO to your USB drive to create a bootable installer.
- Connect your dedicated machine's peripherals and prepare it to boot from USB.
Download the Proxmox VE ISO and Install balenaEtcher
An ISO file is a complete disk image of an operating system installer. You need to download the Proxmox VE ISO and a tool called balenaEtcher to write that ISO onto your USB drive.
- Open the Proxmox download page in your browser.
- Download the Proxmox VE 9.1 ISO Installer. The file is approximately 1.83 GB, so the download may take a few minutes.
- While the ISO downloads, install balenaEtcher. You can download the DMG from the balenaEtcher website, or install it via Homebrew:
brew install --cask balenaetcher
macOS Blocking balenaEtcher on First Launch?
macOS may block balenaEtcher because it was downloaded from the internet. If this happens:
- Open System Settings.
- Go to Privacy & Security.
- Click Open Anyway next to the balenaEtcher message.
If you are still stuck, help me get balenaEtcher running on my Mac.
Why balenaEtcher Instead of the Command Line?
You could flash a USB drive using the dd command in Terminal, but dd has no safety rails. If you select the wrong disk, it will happily erase your Mac's system drive. balenaEtcher only shows removable drives, so you cannot accidentally wipe your Mac. It also verifies the write automatically to make sure the data is correct.
Flash the ISO to Your USB Drive
Flashing writes the Proxmox installer onto your USB drive so your dedicated machine can boot from it. This process takes a few minutes depending on your USB drive speed.
- Insert your USB flash drive into your Mac.
- Open balenaEtcher.
- Click Flash from file and select the Proxmox VE ISO you downloaded.
- Click Select target and choose your USB drive.
- Click Flash! and enter your Mac password when prompted.
Etcher writes the image and then automatically verifies the write to make sure everything copied correctly. Wait until you see a success message before removing the USB drive.
Prepare Your Dedicated Machine
Your dedicated machine needs a wired ethernet connection, peripherals for the initial setup, and the USB drive you just flashed. Proxmox VE does not support Wi-Fi for installation or VM networking, so ethernet is required.
- Connect a USB-to-Ethernet adapter to your machine if it does not have a built-in ethernet port.
- Plug an ethernet cable from your router to the machine.
- Connect a keyboard, mouse, and monitor to the machine.
- Insert the USB drive you just flashed with the Proxmox installer.
Why Ethernet and Not Wi-Fi?
Proxmox uses a Linux bridge to connect your VMs to the network. Wi-Fi adapters cannot be added to a Linux bridge in station mode, which means your VMs would not be able to get their own IP addresses. The official Proxmox documentation explicitly recommends against using Wi-Fi. Ethernet gives your VMs direct, bridged network access with no workarounds needed.
To boot from the USB drive, you will need to access the BIOS/UEFI boot menu on your machine during startup. The key to press varies by motherboard manufacturer. Common keys are F2, F12, Del, or Esc. Look for a message on screen during startup that says something like "Press F12 for Boot Menu."
Pro tip: find your boot key
If you are not sure which key to press, search for your motherboard model followed by "boot menu key" online. You will find the answer quickly. You can also try pressing each common key one at a time during restarts until you find the right one.
Your USB installer is ready and your dedicated machine is set up. Next up, you will boot from the USB drive and install Proxmox VE directly onto your machine's hard drive.
Install Proxmox VE on Your Dedicated Machine
Your USB drive is ready and your machine is connected. Now it is time to install Proxmox VE directly onto your dedicated hardware. This is called a bare-metal hypervisor installation because Proxmox replaces the operating system entirely and runs directly on the hardware. Once installed, you will access and manage everything from your Mac's browser.
In This Step, Get Ready To:
- Boot from your USB drive and launch the Proxmox installer.
- Configure your timezone, root password, and network settings.
- Log into the Proxmox web dashboard from your Mac's browser.
Boot From USB and Start the Installer
Your dedicated machine needs to boot from the USB drive instead of its internal hard drive. To do this, you will enter the BIOS/UEFI boot menu during startup.
- Power on your dedicated machine.
- Immediately press the boot menu key for your motherboard. Common keys are F2, F12, Del, or Esc.
- Select your USB drive from the boot device list.
- Select Install Proxmox VE (Graphical) from the Proxmox boot menu.
- Accept the End User License Agreement (EULA).
- Select the target hard disk for installation.
This Will Erase the Selected Disk
The Proxmox installer will completely erase all data on the disk you select. Make sure you choose the correct drive and that you do not need any data on it.
Machine Not Booting From USB?
If your machine boots straight to its existing operating system, you may need to enter the BIOS settings and change the boot order to prioritize USB devices. You may also need to disable Secure Boot. The exact steps vary by motherboard manufacturer. Help me get into my BIOS boot menu.
Configure Timezone, Password, and Network
The installer will walk you through several configuration screens. Pay close attention to the network screen because the IP address shown there is how you will access Proxmox from your Mac.
- Set your country, timezone, and keyboard layout.
- Choose a strong root password and enter an email address.
- On the network configuration screen, confirm that Proxmox has detected your ethernet adapter.
- Set a hostname in FQDN format (for example, pve.local).
- The installer will suggest an IP address from your router's DHCP. Write down this IP address. You will need it to access the web UI.
What is FQDN Format?
FQDN stands for Fully Qualified Domain Name. It is a hostname that includes a domain, like pve.local. Proxmox requires this format even though you are not registering a real domain. The .local suffix is a common convention for home network devices.
Pro tip: save that IP address
Write the IP address on a sticky note or save it in a text file on your Mac. You will type it many times throughout this project and future ones.
Complete Installation and Log Into the Web UI
- Review the summary screen and click Install.
- Wait for the installation to complete. This takes a few minutes.
- Remove the USB drive when prompted and let the machine reboot.
After the reboot, the Proxmox console on your monitor will display the web UI URL. It looks something like https://YOUR-IP:8006. Proxmox uses port 8006 for its web interface.
- On your Mac, open Safari or Chrome.
- Navigate to the URL shown on the Proxmox console.
https://[[PROXMOX_IP="your Proxmox IP address"]]:8006
- Accept the self-signed certificate warning. Your browser will warn you that the connection is not private. This is expected because Proxmox uses a self-signed SSL certificate.
- Log in with username root and the password you set during installation.
You should now see the Proxmox VE dashboard in your browser. This is your control center for creating and managing virtual machines.
What Should I See?
The Proxmox dashboard shows your node name in the left sidebar, along with summary information about CPU, memory, and storage usage. You may also see a "No valid subscription" popup. This is normal for the free version. Click OK to dismiss it. You will fix this in the next step by switching to the free repository.
Cannot Reach the Web UI From Your Mac?
Make sure your Mac is connected to the same network (router) as your Proxmox machine. Verify the IP address matches what the Proxmox console displays. Check that you are using https:// (not http://) and port 8006. Help me troubleshoot my Proxmox web UI connection.
Your Proxmox hypervisor is installed and running. Next up, you will configure the free update repository and download the Ubuntu cloud image that will become your VM template.
Configure Proxmox and Download the Ubuntu Cloud Image
Your Proxmox VE hypervisor is installed and accessible from your Mac's browser. Before you can create a virtual machine, you need to configure Proxmox for the free version and download the Ubuntu image that your VM will run. You also need to set up SSH keys so you can securely connect to your VMs from your Mac without typing a password every time.
In This Step, Get Ready To:
- Switch Proxmox from the enterprise repository to the free no-subscription repository.
- Download the Ubuntu 24.04 LTS cloud image onto your Proxmox server.
- Generate an SSH key pair on your Mac for passwordless VM access.
Disable the Enterprise Repository
A fresh Proxmox install comes with the enterprise repository enabled by default. This repository requires a paid subscription. Without one, any attempt to update packages will fail with authentication errors. You need to disable it and enable the free no-subscription repository instead.
- In the Proxmox web UI, click on your node name in the left sidebar.
- Navigate to Updates, then Repositories.
- Select the pve-enterprise repository and click Disable.
- Click Add and select No-Subscription from the dropdown.
Why disable the enterprise repository?
Proxmox VE is fully open source and free to use. The enterprise repository is for paying subscribers who want access to tested, stable updates. The no-subscription repository provides the same packages without the stability guarantees. For a homelab, the no-subscription repository is exactly what you need.
Now that your repositories are configured, update Proxmox to the latest packages.
- Go back to Updates and click Refresh to fetch the latest package lists.
- Click Upgrade to install all available updates.
A terminal window will open showing the upgrade progress. When prompted, type Y and press Enter to confirm. Wait for the upgrade to complete.
Download the Ubuntu 24.04 Cloud Image
Instead of installing Ubuntu from scratch using a traditional ISO, you will use a cloud image. Cloud images are pre-built disk images designed to boot quickly and configure themselves automatically using cloud-init. This means you can skip the 20-minute manual installation process for every VM you create.
Why a cloud image instead of a regular installer?
A traditional ISO installer walks you through screens for language, disk partitioning, user creation, and package selection. That takes 20+ minutes per VM. Cloud images skip all of that. They are pre-installed disk images that use cloud-init to inject your SSH key, hostname, and network settings on first boot.
When you need to spin up multiple Kubernetes nodes later, each one will be ready in seconds instead of minutes.
- In the Proxmox web UI, click on your node name in the left sidebar.
- Click Shell to open a terminal session on the Proxmox host.
- Download the Ubuntu 24.04 LTS cloud image by running the following command.
wget https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img
What does this command do?
The wget command downloads a file from the internet directly to your Proxmox server. The file ubuntu-24.04-server-cloudimg-amd64.img is approximately 600 MB. This is the pre-built Ubuntu 24.04 (Noble Numbat) disk image that your VM will boot from.
What should I see?
You should see a progress bar showing the download percentage, speed, and estimated time remaining. The download may take a few minutes depending on your internet connection. Once complete, the file will be saved in your current directory on the Proxmox host.
Generate an SSH Key Pair on Your Mac
SSH keys let you connect to your VMs without typing a password. They work in pairs: a private key stays on your Mac, and a public key gets copied to the VM. When you connect, SSH verifies that your private key matches the public key on the server. You will inject this public key into your VM using cloud-init in the next step.
- On your Mac, open Terminal.
- Check if you already have an SSH key by running the following command.
ls ~/.ssh/id_ed25519.pub
I see a file path
You already have an ed25519 SSH key. Skip the key generation step below and proceed to copying your public key.
No such file or directory
You do not have an SSH key yet. Generate one by running the following command.
ssh-keygen -t ed25519
- Press Enter to accept the default file location.
- Optionally set a passphrase, or press Enter twice to skip it.
What does this command do?
The ssh-keygen command creates a pair of cryptographic keys. The -t ed25519 flag specifies the Ed25519 algorithm, which is the modern default for SSH keys. It is faster and more secure than older RSA keys.
Now copy the contents of your public key. You will need this in the next step when configuring cloud-init.
- Run the following command to display your public key.
cat ~/.ssh/id_ed25519.pub
- Select the entire output (it starts with ssh-ed25519) and copy it to your clipboard.
Pro tip: keep this key safe
The public key (ending in .pub) is safe to share and paste into services. The private key (id_ed25519 without the .pub extension) must never be shared with anyone or pasted anywhere.
Your Proxmox server is now configured with the correct repositories and fully updated. You have the Ubuntu cloud image downloaded and your SSH key ready to go. Next up, you will use all of these pieces to create your first virtual machine with cloud-init.
Create an Ubuntu VM with Cloud-Init
You have Proxmox configured, the Ubuntu cloud image downloaded, and your SSH key ready. Now it is time to bring everything together and create your first virtual machine. Instead of installing Ubuntu manually (which takes 20+ minutes and requires clicking through an installer), you will use a cloud image with cloud-init to spin up a fully configured VM in minutes.
In This Step, Get Ready To:
- Create a VM and import the Ubuntu cloud image as its disk.
- Configure cloud-init to set up your SSH key, username, and networking automatically.
- Boot the VM and SSH into it from your Mac's Terminal.
Create the Base VM and Import the Cloud Image
Cloud images are pre-built OS disk images designed to be configured at boot time. Instead of running an installer, you import the image as a virtual disk and let cloud-init handle the first-boot setup (username, SSH keys, networking). This is the same approach used in production cloud environments like AWS and Azure.
You will run all of these commands in the Proxmox shell. Every command uses qm, which is Proxmox's CLI tool for managing virtual machines.
- In the Proxmox web UI, click on your node name in the left sidebar, then click Shell to open a terminal session.
- Create a new VM with ID 9000 by running the following command:
qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
What does this command do?
This creates an empty VM shell with ID 9000. Here is what each flag sets up:
- --memory 2048 allocates 2 GB of RAM to the VM.
- --net0 virtio,bridge=vmbr0 attaches a virtual network adapter to the default bridge, giving the VM access to your local network.
- --scsihw virtio-scsi-pci sets the disk controller type. Ubuntu cloud images require this specific controller.
- Import the Ubuntu cloud image you downloaded earlier and attach it as the VM's disk:
qm set 9000 --scsi0 local-lvm:0,import-from=/root/ubuntu-24.04-server-cloudimg-amd64.img
What does this command do?
This takes the cloud image file and imports it into Proxmox's local-lvm storage as a virtual SCSI disk. The VM now has a bootable Ubuntu disk attached to it. If you saved the image to a different path, adjust the import-from path accordingly.
- Add a cloud-init CD-ROM drive so the VM can read its configuration at boot:
qm set 9000 --ide2 local-lvm:cloudinit
- Set the boot order so the VM boots from the SCSI disk:
qm set 9000 --boot order=scsi0
- Add a serial console so you can view the VM's output in the Proxmox web UI:
qm set 9000 --serial0 socket --vga serial0
Why ID 9000?
Using a high VM ID like 9000 is a common convention for templates. It keeps template IDs visually separate from regular VMs, which typically start at 100. You will convert this VM into a template later in Step 6.
Configure Cloud-Init Settings
The VM has a disk and a cloud-init drive, but cloud-init does not know what to configure yet. You need to tell it your desired username, SSH key, and network settings. When the VM boots for the first time, cloud-init reads these settings and applies them automatically.
- Set the VM's name:
qm set 9000 --name ubuntu-template
- Set the default user that cloud-init will create:
qm set 9000 --ciuser ubuntu
- Copy your Mac's SSH public key to the Proxmox host. On your Mac's Terminal, run the following command to transfer the key:
scp ~/.ssh/id_ed25519.pub root@[[PROXMOX_IP="your Proxmox IP address"]]:/root/id_ed25519.pub
- Back in the Proxmox shell, set the SSH key for cloud-init:
qm set 9000 --sshkeys /root/id_ed25519.pub
- Configure the VM to get its IP address automatically via DHCP:
qm set 9000 --ipconfig0 ip=dhcp
- Resize the disk from the default cloud image size to 20 GB to give the VM enough space:
qm disk resize 9000 scsi0 20G
Pro tip: check your settings in the web UI
Click on VM 9000 in the Proxmox sidebar, then click the Cloud-Init tab. You should see your user, SSH key, and IP configuration listed there. This is a good way to verify everything before booting.
Start the VM and SSH In from Your Mac
Everything is configured. Time to boot the VM and watch cloud-init do its work.
- Start the VM from the Proxmox shell:
qm start 9000
- In the Proxmox web UI, click on VM 9000 in the sidebar, then click the Console tab to watch it boot.
Cloud-init runs on first boot to configure the hostname, inject your SSH key, and set up networking. This may take a minute or two. Wait until you see a login prompt.
- Find the VM's IP address by clicking the Summary tab for VM 9000 in the web UI. The IP address appears under the network section.
- On your Mac, open Terminal and SSH into the VM:
ssh ubuntu@[[VM_IP="your VM's IP address"]]
You should connect without being asked for a password. Cloud-init configured your SSH key automatically, so key-based authentication is already working.
I'm connected
You should see a welcome message from Ubuntu 24.04 and a command prompt showing ubuntu@ubuntu-template. You are now inside your virtual machine.
I see an error
Connection refused or timed out?
If you see "Connection refused", cloud-init may still be running. Wait another minute and try again. If you see "Connection timed out", double-check the IP address in the Proxmox Summary tab.
If you are prompted for a password, the SSH key was not injected correctly. Go back to the Proxmox web UI, click the Cloud-Init tab for VM 9000, and verify your SSH public key is listed there.
Still stuck? Help me troubleshoot my SSH connection to the VM.
You now have a fully functional Ubuntu VM running on your Proxmox server, accessible from your Mac over SSH. Next up, you will explore essential Linux commands inside this VM to get comfortable with the command line.
Learn Essential Linux Commands Inside Your VM
You have a running Ubuntu VM that you can SSH into from your Mac. Now it is time to get comfortable inside the Linux command line. The commands you learn here are the same ones you will use throughout the Kubernetes project to configure nodes, install software, and troubleshoot issues.
In This Step, Get Ready To:
- Navigate the Linux filesystem and create files and directories.
- Install packages and check running services.
- Edit configuration files using the nano text editor.
Navigate the Filesystem and Manage Files
Linux organizes everything into a tree of directories starting from / (the root). Knowing how to move around this tree and create files is the foundation of every task you will do in Linux.
- SSH into your VM from your Mac's Terminal if you are not already connected.
ssh ubuntu@[[VMIP="your VM's IP address"]]
- Run pwd to see your current directory.
pwd
You should see /home/ubuntu. This is your home directory, the default location where you land after logging in.
- Run ls to list the files in your current directory.
ls
Your home directory is likely empty right now. That is expected for a fresh cloud image.
- Navigate to the root directory and explore the system configuration folder.
cd /
ls
ls /etc
What does this command do?
cd / changes your location to the root of the entire filesystem. ls lists everything at that level. /etc is where Linux stores system configuration files. You will see files for networking, SSH, and many other services.
- Navigate back to your home directory and create a test directory with a file inside it.
cd ~
mkdir ~/my-test
echo "hello from my VM" > ~/my-test/greeting.txt
- Read the file back to confirm it was created.
cat ~/my-test/greeting.txt
What should I see?
The terminal should print hello from my VM. You just created a directory, wrote text to a file, and read it back. These three operations are the building blocks of working with Linux.
Install Packages and Manage Services
Ubuntu uses a package manager called APT to install, update, and remove software. In the Kubernetes project, you will use APT to install container runtimes and Kubernetes components. Let's practice with a simpler package first.
- Update the package list so APT knows about the latest available software.
sudo apt update
- Upgrade all installed packages to their latest versions.
sudo apt upgrade -y
What does this command do?
sudo runs a command with administrator (root) privileges. apt update refreshes the list of available packages from Ubuntu's servers. apt upgrade -y installs all available updates. The -y flag automatically answers "yes" to confirmation prompts.
- Install htop, a system monitor that shows live CPU, memory, and process information.
sudo apt install htop -y
- Run htop to see a live view of your VM's resources.
htop
You should see a colorful dashboard showing CPU bars, memory usage, and a list of running processes. This is a great tool for checking what your VM is doing at any moment.
- Press q to quit htop.
- Check the status of the SSH server that you are currently connected through.
systemctl status ssh
What Is systemctl?
systemctl is the command for managing services on Linux. Services are background programs that run continuously, like the SSH server that lets you connect remotely. You will use systemctl frequently in the Kubernetes project to manage the container runtime and Kubernetes services.
You should see output showing the SSH service as active (running) in green. Press q to exit the status view.
Edit Configuration Files With Nano
Throughout the Kubernetes project, you will need to edit configuration files directly on your VMs. nano is a simple terminal-based text editor that comes pre-installed on Ubuntu. It is much easier to learn than vim, making it a great starting point.
- Open the greeting file you created earlier with nano.
nano ~/my-test/greeting.txt
You should see the text "hello from my VM" in the editor. The bottom of the screen shows keyboard shortcuts. The ^ symbol means the Ctrl key.
- Edit the text to say something different. Type whatever you like.
- Save the file by pressing Ctrl+O, then press Enter to confirm the filename.
- Exit nano by pressing Ctrl+X.
- Verify your changes were saved.
cat ~/my-test/greeting.txt
You should see the updated text you typed in nano.
- View the network configuration that cloud-init set up for your VM.
cat /etc/netplan/*.yaml
What should I see?
You should see a YAML file that shows your network interface configured with DHCP. This file was automatically generated by cloud-init when the VM first booted. In the Kubernetes project, you may need to edit files like this to set static IP addresses for your nodes.
Pro tip: quick command recap
- pwd prints your current directory.
- ls lists files and folders.
- cd changes directory. cd ~ takes you home.
- sudo apt install installs packages.
- systemctl status checks if a service is running.
- nano opens a file for editing. Save with Ctrl+O, exit with Ctrl+X.
You now have a solid foundation in Linux command line basics. You can navigate directories, create files, install software, check services, and edit configuration files. Next up, you will convert this VM into a reusable template so you can spin up new VMs in seconds.
Convert Your VM into a Reusable Template
You have a fully working Ubuntu VM with SSH access and you know your way around the Linux command line. The next goal is to turn this VM into a template so you can stamp out identical VMs in seconds. Every Kubernetes node in your follow-up project will be a clone of this template, so getting it right here saves you hours later.
In This Step, Get Ready To:
- Clean up the VM so clones get fresh, unique identities.
- Convert the VM into a reusable template in Proxmox.
- Clone the template to spin up a new VM and SSH into it.
Clean Up the VM for Templating
Every Linux machine has a unique identity made up of things like a machine ID and cloud-init state. If you clone the VM without clearing these, every clone would share the same identity. That causes networking conflicts and confuses tools that expect each machine to be unique. You need to wipe this state so that each clone generates its own fresh identity on first boot.
- SSH into your VM from your Mac's Terminal.
- Run the following commands to reset the VM's unique identity.
# Reset cloud-init so it re-runs on next boot
sudo cloud-init clean
# Clear the machine ID so a new one is generated on clone
sudo truncate -s 0 /etc/machine-id
# Link the dbus machine ID to the main one
sudo rm /var/lib/dbus/machine-id 2>/dev/null
sudo ln -s /etc/machine-id /var/lib/dbus/machine-id
What do these commands do?
The sudo cloud-init clean command resets cloud-init's state so it treats the next boot as a first boot. This means it will re-apply your cloud-init settings (hostname, SSH keys, IP address) fresh for each clone.
The machine-id commands clear the unique identifier that Linux uses to distinguish machines on a network. When a clone boots, it generates a brand new ID automatically.
- Shut down the VM cleanly.
sudo shutdown -h now
Your SSH session will disconnect. That is expected because the VM is powering off.
Convert the VM to a Template in Proxmox
A template in Proxmox is a frozen snapshot of a VM that you can only clone, never start directly. This protects your golden image from accidental changes.
- In the Proxmox web UI, confirm that VM 9000 shows as stopped in the left sidebar.
- Right-click on the VM and select Convert to Template.
- Confirm the action when prompted.
The VM's icon in the sidebar changes to indicate it is now a template. You can no longer start it directly. You can only clone it.
Pro tip: shell alternative
You can also convert the VM from the Proxmox shell by running qm template 9000. The result is identical to using the web UI.
Clone the Template to Create a New VM
Now for the payoff. Instead of repeating the entire cloud image download and VM configuration process, you can spin up a new Ubuntu VM from your template in seconds.
- Right-click the template in the sidebar and select Clone.
- Set the VM ID to 100.
- Set the name to ubuntu-node-1.
- Select Full Clone for the mode. This creates a completely independent copy of the template's disk.
- Click Clone.
What is a full clone?
A full clone copies the entire disk, making the new VM completely independent from the template. A linked clone shares the template's disk and only stores differences. Full clones use more storage but are safer because deleting or modifying the template does not affect them.
- Click on the new VM ubuntu-node-1 in the sidebar.
- Go to the Cloud-Init tab.
- Verify the hostname is set to ubuntu-node-1. Update it if needed.
- Click Regenerate Image if you made any changes to the cloud-init settings.
- Start the VM by clicking Start at the top.
Cloud-init will run on first boot to apply the new hostname, SSH keys, and network configuration. This takes a minute or two.
- Check the Summary tab of the VM to find its IP address.
- From your Mac's Terminal, SSH into the new VM.
ssh ubuntu@[[VM_IP="your new VM's IP address"]]
You should connect without a password prompt, just like before. Cloud-init injected your SSH key automatically.
- Run hostname to confirm the VM has the correct hostname.
hostname
What should I see?
The output should show ubuntu-node-1. This confirms that cloud-init applied a fresh identity to the clone. Your template is working correctly.
You just went from a blank dedicated machine to a reusable VM factory. Any time you need a fresh Ubuntu server, you can clone this template and have one running in under a minute. Next up, put this template to the real test in the Secret Mission by building a two-node virtual network.
Secret mission
Build a Two-Node Virtual Network
You have a template that can spin up VMs in seconds. But can those VMs actually talk to each other? Clone your template twice, configure unique hostnames, and prove your virtual network works by pinging between them. This is exactly the setup you will need for running Kubernetes nodes.
Before you go
Clean Up Your Resources
This project runs entirely on your local dedicated machine, so there are no ongoing cloud costs. Decide whether to keep your resources running, pause them to come back later, or delete them entirely.
Resources you used:
- Proxmox VE 9.1 installed on your dedicated machine.
- Ubuntu 24.04 VM template (VM ID 9000) stored on Proxmox.
- Cloned VM(s) created from the template (e.g., VM ID 100, 101).
- Ubuntu 24.04 cloud image downloaded to the Proxmox host.
- SSH key pair generated on your Mac (~/.ssh/id_ed25519).
- balenaEtcher installed on your Mac.
- USB flash drive used as the Proxmox installer.
Keep everything running
No action needed. Choose this if you are planning to continue into the Kubernetes project and want your Proxmox server and VM template ready to go.
- Leave Proxmox VE running on your dedicated machine.
- Keep your VM template (ID 9000) and any cloned VMs in place.
- Your USB flash drive can be reformatted and reused for other purposes.
Pause - I'll come back to this later
Shut down running VMs to free up memory while keeping everything saved on disk. Your template and Proxmox installation will be exactly as you left them when you return.
- In the Proxmox web UI, select each running VM and click Shutdown to gracefully stop them.
- You can optionally shut down the Proxmox host itself by running shutdown -h now in the Proxmox shell.
- To resume, power on the dedicated machine and all your VMs and templates will still be there.
- Keep balenaEtcher on your Mac. It takes minimal space and you may need it again.
Delete - I don't want to use this again
Remove all project resources and start fresh. This will erase your Proxmox installation and all VMs on the dedicated machine.
- Reinstall a different operating system on your dedicated machine, or simply leave it powered off. Proxmox is installed on the machine's disk, so it will persist until the disk is reformatted.
- Reformat your USB flash drive using Disk Utility on your Mac to reclaim it for normal use.
- Uninstall balenaEtcher from your Mac by dragging it from the Applications folder to the Trash.
- Your SSH key pair (~/.ssh/id_ed25519 and ~/.ssh/id_ed25519.pub) is useful for other projects too. Only delete it if you are sure you will not need it.
- Delete the downloaded Proxmox VE ISO and Ubuntu cloud image from your Mac's Downloads folder.
Mission accomplished
That's a Wrap!
Nice work! You just built a complete virtualization server from scratch on bare metal and managed it entirely from your Mac's browser.
Here's what you learned:
- Installed Proxmox VE on dedicated hardware, configured the no-subscription repository, and accessed the web UI from your Mac.
- Created an Ubuntu 24.04 LTS VM using a cloud image and cloud-init, with SSH key-based authentication from your Mac's Terminal.
- Practiced essential Linux commands for filesystem navigation, package management, service inspection, and file editing with nano.
- Converted your VM into a reusable template and built a two-node virtual network to prove your cloned VMs can communicate.
Ready to quiz yourself?