From 96c9895671e162d0bfcfc749c8253efe68461ccf Mon Sep 17 00:00:00 2001 From: Peter Boy Date: Wed, 10 Aug 2022 16:30:04 +0200 Subject: [PATCH] Initial kickstart file for new Fedora Server VM image --- fedora-server-vm-full.ks | 180 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100755 fedora-server-vm-full.ks diff --git a/fedora-server-vm-full.ks b/fedora-server-vm-full.ks new file mode 100755 index 0000000..820335a --- /dev/null +++ b/fedora-server-vm-full.ks @@ -0,0 +1,180 @@ +# fedora-server-vm-full.ks +# Kickstart file to build a Fedora Server Edition VM disk image. +# The image aims to resemble as close as technically possible the +# full features of a Fedora Server Edition in a virtual machine. +# +# At first boot it opens a test based basic configuration screen. +# +# This kickstart file is designed to be used with ImageFactory (in Koji). +# +# To build the image locally, you need to install ImageFactory and +# various additional helpers and configuration files. +# See Fedora Server Edition user documentation tutorial. + + +# Keyboard layouts +keyboard 'us' + +# Root password +rootpw --iscrypted --lock locked + +# System language +lang en_US.UTF-8 + +# Shutdown after installation +shutdown + +# Use text mode install +text + +# Network information +network --bootproto=dhcp --device=link --activate --onboot=on + +# Firewall configuration +firewall --enabled --service=mdns + +# System timezone +# set time zone to GMT (Etcetera/UTC) +timezone Etc/UTC --utc + +# Run the Setup Agent on first boot +firstboot --reconfig + +# SELinux configuration +selinux --enforcing + +# System services +# message: error enabling initial-setup, initial-setup does not exist +services --enabled="sshd,NetworkManager,chronyd,initial-setup" + +# System bootloader configuration +bootloader --location=mbr --timeout=1 --append="console=tty1 console=ttyS0,115200n8" + +# Partition Information. Use default partitioning as configured in Anaconda on +# Server Edition distribution media +autopart --noswap +# Clear the Master Boot Record +zerombr +# Partition clearing information +clearpart --all --initlabel --disklabel=msdos + +%post --erroronfail + +# Find the architecture we are on +arch=$(uname -m) + +# Import RPM GPG key, during installation saved in /etc/pki +echo "Import RPM GPG key" +releasever=$(rpm --eval '%{fedora}') +basearch=$(uname -i) +rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch + +# See the systemd-random-seed.service man page that says: +# " It is recommended to remove the random seed from OS images intended +# for replication on multiple systems" +# The newly installed instance should make it's own +echo "Removing random-seed so it's not the same in every image." +rm -f /var/lib/systemd/random-seed + +# When we build the image a networking config file gets left behind. +# Let's clean it up. +echo "Cleanup leftover networking configuration" +rm -f /etc/NetworkManager/system-connections/*.nmconnection + +dnf -y remove dracut-config-generic + +# Remove machine-id on pre generated images +rm -f /etc/machine-id +touch /etc/machine-id + +# Truncate the /etc/resolv.conf left over from NetworkManager during the +# kickstart. This causes delays in boot with cloud-init because the +# 192.168.122.1 DNS server cannot be reached. +truncate -s 0 /etc/resolv.conf + +# linux-firmware is installed by default and is quite large. As of mid 2020: +# Total download size: 97 M +# Installed size: 268 M +# So far we've been fine shipping without it so let's continue. +# More discussion about this in #1234504. +echo "Removing linux-firmware package." +rpm -e linux-firmware + +echo "Packages within this disk image" +rpm -qa --qf '%{size}\t%{name}-%{version}-%{release}.%{arch}\n' |sort -rn + +# Note that running rpm recreates the rpm db files which aren't needed or wanted +rm -f /var/lib/rpm/__db* + + +if [[ $arch == "aarch64" ]] || [[ $arch == "armv7l" ]]; then + +# Anaconda adds console=tty0 to the grub boot line on all images. this is problematic +# when you are using fedora via serial console as you do not get any output post grub +# linux does a good job of knowing what consoles need to be enabled. +# https://bugzilla.redhat.com/show_bug.cgi?id=2022757 +sed -i -e 's|console=tty0||g' /boot/loader/entries/*conf + +fi + + +# Cleanup dnf packages +echo "Cleaning old yum repodata." +dnf clean all + +echo "Zeroing out empty space." +# Create zeros file with nodatacow and no compression +touch /var/tmp/zeros +chattr +C /var/tmp/zeros +# This forces the filesystem to reclaim space from deleted files +dd bs=1M if=/dev/zero of=/var/tmp/zeros || : +echo "(Don't worry -- that out-of-space error was expected.)" +# Force sync to disk +sync / +rm -f /var/tmp/zeros +sync / + +%end + + +%post + +# setup systemd to boot to the right runlevel +echo -n "Setting default runlevel to multiuser text mode" +rm -f /etc/systemd/system/default.target +ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target +echo . + +%end + +%packages --inst-langs=en + +@server-product +@core +@headless-management +@standard +@networkmanager-submodules +##@container-management +@domain-client +@guest-agents + +# All arm-tools packages install on aarch64/armhfp only +# TODO: on a x86_64 devel environment are @arm-tools not available +# and cause a build error. +# @arm-tools + +# Standard Fedora Package Groups +## dracut-config-generic ## included in =core= +glibc-all-langpacks +initial-setup +kernel-core +-dracut-config-rescue +-generic-release* +-initial-setup-gui +-kernel +-plymouth +# pulled in by @standard +-smartmontools +-smartmontools-selinux + +%end