mirror of
https://github.com/ps5-linux/ps5-linux-image.git
synced 2026-07-15 21:42:27 +00:00
Remove kali since it's too big.
This commit is contained in:
85
README.md
85
README.md
@@ -1,13 +1,11 @@
|
||||
# PS5 Linux Image Builder
|
||||
|
||||
Builds bootable Linux USB images for PlayStation 5 using Docker containers. Supports Ubuntu 26.04, Arch, CachyOS (Gamescope + Steam), Fedora (GNOME), and full Kali Linux, 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), Fedora (GNOME), individually or as a multi-distro image with kexec switching.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Docker (with permission to run `--privileged` containers) — install as per your distro's instructions
|
||||
- ~30GB free disk space for Ubuntu, Arch, or CachyOS; a full Kali build needs
|
||||
substantial working space because it creates a 96GB image and a full rootfs
|
||||
tree (`~150GB` free recommended for a clean Kali build)
|
||||
- ~30GB free disk space for Ubuntu, Arch, or CachyOS
|
||||
|
||||
Once Docker is installed, add your user to the docker group and apply it without logging out:
|
||||
|
||||
@@ -29,9 +27,6 @@ OR
|
||||
|
||||
OR
|
||||
|
||||
# Build Kali Linux (XFCE + kali-linux-everything)
|
||||
./build_image.sh --distro kali
|
||||
|
||||
OR
|
||||
|
||||
# Build Fedora (GNOME desktop)
|
||||
@@ -51,81 +46,13 @@ The script auto-clones the kernel source, applies PS5 patches, compiles, and bui
|
||||
sudo dd if=output/ps5-ubuntu2604.img of=/dev/sdX bs=4M status=progress
|
||||
```
|
||||
|
||||
## Kali First Boot Time Sync
|
||||
|
||||
The Kali image uses UTC by default and enables `ntpsec`. PS5 hardware may boot
|
||||
Linux without a correct real-time clock, so the displayed time can be wrong
|
||||
until a network connection is available. The Kali recipe configures IPv4 NTP
|
||||
sources that were validated through Android USB tethering, because that
|
||||
connection may not provide usable IPv6 routing.
|
||||
|
||||
The Xfce clock's **Time and Date** window is the legacy `time-admin` utility.
|
||||
On Kali it can report that NTP support is not installed even though `ntpsec`
|
||||
is installed and active. Verify or repair synchronization from a terminal:
|
||||
|
||||
```bash
|
||||
systemctl --no-pager status ntpsec
|
||||
ntpq -pn
|
||||
timedatectl status
|
||||
```
|
||||
|
||||
If the PS5 clock is still wrong after the internet connection is active, force
|
||||
one initial correction and restart continuous synchronization:
|
||||
|
||||
```bash
|
||||
sudo systemctl stop ntpsec
|
||||
sudo ntpd -gq -c /etc/ntpsec/ntp.conf
|
||||
sudo systemctl start ntpsec
|
||||
date
|
||||
```
|
||||
|
||||
To use a local timezone after boot, for example Kentucky:
|
||||
|
||||
```bash
|
||||
sudo timedatectl set-timezone America/Kentucky/Louisville
|
||||
timedatectl status
|
||||
```
|
||||
|
||||
## Kali Internal WiFi
|
||||
|
||||
The Kali image builds and installs the PS5 IW620 `mwifiex` modules for the
|
||||
PS5-patched kernel. On boot, `ps5-iw620.service` copies the console-specific
|
||||
firmware dumped by `ps5-linux-loader` from `/boot/efi/lib/nxp/` into
|
||||
`/lib/firmware/nxp/`, loads the driver, and enables WiFi radio. If the firmware
|
||||
payload is present, NetworkManager should expose the internal interface as
|
||||
`mlan0` and the Xfce network applet can be used to scan and connect.
|
||||
|
||||
The Kali desktop autologin is enabled for local first boot. SSH is installed
|
||||
but disabled by default because the initial local account is `kali` with
|
||||
password `kali`. Before enabling remote access, change that password:
|
||||
|
||||
```bash
|
||||
passwd
|
||||
sudo systemctl enable --now ssh
|
||||
```
|
||||
|
||||
The image holds its installed kernel packages and protects the boot-copy hook
|
||||
from deploying a generic Kali kernel. Do not replace or unhold the PS5 kernel
|
||||
unless you are intentionally testing a new PS5-patched kernel build.
|
||||
|
||||
Ghidra is configured to use JDK 21, its documented supported runtime. Full
|
||||
Kali installations may also contain newer Java versions for other software.
|
||||
|
||||
`kali-linux-everything` installs NFS client components, but the PS5-patched
|
||||
kernel has NFS disabled. A failed `run-rpc_pipefs.mount` unit can therefore be
|
||||
reported at boot; it only indicates that NFS mounts are unavailable. The Kali
|
||||
desktop and security tools are unaffected.
|
||||
|
||||
The full Kali toolset also enables `chkrootkit.timer`; its daily integrity scan
|
||||
can use noticeable CPU time while it runs.
|
||||
|
||||
## Options
|
||||
|
||||
| Flag | Description | Default |
|
||||
|------|-------------|---------|
|
||||
| `--distro` | `ubuntu2604`, `arch`, `cachyos`, `kali`, `fedora`, or `all` | `ubuntu2604` |
|
||||
| `--distro` | `ubuntu2604`, `arch`, `cachyos`, `fedora`, or `all` | `ubuntu2604` |
|
||||
| `--kernel` | Path to kernel source directory | auto-clone version selected by PS5 patch set |
|
||||
| `--img-size` | Disk image size in MB | `12000` (`32000` for `all`, `98304` for `kali`) |
|
||||
| `--img-size` | Disk image size in MB | `12000` (`32000` for `all`) |
|
||||
| `--clean` | Remove all cached build artifacts and start fresh | off |
|
||||
| `--kernel-only` | Build and package the kernel only, then exit | off |
|
||||
| `--patches-ref` | Branch, tag, or commit SHA for patches | `v1.2` |
|
||||
@@ -171,7 +98,6 @@ All verbose output goes to `build.log`. The terminal shows a spinner with live p
|
||||
| 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 |
|
||||
| Kali Linux Rolling | XFCE + `kali-linux-everything` | `.deb` | systemd |
|
||||
|
||||
## Multi-distro Image
|
||||
|
||||
@@ -209,7 +135,7 @@ sudo dpkg -i linux-bin/linux-ps5_*.deb
|
||||
build_image.sh # Image builder (also supports --kernel-only)
|
||||
docker/
|
||||
kernel-builder/ # Kernel compilation container
|
||||
kernel-builder-arch/ # Repackages .deb kernel as .pkg.tar.zst
|
||||
kernel-builder-arch/ # Repackages .deb kernel as .pkg.tar.zst
|
||||
image-builder/
|
||||
Dockerfile # Image building container (distrobuilder)
|
||||
entrypoint.sh # Single-distro build logic
|
||||
@@ -218,7 +144,6 @@ distros/
|
||||
ubuntu2604/ # Ubuntu 26.04 (Resolute)
|
||||
arch/ # Arch Linux
|
||||
cachyos/ # CachyOS repos + Gamescope/Steam
|
||||
kali/ # Kali Linux Rolling
|
||||
shared/ # Kernel postinst hooks (single + multi)
|
||||
boot/
|
||||
cmdline.txt # Kernel cmdline template (__DISTRO__ placeholder)
|
||||
|
||||
@@ -17,9 +17,9 @@ 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, debian, all (default: ubuntu2604)"
|
||||
echo " --distro Distribution to build: ubuntu2604, arch, cachyos, 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 " --img-size Disk image size in MB (default: 12000, 32000 for --distro all)"
|
||||
echo " --clean Remove all cached build artifacts and start from scratch"
|
||||
echo " --clean-only Remove all cached build artifacts and exit"
|
||||
echo " --kernel-only Build and package the kernel only, then exit"
|
||||
@@ -64,9 +64,6 @@ DOCKER_NAME="ps5-build-$$"
|
||||
if [ "$DISTRO" = "all" ] && [ "$IMG_SIZE" = "12000" ]; then
|
||||
IMG_SIZE=32000
|
||||
fi
|
||||
if [ "$DISTRO" = "kali" ] && [ "$IMG_SIZE" = "12000" ]; then
|
||||
IMG_SIZE=98304
|
||||
fi
|
||||
|
||||
if [ -z "$FORMAT" ]; then
|
||||
case "$DISTRO" in arch|cachyos) FORMAT="arch" ;; fedora) FORMAT="rpm" ;; all) FORMAT="all" ;; *) FORMAT="deb" ;; esac
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
root=LABEL=__DISTRO__ rw rootwait console=ttyTitania0 console=tty0 mitigations=off idle=halt preempt=full
|
||||
@@ -1,19 +0,0 @@
|
||||
#!/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
|
||||
@@ -1,10 +0,0 @@
|
||||
[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
|
||||
@@ -1,388 +0,0 @@
|
||||
image:
|
||||
name: ps5-kali
|
||||
distribution: debian
|
||||
# Release images use Kali's last snapshot for stable, repeatable builds.
|
||||
release: kali-last-snapshot
|
||||
description: Kali Linux XFCE desktop
|
||||
architecture: x86_64
|
||||
|
||||
source:
|
||||
downloader: debootstrap
|
||||
url: https://kali.download/kali
|
||||
variant: minbase
|
||||
keyserver: keyserver.ubuntu.com
|
||||
keys:
|
||||
- 0x827C8569F2518CC677FECA1AED65462EC8D5E4C5
|
||||
|
||||
packages:
|
||||
manager: apt
|
||||
update: true
|
||||
cleanup: true
|
||||
|
||||
repositories:
|
||||
- name: sources.list
|
||||
url: |-
|
||||
deb https://kali.download/kali kali-last-snapshot main contrib non-free non-free-firmware
|
||||
architectures:
|
||||
- amd64
|
||||
|
||||
sets:
|
||||
- packages:
|
||||
# Full Kali desktop and toolset
|
||||
- kali-desktop-xfce
|
||||
- kali-linux-everything
|
||||
- kali-defaults
|
||||
- kali-defaults-desktop
|
||||
- kali-themes
|
||||
- kali-wallpapers-2026
|
||||
- kali-wallpapers-all
|
||||
- kali-menu
|
||||
- kali-tweaks
|
||||
- kali-undercover
|
||||
|
||||
# Display / GPU / audio
|
||||
- lightdm
|
||||
- lightdm-gtk-greeter
|
||||
- xserver-xorg
|
||||
- xserver-xorg-video-amdgpu
|
||||
- dbus-x11
|
||||
- x11-xserver-utils
|
||||
- mesa-vulkan-drivers
|
||||
- pipewire
|
||||
- pipewire-pulse
|
||||
- wireplumber
|
||||
- pavucontrol
|
||||
|
||||
# Networking and remote access
|
||||
- network-manager
|
||||
- network-manager-gnome
|
||||
- openssh-server
|
||||
- iputils-ping
|
||||
- ntpsec
|
||||
- iw
|
||||
- wpasupplicant
|
||||
- wireless-regdb
|
||||
|
||||
# Firmware and PS5 boot support
|
||||
- firmware-linux
|
||||
- firmware-linux-nonfree
|
||||
- firmware-amd-graphics
|
||||
- firmware-realtek
|
||||
- firmware-atheros
|
||||
- firmware-mediatek
|
||||
- firmware-misc-nonfree
|
||||
- initramfs-tools
|
||||
- kexec-tools
|
||||
- kmod
|
||||
- busybox
|
||||
- zstd
|
||||
- systemd-zram-generator
|
||||
|
||||
# Base system utilities
|
||||
- sudo
|
||||
- cloud-guest-utils
|
||||
- parted
|
||||
- e2fsprogs
|
||||
- usbutils
|
||||
- pciutils
|
||||
- rfkill
|
||||
- util-linux
|
||||
- curl
|
||||
- wget
|
||||
- git
|
||||
- ca-certificates
|
||||
- build-essential
|
||||
- bc
|
||||
- bison
|
||||
- flex
|
||||
- libssl-dev
|
||||
- libelf-dev
|
||||
- vim
|
||||
- nano
|
||||
- tmux
|
||||
- firefox-esr
|
||||
# Ghidra 12.1 requires JDK 21. The full Kali set also installs newer JDKs.
|
||||
- openjdk-21-jdk
|
||||
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: /etc/apt/trusted.gpg.d/kali-archive-keyring.asc
|
||||
generator: copy
|
||||
source: /tmp/build-staging/kali-archive-keyring.asc
|
||||
|
||||
- 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
|
||||
rm -f /var/lib/apt/lists/*InRelease /var/lib/apt/lists/*Release /var/lib/apt/lists/*Packages* || true
|
||||
echo 'Acquire::Retries "10";' > /etc/apt/apt.conf.d/80retry
|
||||
cat > /etc/apt/trusted.gpg.d/kali-archive-keyring.asc <<'EOF'
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQINBGgBJJUBEADlMTZVDCjrSXIAuYfL3VZt8OoplUdw3mSPlhIjZQmIo2sdzvAF
|
||||
EMSCQ+vWeD4VqV9tBtiVx6j8VSfyW18YHHAkvajWDRg5hPLf80wGxrtXYu+vj3Ri
|
||||
5dOMhrl9fHKIifPOoV3pFTtOk0dB9lkcmtNzjWgwOJduLbjjraE1BBKqc0uaXDCa
|
||||
RJnPYkQuJQcZxmZVFAo9NP7KSAL1zMvutAd0R3WeMaWpT22nGa3rJj4kj25zV6Kn
|
||||
qGnv5kQaY2cTlQHnp6EbiLe5sCE7zIOp5CjwIJhyCyn4zT8KqGB8Sw8PEi9mYlSY
|
||||
wbGzzfAAbBk7Y8xbmvRrkrHzU74jH0iMK566QVu2yl3Dz0hrlliV6vGn2ZWu7qmh
|
||||
lwXSb+q4u46tDbFjdUjYJG2upx5vOm5SewD9snLB4YN2e2qDeQgY16AfpkJa51+u
|
||||
PwTeDCbfuQu3irLWcGRZgpOBgsxqCtpZBmF6ED7L8tntoyjZ9WeB8FnTcv7hx5J1
|
||||
IPCO4K5TvW0SX6ZKp1Jusbkn5hrrFTjOJHhIDVdioM/wYDKkqJ9e25oGAqPkJYRY
|
||||
euonU1teK+EOLM7ZIbalhukrw0bgYl9UJRxQMLEhZzoiiCLLiv3oWHAQGFclP+1E
|
||||
zXgbLBviFAU4+DMXfhA6vy8BmS9oTpleS1p3/EOwf2rX/yt4qF7IW9ZXuQARAQAB
|
||||
tEBLYWxpIExpbnV4IEFyY2hpdmUgQXV0b21hdGljIFNpZ25pbmcgS2V5ICgyMDI1
|
||||
KSA8ZGV2ZWxAa2FsaS5vcmc+iQJUBBMBCgA+FiEEgnyFafJRjMZ3/soa7WVGLsjV
|
||||
5MUFAmgF7tkCGwMFCQWkfeUFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ7WVG
|
||||
LsjV5MXcjw//XeI6OXY7VcH+hXRcT7W49AwqRfmSaSEWs474G2DQR9UppzvkFCab
|
||||
uiWl5jrlkeGbVFsiBruJfIlCdYMMnPk8gEm/SEhVRqcZVOjYCWcMlSVB6oU+6tgW
|
||||
jKPPRDELiq7mTl8S4sEdvUxpsWoMqEQZ1+CsJsw+p+TARGNIrUUdL9hTOoOUpvue
|
||||
nKNEEfzbKvLk2gj2tKOgr1HcDmVbbmRsL87+UYq1JvA0OzJ0KrhBdTZHJWchAJwa
|
||||
p+UUog2XrzvXYXWBPfQLsNVkFirmVd1B5vonj3OeNlVU51YriRQ4P4onLrwlfha8
|
||||
vUGeNJw/ihXTQFpvmF7fFSRa7Pr5YfWkDZ4BGuEB+kSycu2PMWCXXHdY++cMIlRf
|
||||
uUg/wvzcwAkS99DJ0EAiOun0oypE5+r5HwfaI9IrJlgZMPlFctyBIGVg2DFZCdLH
|
||||
VHG1Voq/CU2tgWvWyuHXHVlUiZiWJoj7BbVa88Gj+VyvB/md1xBh0ScmfH4uGgnX
|
||||
hpLFPIVuR1SJYarovVmtFhAjbqbrAA4Q9utpOeOOVDMD5tuq856/lLh+SWPkRsUy
|
||||
ZJTwz1Nh0rJ/UJOMSo4ljkkr53iR/IM4woAAaP+0hkZoIDSbVVW5Im1Yj461exl4
|
||||
0ltMBMym2KZk/IFOTloSfW7hMmGlqaLfQEH1ryHefIIpkgKJa6WgVxA=
|
||||
=f+tz
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
EOF
|
||||
apt-get update
|
||||
|
||||
- trigger: post-update
|
||||
action: |-
|
||||
#!/bin/bash
|
||||
set -eux
|
||||
passwd -l root
|
||||
|
||||
- trigger: post-packages
|
||||
action: |-
|
||||
#!/bin/bash
|
||||
set -eux
|
||||
|
||||
# Default user (kali/kali)
|
||||
useradd -m -G sudo -s /bin/bash kali
|
||||
echo "kali:kali" | chpasswd
|
||||
|
||||
# The image is assembled inside Docker, where the generated hostname is
|
||||
# otherwise the temporary container ID. Use a stable PS5 hostname.
|
||||
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
|
||||
|
||||
# Ghidra 12.1 requires JDK 21, while Kali Rolling may select a newer Java
|
||||
# as the system default. Keep its desktop launcher on the supported JDK.
|
||||
test -x /usr/lib/jvm/java-21-openjdk-amd64/bin/java
|
||||
sed -i 's|^JAVA_HOME_OVERRIDE=.*|JAVA_HOME_OVERRIDE=/usr/lib/jvm/java-21-openjdk-amd64|' /usr/share/ghidra/support/launch.properties
|
||||
|
||||
# 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=kali
|
||||
autologin-user-timeout=0
|
||||
user-session=xfce
|
||||
EOF
|
||||
|
||||
# SSH is installed for opt-in remote access. Keep it disabled while the
|
||||
# distributed image still has public default local credentials.
|
||||
sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
|
||||
sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config
|
||||
|
||||
systemctl set-default graphical.target
|
||||
systemctl disable ssh.service || true
|
||||
systemctl disable ssh.socket || true
|
||||
systemctl enable NetworkManager
|
||||
systemctl enable lightdm
|
||||
|
||||
# PS5 systems may boot without a useful hardware clock. Keep the shared
|
||||
# image timezone-neutral and synchronize after a network connection exists.
|
||||
ln -sf /usr/share/zoneinfo/Etc/UTC /etc/localtime
|
||||
printf 'Etc/UTC\n' > /etc/timezone
|
||||
# Android USB tethering may provide IPv4 only. The default pool returned
|
||||
# one unreachable IPv4 peer in PS5 testing; these independent IPv4 peers
|
||||
# responded and preserve multi-source time validation.
|
||||
sed -i '/^pool [0-3]\.debian\.pool\.ntp\.org /s/^/# PS5 replaced: /' /etc/ntpsec/ntp.conf
|
||||
cat >> /etc/ntpsec/ntp.conf <<'EOF'
|
||||
|
||||
# PS5 USB-tether-friendly IPv4 time sources
|
||||
server -4 time.cloudflare.com iburst
|
||||
server -4 time.google.com iburst
|
||||
server -4 time.apple.com iburst
|
||||
server -4 time.windows.com iburst
|
||||
EOF
|
||||
systemctl enable ntpsec.service
|
||||
|
||||
# zram swap: half of RAM, zstd compressed
|
||||
printf '[zram0]\nzram-size = ram / 2\ncompression-algorithm = zstd\n' > /etc/systemd/zram-generator.conf
|
||||
|
||||
# Avoid PS5 display sleep/blanking during first boot demos.
|
||||
install -d -m 0755 /home/kali/.config/autostart
|
||||
cat > /home/kali/.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 kali:kali /home/kali
|
||||
|
||||
- trigger: post-files
|
||||
action: |-
|
||||
#!/bin/bash
|
||||
set -eux
|
||||
systemctl enable grow-rootfs.service
|
||||
mkdir -p /boot/efi
|
||||
|
||||
# This USB image uses zram, not a disk-backed hibernation device. Avoid
|
||||
# embedding a temporary build-container device as a resume target.
|
||||
mkdir -p /etc/initramfs-tools/conf.d
|
||||
printf 'RESUME=none\n' > /etc/initramfs-tools/conf.d/resume
|
||||
|
||||
dpkg -i /opt/debs/*.deb
|
||||
rm -rf /opt/debs
|
||||
# kali-linux-everything installs a generic Kali kernel. Keep updates from
|
||||
# replacing the PS5-patched kernel used by the loader.
|
||||
dpkg-query -W -f='${binary:Package} ${db:Status-Status}\n' 'linux-image-*' 2>/dev/null \
|
||||
| awk '$2 == "installed" { print $1 }' \
|
||||
| xargs -r apt-mark hold
|
||||
apt-mark hold linux-ps5 || true
|
||||
|
||||
KVER=$(ls -1t /lib/modules | head -1)
|
||||
depmod -a "$KVER"
|
||||
|
||||
# PS5 internal WiFi uses the Marvell/NXP IW620 at PCI ID 1b4b:2b56. Build
|
||||
# the PS5-patched NXP mwifiex module for the installed PS5 kernel. Firmware
|
||||
# is console-provided by ps5-linux-loader on the boot partition, so a boot
|
||||
# service copies it into /lib/firmware before loading the module.
|
||||
IW620_SRC=/tmp/ps5-iw620-mwifiex
|
||||
IW620_PATCHES=/tmp/ps5-linux-mwifiex
|
||||
IW620_NXP_REF=a5fe4e194bf99315e349d81d77d6dfacec70757a
|
||||
IW620_PATCH_REF=5cfd063449f27e2f8a7d17c814a3bb21c27aa903
|
||||
rm -rf "$IW620_SRC" "$IW620_PATCHES"
|
||||
git clone https://github.com/nxp-imx/mwifiex.git "$IW620_SRC"
|
||||
git -C "$IW620_SRC" checkout "$IW620_NXP_REF"
|
||||
git clone https://github.com/ps5-linux/ps5-linux-mwifiex.git "$IW620_PATCHES"
|
||||
git -C "$IW620_PATCHES" checkout "$IW620_PATCH_REF"
|
||||
git -C "$IW620_SRC" apply "$IW620_PATCHES/ps5-iw620.patch"
|
||||
make -C "$IW620_SRC" CONFIG_OBJTOOL= KERNELDIR="/lib/modules/$KVER/build" ARCH=x86 -j"$(nproc)"
|
||||
test -f "$IW620_SRC/mlan.ko"
|
||||
test -f "$IW620_SRC/moal.ko"
|
||||
install -d "/lib/modules/$KVER/extra/ps5-iw620"
|
||||
install -m 0644 "$IW620_SRC/mlan.ko" "/lib/modules/$KVER/extra/ps5-iw620/mlan.ko"
|
||||
install -m 0644 "$IW620_SRC/moal.ko" "/lib/modules/$KVER/extra/ps5-iw620/moal.ko"
|
||||
install -d /etc/modprobe.d /usr/local/sbin /etc/systemd/system /usr/share/doc/ps5-iw620
|
||||
cat > /etc/modprobe.d/ps5-iw620.conf <<'EOF'
|
||||
# PS5 IW620 mwifiex
|
||||
# Prevent udev from auto-loading moal before the loader-provided firmware is
|
||||
# copied from the boot partition. ps5-iw620.service loads it explicitly.
|
||||
blacklist moal
|
||||
blacklist mlan
|
||||
softdep moal pre: cfg80211 mlan
|
||||
options moal fw_name=nxp/pcieuartiw620_combo_v1.bin pcie_int_mode=1 drv_mode=1 cfg80211_wext=4 sta_name=mlan ext_scan=0 auto_fw_reload=0 wifi_reset_config=0 sched_scan=0 ps_mode=2 auto_ds=2 amsdu_disable=1
|
||||
EOF
|
||||
cat > /usr/local/sbin/ps5-iw620-load <<'EOF'
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
FW_NAME=nxp/pcieuartiw620_combo_v1.bin
|
||||
FW_DST=/lib/firmware/$FW_NAME
|
||||
FW_SRC=
|
||||
|
||||
for candidate in "/boot/efi/lib/$FW_NAME" "/boot/lib/$FW_NAME" "$FW_DST"; do
|
||||
if [ -f "$candidate" ]; then
|
||||
FW_SRC="$candidate"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$FW_SRC" ]; then
|
||||
FW_SRC="$(find /boot /boot/efi -path "*/$FW_NAME" -type f 2>/dev/null | head -n 1)"
|
||||
fi
|
||||
|
||||
if [ -n "$FW_SRC" ] && [ -f "$FW_SRC" ]; then
|
||||
install -D -m 0644 "$FW_SRC" "$FW_DST"
|
||||
fi
|
||||
|
||||
if [ ! -f "$FW_DST" ]; then
|
||||
echo "PS5 IW620 firmware not found on the boot partition; skipping WiFi load"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# If udev raced us and loaded the module before firmware was copied, reload
|
||||
# it so firmware init can succeed.
|
||||
modprobe -r moal mlan 2>/dev/null || true
|
||||
modprobe cfg80211 || true
|
||||
modprobe moal
|
||||
rfkill unblock all 2>/dev/null || true
|
||||
nmcli radio wifi on 2>/dev/null || true
|
||||
EOF
|
||||
chmod 0755 /usr/local/sbin/ps5-iw620-load
|
||||
cat > /etc/systemd/system/ps5-iw620.service <<'EOF'
|
||||
[Unit]
|
||||
Description=Load PS5 IW620 internal WiFi
|
||||
RequiresMountsFor=/boot/efi
|
||||
Wants=systemd-udev-settle.service
|
||||
After=local-fs.target boot-efi.mount systemd-udev-settle.service
|
||||
Before=NetworkManager.service network-pre.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/local/sbin/ps5-iw620-load
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
cat > /usr/share/doc/ps5-iw620/BUILDINFO <<EOF
|
||||
NXP mwifiex ref: $IW620_NXP_REF
|
||||
ps5-linux-mwifiex ref: $IW620_PATCH_REF
|
||||
Kernel: $KVER
|
||||
Module options: fw_name=nxp/pcieuartiw620_combo_v1.bin pcie_int_mode=1 drv_mode=1 cfg80211_wext=4 sta_name=mlan ext_scan=0 auto_fw_reload=0 wifi_reset_config=0 sched_scan=0 ps_mode=2 auto_ds=2 amsdu_disable=1
|
||||
EOF
|
||||
depmod -a "$KVER"
|
||||
systemctl enable ps5-iw620.service
|
||||
rm -rf "$IW620_SRC" "$IW620_PATCHES"
|
||||
|
||||
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
|
||||
@@ -1,29 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQINBGgBJJUBEADlMTZVDCjrSXIAuYfL3VZt8OoplUdw3mSPlhIjZQmIo2sdzvAF
|
||||
EMSCQ+vWeD4VqV9tBtiVx6j8VSfyW18YHHAkvajWDRg5hPLf80wGxrtXYu+vj3Ri
|
||||
5dOMhrl9fHKIifPOoV3pFTtOk0dB9lkcmtNzjWgwOJduLbjjraE1BBKqc0uaXDCa
|
||||
RJnPYkQuJQcZxmZVFAo9NP7KSAL1zMvutAd0R3WeMaWpT22nGa3rJj4kj25zV6Kn
|
||||
qGnv5kQaY2cTlQHnp6EbiLe5sCE7zIOp5CjwIJhyCyn4zT8KqGB8Sw8PEi9mYlSY
|
||||
wbGzzfAAbBk7Y8xbmvRrkrHzU74jH0iMK566QVu2yl3Dz0hrlliV6vGn2ZWu7qmh
|
||||
lwXSb+q4u46tDbFjdUjYJG2upx5vOm5SewD9snLB4YN2e2qDeQgY16AfpkJa51+u
|
||||
PwTeDCbfuQu3irLWcGRZgpOBgsxqCtpZBmF6ED7L8tntoyjZ9WeB8FnTcv7hx5J1
|
||||
IPCO4K5TvW0SX6ZKp1Jusbkn5hrrFTjOJHhIDVdioM/wYDKkqJ9e25oGAqPkJYRY
|
||||
euonU1teK+EOLM7ZIbalhukrw0bgYl9UJRxQMLEhZzoiiCLLiv3oWHAQGFclP+1E
|
||||
zXgbLBviFAU4+DMXfhA6vy8BmS9oTpleS1p3/EOwf2rX/yt4qF7IW9ZXuQARAQAB
|
||||
tEBLYWxpIExpbnV4IEFyY2hpdmUgQXV0b21hdGljIFNpZ25pbmcgS2V5ICgyMDI1
|
||||
KSA8ZGV2ZWxAa2FsaS5vcmc+iQJUBBMBCgA+FiEEgnyFafJRjMZ3/soa7WVGLsjV
|
||||
5MUFAmgF7tkCGwMFCQWkfeUFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ7WVG
|
||||
LsjV5MXcjw//XeI6OXY7VcH+hXRcT7W49AwqRfmSaSEWs474G2DQR9UppzvkFCab
|
||||
uiWl5jrlkeGbVFsiBruJfIlCdYMMnPk8gEm/SEhVRqcZVOjYCWcMlSVB6oU+6tgW
|
||||
jKPPRDELiq7mTl8S4sEdvUxpsWoMqEQZ1+CsJsw+p+TARGNIrUUdL9hTOoOUpvue
|
||||
nKNEEfzbKvLk2gj2tKOgr1HcDmVbbmRsL87+UYq1JvA0OzJ0KrhBdTZHJWchAJwa
|
||||
p+UUog2XrzvXYXWBPfQLsNVkFirmVd1B5vonj3OeNlVU51YriRQ4P4onLrwlfha8
|
||||
vUGeNJw/ihXTQFpvmF7fFSRa7Pr5YfWkDZ4BGuEB+kSycu2PMWCXXHdY++cMIlRf
|
||||
uUg/wvzcwAkS99DJ0EAiOun0oypE5+r5HwfaI9IrJlgZMPlFctyBIGVg2DFZCdLH
|
||||
VHG1Voq/CU2tgWvWyuHXHVlUiZiWJoj7BbVa88Gj+VyvB/md1xBh0ScmfH4uGgnX
|
||||
hpLFPIVuR1SJYarovVmtFhAjbqbrAA4Q9utpOeOOVDMD5tuq856/lLh+SWPkRsUy
|
||||
ZJTwz1Nh0rJ/UJOMSo4ljkkr53iR/IM4woAAaP+0hkZoIDSbVVW5Im1Yj461exl4
|
||||
0ltMBMym2KZk/IFOTloSfW7hMmGlqaLfQEH1ryHefIIpkgKJa6WgVxA=
|
||||
=f+tz
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -10,10 +10,6 @@ EFI_LABEL="boot"
|
||||
CHROOT="/build/chroot"
|
||||
IMG="/output/ps5-${DISTRO}.img"
|
||||
|
||||
if [ "$DISTRO" = "kali" ]; then
|
||||
ROOT_LABEL="kali-root"
|
||||
fi
|
||||
|
||||
if [ "$SKIP_CHROOT" = "true" ] && [ -d "$CHROOT/bin" ]; then
|
||||
echo "=== Reusing cached $DISTRO rootfs ==="
|
||||
else
|
||||
@@ -38,12 +34,6 @@ EOF
|
||||
cp /repo/distros/${DISTRO}/grow-rootfs.service "$STAGING/"
|
||||
cp /kernel-debs/*.deb "$STAGING/debs/"
|
||||
;;
|
||||
kali)
|
||||
cp /repo/distros/${DISTRO}/grow-rootfs "$STAGING/"
|
||||
cp /repo/distros/${DISTRO}/grow-rootfs.service "$STAGING/"
|
||||
cp /repo/distros/${DISTRO}/kali-archive-keyring.asc "$STAGING/"
|
||||
cp /kernel-debs/*.deb "$STAGING/debs/"
|
||||
;;
|
||||
proxmox)
|
||||
cp /repo/distros/${DISTRO}/grow-rootfs "$STAGING/"
|
||||
cp /repo/distros/${DISTRO}/grow-rootfs.service "$STAGING/"
|
||||
|
||||
Reference in New Issue
Block a user