Tests everything possible without the target hardware: create-vm.sh (runs on Proxmox host): - Creates Arch Linux VM (VMID 900, 8 cores, 16GB RAM, 100GB disk) - UEFI boot with OVMF (for nested QEMU testing) - Cloud-init auto-installs packages, clones repo, runs tests - Nested virtualization enabled for QEMU-in-QEMU boot tests run-in-vm.sh (runs inside the VM, 9 test suites): 1. Host environment validation 2. dpack build + unit tests + CLI smoke tests 3. Package definition validation (154 packages, dep resolution) 4. Script syntax checking (toolchain, init, installer, ISO) 5. Kernel config validation (critical options) 6. Package signing test (download zlib, compute SHA256) 7. Toolchain bootstrap (LFS Ch.5 cross-compiler build) 8. ISO generation 9. Nested QEMU boot test (UEFI boot, kernel + userspace check) Modes: --quick (30min, suites 1-5), --no-build (1hr), full (2-6hr) Generates report.json + report.txt for automated debugging. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
DarkForge Linux
A custom, from-scratch Linux distribution built for one machine, one user — optimized ruthlessly for gaming and development.
Target Hardware
| Component | Model |
|---|---|
| CPU | AMD Ryzen 9 9950X3D (Zen 5, 16C/32T, 3D V-Cache) |
| RAM | Corsair Vengeance DDR5-6000 96GB CL30 (2×48GB) |
| Storage | Samsung 9100 PRO 2TB NVMe (PCIe 5.0 x4) |
| GPU | ASUS GeForce RTX 5090 ROG Astral LC OC 32GB GDDR7 |
| Motherboard | ASUS ROG CROSSHAIR X870E HERO |
Architecture
DarkForge uses a minimal, transparent stack with no systemd:
- Init: SysVinit + custom rc.d scripts
- Device manager: eudev (no systemd dependency)
- Boot: EFISTUB — the kernel is the bootloader, no GRUB
- Display: Wayland via dwl compositor (dwm-like)
- Audio: PipeWire (started as user service)
- Networking: dhcpcd (ethernet only)
- Package manager: dpack (custom, written in Rust)
- Shell: zsh (user) / bash (build scripts)
- Filesystem: ext4
Project Structure
darkforge/
├── CLAUDE.md # Project directive (AI assistant context)
├── README.md # This file
├── docs/
│ └── CHANGELOG.md # Mandatory changelog for every change
├── src/
│ ├── dpack/ # Custom package manager (Rust)
│ ├── iso/ # Live ISO builder
│ ├── install/ # Interactive installer
│ └── repos/ # Package definitions (124 packages)
│ ├── core/ # 67 base system packages
│ ├── extra/ # 26 libraries and frameworks
│ ├── desktop/ # 19 Wayland/desktop packages
│ └── gaming/ # 12 gaming packages
├── toolchain/ # Cross-compilation bootstrap scripts
│ ├── scripts/ # 34 build scripts (LFS Ch. 5-7)
│ ├── sources/ # Downloaded source tarballs
│ └── VERSION_MANIFEST.md
├── kernel/
│ └── config # Hardware-specific kernel .config
├── configs/
│ ├── rc.conf # System configuration
│ ├── inittab # SysVinit config
│ ├── rc.d/ # Service scripts
│ ├── zprofile # User shell profile (auto-starts dwl)
│ └── fstab.template # Filesystem table template
└── reference/ # LFS, BLFS, CRUX, Gentoo reference docs
Build Phases
The project is built in sequential phases. Each phase has clear deliverables and exit criteria.
| Phase | Description | Status |
|---|---|---|
| 0 | Toolchain bootstrap (cross-compiler) | Scripts written |
| 1 | dpack core (parser, resolver, sandbox, db, build) | Implemented |
| 2 | dpack advanced (converters, solib, upgrade/remove) | Implemented |
| 3 | Base system packages (66 core/ definitions) | Complete |
| 4 | Kernel configuration | Complete |
| 5 | Init system and service scripts | Complete |
| 6 | Desktop environment (Wayland/dwl) | Definitions written |
| 7 | NVIDIA driver stack | Definition written |
| 8 | Gaming stack (Steam, Wine, Proton) | Definitions written |
| 9 | Application stack (WezTerm, FreeCAD) | Definitions written |
| 10 | ISO builder | Script written |
| 11 | Interactive installer | Scripts written |
| 12 | Integration testing | Pending |
Quick Start
Prerequisites
Building DarkForge requires a Linux host system. The toolchain bootstrap (Phase 0) can be done from any modern Linux distro, but later phases require the DarkForge chroot/live environment.
Host system requirements (for building the toolchain):
Any reasonably modern Linux distribution works. Tested on:
- Arch Linux (recommended — rolling release with fresh packages)
- Ubuntu 22.04+ / Debian 12+
- Fedora 38+
Required host packages:
# Arch Linux
sudo pacman -S base-devel git wget python rust
# Ubuntu / Debian
sudo apt install build-essential git wget python3 curl bison gawk m4 texinfo
# Fedora
sudo dnf groupinstall "Development Tools" && sudo dnf install git wget python3 rust cargo
Tool versions:
- GCC 14.1+ or GCC 15.x (for
-march=znver5support) - Rust 1.75+ (for building dpack — install via https://rustup.rs)
- Python 3.10+
- GNU Make 4.x+
- ~50GB free disk space for the full build
- ~4GB RAM minimum (16GB+ recommended for parallel builds)
For kernel building (Phase 4) and later phases: These run inside the DarkForge chroot or on the target machine itself. The toolchain built in Phase 0 provides everything needed.
1. Build dpack
cd src/dpack
cargo build --release
sudo install -m755 target/release/dpack /usr/local/bin/
2. Bootstrap the toolchain
export LFS=/mnt/darkforge
# Create and mount your target partition, then:
bash toolchain/scripts/000-env-setup.sh
bash toolchain/scripts/000a-download-sources.sh
bash toolchain/scripts/build-all.sh cross
bash toolchain/scripts/build-all.sh temp
# Enter chroot and run Phase 7 scripts
3. Build the kernel
cp kernel/config /usr/src/linux-6.19.8/.config
cd /usr/src/linux-6.19.8
make olddefconfig
make -j32
make modules_install
cp arch/x86/boot/bzImage /boot/vmlinuz
4. Build the ISO
bash src/iso/build-iso.sh
5. Install
Boot the ISO on the target machine and run install.
Compiler Flags
All packages are built with Zen 5 optimizations:
CFLAGS="-march=znver5 -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
MAKEFLAGS="-j32"
LDFLAGS="-Wl,-O1,--as-needed"
Key Design Decisions
- No systemd — SysVinit + rc.d for transparency and speed
- No bootloader — EFISTUB direct kernel boot
- No display manager — auto-login to tty1, dwl launched from shell profile
- ext4 — simpler and faster than btrfs for this use case
- 96GB swap — matches RAM size for hibernation support
- Single target — every optimization targets exactly this hardware
License
The DarkForge project itself is MIT licensed. Individual packages retain their upstream licenses as documented in their .toml definitions.
Repository
git@git.dannyhaslund.dk:danny8632/darkforge.git