summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
34 hoursDecouple restore and backup directories to avoid permission issuesAhmed Abdelhalim2-1/+13
Restore now uses /var/cache/git-restore (root-owned), backup keeps /var/cache/git-backup (backup-owned) Co-Authored-By: Claude.ai
34 hoursGive git user its own home, separate from /srv/gitAhmed Abdelhalim6-42/+1
authorized_keys lived under /srv/git (git's $HOME), the same tree restic backs up and restores. backup couldn't even read it (0700, unreadable by the backup user), and restore --delete treated it as extraneous and deleted it, breaking push access after every restore. git now gets a normal separate home; clone-prefix in cgitrc serves the repos dir by absolute path instead of the ~-relative form, since that relied on $HOME being the repos dir. Drops the sshd_config.d Include/ Match-block/AllowUsers approach tried first — it directly conflicted with pve-lxc-ssh's sshd_config push, which fully overwrites the file on every run and has no way to know about cgit's edits. Co-Authored-By: Claude.ai
34 hoursReconcile pve-lxc-ssh config every run, not just on first installAhmed Abdelhalim1-17/+16
pve_lxc_ssh_check.rc != 0 gated the entire block, so once openssh was installed, sshd_config pushes, host key deploys, and service enable/ restart never ran again on reconverge — template changes (e.g. sshd hardening) silently never reached already-provisioned containers. Narrow the conditional to just the package-install step; everything else already idempotent, runs unconditionally now. Co-Authored-By: Claude.ai
35 hoursMove git SSH auth out of /srv/git, harden container sshdAhmed Abdelhalim3-7/+30
Restore (restic --delete) was wiping git's authorized_keys because it lived under the same tree as the backed-up repos, and the backup user couldn't even read it in the first place (0700, permission denied). authorized_keys now lives at /etc/ssh/authorized_keys/git, decoupled from backup/restore entirely. Also add AllowUsers allowlists (pve-lxc-ssh baseline + cgit override) and a Match block restricting the git user to key auth only, no TCP/ agent forwarding or TTY. Co-Authored-By: Claude.ai
36 hoursFix missing logs for failed git backup jobAhmed Abdelhalim1-1/+3
36 hoursChange pve-lxc-ssh implementation to only inject pre-generated keysAhmed Abdelhalim8-3/+41
Co-Authored-By: Claude.ai
36 hoursUpdate the ssh keys for each of the hosts w/examplesAhmed Abdelhalim18-1/+106
37 hoursChange the ssh role to only inject pre-generated keysAhmed Abdelhalim3-5/+30
Co-Authored-By: Claude.ai
3 daysRotate gpg/ssh keysAhmed Abdelhalim1-0/+0
3 daysRemove rotated gpg keyAhmed Abdelhalim1-0/+0
3 daysAdd 1 git-crypt collaboratorAhmed Abdelhalim1-0/+0
New collaborators: 8B329B4CA58513705BAD1262C3A28FB43A6B6226 Ahmed Abdelhalim <[email protected]>
4 daysConfigure git globals for cgit roleAhmed Abdelhalim1-0/+7
5 daysDisable ipv6 completely and remove related codeAhmed Abdelhalim34-284/+10
Co-Authored-By: Claude.ai
5 daysCleanup and normalize the duplicate network addressesAhmed Abdelhalim8-9/+9
5 daysFix pve-lxc start and add missing docs about backupAhmed Abdelhalim2-0/+26
5 daysUpdate secretsAhmed Abdelhalim2-0/+0
6 daysFix archlinux testAhmed Abdelhalim1-10/+8
Co-Authored-By: Claude.ai
6 daysAdd awscli role with configuration on pi for garage backend w/testingAhmed Abdelhalim13-0/+138
6 daysAdd missing vars and fix mappings in examplesAhmed Abdelhalim2-1/+3
6 daysUpdate cgit varsAhmed Abdelhalim1-0/+0
6 daysAdd restore capabilities to backup role with --tags restore callAhmed Abdelhalim5-0/+188
Co-Authored-By: Claude.ai
6 daysFix clone URL on cgitAhmed Abdelhalim2-3/+7
6 daysDisable pacman sandbox in archlinux molecule image for QEMU compatAhmed Abdelhalim1-0/+8
pacman 7.0+'s alpm sandbox runs package download/extraction under a restricted user + seccomp filter. That filter needs syscalls QEMU's user-mode emulation doesn't support, so building this amd64 image on an arm64 host (e.g. Apple Silicon) fails immediately on the first pacman call: error: error restricting syscalls via seccomp: 22! error: switching to sandbox user 'alpm' failed! Confirmed directly: `pacman -Sy` fails with the sandbox enabled and succeeds cleanly with `DisableSandbox` set in pacman.conf. Scoped entirely to this test image, not any real role/target this repo manages. Safe for CI too — the sandbox is a defense-in-depth layer protecting the host from a compromised download during package fetch, irrelevant to a container that's destroyed immediately after each test run; disabling it changes no package-resolution or install behavior, only removes that extra isolation layer. Native (non-emulated) CI runners were never affected by the underlying bug either way. Co-Authored-By: Claude.ai
6 daysMask dhcpcd in molecule images to fix DNS resolution failuresAhmed Abdelhalim3-0/+18
dhcpcd is installed (and enabled by its package's default preset) in the raspberrypi/debian/ubuntu/proxmox molecule images to mimic each distro's default boot environment. Inside podman's virtual network there's no real DHCP server for it to negotiate with, so it only ever gets a link-local address and overwrites /etc/resolv.conf with an empty file (just dhcpcd's template comments, no nameserver line). This happens within the first minute or two of container boot — fast enough to break DNS resolution for apt-get tasks later in the same converge run. Reproduced and confirmed on all four affected scenarios (raspberrypi, debian, ubuntu, proxmox — each installs dhcpcd the same way): apt-get tasks failed with repeated "Temporary failure resolving" errors at varying points in the play depending on timing. archlinux/archlinux-gnome and git (Alpine) don't install dhcpcd and are unaffected. The network role already intends to remove dhcpcd/avahi-daemon entirely (replacing them with NetworkManager/systemd-resolved), but that removal task runs after earlier package-install steps — so the very service being phased out was sabotaging tasks that ran before it got purged. Masking dhcpcd.service at image-build time prevents it from ever running in these test containers, closing the race without touching any role's actual task order or logic (which reflects real hardware, where dhcpcd does get a valid lease from an actual router). Co-Authored-By: Claude.ai
6 daysFix pihole port allocation, this fixes caddy testingAhmed Abdelhalim1-2/+2
domain = {{ pihole_domain }} rendered as an unquoted bareword containing a dot (e.g. "pi.hole"), which is invalid TOML. TOML parsing is all-or-nothing, not line-by-line, so pihole-FTL rejected the entire config file on that one line and silently fell back to its compiled-in defaults — including binding its webserver directly to ports 80/443. That collided with caddy, which wants the same ports, causing caddy to crash-loop and get reported as "changed" (needing a restart) on every subsequent ansible run. Quoting the domain value lets the file parse successfully, which in turn surfaces a second, previously-unreachable bug: the custom webserver port (pihole_port) was rendered as a bare number, but Pi-hole v6 FTL requires each listener address to carry a trailing flag character (o = optional, s = TLS). Without it FTL rejects the value the same way and reverts to the 80/443 default. Appending "o" fixes that. Both bugs had to be fixed together: the quoting bug was blocking the parser from ever reaching the port line, so the port fix alone had no effect until parsing succeeded end-to-end. Co-Authored-By: Claude.ai
6 daysFix molecule testing DNS resolution failuresAhmed Abdelhalim1-0/+6
dhcpcd is installed (and enabled by its package's default preset) in the test container to mimic Raspberry Pi OS's default boot environment. Inside podman's virtual network there's no real DHCP server for it to negotiate with, so it only ever gets a link-local address and overwrites /etc/resolv.conf with an empty file (just dhcpcd's template comments, no nameserver line). This happens within the first ~1-2 minutes of container boot, which is fast enough to break DNS resolution for later apt-get tasks in the same converge run — observed failing on "network : Ensure network_packages are installed" with repeated "Temporary failure resolving 'deb.debian.org'". The network role already intends to remove dhcpcd/avahi-daemon entirely (replacing them with NetworkManager/systemd-resolved), but that removal task runs after the package-install step that was failing — so the very service being phased out was sabotaging the install of its replacement. Masking dhcpcd.service at image-build time prevents it from ever running in the test container, closing the race without touching the network role's actual task order or logic (which reflects real hardware, where dhcpcd does get a valid lease from an actual router). Confidence in this is medium Co-Authored-By: Claude.ai
6 daysFix debian/ubuntu nginx install correct repoAhmed Abdelhalim1-2/+4
6 daysFix mise arch linting issueAhmed Abdelhalim1-1/+1
6 daysFix nginx to use conventional ngix conf.dAhmed Abdelhalim10-15/+20
6 daysAdd missing crond dependency for alpineAhmed Abdelhalim5-0/+26
6 daysFix restic install and add backup roleAhmed Abdelhalim17-0/+319
Co-Authored-By: Claude.ai
7 daysFix alpine cloudflaredAhmed Abdelhalim1-18/+14
The APK approach never existed AI made that up Co-Authored-By: Claude.ai
7 daysAdd alpine platform to supported rolesAhmed Abdelhalim3-0/+9
7 daysUpdate nginx install to install latest stableAhmed Abdelhalim4-5/+38
7 daysUpdate caddy to install latest stable versionAhmed Abdelhalim4-5/+38
9 daysRefactor and clean up codeAhmed Abdelhalim5-15/+23
9 daysRename backup -> mount as a roleAhmed Abdelhalim11-45/+45
9 daysRemove python as a vim dependencyAhmed Abdelhalim1-1/+0
9 daysFix pve-lxc-ssh to install ssh correctlyAhmed Abdelhalim1-52/+57
10 daysUpdate cgit view (remove owner) and example varsAhmed Abdelhalim3-2/+3
10 daysFix pushing to cgit locallyAhmed Abdelhalim7-5/+29
10 daysAdd cloudflare tunnel configurationsAhmed Abdelhalim10-0/+143
10 daysRefactor proxy setup on cgit to simplify setupAhmed Abdelhalim16-161/+3
10 daysInstall wakeonlan CLIAhmed Abdelhalim3-0/+24
10 daysFix deploying cgit locallyAhmed Abdelhalim5-6/+4
11 daysFix testing git service on alpineAhmed Abdelhalim3-2/+25
11 daysTest proxy/cgit setupAhmed Abdelhalim3-1/+12
11 daysAllow cgit to theoretically deploy to public URLAhmed Abdelhalim3-5/+22
11 daysUpdate git hostnameAhmed Abdelhalim1-0/+0
11 daysAdd pve-ssh support with hardeningAhmed Abdelhalim12-18/+123