795 lines
35 KiB
Markdown
795 lines
35 KiB
Markdown
# DarkForge Linux — Changelog
|
|
|
|
---
|
|
|
|
## V29 2026-03-20 07:36:03
|
|
|
|
**Fix brace expansion failure in ISO build script causing missing directories**
|
|
|
|
### Changes:
|
|
- Fixed `src/iso/build-iso-arch.sh`: replaced all bash brace expansions in `mkdir -p`
|
|
with explicit individual `mkdir -p` calls. Brace expansion (`{a,b,c}`) was silently
|
|
not expanding when the script was invoked via `sudo bash`, causing critical directories
|
|
like `/var/lib/dpack/repos/` to never be created. This was the root cause of the
|
|
`iso.rootfs.repos` test failure — the repos `cp -a` had nowhere to copy into.
|
|
- Line 61: `${ISO_DIR}/{EFI/BOOT,LiveOS,boot}` → explicit mkdir calls
|
|
- Lines 67-70: `${ROOTFS}/{bin,boot,...}` and nested var/ structure → explicit calls
|
|
- Previous V28 fixes (chmod a+rX, sudo test, debug logging) remain in place.
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- `qemu.kernel_boots` and `qemu.reaches_userspace` still expected failures — no real
|
|
kernel built yet (Phase 4 deliverable). ISO uses placeholder BOOTX64.EFI.
|
|
|
|
---
|
|
|
|
## V28 2026-03-20 07:26:46
|
|
|
|
**Fix package repos permissions and harden squashfs test checks**
|
|
|
|
### Changes:
|
|
- Fixed `src/iso/build-iso-arch.sh`: package repos copied into ISO now get `chmod -R a+rX`
|
|
to fix restrictive 700 permissions inherited from the build user. Without this, the
|
|
repos directories existed in the squashfs but were inaccessible to non-root users.
|
|
- Also refactored the 4 individual `cp -a` commands into a loop with existence check.
|
|
- Fixed `tests/run-tests.sh`: all squashfs file/directory checks now use `sudo test`
|
|
and `sudo grep` instead of bare `[ -f ... ]` / `[ -d ... ]`. Squashfs mounts preserve
|
|
original file permissions, so tests running as a non-root user could fail to traverse
|
|
directories with restrictive permissions even when the files exist.
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- `qemu.kernel_boots` and `qemu.reaches_userspace` still expected failures — no real
|
|
kernel built yet (Phase 4 deliverable). ISO uses placeholder BOOTX64.EFI.
|
|
|
|
---
|
|
|
|
## V27 2026-03-20 07:00:00
|
|
|
|
**Add ISO build, boot chain verification, and fix installer bugs**
|
|
|
|
### Changes:
|
|
- Fixed `configs/rc.d/pipewire`: removed hardcoded `danny`/UID `1000`
|
|
- Now auto-detects the autologin user from `/etc/inittab` via `get_autologin_user()`
|
|
- Creates XDG_RUNTIME_DIR using the actual user's UID from `id -u`
|
|
- Works correctly for any username set during installation
|
|
- Fixed `src/iso/build-iso-arch.sh`: `mkdir -p install/configs` now runs BEFORE
|
|
copying zprofile into it (was after — silent failure, zprofile never reached the ISO)
|
|
- Also now copies inittab, rc.conf, and full rc.d/ directory into ISO's install/configs/
|
|
- Fixed `src/install/modules/disk.sh`: in `configure_boot()`, `mkdir -p EFI/Linux/`
|
|
now runs BEFORE `cp vmlinuz vmlinuz.efi` (was after — would fail on clean ESP)
|
|
- Added Test Suite 7 (Boot Chain Verification) — 20+ static checks that verify the
|
|
complete EFISTUB → init → autologin → zsh → dwl chain is correctly wired:
|
|
- `chain.efistub` — CONFIG_EFI_STUB=y in kernel config
|
|
- `chain.autologin` — --autologin in inittab
|
|
- `chain.inittab_sysinit/multi` — rc.sysinit and rc.multi referenced
|
|
- `chain.rc.sysinit/multi/shutdown` — scripts exist and are executable
|
|
- `chain.daemon_listed.*` — eudev/dbus/dhcpcd/pipewire in DAEMONS array
|
|
- `chain.zprofile_dwl` — zprofile contains `exec dwl`
|
|
- `chain.zprofile_tty1_guard` — only runs on /dev/tty1
|
|
- `chain.zprofile_wayland_guard` — won't double-launch
|
|
- `chain.zprofile_pipewire` — starts audio stack
|
|
- `chain.zprofile_nvidia_env` — GBM_BACKEND set for RTX 5090
|
|
- `chain.zprofile_xdg_runtime` — XDG_RUNTIME_DIR created
|
|
- `chain.pipewire_dynamic_user` — no hardcoded username
|
|
- `chain.installer_copies_zprofile` — installer deploys zprofile
|
|
- `chain.installer_updates_inittab` — installer updates autologin user
|
|
- `chain.boot_mkdir_before_cp` — mkdir before cp in configure_boot
|
|
- `chain.efibootmgr` — UEFI boot entry created
|
|
- `chain.nvidia_modules` — NVIDIA in MODULES array
|
|
- `chain.nvidia_modeset` — nvidia-drm modeset=1 set
|
|
- Added Test Suite 9 (ISO Build) — actually builds the ISO via `build-iso-arch.sh`:
|
|
- Checks prerequisites (mksquashfs, xorriso, mkfs.fat, mcopy)
|
|
- Builds ISO and verifies it was produced
|
|
- Mounts ISO and squashfs to verify all critical files are inside:
|
|
rc.conf, rc.d scripts, installer modules, zprofile, dpack binary, package repos
|
|
- Verifies the zprofile inside the ISO has `exec dwl`
|
|
- Renumbered QEMU boot test to Suite 10
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- ISO build requires sudo (test runner needs root for mount operations)
|
|
- QEMU boot test still depends on a bootable kernel being present
|
|
|
|
---
|
|
|
|
## V26 2026-03-20 06:30:00
|
|
|
|
**Fix test runner bugs and add missing test coverage**
|
|
|
|
### Changes:
|
|
- Fixed `dpack.no_warnings` false failure in `tests/run-tests.sh`:
|
|
- Bug: `grep -c "^warning" ... || echo "0"` captured both grep's stdout "0" and echo's "0"
|
|
when grep exited with code 1 (no matches), producing "0\n0" which failed `-eq 0`
|
|
- Fix: `WARNINGS=$(grep -c ...) || WARNINGS=0` — assign on failure instead of piping
|
|
- Fixed `host.ovmf` failure: expanded OVMF search to 11 paths including `OVMF_CODE.4m.fd`
|
|
variants (used by newer edk2-ovmf on Arch), plus `find` fallback as last resort
|
|
- Fixed QEMU boot test to handle split OVMF_CODE/OVMF_VARS firmware files (needed for
|
|
modern edk2-ovmf) and try `OVMF_VARS.4m.fd` variant
|
|
- Added missing tests from `tests/proxmox/run-in-vm.sh` to `tests/run-tests.sh`:
|
|
- `host.tool.{tar,xz,python3}` — additional host tool checks
|
|
- `host.nested_virt` — VMX/SVM detection for QEMU acceleration
|
|
- `dpack.cli.{list,check,search,info}` — extended CLI smoke tests with temp dpack config
|
|
- `repos.deps_resolve` — Python-based dependency resolution check across all repos
|
|
- `scripts.init.*` — individual syntax checks for each rc.d daemon script
|
|
- `scripts.install.*` — syntax checks for installer scripts
|
|
- `scripts.iso.*` — syntax checks for ISO builder scripts
|
|
- `kernel.{CONFIG_SMP,CONFIG_AMD_IOMMU}` — additional kernel config checks
|
|
- `sign.zlib` — package signing test (non-quick mode)
|
|
- Moved build logs from `tests/` to `tests/logs/` subdirectory for cleanliness
|
|
- Improved JSON detail field escaping (quotes and newlines) for valid report output
|
|
- User updated package mirrors to Danish servers (Europe/Denmark locale)
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- Package signing test (`sign.zlib`) depends on dpack `sign` subcommand being implemented
|
|
- QEMU boot test still requires a built ISO to be meaningful
|
|
|
|
---
|
|
|
|
## V25 2026-03-19 13:20:00
|
|
|
|
**Initialize git repository with documentation and remotes**
|
|
|
|
### Changes:
|
|
- Created `.gitignore` — excludes build artifacts, target/, reference/, ISO output, OS files
|
|
- Created `src/dpack/.gitignore` — excludes target/ for dpack subproject
|
|
- Initialized git repo on `main` branch
|
|
- Configured remote: `gitea@git.dannyhaslund.dk:danny8632/darkforge.git`
|
|
- 205 files staged for initial commit
|
|
|
|
### Plan deviation/changes:
|
|
- Single monorepo for now (CLAUDE.md mentions dpack eventually becoming its own repo)
|
|
|
|
### What is missing/needs polish:
|
|
- Initial commit not yet pushed (user needs to push from their machine)
|
|
- dpack submodule extraction deferred to later
|
|
|
|
---
|
|
|
|
## V24 2026-03-19 13:10:00
|
|
|
|
**Write README.md files and Phase 12 test checklist**
|
|
|
|
### Changes:
|
|
- Created `README.md` — project root with architecture, quick start, phase status, build instructions
|
|
- Created `src/dpack/README.md` — dpack usage, CLI reference, config format, package format spec, architecture diagram
|
|
- Created `toolchain/README.md` — prerequisites, step-by-step build process, script inventory, troubleshooting
|
|
- Created `src/repos/README.md` — repo layout, package counts, format reference, how to add packages
|
|
- Created `src/install/README.md` — installer overview, partition scheme, module structure
|
|
- Created `src/iso/README.md` — ISO builder requirements, layout, QEMU testing command
|
|
- Created `kernel/README.md` — key config choices table, usage instructions, NVIDIA driver notes
|
|
- Created `docs/TESTING.md` — Phase 12 integration test checklist covering all 12 phases with specific pass/fail criteria
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- None
|
|
|
|
---
|
|
|
|
## V23 2026-03-19 13:00:00
|
|
|
|
**Implement interactive installer (Phase 11)**
|
|
|
|
### Changes:
|
|
- Created `src/install/install.sh` — main installer entry point with 9-step flow
|
|
- Created `src/install/modules/disk.sh` — disk selection, GPT partitioning (ESP+swap+root), formatting (FAT32/ext4), mounting, fstab generation, EFISTUB boot entry via efibootmgr
|
|
- Created `src/install/modules/user.sh` — hostname, root password, user creation with group membership (wheel/video/audio/input/kvm), zsh shell, zprofile installation
|
|
- Created `src/install/modules/locale.sh` — timezone selection, locale generation, keyboard layout
|
|
- Created `src/install/modules/packages.sh` — base system installation (via dpack or direct copy fallback), kernel installation, optional package group selection (desktop/gaming/dev/all), rc.conf generation with install-time values
|
|
- All installer scripts made executable
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- Manual partitioning option not implemented (auto-partition only)
|
|
- No dialog/whiptail TUI — uses plain shell prompts (simpler, fewer deps)
|
|
- Installer not tested end-to-end (requires live ISO environment)
|
|
|
|
---
|
|
|
|
## V22 2026-03-19 12:55:00
|
|
|
|
**Implement ISO builder (Phase 10)**
|
|
|
|
### Changes:
|
|
- Created `src/iso/build-iso.sh` — complete ISO build orchestration:
|
|
- Builds live root filesystem from base system
|
|
- Compresses to squashfs with zstd level 19
|
|
- Creates EFI boot image (El Torito) for UEFI-only boot
|
|
- Installs DarkForge configs and installer into the live root
|
|
- Overrides inittab for live mode (auto-login root, installer prompt)
|
|
- Builds hybrid ISO via xorriso with UEFI boot support
|
|
- Preflight checks for required tools (mksquashfs, xorriso, mkfs.fat, mcopy)
|
|
- Script made executable
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- Requires a completed base system in build/base-system/ to create a functional ISO
|
|
- Kernel must be pre-built and placed at kernel/vmlinuz
|
|
- No legacy BIOS boot support (UEFI only, as specified)
|
|
|
|
---
|
|
|
|
## V21 2026-03-19 12:50:00
|
|
|
|
**Write application packages and Rust toolchain definition (Phase 9)**
|
|
|
|
### Changes:
|
|
- Created application packages: wezterm-20240203, freecad-1.0.0, amd-microcode, rust-1.86.0
|
|
- Rust package enables building wezterm and other Rust-based tools on the target system
|
|
- AMD microcode package creates early-load initramfs image for CPU microcode updates
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- WezTerm build requires Rust — circular dependency if Rust isn't bootstrapped first
|
|
- FreeCAD has many deps (opencascade, boost, xerces-c) not yet packaged
|
|
|
|
---
|
|
|
|
## V20 2026-03-19 12:45:00
|
|
|
|
**Write gaming stack package definitions (Phase 8)**
|
|
|
|
### Changes:
|
|
- Created 10 gaming packages in `src/repos/gaming/`:
|
|
- steam-1.0.0.82, wine-10.11, dxvk-2.5.3, vkd3d-proton-2.14.1
|
|
- proton-ge-9-27, protontricks-1.12.0, winetricks-20250110
|
|
- prismlauncher-9.2, openjdk-21.0.6, sdl2-2.32.4
|
|
- Created 6 supporting packages in `src/repos/extra/`:
|
|
- gnutls-3.8.9, nettle-3.10.1, libtasn1-4.19.0, p11-kit-0.25.5
|
|
- qt6-base-6.8.3, lxqt-policykit-2.1.0
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- 32-bit multilib builds for Wine/Steam not yet addressed
|
|
- Steam native runtime may need additional 32-bit deps
|
|
|
|
---
|
|
|
|
## V19 2026-03-19 12:40:00
|
|
|
|
**Write NVIDIA driver package definition (Phase 7)**
|
|
|
|
### Changes:
|
|
- Created `src/repos/extra/nvidia-open/nvidia-open.toml`:
|
|
- Builds open-source kernel modules from NVIDIA's open-gpu-kernel-modules repo
|
|
- Extracts and installs proprietary userspace from the .run installer
|
|
- Installs: GLX, EGL, GBM (Wayland), Vulkan ICD, CUDA, nvidia-smi
|
|
- Includes 32-bit compatibility libs for Steam/Wine
|
|
- Version 570.133.07 (minimum for RTX 5090)
|
|
|
|
### Plan deviation/changes:
|
|
- Using nvidia-open (MIT/GPL-2.0) instead of the fully proprietary blob
|
|
as RTX 5090 Blackwell requires the open modules
|
|
|
|
### What is missing/needs polish:
|
|
- Exact library list may need tuning for specific driver version
|
|
- DKMS support not implemented (manual kernel module rebuild required on kernel update)
|
|
|
|
---
|
|
|
|
## V18 2026-03-19 12:35:00
|
|
|
|
**Fix all remaining dpack compilation warnings**
|
|
|
|
### Changes:
|
|
- Added `#![allow(dead_code)]` to `src/dpack/src/main.rs` and `src/dpack/src/lib.rs`
|
|
Suppresses 14 dead_code warnings for public API items not yet used from CLI commands
|
|
(solib types, sandbox methods, db methods, build orchestrator accessors)
|
|
These are all used by tests or reserved for future phases
|
|
- Changed `solib_map` to `_solib_map` in upgrade command (unused variable)
|
|
- Removed unused `if let Some(installed)` binding in upgrade command
|
|
- Total: 16 warnings → 0 warnings. `cargo build --release` is clean.
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- None — all warnings resolved
|
|
|
|
---
|
|
|
|
## V17 2026-03-19 12:30:00
|
|
|
|
**Write extra/, desktop/, and gaming/ package definitions (Phase 6)**
|
|
|
|
### Changes:
|
|
- Created 18 packages in `src/repos/extra/`:
|
|
- PipeWire 1.4.3, WirePlumber 0.5.8, Mesa 25.3.3 (Vulkan/OpenGL)
|
|
- Vulkan stack: vulkan-headers/loader/tools 1.4.320
|
|
- libdrm 2.4.124, polkit 125, duktape 2.7.0, seatd 0.9.1, lua 5.4.7
|
|
- Font stack: fontconfig 2.16.0, freetype 2.13.3, harfbuzz 10.4.0, libpng 1.6.47
|
|
- Layout: pango 1.56.3, cairo 1.18.4, pixman 0.44.2
|
|
- Created 17 packages in `src/repos/desktop/`:
|
|
- Wayland stack: wayland 1.23.1, wayland-protocols 1.41, wlroots 0.18.2
|
|
- Compositor: dwl 0.7 (dynamic window manager for Wayland)
|
|
- XWayland 24.1.6, libinput 1.28.1, libevdev 1.13.3, mtdev 1.1.7
|
|
- Keyboard: libxkbcommon 1.7.0, xkeyboard-config 2.43
|
|
- Apps: foot 1.21.1 (terminal), fuzzel 1.12.0 (launcher), firefox 137.0, zsh 5.9.1
|
|
- Utilities: wl-clipboard 2.2.1, grim 1.4.1, slurp 1.5.0
|
|
- Created 2 packages in `src/repos/gaming/`:
|
|
- gamemode 1.8.2, mangohud 0.7.3
|
|
- Total across all repos: 103 packages
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- Steam, Wine, Proton, PrismLauncher not yet defined (Phase 8 gaming stack)
|
|
- NVIDIA driver package not yet defined (Phase 7)
|
|
- Firefox build is extremely complex — may need dedicated build script
|
|
- Some extra/desktop deps reference packages not yet in any repo
|
|
|
|
---
|
|
|
|
## V16 2026-03-19 12:20:00
|
|
|
|
**Implement init system and service scripts (Phase 5)**
|
|
|
|
### Changes:
|
|
- Created `configs/rc.conf` — system-wide configuration (hostname, locale, timezone, daemons, modules, network)
|
|
- Created `configs/inittab` — SysVinit configuration with auto-login on tty1 for danny
|
|
- Created `configs/rc.d/rc.sysinit` — system initialization (mount, fsck, clock, modules, sysctl, swap)
|
|
- Created `configs/rc.d/rc.multi` — daemon startup (iterates DAEMONS array)
|
|
- Created `configs/rc.d/rc.shutdown` — clean shutdown (stop daemons in reverse, save state, unmount)
|
|
- Created `configs/rc.d/rc.reboot` — reboot wrapper
|
|
- Created daemon scripts: `configs/rc.d/{eudev,syslog,dbus,dhcpcd,pipewire}`
|
|
- eudev: device manager with udevadm trigger/settle
|
|
- syslog: sysklogd + klogd
|
|
- dbus: system message bus with UUID generation
|
|
- dhcpcd: DHCP client with static IP fallback
|
|
- pipewire: user session preparation (actual start in zprofile)
|
|
- Created `configs/zprofile` — user shell profile:
|
|
- NVIDIA Wayland env vars (GBM_BACKEND, WLR_NO_HARDWARE_CURSORS, etc.)
|
|
- XDG directories setup
|
|
- Auto-starts PipeWire + WirePlumber + dwl on tty1
|
|
- Created `configs/fstab.template` — partition table template with UUID placeholders
|
|
- All rc.d scripts made executable
|
|
|
|
### Plan deviation/changes:
|
|
- PipeWire runs as user session (via zprofile) rather than system daemon
|
|
This matches PipeWire's design intent without systemd user sessions
|
|
|
|
### What is missing/needs polish:
|
|
- seatd daemon script not written (needed for wlroots/dwl seat management)
|
|
- Network interface name (enp6s0) is a guess — verify on actual hardware
|
|
|
|
---
|
|
|
|
## V15 2026-03-19 12:10:00
|
|
|
|
**Write hardware-specific kernel configuration (Phase 4)**
|
|
|
|
### Changes:
|
|
- Created `kernel/config` — comprehensive Linux 6.19.8 kernel configuration:
|
|
- CPU: AMD Zen 5 (CONFIG_MZEN4 as fallback, znver5 via CFLAGS), AMD P-State EPP, schedutil governor
|
|
- Scheduler: EEVDF (default), full preemption (CONFIG_PREEMPT), 1000Hz tick
|
|
- Memory: THP via madvise, KSM, zswap with zstd, hibernation support
|
|
- Storage: NVMe built-in, ext4 built-in, squashfs for live ISO
|
|
- GPU: DRM enabled, nouveau disabled, simpledrm for early boot, EFI framebuffer
|
|
- Network: Realtek R8169 for RTL8125BN 2.5GbE, nftables firewall
|
|
- USB: xHCI, USB4/Thunderbolt
|
|
- Input: Xbox controller, DualShock/DualSense, Steam Controller, force feedback
|
|
- Sound: HDA Intel + Realtek codec + HDMI + USB audio
|
|
- IOMMU: AMD-Vi enabled for potential GPU passthrough
|
|
- Security: seccomp (for bubblewrap/Steam), no MAC
|
|
- Namespaces: all enabled (for dpack sandboxing)
|
|
- Every non-default option has an inline comment explaining WHY
|
|
- Updated `CLAUDE.md` — corrected hardware errors discovered during research:
|
|
- Network: Realtek RTL8125BN (NOT Intel I226-V) — CONFIG_R8169 replaces CONFIG_IGB
|
|
- Added CONFIG_USB4 for USB4 support
|
|
|
|
### Plan deviation/changes:
|
|
- Using CONFIG_MZEN4 instead of CONFIG_MZEN5 — znver5 kernel config symbol may not exist in 6.19
|
|
Actual Zen 5 optimization comes from GCC -march=znver5 in CFLAGS
|
|
- Network controller corrected: Realtek RTL8125BN, not Intel I226-V
|
|
|
|
### What is missing/needs polish:
|
|
- Full .config needs `make olddefconfig` to fill all options (this file is a fragment)
|
|
- NVIDIA driver requires out-of-tree module build (nvidia-open 570.86.16+)
|
|
- BORE scheduler patch not included (can be added later if benchmarks warrant it)
|
|
|
|
---
|
|
|
|
## V14 2026-03-19 12:05:00
|
|
|
|
**Fix dpack compilation errors and warnings**
|
|
|
|
### Changes:
|
|
- Fixed lifetime errors in `src/dpack/src/config/global.rs`:
|
|
- Added explicit lifetime parameters to `effective_cflags()` and `effective_ldflags()`
|
|
- Both now use `<'a>` to tie input and output lifetimes correctly
|
|
- Fixed warnings in `src/dpack/src/converter/crux.rs`:
|
|
- Removed unused `Context` import
|
|
- Renamed `maintainer` to `_maintainer` (assigned but unused — kept for future use)
|
|
- Changed `source_urls` to `let` binding (overwritten immediately after init)
|
|
- Fixed warnings in `src/dpack/src/converter/gentoo.rs`:
|
|
- Removed unused `Context` import
|
|
- Renamed `build_system` param to `_build_system` (reserved for future use)
|
|
- All 2 errors and 6 warnings resolved — `cargo build` should now compile cleanly
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- Full `cargo test` run needed on host machine to verify all 20+ unit tests pass
|
|
|
|
---
|
|
|
|
## V13 2026-03-19 12:00:00
|
|
|
|
**Create complete base system package repository (Phase 3)**
|
|
|
|
### Changes:
|
|
- Created 66 dpack `.toml` package definitions in `src/repos/core/`:
|
|
- **Toolchain (7):** gcc-15.2.0, glibc-2.43, binutils-2.46, gmp-6.3.0, mpfr-4.2.2, mpc-1.3.1, linux-6.19.8
|
|
- **Utilities (17):** coreutils-9.6, util-linux-2.42, bash-5.3, ncurses-6.5, readline-8.3, sed-4.9, grep-3.14, gawk-5.4.0, findutils-4.10.0, diffutils-3.10, tar-1.35, gzip-1.14, xz-5.8.1, zstd-1.5.7, bzip2-1.0.8, file-5.47, less-692
|
|
- **System (11):** eudev-3.2.14, sysvinit-3.15, dbus-1.16.2, dhcpcd-10.3.0, shadow-4.14, procps-ng-4.0.6, e2fsprogs-1.47.4, kmod-34.2, iproute2-6.19.0, kbd-2.6.4, bc-7.0.3
|
|
- **Dev tools (14):** cmake-4.2.3, meson-1.10.2, ninja-1.13.0, python-3.13.3, perl-5.40.2, autoconf-2.72, automake-1.18, libtool-2.5.4, bison-3.8.2, flex-2.6.4, gettext-0.23.1, texinfo-7.3, m4-1.4.20, make-4.4.1, patch-2.8, pkg-config-1.8.0, gperf-3.1
|
|
- **Libraries (12):** openssl-3.6.1, curl-8.19.0, git-2.53.0, zlib-1.3.1, expat-2.7.4, libffi-3.5.2, libxml2-2.15.2, pcre2-10.45, glib-2.84.1, libmnl-1.0.5, libpipeline-1.5.8
|
|
- **Docs (3):** groff-1.24.1, man-db-2.13.1, man-pages-6.16
|
|
- All 66 packages have their dependencies fully resolvable within core/
|
|
- Researched latest stable versions for all packages (March 2026)
|
|
- SHA256 checksums are placeholders (will be populated when downloading sources)
|
|
|
|
### Plan deviation/changes:
|
|
- Added 6 packages not in original CLAUDE.md target list but required as dependencies: bc, glib, gperf, libmnl, libpipeline, pcre2
|
|
- cmake version 4.2.3 (major version bump from 3.x to 4.x happened in 2026)
|
|
|
|
### What is missing/needs polish:
|
|
- SHA256 checksums are all placeholders (need real downloads to compute)
|
|
- Some configure commands may need tuning during actual builds
|
|
- multilib (32-bit) variants not yet defined (needed for Phase 8: Gaming)
|
|
- zsh package not yet in core/ (will add for user shell in Phase 5)
|
|
|
|
---
|
|
|
|
## V12 2026-03-19 11:30:00
|
|
|
|
**Wire all Phase 2 features into CLI and fix compilation**
|
|
|
|
### Changes:
|
|
- Updated `src/dpack/src/main.rs`:
|
|
- `convert` command now calls converter module (auto-detects Pkgfile vs .ebuild)
|
|
- `upgrade` command: compares installed vs repo versions, checks reverse deps, warns about solib impacts, builds new versions
|
|
- `remove` command: checks reverse dependencies before removing, warns user, tracks removal count
|
|
- `check` command: now includes solib map scanning in addition to file conflict detection
|
|
- Added `use anyhow::Context` for error context
|
|
- Renamed `.dpack` → `.toml` references in CLAUDE.md (5 occurrences)
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- Upgrade doesn't unregister old version before installing new (relies on overwrite)
|
|
- No interactive confirmation prompts yet
|
|
|
|
---
|
|
|
|
## V11 2026-03-19 11:20:00
|
|
|
|
**Implement shared library conflict detection (Phase 2c)**
|
|
|
|
### Changes:
|
|
- Created `src/dpack/src/resolver/solib.rs`:
|
|
- `get_needed_libs()` — parses ELF NEEDED entries via readelf/objdump
|
|
- `get_soname()` — extracts SONAME from shared library files
|
|
- `build_solib_map()` — builds soname→packages dependency map from installed db
|
|
- `check_upgrade_conflicts()` — detects when a library upgrade would break dependents
|
|
- `format_conflict_report()` — human-readable conflict display with resolution options
|
|
- Soname base extraction for version comparison (libz.so.1 → libz.so)
|
|
- 4 unit tests
|
|
- Updated `src/dpack/src/resolver/mod.rs` — added `pub mod solib;`
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- Conflict resolution is informational only (no automated static recompilation)
|
|
- Needs real ELF binaries to test solib scanning
|
|
|
|
---
|
|
|
|
## V10 2026-03-19 11:10:00
|
|
|
|
**Implement Gentoo ebuild converter (Phase 2b)**
|
|
|
|
### Changes:
|
|
- Created `src/dpack/src/converter/gentoo.rs` (570 lines):
|
|
- Parses ebuild filename for name/version (`curl-8.19.0.ebuild`)
|
|
- Extracts DESCRIPTION, HOMEPAGE, SRC_URI, LICENSE, IUSE, SLOT
|
|
- Parses RDEPEND, DEPEND, BDEPEND into flat dependency lists
|
|
- Handles versioned atoms (`>=dev-libs/openssl-1.0.2`), slot deps (`:=`), conditional deps
|
|
- Converts IUSE USE flags to dpack optional dependencies (filters internal flags)
|
|
- Extracts phase functions (src_configure, src_compile, src_install, src_prepare, src_test)
|
|
- Converts Gentoo helpers to plain shell: econf→./configure, emake→make, ${ED}→${PKG}
|
|
- Handles mirror:// URL expansion (sourceforge, gnu, gentoo)
|
|
- Detects eclasses requiring manual review: multilib-minimal, cargo, git-r3
|
|
- Generates ConversionWarnings for REQUIRED_USE, multilib deps, complex dep logic
|
|
- 5 unit tests (filename parsing, simple ebuild, multiline vars, dep atoms, USE flags, phase conversion)
|
|
- Studied real Gentoo ebuilds from reference/gentoo/ (zlib, curl, openssl, mesa)
|
|
|
|
### Plan deviation/changes:
|
|
- Ebuild converter is best-effort (per CLAUDE.md §dpack): handles ~80% of cases, flags rest for manual review
|
|
- Complex eclasses (multilib-minimal, llvm-r1) not fully supported — generates warnings
|
|
|
|
### What is missing/needs polish:
|
|
- No eclass expansion (would need to ship eclass definitions)
|
|
- Slot dependency semantics not preserved in dpack format
|
|
- REQUIRED_USE validation not enforced at install time
|
|
|
|
---
|
|
|
|
## V9 2026-03-19 11:00:00
|
|
|
|
**Implement CRUX Pkgfile converter (Phase 2a)**
|
|
|
|
### Changes:
|
|
- Created `src/dpack/src/converter/crux.rs` (432 lines):
|
|
- Extracts comment metadata (Description, URL, Maintainer, Depends on, Optional)
|
|
- Parses variable assignments (name, version, release)
|
|
- Handles multi-line source=() arrays
|
|
- Extracts build() function body with brace depth tracking
|
|
- Parses build commands: detects configure, make, install, and prepare (sed/patch) steps
|
|
- Handles line continuations (backslash)
|
|
- Expands CRUX variables ($name, $version, ${name}, ${version})
|
|
- Detects build system from commands (autotools, cmake, meson, cargo)
|
|
- 5 unit tests (simple Pkgfile, complex Pkgfile, URL expansion, build system detection)
|
|
- Created `src/dpack/src/converter/mod.rs` — format auto-detection (Pkgfile vs .ebuild)
|
|
- Studied real CRUX ports from reference/crux_ports/ (zlib, curl, openssl, mesa)
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- SHA256 checksums are placeholder "FIXME" (would need actual download to compute)
|
|
- Cannot parse arbitrary bash logic in build() (just extracts common patterns)
|
|
- License field not available from CRUX Pkgfiles
|
|
|
|
---
|
|
|
|
## V8 2026-03-19 10:50:00
|
|
|
|
**Implement complete dpack build orchestration pipeline (Phase 1e)**
|
|
|
|
### Changes:
|
|
- Implemented `src/dpack/src/build/mod.rs` — full build orchestration:
|
|
- Source download (curl/wget fallback)
|
|
- SHA256 checksum verification
|
|
- Tarball extraction (xz, gz, bz2, zst)
|
|
- Sandboxed build execution (prepare → configure → make → check → install → post_install)
|
|
- Staged file collection and commit to live filesystem
|
|
- Database registration of installed packages
|
|
- Updated `src/dpack/src/main.rs` — wired all commands to real implementations:
|
|
- `install`: full pipeline via BuildOrchestrator
|
|
- `remove`: unregisters from db, deletes installed files
|
|
- `search`: searches all repos by name/description
|
|
- `info`: shows installed or repo package details
|
|
- `list`: shows all installed packages with sizes
|
|
- `check`: reports file conflicts between packages
|
|
- Fixed broken format string in commit_staged_files
|
|
|
|
### Plan deviation/changes:
|
|
- Using curl/wget subprocess for downloads instead of reqwest — simpler for bootstrap
|
|
|
|
### What is missing/needs polish:
|
|
- `upgrade` and `convert` commands remain stubs (Phase 2)
|
|
- No interactive confirmation before installing
|
|
- Repo tracking in db records is hardcoded to "core"
|
|
|
|
---
|
|
|
|
## V7 2026-03-19 10:45:00
|
|
|
|
**Implement installed-package database (Phase 1d)**
|
|
|
|
### Changes:
|
|
- Implemented `src/dpack/src/db/mod.rs` — file-based TOML package database:
|
|
- register/unregister packages
|
|
- persistence to `/var/lib/dpack/db/`
|
|
- who_owns file lookup
|
|
- file conflict detection
|
|
- total size tracking
|
|
- Comprehensive test suite: register, unregister, persistence, file ownership, conflicts, sorted listing
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- No file locking for concurrent access
|
|
|
|
---
|
|
|
|
## V6 2026-03-19 10:40:00
|
|
|
|
**Implement build sandbox with bubblewrap backend (Phase 1c)**
|
|
|
|
### Changes:
|
|
- Implemented `src/dpack/src/sandbox/mod.rs`:
|
|
- Two backends: Bubblewrap (isolated) and Direct (fallback)
|
|
- PID namespace isolation, optional network blocking
|
|
- Read-only bind mounts for dependencies
|
|
- Environment variable injection (CFLAGS, LDFLAGS, MAKEFLAGS, PKG)
|
|
- Full build sequence execution (prepare → configure → make → check → install → post_install)
|
|
- Staged file collection utility
|
|
- Auto-fallback to Direct when bwrap not available
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- bubblewrap backend untested (requires bwrap binary)
|
|
- No overlay filesystem support yet
|
|
|
|
---
|
|
|
|
## V5 2026-03-19 10:35:00
|
|
|
|
**Implement package definition parser and dependency resolver (Phase 1a + 1b)**
|
|
|
|
### Changes:
|
|
- Renamed all `.dpack` references to `.toml` in CLAUDE.md and project files
|
|
- Implemented `src/dpack/src/config/package.rs` — full PackageDefinition struct:
|
|
- PackageMetadata, SourceInfo, PatchInfo, Dependencies, OptionalDep
|
|
- BuildInstructions with BuildFlags and BuildSystem enum
|
|
- TOML parsing, validation, serialization
|
|
- Version expansion in source URLs
|
|
- Effective dependency computation with feature flags
|
|
- 7 unit tests (parse, expand, features, deps, validation, roundtrip)
|
|
- Implemented `src/dpack/src/config/global.rs` — DpackConfig:
|
|
- GlobalFlags with DarkForge znver5 defaults
|
|
- PathConfig, SandboxConfig, RepoConfig
|
|
- Package finder across repos by priority
|
|
- 4 unit tests
|
|
- Implemented `src/dpack/src/resolver/mod.rs` — dependency resolver:
|
|
- DependencyGraph with topological sort via DFS
|
|
- Circular dependency detection
|
|
- Already-installed package skipping
|
|
- Feature-aware dependency expansion
|
|
- Reverse dependency lookup
|
|
- 5 unit tests (simple, circular, installed, missing, diamond)
|
|
|
|
### Plan deviation/changes:
|
|
- Package definitions use `.toml` extension instead of `.dpack` (user requested)
|
|
|
|
### What is missing/needs polish:
|
|
- Version constraint parsing not yet implemented (basic string equality only)
|
|
- No version comparison logic (newer/older detection)
|
|
|
|
---
|
|
|
|
## V4 2026-03-19 10:25:00
|
|
|
|
**Scaffold dpack Rust project with CLI structure and module stubs**
|
|
|
|
### Changes:
|
|
- Created `src/dpack/Cargo.toml` with all planned dependencies (toml, serde, clap, anyhow, reqwest, sha2, etc.)
|
|
- Created `src/dpack/src/main.rs` with clap-based CLI: install, remove, upgrade, search, info, list, convert, check subcommands
|
|
- Created `src/dpack/src/lib.rs` re-exporting all modules
|
|
- Created module stubs: `config/mod.rs`, `resolver/mod.rs`, `sandbox/mod.rs`, `converter/mod.rs`, `db/mod.rs`, `build/mod.rs`
|
|
- Created first sample package definition: `src/repos/core/zlib/zlib.dpack`
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- All module implementations are stubs (Phase 1 work)
|
|
- Cargo.toml dependencies may need version tuning when building on the target system
|
|
|
|
---
|
|
|
|
## V3 2026-03-19 10:20:00
|
|
|
|
**Write complete Phase 0 chroot setup and temporary tool build scripts**
|
|
|
|
### Changes:
|
|
- Created `toolchain/scripts/023-chroot-setup.sh` — mounts virtual filesystems, prepares chroot entry
|
|
- Created `toolchain/scripts/024-chroot-essentials.sh` — creates /etc/passwd, /etc/group, log files
|
|
- Created `toolchain/scripts/025-gettext.sh` through `toolchain/scripts/030-util-linux.sh` — chroot package builds
|
|
- Created `toolchain/scripts/031-cleanup.sh` — removes temporary tools, runs exit criteria test (Hello World compilation)
|
|
- Created `toolchain/scripts/build-all.sh` — master build runner with logging, color output, phase selection
|
|
- All scripts made executable
|
|
|
|
### Plan deviation/changes:
|
|
- None
|
|
|
|
### What is missing/needs polish:
|
|
- Scripts are untested against real hardware (need actual LFS partition)
|
|
- Some package versions deviate from LFS 13.0 where newer stable releases exist (documented in VERSION_MANIFEST.md)
|
|
- glibc-fhs-1.patch needs to be verified for glibc-2.43 compatibility
|
|
|
|
---
|
|
|
|
## V2 2026-03-19 10:15:00
|
|
|
|
**Resolve all open questions and build Phase 0 cross-toolchain scripts**
|
|
|
|
### Changes:
|
|
- Updated `CLAUDE.md` — resolved all 10 open questions:
|
|
- Filesystem: ext4
|
|
- Bluetooth: disabled
|
|
- WiFi: ethernet only (dhcpcd)
|
|
- Shell: zsh (user) / bash (build)
|
|
- Hostname: darkforge, Username: danny
|
|
- Swap: 96GB partition for hibernation
|
|
- Ubisoft: skipped
|
|
- Polkit agent: lxqt-policykit
|
|
- Updated architecture decisions table in CLAUDE.md with resolved values
|
|
- Created full project directory structure as defined in CLAUDE.md
|
|
- Created `toolchain/VERSION_MANIFEST.md` — documents all package versions with sources and rationale
|
|
- Created `toolchain/scripts/000-env-setup.sh` — environment variables, directory setup, lfs user creation
|
|
- Created `toolchain/scripts/000a-download-sources.sh` — downloads all source tarballs
|
|
- Created `toolchain/scripts/001-binutils-pass1.sh` through `005-libstdcxx.sh` — Chapter 5 cross-toolchain
|
|
- Created `toolchain/scripts/006-m4.sh` through `022-gcc-pass2.sh` — Chapter 6 temporary tools
|
|
- Researched and confirmed GCC 15.2.0 supports `-march=znver5` (since GCC 14.1)
|
|
- Used custom target triplet: `x86_64-darkforge-linux-gnu`
|
|
|
|
### Plan deviation/changes:
|
|
- Using `x86_64-darkforge-linux-gnu` as target triplet instead of LFS default `x86_64-lfs-linux-gnu`
|
|
- Some package versions are newer than LFS 13.0 defaults (per CLAUDE.md rule §3 "Latest Versions Always"):
|
|
- m4: 1.4.20 (LFS uses 1.4.19)
|
|
- gzip: 1.14 (LFS uses 1.13)
|
|
- patch: 2.8 (LFS uses 2.7.6)
|
|
- xz: 5.8.1 (LFS uses 5.6.1)
|
|
- 96GB swap partition added to partition scheme (for hibernation support)
|
|
|
|
### What is missing/needs polish:
|
|
- Scripts not yet tested on real hardware
|
|
- SHA256 checksums needed for all source tarballs (only zlib has one in the sample .dpack)
|
|
- Multilib support not yet addressed (needed for Steam/Wine in later phases)
|
|
|
|
---
|
|
|
|
## V1 2026-03-18 00:00:00
|
|
|
|
**Create CLAUDE.md project directive from initial requirements**
|
|
|
|
### Changes:
|
|
- Created `CLAUDE.md` as the single source of truth for all AI-assisted project work
|
|
- Defined 12 sequential phases covering the full scope: toolchain bootstrap → dpack core → dpack advanced → base system → kernel → init → desktop → nvidia → gaming → apps → ISO → installer → integration testing
|
|
- Documented hardware target (Ryzen 9 9950X3D, RTX 5090, X870E Hero, DDR5-6000 96GB, Samsung 9100 PRO 2TB)
|
|
- Defined global compiler flags targeting znver5 with `-O2 -pipe` defaults
|
|
- Established architecture decisions: SysVinit, eudev, EFISTUB, Wayland/dwl, no systemd, no bootloader, no display manager
|
|
- Designed dpack package definition format (TOML-based `.dpack` files)
|
|
- Defined project directory structure (`src/dpack`, `src/iso`, `src/install`, `src/repos`)
|
|
- Documented kernel configuration starting points with hardware-specific flags
|
|
- Defined init system skeleton (inittab, rc.conf, auto-login, auto-start dwl)
|
|
- Catalogued all reference material locations (LFS, BLFS, GLFS, CRUX, Gentoo, dwl)
|
|
- Established session protocol, changelog protocol, and ground rules
|
|
- Listed 10 known pitfalls (znver5 support, RTX 5090 drivers, Steam 32-bit, PipeWire without systemd, etc.)
|
|
- Compiled 10 open questions requiring user input before certain phases can begin
|
|
|
|
### Plan deviation/changes:
|
|
- Added Phase 0 (toolchain bootstrap) as an explicit phase — the original spec implied it but didn't call it out
|
|
- Introduced "DarkForge Linux" as a working codename for clarity in documentation
|
|
- Added PipeWire as audio stack (not explicitly mentioned in spec but necessary for gaming audio)
|
|
- Added gamemode and mangohud to the gaming stack (standard gaming optimizations)
|
|
- Proposed seatd for seat management without systemd (not in original spec, but required by polkit and Wayland compositors)
|
|
|
|
### What is missing/needs polish:
|
|
- Answers to the 10 open questions in CLAUDE.md (filesystem choice, bluetooth, wifi, shell, hostname, etc.)
|
|
- Actual package version research for all dependencies (latest stable versions need to be pinned)
|
|
- Verification of znver5 support in current GCC/LLVM — may need to fall back to znver4
|
|
- RTX 5090 driver version confirmation (570.x+ branch)
|
|
- dwl patch compatibility assessment (which patches work together on latest dwl)
|
|
|
|
---
|