2021-06-25 16:00:39 +00:00
# Kickstart to build Rocky 8 image for Raspberry Pi 4 hardware (aarch64)
#
2022-11-28 02:55:23 +00:00
# (many parts liberally grabbed from pgreco: https://github.com/psgreco/sig-core-AltArch/tree/master/image_build )
#
# Here is how to build this kickstart Raspberry Pi image, inside a clean mock chroot environment with livemedia-creator:
# (it is very similar to how the other kickstarts are built, but aarch64 must be used, and the livemedia appliance option)
#
#
# Set up mock env, and get a shell inside the chroot:
#
# mock -r rocky-8-aarch64 --init
# mock -r rocky-8-aarch64 --install lorax-lmc-novirt vim pykickstart git
# sudo setenforce 0
# mock -r rocky-8-aarch64 --shell --isolation=simple --enable-network
#
# Inside the shell:
# git clone https://github.com/rocky-linux/kickstarts
# git checkout r8
# cd kickstarts/altarch
#
# Finally, run the image creation:
#
# livemedia-creator --ks rockyrpi.ks --image-only --image-name RockyRpi --make-disk --resultdir /rockyrpi_result --no-virt
2021-06-25 16:00:39 +00:00
# Disk setup
clearpart --initlabel --all
part /boot --asprimary --fstype=vfat --size=300 --label=boot
part swap --asprimary --fstype=swap --size=512 --label=swap
2021-06-26 13:04:06 +00:00
part / --asprimary --fstype=ext4 --size=2800 --label=RPIROOT
2021-06-25 16:00:39 +00:00
2021-06-25 19:49:11 +00:00
2021-06-25 16:00:39 +00:00
2021-06-26 20:46:22 +00:00
# Repos setup:
2022-11-28 02:55:23 +00:00
url --url http://download.rockylinux.org/pub/rocky/8/BaseOS/aarch64/os/
2021-06-26 20:46:22 +00:00
repo --name="BaseOS" --baseurl=http://download.rockylinux.org/pub/rocky/8/BaseOS/aarch64/os/ --cost=100
repo --name="AppStream" --baseurl=http://download.rockylinux.org/pub/rocky/8/AppStream/aarch64/os/ --cost=200 --install
repo --name="PowerTools" --baseurl=http://download.rockylinux.org/pub/rocky/8/BaseOS/aarch64/os/ --cost=300 --install
# Rocky Rpi kernel repo, we need a more permanent place for this:
2022-11-28 02:55:23 +00:00
repo --name="rockyrpi" --baseurl=https://download.rockylinux.org/pub/sig/8/altarch/aarch64/altarch-rockyrpi/ --cost=20
2021-10-02 20:07:33 +00:00
repo --name="rockyextras" --baseurl=https://download.rockylinux.org/pub/rocky/8/extras/aarch64/os/ --cost=20
2021-06-26 20:46:22 +00:00
# Install proces:
install
keyboard us --xlayouts=us --vckeymap=us
rootpw --lock
2021-06-29 20:10:47 +00:00
# FIXME user creation here does not work ?
# user --name="rocky" --password="rockylinux" --plaintext --gecos="Rocky default user" --groups=wheel --uid=1000
2021-06-26 20:46:22 +00:00
timezone --isUtc --nontp UTC
selinux --enforcing
firewall --enabled --port=22:tcp
network --bootproto=dhcp --device=link --activate --onboot=on
2022-11-28 02:55:23 +00:00
services --enabled=sshd,NetworkManager,chronyd,tuned
2021-06-26 20:46:22 +00:00
shutdown
2021-06-29 16:25:38 +00:00
bootloader --location=none
2021-06-26 20:46:22 +00:00
lang en_US.UTF-8
# Package selection:
%packages
@core
chrony
cloud-utils-growpart
net-tools
NetworkManager-wifi
vim
bash-completion
nano
2022-11-28 02:55:23 +00:00
tuned
2021-06-26 20:46:22 +00:00
2021-10-02 20:07:33 +00:00
rocky-release-rpi
2021-06-26 20:46:22 +00:00
raspberrypi2-firmware
raspberrypi2-kernel4
2021-10-02 20:07:33 +00:00
2021-06-26 20:46:22 +00:00
%end
# Post install scripts:
2021-06-25 16:00:39 +00:00
%post
2021-06-25 19:49:11 +00:00
2021-07-31 22:24:38 +00:00
# Write initial boot line to cmdline.txt (we will update the root partuuid further down)
2021-06-25 19:49:11 +00:00
cat > /boot/cmdline.txt << EOF
2021-07-15 17:32:41 +00:00
console=ttyAMA0,115200 console=tty1 root= rootfstype=ext4 elevator=deadline rootwait
2021-06-25 19:49:11 +00:00
EOF
2021-06-29 20:05:05 +00:00
# Run this once to fix the wifi:
sed -i 's/boardflags3=0x48200100/boardflags3=0x44200100/g' /lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt
2021-06-29 20:10:47 +00:00
2021-06-29 20:05:05 +00:00
# Apparently kickstart user was not working, attempt to do it here?
2021-06-29 20:10:47 +00:00
/sbin/useradd -c "Rocky Linux default user" -G wheel -m -U rocky
2021-06-29 20:05:05 +00:00
echo "rockylinux" | passwd --stdin rocky
2021-06-25 19:49:11 +00:00
2021-06-26 13:04:06 +00:00
# Need to write several files to help with various things here.
# First, the all-important README :
cat >/home/rocky/README << EOF
2021-10-02 20:07:33 +00:00
== Rocky 8 Raspberry Pi Image ==
2021-06-26 13:04:06 +00:00
2021-10-02 20:07:33 +00:00
This is a Rocky 8 install intended for Raspberry Pi 3b and 4 devices (architecture is aarch64).
2021-06-26 13:04:06 +00:00
2021-11-16 22:13:46 +00:00
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 v. 1.2 boards, which are 64-bit
2021-06-26 13:04:06 +00:00
IMAGE NOTES / DIFFERENCES FROM STOCK ROCKY 8:
2022-11-28 02:55:23 +00:00
- Based on Rocky Linux 8, points to production Rocky 8 aarch64 repositories
2021-06-26 13:04:06 +00:00
- Has an additional repository that contains kernel packages for Raspberry Pi
- 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
2021-10-02 20:07:33 +00:00
GROW YOUR PARTITION:
2021-06-26 13:04:06 +00:00
2021-10-02 20:07:33 +00:00
If you want to automatically resize your root (/ ) partition, just type the following (as root user):
2021-06-29 16:25:38 +00:00
sudo rootfs-expand
2021-06-26 13:04:06 +00:00
2021-06-30 04:01:33 +00:00
It should fill your main rootfs partition to the end of the disk.
2021-10-02 20:07:33 +00:00
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
2021-06-26 13:04:06 +00:00
EOF
2021-07-30 20:58:21 +00:00
# Next, script to fix the wifi firmware setting:
cat >/home/rocky/fix-wifi-rpi4.sh << 'EOF'
#!/bin/bash
# Simple hacky fix to correct wifi settings on the Rpi4 so it loads properly:
sed -i 's/boardflags3=0x48200100/boardflags3=0x44200100/g' /lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt
echo "Patched /lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt . You can reboot and wifi should work, or do: rmmod brcmfmac; modprobe brcmfmac; "
EOF
chmod 755 /home/rocky/fix-wifi-rpi4.sh
2021-06-29 20:10:47 +00:00
chown -R rocky:rocky /home/rocky
2021-06-25 19:49:11 +00:00
2021-06-26 13:04:06 +00:00
2021-06-29 20:05:05 +00:00
# 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
2022-11-28 02:55:23 +00:00
rm -f "/etc/ssh/*_key*"
# Setting tuned profile to powersave by default -> sets the CPU governor to "ondemand". This prevents overheating issues
echo "powersave" > /etc/tuned/active_profile
2021-06-25 19:49:11 +00:00
2021-10-03 04:46:45 +00:00
2021-06-29 19:53:48 +00:00
# Clean yum cache
yum clean all
2021-06-25 16:00:39 +00:00
%end
2021-07-15 17:32:41 +00:00
# Add the PARTUUID of the rootfs partition to the kernel command line
%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)" | \
2021-07-22 08:03:08 +00:00
/bin/awk '{print $NF}' | /bin/tr -d '"' )"
2021-07-15 17:32:41 +00:00
# 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
2021-10-03 04:46:45 +00:00
# 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}
2021-07-15 17:32:41 +00:00
%end
2022-11-28 02:55:23 +00:00