Skip to content

Commit 04b08f5

Browse files
authored
Dev 1.0 BSDCan update (#46)
Fixed mixup between "usage" (quick command overview) and "help" (man pages), fixed man page installer for Debian variants.
1 parent 0c6446b commit 04b08f5

File tree

5 files changed

+86
-45
lines changed

5 files changed

+86
-45
lines changed

bin/zelta

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#
66
# Initialize the environment for Zelta subcommands
77

8+
ZELTA_VERSION="Zelta Replication Suite v1.0"
9+
810
: ${ZELTA_ETC:="/usr/local/etc/zelta"}
911
: ${ZELTA_ENV:="$ZELTA_ETC/zelta.env"}
1012
: ${ZELTA_SNAP_NAME:="date -u +%Y-%m-%d_%H.%M.%S"}
@@ -34,26 +36,28 @@ fi
3436

3537
case $zelta_command in
3638
# Command synonyms
37-
zmatch) $AWKPRE/zelta-match.awk -- "$@" ;;
38-
zp) $AWKPRE/zelta-policy.awk -- "$@" ;;
39-
zpull) $AWKPRE/zelta-replicate.awk -- "$@" ;;
40-
zpush) $AWKPRE/zelta-replicate.awk -- "$@" ;;
41-
zeport) $AWKPRE/zelta-report.awk -- "$@" ;;
39+
zmatch) $AWKPRE/zelta-match.awk -- "$@" ;;
40+
zp) $AWKPRE/zelta-policy.awk -- "$@" ;;
41+
zpull) $AWKPRE/zelta-replicate.awk -- "$@" ;;
42+
zpush) $AWKPRE/zelta-replicate.awk -- "$@" ;;
43+
zeport) $AWKPRE/zelta-report.awk -- "$@" ;;
4244
# "zelta replicate" variants
43-
backup) $AWKPRE/zelta-replicate.awk -- -sI "$@" ;;
44-
clone) $AWKPRE/zelta-replicate.awk -- --clone "$@" ;;
45-
sync) $AWKPRE/zelta-replicate.awk -- -i "$@" ;;
45+
backup) $AWKPRE/zelta-replicate.awk -- -sI "$@" ;;
46+
clone) $AWKPRE/zelta-replicate.awk -- --clone "$@" ;;
47+
sync) $AWKPRE/zelta-replicate.awk -- -i "$@" ;;
4648
# Utilities
47-
snapshot) echo "$@" | $AWKPRE/zelta-snapshot.awk ;;
48-
endpoint) echo "$@" | $AWKPRE/zelta-endpoint.awk ;;
49-
time) "$@" | bash -c "time -p cat" ;;
49+
snapshot) echo "$@" | $AWKPRE/zelta-snapshot.awk ;;
50+
endpoint) echo "$@" | $AWKPRE/zelta-endpoint.awk ;;
51+
time) "$@" | bash -c "time -p cat" ;;
5052
# Info
51-
-V|--version|version) echo zelta-pre-release; exit ;;
52-
-?|usage|help) . $ZELTA_SHARE/zelta-usage.sh "$@" ;;
53+
-V|--version) echo $ZELTA_VERSION; exit ;;
54+
version) echo $ZELTA_VERSION; exit ;;
55+
help) . $ZELTA_SHARE/zelta-usage.sh "$@" ;;
56+
-?|usage) "$ZELTA_SHARE/zelta-usage.sh" "$zelta_command" "$@" ;;
5357
# Matching script name action
5458
*) if [ -r "$ZELTA_SHARE/zelta-$zelta_command.awk" ]; then
5559
$AWKPRE/zelta-$zelta_command.awk -- "$@"
5660
else
57-
. $ZELTA_SHARE/zelta-usage.sh "$@"
61+
"$ZELTA_SHARE/zelta-usage.sh" usage "$zelta_command" "$@"
5862
fi ;;
5963
esac

