#!/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 # Jérémy Lecour # Benoît Série # Gregory Colpart # Romain Dessort # Tristan Pilat # 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