remove ubuntu2404

This commit is contained in:
Dan Kluser
2026-05-09 12:56:05 +02:00
parent c1a38900be
commit 1bf99c8369
8 changed files with 12 additions and 216 deletions

View File

@@ -1,6 +1,6 @@
# PS5 Linux Image Builder
Builds bootable Linux USB images for PlayStation 5 using Docker containers. Supports Ubuntu 26.04, Ubuntu 24.04, Arch, CachyOS (Gamescope + Steam), and Alpine, individually or as a multi-distro image with kexec switching.
Builds bootable Linux USB images for PlayStation 5 using Docker containers. Supports Ubuntu 26.04, Arch, CachyOS (Gamescope + Steam), and Alpine, individually or as a multi-distro image with kexec switching.
## Prerequisites
@@ -22,17 +22,12 @@ newgrp docker
OR
# Build a single Ubuntu 24.04 image
./build_image.sh --distro ubuntu2404
OR
# Build CachyOS (Arch-based, Gamescope + Steam Big Picture)
./build_image.sh --distro cachyos
OR
# Build a multi-distro image (ubuntu2604 + ubuntu2404 + arch + alpine + cachyos)
# Build a multi-distro image (ubuntu2604 + arch + alpine + cachyos)
./build_image.sh --distro all
```
@@ -48,7 +43,7 @@ sudo dd if=output/ps5-ubuntu2604.img of=/dev/sdX bs=4M status=progress
| Flag | Description | Default |
|------|-------------|---------|
| `--distro` | `ubuntu2604`, `ubuntu2404`, `arch`, `cachyos`, `alpine`, or `all` | `ubuntu2604` |
| `--distro` | `ubuntu2604`, `arch`, `cachyos`, `alpine`, or `all` | `ubuntu2604` |
| `--kernel` | Path to kernel source directory | auto-clone `v6.19.10` |
| `--img-size` | Disk image size in MB | `12000` (`32000` for `all`) |
| `--clean` | Remove all cached build artifacts and start fresh | off |
@@ -69,7 +64,7 @@ Use `--clean` to wipe everything and rebuild from scratch. The build will also s
PS5 Linux Image Builder
=======================
Distro: all
(ubuntu2604 ubuntu2404 arch alpine cachyos)
(ubuntu2604 arch alpine cachyos)
Image size: 32000MB
Kernel src: /path/to/work/linux
@@ -91,7 +86,6 @@ All verbose output goes to `build.log`. The terminal shows a spinner with live p
| Distro | Desktop | Kernel format | Init |
|--------|---------|---------------|------|
| Ubuntu 24.04 (Noble) | GNOME | `.deb` | systemd |
| Ubuntu 26.04 (Resolute) | GNOME | `.deb` | systemd |
| Arch | Sway | `.pkg.tar.zst` | systemd |
| CachyOS | Gamescope + Steam Big Picture (Arch + `[cachyos]` repo, no v3 migration in image build) | `.pkg.tar.zst` | systemd |
@@ -99,16 +93,15 @@ All verbose output goes to `build.log`. The terminal shows a spinner with live p
## Multi-distro Image
`--distro all` builds a 32GB image with 6 partitions (one EFI boot partition plus five root filesystems):
`--distro all` builds a 32GB image with 5 partitions (one EFI boot partition plus four root filesystems):
| Partition | Type | Label | Content |
|-----------|------|-------|---------|
| p1 | FAT32 | boot | Shared kernel, per-distro initrds, kexec scripts |
| p2 | ext4 | ubuntu2604 | Ubuntu 26.04 rootfs |
| p3 | ext4 | ubuntu2404 | Ubuntu 24.04 rootfs |
| p4 | ext4 | arch | Arch rootfs |
| p5 | ext4 | alpine | Alpine rootfs |
| p6 | ext4 | cachyos | CachyOS rootfs |
| p3 | ext4 | arch | Arch rootfs |
| p4 | ext4 | alpine | Alpine rootfs |
| p5 | ext4 | cachyos | CachyOS rootfs |
The boot partition contains kexec scripts to switch between distros at runtime. Ubuntu 26.04 is the default boot target.
@@ -124,7 +117,6 @@ docker/
entrypoint.sh # Single-distro build logic
entrypoint-multi.sh # Multi-distro build logic
distros/
ubuntu2404/ # Ubuntu 24.04 (Noble)
ubuntu2604/ # Ubuntu 26.04 (Resolute)
arch/ # Arch Linux
cachyos/ # CachyOS repos + Gamescope/Steam
@@ -133,7 +125,7 @@ distros/
boot/
cmdline.txt # Kernel cmdline template (__DISTRO__ placeholder)
vram.txt # VRAM allocation
kexec-{ubuntu2604,ubuntu2404,arch,alpine,cachyos}.sh
kexec-{ubuntu2604,arch,alpine,cachyos}.sh
work/ # Build artifacts (auto-created)
linux-bin/ # Compiled kernel packages
output/ # Final .img files

View File

@@ -1,6 +0,0 @@
#!/bin/sh
# Switch to Ubuntu 24.04 via kexec
set -e
BOOT=/boot/efi
kexec -l "$BOOT/bzImage" --initrd="$BOOT/initrd-ubuntu2404.img" --command-line="$(cat $BOOT/cmdline-ubuntu2404.txt)"
kexec -e

View File

@@ -9,13 +9,13 @@ KERNEL_SRC=""
CLEAN=false
IMG_SIZE=12000
MULTI_DISTROS="ubuntu2604 ubuntu2404 arch alpine cachyos"
MULTI_DISTROS="ubuntu2604 arch alpine cachyos"
usage() {
echo "Usage: $0 [--distro <distro>] [--kernel <path>] [--img-size <MB>] [--clean]"
echo ""
echo "Options:"
echo " --distro Distribution to build: ubuntu2604, ubuntu2404, arch, cachyos, alpine, all (default: ubuntu2604)"
echo " --distro Distribution to build: ubuntu2604, arch, cachyos, alpine, all (default: ubuntu2604)"
echo " --kernel Path to kernel source directory (default: auto-clone to work/linux/)"
echo " --img-size Disk image size in MB (default: 12000, 32000 for --distro all)"
echo " --clean Remove all cached build artifacts and start from scratch"

View File

@@ -1,13 +0,0 @@
#!/bin/bash
# Grows the root partition and filesystem to fill the disk.
# Runs once on first boot, then disables itself.
set -e
ROOT_DEV=$(findmnt -no SOURCE /)
DISK=$(lsblk -ndo PKNAME "$ROOT_DEV")
PART_NUM=$(cat /sys/class/block/$(basename "$ROOT_DEV")/partition)
growpart "/dev/$DISK" "$PART_NUM" || true
resize2fs "$ROOT_DEV" || true
systemctl disable grow-rootfs.service

View File

@@ -1,13 +0,0 @@
[Unit]
Description=Grow root filesystem to fill disk
DefaultDependencies=no
Before=local-fs.target
After=local-fs-pre.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/grow-rootfs
RemainAfterExit=yes
[Install]
WantedBy=local-fs.target

View File

@@ -1,162 +0,0 @@
image:
name: ps5-ubuntu2404
distribution: ubuntu
release: noble
description: Ubuntu Noble desktop
architecture: x86_64
source:
downloader: debootstrap
url: http://archive.ubuntu.com/ubuntu
variant: minbase
keyserver: keyserver.ubuntu.com
keys:
- 0x790BC7277767219C42C86F933B4FE6ACC0B21F32
- 0xf6ecb3762474eda9d21b7022871920d1991bc93c
packages:
manager: apt
update: true
cleanup: true
repositories:
- name: sources.list
url: |-
deb http://archive.ubuntu.com/ubuntu {{ image.release }} main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu {{ image.release }}-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu {{ image.release }}-security main restricted universe multiverse
architectures:
- amd64
sets:
- packages:
- ubuntu-desktop
- gnome-software
- firefox
- openssh-server
- build-essential
- network-manager
- linux-firmware
- initramfs-tools
- kmod
- dialog
- sudo
- nano
- cloud-guest-utils
- kexec-tools
- fonts-ubuntu
- fonts-liberation
- fonts-dejavu
- fontconfig
- systemd-zram-generator
- git
- flex
- gawk
- bison
- dwarves
- libelf-dev
- libssl-dev
- libncurses-dev
action: install
files:
- path: /etc/hostname
generator: hostname
- path: /etc/hosts
generator: hosts
- path: /etc/machine-id
generator: dump
- path: /etc/NetworkManager/conf.d/dns.conf
generator: copy
source: /tmp/build-staging/nm-dns.conf
- path: /etc/kernel/postinst.d/zz-update-boot
generator: copy
source: /tmp/build-staging/zz-update-boot
mode: "0755"
- path: /etc/fstab
generator: copy
source: /tmp/build-staging/fstab
- path: /usr/local/sbin/grow-rootfs
generator: copy
source: /tmp/build-staging/grow-rootfs
mode: "0755"
- path: /etc/systemd/system/grow-rootfs.service
generator: copy
source: /tmp/build-staging/grow-rootfs.service
- path: /opt/debs/
generator: copy
source: /tmp/build-staging/debs
actions:
- trigger: post-unpack
action: |-
#!/bin/bash
set -eux
# Clear stale apt lists to avoid InRelease split errors after debootstrap
rm -f /var/lib/apt/lists/*InRelease /var/lib/apt/lists/*Release /var/lib/apt/lists/*Packages* || true
# Retry up to 10 times on transient 429/network errors
echo 'Acquire::Retries "10";' > /etc/apt/apt.conf.d/80retry
# Install gnupg + dirmngr so we can fetch the Mozilla PPA key
apt-get update
apt-get install -y gnupg dirmngr curl
# Import Mozilla PPA signing key and add repository
mkdir -p /root/.gnupg /etc/apt/keyrings
chmod 700 /root/.gnupg
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0AB215679C571D1C8325275B9BDB3D89CE49EC21" | \
gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/keyrings/mozillateam.gpg --import
chmod 644 /etc/apt/keyrings/mozillateam.gpg
echo "deb [signed-by=/etc/apt/keyrings/mozillateam.gpg] http://ppa.launchpad.net/mozillateam/ppa/ubuntu noble main" \
> /etc/apt/sources.list.d/mozilla-ppa.list
# Pin PPA firefox over snap transitional package
cat > /etc/apt/preferences.d/mozilla-ppa << 'PINEOF'
Package: firefox*
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001
PINEOF
- trigger: post-update
action: |-
#!/bin/bash
set -eux
passwd -l root
- trigger: post-packages
action: |-
#!/bin/bash
set -eux
fc-cache -f -v
# SSH — password auth only, root login via sudo
sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config
systemctl enable ssh
# zram swap: half of RAM, zstd compressed
printf '[zram0]\nzram-size = ram / 2\ncompression-algorithm = zstd\n' > /etc/systemd/zram-generator.conf
- trigger: post-files
action: |-
#!/bin/bash
set -eux
systemctl enable grow-rootfs.service
systemctl enable systemd-resolved
mkdir -p /boot/efi
dpkg -i /opt/debs/*.deb
rm -rf /opt/debs
KVER=$(ls -1t /lib/modules | head -1)
update-initramfs -c -k "$KVER"
/etc/kernel/postinst.d/zz-update-boot "$KVER"
mappings:
architecture_map: debian

View File

@@ -1,2 +0,0 @@
[main]
dns=systemd-resolved

View File

@@ -5,7 +5,7 @@ set -ex
IMG_SIZE="${IMG_SIZE:-32000}"
SKIP_CHROOT="${SKIP_CHROOT:-false}"
DISTROS="${DISTROS:-ubuntu2404 ubuntu2604 arch alpine cachyos}"
DISTROS="${DISTROS:-ubuntu2604 arch alpine cachyos}"
STAGING="/tmp/build-staging"
EFI_LABEL="boot"
IMG="/output/ps5-multi.img"