feat: will look in $HOME/.browsers first for instance then in default or set chromium home usually /opt/chromium. Thus a bindfs instance for the current user will take precedence.

master
Kebler Network System Administrator 2021-12-04 22:14:09 -08:00
parent f424d8a644
commit cf774db039
8 changed files with 807 additions and 473 deletions

View File

@ -1,364 +0,0 @@
#!/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
echo Running Backup Command
inspect_args
# module_load ssh
module_load confirm
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]}
if [[ ! $exclude ]]; then
[[ -f $source/exclude.bac ]] && exclude="$source/exclude.bac"
# ls $source
# [[ $EXCLUDE_BACKUP ]] && exclude="$BACKUP_EXCLUDE"
fi
echo making exclude
[[ $exclude ]] && exclude="--exclude-globbing-filelist $exclude"
# local ssh="--remote-schema \"ssh -C %s /home/sysadmin/.local/bin/rdiff-backup --server\""
cmd="$sudo rdiff-backup $options $exclude $ssh ${suser}${shost}$source ${tuser}${thost}$target"
echo $cmd
confirm run this command? || return 1
eval $cmd
}
# :command.version_command
version_command() {
echo "$version"
}
# :command.usage
backup_usage() {
if [[ -n $long_usage ]]; then
printf "backup - backup/mirror a directory using rdiff or rsync\n"
echo
else
printf "backup - backup/mirror a directory using rdiff or rsync\n"
echo
fi
printf "Usage:\n"
printf " backup [SOURCE] [TARGET] [options]\n"
printf " backup --help\n"
printf " backup --version | -v\n"
echo
if [[ -n $long_usage ]]; then
printf "Options:\n"
# :command.usage_fixed_flags
echo " --help"
printf " Show this help\n"
echo
echo " --version, -v"
printf " Show version number\n"
echo
# :command.usage_flags
# :flag.usage
echo " --host, -h THOST"
printf " host on remote to target to receive backup\n"
echo
# :flag.usage
echo " --shost SHOST"
printf " remote to host of source\n"
echo
# :flag.usage
echo " --user, -u TUSER"
printf " user on remote host\n"
echo
# :flag.usage
echo " --suser SUSER"
printf " remote user on source host\n"
echo
# :flag.usage
echo " --sshcfg SSHCFG"
printf " path to sshcfg file\n"
echo
# :flag.usage
echo " --options, -o OPTIONS"
printf " rdiff options\n"
echo
# :flag.usage
echo " --include_file, -i OPTIONS"
printf " rdiff options\n"
echo
# :flag.usage
echo " --exclude_file, -e OPTIONS"
printf " rdiff options\n"
echo
# :flag.usage
echo " --mirror, -m"
printf " make a mirror copy instead of a differential snapshot\n"
echo
# :flag.usage
echo " --sudo, -s"
printf " run the backup as sudo\n"
echo
# :flag.usage
echo " --no-dir, -n"
printf " don't make a directory of same name within the target, merge sub directories\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
# :command.usage_examples
printf "Examples:\n"
printf " backup -m -n -h thost --shost shost -u tuser --suser suser . /target/dir\n"
echo
fi
}
# :command.inspect_args
inspect_args() {
echo args:
for k in "${!args[@]}"; do echo "- \${args[$k]} = ${args[$k]}"; done
}
# :command.command_functions
# :command.parse_requirements
parse_requirements() {
# :command.fixed_flag_filter
case "$1" in
--version | -v )
version_command
exit
;;
--help )
long_usage=yes
backup_usage
exit 1
;;
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
--host | -h )
if [[ $2 && $2 != -* ]]; then
args[--host]="$2"
shift
shift
else
printf "%s\n" "--host requires an argument: --host, -h THOST"
exit 1
fi
;;
# :flag.case
--shost )
if [[ $2 && $2 != -* ]]; then
args[--shost]="$2"
shift
shift
else
printf "%s\n" "--shost requires an argument: --shost SHOST"
exit 1
fi
;;
# :flag.case
--user | -u )
if [[ $2 && $2 != -* ]]; then
args[--user]="$2"
shift
shift
else
printf "%s\n" "--user requires an argument: --user, -u TUSER"
exit 1
fi
;;
# :flag.case
--suser )
if [[ $2 && $2 != -* ]]; then
args[--suser]="$2"
shift
shift
else
printf "%s\n" "--suser requires an argument: --suser SUSER"
exit 1
fi
;;
# :flag.case
--sshcfg )
if [[ $2 && $2 != -* ]]; then
args[--sshcfg]="$2"
shift
shift
else
printf "%s\n" "--sshcfg requires an argument: --sshcfg SSHCFG"
exit 1
fi
;;
# :flag.case
--options | -o )
if [[ $2 && $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 && $2 != -* ]]; then
args[--include_file]="$2"
shift
shift
else
printf "%s\n" "--include_file requires an argument: --include_file, -i OPTIONS"
exit 1
fi
;;
# :flag.case
--exclude_file | -e )
if [[ $2 && $2 != -* ]]; then
args[--exclude_file]="$2"
shift
shift
else
printf "%s\n" "--exclude_file requires an argument: --exclude_file, -e OPTIONS"
exit 1
fi
;;
# :flag.case
--mirror | -m )
args[--mirror]=1
shift
;;
# :flag.case
--sudo | -s )
args[--sudo]=1
shift
;;
# :flag.case
--no-dir | -n )
args[--no-dir]=1
shift
;;
-* )
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.default_assignments
}
# :command.initialize
initialize() {
version="0.1.0"
long_usage=''
set -e
# :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.
}
# :command.run
run() {
declare -A args
parse_requirements "$@"
if [[ ${args[--version]} ]]; then
version_command
elif [[ ${args[--help]} ]]; then
long_usage=yes
backup_usage
elif [[ $action == "root" ]]; then
root_command
fi
}
initialize
run "$@"

