Initial commit: DarkForge Linux — Phases 0-12
Complete from-scratch Linux distribution targeting AMD Ryzen 9 9950X3D + NVIDIA RTX 5090 on ASUS ROG CROSSHAIR X870E HERO. Deliverables: - dpack: custom package manager in Rust (3,800 lines) - TOML package parser, dependency resolver, build sandbox - CRUX Pkgfile and Gentoo ebuild converters - Shared library conflict detection - 124 package definitions across 4 repos (core/extra/desktop/gaming) - 34 toolchain bootstrap scripts (LFS 13.0 adapted for Zen 5) - Linux 6.19.8 kernel config (hardware-specific, fully commented) - SysVinit init system with rc.d service scripts - Live ISO builder (UEFI-only, squashfs+xorriso) - Interactive installer (GPT partitioning, EFISTUB boot) - Integration test checklist (docs/TESTING.md) No systemd. No bootloader. No display manager. Kernel boots via EFISTUB → auto-login → dwl Wayland compositor. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
661
docs/CHANGELOG.md
Normal file
661
docs/CHANGELOG.md
Normal file
@@ -0,0 +1,661 @@
|
||||
# DarkForge Linux — Changelog
|
||||
|
||||
---
|
||||
|
||||
## 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)
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user