Add restic-check launchagent

This commit is contained in:
Erik Westrup
2022-02-15 12:42:25 +01:00
parent 4f7da2c975
commit 37f4775eaa
4 changed files with 93 additions and 27 deletions
@@ -12,16 +12,16 @@
<array> <array>
<string>/bin/bash</string> <string>/bin/bash</string>
<string>-c</string> <string>-c</string>
<string>source /usr/local/etc/restic/default.env.sh &amp;&amp; /usr/local/bin/restic_backup.sh >>$HOME/$LOG_OUT 2>>$HOME/$LOG_ERR</string> <string>source $INSTALL_PREFIX/etc/restic/default.env.sh &amp;&amp; $INSTALL_PREFIX/bin/restic_backup.sh >>$HOME/$LOG_OUT 2>>$HOME/$LOG_ERR</string>
</array> </array>
<key>EnvironmentVariables</key> <key>EnvironmentVariables</key>
<dict> <dict>
<key>PATH</key> <key>PATH</key>
<string>/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string> <string>$INSTALL_PREFIX/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
<key>LOG_OUT</key> <key>LOG_OUT</key>
<string>/Library/Logs/restic/backup-stdout.log</string> <string>/Library/Logs/restic/backup_stdout.log</string>
<key>LOG_ERR</key> <key>LOG_ERR</key>
<string>/Library/Logs/restic/backup-stderr.log</string> <string>/Library/Logs/restic/backup_stderr.log</string>
</dict> </dict>
<key>RunAtLoad</key> <key>RunAtLoad</key>
<true/> <true/>
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.github.erikw.restic-check</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>source $INSTALL_PREFIX/etc/restic/default.env.sh &amp;&amp; $INSTALL_PREFIX/bin/restic_check.sh >>$HOME/$LOG_OUT 2>>$HOME/$LOG_ERR</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>$INSTALL_PREFIX/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
<key>LOG_OUT</key>
<string>/Library/Logs/restic/check_stdout.log</string>
<key>LOG_ERR</key>
<string>/Library/Logs/restic/check_stderr.log</string>
</dict>
<key>RunAtLoad</key>
<true/>
<!-- Will schedule check every 1st of the month at 20:00 -->
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Day</key>
<integer>1</integer>
<key>Hour</key>
<integer>20</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
</array>
</dict>
</plist>
+32 -13
View File
@@ -1,4 +1,3 @@
# TODO add install for launchagent completely, and unisntall target using bootstrap?
#### Notes #################################################################### #### Notes ####################################################################
# This build process is done in three stages (out-of-source build): # This build process is done in three stages (out-of-source build):
# 1. copy source files to the local build directory. # 1. copy source files to the local build directory.
@@ -20,7 +19,8 @@
install-targets-script install-targets-conf install-targets-systemd \ install-targets-script install-targets-conf install-targets-systemd \
install-targets-cron install-targets-launchagent \ install-targets-cron install-targets-launchagent \
install-targets-schedtask uninstall-targets-schedtask \ install-targets-schedtask uninstall-targets-schedtask \
activate-launchagent deactivate-launchagent activate-launchagent-backup deactivate-launchagent-backup \
activate-launchagent-chec deactivate-launchagent-check
#### Macros ################################################################### #### Macros ###################################################################
NOW := $(shell date +%Y-%m-%d_%H:%M:%S) NOW := $(shell date +%Y-%m-%d_%H:%M:%S)
@@ -52,8 +52,10 @@ MKDIR_PARENTS=sh -c '\
# LaunchAgent names. # LaunchAgent names.
UID := $(shell id -u) UID := $(shell id -u)
LAUNCHAGENT = com.github.erikw.restic-backup LAUNCHAGENT_BACKUP = com.github.erikw.restic-backup
LAUNCHAGENT_TARGET = gui/$(UID)/$(LAUNCHAGENT) LAUNCHAGENT_CHECK = com.github.erikw.restic-check
LAUNCHAGENT_TARGET_BACKUP = gui/$(UID)/$(LAUNCHAGENT_BACKUP)
LAUNCHAGENT_TARGET_CHECK = gui/$(UID)/$(LAUNCHAGENT_CHECK)
# What to substitute $INSTALL_PREFIX in sources to. # What to substitute $INSTALL_PREFIX in sources to.
# This can be useful to set to empty on commandline when building e.g. an AUR # This can be useful to set to empty on commandline when building e.g. an AUR
@@ -126,6 +128,9 @@ DEST_TARGS_SYSTEMD = $(addprefix $(PREFIX)/, $(SRCS_SYSTEMD))
DEST_TARGS_CRON = $(addprefix $(PREFIX)/, $(SRCS_CRON)) DEST_TARGS_CRON = $(addprefix $(PREFIX)/, $(SRCS_CRON))
DEST_TARGS_LAUNCHAGENT = $(addprefix $(LAUNCHAGENTDIR)/, $(SRCS_LAUNCHAGENT)) DEST_TARGS_LAUNCHAGENT = $(addprefix $(LAUNCHAGENTDIR)/, $(SRCS_LAUNCHAGENT))
DEST_LAUNCHAGENT_BACKUP = $(DEST_DIR_LAUNCHAGENT)/$(LAUNCHAGENT_BACKUP).plist
DEST_LAUNCHAGENT_CHECK = $(DEST_DIR_LAUNCHAGENT)/$(LAUNCHAGENT_CHECK).plist
INSTALLED_FILES = $(DEST_TARGS_SCRIPT) $(DEST_TARGS_CONF) \ INSTALLED_FILES = $(DEST_TARGS_SCRIPT) $(DEST_TARGS_CONF) \
$(DEST_TARGS_SYSTEMD) $(DEST_TARGS_CRON) \ $(DEST_TARGS_SYSTEMD) $(DEST_TARGS_CRON) \
$(DEST_TARGS_LAUNCHAGENT) $(DEST_TARGS_LAUNCHAGENT)
@@ -158,10 +163,14 @@ install-systemd: install-targets-script install-targets-conf \
# target: install-cron - Install cron setup. # target: install-cron - Install cron setup.
install-cron: install-targets-script install-targets-conf install-targets-cron install-cron: install-targets-script install-targets-conf install-targets-cron
# target: install-launchagent - Install LaunchAgent setup. # target: install-launchagent - Install backup LaunchAgent setup.
install-launchagent: install-targets-script install-targets-conf \ install-launchagent: install-targets-script install-targets-conf \
install-targets-launchagent install-targets-launchagent
# target: install-launchagent-check - Install check LaunchAgent setup.
# Intended to be run after install-launchagent, thus not requiring scripts/conf
#install-launchagent: install-targets-launchagent
# target: install-schedtask - Install Windows ScheduledTasks # target: install-schedtask - Install Windows ScheduledTasks
install-schedtask: install-targets-script install-targets-conf \ install-schedtask: install-targets-script install-targets-conf \
install-targets-schedtask install-targets-schedtask
@@ -218,12 +227,22 @@ $(DEST_DIR_LAUNCHAGENT)/%: $(BUILD_DIR_LAUNCHAGENT)/%
$(DEST_DIR_MAC_LOG): $(DEST_DIR_MAC_LOG):
mkdir -p $@ mkdir -p $@
# target: activate-launchagent - Activate the LaunchAgent. # target: activate-launchagent-backup - Activate the backup LaunchAgent.
activate-launchagent: activate-launchagent-backup:
launchctl bootstrap gui/$(UID) $(DEST_TARGS_LAUNCHAGENT) launchctl bootstrap gui/$(UID) $(DEST_LAUNCHAGENT_BACKUP)
launchctl enable $(LAUNCHAGENT_TARGET) launchctl enable $(LAUNCHAGENT_TARGET_BACKUP)
launchctl kickstart -p $(LAUNCHAGENT_TARGET) launchctl kickstart -p $(LAUNCHAGENT_TARGET_BACKUP)
# target: deactivate-launchagent - Deactivate and remove the LaunchAgent. # target: activate-launchagent-check - Activate the check LaunchAgent.
deactivate-launchagent: activate-launchagent-check:
launchctl bootout $(LAUNCHAGENT_TARGET) launchctl bootstrap gui/$(UID) $(DEST_LAUNCHAGENT_CHECK)
launchctl enable $(LAUNCHAGENT_TARGET_CHECK)
launchctl kickstart -p $(LAUNCHAGENT_TARGET_CHECK)
# target: deactivate-launchagent-backup - Remove the backup LaunchAgent.
deactivate-launchagent-backup:
launchctl bootout $(LAUNCHAGENT_TARGET_BACKUP)
# target: deactivate-launchagent-check - Remove the check LaunchAgent.
deactivate-launchagent-check:
launchctl bootout $(LAUNCHAGENT_TARGET_CHECK)
+12 -2
View File
@@ -145,7 +145,7 @@ Many Linux distributions nowadays use [Systemd](https://en.wikipedia.org/wiki/Sy
$ launchctl enable gui/$UID/com.github.erikw.restic-backup $ launchctl enable gui/$UID/com.github.erikw.restic-backup
$ launchctl kickstart -p gui/$UID/com.github.erikw.restic-backup $ launchctl kickstart -p gui/$UID/com.github.erikw.restic-backup
``` ```
As a convenience, a shortcut for the above commands are `$ make activate-launchagent`. As a convenience, a shortcut for the above commands are `$ make activate-launchagent-backup`.
1. Watch the first backup progress from the log files: 1. Watch the first backup progress from the log files:
```console ```console
$ tail -f ~/Library/Logs/restic/backup* $ tail -f ~/Library/Logs/restic/backup*
@@ -155,7 +155,17 @@ Many Linux distributions nowadays use [Systemd](https://en.wikipedia.org/wiki/Sy
$ restic snapshots $ restic snapshots
``` ```
1. (recommended) Enable the check job that verifies that the backups for the profile are all intact. 1. (recommended) Enable the check job that verifies that the backups for the profile are all intact.
TODO #81 * Homebrew install:
```console
$ brew services start restic-automatic-backup-scheduler-check
```
* `make` install:
```console
$ launchctl bootstrap gui/$UID ~/Library/LaunchAgents/com.github.erikw.restic-check.plist
$ launchctl enable gui/$UID/com.github.erikw.restic-check
$ launchctl kickstart -p gui/$UID/com.github.erikw.restic-check
```
As a convenience, a shortcut for the above commands are `$ make activate-launchagent-check`.
1. Consider more [optional features](#optional-features). 1. Consider more [optional features](#optional-features).
### Homebrew Setup Notes ### Homebrew Setup Notes