1
0
mirror of https://github.com/mailcow/mailcow-dockerized.git synced 2026-01-01 19:19:17 +00:00

initial commit for script overhauls

This commit is contained in:
DerLinkman
2025-05-26 17:09:58 +02:00
parent f8ce7a71e6
commit 5a532df8ce
6 changed files with 671 additions and 1303 deletions

108
_modules/ipv6_controller.sh Normal file
View File

@@ -0,0 +1,108 @@
#!/usr/bin/env bash
# _modules/ipv6_controller.sh
# 1) Check if the host supports IPv6
get_ipv6_support() {
if grep -qs '^1' /proc/sys/net/ipv6/conf/all/disable_ipv6 2>/dev/null \
|| ! ip -6 route show default &>/dev/null; then
ENABLE_IPV6_LINE="ENABLE_IPV6=false"
echo "IPv6 not detected on host disabling IPv6 support."
else
ENABLE_IPV6_LINE="ENABLE_IPV6=true"
echo "IPv6 detected on host leaving IPv6 support enabled."
fi
}
# 2) Ensure Docker daemon.json has the required IPv6 settings
docker_daemon_edit(){
DOCKER_DAEMON_CONFIG="/etc/docker/daemon.json"
MISSING=()
# helper: check for a key/value in the JSON
_has_kv() { grep -Eq "\"$1\"\s*:\s*$2" "$DOCKER_DAEMON_CONFIG" 2>/dev/null; }
if [[ -f "$DOCKER_DAEMON_CONFIG" ]]; then
# Validate JSON syntax if jq is available
if command -v jq &>/dev/null; then
if ! jq empty "$DOCKER_DAEMON_CONFIG" &>/dev/null; then
echo "ERROR: Invalid JSON in $DOCKER_DAEMON_CONFIG please correct it manually."
exit 1
fi
else
echo "WARNING: jq not found JSON syntax not validated."
fi
# Check required settings
! _has_kv ipv6 true && MISSING+=("ipv6: true")
! grep -Eq '"fixed-cidr-v6"\s*:\s*".+"' "$DOCKER_DAEMON_CONFIG" \
&& MISSING+=('fixed-cidr-v6: "fd00:dead:beef:c0::/80"')
# Determine Docker major version
DOCKER_MAJOR=$(docker version --format '{{.Server.Version}}' 2>/dev/null | cut -d. -f1)
if [[ -n "$DOCKER_MAJOR" && "$DOCKER_MAJOR" -lt 27 ]]; then
_has_kv ipv6 true && ! _has_kv ip6tables true \
&& MISSING+=("ip6tables: true")
! _has_kv experimental true \
&& MISSING+=("experimental: true")
else
echo "Docker ≥27 detected skipping ip6tables/experimental checks."
fi
# If anything is missing, offer to auto-fix
if ((${#MISSING[@]}>0)); then
echo "Your daemon.json is missing: ${MISSING[*]}"
read -p "Would you like to update $DOCKER_DAEMON_CONFIG now? [Y/n] " ans
ans=${ans:-Y}
if [[ $ans =~ ^[Yy]$ ]]; then
cp "$DOCKER_DAEMON_CONFIG" "${DOCKER_DAEMON_CONFIG}.bak"
if command -v jq &>/dev/null; then
TMP=$(mktemp)
JQ_FILTER='.ipv6 = true | .["fixed-cidr-v6"] = "fd00:dead:beef:c0::/80"'
[[ "$DOCKER_MAJOR" && "$DOCKER_MAJOR" -lt 27 ]] \
&& JQ_FILTER+=' | .ip6tables = true | .experimental = true'
jq "$JQ_FILTER" "$DOCKER_DAEMON_CONFIG" >"$TMP" && mv "$TMP" "$DOCKER_DAEMON_CONFIG"
echo "daemon.json updated. Restarting Docker..."
(command -v systemctl &>/dev/null && systemctl restart docker) \
|| service docker restart
echo "Docker restarted. Please rerun this script."
exit 1
else
echo "Please install jq or manually update daemon.json and restart Docker."
exit 1
fi
else
ENABLE_IPV6_LINE="ENABLE_IPV6=false"
echo "User declined update disabling IPv6 support."
fi
fi
else
echo "WARNING: $DOCKER_DAEMON_CONFIG not found skipping Docker config check."
fi
}
# 3) Wrapper to integrate into both generate_config.sh and update.sh
configure_ipv6() {
get_ipv6_support
# Only edit Docker config if IPv6 is enabled on host
if [[ "$ENABLE_IPV6_LINE" == "ENABLE_IPV6=true" ]]; then
docker_daemon_edit
else
echo "Skipping Docker IPv6 configuration because host does not support IPv6."
fi
# Write ENABLE_IPV6 into mailcow.conf (generate_config.sh) or export in current shell (update.sh)
if [[ -n "$MAILCOW_CONF" && -f "$MAILCOW_CONF" ]]; then
# generate_config.sh: append or replace in mailcow.conf
if grep -q '^ENABLE_IPV6=' "$MAILCOW_CONF"; then
sed -i "s/^ENABLE_IPV6=.*/$ENABLE_IPV6_LINE/" "$MAILCOW_CONF"
else
echo "$ENABLE_IPV6_LINE" >> "$MAILCOW_CONF"
fi
else
# update.sh: export into the running environment
export "$ENABLE_IPV6_LINE"
fi
echo "IPv6 configuration complete: $ENABLE_IPV6_LINE"
}