52 lines
1.3 KiB
Bash
52 lines
1.3 KiB
Bash
#!/bin/sh
|
|
set -euo pipefail
|
|
|
|
PERSIST_DIR="/data/defined"
|
|
SYSTEM_DIR="/etc/defined"
|
|
CONTROL_SOCKET="/var/run/dnclient.sock"
|
|
|
|
# Ensure persistent directory exists and symlink /etc/defined to it
|
|
mkdir -p "${PERSIST_DIR}"
|
|
ln -sfn "${PERSIST_DIR}" "${SYSTEM_DIR}"
|
|
|
|
# Create the tun device so it doesn't need to be mounted
|
|
mkdir -p /dev/net
|
|
if [ ! -c /dev/net/tun ]; then
|
|
mknod /dev/net/tun c 10 200
|
|
chmod 600 /dev/net/tun
|
|
fi
|
|
|
|
# Read enrollment code from HA options
|
|
ENROLLMENT_CODE="$(sed -n 's/.*"enrollment_code" *: *"\([^"]*\)".*/\1/p' /data/options.json)"
|
|
|
|
# Start dnclient
|
|
dnclient run -server "${DN_API_SERVER:-https://api.defined.net}" &
|
|
|
|
# Wait for control socket
|
|
for i in $(seq 1 11); do
|
|
if [ -S "$CONTROL_SOCKET" ]; then
|
|
break
|
|
fi
|
|
if [ "$i" -eq 11 ]; then
|
|
echo "Timed out waiting for dnclient."
|
|
exit 1
|
|
fi
|
|
echo "Waiting for dnclient $CONTROL_SOCKET ($i/10)..."
|
|
sleep 1
|
|
done
|
|
|
|
# Enroll if not already enrolled
|
|
if [ ! -f "${PERSIST_DIR}/dnclient.yml" ]; then
|
|
if [ -z "${ENROLLMENT_CODE}" ]; then
|
|
echo "Please provide an enrollment code in the add-on configuration."
|
|
exit 1
|
|
fi
|
|
export DN_ENROLLMENT_CODE="${ENROLLMENT_CODE}"
|
|
if ! dnclient enroll -code "$DN_ENROLLMENT_CODE"; then
|
|
echo "Enrollment failed."
|
|
exit 1
|
|
fi
|
|
echo "Enrollment complete."
|
|
fi
|
|
|
|
wait
|