diff --git a/dnclient/run.sh b/dnclient/run.sh index b1005de..890ac92 100644 --- a/dnclient/run.sh +++ b/dnclient/run.sh @@ -1,26 +1,36 @@ #!/usr/bin/env sh set -e -CONFIG_DIR="/data/defined" +PERSIST_DIR="/data/defined" SYSTEM_DIR="/etc/defined" -# Ensure persistent config directory exists -mkdir -p "${CONFIG_DIR}" +# Ensure persistent directory exists +mkdir -p "${PERSIST_DIR}" -# Symlink /etc/defined -> /data/defined for persistence across restarts -if [ ! -L "${SYSTEM_DIR}" ]; then - rm -rf "${SYSTEM_DIR}" - ln -s "${CONFIG_DIR}" "${SYSTEM_DIR}" +# Restore persisted config if it exists +if [ -f "${PERSIST_DIR}/config.yml" ]; then + cp -a "${PERSIST_DIR}/." "${SYSTEM_DIR}/" + echo "Restored persisted dnclient config." fi # Read enrollment code from HA options ENROLLMENT_CODE="$(cat /data/options.json | sed -n 's/.*"enrollment_code" *: *"\([^"]*\)".*/\1/p')" # Only set enrollment code if non-empty and host is not already enrolled -if [ -n "${ENROLLMENT_CODE}" ] && [ ! -f "${CONFIG_DIR}/config.yml" ]; then +if [ -n "${ENROLLMENT_CODE}" ] && [ ! -f "${SYSTEM_DIR}/config.yml" ]; then export DN_ENROLLMENT_CODE="${ENROLLMENT_CODE}" echo "Enrolling host with provided enrollment code..." fi +# Persist config on shutdown +trap 'echo "Persisting config..."; cp -a "${SYSTEM_DIR}/." "${PERSIST_DIR}/"; exit 0' TERM INT + echo "Starting dnclient..." -exec dnclient +dnclient & +DNCLIENT_PID=$! + +# Wait a moment for enrollment to complete, then persist +sleep 5 +cp -a "${SYSTEM_DIR}/." "${PERSIST_DIR}/" 2>/dev/null || true + +wait ${DNCLIENT_PID}