Initial commit

kickstart, launcher script, and readme
This commit is contained in:
Skip Grube 2024-10-15 15:38:29 -04:00
commit 66197bde60
3 changed files with 321 additions and 0 deletions

60
readme.txt Normal file
View File

@ -0,0 +1,60 @@
Skip's Rocky 9 i686 experiment
###############################
Background
###########
Simple project, simple goal: Get Rocky 9 latest booting and working on i686 (32 bit) hardware. Why? Because we can. And it's fun!
Almost everything we need is already present in the distro. The Rocky project needs to build the vast majority of itself as i686 anyway, to satisfy multilib requirements.
Fortunately thanks to excellent publication and repo management, an almost-complete i686 distro is ready-published in the "devel" repository: https://dl.rockylinux.org/pub/rocky/9/devel/i686/
It won't have everything (Lots of GUI programs like Firefox are missing), but certainly enough to make a functional system
Only one (big) piece is missing: the kernel. The RHEL/Rocky kernel build is unsuitable for this, having patches on top of patches with a tricky build process.
Fortunately, there is a much cleaner kernel RPM courtesy of ELRepo (elrepo.org). A set of i686 kernel RPMS was built from the kernel-lt 6.1.x base in short order, and they seem to work!
Combining these i686 kernel RPMs with the Rocky 9 devel/ i686 repository gives everything you need for a bootable system. Kickstart and livemedia-creator means a rudimentary image is currently prototyped and available.
Where to Download
##############
QCow2 image: https://skiprocky.linuxdn.org/Rocky9_i686/
DNF i686 kernel repo: https://skiprocky.linuxdn.org/Rocky9_i686/kernel_repo/
Kickstart + scripts for image create: https://git.resf.org/skip/rocky-i686
kernel sources (elrepo fork): https://git.resf.org/skip/kernel-lt
Rocky 9 i686 devel (userspace packages): https://dl.rockylinux.org/pub/rocky/9/devel/i686/
Image Info
###########
Login:
root : Rockyi686Test
Recommend you change it.
Cloud-init:
Is available and setup by default. If you have means of triggering it, additional users/auth methods could be set up upon boot
Write disk to physical drive or USB:
qemu-img convert -f qcow2 -O raw rocky9_i686.qcow2 /dev/sdb
(IMPORTANT: make sure "/dev/sdb" is your target device! Don't overwrite your main system's drive!)
Expand disk to fill hard drive:
growpart /dev/sda 2
resize2fs /dev/sda2
(This assumes "/dev/sda" is the drive in the installed system. It could be different - check with blkid)
Building the image:
Run ./rocky9_i686_build.sh with administrator privileges. You will need to update the script - point to a valid Rocky 9 boot iso (stock iso is fine).
You also need qemu-kvm and livemedia-creator (lorax) installed

241
rocky9_i686.ks Normal file
View File

