diff --git a/all/alias/term b/all/alias/term new file mode 100755 index 0000000..0c642ef --- /dev/null +++ b/all/alias/term @@ -0,0 +1 @@ +alias gterm='GNOME_TERMINAL_SCREEN='\'''\'' gnome-terminal' \ No newline at end of file diff --git a/all/app/awscli b/all/app/awscli index 637d74e..e48e402 100644 --- a/all/app/awscli +++ b/all/app/awscli @@ -1,5 +1,5 @@ #!/bin/bash -command -v docker >/dev/null 2>&1 || exit +command -v docker >/dev/null 2>&1 || return aws_docker () { local cred diff --git a/all/app/backup b/all/app/backup index 16a71ff..a202519 100644 --- a/all/app/backup +++ b/all/app/backup @@ -1,7 +1,7 @@ #!/bin/bash backup () { -DIR=$(dirname $(cd "$(dirname "$BASH_SOURCE")" >/dev/null 2>&1 ; pwd -P )) -$DIR/dev/backup/backup "$@" -#module_load backup -#run "$@" + DIR=$(dirname $(cd "$(dirname "$BASH_SOURCE")" >/dev/null 2>&1 ; pwd -P )) + $DIR/dev/backup/dbackup "$@" + #module_load backup + #run "$@" } \ No newline at end of file diff --git a/all/app/bashly b/all/app/bashly index 7ba02ce..417c153 100644 --- a/all/app/bashly +++ b/all/app/bashly @@ -1,4 +1,4 @@ -command -v docker >/dev/null 2>&1 || exit +command -v docker >/dev/null 2>&1 || return alias bashly='docker run --rm -it --volume "$PWD:/app" dannyben/bashly' alias bashly-update='docker pull dannyben/bashly:latest' diff --git a/all/dev/backup/dbackup b/all/dev/backup/dbackup new file mode 100755 index 0000000..df88aab --- /dev/null +++ b/all/dev/backup/dbackup @@ -0,0 +1,598 @@ +#!/usr/bin/env bash +# This script was generated by bashly (https://github.com/DannyBen/bashly) +# Modifying it manually is not recommended + +# :command.root_command +root_command() { + # :src/root_command.sh + #!/bin/bash + + echo "running root command" + + inspect_args + + # module_load ssh + module_load confirm + module_load path + + local settings=${args[--settings]} + + if [[ $settings ]]; then + if [[ -f $settings ]]; then + echo loading settings file $settings + module_load yaml + eval $(parse_yaml $settings "s_") + echo $s_source + echo $s_target + echo $s_host + else + echo settings file $settings does not exist && return 1 + fi + fi + + if [[ $s_server_host ]]; then + s_server="http$([[ $s_server_secure ]] && echo "s")://${s_server_host}$([[ $s_server_port ]] && echo :${s_server_port} || echo "")" + fi + + local password=${args[--password]:-$BACKUP_PASSWORD} + password=${password:-$s_password} + [[ ! $password ]] && echo restic requires a backup repository password, exiting && return 2 + password="RESTIC_PASSWORD=${password}" + + local server=${args[--server]:-$BACKUP_SERVER} + server=${server:-$s_server} + + local hostname=${args[--hostname]:-$s_hostname} + hostname=${hostname:-$s_host} + hostname=${hostname:-$HOSTNAME} + + local options="${args[--options]:-$BACKUP_OPTIONS}" + options="${options:-$s_options}" + + local smount=${args[--source_mount]:-$BACKUP_SOURCE_MOUNT} + smount=${smount:-$s_source_mount} + + echo smount: $smount $s_source_mount + + + local tmount=${args[--target_mount]:-$BACKUP_TARGET_MOUNT} + tmount=${tmount:-$s_target_mount} + + echo tmount: $tmount $s_target_mount + + local source="${args[source]:-$s_source}" + source="${source:-$s_source_path}" + source=$(echo "${source:-$PWD}" | tr -s /) + + echo yaml source $s_source_path $s_source_mount + echo source $source + + echo target $s_target + + echo target path $s_target_path + + local target=${args[target]:-$s_target} + target=${target:-$s_target_path} + target=${target:-$(echo "${source}" | tr -s / | sed -e "s#^[.]##")} + target="$(echo "${target}" | tr -s /)" + echo "target> $target" + if [[ ${tmount} ]]; then + target="${tmount}${target}" + else + target="/${hostname}${target}" + fi + + if [[ $server ]]; then + target="rest:${server}${target}" + fi + + if [[ $smount ]]; then + setpath="--set-path ${source} --tag mount-point:${smount}" + source=${smount}${source} + fi + + local exclude=${args[--exclude_file]:-$BACKUP_EXCLUDE} + exclude=${exclude:-$s_exclude} + exclude=${exclude:-"$source/exclude.bac"} + + + # local shost=$([[ ${args[--shost]} ]] && echo ${args[--shost]}::) + # local suser=$([[ ${args[--suser]} ]] && echo ${args[--suser]}@) + # local thost=$([[ ${args[--host]} ]] && echo ${args[--host]}::) + # local tuser=$([[ ${args[--user]} ]] && echo ${args[--user]}@) + + local options=$(echo ${args[--options]} | awk '{gsub(/\\/," ")}1') + + local bin=$(command -v restic) + + exclude=$([[ -f $exclude ]] && echo "--iexclude-file $exclude" || echo "") + + echo source: $source + echo target $target + echo exclude: $exclude + + local sudo=$([[ ${args[--sudo]} || $s_sudo || $BACKUP_SUDO ]] && echo "sudo" || echo "") + + local pcmd="${sudo} ${password} ${bin} ${options} -r ${target}" + + local cmd="${pcmd} -H ${hostname} ${setpath} backup ${source} ${exclude}" + + if [[ ${args[--init]} ]]; then cmd="${pcmd} init"; fi + if [[ ${args[--snap]} ]]; then cmd="${pcmd} snapshots"; fi + if [[ ${args[--prune]} ]]; then cmd="${pcmd} prune"; fi + if [[ ${args[--view]} || ${args[--view-path]} ]]; then + mount=${args[--view-path]:-$BACKUP_MOUNT} + mount=${mount:-"/opt/backup/view/"} + echo view mount point $mount + if [[ -e ${mount} ]]; then + cmd="${pcmd} mount $mount"; + echo browse files at $mount/snapshots/latest${source} + else + echo $mount: directory for mounting snapshot for viewing does not exist. Create and try again + return 3 + fi + fi + + echo jq argument ${args[--jq]} + if [[ ${args[--jq]} ]];then + cmd="${cmd} | jq ${args[--jq]}" + fi + + echo $cmd + confirm run this command? || return 1 + eval $cmd + + # sudo chown -R $USER:$USER $target + # sudo chown -R $USER:$USER /home/$USER/.cache/restic + # sudo chmod -R g+rwX /home/$USER/.cache/restic +} + +# :command.version_command +version_command() { + echo "$version" +} + +# :command.usage +dbackup_usage() { + if [[ -n $long_usage ]]; then + printf "dbackup - differential backup using restic\n" + echo + else + printf "dbackup - differential backup using restic\n" + echo + fi + + printf "Usage:\n" + printf " dbackup [SOURCE] [TARGET] [options]\n" + printf " dbackup --help | -h\n" + printf " dbackup --version\n" + echo + + if [[ -n $long_usage ]]; then + printf "Options:\n" + # :command.usage_fixed_flags + echo " --help, -h" + printf " Show this help\n" + echo + echo " --version" + printf " Show version number\n" + echo + # :command.usage_flags + # :flag.usage + echo " --password, -p PASSWORD" + printf " repo password (or file path) for backup repository\n" + echo + + # :flag.usage + echo " --remote, -r" + printf " backup to a remote machine\n" + echo + + # :flag.usage + echo " --server URL" + printf " url of restic rest server\n" + echo + + # :flag.usage + echo " --init" + printf " initialize repo (default is backup)\n" + echo + + # :flag.usage + echo " --snap" + printf " list repo snapshots\n" + echo + + # :flag.usage + echo " --view, -v" + printf " mount snapshot for viewing (default is BACKUP_MOUNT or /opt/backup/view)\n" + echo + + # :flag.usage + echo " --view-path PATH" + printf " set custom mount point path for viewing of snapshot, --view not required if\n set\n" + echo + + # :flag.usage + echo " --prune PRUNE" + printf " prune repo (default is backup). true for default prune or path to prune\n settings\n" + echo + + # :flag.usage + echo " --password, -p PASSWORD" + printf " repo password (or file path) for backup repository\n" + echo + + # :flag.usage + echo " --settings, -s SYAML" + printf " path to settings file (yaml). Keys are same as long\n" + echo + + # :flag.usage + echo " --options, -o OPTIONS" + printf " additional options to pass ot underlying command (restic), \"quote\"\n" + echo + + # :flag.usage + echo " --include_file, -i INCLUDE" + printf " include file\n" + echo + + # :flag.usage + echo " --exclude_file, -e EXCLUDE" + printf " exclude file\n" + echo + + # :flag.usage + echo " --sudo" + printf " run the backup as sudo\n" + echo + + # :flag.usage + echo " --jq JQ" + printf " pipe to jq command\n" + echo + # :command.usage_args + printf "Arguments:\n" + + # :argument.usage + echo " SOURCE" + printf " source directory to be backed up, default is $PWD\n" + echo + + # :argument.usage + echo " TARGET" + printf " target directory for backup\n" + echo + # :command.usage_environment_variables + printf "Environment Variables:\n" + + # :environment_variable.usage + echo " BACKUP_EXCLUDE" + printf " path to file of excludes\n" + echo + + # :environment_variable.usage + echo " BACKUP_INCLUDE" + printf " path to directory of includes\n" + echo + + # :environment_variable.usage + echo " BACKUP_SETTINGS" + printf " path to default settings file\n" + echo + + # :environment_variable.usage + echo " BACKUP_PASSWORD" + printf " path to default settings file\n" + echo + + # :environment_variable.usage + echo " BACKUP_SERVER" + printf " URL of Restic rest server\n" + echo + + # :environment_variable.usage + echo " BACKUP_DIR" + printf " Backup Directory\n" + echo + + # :environment_variable.usage + echo " BACKUP_MOUNT_POINT" + printf " mount point of source if mounted external to host\n" + echo + # :command.usage_examples + printf "Examples:\n" + + printf " backup -p password . /target/dir\n" + printf " backup -s /path/to/settings/yaml/file\n" + echo + + fi +} + +# :command.normalize_input +normalize_input() { + local arg flags + + while [[ $# -gt 0 ]]; do + arg="$1" + if [[ $arg =~ ^(--[a-zA-Z0-9_\-]+)=(.+)$ ]]; then + input+=("${BASH_REMATCH[1]}") + input+=("${BASH_REMATCH[2]}") + elif [[ $arg =~ ^(-[a-zA-Z0-9])=(.+)$ ]]; then + input+=("${BASH_REMATCH[1]}") + input+=("${BASH_REMATCH[2]}") + elif [[ $arg =~ ^-([a-zA-Z0-9][a-zA-Z0-9]+)$ ]]; then + flags="${BASH_REMATCH[1]}" + for (( i=0 ; i < ${#flags} ; i++ )); do + input+=("-${flags:i:1}") + done + else + input+=("$arg") + fi + + shift + done +} +# :command.inspect_args +inspect_args() { + readarray -t sorted_keys < <(printf '%s\n' "${!args[@]}" | sort) + if (( ${#args[@]} )); then + echo args: + for k in "${sorted_keys[@]}"; do echo "- \${args[$k]} = ${args[$k]}"; done + else + echo args: none + fi + + if (( ${#other_args[@]} )); then + echo + echo other_args: + echo "- \${other_args[*]} = ${other_args[*]}" + for i in "${!other_args[@]}"; do + echo "- \${other_args[$i]} = ${other_args[$i]}" + done + fi +} + +# :command.command_functions + +# :command.parse_requirements +parse_requirements() { + # :command.fixed_flag_filter + case "$1" in + --version ) + version_command + exit + ;; + + --help | -h ) + long_usage=yes + dbackup_usage + exit + ;; + + esac + # :command.environment_variables_filter + # :command.dependencies_filter + # :command.command_filter + action="root" + # :command.required_args_filter + # :command.required_flags_filter + # :command.parse_requirements_while + while [[ $# -gt 0 ]]; do + key="$1" + case "$key" in + # :flag.case + --password | -p ) + if [[ $2 ]]; then + args[--password]="$2" + shift + shift + else + printf "%s\n" "--password requires an argument: --password, -p PASSWORD" + exit 1 + fi + ;; + + # :flag.case + --remote | -r ) + args[--remote]=1 + shift + ;; + + # :flag.case + --server ) + if [[ $2 ]]; then + args[--server]="$2" + shift + shift + else + printf "%s\n" "--server requires an argument: --server URL" + exit 1 + fi + ;; + + # :flag.case + --init ) + args[--init]=1 + shift + ;; + + # :flag.case + --snap ) + args[--snap]=1 + shift + ;; + + # :flag.case + --view | -v ) + args[--view]=1 + shift + ;; + + # :flag.case + --view-path ) + if [[ $2 ]]; then + args[--view-path]="$2" + shift + shift + else + printf "%s\n" "--view-path requires an argument: --view-path PATH" + exit 1 + fi + ;; + + # :flag.case + --prune ) + if [[ $2 ]]; then + args[--prune]="$2" + shift + shift + else + printf "%s\n" "--prune requires an argument: --prune PRUNE" + exit 1 + fi + ;; + + # :flag.case + --password | -p ) + if [[ $2 ]]; then + args[--password]="$2" + shift + shift + else + printf "%s\n" "--password requires an argument: --password, -p PASSWORD" + exit 1 + fi + ;; + + # :flag.case + --settings | -s ) + if [[ $2 ]]; then + args[--settings]="$2" + shift + shift + else + printf "%s\n" "--settings requires an argument: --settings, -s SYAML" + exit 1 + fi + ;; + + # :flag.case + --options | -o ) + if [[ $2 ]]; then + args[--options]="$2" + shift + shift + else + printf "%s\n" "--options requires an argument: --options, -o OPTIONS" + exit 1 + fi + ;; + + # :flag.case + --include_file | -i ) + if [[ $2 ]]; then + args[--include_file]="$2" + shift + shift + else + printf "%s\n" "--include_file requires an argument: --include_file, -i INCLUDE" + exit 1 + fi + ;; + + # :flag.case + --exclude_file | -e ) + if [[ $2 ]]; then + args[--exclude_file]="$2" + shift + shift + else + printf "%s\n" "--exclude_file requires an argument: --exclude_file, -e EXCLUDE" + exit 1 + fi + ;; + + # :flag.case + --sudo ) + args[--sudo]=1 + shift + ;; + + # :flag.case + --jq ) + if [[ $2 ]]; then + args[--jq]="$2" + shift + shift + else + printf "%s\n" "--jq requires an argument: --jq JQ" + exit 1 + fi + ;; + + + -* ) + printf "invalid option: %s\n" "$key" + exit 1 + ;; + + * ) + # :command.parse_requirements_case + if [[ ! ${args[source]} ]]; then + args[source]=$1 + shift + elif [[ ! ${args[target]} ]]; then + args[target]=$1 + shift + else + printf "invalid argument: %s\n" "$key" + exit 1 + fi + ;; + + esac + done + # :command.catch_all_filter + # :command.default_assignments + # :command.whitelist_filter +} + +# :command.initialize +initialize() { + version="0.1.0" + long_usage='' + set -e + + if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then + printf "bash version 4 or higher is required\n" + exit 1 + fi + + # :src/initialize.sh + # Code here runs inside the initialize() function + # Use it for anything that you need to run before any other function, like + # setting environment vairables: + # CONFIG_FILE=settings.ini + # + # Feel free to empty (but not delete) this file. + echo running initialize function +} + +# :command.run +run() { + declare -A args + declare -a other_args + declare -a input + normalize_input "$@" + parse_requirements "${input[@]}" + + if [[ $action == "root" ]]; then + root_command + fi +} + +initialize +run "$@" diff --git a/all/dev/backup/src/bashly.yml b/all/dev/backup/src/bashly.yml index a870b78..e1e8f0c 100644 --- a/all/dev/backup/src/bashly.yml +++ b/all/dev/backup/src/bashly.yml @@ -1,59 +1,97 @@ -name: backup -help: backup/mirror a directory using rdiff or rsync +name: dbackup +help: differential backup using restic version: 0.1.0 environment_variables: -- name: BACKUP_EXCLUDE - help: path to file of excludes -- name: BACKUP_INCLUDE - help: path to directory of includes + - name: BACKUP_EXCLUDE + help: path to file of excludes + - name: BACKUP_INCLUDE + help: path to directory of includes + - name: BACKUP_SETTINGS + help: path to default settings file + - name: BACKUP_PASSWORD + help: path to default settings file + - name: BACKUP_SERVER + help: URL of Restic rest server + - name: BACKUP_DIR + help: Backup Directory + - name: BACKUP_MOUNT_POINT + help: mount point of source if mounted external to host args: -- name: source - # required: 1 - help: source directory to be backed up, default is $PWD -- name: target - help: "target directory for backup" + - name: source + help: source directory to be backed up, default is $PWD + - name: target + help: "target directory for backup" flags: -- long: --host - short: -h - arg: thost - help: host on remote to target to receive backup -- long: --shost - arg: shost - help: remote to host of source -- long: --user - short: -u - arg: tuser - help: user on remote host -- long: --suser - arg: suser - help: remote user on source host -- long: --sshcfg - arg: sshcfg - help: path to sshcfg file -- long: --options - short : -o - arg: options - help: rdiff options -- long: --include_file - short : -i - arg: options - help: rdiff options -- long: --exclude_file - short : -e - arg: options - help: rdiff options -- long: --mirror - short: -m - help: make a mirror copy instead of a differential snapshot -- long: --sudo - short: -s - help: run the backup as sudo -- long: --no-dir - short: -n - help: don't make a directory of same name within the target, merge sub directories + - long: --password + short: -p + arg: password + help: repo password (or file path) for backup repository + - long: --remote + short: -r + help: backup to a remote machine + - long: --server + arg: url + help: url of restic rest server + - long: --init + help: initialize repo (default is backup) + - long: --snap + help: list repo snapshots + - long: --view + short: -v + help: mount snapshot for viewing (default is BACKUP_MOUNT or /opt/backup/view) + - long: --view-path + help: set custom mount point path for viewing of snapshot, --view not required if set + arg: path + - long: --prune + arg: prune + help: prune repo (default is backup). true for default prune or path to prune settings + - long: --password + short: -p + arg: password + help: repo password (or file path) for backup repository + - long: --settings + short: -s + arg: syaml + help: path to settings file (yaml). Keys are same as long + - long: --options + short: -o + arg: options + help: additional options to pass ot underlying command (restic), "quote" + - long: --include_file + short: -i + arg: include + help: include file + - long: --exclude_file + short: -e + arg: exclude + help: exclude file + - long: --sudo + help: run the backup as sudo + - long: --jq + arg: jq + help: pipe to jq command + + # - long: --host + # short: -h + # arg: thost + # help: host on remote to target to receive backup + # - long: --shost + # arg: shost + # help: remote to host of source + # - long: --user + # short: -u + # arg: tuser + # help: user on remote host + # - long: --suser + # arg: suser + # help: remote user on source host + # - long: --sshcfg + # arg: sshcfg + # help: path to sshcfg file examples: -- backup -m -n -h thost --shost shost -u tuser --suser suser . /target/dir + - backup -p password . /target/dir + - backup -s /path/to/settings/yaml/file diff --git a/all/dev/backup/src/initialize.sh b/all/dev/backup/src/initialize.sh index f2dbc52..c806d9a 100644 --- a/all/dev/backup/src/initialize.sh +++ b/all/dev/backup/src/initialize.sh @@ -4,3 +4,4 @@ # CONFIG_FILE=settings.ini # # Feel free to empty (but not delete) this file. +echo running initialize function \ No newline at end of file diff --git a/all/dev/backup/src/root_command.sh b/all/dev/backup/src/root_command.sh index c477fcf..1e64a23 100644 --- a/all/dev/backup/src/root_command.sh +++ b/all/dev/backup/src/root_command.sh @@ -1,35 +1,140 @@ -echo Running Backup Command +#!/bin/bash + +echo "running root command" inspect_args # module_load ssh module_load confirm +module_load path -local source=${args[source]} -local target=${args[target]} -local shost=$([[ ${args[--shost]} ]] && echo ${args[--shost]}::) -local suser=$([[ ${args[--suser]} ]] && echo ${args[--suser]}@) -local thost=$([[ ${args[--host]} ]] && echo ${args[--host]}::) -local tuser=$([[ ${args[--user]} ]] && echo ${args[--user]}@) -local mirror=${args[--mirror]} -local options=$(echo ${args[--options]} | awk '{gsub(/\\/," ")}1') -local sudo=$([[ ${args[--sudo]} ]] && echo sudo) -local exclude=${args[--exclude_file]} +local settings=${args[--settings]} -if [[ ! $exclude ]]; then -echo checking local excludes -[[ -f $source/exclude.bac ]] && exclude="$source/exclude.bac" -# ls $source -# [[ $EXCLUDE_BACKUP ]] && exclude="$BACKUP_EXCLUDE" +if [[ $settings ]]; then +if [[ -f $settings ]]; then + echo loading settings file $settings + module_load yaml + eval $(parse_yaml $settings "s_") + echo $s_source + echo $s_target + echo $s_host + else + echo settings file $settings does not exist && return 1 +fi fi -exclude=$([[ $exclude ]] && echo --exclude-globbing-filelist $exclude) +if [[ $s_server_host ]]; then + s_server="http$([[ $s_server_secure ]] && echo "s")://${s_server_host}$([[ $s_server_port ]] && echo :${s_server_port} || echo "")" +fi -echo exclude file: $exclude +local password=${args[--password]:-$BACKUP_PASSWORD} +password=${password:-$s_password} +[[ ! $password ]] && echo restic requires a backup repository password, exiting && return 2 +password="RESTIC_PASSWORD=${password}" -# local ssh="--remote-schema \"ssh -C %s /home/sysadmin/.local/bin/rdiff-backup --server\"" +local server=${args[--server]:-$BACKUP_SERVER} +server=${server:-$s_server} + +local hostname=${args[--hostname]:-$s_hostname} +hostname=${hostname:-$s_host} +hostname=${hostname:-$HOSTNAME} + +local options="${args[--options]:-$BACKUP_OPTIONS}" +options="${options:-$s_options}" + +local smount=${args[--source_mount]:-$BACKUP_SOURCE_MOUNT} +smount=${smount:-$s_source_mount} + +echo smount: $smount $s_source_mount + + +local tmount=${args[--target_mount]:-$BACKUP_TARGET_MOUNT} +tmount=${tmount:-$s_target_mount} + +echo tmount: $tmount $s_target_mount + +local source="${args[source]:-$s_source}" +source="${source:-$s_source_path}" +source=$(echo "${source:-$PWD}" | tr -s /) + +echo yaml source $s_source_path $s_source_mount +echo source $source + +echo target $s_target + +echo target path $s_target_path + +local target=${args[target]:-$s_target} +target=${target:-$s_target_path} +target=${target:-$(echo "${source}" | tr -s / | sed -e "s#^[.]##")} +target="$(echo "${target}" | tr -s /)" +echo "target> $target" +if [[ ${tmount} ]]; then + target="${tmount}${target}" +else + target="/${hostname}${target}" +fi + +if [[ $server ]]; then + target="rest:${server}${target}" +fi + +if [[ $smount ]]; then + setpath="--set-path ${source} --tag mount-point:${smount}" + source=${smount}${source} +fi + +local exclude=${args[--exclude_file]:-$BACKUP_EXCLUDE} +exclude=${exclude:-$s_exclude} +exclude=${exclude:-"$source/exclude.bac"} + + +# local shost=$([[ ${args[--shost]} ]] && echo ${args[--shost]}::) +# local suser=$([[ ${args[--suser]} ]] && echo ${args[--suser]}@) +# local thost=$([[ ${args[--host]} ]] && echo ${args[--host]}::) +# local tuser=$([[ ${args[--user]} ]] && echo ${args[--user]}@) + +local options=$(echo ${args[--options]} | awk '{gsub(/\\/," ")}1') + +local bin=$(command -v restic) + +exclude=$([[ -f $exclude ]] && echo "--iexclude-file $exclude" || echo "") + +echo source: $source +echo target $target +echo exclude: $exclude + +local sudo=$([[ ${args[--sudo]} || $s_sudo || $BACKUP_SUDO ]] && echo "sudo" || echo "") + +local pcmd="${sudo} ${password} ${bin} ${options} -r ${target}" + +local cmd="${pcmd} -H ${hostname} ${setpath} backup ${source} ${exclude}" + +if [[ ${args[--init]} ]]; then cmd="${pcmd} init"; fi +if [[ ${args[--snap]} ]]; then cmd="${pcmd} snapshots"; fi +if [[ ${args[--prune]} ]]; then cmd="${pcmd} prune"; fi +if [[ ${args[--view]} || ${args[--view-path]} ]]; then + mount=${args[--view-path]:-$BACKUP_MOUNT} + mount=${mount:-"/opt/backup/view/"} + echo view mount point $mount + if [[ -e ${mount} ]]; then + cmd="${pcmd} mount $mount"; + echo browse files at $mount/snapshots/latest${source} + else + echo $mount: directory for mounting snapshot for viewing does not exist. Create and try again + return 3 + fi +fi + +echo jq argument ${args[--jq]} +if [[ ${args[--jq]} ]];then + cmd="${cmd} | jq ${args[--jq]}" +fi -cmd="$sudo rdiff-backup $options $exclude $ssh ${suser}${shost}$source ${tuser}${thost}$target" echo $cmd confirm run this command? || return 1 -eval $cmd \ No newline at end of file +eval $cmd + +# sudo chown -R $USER:$USER $target +# sudo chown -R $USER:$USER /home/$USER/.cache/restic +# sudo chmod -R g+rwX /home/$USER/.cache/restic \ No newline at end of file diff --git a/all/dev/backup/test b/all/dev/backup/test index ca61632..2d13313 100755 --- a/all/dev/backup/test +++ b/all/dev/backup/test @@ -1,4 +1,4 @@ shopt -s expand_aliases source ../../app/bashly bashly generate -./backup "$@" \ No newline at end of file +./dbackup -s /backup/local/jobs/remote/hacking.yml $1 \ No newline at end of file diff --git a/all/lang/go b/all/lang/go index 60e8ad8..5618995 100644 --- a/all/lang/go +++ b/all/lang/go @@ -2,7 +2,7 @@ # --- Go Language Environment BEGIN --- export GOROOT=/opt/go - export PATH=$PATH:/opt/go/bin - export GOPATH=/opt/go/apps - export PATH=$PATH:/opt/go/apps/bin +export PATH=$PATH:/opt/go/bin +export GOPATH=/opt/go/apps +export PATH=$PATH:/opt/go/apps/bin # --- Go Language Environment END --- diff --git a/all/lang/node b/all/lang/node index 5e83e0e..dec79ba 100644 --- a/all/lang/node +++ b/all/lang/node @@ -44,7 +44,7 @@ alias npma="npm-add-dependencies" # alias npmpub="npm publish --access public" alias npmlrepub="npm publish --registry http://localhost:4873 --force --access restricted" alias npmlpub="npm publish --registry http://localhost:4873 --access restricted" -alias npmkrepub="npm version patch && npm publish --registry https://npm.kebler.net --access restricted" +alias npmkrepub="npm publish --registry https://npm.kebler.net --force --access restricted" alias npmkpub="npm publish --registry https://npm.kebler.net --access restricted" alias npmpatch="npm version patch" alias npmmajor="npm version major" diff --git a/all/lang/python b/all/lang/python index 51e4110..4b06a36 100644 --- a/all/lang/python +++ b/all/lang/python @@ -1,4 +1,14 @@ #!/bin/bash + +use_pyenv () { + if command -v pyenv >/dev/null 2>&1; then + export PYENV_ROOT="/opt/python/pyenv" + export PYENV_VERSION=${PYENV_VERSION:-3.8.7} + eval "$(pyenv init -)" + eval "$(pyenv virtualenv-init -)" + fi +} + # TODO make alias generating function for versions of python alias python3x="sudo -H python3.8 -m" alias spip="sudo -H python3.8 -m pip" @@ -14,24 +24,15 @@ alias pipi="pipx install" alias pipl="pipx list" alias piplv="pipx list --verbose" -if command -v pyenv >/dev/null 2>&1; then - -# pyenv environment path_append "/opt/python/bin" -# eval "$(pyenv init -)" -# eval "$(pyenv virtualenv-init -)" - -export PYENV_ROOT="/opt/python/pyenv" -export PYENV_VERSION=3.8.7 -eval "$(pyenv init -)" -eval "$(pyenv virtualenv-init -)" - -fi - +if command -v pipx >/dev/null 2>&1; then path_append "/opt/python/apps/bin" export PIPX_HOME=/opt/python/apps export PIPX_BIN_DIR=$PIPX_HOME/bin +fi + +[[ $USE_PYENV ]] && use_pyenv spipua () { module_load confirm @@ -44,3 +45,4 @@ echo "$List" confirm "ATTENTION: upgrade all these packages at once??" || return 0 echo "$List" | cut -d' ' -f1 | xargs -n1 sudo -H python$Ver -m pip install -U } + diff --git a/all/modules/chromium/chromium.sh b/all/modules/chromium/chromium.sh index 6f56778..0cdd614 100755 --- a/all/modules/chromium/chromium.sh +++ b/all/modules/chromium/chromium.sh @@ -1,35 +1,52 @@ #!/bin/bash -# user to start MUST be first in arguments +# user to start MUST be first in arguments # if not supplied then will use default -chromium_ () { -local DEFAULT=/opt/chromium -# local DEFAULT="$HOME/.local/share/chromium" -local exe="/usr/bin/chromium" -[[ ! $exe ]] && echo chromium not installed set && return 1 -user=${CHROMIUM_USER} -[[ $1 && ( ! $1 == -* ) ]] && user=$1 && shift -user=${user:-$USER} -if [[ $user == "$USER" ]]; then - unset CHROME_CONFIG_HOME - echo starting chromium for $USER in default directory within users home - echo $exe "$@" - $exe "$@" - else - [[ $user == "incognito" ]] && set -- "$@" "-incognito" - dir=${CHROMIUM_HOME:-$DEFAULT} - echo "$exe $@ --user-data-dir=$dir/$user" - "$exe" "$@" --user-data-dir="$dir"/"$user" +chromium_() { + local DEFAULT=/opt/chromium + # local DEFAULT="$HOME/.local/share/chromium" + local exe="/usr/bin/chromium" + if [[ ! -f $exe ]]; then + echo deb chromium not installed, checking for flatpak version + flatpak=$(flatpak info com.github.Eloston.UngoogledChromium | grep error:) + if [[ $flatpak ]]; then + echo no flatpak version either - exiting && return 1 + else + flatpak=true + exe="/usr/bin/flatpak run --branch=stable --arch=x86_64 --filesystem=