# Kickstart to build Rocky 8 image for Raspberry Pi 4 hardware (aarch64) # # Disk setup clearpart --initlabel --all part /boot --asprimary --fstype=vfat --size=300 --label=boot part swap --asprimary --fstype=swap --size=512 --label=swap part / --asprimary --fstype=ext4 --size=2800 --label=RPIROOT # Repos setup: url --url http://download.rockylinux.org/pub/rocky/9/BaseOS/aarch64/os/ repo --name="BaseOS" --baseurl=http://download.rockylinux.org/pub/rocky/9/BaseOS/aarch64/os/ --cost=100 repo --name="AppStream" --baseurl=http://download.rockylinux.org/pub/rocky/9/AppStream/aarch64/os/ --cost=200 --install repo --name="CRB" --baseurl=http://download.rockylinux.org/pub/rocky/9/crb/aarch64/os/ --cost=300 --install # Rocky Rpi kernel repo, we need a more permanent place for this: repo --name="rockyrpi" --baseurl=https://download.rockylinux.org/pub/sig/9/altarch/aarch64/altarch-rockyrpi/ --cost=20 repo --name="rockyextras" --baseurl=https://download.rockylinux.org/pub/rocky/9/extras/aarch64/os/ --cost=20 # Install process: #text keyboard us --xlayouts=us --vckeymap=us rootpw --lock # FIXME user creation here does not work ? # user --name="rocky" --password="rockylinux" --plaintext --gecos="Rocky default user" --groups=wheel --uid=1000 timezone --isUtc --nontp UTC selinux --enforcing firewall --enabled --port=22:tcp network --bootproto=dhcp --device=link --activate --onboot=on services --enabled=sshd,NetworkManager,chronyd,cpupower shutdown bootloader --location=none lang en_US.UTF-8 skipx # Package selection: %packages @core #-grub2-tools-minimal #-grub2-tools #-grubby #-grub2-common chrony cloud-utils-growpart net-tools NetworkManager-wifi vim bash-completion nano kernel-tools # Need these for setting default locale of en-US: langpacks-en glibc-all-langpacks # will enable rocky-release-rpi after full 9 release (and we have it in the -extras repo) rocky-release-rpi raspberrypi2-firmware raspberrypi2-kernel4 %end # Post install scripts: %post # Write initial boot line to cmdline.txt (we will update the root partuuid further down) cat > /boot/cmdline.txt << EOF console=ttyAMA0,115200 console=tty1 root= rootfstype=ext4 elevator=deadline rootwait EOF # Apparently kickstart user was not working, attempt to do it here? /sbin/useradd -c "Rocky Linux default user" -G wheel -m -U rocky echo "rockylinux" | passwd --stdin rocky # Need to write several files to help with various things here. # First, the all-important README : cat >/home/rocky/README << EOF == Rocky 9 Raspberry Pi Image == This is a Rocky 9 install intended for Raspberry Pi 3b and 4 devices (architecture is aarch64). This image WILL NOT WORK on a Raspberry Pi 1 or 2 (1.1 or earlier), we are 64-bit only, and have no support for 32-bit ARM processors. Sorry :-/. The newer Pi Zero devices should be supported, as well as the Raspberry Pi 2 version 1.2 boards, which are 64-bit IMAGE NOTES / DIFFERENCES FROM STOCK ROCKY 8: - Based on Rocky Linux 9, points to production Rocky 9 aarch64 repositories - Includes script that fixes the wifi. Simple edit of a txt firmware settings file. Will need to be run whenever linux-firmware gets upgraded - Includes @minimal-install , plus a few quality of life packages like vim, bash-completion, etc. - Initial User "rocky" (default password: "rockylinux"). Root password disabled, rocky user is a sudoer - Partitions are 300 MB /boot , 512 MB swap, 2800 MB rootfs. Requires a 4 GB or larger storage device to serve as your disk GROW YOUR PARTITION: If you want to automatically resize your root (/ ) partition, just type the following (as root user): sudo rootfs-expand It should fill your main rootfs partition to the end of the disk. Thanks for your interest on Rocky-on-Rpi, feel free to share your experience or contribute in our chat channel at: https://chat.rockylinux.org/rocky-linux/channels/altarch ! -The Rocky Linux Team EOF # Run the fix-wifi script (extracts the .xz firmware) - should be installed via the rocky-release-rpi package # (shouldn't be needed anymore - fixed in newer rpi kernel builds) #fix-wifi-rpi.sh # Cleanup before shipping an image # Remove ifcfg-link on pre generated images rm -f /etc/sysconfig/network-scripts/ifcfg-link # Remove machine-id on pre generated images rm -f /etc/machine-id touch /etc/machine-id # Ensure no ssh keys are present rm -f "/etc/ssh/*_key*" # Clean yum cache yum clean all # Fix weird sssd bug, where it gets its folder owned by the unbound user: chown -R sssd:sssd /var/lib/sss/{db,pipes,mc,pubconf,gpo_cache} # Setting tuned profile to powersave by default -> sets the CPU governor to "ondemand". This prevents overheating issues cat > /etc/sysconfig/cpupower << EOF # See 'cpupower help' and cpupower(1) for more info CPUPOWER_START_OPTS="frequency-set -g ondemand" CPUPOWER_STOP_OPTS="frequency-set -g ondemand" EOF %end # Add the PARTUUID of the rootfs partition to the kernel command line # We must do this *outside* of the chroot, by grabbing the UUID of the loopmounted rootfs %post --nochroot # Extract the UUID of the rootfs partition from /etc/fstab UUID_ROOTFS="$(/bin/cat $INSTALL_ROOT/etc/fstab | \ /bin/awk -F'[ =]' '/\/ / {print $2}')" # Get the PARTUUID of the rootfs partition PART_UUID_ROOTFS="$(/sbin/blkid "$(/sbin/blkid --uuid $UUID_ROOTFS)" | \ /bin/awk '{print $NF}' | /bin/tr -d '"' )" # Configure the kernel commandline /bin/sed -i "s/root= /root=${PART_UUID_ROOTFS} /" $INSTALL_ROOT/boot/cmdline.txt echo "cmdline.txt looks like this, please review:" /bin/cat $INSTALL_ROOT/boot/cmdline.txt # Extract UUID of swap partition: UUID_SWAP=$(/bin/grep 'swap' $INSTALL_ROOT/etc/fstab | awk '{print $1}' | awk -F '=' '{print $2}') # Fix swap partition: ensure page size is 4096 (differs on the aarch64 AWS build host) /usr/sbin/mkswap -L "_swap" -p 4096 -U "${UUID_SWAP}" /dev/disk/by-uuid/${UUID_SWAP} %end