From 0d4481e291c2e2caf3b320972e49e2253ad7e281 Mon Sep 17 00:00:00 2001 From: David Kebler Date: Wed, 22 Feb 2023 11:39:34 -0800 Subject: [PATCH] refactor: more new session loading to anything under "load" subirectory (by default) still can add additional loading directories as before. refactor of debug module using BASH_DEBUG as filename in user shell suddirectory logs/ improved bindfs and btrfs modules --- .bash-shell-ignore | 1 + .bash-shell-include | 3 -- alias/archive/caddy | 1 - alias/archive/firehol | 7 ---- alias/archive/mint-utils | 4 --- alias/archive/nas | 4 --- {functions => load}/01-basic | 2 +- {functions => load}/02-system-path | 0 {functions => load}/03-security | 0 {functions => load}/04-systemd | 0 {alias => load/alias}/00-basic | 0 {alias => load/alias}/systemd/networkd | 0 {alias => load/alias}/systemd/root | 0 {alias => load/alias}/systemd/user | 0 {alias => load/alias}/uci-shell | 0 {env => load/env}/00-shell-options | 0 {env => load/env}/02-prompt | 0 {env => load/env}/colors.env | 0 {env => load/env}/git.env | 0 {env => load/env}/grep.env | 0 {env => load/env}/history.env | 0 {env => load/env}/modules.env | 0 {functions => load}/logging | 0 modules/btrfs.mod | 45 ++++++++++++++++++++++++-- modules/debug.lib | 28 +++++++++++++--- modules/shell-process-directory.mod | 8 +---- modules/utility/bindfs.lib | 33 ------------------- modules/utility/file.lib | 11 +++++-- modules/utility/filesystem.mod | 1 - 29 files changed, 78 insertions(+), 70 deletions(-) delete mode 100644 alias/archive/caddy delete mode 100644 alias/archive/firehol delete mode 100644 alias/archive/mint-utils delete mode 100644 alias/archive/nas rename {functions => load}/01-basic (97%) rename {functions => load}/02-system-path (100%) rename {functions => load}/03-security (100%) rename {functions => load}/04-systemd (100%) rename {alias => load/alias}/00-basic (100%) rename {alias => load/alias}/systemd/networkd (100%) rename {alias => load/alias}/systemd/root (100%) rename {alias => load/alias}/systemd/user (100%) rename {alias => load/alias}/uci-shell (100%) rename {env => load/env}/00-shell-options (100%) rename {env => load/env}/02-prompt (100%) rename {env => load/env}/colors.env (100%) rename {env => load/env}/git.env (100%) rename {env => load/env}/grep.env (100%) rename {env => load/env}/history.env (100%) rename {env => load/env}/modules.env (100%) rename {functions => load}/logging (100%) delete mode 100644 modules/utility/bindfs.lib diff --git a/.bash-shell-ignore b/.bash-shell-ignore index 1f60f72..1d2d804 100644 --- a/.bash-shell-ignore +++ b/.bash-shell-ignore @@ -11,5 +11,6 @@ LICENSE *.sample *archive*/ +*.off/ off/ log*/ diff --git a/.bash-shell-include b/.bash-shell-include index 37fbb1a..e69de29 100644 --- a/.bash-shell-include +++ b/.bash-shell-include @@ -1,3 +0,0 @@ -alias -env -functions diff --git a/alias/archive/caddy b/alias/archive/caddy deleted file mode 100644 index 70f79c8..0000000 --- a/alias/archive/caddy +++ /dev/null @@ -1 +0,0 @@ -alias caddyr="ssh -t nas "/opt/scripts/caddyr"" diff --git a/alias/archive/firehol b/alias/archive/firehol deleted file mode 100644 index aed134d..0000000 --- a/alias/archive/firehol +++ /dev/null @@ -1,7 +0,0 @@ -# using firehol -alias fwstp="sudo firehol stop" -alias fws="sudo firehol start" -alias fwdf="/opt/firehol/scripts/default" -alias fwt="/opt/firehol/scripts/try" -alias fwdb="/opt/firehol/scripts/debug" -alias fwm="/opt/firehol/scripts/merge" diff --git a/alias/archive/mint-utils b/alias/archive/mint-utils deleted file mode 100644 index 5065fe2..0000000 --- a/alias/archive/mint-utils +++ /dev/null @@ -1,4 +0,0 @@ -# run this on remote machine via ssh x11 forwarding -alias rmintupdate='XAUTHORITY=/home/sysadmin/.Xauthority sudo -E mintupdate' -alias rsources='XAUTHORITY=/home/sysadmin/.Xauthority sudo -E software-sources' -alias rsynaptic='XAUTHORITY=/home/sysadmin/.Xauthority sudo -E synaptic' diff --git a/alias/archive/nas b/alias/archive/nas deleted file mode 100644 index 1c3486e..0000000 --- a/alias/archive/nas +++ /dev/null @@ -1,4 +0,0 @@ -# nas -alias naslist="echo nasfm nasdisk nasgparted nasdata, caddyr, caddye" -alias nasha="ssh -t nas 'cd /usr/share/hassio/homeassistant ; bash'" -alias nascaddy="ssh -t nas 'cd /opt/caddy ; bash'" diff --git a/functions/01-basic b/load/01-basic similarity index 97% rename from functions/01-basic rename to load/01-basic index 86dafd0..1e022b6 100644 --- a/functions/01-basic +++ b/load/01-basic @@ -2,7 +2,6 @@ # 00 will get loaded first ## -module_load systemd user_reload() { save=$PWD @@ -84,6 +83,7 @@ gpg -a --export $1 | sudo apt-key add - } osinfo () { + hostnamectl echo kernel: $(uname -r) echo machine: $(arch) cat /etc/os-release diff --git a/functions/02-system-path b/load/02-system-path similarity index 100% rename from functions/02-system-path rename to load/02-system-path diff --git a/functions/03-security b/load/03-security similarity index 100% rename from functions/03-security rename to load/03-security diff --git a/functions/04-systemd b/load/04-systemd similarity index 100% rename from functions/04-systemd rename to load/04-systemd diff --git a/alias/00-basic b/load/alias/00-basic similarity index 100% rename from alias/00-basic rename to load/alias/00-basic diff --git a/alias/systemd/networkd b/load/alias/systemd/networkd similarity index 100% rename from alias/systemd/networkd rename to load/alias/systemd/networkd diff --git a/alias/systemd/root b/load/alias/systemd/root similarity index 100% rename from alias/systemd/root rename to load/alias/systemd/root diff --git a/alias/systemd/user b/load/alias/systemd/user similarity index 100% rename from alias/systemd/user rename to load/alias/systemd/user diff --git a/alias/uci-shell b/load/alias/uci-shell similarity index 100% rename from alias/uci-shell rename to load/alias/uci-shell diff --git a/env/00-shell-options b/load/env/00-shell-options similarity index 100% rename from env/00-shell-options rename to load/env/00-shell-options diff --git a/env/02-prompt b/load/env/02-prompt similarity index 100% rename from env/02-prompt rename to load/env/02-prompt diff --git a/env/colors.env b/load/env/colors.env similarity index 100% rename from env/colors.env rename to load/env/colors.env diff --git a/env/git.env b/load/env/git.env similarity index 100% rename from env/git.env rename to load/env/git.env diff --git a/env/grep.env b/load/env/grep.env similarity index 100% rename from env/grep.env rename to load/env/grep.env diff --git a/env/history.env b/load/env/history.env similarity index 100% rename from env/history.env rename to load/env/history.env diff --git a/env/modules.env b/load/env/modules.env similarity index 100% rename from env/modules.env rename to load/env/modules.env diff --git a/functions/logging b/load/logging similarity index 100% rename from functions/logging rename to load/logging diff --git a/modules/btrfs.mod b/modules/btrfs.mod index e85b5c4..d5348e6 100644 --- a/modules/btrfs.mod +++ b/modules/btrfs.mod @@ -25,8 +25,47 @@ make_base_subvols() { alias btvl="sudo btrfs subvolume list" + +snapshot_restore () { + local src=$1 + local dest=$2 + local name=${3:-$(echo $src| rev | cut -f 2- -d '.' | rev)} + local usesudo + echo copying $src at $PWD to $2 then renaming to $name + # TODO check for snapshot, strip volume from source path, remove extra snapshot when done + [[ $EUID -ne 0 ]] && usesudo=sudo + $usesudo btrfs send $src | $usesudo btrfs -q receive $dest + # cd $2 || return + $usesudo btrfs subvolume snapshot $dest/$src $dest/$name + # todo check for snapshot then delete transfered one +} + # ALL ALL = (root) NOPASSWD:/bin/btrfs -# btrfs send rootfs-nadal-$(date +"%d-%m-%Y") | btrfs receive /backup/images/snaps/rootfs -# btrfs subvolume snapshot -r / /backup/rootfs-nadal-$(date +"%d-%m-%Y") -# tar -cvpzf /backup/images/nadal-fs.tar.gz --one-file-system / +subvolume_size () { + local all; + [[ $1 == "-a" ]] && all=true + if [[ $all ]]; then + sudo btrfs qgroup show "${2:-$PWD}" --kbytes | tail -n +3 + str=$(sudo btrfs qgroup show "${2:-$PWD}" --kbytes | tail -n +3); +else + sudo btrfs qgroup show "${2:-$PWD}" --kbytes | grep $1 + str=$(sudo btrfs qgroup show "${2:-$PWD}" --kbytes | grep $1) +fi +# echo $str + +subvolumeFolderSize=0; + +while read line; do + FIELDS=( $line ) + thisLineKb="${FIELDS[2]/'.00KiB'/''}"; + # echo $thisLineKb + subvolumeFolderSize=$((subvolumeFolderSize+thisLineKb)); +done <<< "$str" + +[[ $all ]] && echo "size of entire filesystem at ${2:-$PWD}" || echo size of subvolumes/snapshots $1 at "${2:-$PWD}" +echo $subvolumeFolderSize KB +echo "~ $((subvolumeFolderSize/1024)) MB" +echo "~ $((subvolumeFolderSize/1024/1024)) GB" + +} \ No newline at end of file diff --git a/modules/debug.lib b/modules/debug.lib index d90f4a5..c4df041 100644 --- a/modules/debug.lib +++ b/modules/debug.lib @@ -1,14 +1,34 @@ #!/bin/bash # TODO allow debug to have managment flags and levels function debug () { -[[ $BASH_DEBUG ]] && echo -e "#### DEBUG ####\n $@ \n#####" >&2 + +if [[ $BASH_DEBUG ]]; then + if [[ $BASH_DEBUG == "stdout" ]]; then + echo -e "#### DEBUG ####\n $@ \n#####" >&2 + else + local logfile=$BASH_SHELL_USER_DIR/logs/$BASH_DEBUG.log + [[ $1 == "-r" ]] && echo "$(date) Debugging log file, see debug.lib module" > $logfile && return + echo -e "$@" >&2 >> $logfile + fi +fi + +# [[ $test ]] && return + } -# alias debug_on="sudo -i uncomment BASH_DEBUG /etc/bash.bashrc" -# alias debug_off="sudo -i comment BASH_DEBUG /etc/bash.bashrc" +function debug_reset () { + +local logfile=$BASH_SHELL_USER_DIR/logs/$1.log +echo clearing $logfile +echo "$logfile at $(date)" > $logfile +shift +echo $@ >> $logfile +echo -e "#####################" >> $logfile + +} -# *************** DEBUGGING *********************** +## *************** DEBUGGING *********************** # module_load debug # if [[ $? -ne 0 ]]; then # echo "unable to load a 'debug' module using a noop for debug function" diff --git a/modules/shell-process-directory.mod b/modules/shell-process-directory.mod index d05473f..d83d115 100644 --- a/modules/shell-process-directory.mod +++ b/modules/shell-process-directory.mod @@ -7,7 +7,7 @@ shell_source_subdirs () { local SUBDIRS local IGNORE_FILE DIR=$1 - SUBDIRS=$([[ -f "$DIR/.bash-shell-include" ]] && cat "$DIR/.bash-shell-include" || cat "$BASH_SHELL_BASE/.bash-shell-include") + SUBDIRS="load $([[ -f "$DIR/.bash-shell-include" ]] && cat "$DIR/.bash-shell-include" || cat "$BASH_SHELL_BASE/.bash-shell-include")" [[ $SSH_SESSION ]] && SUBDIRS+=" ssh/session" IGNORE_FILE="$([[ -f "$DIR/.bash-shell-ignore" ]] && echo "$DIR" || echo "$BASH_SHELL_BASE")/.bash-shell-ignore" # echo $DIR @@ -15,13 +15,7 @@ shell_source_subdirs () { for SUBDIR in $SUBDIRS; do if [ -e "$DIR/$SUBDIR" ]; then # echo processing subdirectory $DIR/$SUBDIR - # must quote all globs to avoid bash glob expansion which is likely on - # TODO have default set of ignores plus check for shell-ignore - # source_dir -p "archive" -x '"*.off" "*.md" "*TODO*" "LICENSE" "*.sample"' -d 0 $DIR/$SUBDIR - # source_dir -p "archive" -x "$excludes" -d 0 $DIR/$SUBDIR source_dir -f "$IGNORE_FILE" -d 0 $DIR/$SUBDIR - # else - # echo no subdirectory $DIR/$SUBDIR to process, ignorning fi done } diff --git a/modules/utility/bindfs.lib b/modules/utility/bindfs.lib deleted file mode 100644 index ac16db0..0000000 --- a/modules/utility/bindfs.lib +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -#bmount () {} -# sudo bindfs -o allow_other -o map=root/1001:@root/@1001 /var/lib/docker/volumes /data/dvols - - -dir_rebind_user () { - local usesudo; local dir;local user;local group - # $1 new owner - # $2 dir - -[ $# -lt 2 ] && echo minimum args needed to rebind are user and directory && return 1 -[[ $EUID -ne 0 ]] && usesudo=sudo - -[[ $(id -u $1 2> /dev/null) ]] || { echo user $1 does not exist can not continue; return 2; } - -dir=$(realpath $2) -user=$(stat -c '%U' $dir) -group=$(stat -c '%G' $dir) -$usesudo bindfs --force-user=$1 --force-group=$1 --create-for-user=$user --create-for-group=$group --chown-ignore --chgrp-ignore $dir $dir -# echo use \'dir_rebind_user_remove $dir\' to remove -} - -dir_rebind_user_remove () { - local usersudo - [[ $EUID -ne 0 ]] && usesudo=sudo - $usesudo fusermount -u $1 -} - -if [ -v PS1 ]; then - alias dru="dir_rebind_user" - alias drur="dir_rebind_user_remove" -fi \ No newline at end of file diff --git a/modules/utility/file.lib b/modules/utility/file.lib index 4f4f89b..349d0ab 100644 --- a/modules/utility/file.lib +++ b/modules/utility/file.lib @@ -48,8 +48,13 @@ function lines_2_str () { echo $str } + + # find, superceeds find use `command find` to get the super function _find () { + +# BASH_DEBUG=find + # USAGE # all option arguments that contain globs/wildcards must be quoted to avoid expansion # f sets path and file excludes from a supplied file path @@ -196,14 +201,16 @@ return 0 } source_dir () { - # echo passed: $* + # BASH_DEBUG=source_dir + + debug source_dir passed arguments: $* debug function: source_dir local FILES FILES=$(_find "$@") # find function # echo $FILES >&2 [[ $? -ne 0 ]] && return 1 for f in $FILES; do - # echo sourcing: $f >&2 + debug sourcing: $f >&2 source "$f" done diff --git a/modules/utility/filesystem.mod b/modules/utility/filesystem.mod index b13f9cc..4063c98 100644 --- a/modules/utility/filesystem.mod +++ b/modules/utility/filesystem.mod @@ -1,7 +1,6 @@ #!/bin/bash # must be json as a string, depends on jq mounted () { -[[ ! $1 ]] && echo no mount point to test && return 2 mountpoint "$1" &> /dev/null && echo yes || return 1 }