Fedora Server 44
Fedora Server 44 VM creation on a Linux host using KVM
Creating the VM
# Define the new VM name:
export VMNAME="fedora-server-43-01"
mkdir -p ~/VMs/"${VMNAME}"
# Copy the base image to the VM specific directory:
rsync --progress ~/VMs/ISOs/Linux/Fedora/43/Server/images/Fedora-Server-Guest-Generic-43-20251024.n.0.x86_64.qcow2 ~/VMs/${VMNAME}/${VMNAME}-sda.qcow2
# How big is the allocated disk?
qemu-img info ~/VMs/${VMNAME}/${VMNAME}-sda.qcow2
image: /home/patrickmslattery/VMs/fedora-server-43-01/fedora-server-43-01-sda.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 1.73 GiB
# Extend the base image by 10GB
qemu-img resize ~/VMs/${VMNAME}/${VMNAME}-sda.qcow2 +10G
Image resized.
# Create the VM:
virt-install \
--connect qemu:///session \
--hvm \
--name "${VMNAME}" \
--memory "8192" \
--vcpus "2" \
--disk path="${HOME}/VMs/${VMNAME}/${VMNAME}-sda.qcow2",bus=virtio \
--os-variant "fedora-rawhide" \
--graphics spice \
--network=bridge:virbr0 \
--boot hd \
--noautoconsole \
--import
Answer the install questions TODO_NEED_IMAGE When all of the install questions have been answered the system will boot up fully and display an IP address it can be reached at. TODO_NEED_IMAGE
Installing VirtIO drivers
VirtIO drivers are included in the v6.x/v7.x Linux kernel, there is nothing to install here.
Push SSH key(s) to the VM and login
See: Generating SSH keys for information on how to set this process up.
ssh-copy-id \
-F ~/.ssh/blank_config \
-i ~/.ssh/local-vms.pub \
patrickmslattery@192.168.122.171
TODO_NEED_IMAGE
Assuming you have your SSH config setup correctly, see Creating an SSH config file, you can now login with just the command:
# ssh ${IP_ADDRESS}
ssh 192.168.122.171
TODO_NEED_IMAGE
Setup sudoers
Setup the sudoers file to allow passwordless sudo for our interactive user account:
sudo visudo -f /etc/sudoers.d/patrickmslattery
# Insert this one line into the file:
patrickmslattery ALL=(ALL) NOPASSWD: ALL
# Set permissions on the file:
sudo chmod ug=r,o= /etc/sudoers.d/patrickmslattery
# Test with:
sudo ls -la /root
Expand the root LVM volume
By default Fedora Server 44 uses LVM for the root volume. The root LVM is typically set to the size of the boot disk less 2GB for the /boot partition and 500MB for the /boot/efi partition. So for the default 10GB disk allocation you’ll end up with about 7.5GB of usable space. However the LVM root volume is set to only use half of that.
To expand the root volume to use all available space, do:
# Determine the name of the LVM
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/systemVG-LVRoot 3.1G 2.8G 281M 92% /
# Expand the LVM to the max size
sudo lvextend -l +100%FREE /dev/mapper/systemVG-LVRoot
Size of logical volume systemVG/LVRoot changed from 3.13 GiB (802 extents) to 7.55 GiB (1933 extents).
Logical volume systemVG/LVRoot successfully resized.
Set the hostname
Set the hostname via the following shell commands:
# sudo hostnamectl hostname NEW_HOSTNAME
sudo hostnamectl hostname fedora-server-44-01
This change takes effect immediately.
You can view the hostname via: hostnamectl
$ hostnamectl
Static hostname: fedora-server-44-01
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: 2422d0d62eb6484b8a5ed44cf3c2c2dc
Boot ID: ef224bc04e7a4e69b9c8939c85c2209c
AF_VSOCK CID: 1
Virtualization: kvm
Operating System: Fedora Linux 44 (Server Edition)
CPE OS Name: cpe:/o:fedoraproject:fedora:43
OS Support End: Wed 2026-12-02
OS Support Remaining: 1y 1w 6d
Kernel: Linux 6.17.1-300.fc43.x86_64
Architecture: x86-64
Hardware Vendor: QEMU
Hardware Model: Standard PC _Q35 + ICH9, 2009_
Hardware Version: pc-q35-9.2
Firmware Version: edk2-20250812-16.fc42
Firmware Date: Tue 2025-08-12
Firmware Age: 3month 6d
Set the time zone
Set the time zone via the following shell commands:
# To get a list of all the time zones in the Americas:
# timedatectl list-timezones | grep America
# Set the time zone for NYC:
sudo timedatectl set-timezone "America/New_York"
sudo timedatectl set-local-rtc 0
# Verify the updated time zone:
timedatectl
Ensure the system clock matches the wall time after setting this.
OS updates
Update the OS via the following shell commands:
sudo dnf upgrade -y --refresh
Install all available updates and reboot when complete.
Install Git etc.
Here we’ll install a few basic utilities ([git], [htop], [jq], [yq]) to make our life easier, then we’ll set [Zsh] as our default shell and enable [oh-my-zsh] and [powerline-go]:
# Install git, htop, jq, yq, zsh, ohMyZSH, powerline-go, powerline-fonts
sudo dnf install -y \
git \
htop \
fzf \
jq \
yq \
zsh \
powerline-go \
powerline-fonts
# Set Zsh as the default shell, you'll need to logout and back in again for this to take effect.
chsh -s /bin/zsh
# You can verify the shell in use via:
echo ${SHELL}
The first time you login with zsh as your shell it will ask you to configure Zsh, ignore this and just reply with 0 to create a bare bones ~/.zshrc file and exit the configuration steps.
# Install oh-my-zsh via curl:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# Enable powerline-go:
nano -w ~/.zshrc
Zero out any existing configuration from the file and add the contents below to the ~/.zshrc file:
# If you come from bash you might have to change your $PATH.
export PATH=/usr/bin:/usr/local/bin:${HOME}/bin:${HOME}/.local/bin:${PATH}
# Path to your Oh My Zsh installation.
export ZSH="$HOME/.oh-my-zsh"
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time Oh My Zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="robbyrussell"
#------------------------------
# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
bindkey -e
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/home/patrickmslattery/.zshrc'
autoload -Uz compinit
compinit
# End of lines added by compinstall
#------------------------------
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
# aws
git
gh
git-commit
branch
# docker
# dotenv
fzf
history
# kubectl
# opentofu
# terraform
ssh
ssh-agent
)
source "$ZSH/oh-my-zsh.sh"
# Preferred editor for local and remote sessions
if [[ -n $SSH_CONNECTION ]]; then
export EDITOR='vim'
else
export EDITOR='/usr/bin/nano'
fi
#------------------------------
# Powerline-go configuration
function powerline_precmd() {
PS1="$(/usr/bin/powerline-go -modules venv,user,host,ssh,cwd,perms,git,jobs,exit,root -error $? -jobs ${${(%):%j}:-0})"
set "?"
}
function install_powerline_precmd() {
for s in "${precmd_functions[@]}"; do
if [ "$s" = "powerline_precmd" ]; then
return
fi
done
precmd_functions+=(powerline_precmd)
}
if [ "$TERM" != "linux" ] && [ -f "/usr/bin/powerline-go" ]; then
install_powerline_precmd
fi
#------------------------------
Logout and back in again after this. You should now see a custom shell prompt: TODO_ADD_IMAGE
Installing PowerShell 7
Install the latest LTS version of PowerShell 7 on Fedora Server 43, this installs to: /usr/bin/pwsh and this symlinks to: /opt/microsoft/powershell/7-lts/pwsh
sudo dnf install -y https://github.com/PowerShell/PowerShell/releases/download/v7.4.13/powershell-lts-7.4.13-1.rh.x86_64.rpm
You can invoke PowerShell via the command: pwsh
pwsh
PowerShell 7.4.13
PS /home/patrickmslattery> $PSVersionTable
Name Value
---- -----
PSVersion 7.4.13
PSEdition Core
GitCommitId 7.4.13
OS Fedora Linux 43 (Server Edition)
Platform Unix
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0