The Gitea server at git.dannyhaslund.dk has a TLS SNI issue that
causes 'tlsv1 unrecognized name' errors from inside VMs. Adding
GIT_SSL_NO_VERIFY=true for the clone since it's a trusted self-hosted
server on the local network.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The cat heredoc inside cloud-init runcmd was indented, causing the
shebang line to become " #!/bin/bash" (with leading spaces) which
makes the script fail to execute as a proper interpreter.
Fixed by removing indentation from the heredoc body. Also improved
the error message to explain that the clone likely failed during
provisioning and show the manual clone command.
Added tmux kill-session before starting new session to avoid
"duplicate session" errors on re-run.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>