new subcommands with backward compatibility

This commit is contained in:
Jérémy Lecour 2020-10-11 23:41:38 +02:00
parent 5020ca4bfd
commit 7d4de721ea
10 changed files with 118 additions and 27 deletions

105
bkctld
View File

@ -51,6 +51,7 @@ while :; do
exit 0 exit 0
;; ;;
-f|--force) -f|--force)
# shellcheck disable=SC2034
FORCE=1 FORCE=1
;; ;;
*) *)
@ -64,11 +65,34 @@ done
subcommand="${1:-}" subcommand="${1:-}"
case "${subcommand}" in case "${subcommand}" in
"inc" | "rm" | "check-jails" | "check-setup" | "stats" | "list") "list")
"${LIBDIR}/bkctld-${subcommand}" "${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") "check")
# backward compatibility deprecated_cmd "bkctld check", "bkctld jails-check"
"${LIBDIR}/bkctld-check-jails"
;;
"check-setup")
"${LIBDIR}/bkctld-check-setup"
;;
"check-jails")
"${LIBDIR}/bkctld-check-jails" "${LIBDIR}/bkctld-check-jails"
;; ;;
"check-incs") "check-incs")
@ -91,17 +115,78 @@ case "${subcommand}" in
"${LIBDIR}/bkctld-${subcommand}" "${jail_name}" "${LIBDIR}/bkctld-${subcommand}" "${jail_name}"
fi fi
;; ;;
"key" | "port" | "ip") "ip-add")
jail_name="${2:-}" jail_name="${2:-}"
option="${3:-}" option="${3:-}"
if [ "${jail_name}" = "all" ] || [ -z "${jail_name}" ]; then "${LIBDIR}/bkctld-ip" "${jail_name}" "${option}"
show_help ;;
exit 1 "ip-replace")
else jail_name="${2:-}"
"${LIBDIR}/bkctld-${subcommand}" "${jail_name}" "${option}" option="${3:-}"
"${LIBDIR}/bkctld-ip" "${jail_name}" "0.0.0.0/0"
if [ -n "${option}" ]; then
"${LIBDIR}/bkctld-ip" "${jail_name}" "${option}"
fi fi
;; ;;
"start" | "stop" | "reload" | "restart" | "sync" | "update" | "remove" | "firewall" | "upgrade-config") "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:-}" jail_name="${2:-}"
if [ "${jail_name}" = "all" ]; then if [ "${jail_name}" = "all" ]; then
for jail in $("${LIBDIR}/bkctld-list"); do for jail in $("${LIBDIR}/bkctld-list"); do

View File

@ -124,8 +124,8 @@ in
He can then create the jail: He can then create the jail:
.Bd -literal -offset indent .Bd -literal -offset indent
# bkctld init CLIENT_HOST_NAME # bkctld init CLIENT_HOST_NAME
# bkctld key CLIENT_HOST_NAME /root/CLIENT_HOST_NAME.pub # bkctld key-add CLIENT_HOST_NAME /root/CLIENT_HOST_NAME.pub
# bkctld ip CLIENT_HOST_NAME CLIENT_IP_ADDRESS # bkctld ip-add CLIENT_HOST_NAME CLIENT_IP_ADDRESS
# bkctld start CLIENT_HOST_NAME # bkctld start CLIENT_HOST_NAME
# bkctld status CLIENT_HOST_NAME # bkctld status CLIENT_HOST_NAME
.Ed .Ed
@ -176,4 +176,4 @@ can be found in the
.Sh AUTHORS .Sh AUTHORS
.An Victor Laborie .An Victor Laborie
.\" .Sh CAVEATS .\" .Sh CAVEATS
.\" .Sh BUGS .\" .Sh BUGS

View File

@ -20,7 +20,7 @@ backup for which the rules it contains must apply.
The rules it defines decide which incremental backups are kept when running The rules it defines decide which incremental backups are kept when running
# bkctld rm # bkctld incs-prune
Each line defines a single rule. Each line defines a single rule.
The first part of the rule describes when the backup was taken, The first part of the rule describes when the backup was taken,

View File

@ -61,11 +61,11 @@ Edit the root crontab
~~~ ~~~
# $editor /etc/cron.d/bkctld # $editor /etc/cron.d/bkctld
+ MAILTO=alert4@evolix.net + MAILTO=alert4@evolix.net
+ 30 11 * * * root /usr/sbin/bkctld inc && /usr/sbin/bkctld rm + 30 11 * * * root /usr/sbin/bkctld incs-create && /usr/sbin/bkctld incs-prune
+ 30 23 * * * root /usr/share/scripts/check-incs.sh 1> /dev/null + 30 23 * * * root /usr/share/scripts/check-incs.sh 1> /dev/null
~~~ ~~~
## Notes ## Notes
If you want mutiples backups in a day (1 per hour maximum) you can If you want mutiples backups in a day (1 per hour maximum) you can
run `bkctld inc` multiples times, if you want to keep incremental run `bkctld incs-create` multiples times, if you want to keep incremental
backups **for ever**, just don't run `bkctld rm`. backups **for ever**, just don't run `bkctld incs-prune`.

