Files
computer-playbook/scripts/system/network/dns/setup
kevinveenbirkenbachandClaude Opus 5 96df7ea0eb feat(env): give every checkout its own stack domain
Every stack answered to *.infinito.test, and the host resolver pointed that
zone at 127.0.0.1, so a worktree's stack on its own bind IP could not be opened
in a browser while the primary stack existed.

INFINITO_DOMAIN is now derived per checkout: main.infinito.test for the
primary one, and for a linked worktree its branch, lowercased with everything
outside a-z0-9_- turned into "-", below INFINITO_DNS_DOMAIN
(feature/store-i18n -> feature-store-i18n.infinito.test). The branch is read
from the worktree's gitdir HEAD instead of running git, because git refuses the
mounted checkout inside the stack container. GitHub and act runs keep the
static default, custom.env still wins.

The handler overrides the caller's value on purpose: inside the stack
container that value is the previous .env, which make setup rewrote on every
deploy, so the old domain kept feeding itself back into the next compose up.

make network-dns-setup routes each stack's domain to the INFINITO_BIND_IP in
that checkout's .env, with a local= line so AAAA answers NODATA instead of the
primary stack's ::1. It skips domains outside the base zone, which a stale
.env still carries, and fails when two checkouts claim one domain.
worktree-up prints the domain and the follow-up command.

Existing checkouts switch after make dotenv-force and a redeploy.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 17:44:38 +02:00
..

DNS Setup Scripts 🌐

This directory contains platform-specific scripts for setting up local DNS resolution for the infinito.test domain (and subdomains) on the development machine.

All scripts map *.infinito.test → 127.0.0.1 so that local deployments are reachable via their expected hostnames.

Every stack has its own domain below it (INFINITO_DOMAIN): the primary checkout is main.infinito.test, a worktree from make worktree-up is its branch lowercased with every character outside a-z0-9_- replaced by - (feature/store-i18n → feature-store-i18n.infinito.test). linux.sh routes each stack's domain to that checkout's INFINITO_BIND_IP, read from the .env of every git worktree list entry. Re-run make network-dns-setup after creating or removing a worktree.


Scripts 📄

linux.sh 🐧

General-purpose DNS setup for Linux systems. Supports multiple strategies depending on the environment:

  • NetworkManager + dnsmasq. preferred path when NetworkManager is active; configures the NM dnsmasq plugin with a wildcard zone entry.
  • System dnsmasq. fallback when NetworkManager is not running; configures a standalone dnsmasq service.
  • /etc/hosts fallback. used in non-systemd environments (e.g. Docker containers, LXC) where service management is unavailable; writes a managed block of host entries directly into the hosts file.

Shared helper functions are sourced from ../common.sh.

wsl.sh 🪟

WSL2-specific DNS setup. Only executes when running inside a WSL2 environment (detected via /proc/version). Configures:

  • dnsmasq with the discovered WSL2 upstream DNS gateway as forwarder.
  • systemd-resolved stub listener disabled to avoid port conflicts.
  • /etc/resolv.conf pointed at the local dnsmasq instance (127.0.0.1).
  • /etc/wsl.conf set to generateResolvConf=false to prevent WSL from overwriting the resolver config on restart.