evobackup/bkctld

217 lines
5.8 KiB
Bash
Executable File

#!/bin/sh
#
# bkctld is a shell script to create and manage a backup server which will
# handle the backup of many servers (clients).
#
# Authors: Victor Laborie <vlaborie@evolix.fr>
# Jérémy Lecour <jlecour@evolix.fr>
# Benoît Série <bserie@evolix.fr>
# Gregory Colpart <reg@evolix.fr>
# Romain Dessort <rdessort@evolix.fr>
# Tristan Pilat <tpilat@evolix.fr>
# Licence: AGPLv3
#
set -u
if [ "$(id -u)" -ne 0 ]; then
echo "You need to be root to run ${0} !" >&2
exit 1
fi
basedir=$(dirname "$0")
if [ "${basedir}" = "/usr/local/sbin" ] && [ -d "/usr/local/lib/bkctld" ]; then
LIBDIR='/usr/local/lib/bkctld'
elif [ "${basedir}" = "/usr/sbin" ] && [ -d "/usr/lib/bkctld" ]; then
LIBDIR='/usr/lib/bkctld'
elif [ -d './lib' ]; then
LIBDIR='lib'
else
echo "Failed to find a suitable lib directory for bkctld." >&2
exit 1
fi
# shellcheck source=lib/includes
. "${LIBDIR}/includes"
# Parse options
# based on https://gist.github.com/deshion/10d3cb5f88a21671e17a
if [ "$#" = "0" ]; then
show_help
exit 1
fi
while :; do
case $1 in
-h|-\?|--help)
show_help
exit 0
;;
-V|--version)
show_version
exit 0
;;
-f|--force)
# shellcheck disable=SC2034
FORCE=1
;;
*)
# Default case: If no more options then break out of the loop.
break
;;
esac
shift
done
subcommand="${1:-}"
case "${subcommand}" in
"list")
"${LIBDIR}/bkctld-list"
;;
"stats")
"${LIBDIR}/bkctld-stats"
;;
"incs-create")
"${LIBDIR}/bkctld-incs-create"
;;
"inc")
deprecated_cmd "bkctld inc", "bkctld incs-create"
"${LIBDIR}/bkctld-incs-create"
;;
"incs-prune")
"${LIBDIR}/bkctld-incs-prune"
;;
"rm")
deprecated_cmd "bkctld rm", "bkctld incs-prune"
"${LIBDIR}/bkctld-incs-prune"
;;
"check")
deprecated_cmd "bkctld check", "bkctld jails-check"
"${LIBDIR}/bkctld-check-jails"
;;
"check-setup")
"${LIBDIR}/bkctld-check-setup"
;;
"check-jails")
"${LIBDIR}/bkctld-check-jails"
;;
"check-incs")
option="${2:-}"
if [ "${option}" = "all" ] || [ -z "${option}" ]; then
"${LIBDIR}/bkctld-check-incs"
elif [ "${option}" = "last" ]; then
"${LIBDIR}/bkctld-check-last-incs"
else
show_help
exit 1
fi
;;
"init" | "is-on")
jail_name="${2:-}"
if [ -z "${jail_name}" ]; then
show_help
exit 1
else
"${LIBDIR}/bkctld-${subcommand}" "${jail_name}"
fi
;;
"ip-add")
jail_name="${2:-}"
option="${3:-}"
"${LIBDIR}/bkctld-ip" "${jail_name}" "${option}"
;;
"ip-replace")
jail_name="${2:-}"
option="${3:-}"
"${LIBDIR}/bkctld-ip" "${jail_name}" "0.0.0.0/0"
if [ -n "${option}" ]; then
"${LIBDIR}/bkctld-ip" "${jail_name}" "${option}"
fi
;;
"ip-list")
jail_name="${2:-}"
"${LIBDIR}/bkctld-ip" "${jail_name}"
;;
"ip")
jail_name="${2:-}"
option="${3:-}"
if [ -n "${option}" ]; then
if [ "${option}" = "0.0.0.0/0" ] || [ "${option}" = "all" ]; then
deprecated_cmd "bkctld ip ${jail_name} ${option}", "bkctld ip-replace ${jail_name}"
else
deprecated_cmd "bkctld ip ${jail_name} ${option}", "bkctld ip-add ${jail_name} ${option}"
fi
"${LIBDIR}/bkctld-ip" "${jail_name}" "${option}"
else
deprecated_cmd "bkctld ip ${jail_name}", "bkctld ip-list ${jail_name}"
"${LIBDIR}/bkctld-ip" "${jail_name}"
fi
;;
"key-list")
jail_name="${2:-}"
"${LIBDIR}/bkctld-key" "${jail_name}"
;;
"key-replace")
jail_name="${2:-}"
option="${3:-}"
"${LIBDIR}/bkctld-key" "${jail_name}" "${option}"
;;
"key-add")
error "\`bkctld key-add' command is not available yet!"
;;
"key")
jail_name="${2:-}"
option="${3:-}"
if [ -n "${option}" ]; then
deprecated_cmd "bkctld key ${jail_name} ${option}", "bkctld key-replace ${jail_name} ${option}"
"${LIBDIR}/bkctld-key" "${jail_name}" "${option}"
else
deprecated_cmd "bkctld key ${jail_name}", "bkctld key-list ${jail_name}"
"${LIBDIR}/bkctld-key" "${jail_name}"
fi
;;
"port")
jail_name="${2:-}"
option="${3:-}"
"${LIBDIR}/bkctld-port" "${jail_name}" "${option}"
;;
"archive")
error "\`bkctld archive' command is not available yet!"
;;
"remove")
jail_name="${2:-}"
if [ "${jail_name}" = "all" ]; then
error "\`bkctld remove all' is too dangerous."
else
"${LIBDIR}/bkctld-remove" "${jail_name}"
fi
;;
"start" | "stop" | "reload" | "restart" | "sync" | "update" | "firewall" | "upgrade-config")
jail_name="${2:-}"
if [ "${jail_name}" = "all" ]; then
for jail in $("${LIBDIR}/bkctld-list"); do
"${LIBDIR}/bkctld-${subcommand}" "${jail}"
done
elif [ -z "${jail_name}" ]; then
show_help
exit 1
else
"${LIBDIR}/bkctld-${subcommand}" "${jail_name}"
fi
;;
"status")
jail_name="${2:-}"
if [ "${jail_name}" = "all" ] || [ -z "${jail_name}" ]; then
for jail in $("${LIBDIR}/bkctld-list"); do
"${LIBDIR}/bkctld-${subcommand}" "${jail}"
done
else
"${LIBDIR}/bkctld-${subcommand}" "${jail_name}"
fi
;;
*)
show_help
exit 1
;;
esac