install.sh

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,36 @@ if [ root = "$USER" ]; then
1010
: ${ZELTA_BIN:="/usr/local/bin"}
1111
: ${ZELTA_SHARE:="/usr/local/share/zelta"}
1212
: ${ZELTA_ETC:="/usr/local/etc/zelta"}
13-
: ${ZELTA_MAN:="/usr/local/share/man/man8"}
14-
if [ ! -d "$ZELTA_MAN" ] ; then
15-
ZELTA_MAN="/usr/share/man/man8"
13+
: ${ZELTA_MAN8:="/usr/local/share/man/man8"}
14+
if [ ! -d "$ZELTA_MAN8" ] ; then
15+
ZELTA_MAN8="/usr/share/man/man8"
1616
fi
17-
elif [ -z "$ZELTA_BIN$ZELTA_SHARE$ZELTA_ETC" ]; then
17+
elif [ -z "$ZELTA_BIN$ZELTA_SHARE$ZELTA_ETC$ZELTA_DOC" ]; then
1818
: ${ZELTA_BIN:="$HOME/bin"}
1919
: ${ZELTA_SHARE:="$HOME/.local/share/zelta"}
2020
: ${ZELTA_ETC:="$HOME/.config/zelta"}
21-
: ${ZELTA_MAN:="$ZELTA_SHARE/doc"}
22-
echo Installing Zelta as an unprivilaged user. To ensure the per-user setup of
23-
echo Zelta is being used, please export the following environment variables in
24-
echo your shell\'s startup scripts:
21+
: ${ZELTA_DOC:="$ZELTA_SHARE/doc"}
22+
echo Installing Zelta as an Unprivileged User
23+
echo
24+
echo To install Zelta as an unprivileged user, follow these steps:
25+
echo
26+
echo 1. Set the following environment variables in your startup script
27+
echo or export them with your desired values:
2528
echo
2629
echo export ZELTA_BIN=\"$ZELTA_BIN\"
2730
echo export ZELTA_SHARE=\"$ZELTA_SHARE\"
2831
echo export ZELTA_ETC=\"$ZELTA_ETC\"
29-
echo export ZELTA_MAN=\"$ZELTA_MAN\"
32+
echo export ZELTA_DOC=\"$ZELTA_DOC\"
33+
echo
34+
echo 2. Ensure that \"$ZELTA_BIN\" is in PATH environment variable.
3035
echo
31-
echo You may also set these variables as desired and rerun this command.
32-
echo Press Control-C to break or Return to install; read whatever
36+
echo Note: If you prefer a global installation, cancel this installation
37+
echo and rerun this command as root, e.g. \`sudo install.sh\`.
38+
echo
39+
echo Proceed with installation?
40+
echo
41+
echo Press Control-C to stop or Return to install using the above paths.
42+
read whatever
3343
fi
3444

3545
: ${ZELTA_CONF:="$ZELTA_ETC/zelta.conf"}
@@ -57,14 +67,17 @@ link_to_zelta() {
5767
}
5868

5969

60-
mkdir -p "$ZELTA_BIN" "$ZELTA_SHARE" "$ZELTA_ETC" "$ZELTA_MAN"
70+
mkdir -p "$ZELTA_BIN" "$ZELTA_SHARE" "$ZELTA_ETC" "$ZELTA_DOC"
6171
copy_file bin/zelta "$ZELTA"
6272
find share/zelta -name '*.awk' -o -name '*.sh' | while read -r file; do
6373
copy_file "$file" "${ZELTA_SHARE}/$(basename "$file")"
6474
done
65-
find doc -name '*.8' | while read -r file; do
66-
copy_file "$file" "${ZELTA_MAN}/$(basename "$file")"
67-
done
75+
76+
if [ -x "$ZELTA_MAN8" ] ; then
77+
find doc -name '*.8' | while read -r file; do
78+
copy_file "$file" "${ZELTA_MAN8}/$(basename "$file")"
79+
done
80+
fi
6881

6982
## Old Aliases:
7083
# link_to_zelta zmatch
@@ -83,3 +96,11 @@ copy_file zelta.conf "${ZELTA_CONF}.example" "644"
8396
if [ ! -s "$ZELTA_CONF" ]; then
8497
copy_file zelta.conf "$ZELTA_CONF" "644"
8598
fi
99+
100+
# Add doc if requested
101+
if [ "$ZELTA_DOC" ]; then
102+
mkdir -p "$ZELTA_DOC"
103+
find doc/ -type f | while read -r file; do
104+
copy_file "$file" "${ZELTA_DOC}/$(basename "$file")"
105+
done
106+
fi

share/zelta/zelta-policy.awk

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ function long_option() {
115115
}
116116

117117
function get_options() {
118-
# Possible Options
118+
# Policy Options
119119
OPTIONS["archive_root"]++
120120
OPTIONS["backup_root"]++
121121
OPTIONS["depth"]++
@@ -292,7 +292,7 @@ function h_num(num) {
292292
return int(num) suffix
293293
}
294294

295-
function zelta_sync() {
295+
function zelta_replicate() {
296296
sync_cmd = backup_command[site,host,source]
297297
sync_status = 1
298298
if (MODE == "LIST") {
@@ -310,7 +310,7 @@ function zelta_sync() {
310310
if (/[0-9]+ [0-9]+ [0-9]+\.*[0-9]* -?[0-9]+/) {
311311
if ($2) report(LOG_DEFAULT, h_num($2) ": ")
312312
if ($4) {
313-
report(LOG_DEFAULT, "failed: ")
313+
#report(LOG_DEFAULT, "failed: ")
314314
sync_status = 0
315315
if ($4 == 1) report(LOG_DEFAULT, "error matching snapshots")
316316
else if ($4 == 2) report(LOG_DEFAULT, "replication error")
@@ -356,7 +356,7 @@ BEGIN {
356356
target = datasets[host,source]
357357
if (!AUTO && !should_replicate()) continue
358358
if (MODE == "ACTIVE") report(LOG_DEFAULT," ")
359-
if (! zelta_sync()) {
359+
if (! zelta_replicate()) {
360360
failed_num++
361361
failed_list[site"\t"host"\t"source"\t"target]++
362362
}
@@ -367,8 +367,8 @@ BEGIN {
367367
for (failed_sync in failed_list) {
368368
$0 = failed_sync
369369
site = $1; host = $2; source = $3; target = $4
370-
if (MODE != "JSON") report(LOG_DEFAULT, "retrying: " $host ":" $source ": ")
371-
if (zelta_sync()) {
370+
if (MODE != "JSON") report(LOG_DEFAULT, "retry: " )
371+
if (zelta_replicate()) {
372372
delete failed_list[failed_sync]
373373
}
374374
}

share/zelta/zelta-replicate.awk

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,7 @@ function name_match_row() {
515515
target_match = targetds match_snap
516516
source_match = sourceds match_snap
517517

518+
single_snap = (sfirst && (sfirst == slast))
518519
sorigin = srcprop[dataset,"origin"]
519520
match_origin = ""
520521
rotate_name = ""
@@ -576,8 +577,10 @@ BEGIN {
576577

577578
time_start = sys_time()
578579
load_properties(source, srcprop)
580+
if (NO_DS[source]) stop(1, "source does not exist: "source)
579581
load_properties(target, tgtprop)
580582
if (CLONE_MODE && !NO_DS[target]) stop(1, "cannot clone; target exists: "target)
583+
581584
run_snapshot()
582585
while (match_command |getline) {
583586
if (!name_match_row()) {
@@ -594,7 +597,7 @@ BEGIN {
594597
continue
595598
}
596599
if (src_only) {
597-
if (INTR) {
600+
if (INTR && !single_snap) {
598601
command_queue(sfirst_full, targetds)
599602
command_queue(slast_full, targetds, sfirst)
600603
} else command_queue(slast_full, targetds)
@@ -614,7 +617,7 @@ BEGIN {
614617
rename_command = zfs[target] " rename " q(ds[target]) " " q(torigin_name)
615618
if (! dry_run(rename_command)) {
616619
system(rename_command)
617-
report(LOG_BASIC, "source renamed to " q(torigin_name))
620+
report(LOG_BASIC, "target renamed to " q(torigin_name))
618621
}
619622
}
620623

share/zelta/zelta-usage.sh

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/sh
22

33
usage_zelta() {
4-
cat << EOF
4+
cat >&2 << EOF
55
usage: zelta command args ...
66
where 'command' is one of the following:
77
@@ -27,12 +27,25 @@ For further help on a command or topic, run: zelta help [<topic>]
2727
EOF
2828
}
2929

30-
# Add "man" if available.
30+
runman() {
31+
SECTION=8
32+
if [ -s "$ZELTA_DOC" ] ; then
33+
man "$ZELTA_DOC/$1.$SECTION"
34+
else
35+
man $SECTION $1
36+
fi
37+
}
38+
3139
case $1 in
32-
usage|help) usage_zelta ;;
33-
backup|sync|clone|replicate) man zelta-backup ;;
34-
match) man zelta-match ;;
35-
policy) man zelta-policy ;;
36-
*) [ -n "$1" ] && echo unrecognized command \'$1\' >>/dev/null ;
37-
usage_zelta ;;
40+
usage|-?) usage_zelta ;;
41+
help) runman zelta ;;
42+
backup|sync|clone|replicate) runman zelta-backup ;;
43+
match) runman zelta-match ;;
44+
policy) runman zelta-policy ;;
45+
*) if [ -n "$1" ] ; then
46+
echo unrecognized command \'$1\' >&2
47+
usage_zelta
48+
else
49+
runman zelta
50+
fi ;;
3851
esac

0 commit comments

Comments
 (0)