bash-bear rename and a few improvements
authorIan Kelling <ian@iankelling.org>
Wed, 27 Dec 2023 01:39:30 +0000 (20:39 -0500)
committerIan Kelling <ian@iankelling.org>
Wed, 27 Dec 2023 01:40:15 +0000 (20:40 -0500)
22 files changed:
brc
brc2
btrbk-run
check-subvol-stale
distro-end
filesystem/usr/local/bin/irc
filesystem/usr/local/bin/myupgrade
filesystem/usr/local/bin/myupgrade-iank
mail-setup
mount-latest-remote
mount-latest-subvol
nextcloud-setup
primary-setup
prof-backup
save-sent [new file with mode: 0755]
script-files
subdir_files/.local/share/konsole/profileian.profile
switch-mail-host
system-status
unsaved-buffers [new file with mode: 0644]
zboot
ziva-screen

diff --git a/brc b/brc
index 5aff8e034848cbbfb816f6cd54d65d2055ecd0e7..a47a6fa6cb6d99ef82ae7eb6be6742e868958bf8 100644 (file)
--- a/brc
+++ b/brc
@@ -14,9 +14,9 @@ if [[ -s /a/bin/bash-bear-trap/bash-bear ]]; then
 else
   # bleh shellcheck can't handle disabling in an elif, so nesting this if.
   # shellcheck disable=SC2154 # set in .bashrc
-  if [[ -s $bashrc_dir/err ]]; then
+  if [[ -s $bashrc_dir/bash-bear ]]; then
     # shellcheck source=/a/bin/bash-bear-trap/bash-bear
-    source $bashrc_dir/err
+    source $bashrc_dir/bash-bear
   fi
 fi
 
@@ -725,6 +725,7 @@ khcopy() {
   ssh-copy-id $1
 }
 
