aboutsummaryrefslogtreecommitdiffstats
path: root/roles/jails/05_homepage
diff options
context:
space:
mode:
Diffstat (limited to 'roles/jails/05_homepage')
-rw-r--r--roles/jails/05_homepage/defaults/main.yml33
-rw-r--r--roles/jails/05_homepage/templates/etc_crontab.j23
-rw-r--r--roles/jails/05_homepage/templates/usr_local_bin_update_agate_certs.sh.j228
3 files changed, 63 insertions, 1 deletions
diff --git a/roles/jails/05_homepage/defaults/main.yml b/roles/jails/05_homepage/defaults/main.yml
index dbf767e..99c74e5 100644
--- a/roles/jails/05_homepage/defaults/main.yml
+++ b/roles/jails/05_homepage/defaults/main.yml
@@ -3,18 +3,51 @@ userland: "15.1-RELEASE"
zfs:
- name: zroot/jails/volumes/homepage_www
mountpoint: /var/www
+ - name: zroot/jails/volumes/homepage_agate_tls
+ mountpoint: /usr/local/etc/agate/tls
+ owner: "80"
+ group: "80"
+ - name: zroot/jails/volumes/homepage_gemini
+ mountpoint: /var/gemini
+
+nullfs:
+ - src: /usr/local/jails/containers/ingress/usr/local/etc/letsencrypt
+ dst: /mnt/letsencrypt
+ mode: ro
pkg:
- pcre2
- nginx
- rsync
- bash
+ - agate
files:
- src: usr_local_etc_nginx_nginx.conf.j2
dest: /usr/local/etc/nginx/nginx.conf
- src: etc_crontab.j2
dest: /etc/crontab
+ - src: usr_local_bin_update_agate_certs.sh.j2
+ dest: /usr/local/bin/update-agate-certs
+ mode: "0755"
services:
- nginx
+ - agate
+
+dirs:
+ - /var/log/agate
+
+sysrc:
+ - name: agate_hostname
+ value: "jan.systems"
+ - name: agate_content
+ value: "/var/gemini"
+ - name: agate_certs
+ value: "/usr/local/etc/agate/tls"
+ - name: agate_logfile
+ value: "/var/log/agate/agate.log"
+ - name: agate_addr
+ value: "0.0.0.0"
+ - name: agate_port
+ value: "1965"
diff --git a/roles/jails/05_homepage/templates/etc_crontab.j2 b/roles/jails/05_homepage/templates/etc_crontab.j2
index 8541f57..6ec1b69 100644
--- a/roles/jails/05_homepage/templates/etc_crontab.j2
+++ b/roles/jails/05_homepage/templates/etc_crontab.j2
@@ -6,4 +6,5 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
#
#minute hour mday month wday who command
-# TODO: update linklog
+# Update agate TLS certs if letsencrypt cert has changed
+*/5 * * * * root /usr/local/bin/update-agate-certs >> /var/log/update-agate-certs.log 2>&1
diff --git a/roles/jails/05_homepage/templates/usr_local_bin_update_agate_certs.sh.j2 b/roles/jails/05_homepage/templates/usr_local_bin_update_agate_certs.sh.j2
new file mode 100644
index 0000000..4f0ddaf
--- /dev/null
+++ b/roles/jails/05_homepage/templates/usr_local_bin_update_agate_certs.sh.j2
@@ -0,0 +1,28 @@
+#!/bin/sh
+# update-agate-certs - convert letsencrypt PEM certs to DER for agate
+# Runs from cron; only converts if the cert has changed
+
+set -eu
+
+CERT_SRC="/mnt/letsencrypt/live/jan.systems/fullchain.pem"
+KEY_SRC="/mnt/letsencrypt/live/jan.systems/privkey.pem"
+TLS_DIR="/usr/local/etc/agate/tls"
+CHECKSUM_FILE="${TLS_DIR}/.cert.sha256"
+
+# Check if cert has changed
+CURRENT_SUM=$(sha256 -q "${CERT_SRC}")
+if [ -f "${CHECKSUM_FILE}" ] && [ "$(cat "${CHECKSUM_FILE}")" = "${CURRENT_SUM}" ]; then
+ exit 0
+fi
+
+echo "Certificate changed, converting to DER..."
+
+openssl x509 -in "${CERT_SRC}" -out "${TLS_DIR}/cert.der" -outform DER
+openssl pkey -in "${KEY_SRC}" -out "${TLS_DIR}/key.der" -outform DER
+chown www:www "${TLS_DIR}/cert.der" "${TLS_DIR}/key.der"
+chmod 640 "${TLS_DIR}/cert.der" "${TLS_DIR}/key.der"
+
+echo "${CURRENT_SUM}" > "${CHECKSUM_FILE}"
+
+service agate status > /dev/null 2>&1 && service agate restart
+echo "Done."