Merge remote-tracking branch 'origin/master' into trantor

trantor
Kebler Network System Administrator 2021-10-27 09:20:14 -07:00
commit 7eaba2ceac
16 changed files with 1063 additions and 439 deletions

1
all/alias/term Executable file
View File

@ -0,0 +1 @@
alias gterm='GNOME_TERMINAL_SCREEN='\'''\'' gnome-terminal'

View File

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
command -v docker >/dev/null 2>&1 || exit command -v docker >/dev/null 2>&1 || return
aws_docker () { aws_docker () {
local cred local cred

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
backup () { backup () {
DIR=$(dirname $(cd "$(dirname "$BASH_SOURCE")" >/dev/null 2>&1 ; pwd -P )) DIR=$(dirname $(cd "$(dirname "$BASH_SOURCE")" >/dev/null 2>&1 ; pwd -P ))
$DIR/dev/backup/backup "$@" $DIR/dev/backup/dbackup "$@"
#module_load backup #module_load backup
#run "$@" #run "$@"
} }

View File

@ -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='docker run --rm -it --volume "$PWD:/app" dannyben/bashly'
alias bashly-update='docker pull dannyben/bashly:latest' alias bashly-update='docker pull dannyben/bashly:latest'

598
all/dev/backup/dbackup Executable file
View File

@ -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 "$@"

View File

@ -1,59 +1,97 @@
name: backup name: dbackup
help: backup/mirror a directory using rdiff or rsync help: differential backup using restic
version: 0.1.0 version: 0.1.0
environment_variables: environment_variables:
- name: BACKUP_EXCLUDE - name: BACKUP_EXCLUDE
help: path to file of excludes help: path to file of excludes
- name: BACKUP_INCLUDE - name: BACKUP_INCLUDE
help: path to directory of includes 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: args:
- name: source - name: source
# required: 1 help: source directory to be backed up, default is $PWD
help: source directory to be backed up, default is $PWD - name: target
- name: target help: "target directory for backup"
help: "target directory for backup"
flags: flags:
- long: --host - long: --password
short: -h short: -p
arg: thost arg: password
help: host on remote to target to receive backup help: repo password (or file path) for backup repository
- long: --shost - long: --remote
arg: shost short: -r
help: remote to host of source help: backup to a remote machine
- long: --user - long: --server
short: -u arg: url
arg: tuser help: url of restic rest server
help: user on remote host - long: --init
- long: --suser help: initialize repo (default is backup)
arg: suser - long: --snap
help: remote user on source host help: list repo snapshots
- long: --sshcfg - long: --view
arg: sshcfg short: -v
help: path to sshcfg file help: mount snapshot for viewing (default is BACKUP_MOUNT or /opt/backup/view)
- long: --options - long: --view-path
short : -o help: set custom mount point path for viewing of snapshot, --view not required if set
arg: options arg: path
help: rdiff options - long: --prune
- long: --include_file arg: prune
short : -i help: prune repo (default is backup). true for default prune or path to prune settings
arg: options - long: --password
help: rdiff options short: -p
- long: --exclude_file arg: password
short : -e help: repo password (or file path) for backup repository
arg: options - long: --settings
help: rdiff options short: -s
- long: --mirror arg: syaml
short: -m help: path to settings file (yaml). Keys are same as long
help: make a mirror copy instead of a differential snapshot - long: --options
- long: --sudo short: -o
short: -s arg: options
help: run the backup as sudo help: additional options to pass ot underlying command (restic), "quote"
- long: --no-dir - long: --include_file
short: -n short: -i
help: don't make a directory of same name within the target, merge sub directories 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: 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

View File

@ -4,3 +4,4 @@
# CONFIG_FILE=settings.ini # CONFIG_FILE=settings.ini
# #
# Feel free to empty (but not delete) this file. # Feel free to empty (but not delete) this file.
echo running initialize function

View File

@ -1,35 +1,140 @@
echo Running Backup Command #!/bin/bash
echo "running root command"
inspect_args inspect_args
# module_load ssh # module_load ssh
module_load confirm module_load confirm
module_load path
local source=${args[source]} local settings=${args[--settings]}
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]}
if [[ ! $exclude ]]; then if [[ $settings ]]; then
echo checking local excludes if [[ -f $settings ]]; then
[[ -f $source/exclude.bac ]] && exclude="$source/exclude.bac" echo loading settings file $settings
# ls $source module_load yaml
# [[ $EXCLUDE_BACKUP ]] && exclude="$BACKUP_EXCLUDE" 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 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 echo $cmd
confirm run this command? || return 1 confirm run this command? || return 1
eval $cmd 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

View File

@ -1,4 +1,4 @@
shopt -s expand_aliases shopt -s expand_aliases
source ../../app/bashly source ../../app/bashly
bashly generate bashly generate
./backup "$@" ./dbackup -s /backup/local/jobs/remote/hacking.yml $1

View File

@ -2,7 +2,7 @@
# --- Go Language Environment BEGIN --- # --- Go Language Environment BEGIN ---
export GOROOT=/opt/go export GOROOT=/opt/go
export PATH=$PATH:/opt/go/bin export PATH=$PATH:/opt/go/bin
export GOPATH=/opt/go/apps export GOPATH=/opt/go/apps
export PATH=$PATH:/opt/go/apps/bin export PATH=$PATH:/opt/go/apps/bin
# --- Go Language Environment END --- # --- Go Language Environment END ---

View File

@ -44,7 +44,7 @@ alias npma="npm-add-dependencies"
# alias npmpub="npm publish --access public" # alias npmpub="npm publish --access public"
alias npmlrepub="npm publish --registry http://localhost:4873 --force --access restricted" alias npmlrepub="npm publish --registry http://localhost:4873 --force --access restricted"
alias npmlpub="npm publish --registry http://localhost:4873 --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 npmkpub="npm publish --registry https://npm.kebler.net --access restricted"
alias npmpatch="npm version patch" alias npmpatch="npm version patch"
alias npmmajor="npm version major" alias npmmajor="npm version major"

View File

@ -1,4 +1,14 @@
#!/bin/bash #!/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 # TODO make alias generating function for versions of python
alias python3x="sudo -H python3.8 -m" alias python3x="sudo -H python3.8 -m"
alias spip="sudo -H python3.8 -m pip" alias spip="sudo -H python3.8 -m pip"
@ -14,24 +24,15 @@ alias pipi="pipx install"
alias pipl="pipx list" alias pipl="pipx list"
alias piplv="pipx list --verbose" alias piplv="pipx list --verbose"
if command -v pyenv >/dev/null 2>&1; then
# pyenv environment
path_append "/opt/python/bin" path_append "/opt/python/bin"
# eval "$(pyenv init -)" if command -v pipx >/dev/null 2>&1; then
# eval "$(pyenv virtualenv-init -)"
export PYENV_ROOT="/opt/python/pyenv"
export PYENV_VERSION=3.8.7
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
fi
path_append "/opt/python/apps/bin" path_append "/opt/python/apps/bin"
export PIPX_HOME=/opt/python/apps export PIPX_HOME=/opt/python/apps
export PIPX_BIN_DIR=$PIPX_HOME/bin export PIPX_BIN_DIR=$PIPX_HOME/bin
fi
[[ $USE_PYENV ]] && use_pyenv
spipua () { spipua () {
module_load confirm module_load confirm
@ -44,3 +45,4 @@ echo "$List"
confirm "ATTENTION: upgrade all these packages at once??" || return 0 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 echo "$List" | cut -d' ' -f1 | xargs -n1 sudo -H python$Ver -m pip install -U
} }

View File

@ -2,34 +2,51 @@
# user to start MUST be first in arguments # user to start MUST be first in arguments
# if not supplied then will use default # if not supplied then will use default
chromium_ () { chromium_() {
local DEFAULT=/opt/chromium local DEFAULT=/opt/chromium
# local DEFAULT="$HOME/.local/share/chromium" # local DEFAULT="$HOME/.local/share/chromium"
local exe="/usr/bin/chromium" local exe="/usr/bin/chromium"
[[ ! $exe ]] && echo chromium not installed set && return 1 if [[ ! -f $exe ]]; then
user=${CHROMIUM_USER} echo deb chromium not installed, checking for flatpak version
[[ $1 && ( ! $1 == -* ) ]] && user=$1 && shift flatpak=$(flatpak info com.github.Eloston.UngoogledChromium | grep error:)
user=${user:-$USER} if [[ $flatpak ]]; then
if [[ $user == "$USER" ]]; then echo no flatpak version either - exiting && return 1
unset CHROME_CONFIG_HOME else
echo starting chromium for $USER in default directory within users home flatpak=true
echo $exe "$@" exe="/usr/bin/flatpak run --branch=stable --arch=x86_64 --filesystem=<dir> --command=/app/bin/chromium --file-forwarding com.github.Eloston.UngoogledChromium @@u"
$exe "$@" fi
else
[[ $user == "incognito" ]] && set -- "$@" "-incognito"
dir=${CHROMIUM_HOME:-$DEFAULT}
echo "$exe $@ --user-data-dir=$dir/$user"
"$exe" "$@" --user-data-dir="$dir"/"$user"
fi fi
local instance=${CHROMIUM_INSTANCE}
[[ $1 && (! $1 == -*) ]] && instance=$1 && shift
[[ $1 && (! $1 == -*) ]] && url=$1 && shift
if [[ $instance =~ http[s]?:\/\/ ]]; then
url=$instance
instance=""
if [[ $url =~ ^-+ ]]; then
url=""
set -- "$@" $url
url=""
fi
fi
local dir
if [[ ! $instance ]]; then
unset CHROME_CONFIG_HOME
$HOME/.config/chromium
echo starting chromium for $USER in
dir=$HOME/.config/chromium
exe="${exe/<dir>/$dir}"
# echo $exe "$@" $([[ $flatpak ]] && echo " @@")
# $exe "$@"
else
[[ $instance == "incognito" ]] && set -- "$@" "-incognito"
dir=${CHROMIUM_HOME:-$DEFAULT}/$instance
exe="${exe/<dir>/$dir}"
fi
$exe $@ --user-data-dir=$dir $url $([[ $flatpak ]] && echo "@@")
} }
# # if script was executed then call the function # # if script was executed then call the function
(return 0 2>/dev/null) || chromium_ $@ (return 0 2>/dev/null) || chromium_ $@

View File

@ -1,139 +1,139 @@
#!/bin/bash #!/bin/bash
hugo_install () { hugo_install () {
# inspried from this forum post https://discourse.gohugo.io/t/script-to-install-latest-hugo-release-on-macos-and-ubuntu/14774/10 # inspried from this forum post https://discourse.gohugo.io/t/script-to-install-latest-hugo-release-on-macos-and-ubuntu/14774/10
# if you have run into github api anonymous access limits which happens during debugging/dev then add user and token here or sourced from a separate file # if you have run into github api anonymous access limits which happens during debugging/dev then add user and token here or sourced from a separate file
# . ~/githubapitoken # . ~/githubapitoken
#GITHUB_USER="" #GITHUB_USER=""
#GITHUB_TOKEN="" #GITHUB_TOKEN=""
if [ "$GITHUB_TOKEN" != "" ]; then if [ "$GITHUB_TOKEN" != "" ]; then
echo using access token with script echo using access token with script
echo $GITHUB_USER $GITHUB_TOKEN echo $GITHUB_USER $GITHUB_TOKEN
fi fi
EXTENDED=false EXTENDED=false
FORCE=false FORCE=false
EFILE="" EFILE=""
# options # options
# e - download and install the extended version # e - download and install the extended version
# c - use 'hugoe' as the install command for extended version otherwise 'hugo' will launch extended version # c - use 'hugoe' as the install command for extended version otherwise 'hugo' will launch extended version
# f - force download/overwrite of same version # f - force download/overwrite of same version
declare OPTION declare OPTION
declare OPTARG declare OPTARG
declare OPTIND declare OPTIND
while getopts 'ecf' OPTION; do while getopts 'ecf' OPTION; do
case "$OPTION" in case "$OPTION" in
e) e)
echo "installing extended hugo" echo "installing extended hugo"
EXTENDED=true EXTENDED=true
;; ;;
c) c)
if [ $EXTENDED = true ]; then
EFILE="e"
echo using hugoe for extended command
fi
;;
f)
echo "FORCING download/overwrite"
FORCE=true
;;
esac
done
shift $(( OPTIND - 1 ))
DEFAULT_BIN_DIR="/usr/local/bin"
# Single optional argument is directory in which to install hugo
BIN_DIR=${1:-"$DEFAULT_BIN_DIR"}
BIN_PATH="$(which hugo$EFILE)"
declare -A ARCHES
ARCHES=( ["arm64"]="ARM64" ["aarch64"]="ARM64" ["x86_64"]="64bit" ["arm32"]="ARM" ["armhf"]="ARM" )
ARCH=$(arch)
if [ -z "${ARCHES[$ARCH]}" ]; then
echo Your machine kernel architecture $ARCH is not supported by this script, aborting
exit 1
fi
INSTALLED="$(hugo$EFILE version 2>/dev/null | cut -d'v' -f2 | cut -c 1-6)"
CUR_VERSION=${INSTALLED:-"None"}
echo $(curl -u $GITHUB_USER:$GITHUB_TOKEN -s https://api.github.com/repos/gohugoio/hugo/releases/latest | grep tag_name)
NEW_VERSION="$(curl -u $GITHUB_USER:$GITHUB_TOKEN -s https://api.github.com/repos/gohugoio/hugo/releases/latest \
| grep tag_name \
| cut -d'v' -f2 | cut -c 1-6)"
echo "Hugo `[ $EXTENDED == true ] && echo "Extended"`: Current Version : $CUR_VERSION => New Version: $NEW_VERSION"
if [ -z "$NEW_VERSION" ]; then
echo Unable to retrieve new version number - Likely you have reached github anonymous limit
echo set environment variable `$GITHUB_USER` and `$GITHUB_TOKEN` and try again
exit 1
fi
[[ $NEW_VERSION = $CUR_VERSION ]] && [[ $FORCE = false ]] && echo Latest version already installed at $BIN_PATH && return 0
pushd /tmp/ > /dev/null
URL=$(curl -u $GITHUB_USER:$GITHUB_TOKEN -s https://api.github.com/repos/gohugoio/hugo/releases/latest \
| grep "browser_download_url.*hugo.*._Linux-${ARCHES[$ARCH]}\.tar\.gz" \
| \
if [ $EXTENDED = true ]; then if [ $EXTENDED = true ]; then
EFILE="e" grep "_extended"
echo using hugoe for extended command else
fi grep -v "_extended"
;; fi \
f) | cut -d ":" -f 2,3 \
echo "FORCING download/overwrite" | tr -d \" \
FORCE=true )
;;
esac
done
shift $(( OPTIND - 1 )) echo $URL
DEFAULT_BIN_DIR="/usr/local/bin" echo "Installing version $NEW_VERSION `[ $EXTENDED == true ] && echo "Extended"` "
# Single optional argument is directory in which to install hugo echo "This machine's architecture is $ARCH"
BIN_DIR=${1:-"$DEFAULT_BIN_DIR"} echo "Downloading Tarball $URL"
BIN_PATH="$(which hugo$EFILE)" wget --user=-u $GITHUB_USER --password=$GITHUB_TOKEN -q $URL
declare -A ARCHES
ARCHES=( ["arm64"]="ARM64" ["aarch64"]="ARM64" ["x86_64"]="64bit" ["arm32"]="ARM" ["armhf"]="ARM" )
ARCH=$(arch)
if [ -z "${ARCHES[$ARCH]}" ]; then TARBALL=$(basename $URL)
echo Your machine kernel architecture $ARCH is not supported by this script, aborting # TARBALL="$(find . -name "*Linux-${ARCHES[$ARCH]}.tar.gz" 2>/dev/null)"
exit 1 echo Expanding Tarball, $TARBALL
fi tar -xzf $TARBALL hugo
chmod +x hugo
INSTALLED="$(hugo$EFILE version 2>/dev/null | cut -d'v' -f2 | cut -c 1-6)" if [ -w $BIN_DIR ]; then
CUR_VERSION=${INSTALLED:-"None"} echo "Installing hugo to $BIN_DIR"
echo $(curl -u $GITHUB_USER:$GITHUB_TOKEN -s https://api.github.com/repos/gohugoio/hugo/releases/latest | grep tag_name) mv hugo -f $BIN_DIR/hugo$EFILE
NEW_VERSION="$(curl -u $GITHUB_USER:$GITHUB_TOKEN -s https://api.github.com/repos/gohugoio/hugo/releases/latest \ else
| grep tag_name \ echo "installing hugo to $BIN_DIR (sudo)"
| cut -d'v' -f2 | cut -c 1-6)" sudo mv -f hugo $BIN_DIR/hugo$EFILE
fi
echo "Hugo `[ $EXTENDED == true ] && echo "Extended"`: Current Version : $CUR_VERSION => New Version: $NEW_VERSION" rm $TARBALL
if [ -z "$NEW_VERSION" ]; then popd > /dev/null
echo Unable to retrieve new version number - Likely you have reached github anonymous limit
echo set environment variable `$GITHUB_USER` and `$GITHUB_TOKEN` and try again
exit 1
fi
[[ $NEW_VERSION = $CUR_VERSION ]] && [[ $FORCE = false ]] && echo Latest version already installed at $BIN_PATH && return 0 echo Installing hugo `[ $EXTENDED == true ] && echo "extended"` as hugo$EFILE
pushd /tmp/ > /dev/null BIN_PATH="$(which hugo$EFILE)"
URL=$(curl -u $GITHUB_USER:$GITHUB_TOKEN -s https://api.github.com/repos/gohugoio/hugo/releases/latest \ if [ -z "$BIN_PATH" ]; then
| grep "browser_download_url.*hugo.*._Linux-${ARCHES[$ARCH]}\.tar\.gz" \ printf "WARNING: Installed Hugo Binary in $BIN_DIR is not in your environment path\nPATH=$PATH\n"
| \ else
if [ $EXTENDED = true ]; then if [ "$BIN_DIR/hugo$EFILE" != "$BIN_PATH" ]; then
grep "_extended" echo "WARNING: Just installed Hugo binary hugo$EFILE to, $BIN_DIR , conflicts with existing Hugo in $BIN_PATH"
else echo "add $BIN_DIR to path and delete $BIN_PATH"
grep -v "_extended" else
fi \ echo "--- Installation Confirmation ---"
| cut -d ":" -f 2,3 \ printf "New Hugo binary version at $BIN_PATH is\n $($BIN_PATH version)\n"
| tr -d \" \ fi
) fi
echo $URL
echo "Installing version $NEW_VERSION `[ $EXTENDED == true ] && echo "Extended"` "
echo "This machine's architecture is $ARCH"
echo "Downloading Tarball $URL"
wget --user=-u $GITHUB_USER --password=$GITHUB_TOKEN -q $URL
TARBALL=$(basename $URL)
# TARBALL="$(find . -name "*Linux-${ARCHES[$ARCH]}.tar.gz" 2>/dev/null)"
echo Expanding Tarball, $TARBALL
tar -xzf $TARBALL hugo
chmod +x hugo
if [ -w $BIN_DIR ]; then
echo "Installing hugo to $BIN_DIR"
mv hugo -f $BIN_DIR/hugo$EFILE
else
echo "installing hugo to $BIN_DIR (sudo)"
sudo mv -f hugo $BIN_DIR/hugo$EFILE
fi
rm $TARBALL
popd > /dev/null
echo Installing hugo `[ $EXTENDED == true ] && echo "extended"` as hugo$EFILE
BIN_PATH="$(which hugo$EFILE)"
if [ -z "$BIN_PATH" ]; then
printf "WARNING: Installed Hugo Binary in $BIN_DIR is not in your environment path\nPATH=$PATH\n"
else
if [ "$BIN_DIR/hugo$EFILE" != "$BIN_PATH" ]; then
echo "WARNING: Just installed Hugo binary hugo$EFILE to, $BIN_DIR , conflicts with existing Hugo in $BIN_PATH"
echo "add $BIN_DIR to path and delete $BIN_PATH"
else
echo "--- Installation Confirmation ---"
printf "New Hugo binary version at $BIN_PATH is\n $($BIN_PATH version)\n"
fi
fi
} }

View File

@ -1,171 +1,29 @@
#!/bin/bash sudo rclone.bin
chmod 775 rclone.bin
rclone_install () { touch $INSTALL_DIR/rclone
touch $INSTALL_DIR/rclone.conf
local INSTALL_DIR="/opt" mkdir $INSTALL_DIR/cache 2> /dev/null || true
local BIN_DIR="/opt/bin" echo '#!/bin/bash' > $INSTALL_DIR/rclone
local FORCE=false CMD=$(echo $INSTALL_DIR/rclone.bin \
local VERSION=current --config=$INSTALL_DIR/rclone.conf \
--cache-dir=$INSTALL_DIR/cache \
declare OPTION '$@' \
declare OPTARG
declare OPTIND
while getopts 'i:b:v:f' OPTION; do
case "$OPTION" in
i)
INSTALL_DIR=$OPTARG
;;
b)
BIN_DIR=$OPTARG
;;
v)
echo "Installing Beta"
VERSION=$OPTARG
;;
f)
echo "FORCING download/overwrite"
FORCE=true
;;
esac
done
shift $(( OPTIND - 1 ))
# error codes
# 0 - exited without problems
# 1 - parameters not supported were used or some unexpected error occurred
# 2 - OS or Architecture not supported by this script
# 3 - installed version of rclone is up to date
# 4 - supported unzip tools are not available
# 5 - unable to install without sudo permission
[[ ! -w "$INSTALL_DIR" ]] && echo $INSTALL is not writable by user $USER, can\'t install there && exit 5
[[ ! -w "$BIN_DIR" ]] && echo $BIN_DIR is not writable by user $USER, won\'t be able to link binary there && exit 5
INSTALL_DIR=$INSTALL_DIR/rclone
# if [[ $EUID != 0 ]]; then
# sudo "$0" "$@"
# exit $?
# fi
#detect the platform
set +e
OS="`uname`"
case $OS in
Linux)
OS='linux'
;;
*)
echo 'Only Linux OS not supported by this script'
exit 2
;;
esac
OS_type="`uname -m`"
case $OS_type in
x86_64|amd64)
OS_type='amd64'
;;
i?86|x86)
OS_type='386'
;;
arm*)
OS_type='arm'
;;
aarch64)
OS_type='arm64'
;;
*)
echo 'OS architecture not supported'
exit 2
;;
esac
set -e
#when adding a tool to the list make sure to also add its corresponding command further in the script
# exit if no unzip tools available
[[ -z "unzip" ]] && printf "Please install unzip and try again.\n\n" && exit 4
# Make sure we don't create a root owned .config/rclone directory #2127
# export XDG_CONFIG_HOME=config
#check installed version of rclone to determine if update is necessary
# installed_version=`rclone --version 2>>errors | head -n 1`
# if [ -z "${install_beta}" ]; then
# current_version=`curl https://downloads.rclone.org/version.txt`
# else
# current_version=`curl https://beta.rclone.org/version.txt`
# fi
#
# if [ "$version" = "$current_version" ]; then
# printf "\nThe latest ${install_beta}version of rclone ${version} is already installed.\n\n"
# exit 3
# fi
echo Installing to $INSTALL_DIR
mkdir -p $INSTALL_DIR
cd $INSTALL_DIR
# mv rclone.bin rclone.bin.prev
#create tmp directory and move to it with macOS compatibility fallback
# mkdir $INSTALL_DIR/zip
# $(mktemp -d -f rclone-zip)
# cd $zip_dir
# echo made temp
#download and unzip
if [[ $VERSION = "current" ]]; then
download_link="https://downloads.rclone.org/rclone-current-$OS-$OS_type.zip"
rclone_zip="rclone-current-$OS-$OS_type.zip"
else
download_link="https://beta.rclone.org/rclone-beta-latest-$OS-$OS_type.zip"
rclone_zip="rclone-beta-latest-$OS-$OS_type.zip"
fi
echo downloading rclone binary archive $download_link
# curl -O $download_link
echo expanding archive
unzip -j -o -a $rclone_zip
mkdir -p $INSTALL_DIR/docs 2> /dev/null || true
rm $INSTALL_DIR/docs/*.* 2> /dev/null || true
echo moving documentation files to docs/
mv *.1 *.txt README.* $INSTALL_DIR/docs/ 2> /dev/null || true
# rm *.zip
echo preparing customized rclone command
rm -rf rclone.bin
mv rclone rclone.bin
chown :sudo rclone.bin
chmod 775 rclone.bin
touch $INSTALL_DIR/rclone
touch $INSTALL_DIR/rclone.conf
mkdir $INSTALL_DIR/cache 2> /dev/null || true
echo '#!/bin/bash' > $INSTALL_DIR/rclone
CMD=$(echo $INSTALL_DIR/rclone.bin \
--config=$INSTALL_DIR/rclone.conf \
--cache-dir=$INSTALL_DIR/cache \
'$@' \
) )
echo "$CMD" >> $INSTALL_DIR/rclone echo "$CMD" >> $INSTALL_DIR/rclone
chown :sudo rclone chown :sudo rclone
chmod 775 rclone chmod 775 rclone
rm $BIN_DIR/rclone rm $BIN_DIR/rclone
ln -s $INSTALL_DIR/rclone $BIN_DIR/rclone ln -s $INSTALL_DIR/rclone $BIN_DIR/rclone
echo -e "rclone customized command can be launched from echo where: $(command -v rclone) \n $CMD" echo -e "rclone customized command can be launched from $(command -v rclone) \n $CMD"
cd .. echo -e "uncustomized rclone can be run from $INSTALL_DIR/rclone.bin"
cd ..
#update version variable post install
version=`rclone --version 2>>errors | head -n 1`
printf "\n${last_version} has successfully installed."
#update version variable post install printf '\nNow run "rclone config" to set up remotes. Check https://rclone.org/docs/ for more details.\n\n'
version=`rclone --version 2>>errors | head -n 1` return 0
printf "\n${version} has successfully installed."
printf '\nNow run "rclone config" for setup. Check https://rclone.org/docs/ for more details.\n\n'
exit 0
} }

View File

@ -1,20 +1,24 @@
#!/bin/bash #!/bin/bash
command -v code >/dev/null 2>&1 || exit VSCODE_BIN=$(command -v code)
VSCODE_BIN=${VSCODE_BIN:-$(command -v codium)}
[[ $VSCODE_BIN ]] || {
echo "no vscode binary on machine"
exit
}
# set default home here # set default home here
# can pass # can pass
vscode () { vscode() {
#local home=$HOME #local home=$HOME
local home=/opt/vscode local home=/opt/vscode
home=${VSCODE_HOME:-$home} home=${VSCODE_HOME:-$home}
[[ $1 == "-h" ]] && home=$2 && shift 2 [[ $1 == "-h" ]] && home=$2 && shift 2
mkdir -p $home mkdir -p ${home}/${USER}
[[ $? -ne 0 ]] && echo "unable to set vscode home at $home, aborting" && return 1 [[ $? -ne 0 ]] && echo "unable to set vscode home at $home/$USER, aborting" && return 1
exts=${home}/extensions exts=${home}/${USER}/extensions
user=${home}/user user=${home}/${USER}/data
exe=$(command -v code) echo $VSCODE_BIN --user-data-dir=$user --extensions-dir=$exts "$@"
$exe --user-data-dir=$user --extensions-dir=$exts "$@" $VSCODE_BIN --user-data-dir=$user --extensions-dir=$exts "$@"
} }
# # if script was executed then call the function # # if script was executed then call the function