aboutsummaryrefslogtreecommitdiffstats
path: root/templates
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2025-07-10 10:36:10 +0300
committerJan Tuomi <jan@jantuomi.fi>2025-07-10 10:36:10 +0300
commitffd25cdb04f6a40bc9b95afd507042717b2f7fc5 (patch)
treeee519bceb4089e9498f67673e54a59e0a96ae309 /templates
parent8b9455adfd32708719d3534e21dff3a041efc9ee (diff)
Generate specific dhclient.conf to coerce the ISP to offer the same IP
Diffstat (limited to 'templates')
-rw-r--r--templates/etc_crontab.j224
-rw-r--r--templates/usr_local_bin_gen_dhclient_conf.sh.j238
2 files changed, 62 insertions, 0 deletions
diff --git a/templates/etc_crontab.j2 b/templates/etc_crontab.j2
new file mode 100644
index 0000000..cdd34a4
--- /dev/null
+++ b/templates/etc_crontab.j2
@@ -0,0 +1,24 @@
+# /etc/crontab - root's crontab for FreeBSD
+#
+#
+SHELL=/bin/sh
+PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
+#
+#minute hour mday month wday who command
+#
+# Save some entropy so that /dev/random can re-seed on boot.
+*/11 * * * * operator /usr/libexec/save-entropy
+#
+# Rotate log files every hour, if necessary.
+0 * * * * root newsyslog
+#
+# Perform daily/weekly/monthly maintenance.
+1 3 * * * root periodic daily
+15 4 * * 6 root periodic weekly
+30 5 1 * * root periodic monthly
+#
+# Adjust the time zone if the CMOS clock keeps local time, as opposed to
+# UTC time. See adjkerntz(8) for details.
+1,31 0-5 * * * root adjkerntz -a
+# Generate /etc/dhclient.conf
+*/15 * * * * root sh -c 'gen_dhclient_conf.sh | logger -t gen_dhclient_conf'
diff --git a/templates/usr_local_bin_gen_dhclient_conf.sh.j2 b/templates/usr_local_bin_gen_dhclient_conf.sh.j2
new file mode 100644
index 0000000..8c05f70
--- /dev/null
+++ b/templates/usr_local_bin_gen_dhclient_conf.sh.j2
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+set -eu
+
+IP=$(ifconfig wan0 | awk '/inet / {print $2}' | head -n1)
+HOSTNAME=$(hostname)
+CONFFILE=/etc/dhclient.conf
+NEWFILE=$(mktemp)
+if [ -f "${CONFFILE}" ]; then
+ OLDHASH=$(md5 -q "${CONFFILE}")
+else
+ OLDHASH="doesnotexist"
+fi
+
+cat <<EOF > "${NEWFILE}"
+# This file is generated by $0 periodically.
+# Changes will be overwritten.
+
+interface "wan0" {
+ send host-name "${HOSTNAME}";
+EOF
+
+if [ ! -z "$IP" ]; then
+cat <<EOF >> "${NEWFILE}"
+ send dhcp-requested-address $IP;
+EOF
+fi
+
+echo "}" >> "${NEWFILE}"
+
+mv "${NEWFILE}" "${CONFFILE}"
+
+# If changed, restart dhclient wan0
+md5 -c "${OLDHASH}" "${CONFFILE}" 1>/dev/null 2>/dev/null
+if [ ! "$?" = 0 ]; then
+ echo "Generated ${CONFFILE} has changed, restarting dhclient on wan0 (IP: ${IP})"
+ service dhclient restart wan0
+fi