Fix: don't try to remove /etc/defined (busy volume), use copy-based persistence instead

This commit is contained in:
Jarvis 2026-02-19 07:33:45 +00:00
parent 05079fb24a
commit 5495aec1f4

View file

@ -1,26 +1,36 @@
#!/usr/bin/env sh #!/usr/bin/env sh
set -e set -e
CONFIG_DIR="/data/defined" PERSIST_DIR="/data/defined"
SYSTEM_DIR="/etc/defined" SYSTEM_DIR="/etc/defined"
# Ensure persistent config directory exists # Ensure persistent directory exists
mkdir -p "${CONFIG_DIR}" mkdir -p "${PERSIST_DIR}"
# Symlink /etc/defined -> /data/defined for persistence across restarts # Restore persisted config if it exists
if [ ! -L "${SYSTEM_DIR}" ]; then if [ -f "${PERSIST_DIR}/config.yml" ]; then
rm -rf "${SYSTEM_DIR}" cp -a "${PERSIST_DIR}/." "${SYSTEM_DIR}/"
ln -s "${CONFIG_DIR}" "${SYSTEM_DIR}" echo "Restored persisted dnclient config."
fi fi
# Read enrollment code from HA options # Read enrollment code from HA options
ENROLLMENT_CODE="$(cat /data/options.json | sed -n 's/.*"enrollment_code" *: *"\([^"]*\)".*/\1/p')" 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 # 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}" export DN_ENROLLMENT_CODE="${ENROLLMENT_CODE}"
echo "Enrolling host with provided enrollment code..." echo "Enrolling host with provided enrollment code..."
fi fi
# Persist config on shutdown
trap 'echo "Persisting config..."; cp -a "${SYSTEM_DIR}/." "${PERSIST_DIR}/"; exit 0' TERM INT
echo "Starting dnclient..." 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}