Replacing Ubuntu with Fedora on my Home Server: A Month of Tweaks and Lessons Learned

Introduction to My Home Server Migration

I’ve been running Ubuntu on my home server for years, but after the 2025 release, I decided it was time for a change. I chose Fedora as my new distribution, mainly due to its bleeding-edge packages and robust community support. This article documents my journey of replacing Ubuntu with Fedora on my home server, including the tweaks, lessons learned, and trade-offs I encountered along the way.

Pre-Migration Preparation

Before starting the migration, I made sure to back up all my important data using rsync and btrfs snapshots. Don’t bother with incremental backups at this stage - just get a full snapshot to be safe. I also took note of the installed packages and their versions, as I wanted to replicate the same environment on Fedora. The command dpkg --list > packages.txt helped me achieve this. Additionally, I updated my Ubuntu system to ensure I had the latest packages and security patches. I’ve seen this go wrong when people skip this step, so don’t rush into the migration without a solid backup.

Installation and Initial Configuration

I downloaded the latest Fedora ISO from the official Fedora website and created a bootable USB drive using dd. The installation process was smooth, and I opted for the default partitioning scheme, which included a separate /home partition for my data. After the installation, I configured my network settings, including setting up my SSH server with systemctl enable sshd and generating new SSH keys with ssh-keygen. This is where people usually get burned - forgetting to set up SSH keys and getting locked out of their server.

Package Installation and Configuration

I began installing the necessary packages, starting with the basics like git, vim, and htop. I used dnf to manage packages, which is Fedora’s default package manager. The command dnf install git vim htop installed the required packages. I also configured my git setup with git config --global user.name "Your Name" and git config --global user.email "[email protected]". The real trick is to keep your package list minimal - don’t install anything you don’t need.

Service Configuration and Management

To manage services, I used systemctl, which is the standard tool for managing systemd services. I enabled and started the necessary services, such as sshd and nginx, with systemctl enable --now sshd and systemctl enable --now nginx. I also configured my nginx setup with a custom configuration file in /etc/nginx/conf.d/. In practice, you’ll likely need to tweak these settings to fit your specific use case.

Troubleshooting and Lessons Learned

During the migration, I encountered a few issues, including a problem with my btrfs filesystem. The error message BTRFS: open_ctree failed indicated a corrupted filesystem, which I was able to fix by running btrfs check --repair /dev/sda1. Another issue I faced was with my ssh connection, which was dropping due to a misconfigured sshd setup. I resolved this by adjusting the TCPKeepAlive setting in /etc/ssh/sshd_config. I usually start with the basics when troubleshooting - checking logs and running basic commands like systemctl status to identify the issue.

Security Considerations

As I was setting up my new Fedora system, I made sure to follow good security practices. I enabled the firewall with systemctl enable firewalld and configured it to allow only necessary incoming connections. I also set up a basic fail2ban configuration to prevent brute-force attacks on my ssh server. Additionally, I kept my system up-to-date with the latest security patches by running dnf update regularly. This is where security can get tricky - don’t overlook the basics, and make sure you’re keeping your system patched.

Performance Optimization

To optimize the performance of my Fedora system, I tweaked a few settings. I enabled zram to improve memory usage with systemctl enable --now zram-swap. I also configured my sysctl settings to optimize network performance, including setting net.ipv4.tcp_tw_reuse to 1. Furthermore, I used tuned to adjust my system’s performance profile, opting for the server profile with tuned-adm profile server. Don’t expect massive performance gains from these tweaks, but they can make a noticeable difference.

After a month of using Fedora on my home server, I’m pleased with the results. The migration process was relatively smooth, and I’ve been able to replicate my previous Ubuntu setup. I plan to continue exploring Fedora’s features and optimizing my system’s performance. I’ll also be keeping an eye on security updates and ensuring my system remains secure and up-to-date.


See also