@ -0,0 +1,241 @@
lang en_US.UTF-8
keyboard us
timezone --utc UTC
# Disk
bootloader --append="no_timer_check net.ifnames=0" --location=mbr --timeout=5
auth --enableshadow --passalgo=sha512
selinux --permissive
firewall --enabled --service=ssh
firstboot --disable
# Network information
network --bootproto=dhcp --device=link --activate --onboot=on
# Root password
services --disabled="kdump,rhsmcertd" --enabled="NetworkManager,sshd,rsyslog,chronyd,cloud-init,cloud-init-local,cloud-config,cloud-final,rngd"
# DEBUG :: set root password static for now
rootpw Rockyi686Test
shutdown
##
##
%pre
# Set up storage
(
# Clear the Master Boot Record
dd if=/dev/zero of=/dev/sda bs=512 count=1
# Create a new GPT partition table
parted /dev/sda mklabel msdos
# Create a partition for /boot
parted /dev/sda mkpart primary ext4 1MiB 1000MiB
parted /dev/sda set 1 boot on
# Create for /
parted /dev/sda mkpart primary ext4 1000MiB 9000MiB
) &> /tmp/storage_setup.log
%end
###
###
part /boot --fstype="ext4" --label=boot --size=1000 --onpart="sda1"
part / --size=8000 --fstype="ext4" --onpart="sda2"
###
###
url --url=https://skiprocky.linuxdn.org/Rocky9_i686/kernel_repo/
repo --name=Rocky9_Kernel_i686 --cost=20 --baseurl=https://skiprocky.linuxdn.org/Rocky9_i686/kernel_repo/
repo --name=Rocky9_i686 --cost=200 --baseurl=http://dl.rockylinux.org/pub/rocky/9/devel/i686/os/
###
###
%packages --nocore
# @Core group (no groupinfo in i686 devel, have to list it out here):
audit
basesystem
bash
coreutils
cronie
crypto-policies
crypto-policies-scripts
curl
dnf
e2fsprogs
filesystem
firewalld
glibc
grubby
hostname
iproute
iproute-tc
iputils
irqbalance
kbd
kexec-tools
less
logrotate
man-db
ncurses
openssh-clients
openssh-server
p11-kit
parted
passwd
policycoreutils
procps-ng
rootfiles
rpm
rpm-plugin-audit
rsyslog
selinux-policy-targeted
setup
shadow-utils
sssd-common
sssd-kcm
sudo
systemd
util-linux
vim-minimal
xfsprogs
yum
NetworkManager
NetworkManager-team
NetworkManager-tui
authselect
dnf-plugins-core
dracut-config-rescue
initscripts-rename-device
iwl100-firmware
iwl1000-firmware
iwl105-firmware
iwl135-firmware
iwl2000-firmware
iwl2030-firmware
iwl3160-firmware
iwl5000-firmware
iwl5150-firmware
iwl6000g2a-firmware
iwl6050-firmware
iwl7260-firmware
libsysfs
linux-firmware
lshw
lsscsi
microcode_ctl
#prefixdevname
python3-libselinux
sg3_utils
sg3_utils-libs
# Other core packages needed:
rocky-release
dnf
yum
nfs-utils
dnf-utils
hostname
# Extra goodies from stock GenericCloud image:
cloud-init
cloud-utils-growpart
python3-jsonschema
dracut-config-generic
firewalld
tar
tcpdump
rsync
rng-tools
cockpit-ws
cockpit-system
#qemu-guest-agent
virt-what
# i686 specific kernel and bootloaders:
kernel-lt
kernel-lt-core
kernel-lt-modules
kernel-lt-modules-extra
grub2-pc
grub2-pc-modules
grub2-tools
grub2-tools-extra
# Other
glibc-langpack-en
glibc-all-langpacks
tmux
bash-completion
wget
%end
###
###
%post --erroronfail
# Ensure legacy BIOS is installed properly (this is i686, no UEFI here)
grub2-install --target=i386-pc /dev/sda
grubby --update-kernel=ALL --remove-args " crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M" --args="console=ttyS0,115200 forcepae"
# setup systemd to boot to the right runlevel
rm -f /etc/systemd/system/default.target
ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
# generic localhost names
cat > /etc/hosts << EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
EOF
echo "Fixing SELinux contexts."
touch /var/log/cron
touch /var/log/boot.log
mkdir -p /var/cache/yum
/usr/sbin/fixfiles -R -a restore
rm -f /var/lib/systemd/random-seed
cat /dev/null > /etc/machine-id
%end
###
%post --erroronfail
# Set up repos to only point to i686-kernel and i686 Rocky devel:
sed -i 's/enabled=1/# Disabling repo due to i686-only system\nenabled=0/' /etc/yum.repos.d/*.repo
cat <<EOF > /etc/yum.repos.d/Rocky9_i686.repo
# Skips i686 Rocky kernel (adapted from ELRepo)
[kernel-i686]
name=kernel-i686
baseurl=https://skiprocky.linuxdn.org/Rocky9_i686/kernel_repo/
priority=20
gpgcheck=0
enabled=1
# Rocky 9 "devel" repo has all i686 packages needed in userspace
[Rocky9-i686]
name=Rocky9-i686
baseurl=https://dl.rockylinux.org/pub/rocky/9/devel/i686/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9
enabled=1
EOF
# Set up swapfile:
dd if=/dev/zero of=/var/swap.img bs=10M count=150
mkswap /var/swap.img
chmod 0600 /var/swap.img
echo "/var/swap.img none swap defaults 0 0" >> /etc/fstab
%end

20
rocky9_i686_build.sh Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
# Change ROCKYISO to a proper Rocky 9 boot iso path - it will launch and run Anaconda
# can connect via VNC to localhost:5931 to examine the system as it builds
# This should be run as root/sudo. Log output goes in the current dir, image goes in ./rocky9_i686_image/
rm -rf $(pwd)/rocky9_i686_image
rm -f $(pwd)/*.log
ROCKYISO=/root/Rocky-9-latest-x86_64-boot.iso
livemedia-creator \
--ks ./rocky9_i686.ks \
--resultdir $(pwd)/rocky9_i686_image \
--project "Rocky 9 i686" \
--make-disk --qcow2 --image-type qcow2 \
--iso ${ROCKYISO} \
--vnc="vnc=127.0.0.1:31" --ram 4096 --vcpus 2 \
--image-name "rocky9_i686.qcow2"