View File

@ -2,21 +2,27 @@
# This script was generated by bashly (https://github.com/DannyBen/bashly)
# Modifying it manually is not recommended
# :script.bash3_bouncer
if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then
printf "bash version 4 or higher is required\n"
exit 1
fi
# :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
@ -29,48 +35,47 @@ root_command() {
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#^[.]##")}
@ -81,42 +86,41 @@ root_command() {
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
@ -132,16 +136,16 @@ root_command() {
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
@ -156,10 +160,12 @@ version_command() {
dbackup_usage() {
if [[ -n $long_usage ]]; then
printf "dbackup - differential backup using restic\n"
echo
echo
else
printf "dbackup - differential backup using restic\n"
echo
echo
fi
printf "Usage:\n"
@ -182,128 +188,128 @@ dbackup_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
@ -360,32 +366,31 @@ inspect_args() {
# :command.parse_requirements
parse_requirements() {
# :command.fixed_flag_filter
case "$1" in
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
if [[ -n ${2+x} ]]; then
# :flag.validations
args[--password]="$2"
shift
shift
@ -394,16 +399,17 @@ parse_requirements() {
exit 1
fi
;;
# :flag.case
--remote | -r )
args[--remote]=1
shift
;;
# :flag.case
--server )
if [[ $2 ]]; then
if [[ -n ${2+x} ]]; then
# :flag.validations
args[--server]="$2"
shift
shift
@ -412,28 +418,29 @@ parse_requirements() {
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
if [[ -n ${2+x} ]]; then
# :flag.validations
args[--view-path]="$2"
shift
shift
@ -442,10 +449,11 @@ parse_requirements() {
exit 1
fi
;;
# :flag.case
--prune )
if [[ $2 ]]; then
if [[ -n ${2+x} ]]; then
# :flag.validations
args[--prune]="$2"
shift
shift
@ -454,10 +462,11 @@ parse_requirements() {
exit 1
fi
;;
# :flag.case
--password | -p )
if [[ $2 ]]; then
if [[ -n ${2+x} ]]; then
# :flag.validations
args[--password]="$2"
shift
shift
@ -466,10 +475,11 @@ parse_requirements() {
exit 1
fi
;;
# :flag.case
--settings | -s )
if [[ $2 ]]; then
if [[ -n ${2+x} ]]; then
# :flag.validations
args[--settings]="$2"
shift
shift
@ -478,10 +488,11 @@ parse_requirements() {
exit 1
fi
;;
# :flag.case
--options | -o )
if [[ $2 ]]; then
if [[ -n ${2+x} ]]; then
# :flag.validations
args[--options]="$2"
shift
shift
@ -490,10 +501,11 @@ parse_requirements() {
exit 1
fi
;;
# :flag.case
--include_file | -i )
if [[ $2 ]]; then
if [[ -n ${2+x} ]]; then
# :flag.validations
args[--include_file]="$2"
shift
shift
@ -502,10 +514,11 @@ parse_requirements() {
exit 1
fi
;;
# :flag.case
--exclude_file | -e )
if [[ $2 ]]; then
if [[ -n ${2+x} ]]; then
# :flag.validations
args[--exclude_file]="$2"
shift
shift
@ -514,16 +527,17 @@ parse_requirements() {
exit 1
fi
;;
# :flag.case
--sudo )
args[--sudo]=1
shift
;;
# :flag.case
--jq )
if [[ $2 ]]; then
if [[ -n ${2+x} ]]; then
# :flag.validations
args[--jq]="$2"
shift
shift
@ -532,19 +546,20 @@ parse_requirements() {
exit 1
fi
;;
-* )
printf "invalid option: %s\n" "$key"
exit 1
;;
* )
# :command.parse_requirements_case
if [[ ! ${args[source]} ]]; then
if [[ -z ${args[source]+x} ]]; then
# :argument.validations
args[source]=$1
shift
elif [[ ! ${args[target]} ]]; then
elif [[ -z ${args[target]+x} ]]; then
# :argument.validations
args[target]=$1
shift
else
@ -552,9 +567,11 @@ parse_requirements() {
exit 1
fi
;;
esac
done
# :command.required_args_filter
# :command.required_flags_filter
# :command.catch_all_filter
# :command.default_assignments
# :command.whitelist_filter
@ -566,11 +583,6 @@ initialize() {
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
@ -583,9 +595,9 @@ initialize() {
# :command.run
run() {
declare -A args
declare -a other_args
declare -a input
declare -A args=()
declare -a other_args=()
declare -a input=()
normalize_input "$@"
parse_requirements "${input[@]}"

598
all/dev/backup/dbackup (copy) 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

@ -0,0 +1,50 @@
#!/bin/bash
# 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"
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=<dir> --command=/app/bin/chromium --file-forwarding com.github.Eloston.UngoogledChromium @@u"
fi
fi
# an instance gets it's own directory
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
dir=$HOME/.config/chromium
exe="${exe/<dir>/$dir}"
echo starting chromium for $USER in
else
[[ $instance == "incognito" ]] && set -- "$@" "-incognito"
dir=${CHROMIUM_HOME:-$DEFAULT}/$instance
exe="${exe/<dir>/$dir}"
fi
echo $exe $@ --user-data-dir=$dir $url $([[ $flatpak ]] && echo "@@")
}
# # if script was executed then call the function
(return 0 2>/dev/null) || chromium_ $@

View File

@ -4,11 +4,12 @@
# if not supplied then will use default
chromium_() {
local DEFAULT=/opt/chromium
local DEFAULT_USER=$HOME/.browsers
# local DEFAULT="$HOME/.local/share/chromium"
local exe="/usr/bin/chromium"
[[ $1 == -g ]] && exe=$(command -v google-chrome) && shift
echo exe $exe
echo execuatble to be used: $exe
if [[ ! -f $exe ]]; then
echo chromium/chrome not installed, checking for flatpak version
flatpak=$(flatpak info com.github.Eloston.UngoogledChromium | grep error:)
@ -40,11 +41,10 @@ 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
dir=${DEFAULT_USER}/$instance
dir=$([[ -d "$dir" ]] && echo $dir || echo "${CHROMIUM_HOME:-$DEFAULT}/$instance")
exe="${exe/<dir>/$dir}"
fi
mkdir -p $dir

View File

@ -0,0 +1,33 @@
#!/usr/bin/env bash
# https://raw.githubusercontent.com/flathub/com.github.Eloston.UngoogledChromium/master/widevine-install.sh
# https://github.com/flathub/com.github.Eloston.UngoogledChromium
# Exit on error and forbid unset variables
set -eu
# Get latest WideVine Version by getting last line in https://dl.google.com/widevine-cdm/versions.txt
_widevine_ver="$(wget -qO- https://dl.google.com/widevine-cdm/versions.txt | tail -n1)"
# Get the architecture of the current machine
ARCH="$(uname -m)"
case "$ARCH" in
x86_64)
WIDEVINE_ARCH="x64"
CHROMIUM_ARCH="x64"
;;
*)
echo "The architecture $ARCH is not supported." >&2
exit 1
;;
esac
# Download WideVine into a temporary file and use trap to delete it on exit
widevine_zip="$(mktemp)"
trap 'rm -f "${widevine_zip:?}"' EXIT
wget -O "$widevine_zip" "https://dl.google.com/widevine-cdm/${_widevine_ver}-linux-${WIDEVINE_ARCH}.zip"
# Install WideVine from zip file into UngoogledChromium flatpak
_install_prefix="/opt/chromium/$1/WidevineCdm/${_widevine_ver}"
unzip -p "$widevine_zip" libwidevinecdm.so | install -Dm644 "/dev/stdin" "${_install_prefix}/_platform_specific/linux_$CHROMIUM_ARCH/libwidevinecdm.so"
unzip -p "$widevine_zip" manifest.json | install -m644 "/dev/stdin" "${_install_prefix}/manifest.json"
unzip -p "$widevine_zip" LICENSE.txt | install -m644 "/dev/stdin" "${_install_prefix}/LICENSE.txt"

1
all/modules/dbackup.func Symbolic link
View File

@ -0,0 +1 @@
/shell/host/all/dev/backup/dbackup

View File

@ -0,0 +1,4 @@
# will make a launch script at /usr/bin for a given flatpak application
# $1 is bin file name, $2 is flatpak application name
# --mount -m will mount any folders outside the sandbox
# this launch script will make is easier to start the app like it was a native debian app