diff --git a/packaging/nfpm.yaml b/packaging/nfpm.yaml index 823bd11..a74f673 100644 --- a/packaging/nfpm.yaml +++ b/packaging/nfpm.yaml @@ -47,6 +47,17 @@ contents: file_info: mode: 0640 + # systemd unit + environment file for applying a local config at boot. + - src: packaging/tomswall.service + dst: /usr/lib/systemd/system/tomswall.service + file_info: + mode: 0644 + - src: packaging/tomswall.env + dst: /etc/tomswall/tomswall.env + type: config|noreplace + file_info: + mode: 0644 + # Shell completions (generated by scripts/build-rpm.sh before packaging). - src: dist/completions/tomswall.bash dst: /usr/share/bash-completion/completions/tomswall diff --git a/packaging/tomswall-agent.service b/packaging/tomswall-agent.service index 8996b03..f078634 100644 --- a/packaging/tomswall-agent.service +++ b/packaging/tomswall-agent.service @@ -3,6 +3,7 @@ Description=tomswall control-plane agent (pull and apply firewall config) Documentation=https://git.unkin.net/unkin/tomswall After=network-online.target Wants=network-online.target +Conflicts=tomswall.service [Service] Type=simple diff --git a/packaging/tomswall.env b/packaging/tomswall.env new file mode 100644 index 0000000..de01378 --- /dev/null +++ b/packaging/tomswall.env @@ -0,0 +1,3 @@ +# Config applied by tomswall.service: a tomswall YAML file or a shorewall directory. +TOMSWALL_CONFIG=/etc/tomswall/tomswall.yaml +#TOMSWALL_CONFIG=/etc/shorewall diff --git a/packaging/tomswall.service b/packaging/tomswall.service new file mode 100644 index 0000000..7d714da --- /dev/null +++ b/packaging/tomswall.service @@ -0,0 +1,25 @@ +[Unit] +Description=tomswall firewall (apply local config at boot) +Documentation=https://git.unkin.net/unkin/tomswall +DefaultDependencies=no +Wants=network-pre.target +Before=network-pre.target shutdown.target +After=local-fs.target systemd-sysctl.service +Conflicts=shutdown.target tomswall-agent.service +StartLimitIntervalSec=60 +StartLimitBurst=5 + +[Service] +Type=oneshot +RemainAfterExit=yes +Environment=TOMSWALL_CONFIG=/etc/tomswall/tomswall.yaml +EnvironmentFile=-/etc/tomswall/tomswall.env +ExecStart=/usr/sbin/tomswall apply -c ${TOMSWALL_CONFIG} +ExecReload=/usr/sbin/tomswall apply -c ${TOMSWALL_CONFIG} +# Fails open: after StartLimitBurst failures within StartLimitIntervalSec, boot continues without the ruleset. +Restart=on-failure +RestartSec=5 +# No ExecStop: stopping the unit leaves the ruleset in place (flush would open the firewall). + +[Install] +WantedBy=sysinit.target