106 lines
3.0 KiB
Bash
Executable File
106 lines
3.0 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
ALPINE_RELEASE_FILE="/etc/alpine-release"
|
|
REPO_FILE="/etc/apk/repositories"
|
|
DDCLIENT_DIR="/etc/ddclient"
|
|
DDCLIENT_CONF="${DDCLIENT_DIR}/ddclient.conf"
|
|
TOKEN_AV_CLOUD="${NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_CLOUD:-NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_CLOUD}"
|
|
TOKEN_AV_COM="${NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_COM:-NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_COM}"
|
|
TOKEN_PJ_APP="${NAMECHEAP_DDNS_PASSWORD_PORTFOLIOJOURNAL_APP:-NAMECHEAP_DDNS_PASSWORD_PORTFOLIOJOURNAL_APP}"
|
|
TOKEN_XSLT_COM="${NAMECHEAP_DDNS_PASSWORD_XSLTPLAYGROUND_COM:-NAMECHEAP_DDNS_PASSWORD_XSLTPLAYGROUND_COM}"
|
|
TOKEN_OLALLA_ORG="${NAMECHEAP_DDNS_PASSWORD_OLALLALAB_ORG:-NAMECHEAP_DDNS_PASSWORD_OLALLALAB_ORG}"
|
|
|
|
if [ ! -f "$ALPINE_RELEASE_FILE" ]; then
|
|
echo "Error: $ALPINE_RELEASE_FILE not found. This script is for Alpine Linux." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Enable community repo if missing.
|
|
release="$(cut -d. -f1,2 "$ALPINE_RELEASE_FILE")"
|
|
community_url="https://dl-cdn.alpinelinux.org/alpine/v${release}/community"
|
|
if ! grep -q "^${community_url}$" "$REPO_FILE" 2>/dev/null; then
|
|
echo "Enabling Alpine community repository: $community_url"
|
|
echo "$community_url" >> "$REPO_FILE"
|
|
fi
|
|
|
|
apk update
|
|
apk add --no-cache ddclient curl ca-certificates
|
|
|
|
mkdir -p "$DDCLIENT_DIR"
|
|
|
|
if [ ! -f "$DDCLIENT_CONF" ]; then
|
|
umask 077
|
|
cat <<CONF > "$DDCLIENT_CONF"
|
|
# ddclient.conf placeholder. Replace values below with your real Namecheap
|
|
# Dynamic DNS Passwords, or set per-domain environment variables before
|
|
# running this script (see docs/dyndns-namecheap-alpine.md).
|
|
#
|
|
# This placeholder updates both:
|
|
# - dyn.<domain> (recommended dynamic host)
|
|
# - @ (apex/root) if you choose to keep it dynamic
|
|
# Wildcard (*) is a DNS CNAME record and is not updated by ddclient.
|
|
# See templates/ddclient/ddclient.conf.template in this repo for full example.
|
|
|
|
daemon=300
|
|
syslog=yes
|
|
ssl=yes
|
|
use=web
|
|
web=dynamicdns.park-your-domain.com/getip
|
|
|
|
protocol=namecheap, \
|
|
server=dynamicdns.park-your-domain.com, \
|
|
login=alexandre-vazquez.cloud, \
|
|
password=${TOKEN_AV_CLOUD}
|
|
|
|
dyn
|
|
@
|
|
|
|
protocol=namecheap, \
|
|
server=dynamicdns.park-your-domain.com, \
|
|
login=alexandre-vazquez.com, \
|
|
password=${TOKEN_AV_COM}
|
|
|
|
dyn
|
|
@
|
|
|
|
protocol=namecheap, \
|
|
server=dynamicdns.park-your-domain.com, \
|
|
login=portfoliojournal.app, \
|
|
password=${TOKEN_PJ_APP}
|
|
|
|
dyn
|
|
@
|
|
|
|
protocol=namecheap, \
|
|
server=dynamicdns.park-your-domain.com, \
|
|
login=xsltplayground.com, \
|
|
password=${TOKEN_XSLT_COM}
|
|
|
|
dyn
|
|
@
|
|
|
|
protocol=namecheap, \
|
|
server=dynamicdns.park-your-domain.com, \
|
|
login=olallalab.org, \
|
|
password=${TOKEN_OLALLA_ORG}
|
|
|
|
dyn
|
|
@
|
|
CONF
|
|
chmod 600 "$DDCLIENT_CONF"
|
|
echo "Created $DDCLIENT_CONF with placeholder values."
|
|
else
|
|
chmod 600 "$DDCLIENT_CONF"
|
|
fi
|
|
|
|
rc-update add ddclient default
|
|
rc-service ddclient restart || rc-service ddclient start
|
|
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "- Edit $DDCLIENT_CONF and replace placeholder login/password and domains."
|
|
echo "- Validate public IP: curl -s https://dynamicdns.park-your-domain.com/getip"
|
|
echo "- Debug run: ddclient -daemon=0 -debug -verbose -noquiet"
|
|
echo "- Logs: tail -f /var/log/messages or logread -f"
|