From 90da2f5a913108cd95897b2ba5ba49face8d7aa0 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 22 Aug 2026 03:20:36 +0000 Subject: [PATCH] Rename Asterisk container from easy-asterisk to asterisk New installs now name the container "asterisk", matching every other service's container_name == service name convention, instead of reusing the vendored easy-asterisk CLI tool's own name (which stays /usr/local/bin/easy-asterisk inside the container, unrelated and unchanged). An existing "easy-asterisk" install is never silently renamed: every place that resolves the container name (_asterisk_resolve_layout in asterisk.sh, plus the duplicated copies in security-dashboard.sh, sms-inbound.sh, pstn-trunk.sh, and tools/pstn-test-check.sh's docker ps detection) now reads it from the box's own docker-compose.yml instead of assuming it, falling back to "asterisk" only when there's no existing install to read. Migrating a live box to the new name is a one-time manual action (edit docker-compose.yml's container_name for Asterisk and its coturn sidecar, docker compose down + up -d); every sibling service then picks it up automatically on its next run. The DigitalOcean-droplet layout (asterisk-digital-ocean directory, easy-asterisk-do container) is untouched by this - that naming stays exactly as documented for pre-merge droplet installs. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SpKTLpwAgZNooTacWeQLuc --- CLAUDE.md | 25 ++++++++++++++++++++----- services/asterisk.sh | 23 +++++++++++++++++++++-- services/pstn-trunk.sh | 27 +++++++++++++++++++++------ services/security-dashboard.sh | 10 +++++++++- services/sms-inbound.sh | 10 +++++++++- tools/pstn-test-check.sh | 11 +++++++---- 6 files changed, 87 insertions(+), 19 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 0bd7821..fd75310 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -44,11 +44,26 @@ public-FQDN-only flow, hand-built Caddy site block, remote Authelia, Cloud Firewall — behind that one answer. Two lessons worth reusing: - **Don't rename a live install's directory or containers.** New installs - land in `~/docker/asterisk` with `easy-asterisk`; a pre-merge droplet keeps - `~/docker/asterisk-digital-ocean` and `easy-asterisk-do`, because its - Caddyfile block, UFW rules, Cloud Firewall, CrowdSec acquisition and PSTN - trunk all name those exact paths. `_asterisk_resolve_layout()` picks - whichever exists, and every sibling service probes both. + land in `~/docker/asterisk` with a container named `asterisk`; a pre-merge + droplet keeps `~/docker/asterisk-digital-ocean` and `easy-asterisk-do`, + because its Caddyfile block, UFW rules, Cloud Firewall, CrowdSec + acquisition and PSTN trunk all name those exact paths. + `_asterisk_resolve_layout()` picks whichever directory exists, and every + sibling service probes both. The plain container name was itself renamed + once already — from `easy-asterisk` (this repo's original choice, reusing + the vendor CLI tool's own name, `/usr/local/bin/easy-asterisk` inside the + container — unrelated, never renamed) to plain `asterisk`, matching every + other service's own `container_name == service name` convention. The same + "don't rename under a running deployment" rule applied: every resolver + (`_asterisk_resolve_layout()` and the duplicated copies in + `security-dashboard.sh`, `sms-inbound.sh`, `pstn-trunk.sh`, + `tools/pstn-test-check.sh`) reads the container name out of the box's own + `docker-compose.yml` instead of assuming it, so an existing `easy-asterisk` + install keeps working unchanged. Migrating one to the new name is a + deliberate, one-time action on that box (edit `docker-compose.yml`'s + `container_name:` for both Asterisk and its coturn sidecar, `docker compose + down` + `up -d`) — once done, every sibling service re-reads it from that + same file and follows automatically. - **Check whether a "flavor-specific" behavior was actually flavor-specific.** The Asterisk security-logging patch and the `logs/full` logrotate config were droplet-only purely because that's where they got written first — the diff --git a/services/asterisk.sh b/services/asterisk.sh index c67c9fb..7265000 100644 --- a/services/asterisk.sh +++ b/services/asterisk.sh @@ -298,6 +298,21 @@ register_service asterisk homelab "Easy Asterisk PBX (intercom/VoIP; auto-tunes # naming. Every sibling service in this repo (pstn-trunk, security-dashboard, # crowdsec) already probes for both directories, so both layouts stay fully # supported without further special-casing. +# +# Container name itself: new installs use the plain "asterisk" (matching +# every other service's own container_name == service name convention — +# "easy-" was this repo's install-time container name before, left over from +# when the vendor CLI tool's own name (`easy-asterisk`, still installed at +# /usr/local/bin/easy-asterisk inside the container — unrelated, never +# renamed) got reused for the container too. A box that already has a +# running container is read directly from its own docker-compose.yml instead +# of assumed from the directory, so an existing "easy-asterisk" install +# keeps working with no silent rename — same reasoning as the droplet-layout +# preservation above, just one level down (container name, not directory). +# Migrating an existing box to the new name is a deliberate, one-time action +# (edit docker-compose.yml's container_name + coturn, `docker compose down` +# + `up -d`) — once done, every sibling service here re-reads it from that +# same file and follows automatically, no further changes needed anywhere. _asterisk_resolve_layout() { if [[ -f "$DOCKER_DIR/asterisk-digital-ocean/docker-compose.yml" ]]; then ASTERISK_DIR="$DOCKER_DIR/asterisk-digital-ocean" @@ -306,9 +321,13 @@ _asterisk_resolve_layout() { ASTERISK_PROJECT="asterisk-do" else ASTERISK_DIR="$DOCKER_DIR/asterisk" - ASTERISK_CONTAINER="easy-asterisk" - ASTERISK_COTURN="easy-asterisk-coturn" ASTERISK_PROJECT="asterisk" + ASTERISK_CONTAINER="" + if [[ -f "$ASTERISK_DIR/docker-compose.yml" ]]; then + ASTERISK_CONTAINER="$(grep -m1 '^[[:space:]]*container_name:' "$ASTERISK_DIR/docker-compose.yml" | awk '{print $2}')" + fi + [[ -z "$ASTERISK_CONTAINER" ]] && ASTERISK_CONTAINER="asterisk" + ASTERISK_COTURN="${ASTERISK_CONTAINER}-coturn" fi } diff --git a/services/pstn-trunk.sh b/services/pstn-trunk.sh index cb8d180..15ab16c 100644 --- a/services/pstn-trunk.sh +++ b/services/pstn-trunk.sh @@ -1436,7 +1436,7 @@ _pstn_check_killswitch_clear() { # _pstn_install_periodic_timer above) ─────────────────────────────────────── _pstn_write_usage_alert_script() { local FILE="$1" EA_DIR="$2" ASTERISK_DIR="$3" RATE="$4" MONTH_THRESHOLD="$5" \ - BURST_THRESHOLD="$6" MAX_MONTHLY_SPEND="$7" NTFY_URL="$8" CONTAINER_NAME="${9:-easy-asterisk}" + BURST_THRESHOLD="$6" MAX_MONTHLY_SPEND="$7" NTFY_URL="$8" CONTAINER_NAME="${9:-asterisk}" cat > "$FILE" << 'EOF' #!/bin/bash # Auto-generated by services/pstn-trunk.sh — do not edit directly, re-run @@ -1719,7 +1719,7 @@ _pstn_apply_settings() { local EA_DIR="$1" ASTERISK_DIR="$2" local SERVER="$3" SERVER_IPS="$4" DID="$5" local RING_EXTS="$6" NTFY_URL="$7" RATE="$8" MONTH_THRESHOLD="$9" BURST_THRESHOLD="${10}" - local PROVIDER_NAME="${11}" MAX_MONTHLY_SPEND="${12:-0}" CONTAINER_NAME="${13:-easy-asterisk}" + local PROVIDER_NAME="${11}" MAX_MONTHLY_SPEND="${12:-0}" CONTAINER_NAME="${13:-asterisk}" _pstn_patch_vendor_files "$EA_DIR" || return 1 @@ -1879,8 +1879,18 @@ install_pstn-trunk() { local KILLSWITCH_FILE="$ASTERISK_DIR/pstn-trunk-killswitch.conf" local PERSONAL_DIDS_FILE="$ASTERISK_DIR/pstn-personal-dids.conf" local SETTINGS_FILE="$EA_DIR/.pstn-trunk.env" - local CONTAINER_NAME="easy-asterisk" - [[ "$ASTERISK_KIND" == "asterisk-digital-ocean" ]] && CONTAINER_NAME="easy-asterisk-do" + # Read the box's own container_name instead of assuming — new installs + # use plain "asterisk" now, but an existing "easy-asterisk" install + # (this repo's container name before that rename) keeps working + # unchanged until someone deliberately migrates it. See + # services/asterisk.sh's _asterisk_resolve_layout for the reasoning. + local CONTAINER_NAME="asterisk" + if [[ "$ASTERISK_KIND" == "asterisk-digital-ocean" ]]; then + CONTAINER_NAME="easy-asterisk-do" + elif [[ -f "$EA_DIR/docker-compose.yml" ]]; then + CONTAINER_NAME="$(grep -m1 '^[[:space:]]*container_name:' "$EA_DIR/docker-compose.yml" | awk '{print $2}')" + [[ -z "$CONTAINER_NAME" ]] && CONTAINER_NAME="asterisk" + fi if [ "$DRY_RUN" = true ]; then echo "[DRY-RUN] Would require an existing asterisk install (droplet or home/LAN)" @@ -1988,8 +1998,13 @@ install_pstn-trunk() { # never picking up dialplan changes at all. Re-assert the fresh # detection here, discarding the sourced value, so it can't drift # from reality and self-heals the persisted file too. - CONTAINER_NAME="easy-asterisk" - [[ "$ASTERISK_KIND" == "asterisk-digital-ocean" ]] && CONTAINER_NAME="easy-asterisk-do" + CONTAINER_NAME="asterisk" + if [[ "$ASTERISK_KIND" == "asterisk-digital-ocean" ]]; then + CONTAINER_NAME="easy-asterisk-do" + elif [[ -f "$EA_DIR/docker-compose.yml" ]]; then + CONTAINER_NAME="$(grep -m1 '^[[:space:]]*container_name:' "$EA_DIR/docker-compose.yml" | awk '{print $2}')" + [[ -z "$CONTAINER_NAME" ]] && CONTAINER_NAME="asterisk" + fi _pstn_check_killswitch_clear "$ASTERISK_DIR" _pstn_apply_settings "$EA_DIR" "$ASTERISK_DIR" \ "$TRUNK_SERVER" "${TRUNK_SERVER_IPS:-}" "$TRUNK_DID" \ diff --git a/services/security-dashboard.sh b/services/security-dashboard.sh index 6401e44..b6763dc 100644 --- a/services/security-dashboard.sh +++ b/services/security-dashboard.sh @@ -105,7 +105,15 @@ install_security-dashboard() { if [[ "$ASTERISK_EA_DIR" == *asterisk-digital-ocean ]]; then ASTERISK_EA_CONTAINER="easy-asterisk-do" elif [ -n "$ASTERISK_EA_DIR" ]; then - ASTERISK_EA_CONTAINER="easy-asterisk" + # Read the box's own container_name instead of assuming — new + # installs use plain "asterisk" now, but an existing "easy-asterisk" + # install (this repo's container name before that rename) keeps + # working unchanged until someone deliberately migrates it. See + # services/asterisk.sh's _asterisk_resolve_layout for the reasoning. + if [[ -f "$ASTERISK_EA_DIR/docker-compose.yml" ]]; then + ASTERISK_EA_CONTAINER="$(grep -m1 '^[[:space:]]*container_name:' "$ASTERISK_EA_DIR/docker-compose.yml" | awk '{print $2}')" + fi + [[ -z "$ASTERISK_EA_CONTAINER" ]] && ASTERISK_EA_CONTAINER="asterisk" fi echo "" diff --git a/services/sms-inbound.sh b/services/sms-inbound.sh index 1681d88..340aa23 100644 --- a/services/sms-inbound.sh +++ b/services/sms-inbound.sh @@ -53,7 +53,15 @@ _sms_detect_container_name() { if [[ "$_ea_dir" == *asterisk-digital-ocean ]]; then echo "easy-asterisk-do" else - echo "easy-asterisk" + # Read the box's own container_name instead of assuming — new + # installs use plain "asterisk" now, but an existing "easy-asterisk" + # install (this repo's container name before that rename) keeps + # working unchanged until someone deliberately migrates it. See + # services/asterisk.sh's _asterisk_resolve_layout for the reasoning. + local _name="" + [[ -f "$_ea_dir/docker-compose.yml" ]] && \ + _name="$(grep -m1 '^[[:space:]]*container_name:' "$_ea_dir/docker-compose.yml" | awk '{print $2}')" + echo "${_name:-asterisk}" fi } diff --git a/tools/pstn-test-check.sh b/tools/pstn-test-check.sh index eb46388..8157e24 100755 --- a/tools/pstn-test-check.sh +++ b/tools/pstn-test-check.sh @@ -56,9 +56,13 @@ fi # ── Container + directory detection ───────────────────────────────────────── section "Detecting install" -CONTAINER="$(docker ps --format '{{.Names}}' 2>/dev/null | grep -m1 -E '^easy-asterisk(-do)?$' || true)" +# "asterisk" is this repo's current container name; "easy-asterisk" is what +# an install kept from before that rename (never silently renamed under a +# running deployment); "easy-asterisk-do"/"asterisk-do" cover a DigitalOcean +# droplet install, old or new naming. Whichever is actually running wins. +CONTAINER="$(docker ps --format '{{.Names}}' 2>/dev/null | grep -m1 -E '^(easy-)?asterisk(-do)?$' || true)" if [ -z "$CONTAINER" ]; then - fail "No running easy-asterisk / easy-asterisk-do container found — is asterisk installed and started?" + fail "No running asterisk / easy-asterisk / *-do container found — is asterisk installed and started?" echo "" echo " $PASS passed, $WARN warnings, $FAIL failed. Stopping — nothing else can be checked without a running container." exit 1 @@ -196,8 +200,7 @@ if [ -z "$TURN_SERVER" ]; then warn "Add it via: sudo ./setup.sh asterisk (update mode)" else if grep -q '^ coturn:' "$EA_DIR/docker-compose.yml" 2>/dev/null; then - COTURN_CONTAINER="easy-asterisk-coturn" - [[ "$CONTAINER" == *-do ]] && COTURN_CONTAINER="easy-asterisk-do-coturn" + COTURN_CONTAINER="${CONTAINER}-coturn" ok "Using an embedded, per-Asterisk coturn ($COTURN_CONTAINER); tested separately below." else COTURN_CONTAINER="coturn"