fix(plg): revamp flash backup script and bug fixes

This commit is contained in:
Eric Schultz
2020-10-09 22:54:00 -07:00
parent 910bf80a57
commit 4bba6eab53

View File

@@ -10,7 +10,7 @@
<!ENTITY plugins "https://s3.amazonaws.com/dnld.lime-technology.com/unraid-api/unraid-plugins-{{ node_plugins_version }}.tgz">
]>
<PLUGIN name="&name;" author="&author;" version="&version;" pluginURL="&pluginURL;" launch="&launch;" support="https://forums.unraid.net" min="6.9.0-beta1" icon="globe">
<PLUGIN name="&name;" author="&author;" version="&version;" pluginURL="&pluginURL;" launch="&launch;" support="https://forums.unraid.net" min="6.9.0-beta30" icon="globe">
<CHANGES>
##&name;
@@ -23,6 +23,7 @@
<FILE Run="/bin/bash" Method="install remove">
<INLINE>
if [ -e /etc/rc.d/rc.unraid-api ]; then
/etc/rc.d/rc.flash_backup stop
/etc/rc.d/rc.unraid-api uninstall
rm -f /etc/rc.d/rc.unraid-api
rm -f /etc/rc.d/rc.flash_backup
@@ -601,16 +602,20 @@ response_complete($httpcode, $result, 'success');
# This file is /etc/rc.d/rc.flash_backup
# use at queue "f" for flash backup
QUEUE=" -q f "
INOTIFY="inotifywait -m -r /boot @/boot/.git -e modify -e move -e create -e delete"
TASKCMD="php /usr/local/emhttp/plugins/dynamix.unraid.net/include/UpdateFlashBackup.php update"
TASKNAME="/etc/rc.d/rc.flash_backup watch"
TASKACTION="php /usr/local/emhttp/plugins/dynamix.unraid.net/include/UpdateFlashBackup.php update"
status() {
local flash_backup_pid=$(pgrep --full "${INOTIFY}")
local flash_backup_pid=$(pgrep --full "${TASKNAME}")
if [[ $flash_backup_pid ]]; then
echo "flash backup monitor is running."
_hasqueue && echo "changes detected, backup queued"
exit 0
else
echo "No processes are running."
if _enabled; then
echo "flash backup is enabled but the monitor is not running"
else
echo "flash backup is disabled so the monitor is disabled"
fi
exit 1
fi
}
@@ -618,16 +623,16 @@ start() {
# only run if flash_backup is enabled
_enabled || exit 1
# terminate watcher loop/process
pkill --full "${INOTIFY}" &>/dev/null
pkill --full "${TASKNAME}" &>/dev/null
# flush: this will ensure we start with a clean repo
flush
# start watcher loop as background process
_watch &>/dev/null &
exec ${TASKNAME} &>/dev/null &
exit 0
}
stop() {
# terminate watcher loop/process
pkill --full "${INOTIFY}" &>/dev/null
pkill --full "${TASKNAME}" &>/dev/null
# remove any queued jobs and flush changes
flush
exit 0
@@ -644,17 +649,16 @@ flush() {
# remove any queued jobs
_removequeue
# push any changes ad-hoc
echo ${TASKCMD} | at ${QUEUE} now
echo ${TASKACTION} | at ${QUEUE} now &>/dev/null
}
_watch() {
# start inotify watcher loop
${INOTIFY} |
while read path action file; do
#_removequeue
#logger '/boot changes detected, (re)starting 1 min countdown before backing up' --tag flash_backup
# create a new at job in queue f
_hasqueue || ( logger 'adding task: ${TASKCMD}' --tag flash_backup; echo ${TASKCMD} | at ${QUEUE} now +1 minute )
done
# start watcher loop
while true; do
if [ "$(git -C /boot status -s)" ]; then
_hasqueue || ( logger "adding task: ${TASKACTION}" --tag flash_backup; echo ${TASKACTION} | at ${QUEUE} now +1 minute &>/dev/null )
fi
sleep 60;
done
}
_hasqueue() {
# returns false if the queue is empty, true otherwise
@@ -685,7 +689,7 @@ case "$1" in
start
;;
'stop')
stop true
stop
;;
'reload')
reload
@@ -693,6 +697,9 @@ case "$1" in
'flush')
flush
;;
'watch')
_watch
;;
*)
echo "usage $0 status|start|stop|reload|flush"
esac
@@ -743,10 +750,13 @@ function response_complete($httpcode, $result, $cli_success_msg='') {
// deactivate
if ($cli) {
if ($argc > 1) $command = $argv[1];
if ($argc > 2) $command = $argv[2];
} else {
$command = $_POST['command'];
$commitmsg = $_POST['commitmsg'];
}
if (empty($command)) $command='init';
if (empty($commitmsg)) $commitmsg='Config change';
// keyfile
$var = parse_ini_file("/var/local/emhttp/var.ini");
@@ -826,7 +836,7 @@ IdentitiesOnly yes
// add our server as a known host
if (!file_exists('/root/.ssh/known_hosts') || strpos(file_get_contents('/root/.ssh/known_hosts'),'backup.unraid.net,54.70.72.154') === false) {
file_put_contents('/root/.ssh/known_hosts', 'backup.unraid.net,54.70.72.154 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKrKXKQwPZTY25MoveIw7fZ3IoZvvffnItrx6q7nkNriDMr2WAsoxu0DrU2QrSLH5zFF1ibv4tChS1hOpiYObiI=', FILE_APPEND);
file_put_contents('/root/.ssh/known_hosts', 'backup.unraid.net,54.70.72.154 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKrKXKQwPZTY25MoveIw7fZ3IoZvvffnItrx6q7nkNriDMr2WAsoxu0DrU2QrSLH5zFF1ibv4tChS1hOpiYObiI='."\n", FILE_APPEND);
chmod('/root/.ssh/known_hosts', 0644);
}
@@ -912,7 +922,7 @@ if (($command == 'update') || ($command == 'reinit')) {
exec('git -C /boot commit -m \'Initial commit\' &>/dev/null');
exec('git -C /boot push --force --set-upstream origin master &>/dev/null');
} else {
exec('git -C /boot commit -m \'Config change\' &>/dev/null');
exec('git -C /boot commit -m ' . escapeshellarg($commitmsg) . ' &>/dev/null');
exec('git -C /boot push --set-upstream origin master &>/dev/null');
}
}