View File

@ -156,8 +156,8 @@ the backup server administrator will need:
He can then create the jail: He can then create the jail:
# bkctld init <JAIL_NAME> # bkctld init <JAIL_NAME>
# bkctld key <JAIL_NAME> /root/<JAIL_NAME>.pub # bkctld key-add <JAIL_NAME> /root/<JAIL_NAME>.pub
# bkctld ip <JAIL_NAME> <IP_OR_CIDR> # bkctld ip-add <JAIL_NAME> <IP_OR_CIDR>
# bkctld start <JAIL_NAME> # bkctld start <JAIL_NAME>
# bkctld status <JAIL_NAME> # bkctld status <JAIL_NAME>

View File

@ -17,7 +17,7 @@ backup for which the rules it contains must apply.
.Pp .Pp
The rules it defines decide which incremental backups are kept when running The rules it defines decide which incremental backups are kept when running
.Bd -literal -offset indent .Bd -literal -offset indent
# bkctld rm # bkctld incs-prune
.Ed .Ed
.Pp .Pp
Each line defines a single rule. Each line defines a single rule.

View File

@ -111,6 +111,12 @@ error() {
fi fi
exit ${rc} exit ${rc}
} }
deprecated_cmd() {
old=${1:?}
new=${2:?}
warning "\`${old}' is deprecated, use \`${new}' instead"
}
dry_run() { dry_run() {
test "$DRY_RUN" = "1" test "$DRY_RUN" = "1"

View File

@ -11,7 +11,7 @@ load test_helper
} }
@test "Normal inc creation" { @test "Normal inc creation" {
/usr/lib/bkctld/bkctld-inc /usr/lib/bkctld/bkctld-incs-create
if is_btrfs "/backup"; then if is_btrfs "/backup"; then
# On a btrfs filesystem, the inc should be a btrfs volume # On a btrfs filesystem, the inc should be a btrfs volume
@ -27,7 +27,7 @@ load test_helper
@test "Normal inc creation (with old incs policy)" { @test "Normal inc creation (with old incs policy)" {
mv "${CONFDIR}/${JAILNAME}.d/incs_policy" "${CONFDIR}/${JAILNAME}" mv "${CONFDIR}/${JAILNAME}.d/incs_policy" "${CONFDIR}/${JAILNAME}"
/usr/lib/bkctld/bkctld-inc /usr/lib/bkctld/bkctld-incs-create
if is_btrfs "/backup"; then if is_btrfs "/backup"; then
# On a btrfs filesystem, the inc should be a btrfs volume # On a btrfs filesystem, the inc should be a btrfs volume
@ -46,7 +46,7 @@ load test_helper
# … and old file # … and old file
rm -f "${CONFDIR}/${JAILNAME}" rm -f "${CONFDIR}/${JAILNAME}"
/usr/lib/bkctld/bkctld-inc /usr/lib/bkctld/bkctld-incs-create
run test -d "${INCSPATH}/${INC_NAME}" run test -d "${INCSPATH}/${INC_NAME}"
assert_failure assert_failure
@ -60,8 +60,8 @@ load test_helper
recent_inc_path="${INCSPATH}/${INC_NAME}" recent_inc_path="${INCSPATH}/${INC_NAME}"
# Create the inc, then run 'rm' # Create the inc, then run 'rm'
/usr/lib/bkctld/bkctld-inc /usr/lib/bkctld/bkctld-incs-create
/usr/lib/bkctld/bkctld-rm /usr/lib/bkctld/bkctld-incs-prune
# Recent inc should be present # Recent inc should be present
run test -d "${recent_inc_path}" run test -d "${recent_inc_path}"
@ -78,9 +78,9 @@ load test_helper
older_inc_path="${INCSPATH}/${older_inc_name}" older_inc_path="${INCSPATH}/${older_inc_name}"
# Create the inc, rename it to make it older, then run 'rm' # Create the inc, rename it to make it older, then run 'rm'
/usr/lib/bkctld/bkctld-inc /usr/lib/bkctld/bkctld-incs-create
mv "${recent_inc_path}" "${older_inc_path}" mv "${recent_inc_path}" "${older_inc_path}"
/usr/lib/bkctld/bkctld-rm /usr/lib/bkctld/bkctld-incs-prune
# Older inc should be removed # Older inc should be removed
run test -d "${older_inc_path}" run test -d "${older_inc_path}"