Here's what the project contains:
Structure: All scripts live in scripts/ and are designed to be run standalone or composed via combine.sh.
Existing scripts:
| Script | Purpose |
|--------|---------|
| combine.sh | Orchestrator — chains scripts with per-script args |
| docker.sh | Docker from official repo |
| podman.sh | Podman container runtime |
| packages.sh | Generic apt package installer |
| k3s-node.sh | Single-node k3s + nginx ingress + cert-manager |
| stack.sh | Stack deployment tool |
| health.sh | Cloud-init health check HTTP server |
| fqdn.sh | Set FQDN from env var |
| error.sh | Test script (intentional failure) |
Conventions the scripts follow:
- set -eo pipefail for error handling
- MACHINE_SCRIPT_DEBUG env var enables set -x
- DEBIAN_FRONTEND=noninteractive + NEEDRESTART_MODE=a
- Standard APT_INSTALL alias with sudo --preserve-env=...
- maybe_install() helper to skip already-installed packages
- Idempotency checks (which <tool> before installing, -f to force)
- Clear logging with separator lines and echo "$0 called with $*"
- getopts or while/case for argument parsing
Now — what web remote access service did you have in mind? (e.g. Apache Guacamole, Cockpit, Teleport, Meshcentral, something else?)