+# copy path into clipboard
 a() {
   local x
   x=$(readlink -nf "${1:-$PWD}")
@@ -1455,13 +1456,22 @@ g() {
 gp() {
   cat &>/a/tmp/gtmp
   g "$@" /a/tmp/gtmp
-  }
-
-# like cmd &> tempfile; emacs tempfile
-gc() {
+}
+# g log
+#like cmd &> tempfile; emacs tempfile
+#
+# note: a useful workflow for doing mass replace on my files:
+# gc rem REGEX
+## remove any false positives, or manually edit them. rename files if needed.
+# sedi 's/REGEX/REPLACEMENT/' $(gr '^/' /a/tmp/gtmp)
+gl() {
   "$@" &> /a/tmp/gtmp
   g /a/tmp/gtmp
-  }
+}
+# g command substitution
+gc() {
+  g $("$@")
+}
 
 # force terminal version
 gn() {
@@ -2801,6 +2811,8 @@ leap-year() {
 # on-battery
 on-bat() {
   if [[ -e /sys/class/power_supply/AC/online && $(</sys/class/power_supply/AC/online) == 0 ]]; then
+    return 0
+  else
     return 1
   fi
 }
@@ -2846,6 +2858,30 @@ cm() {
 }
 
 
+disk-info() {
+  local cmds cmd
+  mapfile -t cmds <<'EOF'
+tail -n +1 /proc/mdstat /etc/mdadm/mdadm.conf /etc/fstab /etc/crypttab
+lsblk
+blkid
+ls -la /dev/disk/by-id
+EOF
+
+  for cmd in "${cmds[@]}"; do
+    cat <<EOF
+### $cmd
+
+\`\`\`
+EOF
+    $cmd
+    cat <<'EOF'
+
+```
+
+EOF
+  done
+}
+
 # * misc stuff
 
 
diff --git a/brc2 b/brc2
index af4d8082aaa92268c4f0f9daa5e10e6501be15c5..fbe19ebbcca468d00b2f2caa942466cd83bf88ec 100644 (file)
--- a/brc2
+++ b/brc2
@@ -58,6 +58,13 @@ source /a/bin/log-quiet/logq-function
 source /a/bin/bash_unpublished/source-semi-priv
 source /a/bin/bash_unpublished/source-state
 
+if [[ $HOSTNAME == "$MAIL_HOST" ]]; then
+  export MAIL_HOST_P=t
+else
+  export NOT_MAIL_HOST_P=t
+fi
+
+
 source /a/bin/log-quiet/logq-function
 
 # not used
@@ -3100,6 +3107,7 @@ ngo() {
 otp() {
   oathtool --totp -b "$*" | xclip -selection clipboard
 }
+# run cmd and copy output
 j() {
   "$@" |& pee "xclip -r -selection clipboard" cat
 }
index bf5117865368a98b0fe2dfc8bd0c2396ca4a30cc..5ce774b7e83c84270ad228479e5ba7b0f1901c40 100644 (file)
--- a/btrbk-run
+++ b/btrbk-run
@@ -22,7 +22,7 @@
 
 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
 
-source /usr/local/lib/bash-bear
+set -e; . /usr/local/lib/bash-bear; set +e
 
 usage() {
   cat <<'EOF'
index 5ae7cb6b52996305e2eed53aa731777eff455d66..edb3e71db9cf5d2bfc0a0ab61a5b660b636cf8b9 100644 (file)
@@ -16,7 +16,7 @@
 
 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
 
-source /usr/local/lib/bash-bear
+set -e; . /usr/local/lib/bash-bear; set +e
 
 shopt -s nullglob
 
index 5ba9421526a478e39c39bfa9dd7b25c18f765bc1..2913ade8479dfaa2a943327497ea968c00f867fe 100755 (executable)
@@ -2215,7 +2215,7 @@ esac
 
 case $HOSTNAME in
   sy|kd)
-    sudo install -m 0755 -o root -g root -t /usr/bin /a/opt/bitcoin-24.0.1/bin/*
+    sudo install -m 0755 -o root -g root -t /usr/bin /a/opt/bitcoin-26.0/bin/*
     sgo bitcoind
     # note: the bitcoin user & group are setup in fai
     sudo usermod -a -G bitcoin iank
index 19aca3b7475d7f73ca29011d5c9469cc271f59d0..2cc50f8257ac9cec6f073f840a1668cb1c5cb545 100755 (executable)
@@ -1,2 +1,2 @@
 #!/bin/bash
-exec emacs -f znc-all
+exec emacs -f znc-all "$@"
index 6c4ed879a7ee4baeb24c5e201e417534b967274b..f204796b25c3ebf50f0195f09f3f0d8305c62db4 100755 (executable)
@@ -7,9 +7,8 @@
 # Note: running this inside a cronjob, it wont mail any output if we end
 # up rebooting from this script.
 
-if [ -z "$BASH_VERSION" ]; then echo "error: shell is not bash" >&2; exit 1; fi
+set -e; . /usr/local/lib/bash-bear; set +e
 
-source /usr/local/lib/bash-bear
 pre="${0##*/}:"
 PATH="/sbin:$PATH"
 m() { printf "$pre %s\n"  "$*"; "$@"; }
index b4cd1a48bcc36065ae8615b63f8cc10fadbb0461..c3d642970c58e258334454890fcee2283f161354 100755 (executable)
@@ -2,9 +2,8 @@
 # Copyright (C) 2019 Ian Kelling
 # SPDX-License-Identifier: AGPL-3.0-or-later
 
-if [ -z "$BASH_VERSION" ]; then echo "error: shell is not bash" >&2; exit 1; fi
+set -e; . /usr/local/lib/bash-bear; set +e
 
-source /usr/local/lib/bash-bear
 pre="${0##*/}:"
 m() { printf "$pre %s\n"  "$*"; "$@"; }
 e() { printf "$pre %s\n"  "$*"; }
index e2f7b21991ced794b4081ed1f05fac6b198f7020..776f3e68aefd6d4b929e40f2cf04c57b09aab081 100755 (executable)
@@ -3229,16 +3229,27 @@ MAILDIR_HOME_MAILDIR_LOCATION = /m/md/Sent
 EOF
 
 
+    # ian: save a copy of sent mail. i thought of other ways to do this,
+    # for example, to only save sent mail that is not sent from my mail
+    # client which saves a copy by default, but in the end, it seems
+    # simplest to turn that off. We want to save external mail sent by
+    # smarthosts. However, there is one complication: encrypted
+    # mail. Saving it here just gets us an encrypted copy that we can't
+    # read. Soo, we could bcc ourselves: then we still have the
+    # annoyance that it is encrypted so we can't grep it. Or, we could
+    # hack emacs so that it sends us an unencrypted copy. Turns out that
+    # the emacs function which saves sent email can also send us a
+    # copy. But, then we have 3 copies: the encrypted copy exim saves,
+    # the unencrypted copy exim saves, and the copy emacs saves.  Soo,
+    # we can emacs send a copy directly to the sent alias but only when
+    # it is not mail_host, and have the exim condition for redirecting a
+    # copy to the sent alias avoid doing it if it has an emacs user
+    # agent header.
     u /etc/exim4/conf.d/router/186_sentarchive_nn <<'EOF'
-# ian: save a copy of sent mail. i thought of other ways to
-# do this, for example, to only save sent mail that is not sent
-# from my mail client which saves a copy by default, but in the
-# end, it seems simplest to turn that off. We want to save
-# external mail sent by smarthosts.
 sentarchive_nn:
   driver = redirect
   domains = ! +local_domains
-  condition = ${if !bool{${lookup{$local_part@$domain}lsearch{/etc/exim4/ignore-sent}{true}}}}
+  condition = ${if and {{!bool{${lookup{$local_part@$domain}lsearch{/etc/exim4/ignore-sent}{true}}}} {!match {$h_user-agent:}{emacs}}}}
   data    = vojdedIdNejyebni@b8.nz
   unseen
 EOF
@@ -3605,25 +3616,25 @@ sentarchive:
   driver = redirect
   domains = ! +local_domains
   senders = <; *@fsf.org ; *@posteo.net
-  condition = ${if !bool{${lookup{$local_part@$domain}lsearch{/etc/exim4/ignore-sent}{true}}}}
+  condition = ${if and {{!bool{${lookup{$local_part@$domain}lsearch{/etc/exim4/ignore-sent}{true}}}} {!match {$h_user-agent:}{emacs}}}}
   data    = vojdedIdNejyebni@b8.nz
   unseen
 EOF
 
     u /etc/myexim4/conf.d/router/160_backup_redir <<'EOF'
 backup_redir:
-driver = redirect
-# i dont email myself from my own machine much, so lets ignore that.
-domains = ! +local_domains
-senders = <; *@fsf.org ; *@posteo.net
-condition = ${if !bool{${lookup{$local_part@$domain}lsearch{/etc/exim4/ignore-sent}{true}}}}
-# b is just an arbirary short string
-data = b@eximbackup.b8.nz
-# note, to test this, i could temporarily allow testignore.
-# alerts avoids potential mail loop.
-local_parts = ! root : ! testignore : ! alerts : ! daylert
-unseen = true
-errors_to = alerts@iankelling.org
+  driver = redirect
+  # i dont email myself from my own machine much, so lets ignore that.
+  domains = ! +local_domains
+  senders = <; *@fsf.org ; *@posteo.net
+  condition = ${if and {{!bool{${lookup{$local_part@$domain}lsearch{/etc/exim4/ignore-sent}{true}}}} {!match {$h_user-agent:}{emacs}}}}
+  # b is just an arbirary short string
+  data = b@eximbackup.b8.nz
+  # note, to test this, i could temporarily allow testignore.
+  # alerts avoids potential mail loop.
+  local_parts = ! root : ! testignore : ! alerts : ! daylert
+  unseen = true
+  errors_to = alerts@iankelling.org
 EOF
 
     # for bk, we have a exim4in.service that will do this for us.
index c80c00347a55033e01fdd977f5d778294b767c38..04ac198a0a514f49d316cf92e82e5cc8fe95007a 100755 (executable)
@@ -16,7 +16,7 @@
 
 # usage: HOST [mount-latest-subvol args]
 
-source /usr/local/lib/bash-bear
+set -e; . /usr/local/lib/bash-bear; set +e
 
 script_dir=$(dirname $(readlink -f "$BASH_SOURCE"))
 
index 13cfc3d159967ad8bff254093081dbe66933962a..bb93939290a11f1d4da248901f3d33576f2992b3 100644 (file)
@@ -18,7 +18,7 @@ readonly this_file
 cd /
 [[ $EUID == 0 ]] || exec sudo -E "$this_file" "$@"
 
-source /usr/local/lib/bash-bear
+set -e; . /usr/local/lib/bash-bear; set +e
 
 usage() {
   cat <<EOF
index 75e1625192c6260aaa11c43fcbc58cb0fd725ce6..5affcd4640a4471dd0d050406def8cd0e50a6023 100755 (executable)
@@ -1,10 +1,6 @@
 #!/bin/bash
 
-if [[ -s /usr/local/lib/bash-bear ]]; then
-  source /usr/local/lib/bash-bear
-else
-  exit 1
-fi
+set -e; . /usr/local/lib/bash-bear; set +e
 
 
 pre="${0##*/}:"
@@ -217,7 +213,7 @@ systemctl enable --now $ncbase.timer
 i /usr/local/bin/ncup <<'EOFOUTER'
 #!/bin/bash
 
-source /usr/local/lib/bash-bear
+set -e; . /usr/local/lib/bash-bear; set +e
 
 m() { printf "%s\n" "$*";  "$@"; }
 err-cleanup() {
index c9c34b7f414b5846821693307ab3c8ed60461e3f..3803d885df340191762641f32183bf7a23aa3cf8 100755 (executable)
@@ -3,7 +3,7 @@
 # usage $0 [MAIL_HOST]
 # setup things which involve being the primary host or not
 
-source /usr/local/lib/bash-bear
+set -e; . /usr/local/lib/bash-bear; set +e
 
 script_name="${BASH_SOURCE[0]}"
 script_name="${script_name##*/}"
index cf9199bb031d716af23bc5d0bab85f94150e8698..e49cb494a0b121602342e3dec3ce9125c564a8bf 100755 (executable)
@@ -20,6 +20,9 @@ if [ -z "$BASH_VERSION" ]; then echo "error: shell is not bash" >&2; exit 1; fi
 source /a/bin/bash-bear-trap/bash-bear
 
 source /a/bin/bash_unpublished/source-state
+if [[ ! $HOSTNAME ]]; then
+  HOSTNAME=$(cat /etc/hostname)
+fi
 if [[ $HOSTNAME != "$HOST2" ]]; then
   exit 0
 fi
diff --git a/save-sent b/save-sent
new file mode 100755 (executable)
index 0000000..8578e46
--- /dev/null
+++ b/save-sent
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+exim -f '<>' vojdedIdNejyebni@b8.nz <"$1"
index 6ed94b54a3352fecd19198e70c102d031aa87a62..b4f8b6138cb4688bdeb00f2a5ab004073657a584 100644 (file)
@@ -9,6 +9,7 @@ my_bin_files=(
   myi3status
   mailbindwatchdog
   check-mailq
+  unsaved-buffers
   unsaved-buffers.el
   mail-backup-clean
   iptables-exim
index 6e3eb3db213c792065e70b7985043aafcbda5200..33baf40cdbb41124962f5937b2b05ae504248a77 100644 (file)
@@ -1,6 +1,6 @@
 [Appearance]
 ColorScheme=ianktheme
-Font=DejaVu Sans Mono,12,-1,5,50,0,0,0,0,0
+Font=Noto Mono,12,-1,5,50,0,0,0,0,0
 
 [General]
 LocalTabTitleFormat=%w
index b31ab793951f6807879e37eb1dcfd7beaf5ed39c..f1cb21272e6a057b41d5e49554b765fc1e98af90 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-source /usr/local/lib/bash-bear
+set -e; . /usr/local/lib/bash-bear; set +e
 
 usage() {
   cat <<EOF
@@ -161,14 +161,25 @@ case $direction in
           die "failed: $old_shell switch-mail-host --check-installed"
         fi
       fi
-      tmpf=$(mktemp)
-      m scp -F $HOME/.ssh/confighome root@$old_host:/usr/local/bin/switch-mail-host $tmpf
-      if ! diff -q $tmpf ${BASH_SOURCE[0]}; then
+      tmpd=$(mktemp -d)
+      files=(
+        /usr/local/{bin/{unsaved-buffers{,.el},switch-mail-host},lib/bash-bear}
+      )
+      m scp -F $HOME/.ssh/confighome \
+        ${files@/#/root@$old_host:} $tmpd
+      diff=false
+      for f in ${files[@]}; do
+        if ! diff -q $tmpd/${f##*/} $f; then
+          m install -T $tmpd/${f##*/} $f
+          diff=true
+        fi
+      done
+      if $diff; then
         e "found different version on old_host=$old_hostname, reexecing"
-        m install -T $tmpf /usr/local/bin/switch-mail-host
         m /usr/local/bin/switch-mail-host --pull-reexec "${orig_args[@]}"
         exit 0
       fi
+      rm -r -- $tmpd
     fi
 
     f=/a/bin/bash_unpublished/source-state
@@ -259,16 +270,7 @@ done
 # ensure these are unused before doing anything
 e "On $new_host: umounting /m and /o, checking emacs"
 {
-  cat <<'EOF'
-set -eE
-if pgrep -G iank -u iank -f 'emacs --daemon' &>/dev/null; then
-  bufs="$(sudo -u iank env XDG_RUNTIME_DIR=/run/user/1000 emacsclient --eval "$(cat /a/bin/ds/unsaved-buffers.el)"| sed '/^"nil"$/d;s/^"(/E: /;s/)"$//')"
-  if [[ $bufs ]]; then
-    echo "error: on $HOSTNAME, unsaved emacs files: $bufs" >&2
-    exit 1
-  fi
-fi
-EOF
+  cat /usr/local/bin/unsaved-buffers
   if ! $host2_only; then
     cat <<EOF
 for dir in m o; do
@@ -282,15 +284,7 @@ EOF
 } | $new_shell bash -s
 
 if ! $mail_only; then
-  $old_shell bash -s <<'EOF'
-set -e
-if pgrep -G iank -u iank -f 'emacs --daemon' &>/dev/null; then
-  bufs="$(sudo -u iank env XDG_RUNTIME_DIR=/run/user/1000 emacsclient --eval "$(cat /a/bin/ds/unsaved-buffers.el)"| sed '/^"nil"$/d;s/^"(/E: /;s/)"$//')"
-  if [[ $bufs ]]; then
-    echo "error: on $HOSTNAME, unsaved emacs files: $bufs" >&2
-    exit 1
-  fi
-fi
+  cat /usr/local/bin/unsaved-buffers - <<'EOF' |  $old_shell bash -s
 
 # Try to prevent emacs from saving stale data it has in memory to disk. eg: files, recentf list, etc.
 # But if emacs ignores the signal, let it live.
index 47d0a6753e7d6612989043dcbc82ccd664e69627..7a87e6beb5c834c2418834c8931434330207e22e 100755 (executable)
@@ -461,7 +461,8 @@ main-loop() {
         fi
         case $bat in
           100|9?)
-          bitcoinon &
+          :
+          #bitcoinon &
           ;;
         esac
       fi
diff --git a/unsaved-buffers b/unsaved-buffers
new file mode 100644 (file)
index 0000000..095f3ad
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4
+set -eE -o pipefail
+trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
+if pgrep -G iank -u iank -f '^emacs --daemon$' &>/dev/null; then
+  elisp=$(cat /usr/local/bin/unsaved-buffers.el)
+  emacsout=$(sudo -u iank env XDG_RUNTIME_DIR=/run/user/1000 emacsclient --eval "$elisp")
+  bufs=$(printf "%s\n" "$emacsout"|sed '/^"nil"$/d;s/^"(/E: /;s/)"$//')
+  if [[ $bufs ]]; then
+    echo "error: on $HOSTNAME, unsaved emacs files: $bufs" >&2
+    exit 1
+  fi
+fi
diff --git a/zboot b/zboot
index e0fcc619b46ea556fd692385f073787a4038aa76..bf9c7c25a32b29c80ddf3317fa6d7c58913b1e53 100755 (executable)
--- a/zboot
+++ b/zboot
@@ -3,7 +3,7 @@
 script=$(readlink -f -- "$BASH_SOURCE")
 [[ $EUID == 0 ]] || exec sudo -E "$script" "$@"
 
-source /usr/local/lib/bash-bear
+set -e; . /usr/local/lib/bash-bear; set +e
 
 
 # Explaining this whole thing. The host amy is used by someone else,
index 5578835b136129341128d006e0951b9bbf26242f..c512673009d4c56a40f24b3967e7a7ee4437c187 100755 (executable)
@@ -2,9 +2,10 @@
 
 # Get screenshots from bow, discard them if they dont change much.
 
-source /usr/local/lib/bash-bear
 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
 
+set -e; . /usr/local/lib/bash-bear; set +e
+
 dest_dir=/d/ziva-log
 case $HOSTNAME in
   sy)