client: add one-line installer and its CDN publish workflow#3867
Merged
Conversation
Add client/install.sh (the curl | bash installer served at get.doublezero.xyz/install) and release.install-script.yml, which uploads it to the doublezero-install S3 bucket and invalidates CloudFront on pushes to main. Auth is GitHub OIDC into a main-only deploy role; hosting is documented in the infra repo runbook.
Contributor
Author
|
Pre-merge validation:
|
packethog
approved these changes
Jun 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary of Changes
client/install.sh— thecurl … | bashinstaller served athttps://get.doublezero.xyz/install. It checks for Docker (offering to install it), preps the host for GRE (tun/ip_gre modules, firewall + cloud-firewall warnings), prompts for environment and keypair, runs the thindoublezeroclient container with the right capabilities, and connects.release.install-script.yml— on pushes tomaintouching the script, it uploadsinstall.shto thedoublezero-installS3 bucket and invalidates CloudFront, authenticating via GitHub OIDC into a main-only deploy role (no static keys).The S3/CloudFront hosting infrastructure is documented in the infra repo runbook (
install-script-hosting.md).Diff Breakdown
Two additive files: the installer (a self-contained bash script) and a small OIDC publish workflow; no application code touched.
Key files (click to expand)
client/install.sh— host-side installer: preconditions (Linux/amd64/root), Docker detect+install, GRE prep, cloud-firewall detection (AWS/GCP/Azure), keypair bind-mount with path validation + SELinux relabel,docker runwith--network host/NET_ADMIN/NET_RAW//dev/net/tun, connect, and status. Reads prompts from/dev/ttyso it works undercurl | bash, and is fully overridable via env vars for non-interactive use..github/workflows/release.install-script.yml— OIDC → S3 upload + CloudFront invalidation onmainchanges to the script (workflow_dispatchfor manual republish).Testing Verification
doublezero statusall worked; verified both thecurl|bash(self-sudo) andsudo bashinvocation paths, and NOPASSWD-sudo detection.install.shwithbash -nand the workflow withactionlint(clean).https://get.doublezero.xyz/installis served by CloudFront (HTTP 200,text/x-shellscript, valid TLS). The deploy role + bucket + distribution already exist; the workflow's first real run happens on merge tomain.Notes for reviewers
env:block rather than using secrets — they're not sensitive and are also captured in the infra runbook. Easy to switch to repo variables if preferred.id-token: writeusages are for PyPI trusted publishing), so it introducesaws-actions/configure-aws-credentials.