The Arch Linux cloud image ignores Proxmox's --ciuser/--cipassword
and the cloud-init chpasswd module depending on version. The previous
approach had three conflicting methods fighting each other.
Fixed by:
- Removed --ciuser/--cipassword from qm set (they conflict with snippet)
- Removed chpasswd cloud-init module (unreliable on Arch)
- Set users: [] to disable cloud-init's default user module
- ALL user setup now done via runcmd (runs as root, always works):
- Sets root password to 'darkforge' as fallback
- Creates darkforge user via useradd + chpasswd
- Grants passwordless sudo via /etc/sudoers.d/
- Enables PermitRootLogin yes as safety net
- Package install via explicit pacman commands instead of packages: module
(Arch cloud-init packages module can be unreliable)
- Added pacman-key --init/--populate before package install
Login credentials:
user: darkforge password: darkforge
user: root password: darkforge (fallback)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Arch Linux cloud images disable SSH password authentication by default.
Added cloud-init directives to:
- Enable ssh_pwauth
- Set the darkforge user password via chpasswd (plaintext, non-expiring)
- Write /etc/ssh/sshd_config.d/99-darkforge.conf enabling PasswordAuthentication
- Restart sshd after config is written
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tests now run inside a tmux session so you can disconnect and
reconnect without interrupting multi-hour test runs.
Changes:
- create-vm.sh: cloud-init no longer auto-runs tests, just provisions
packages and clones the repo. Installs a `darkforge-test` command
in /usr/local/bin that wraps run-in-vm.sh in tmux.
- run-in-vm.sh: detects when called as `darkforge-test` and re-execs
inside a tmux session named "darkforge". --tmux flag for internal use.
- README updated with tmux workflow (detach/reattach instructions).
Workflow:
ssh darkforge@<ip>
darkforge-test --quick # starts in tmux
Ctrl+B D # detach, go do other things
tmux attach -t darkforge # come back later
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The CheckUpdates handler now reads has_repo_update to label each
update with its source: [repo], [upstream], or [repo+upstream].
This was the last remaining warning — build should now be fully clean.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removed both blanket #![allow(dead_code)] from main.rs and lib.rs.
Each warning is now handled individually with a targeted #[allow]
and a comment explaining WHY the item exists and WHEN it will be used.
Fixes:
- resolver/mod.rs: Added missing SourceInfo fields (git, branch, tag,
commit, update_check) to test helper make_pkg() — fixes cargo test
- main.rs: Wire DEFAULT_CONFIG_PATH constant into CLI default_value
instead of hardcoding the string (eliminates unused constant warning)
Targeted #[allow(dead_code)] with justification on:
- config/global.rs: load_default() (future system service mode),
find_package() (future replacement for inline Info search)
- resolver/solib.rs: SharedLib, LibConflict, ConflictResolution structs
(planned upgrade conflict UI), get_soname(), check_upgrade_conflicts(),
format_conflict_report(), collect_provided_sonames(), soname_base()
(entire conflict detection chain — will be wired into dpack upgrade)
- resolver/mod.rs: definition_path field (populated but read in future)
- sandbox/mod.rs: add_ro_bind() (planned dep mounting), staging_dir(),
build_dir() (accessor methods for post-build inspection)
- db/mod.rs: is_installed() (used by tests, future install guard),
who_owns() (planned dpack owns <file> command)
- build/mod.rs: db(), db_mut() (accessors for advanced orchestration)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Added 16 missing packages (boost, opencascade, xerces-c, swig,
tcl, tk, nodejs, cbindgen, unibilium, libtermkey, libvterm,
msgpack-c, xcb, xcb-proto, libxau, libxdmcp).
Every package in all 4 repos can now be installed via dpack
with zero unresolvable dependencies.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
dpack fixes:
- Fixed missing SourceInfo fields in CRUX/Gentoo converters (git, branch,
tag, commit, update_check fields added to struct initializers)
- Added 'sign' command: downloads source tarballs and computes real SHA256
checksums, updating .toml definitions in-place. Replaces placeholder
checksums. Usage: dpack sign zlib or dpack sign all
Testing:
- tests/run-tests.sh: comprehensive integration test runner for Arch Linux
host. 7 test suites covering host env, dpack build/tests, package defs,
toolchain scripts, kernel config, init system, and QEMU boot.
Generates JSON + text reports for automated debugging.
Usage: bash tests/run-tests.sh [--quick]
ISO builders:
- src/iso/build-iso-arch.sh: builds live ISO from Arch Linux host
Creates rootfs from pre-built base system or busybox fallback,
includes installer + dpack + package repos, UEFI-only boot
- src/iso/build-iso-darkforge.sh: builds live ISO from running DarkForge
Snapshots the live system via rsync, creates redistributable ISO
Package repository (submodule updated):
- 14 new self-hosting packages: qemu, edk2-ovmf, squashfs-tools,
xorriso, mtools, efibootmgr, efivar, rsync, lz4, nasm,
neovim, htop, tmux, libevent
- Total: 138 packages across 4 repos
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
dpack features:
- Git source support: packages can specify [source].git for cloning
instead of tarball download. Supports branch, tag, and commit pinning.
SHA256 can be set to "SKIP" for git sources.
- check-updates command: queries upstream APIs (GitHub releases/tags)
to find available updates. Packages set [source].update_check URL.
- CheckUpdates CLI subcommand wired into main.rs
Package changes:
- FreeCAD updated to weekly-2026.03.19 development builds
- dwl: added update_check URL and git source documentation
- src/repos extracted to standalone git repo (danny8632/repos.git)
and added as git submodule
Documentation:
- All 7 README.md files updated with detailed requirements sections
including which Linux distros are supported, exact package names
for Arch/Ubuntu/Fedora, and clear notes about which components
require Linux vs can be built on macOS
- dpack README: added git source and check-updates documentation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>