#!/usr/bin/env bash # shellcheck disable=SC2155 readonly PROGNAME=$(basename "${0}") # shellcheck disable=SC2155 readonly PROGDIR=$(readlink -m "$(dirname "${0}")") # shellcheck disable=SC2124 readonly ARGS=$@ # Change this to wherever you install the libraries readonly LIBDIR="/usr/local/lib/evobackup" source "${LIBDIR}/main.sh" show_version() { cat <, Jérémy Lecour . ${PROGNAME} comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public License v3.0 for details. END } show_help() { cat < /dev/null || hostname -I | awk '{ print $1}') fi echo "Copy-paste those lines on backup server(s) :" echo "----------" echo "SERVER_NAME=${SERVER_NAME}" echo "SERVER_IP=${SERVER_IP}" echo "echo '${SSH_KEY}' > /root/\${SERVER_NAME}.pub" echo "bkctld init \${SERVER_NAME}" echo "bkctld key \${SERVER_NAME} /root/\${SERVER_NAME}.pub" echo "bkctld ip \${SERVER_NAME} \${SERVER_IP}" echo "bkctld start \${SERVER_NAME}" echo "bkctld status \${SERVER_NAME}" echo "grep --quiet --extended-regexp \"^\\s?NODE=\" /etc/default/bkctld && bkctld sync \${SERVER_NAME}" echo "----------" } copy_template() { dest_path=${1} dest_dir="$(dirname "${dest_path}")" if [ -e "${dest_path}" ]; then printf "Path for new evobackup script '%s' already exists.\n" "${dest_path}" >&2 exit 1 elif [ ! -e "${dest_dir}" ]; then printf "Parent directory '%s' doesn't exist. Create it first.\n" "${dest_dir}" >&2 exit 1 else if cp "${LIBDIR}/zzz_evobackup.sh" "${dest_path}"; then chmod 750 "${dest_path}" sed -i "s|@COMMAND@|${PROGDIR}/${PROGNAME} ${ARGS}|" "${dest_path}" sed -i "s|@DATE@|$(date --iso-8601=seconds)|" "${dest_path}" sed -i "s|@VERSION@|${VERSION}|" "${dest_path}" printf "New evobackup script has been saved to '%s'.\n" "${dest_path}" printf "Remember to customize it (mail notifications, backup servers…).\n" exit 0 fi fi } main() { # If no argument is provided, print help and exit # shellcheck disable=SC2086 if [ -z ${ARGS} ]; then show_help exit 0 fi # Parse options, based on https://gist.github.com/deshion/10d3cb5f88a21671e17a while :; do case ${1:-''} in -V|--version) show_version exit 0 ;; -h|--help) show_help exit 0 ;; --jail-init-commands) jail_init_commands exit 0 ;; --copy-template) # copy-template option, with value separated by space if [ -n "$2" ]; then copy_template "${2}" shift else printf "'%s' requires a non-empty option argument.\n" "--copy-template" >&2 exit 1 fi ;; --copy-template=?*) # copy-template option, with value separated by = copy_template "${1#*=}" ;; --copy-template=) # copy-template option, without value printf "'%s' requires a non-empty option argument.\n" "--copy-template" >&2 exit 1 ;; --) # End of all options. shift break ;; -?*|[[:alnum:]]*) # ignore unknown options printf "unknown option '%s'.\n" "${1}" >&2 exit 1 ;; *) # Default case: If no more options then break out of the loop. break ;; esac shift done } main ${ARGS}