diff --git a/docker-network.sh b/docker-network.sh new file mode 100644 index 0000000..08faf1e --- /dev/null +++ b/docker-network.sh @@ -0,0 +1,92 @@ +#!/bin/bash +set -euo pipefail + +DOCKER_CONFIG="/etc/docker/daemon.json" +JQ=$(command -v jq || true) + +if [[ -z "$JQ" ]]; then + echo "❌ jq is required but not installed." + exit 1 +fi + +# Step 1: Check if default-address-pools exists and extract current second octet +DEFAULT_OCTET="" +if [[ -f "$DOCKER_CONFIG" ]] && grep -q '"default-address-pools"' "$DOCKER_CONFIG"; then + BASE=$(jq -r '.["default-address-pools"][0].base' "$DOCKER_CONFIG") + if [[ "$BASE" =~ ^10\.([0-9]+)\. ]]; then + DEFAULT_OCTET="${BASH_REMATCH[1]}" + echo "Found existing default-address-pools base: $BASE" + fi +fi + +# Step 2: Ask for second octet (suggest default if available) +USE_EXISTING_CONFIG=false + +if [[ -n "$DEFAULT_OCTET" ]]; then + read -rp "Use existing second octet ($DEFAULT_OCTET)? [Y/n]: " confirm + confirm=${confirm:-Y} + if [[ "$confirm" =~ ^[Nn]$ ]]; then + read -rp "Enter new second octet (e.g. 102): " OCTET + else + OCTET="$DEFAULT_OCTET" + USE_EXISTING_CONFIG=true + fi +else + read -rp "Enter second octet for Docker address pool (e.g. 102): " OCTET +fi + +# Validate input +if ! [[ "$OCTET" =~ ^[0-9]+$ ]] || ((OCTET < 1 || OCTET > 254)); then + echo "❌ Invalid octet: $OCTET" + exit 1 +fi + +# Step 3: Write daemon.json (overwrite or create) only if needed +if [[ "$USE_EXISTING_CONFIG" == false ]]; then + echo "Writing Docker daemon config with base: 10.${OCTET}.0.0/16" + sudo mkdir -p /etc/docker + cat < /dev/null +{ + "default-address-pools": [ + { + "base": "10.${OCTET}.0.0/16", + "size": 24 + } + ] +} +EOF + + echo "Restarting Docker..." + sudo systemctl restart docker +else + echo "🟡 Skipping daemon config update and Docker restart (using existing settings)" +fi + +# Step 4: Create standard networks +declare -A networks +networks[internet]="10.${OCTET}.100.0/24" +networks[pangolin_transport]="10.${OCTET}.200.0/24" + +for name in "${!networks[@]}"; do + subnet="${networks[$name]}" + if docker network inspect "$name" >/dev/null 2>&1; then + echo "✅ Network '$name' already exists." + else + echo "Creating network '$name' with subnet $subnet" + + if [[ "$name" == "internet" ]]; then + docker network create \ + --driver=bridge \ + --subnet="$subnet" \ + "$name" + else + docker network create \ + --driver=bridge \ + --subnet="$subnet" \ + --internal \ + "$name" + fi + fi +done + +echo "✅ Done. Docker daemon configured and standard networks created."