#!/bin/bash
-# Copyright (C) 2016 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
+# Configure & run btrbk & related work on Ian's computers.
+# Copyright (C) 2024 Ian Kelling
-# http://www.apache.org/licenses/LICENSE-2.0
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
-# 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.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# SPDX-License-Identifier: GPL-3.0-or-later
# todo: if we cancel in the middle of a btrfs send, then run again
[[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
-source /usr/local/lib/err
+set -e; . /usr/local/lib/bash-bear; set +e
+shopt -s nullglob
usage() {
cat <<'EOF'
elif ping -q -c1 -w1 $h.b8.nz &>/dev/null; then
# in case we took it home
targets+=(x3.b8.nz)
+ elif ping -q -c1 -w1 ${h}w.b8.nz &>/dev/null; then
+ targets+=(x3w.b8.nz)
else
targets+=(x3wg.b8.nz)
fi
uninstalled-file-die $f
fi
done
- if ! diff -q /a/bin/errhandle/err /usr/local/lib/err; then
+ if ! diff -q /a/bin/bash-bear-trap/bash-bear /usr/local/lib/bash-bear; then
uninstalled-file-die err
fi
if $check_installed; then
fi
cd /a/opt/btrbk
m make install
+ cd /
fi
# TODO: i wonder if there should be an option to send to the default
prospective_mps+=(/o)
fi
if [[ $source_host == "$HOST2" ]]; then
- prospective_mps+=(/a /ar /qr /qd /q)
+ prospective_mps+=(/a /qr /qd /q)
fi
else
if [[ $HOSTNAME == "$MAIL_HOST" ]]; then
prospective_mps+=(/o)
fi
if [[ $HOSTNAME == "$HOST2" ]]; then
- prospective_mps+=(/a /ar /qr /qd /q)
+ prospective_mps+=(/a /qr /qd /q)
fi
if $kd_spread; then
- prospective_mps=(/a /ar /o /qr /qd /q)
+ prospective_mps=(/a /o /qr /qd /q)
fi
fi
# note: put q last just in case its specific retention options were to
echo copying output to $log_path
exec &> >(pee cat 'ts "%F %T"|dd of='$log_path' status=none')
-
+# print some non-default opts
if $verbose; then
- printf " options: conf_only=%s\ndry_run=%s\nrate_limit=%s\nverbose=%s\ncmd_arg=%s\n" "$conf_only" "$dry_run" "$rate_limit" "$verbose" "$cmd_arg"
+ opts_show=()
+ if ! $conf_only; then
+ opts_show+=(conf_only=true)
+ fi
+ if ! $dry_run; then
+ opts_show+=(dry_run=true)
+ fi
+ if [[ $rate_limit != no ]]; then
+ opts_show+=("rate_limit=$rate_limit")
+ fi
+ if [[ $cmd_arg != run ]]; then
+ opts_show+=(cmd_arg=$cmd_arg)
+ fi
+ if (( ${#opts_show[@]} >= 1 )); then
+ first=true
+ for opt in ${opts_show[@]}; do
+ if $first; then
+ printf "%s" "$opt"
+ else
+ printf " %s" "$opt"
+ fi
+ done
+ echo
+ fi
fi
if [[ -v targets ]]; then
echo "mountpoints: ${mountpoints[*]}"
-
-
# pull_reexec stops us from getting into an infinite loop if there is some
# kind of weird problem
pulla=false
if ! $pull_reexec && [[ $source ]] && $pulla ; then
tmpf=$(mktemp)
m rsync -ra $source:/usr/local/bin/{mount-latest-subvol,check-subvol-stale} /usr/local/bin
- m rsync -ra $source:/usr/local/lib/err /usr/local/lib
+ m rsync -ra $source:/usr/local/lib/bash-bear /usr/local/lib
m scp $source:/a/bin/distro-setup/btrbk-run $tmpf
if ! diff -q $tmpf ${BASH_SOURCE[0]}; then
e "found different version on host $source. reexecing"
if [[ $h == kd && $HOSTNAME == x3 && $HOSTNAME == "$MAIL_HOST" ]]; then
m ssh root@$tg 'btrbk-spread-wrap &>/dev/null </dev/null &'
fi
- rsync -a -f"- */" -f"+ *" /var/log/btrbk/ root@$tg:/var/log/btrbk/$tg
+ rsync --mkpath -a -f"- */" -f"+ *" /var/log/btrbk/ root@$tg:/var/log/btrbk/$tg
ssh root@$tg /usr/local/bin/mail-backup-clean
done
if [[ $source ]]; then
- rsync -a -f"- */" -f"+ *" $source:/var/log/btrbk/ /var/log/btrbk/$source
+ rsync --mkpath -a -f"- */" -f"+ *" $source:/var/log/btrbk/ /var/log/btrbk/$source
fi
fi