Posted to Infrastructure on

Build a Fedora Local Server: Architecture, Hardware, and Installation

Start with the host: review hardware and firmware, decide how encryption fits the availability model, install Fedora, and capture a clean baseline before adding services.

#fedora#linux#local-server#self-hosting#luks#virtualization#home-lab

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:

  1. reliable wired Ethernet;
  2. SSD or NVMe storage;
  3. enough RAM for the host plus planned VMs;
  4. CPU virtualization support;
  5. 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:

  1. download firmware for the exact board model;
  2. copy it to a FAT32 USB drive if the vendor requires that method;
  3. enter UEFI setup;
  4. use the board's built-in flash utility;
  5. allow the process to finish without interruption;
  6. 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

Footnotes

Scroll to article content with footnote reference 1

The Linux kernel KVM documentation is the authoritative reference for the in-kernel virtualization API that QEMU and libvirt build on.

Scroll to article content with footnote reference 1
Scroll to article content with footnote reference 2

Fedora's Secure Boot documentation explains the UEFI signature chain and the restrictions Secure Boot places on loading untrusted kernel modules.

Scroll to article content with footnote reference 2
Scroll to article content with footnote reference 3

The upstream cryptsetup/LUKS FAQ covers the LUKS security model, keyslots, recovery considerations, and—importantly—the limits of what encryption can recover from after metadata damage.

Scroll to article content with footnote reference 3 Scroll to article content with footnote reference 3
Scroll to article content with footnote reference 4

Fedora community discussions such as "Can we have full disk encryption" are useful examples of the operational trade-off between manual passphrase unlock and TPM-assisted unattended boot. Treat forum advice as context, not as normative configuration documentation.

Scroll to article content with footnote reference 4
Scroll to article content with footnote reference 5

systemd documents TPM2, FIDO2, PKCS#11, recovery-key, and passphrase enrollment in systemd-cryptenroll. Auto-unlock is therefore a supported design space, but it changes the threat and recovery model.

Scroll to article content with footnote reference 5 Scroll to article content with footnote reference 5 Scroll to article content with footnote reference 5
Scroll to article content with footnote reference 6

The official Fedora Workstation download page recommends Fedora Media Writer and provides signed checksum verification instructions for the installation image.

Scroll to article content with footnote reference 6
Scroll to article content with footnote reference 7

Fedora's system update guidance explains why regular updates are a security baseline and documents supported update workflows.

Scroll to article content with footnote reference 7
Scroll to article content with footnote reference 8

The fwupd project documentation and LVFS describe the Linux firmware-update stack. fwupdmgr get-upgrades is the relevant command for enumerating actual upgrade candidates rather than merely update-capable devices.

Scroll to article content with footnote reference 8
Scroll to article content with footnote reference 9

systemd's systemd.special documentation defines sleep.target, suspend.target, hibernate.target, and hybrid-sleep.target and their role in system sleep transitions.

Scroll to article content with footnote reference 9

Down the rabbit hole

Fedora Local Server Guide

Posted to Infrastructure on

Hardened Local Administration with OpenSSH and firewalld

Posted to Infrastructure on
Browse all posts

Map the system you need

Describe the product, workflow, integration, or operation you are building—and where the current system loses power. Include the people, tools, boundaries, constraints, and outcome that matter.

Every message is reviewed. Responses are limited.

Press Escape to close preview popover.