Add Debian 12 (XFCE) image support

Plain Debian 12 Bookworm with XFCE desktop, LightDM autologin, Firefox
ESR, and standard desktop utilities. Fills the gap between the heavier
Kali (Debian + security tools) and the headless Proxmox (Debian +
hypervisor) — a clean, lightweight Debian desktop for PS5.

Tested on PS5 hardware: XFCE displays over HDMI, boots to desktop.

[skip ci]
This commit is contained in:
Bug Bounty Zip
2026-06-14 00:39:13 +08:00
parent 76d3ba281e
commit 7d5efa0583
7 changed files with 284 additions and 3 deletions

View File

@@ -8,7 +8,7 @@ on:
description: 'Distribution'
default: 'ubuntu2604'
type: choice
options: [all, ubuntu2604, arch, cachyos, kali, fedora, proxmox]
options: [all, ubuntu2604, arch, cachyos, kali, fedora, proxmox, debian]
workflow_call:
inputs:
distro:
@@ -34,7 +34,7 @@ jobs:
run: |
INPUT="${{ inputs.distro || 'ubuntu2604' }}"
if [ "$INPUT" = "all" ]; then
echo 'distros=["kali","ubuntu2604","arch","cachyos","fedora","proxmox"]' >> "$GITHUB_OUTPUT"
echo 'distros=["kali","ubuntu2604","arch","cachyos","fedora","proxmox","debian"]' >> "$GITHUB_OUTPUT"
else
echo "distros=[\"$INPUT\"]" >> "$GITHUB_OUTPUT"
fi

View File

