#!/bin/bash
-# Copyright (C) 2019 Ian Kelling
-# SPDX-License-Identifier: AGPL-3.0-or-later
+# I, Ian Kelling, follow the GNU license recommendations at
+# https://www.gnu.org/licenses/license-recommendations.en.html. They
+# recommend that small programs, < 300 lines, be licensed under the
+# Apache License 2.0. This file contains or is part of one or more small
+# programs. If a small program grows beyond 300 lines, I plan to switch
+# its license to GPL.
-source /a/bin/errhandle/err
+# Copyright 2024 Ian Kelling
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+source /a/bin/bash-bear-trap/bash-bear
[[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
err() { echo "[$(date +'%Y-%m-%d %H:%M:%S%z')]: $pre: $*" >&2; }
## begin check on syncthing
-if ! systemctl show --no-page syncthing@ziva | sed -n 's/^MainPID=//p' | egrep '^[0-9]+$' &>/dev/null; then
+if ! systemctl show --no-page syncthing@ziva | sed -n 's/^MainPID=//p' | grep -E '^[0-9]+$' &>/dev/null; then
err no pid for syncthing@ziva. systemctl status:
systemctl status syncthing@ziva
fi
## begin check on btrbk
-now=$(date +%s)
-age_limit_sec=$(( 60 * 60 * 50 )) # 50 hours
-for vol in {root,boot}_ubuntubionic; do
- snaps=(/mnt/r7/amy/btrbk/${vol}.20*)
+age_limit_sec=$(( 60 * 60 * 24 * 7 )) # 7 days.
+for prefix in root boot; do
+ if [[ $prefix == boot ]]; then
+ # its not uncommon for the /boot subvol to have no changes, and thus
+ # no new backups for 10 days or so. todo: instead of this error
+ # prone check, we should make it so the ziva computer will
+ # touch a file on our computer whenever btrbk succeeds
+ age_limit_sec=$(( age_limit_sec + 60* 60 * 24 * 35 ))
+ fi
+ vol=${prefix}_ubuntubionic
+ snaps=(/mnt/r7/amy/$prefix/btrbk/${vol}.20*)
if [[ ! ${snaps[*]} ]]; then
- err no snapshots starting with /mnt/r7/amy/btrbk/${vol}_ubuntubionic.20
+ err no snapshots starting with /mnt/r7/amy/$prefix/btrbk/${vol}.20
break
fi
- read last_snap_sec last_snap < <(
+ read -r last_snap_sec last_snap < <(
for s in ${snaps[@]}; do
f=${s##*/}
- unix_time=$(date -d $(sed -r 's/(.{4})(..)(.{5})(..)(.*)/\1-\2-\3:\4:\5/' <<<${f#$vol.}) +%s)
+ unix_time=$(date -d "$(sed -r 's/(.{4})(..)(.{5})(..)(.*)/\1-\2-\3:\4:\5/' <<<${f#"$vol".})" +%s)
printf "%s %s\n" $unix_time $s # part of the pipeline
done | sort -r | head -n 1 ||:
- )
+ )
if [[ ! $last_snap ]]; then
# should not happen.
- err "could not find latest snapshot for $svp among ${snaps[*]}"
+ err "could not find latest snapshot for $vol among ${snaps[*]}"
exit 1
fi
- if (( last_snap_sec < now - age_limit_sec )); then
+ if (( last_snap_sec < EPOCHSECONDS - age_limit_sec )); then
err vol $vol last backup older than 50 hours: $last_snap
fi
done