Build the Host Before You Build the Services
A useful local server does not need to begin as purpose-built server hardware. A capable desktop can become a dependable Linux host if you start with a clear boundary: make the machine stable, secure, remotely administrable, and recoverable before you add applications.
This series uses Fedora Workstation on repurposed desktop hardware. The finished machine becomes a general-purpose host for virtual machines, private remote administration, storage, and future local services.
The exact hardware is not important. The pattern is.
Example-value convention: Hostnames, usernames, interface names, device paths, IP addresses, CIDR ranges, UUIDs, fingerprints, hashes, mapper names, and other identifiers shown in this series are examples unless explicitly identified as a software default. Derive the corresponding values from your own machine before running commands. Even documented defaults can change with a distribution release, installer choice, administrator, or existing configuration.
The Baseline Is a Layered Host
The host will eventually provide:
Fedora host
├── optionally encrypted system disk
├── hardened OpenSSH
├── firewalld + SELinux
├── KVM/QEMU/libvirt
│ └── Fedora Server VM
├── Tailscale private administration
└── encrypted secondary storage
└── /srv/storage
This guide stops before the final router, VLAN, Wi-Fi, or dedicated-firewall design. The host should remain useful whether it is temporarily connected to an ISP router or later moved behind a dedicated network edge.
Fedora Workstation Keeps Recovery Close
Fedora Workstation is a practical first step when the physical machine will retain a monitor, keyboard, and desktop environment during setup.
It gives you:
- the normal Fedora package and systemd service model;
- GNOME for local recovery and hardware inspection;
- NetworkManager, firewalld, SELinux, and modern kernel support;
- a straightforward path from local setup to mostly remote administration.
A headless Fedora Server installation is equally valid. The architectural rule matters more than the edition: the desktop session should never become a runtime dependency. SSH, Tailscale, libvirt, disk mounts, and other server functions should start as system services without waiting for someone to log into GNOME.
Hardware Matters Less Than the Pattern
The machine in this series is a capable older desktop with:
- a desktop CPU with hardware virtualization support;
- enough RAM for Fedora plus at least one lightweight VM;
- an NVMe or SSD system disk;
- a separate SSD for secondary storage;
- optional discrete GPUs;
- wired Ethernet.
A smaller system can follow the same guide. For a general-purpose host, prioritize these capabilities in order:
- reliable wired Ethernet;
- SSD or NVMe storage;
- enough RAM for the host plus planned VMs;
- CPU virtualization support;
- firmware that exposes virtualization and IOMMU controls.
If the machine contains valuable data, back it up before continuing. This guide assumes the original desktop operating system can be erased.
Know the Machine Before You Change It
Before changing firmware or disks, collect a quick inventory from the existing operating system if possible. After Fedora is installed, collect the same basic facts in one pass:
hostnamectl
lscpu
free -h
lsblk -o NAME,SIZE,FSTYPE,LABEL,MOUNTPOINTS,MODEL
lspci -nn
You are looking for five answers: how much RAM is installed, which disk should become the Fedora system disk, which disk should remain secondary storage, whether wired Ethernet is available, and whether the CPU reports virtualization support.
KVM is Linux's in-kernel virtualization interface; the later virtualization guide builds libvirt/QEMU management on top of that capability.1
Firmware Comes Before Infrastructure
If the motherboard firmware is significantly out of date, update it before treating the machine as infrastructure.
Use the motherboard vendor's current instructions and firmware image. A common desktop-board flow is:
- download firmware for the exact board model;
- copy it to a FAT32 USB drive if the vendor requires that method;
- enter UEFI setup;
- use the board's built-in flash utility;
- allow the process to finish without interruption;
- re-enter UEFI afterward because settings may reset to defaults.
Match the firmware to the exact board model. A similar board name is not a match.
After the update, record the firmware version from Linux:
sudo dmidecode -t bios
When you publish logs or screenshots, remove serial numbers, machine IDs, and other hardware identifiers that are not needed to explain the procedure.
Virtualization Starts in Firmware
The host will use KVM later, so enable hardware virtualization now.
For Intel systems, look for settings named approximately:
Intel Virtualization Technology / VMX / VT-x
Intel VT-d
For AMD systems, common equivalents are:
SVM / AMD-V
IOMMU
Enable both CPU virtualization and IOMMU support when available. After Fedora is installed, check that the firmware and kernel agree:
lscpu | grep -i virtualization
lsmod | grep kvm
dmesg | grep -Ei 'DMAR|IOMMU|AMD-Vi'
When KVM is available, lsmod lists kvm plus kvm_intel or kvm_amd. DMAR lines are Intel VT-d evidence; AMD systems usually report AMD-Vi instead. You do not need to decode every IOMMU line. At this stage, you only need evidence that the firmware exposes the feature and Linux sees it.
Secure Boot Is a Separate Trust Decision
Secure Boot uses UEFI trust to verify signed boot components. Fedora supports Secure Boot, but the kernel will reject untrusted kernel modules while it is enabled.2
That matters on systems using proprietary or locally built out-of-tree modules. A machine using NVIDIA modules, for example, may need a signing and enrollment workflow before Secure Boot can remain enabled without breaking those modules.
Check the current state:
mokutil --sb-state
If Secure Boot is disabled, record that as a deferred security decision instead of treating it as forgotten cleanup. This series keeps Secure Boot hardening separate when third-party kernel modules are involved.
Root Encryption Trades Availability for Data-at-Rest Protection
Fedora can protect the main system volume with LUKS. LUKS is the standard Linux disk-encryption format managed by cryptsetup, and its recovery model deserves the same attention as its confidentiality benefits.3
What Encryption Protects
Encrypting the Fedora root volume protects data at rest if the physical machine or system drive is stolen or removed. Depending on what the server later stores, that can include:
- user files and application data;
- SSH configuration and authorized keys;
- service configuration;
- local databases and caches;
- VM disk images stored on the system volume;
- logs containing operational details;
- credentials or tokens accidentally written to disk.
LUKS reduces the value of removing the storage device and attaching it to another computer.
What Encryption Costs
The main operational cost is the boot boundary. With a passphrase-protected root volume, Fedora cannot finish booting until the encrypted disk is unlocked.
power on / reboot
↓
bootloader + initramfs
↓
LUKS unlock required
↓
Fedora root filesystem becomes available
↓
systemd starts sshd, Tailscale, libvirt, VMs, mounts, and services
A remote reboot can therefore leave the server waiting at a physical unlock prompt. SSH and Tailscale cannot help until Fedora has booted far enough to start them.
The trade-offs are concrete:
- the LUKS passphrase and recovery data become critical recovery material;
- unattended reboot is harder unless you add TPM2, FIDO2, a key file, network-bound decryption, or another auto-unlock method later;
- encryption adds some CPU/storage work, although modern hardware commonly accelerates the underlying cryptography;
- an encrypted root disk protects powered-off data, not a system that is already running, unlocked, and compromised.
Fedora users regularly discuss this security-versus-availability boundary, especially around TPM-assisted unlock and unattended boot.4 Community discussion is useful context, but cryptsetup and systemd documentation remain the authority for configuration behavior.
When Encryption Is the Right Default
Choose encryption when physical data-at-rest protection matters more than completely unattended boot. That is often reasonable for a local server in a home or office where someone can reach the console after a planned reboot.
The machine in this series uses that model: manual boot-time unlock is an accepted cost of protecting the system disk at rest.
When Availability Wins Instead
A server that must automatically recover from power loss or reboot without local intervention may make a different choice. Leaving the root disk unencrypted simplifies unattended operation, but the physical disk becomes readable offline unless sensitive data is protected elsewhere.
You can also keep encryption and later add a carefully designed auto-unlock mechanism with systemd-cryptenroll or another supported design.5 That convenience changes the threat model, so treat it as its own security decision.
Verify the Installer Before Erasing a Disk
Use Fedora Media Writer or another Fedora-supported method to write Fedora Workstation to a USB drive. Fedora's download page recommends Media Writer and provides signed checksum verification instructions for installation images.6
Boot the machine from that USB in UEFI mode. Before starting installation, verify that you are about to install onto the intended system disk. If a secondary drive contains data you want to preserve, physically disconnecting it during the first OS installation is a simple extra safety boundary.
Keep the First Install Boring
For a straightforward single-disk host, Fedora's automatic partitioning is a reasonable baseline. Installer layouts can change across Fedora releases, so treat example partition trees as explanatory rather than contractual.
If you selected LUKS encryption, a layout may resemble:
NVMe system disk
├── EFI System Partition vfat
├── /boot ext4
└── LUKS container
└── Btrfs
├── /
└── /home
During installation:
- if you chose encryption, enable it for the main Fedora storage and choose a strong passphrase;
- create a normal non-root administrator account;
- allow Fedora to install in UEFI mode;
- verify again that the selected target is the intended system disk.
The important properties are simple: you know which disk is being erased, how the machine boots, and whether the system data is encrypted.
Prove the Disk Layout on First Boot
After installation, remove the installer USB and boot from the Fedora system disk. If the root volume is encrypted, you should encounter the LUKS unlock step before Fedora can mount its root filesystem.
Inspect the result:
lsblk -o NAME,SIZE,FSTYPE,LABEL,UUID,MOUNTPOINTS,MODEL
An encrypted installation may look like:
nvme0n1
├─nvme0n1p1 vfat /boot/efi
├─nvme0n1p2 ext4 /boot
└─nvme0n1p3 crypto_LUKS
└─luks-... btrfs / /home
Confirm the filesystems you care about:
findmnt /
findmnt /home
Do not publish or casually share real LUKS UUIDs, machine IDs, disk serial numbers, or recovery credentials in screenshots or logs.
Update Before You Layer on Services
Bring the new installation current before adding virtualization and remote-management components:
sudo dnf upgrade --refresh
Keeping Fedora updated is part of the distribution's normal security model.7 Reboot when foundational components such as the kernel require it:
sudo reboot
After the machine returns, confirm the active kernel and check for unexpected failed units:
uname -r
systemctl --failed
A clean baseline should have no unexpected failed units.
Firmware Capability Is Not the Same as an Available Update
Fedora integrates with fwupd and LVFS for hardware that vendors expose through the Linux firmware update ecosystem.8
Refresh the metadata, then inspect both actual upgrades and recognized devices:
sudo fwupdmgr refresh --force
fwupdmgr get-upgrades
fwupdmgr get-devices
Updatable means fwupd knows how to update the device. It does not mean a newer firmware release exists. Use get-upgrades to identify real candidates and the exact target device before installing anything. Do not run a blanket firmware update across every device fwupd can see.
Keep Fedora's Security Boundaries Intact
SELinux and firewalld are part of the baseline, not obstacles to remove when something becomes inconvenient.
getenforce
systemctl is-active firewalld
You want Enforcing and active. Later guides configure a dedicated firewalld zone and diagnose SELinux denials instead of using global disablement as a troubleshooting shortcut.
A Server Should Not Fall Asleep
A Workstation installation may inherit desktop power-management behavior that is wrong for an always-on server. Display blanking is fine; suspending the machine is not.
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
systemctl is-enabled sleep.target suspend.target hibernate.target hybrid-sleep.target
The four targets should report masked. Masking these systemd targets blocks normal activation of the corresponding sleep paths; display power management remains a separate concern.9
To reverse the decision later:
sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
Capture a Known-Good Host State
Before adding virtualization or overlay networking, capture the host state:
hostnamectl
uname -r
lscpu | grep -E 'Model name|CPU\(s\)|Virtualization'
free -h
lsblk -o NAME,SIZE,FSTYPE,LABEL,MOUNTPOINTS,MODEL
ip -br address
sudo firewall-cmd --get-active-zones
getenforce
systemctl --failed
This is your checkpoint. If a later change breaks networking or virtualization, compare against known-good state instead of debugging from memory.
Before publishing or sharing the baseline, scrub machine IDs, serial numbers, UUIDs, real IP addresses, host-key fingerprints, internal account names, and any other environment-specific identifiers that do not teach the procedure.
The Host Baseline Is Ready
At this point the machine should have:
- [x] firmware/UEFI reviewed;
- [x] virtualization enabled;
- [x] Fedora installed in UEFI mode;
- [x] an explicit system-disk encryption decision;
- [x] Fedora packages/kernel updated;
- [x] SELinux enforcing;
- [x] firewalld active;
- [x] firmware state inspected;
- [x] server-appropriate sleep behavior;
- [x] a captured system-health baseline.
If you chose LUKS, also verify that the encrypted-root boot behavior and recovery implications are understood and documented.
It is not yet a remotely administered server. The next guide creates that boundary with hardened OpenSSH and a source-restricted firewalld zone.
FAQ
Should I encrypt the Fedora system disk?
Encrypt it when protecting powered-off data is worth accepting a manual or deliberately automated unlock boundary. Leave it unencrypted only when unattended recovery matters more and you have consciously accepted the physical data-at-rest trade-off. LUKS protects a stolen or removed disk; it does not protect an already unlocked, compromised system.3:15:1
Does encryption mean a remote reboot can strand the server?
Yes, when the root volume requires a local passphrase. SSH, Tailscale, libvirt, and other services cannot start until Fedora has unlocked and mounted its root filesystem. If unattended reboot becomes a requirement, evaluate supported auto-unlock methods as a separate threat-model decision.5:2