Add dual-path ISO build scripts (Arch + Debian) with README

- iso/build.sh: Debian/Ubuntu host builder using debootstrap + xorriso
  Bootstraps Debian bookworm, compiles OrionOS in chroot, produces
  bootable hybrid ISO with GRUB (BIOS + EFI), auto-login root on tty1
- iso/build-arch.sh: Arch Linux host builder using mkarchiso
  Compiles OrionOS, installs into archiso profile, runs mkarchiso
- iso/README.md: instructions for all three paths (Docker/Debian/Arch)
  including dd and Ventoy USB flashing
- Makefile: iso target auto-detects available tool (docker/debootstrap/mkarchiso)
This commit is contained in:
Claude committed 2026-08-30 20:57:40 +00:00
1 parent 454f925891
commit 6b1d705d4f
4 files changed
+272 -4

No files matched your search

+15 -4
View File
@@ -102,7 +102,18 @@ install: all
@echo " exec orionwm" @echo " exec orionwm"
iso: iso:
@echo "Building OrionOS ISO via Docker..." @if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then \
docker build -t orionos-iso-builder -f iso/docker/Dockerfile . echo "Building OrionOS ISO via Docker (Arch)..."; \
mkdir -p iso/output docker build -t orionos-iso-builder -f iso/docker/Dockerfile .; \
docker run --rm --privileged -v "$(PWD)/iso/output:/output" orionos-iso-builder mkdir -p iso/output; \
docker run --rm --privileged -v "$$(pwd)/iso/output:/output" orionos-iso-builder; \
elif command -v debootstrap >/dev/null 2>&1; then \
echo "Building OrionOS ISO via debootstrap (Debian/Ubuntu)..."; \
sudo bash iso/build.sh; \
elif command -v mkarchiso >/dev/null 2>&1; then \
echo "Building OrionOS ISO via mkarchiso (Arch native)..."; \
sudo bash iso/build-arch.sh; \
else \
echo "No ISO build tool found. See iso/README.md for options."; \
exit 1; \
fi
+51
View File
@@ -0,0 +1,51 @@
# OrionOS ISO Builder
Two build paths are provided. Pick the one that matches your host.
## Path A — Arch Linux host (native, recommended)
Requires `archiso` and `pacman-contrib`.
```bash
sudo pacman -S archiso
sudo make iso # runs iso/build-arch.sh
```
## Path B — Debian / Ubuntu host
Requires `xorriso`, `squashfs-tools`, `debootstrap`, `grub-pc-bin`, `grub-efi-amd64-bin`.
```bash
sudo apt-get install -y xorriso squashfs-tools debootstrap \
grub-pc-bin grub-efi-amd64-bin mtools
sudo bash iso/build.sh
```
Output lands in `iso/output/OrionOS-YYYYMMDD.iso`.
## Path C — Docker (any host with Docker)
```bash
make iso
```
The Dockerfile (`iso/docker/Dockerfile`) builds inside `archlinux:latest`,
compiles OrionOS, and runs `mkarchiso`. Output is written to `iso/output/`.
## Writing the ISO to a USB drive
```bash
# Find your USB device (e.g. /dev/sdb) — be careful
lsblk
sudo dd if=iso/output/OrionOS-*.iso of=/dev/sdX bs=4M status=progress oflag=sync
```
Or use [Ventoy](https://ventoy.net) — just copy the `.iso` onto the Ventoy USB.
## First boot
- Logs in automatically as root on tty1 and starts X / OrionOS.
- Super+F1 or bottom-left hot corner → launcher
- Super+V → clipboard manager
- Print → screenshot (Shift+Print → region)
- Top-left hot corner → Exposé overview
+37
View File
@@ -0,0 +1,37 @@
#!/usr/bin/env bash
# OrionOS ISO builder — Arch Linux host using mkarchiso
# Run as root from the repo root: sudo bash iso/build-arch.sh
set -euo pipefail
REPO="$(cd "$(dirname "$0")/.." && pwd)"
OUT="$REPO/iso/output"
echo "==> Building OrionOS binaries..."
cd "$REPO"
make all
echo "==> Installing OrionOS binaries into profile airootfs..."
install -Dm755 wm/orionwm iso/profile/airootfs/usr/local/bin/orionwm
install -Dm755 deskbar/oriondeskbar iso/profile/airootfs/usr/local/bin/oriondeskbar
install -Dm755 launcher/orionlauncher iso/profile/airootfs/usr/local/bin/orionlauncher
install -Dm755 orionnotify/orionnotify iso/profile/airootfs/usr/local/bin/orionnotify
install -Dm755 orionlock/orionlock iso/profile/airootfs/usr/local/bin/orionlock
install -Dm755 orionshot/orionshot iso/profile/airootfs/usr/local/bin/orionshot
install -Dm755 orionclip/orionclip iso/profile/airootfs/usr/local/bin/orionclip
install -Dm755 orionpkg/orionpkg iso/profile/airootfs/usr/local/bin/orionpkg
install -Dm755 themes/orionwallpaper iso/profile/airootfs/usr/local/bin/orionwallpaper
mkdir -p iso/profile/airootfs/usr/share/themes
cp -r themes/OrionOS iso/profile/airootfs/usr/share/themes/
install -Dm644 themes/picom.conf iso/profile/airootfs/etc/orionos/picom.conf
mkdir -p iso/profile/airootfs/usr/share/orionos/wallpapers
bash themes/wallpapers/generate-default.sh 2>/dev/null || true
cp -f themes/wallpapers/orionos-default.png \
iso/profile/airootfs/usr/share/orionos/wallpapers/ 2>/dev/null || true
echo "==> Running mkarchiso..."
mkdir -p "$OUT"
mkarchiso -v -w /tmp/orionos-arch-work -o "$OUT" iso/profile
echo ""
echo "✓ ISO built in $OUT"
ls -lh "$OUT"/*.iso 2>/dev/null || true
Executable
+169
View File
@@ -0,0 +1,169 @@
#!/usr/bin/env bash
# OrionOS ISO builder (Debian-based live system)
# Run as root from the repo root: sudo bash iso/build.sh
set -euo pipefail
REPO="$(cd "$(dirname "$0")/.." && pwd)"
WORK="/tmp/orionos-build"
OUT="$REPO/iso/output"
FS="$WORK/rootfs"
ISO_STAGE="$WORK/iso"
echo "==> OrionOS ISO builder"
echo " repo: $REPO"
echo " work: $WORK"
echo " output: $OUT"
mkdir -p "$FS" "$ISO_STAGE/live" "$ISO_STAGE/boot/grub" "$OUT"
# ── 1. Bootstrap minimal Debian base ────────────────────────────────────
echo "==> [1/7] Bootstrapping Debian bookworm..."
if [[ ! -f "$FS/bin/bash" ]]; then
debootstrap --arch=amd64 \
--include=linux-image-amd64,live-boot,systemd-sysv,sudo,bash,\
coreutils,util-linux,procps,grep,gawk,sed,tar,gzip,less,vim,git,\
xorg,xinit,xterm,feh,picom,alsa-utils,libx11-6,libxft2,libxfixes3,\
libxext6,libpng16-16,dbus,libpam0g,fontconfig,fonts-dejavu,\
fonts-noto,libdbus-1-3,notify-send,bash-completion,network-manager \
bookworm "$FS" 2>&1 | grep -E '(I:|W:|E:|error|warn)' || true
else
echo " (rootfs already exists, skipping bootstrap)"
fi
# ── 2. Compile OrionOS inside chroot ────────────────────────────────────
echo "==> [2/7] Compiling OrionOS components..."
mkdir -p "$FS/build"
cp -r "$REPO"/{wm,deskbar,launcher,orionnotify,orionlock,orionshot,orionclip,orionpkg,themes} "$FS/build/" 2>/dev/null || true
chroot "$FS" /bin/bash -c '
export DEBIAN_FRONTEND=noninteractive
apt-get install -y --no-install-recommends \
gcc make pkg-config \
libx11-dev libxft-dev libxfixes-dev libxext-dev \
libpng-dev libdbus-1-dev libpam0g-dev \
2>&1 | tail -3
cd /build
for dir in wm deskbar launcher orionnotify orionlock orionshot orionclip orionpkg; do
if [[ -d "$dir" ]]; then
echo " building $dir..."
make -C "$dir" 2>&1 | tail -2 || echo " WARNING: $dir build failed"
fi
done
' 2>&1
# ── 3. Install OrionOS binaries ──────────────────────────────────────────
echo "==> [3/7] Installing OrionOS binaries..."
chroot "$FS" /bin/bash -c '
set -e
install_if() { [[ -f "/build/$1" ]] && install -Dm755 "/build/$1" "/usr/local/bin/$2"; }
install_if wm/orionwm orionwm
install_if deskbar/oriondeskbar oriondeskbar
install_if launcher/orionlauncher orionlauncher
install_if orionnotify/orionnotify orionnotify
install_if orionlock/orionlock orionlock
install_if orionshot/orionshot orionshot
install_if orionclip/orionclip orionclip
install_if orionpkg/orionpkg orionpkg
install -Dm755 /build/themes/orionwallpaper /usr/local/bin/orionwallpaper
mkdir -p /usr/share/themes
cp -r /build/themes/OrionOS /usr/share/themes/ 2>/dev/null || true
mkdir -p /etc/orionos
cp /build/themes/picom.conf /etc/orionos/ 2>/dev/null || true
mkdir -p /usr/share/orionos/wallpapers
bash /build/themes/wallpapers/generate-default.sh 2>/dev/null || true
cp -f /build/themes/wallpapers/orionos-default.png /usr/share/orionos/wallpapers/ 2>/dev/null || true
' 2>&1
# ── 4. Configure live session ────────────────────────────────────────────
echo "==> [4/7] Configuring live session..."
cat > "$FS/etc/orionos/xinitrc" <<'XINITRC'
#!/bin/bash
picom --config /etc/orionos/picom.conf &
orionwallpaper &
orionnotify &
orionclip &
oriondeskbar &
exec orionwm
XINITRC
chmod 755 "$FS/etc/orionos/xinitrc"
cat > "$FS/root/.xinitrc" <<'XINIRC'
#!/bin/bash
source /etc/orionos/xinitrc
XINIRC
chmod 755 "$FS/root/.xinitrc"
# Auto-login and startx on tty1
mkdir -p "$FS/etc/systemd/system/getty@tty1.service.d"
cat > "$FS/etc/systemd/system/getty@tty1.service.d/autologin.conf" <<'UNIT'
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
UNIT
cat > "$FS/root/.bash_profile" <<'PROFILE'
[[ -z "$DISPLAY" && "$XDG_VTNR" == 1 ]] && exec startx
PROFILE
# hostname
echo "orionos" > "$FS/etc/hostname"
# Clean up build artifacts to save space
chroot "$FS" /bin/bash -c '
apt-get remove -y gcc make pkg-config \
libx11-dev libxft-dev libxfixes-dev libxext-dev \
libpng-dev libdbus-1-dev libpam0g-dev 2>&1 | tail -2 || true
apt-get autoremove -y 2>&1 | tail -2 || true
apt-get clean
rm -rf /build /var/cache/apt /tmp/*
' 2>&1
# ── 5. Build squashfs ────────────────────────────────────────────────────
echo "==> [5/7] Building squashfs filesystem..."
mksquashfs "$FS" "$ISO_STAGE/live/filesystem.squashfs" \
-comp zstd -Xcompression-level 6 \
-e boot -noappend 2>&1 | tail -3
# ── 6. Copy kernel + initrd ──────────────────────────────────────────────
echo "==> [6/7] Copying kernel and initrd..."
VMLINUZ="$(ls "$FS/boot/vmlinuz-"* 2>/dev/null | head -1)"
INITRD="$(ls "$FS/boot/initrd.img-"* 2>/dev/null | head -1)"
if [[ -z "$VMLINUZ" || -z "$INITRD" ]]; then
echo "ERROR: kernel or initrd not found in $FS/boot/"
ls "$FS/boot/" || true
exit 1
fi
cp "$VMLINUZ" "$ISO_STAGE/boot/vmlinuz"
cp "$INITRD" "$ISO_STAGE/boot/initrd.img"
# ── 7. GRUB bootloader + ISO ─────────────────────────────────────────────
echo "==> [7/7] Building bootable ISO with GRUB..."
cat > "$ISO_STAGE/boot/grub/grub.cfg" <<'GRUB'
set default=0
set timeout=5
menuentry "OrionOS Live" {
linux /boot/vmlinuz boot=live quiet splash
initrd /boot/initrd.img
}
menuentry "OrionOS Live (safe mode)" {
linux /boot/vmlinuz boot=live nomodeset
initrd /boot/initrd.img
}
GRUB
ISOFILE="$OUT/OrionOS-$(date +%Y%m%d).iso"
grub-mkrescue -o "$ISOFILE" "$ISO_STAGE" \
--modules="normal iso9660 linux ext2 squash4 biosdisk" \
2>&1 | grep -v "^$" | tail -10
SIZE="$(du -sh "$ISOFILE" | cut -f1)"
echo ""
echo "✓ ISO built: $ISOFILE ($SIZE)"