@@ -17,7 +17,7 @@ usage() {
echo "Usage: $0 [--distro <distro>] [--kernel <path>] [--img-size <MB>] [--clean]"
echo ""
echo "Options:"
echo " --distro Distribution to build: ubuntu2604, arch, cachyos, kali, fedora, proxmox, all (default: ubuntu2604)"
echo " --distro Distribution to build: ubuntu2604, arch, cachyos, kali, fedora, proxmox, debian, 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, 98304 for kali)"
echo " --clean Remove all cached build artifacts and start from scratch"

View File

@@ -0,0 +1 @@
root=LABEL=__DISTRO__ rw rootwait console=ttyTitania0 console=tty0 mitigations=off idle=halt preempt=full

View File

@@ -0,0 +1,19 @@
#!/bin/bash
# Grows the root partition and filesystem to fill the disk.
# Runs once on first boot, then disables itself.
# If resize fails, the service stays enabled and retries next boot.
ROOT_DEV=$(findmnt -no SOURCE /) || { echo "Cannot find root device"; exit 1; }
DISK=$(lsblk -ndo PKNAME "$ROOT_DEV")
PART_NUM=$(cat /sys/class/block/$(basename "$ROOT_DEV")/partition 2>/dev/null)
if [ -z "$DISK" ] || [ -z "$PART_NUM" ]; then
echo "Cannot determine disk layout (DISK=$DISK PART_NUM=$PART_NUM)"
exit 1
fi
growpart "/dev/$DISK" "$PART_NUM" || true
partprobe "/dev/$DISK"
resize2fs "$ROOT_DEV"
systemctl disable grow-rootfs.service

View File

@@ -0,0 +1,10 @@
[Unit]
Description=Grow root filesystem to fill disk
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/grow-rootfs
[Install]
WantedBy=multi-user.target

246
distros/debian/image.yaml Normal file
View File

@@ -0,0 +1,246 @@
image:
name: ps5-debian
distribution: debian
release: bookworm
description: Debian 12 XFCE desktop for PS5
architecture: x86_64
source:
downloader: debootstrap
url: http://deb.debian.org/debian
variant: minbase
keyserver: keyserver.ubuntu.com
packages:
manager: apt
update: true
cleanup: true
repositories:
- name: sources.list
url: |-
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
architectures:
- amd64
sets:
- packages:
# XFCE desktop (proven on PS5 via the Kali image)
- task-xfce-desktop
- lightdm
- lightdm-gtk-greeter
- xserver-xorg
- xserver-xorg-video-amdgpu
- dbus-x11
- x11-xserver-utils
# Audio / media
- pipewire
- pipewire-pulse
- wireplumber
- pavucontrol
# GPU
- mesa-vulkan-drivers
- mesa-va-drivers
# Networking
- network-manager
- network-manager-gnome
- openssh-server
- iputils-ping
- iw
- wpasupplicant
- wireless-regdb
- rfkill
# Firmware + PS5 boot support
- firmware-linux
- firmware-linux-nonfree
- firmware-amd-graphics
- firmware-realtek
- firmware-atheros
- firmware-misc-nonfree
- initramfs-tools
- kexec-tools
- kmod
- busybox
- zstd
- systemd-zram-generator
# Apps
- firefox-esr
- thunar
- mousepad
- ristretto
- xfce4-terminal
- xfce4-screenshooter
- file-roller
- synaptic
- gnome-disk-utility
- htop
# Base utilities
- sudo
- cloud-guest-utils
- parted
- e2fsprogs
- usbutils
- pciutils
- util-linux
- curl
- wget
- git
- ca-certificates
- vim
- nano
- tmux
- ethtool
# Build tools (for WiFi module — prebuilt, but keep headers usable)
- build-essential
- bc
- bison
- flex
- libssl-dev
- libelf-dev
# Fonts
- fonts-dejavu
- fonts-liberation2
- fonts-noto
- fontconfig
action: install
files:
- path: /etc/hostname
generator: hostname
- path: /etc/hosts
generator: hosts
- path: /etc/machine-id
generator: dump
- 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
echo 'Acquire::Retries "10";' > /etc/apt/apt.conf.d/80retry
apt-get update
- trigger: post-update
action: |-
#!/bin/bash
set -eux
passwd -l root
- trigger: post-packages
action: |-
#!/bin/bash
set -eux
export DEBIAN_FRONTEND=noninteractive
# Default user (ps5/ps5)
useradd -m -G sudo,video,input,render -s /bin/bash ps5
echo "ps5:ps5" | chpasswd
printf 'ps5\n' > /etc/hostname
if grep -q '^127\.0\.1\.1' /etc/hosts; then
sed -i 's/^127\.0\.1\.1.*/127.0.1.1 ps5/' /etc/hosts
else
printf '127.0.1.1 ps5\n' >> /etc/hosts
fi
# LightDM autologin into XFCE
mkdir -p /etc/lightdm/lightdm.conf.d
cat > /etc/lightdm/lightdm.conf.d/50-ps5-autologin.conf <<'EOF'
[Seat:*]
autologin-user=ps5
autologin-user-timeout=0
user-session=xfce
EOF
# SSH off by default (public default credentials)
sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config
systemctl disable ssh.service || true
systemctl disable ssh.socket || true
systemctl set-default graphical.target
systemctl enable NetworkManager
systemctl enable lightdm
ln -sf /usr/share/zoneinfo/Etc/UTC /etc/localtime
printf 'Etc/UTC\n' > /etc/timezone
# zram swap
printf '[zram0]\nzram-size = ram / 2\ncompression-algorithm = zstd\n' > /etc/systemd/zram-generator.conf
# Disable screen blanking for demos
install -d -m 0755 /home/ps5/.config/autostart
cat > /home/ps5/.config/autostart/ps5-display.desktop <<'EOF'
[Desktop Entry]
Type=Application
Name=PS5 Display Defaults
Exec=sh -c 'xset s off -dpms; xset s noblank'
X-GNOME-Autostart-enabled=true
EOF
chown -R ps5:ps5 /home/ps5
- trigger: post-files
action: |-
#!/bin/bash
set -eux
systemctl enable grow-rootfs.service
mkdir -p /boot/efi
mkdir -p /etc/initramfs-tools/conf.d
printf 'RESUME=none\n' > /etc/initramfs-tools/conf.d/resume
# Install the PS5-patched kernel
dpkg -i /opt/debs/*.deb
rm -rf /opt/debs
apt-mark hold linux-ps5 || true
KVER=$(ls -1t /lib/modules | head -1)
depmod -a "$KVER"
# NOTE: PS5 WiFi (IW620) is not built here. The linux-ps5 headers ship
# host tools prebuilt on Ubuntu (needs glibc 2.38+) which Debian 12's
# glibc 2.36 can't run. WiFi modules will be added as prebuilt artifacts
# in a future update. Use ethernet or a USB WiFi dongle for now.
# Front-load amdgpu for PS5 display
grep -qxF amdgpu /etc/initramfs-tools/modules || printf '\namdgpu\n' >> /etc/initramfs-tools/modules
printf 'MODULES=most\nBUSYBOX=y\n' > /etc/initramfs-tools/conf.d/ps5-amdgpu
update-initramfs -c -k "$KVER"
/etc/kernel/postinst.d/zz-update-boot "$KVER"
mappings:
architecture_map: debian

View File

@@ -50,6 +50,11 @@ EOF
cp /repo/distros/${DISTRO}/proxmox-release-bookworm.gpg "$STAGING/"
cp /kernel-debs/*.deb "$STAGING/debs/"
;;
debian)
cp /repo/distros/${DISTRO}/grow-rootfs "$STAGING/"
cp /repo/distros/${DISTRO}/grow-rootfs.service "$STAGING/"
cp /kernel-debs/*.deb "$STAGING/debs/"
;;
fedora)
cp /repo/distros/${DISTRO}/grow-rootfs "$STAGING/"
cp /repo/distros/${DISTRO}/grow-rootfs.service "$STAGING/"