Introduction
Building a consistent base Virtual Machines (VM) is one part of my Proxmox mini PC refurbishment project. In this video I’m creating a reusable base Debian server, so every VM starts from the same stable foundation.
I use Debian for most servers because stability matters more than bleeding edge software. One of the few exception is my gaming server, which runs Arch for newer libraries.
This article walks through my base Debian build in detail. And yes, I’ve done this before. But most of the servers I’m building in this project rely on this template, so I’m refreshing it here.
Since some of these servers will require storage expansion later, I will call out the specific decisions I made to account for this in the build. You should watch all the way through, because I’ll point out the key decision points to be aware of before you start your own build.
Pre-Build Assumptions
I am making a few assumptions at this point.
- You have downloaded the Debian Net Installation ISO file
- You have created the appropriate boot media from the ISO file
- You have a working computer or Virtual Machine to do the install on
- You have booted into the installation environment
I have covered these items in other articles. Plus there are lots of tutorials available.
Installation Start Screen
The first installer screen lets you choose between a graphical installer and a text-based installer.
Beyond the interface (and mouse support), the functionality is the same for what we’re doing here. If one doesn’t work, reboot and try the other.
There’s also Advanced options, which includes expert and rescue modes, plus special accessibility options like high-contrast and speech.
For this walk through, I’m using the text-based installer.
Language, Location, and Keyboard
The next three screens cover language, location, and keyboard layout.
- Choose the primary language for the installer (English for me)
- Then pick the location based on that language (I’m selecting the Philippines)
- Finally, select your keyboard layout (American English for me, even though I’m installing from the Philippines)
These settings affect defaults like timezone, date, and currency. They also ensure keyboard characters are interpreted correctly during the install.
Network Setup
Network setup comes next, and the installer will default to DHCP automatically. Most servers require a static IP address, so I will need to change that.
When you reach the step where the installer asks for the hostname, don’t enter one yet. Instead select the “Go Back” option to manually define the network settings.
Enter your static IP address, and set the prefix/CIDR (for me it’s /24). If you do not add the CIDR, the installer will ask for a subnet mask on the next screen, it should already be set to 255.255.255.0 for a /24 network.
Next, enter the default gateway and DNS nameserver. The gateway and name server will default to the first usable network address. A fairly common example on a home network is 192.168.1.1.
Finally, you can set the hostname and domain. If you’re not planning to connect the servers to the internet, you can leave the domain blank.
Users
Once the network is established, I need to set up users. The installer automatically creates the root (administrative) account.
If you leave the root password field blank, the installer disables root login and sets up a sudo capable normal user instead (sudo will be installed and configured).
Next, create your normal user: full name, login username, and a password. If root has no password, this normal user is the one that gets sudo privileges by default.
In my case I set a root password, so I’ll install sudo and grant access to my user later.
Custom Storage Setup
Since this is a clonable install, I’m not using the guided partitioning options. I’ll use manual partitioning and create partitions in a deliberate order for easier future expansion.
- Create is a 512 MB EFI System partition at the start of storage
- Create will be a 2GB swap partition right after the EFI partition (yes this is arbitrary, and some may question a swap partition at all. Feel free to adjust the size or not create it at all. But it needs to come right after the EFI partition if you use one.
- Create the root (/) partition and let it use the rest of the drive
This layout keeps two common expansion paths simple when increasing storage capacity:
- Expand the root (/) partition to a larger size, the filesystem can grow into the free space that is added immediately after root, and no other partitions block it.
- Or, you can create a new partition in the free space after root (/) and mount it on a directory on the system, then add the mount configuration in /etc/fstab.
Configure Package Manager
Next we configure the package manager. It uses the online Debian repositories. To get the best availability and download speeds, answer a few prompts:
- Select a repository country/region that’s geographically close to you.
- Choose one of the listed mirrors for that country (for me, I pick the first mirror).
- Provide proxy information only if your network requires it (most home networks do not use a proxy).
After that, you’ll be asked about participating in the package popularity survey. It’s “No” by default. Itr is up to you if you want to participate or not.
TaskSEL
Tasksel lets you pre-load software for specific configurations and tasks. Most options are for desktop environments and graphical bundles.
For this template build, I’ll leave everything un-selected except SSH Server and the installer’s standard system utilities, so the base stays lean, clean, and consistent across all clones.
Finish Install
Everything after this point is automatic. The installer installs and configures the selected software and sets up the boot loader, then it reboots.
Once the system reboots, log in as root and update the system.
apt update
apt upgrade
Next, install sudo and add the normal user to the sudo group:
apt install sudo
usermod -aG sudo <user>
Finally, I test SSH access from my laptop.
ssh <user>@192.168.1.211
Once that connects successfully, the base server is ready to use or convert into a template.
Conclusion
I have tried to keep this as generic as possible, and it should work for either VM or or bare metal. My specific aim was a simple reproducible VM that can be used to create multiple different server types.
Next steps depend entirely on what you want to do next. For myself, I am going to create a template in Proxmox, then clone several servers. However, the process for turning a template into a server is out of scope here, and will be covered in the next video.



Leave a Reply