updates, especially for etiona
[distro-setup] / brc2
diff --git a/brc2 b/brc2
index 3f0e9ec06504d50d2f43289e9ebf2a423196a0be..cdac34b690b40401c314c0138a543e7918674d09 100644 (file)
--- a/brc2
+++ b/brc2
@@ -108,23 +108,30 @@ EOF
 }
 
 bbk() { # btrbk wrapper
+
+  local pid
   c /
   local active=true
   systemctl is-active btrbk.timer || active=false
   if $active; then
-    ser disable btrbk.timer
+    ser stop btrbk.timer
   fi
-  if systemctl is-active btrbk.service; then
-    $active && ser enable btrbk.timer
+  if [[ $(systemctl is-active btrbk.service ||:) != inactive ]]; then
     echo "cron btrbk is already running"
+    if $active; then ser start btrbk.timer; fi
     return 1
   fi
   # run latest
   install-my-scripts
-  btrbk-run "$@" |& pee cat "systemd-cat -t btrbk-run"
+  jrun -p btrbk btrbk-run "$@"
   if $active; then
-    ser enable btrbk.timer
+    if (( $ret )); then
+      echo bbk: WARNING: btrbk.timer not restarted due to failure
+    else
+      ser start btrbk.timer
+    fi
   fi
+  return $ret
 }
 
 bfg() { java -jar /a/opt/bfg-1.12.14.jar "$@"; }
@@ -133,25 +140,68 @@ bigclock() {
   xclock -digital -update 1 -face 'arial black-80:bold'
 }
 
-bpull() {
-  [[ $1 ]] || return 1
-  c /
-  # run latest
-  install-my-scripts
-  switch-mail-host pull $1 |& pee cat "systemd-cat -t switch-mail-host"
+inttrap() {
+  pid=$1
+  # just passing on -INT doesnt work.
+  kill -TERM $pid
+  sleep .05
+  if [[ ! -e /proc/$pid ]]; then
+    if [[ $old_int_trap ]]; then
+      $old_int_trap
+    else
+      trap INT
+    fi
+  fi
 }
-bpush() {
-  [[ $1 ]] || return 1
+
+
+jrun() { # journal run. run args, log to journal, tail and grep the journal.
+  # Note, an alternative without systemd would be something like ts.
+  # Note: I tried doing cmd | pee "sudo systemd-cat" cat, but that
+  # had some problems like ctrl-c didnt work or something.
+  local pid pattern sedscript cmd_name ended
+  ret=0
+  case $1 in
+    -p)
+      pattern="$2|"
+      shift 2
+      ;;
+  esac
+  cmd_name=${1##*/}
+  sedscript="/$pattern$cmd_name/p;/^.{16}[^ ]+ $cmd_name\[[0-9]+]: ([^ ]*\/)?$cmd_name: exiting with status [0-9]+\$/q"
+  # We use >() so that $! is the pid of journalctl, otherwise its the sed pid and then
+  # if we kill that, it takes journalctl about 10 seconds to catch up, and we get
+  # an annoying message about job finishing then.
+  journalctl -qn2 -f &> >(sed -nr "$sedscript") &
+  # We kill this in prompt-command for the case that we ctrl-c the
+  # systemd-cat. i dont know any way to trap ctrl-c and still run the
+  # normal action for it. There might be a way, unsure.
+  jr_pid=$!
+  systemd-cat -t "$cmd_name" "$@" || ret=$?
+  if (( $ret )); then
+    echo "jrun: ERROR: $* returned $ret"
+  fi
+  # This justs lets the journal output its last line
+  # before the prompt comes up.
+  sleep .5
+  kill $jr_pid &>/dev/null ||:
+  unset jr_pid
+  fg &>/dev/null ||:
+}
+
+sm() {
   c /
   # run latest
   install-my-scripts
-  switch-mail-host push $1 |& pee cat "systemd-cat -t switch-mail-host"
+  jrun -p btrbk switch-mail-host "$@"
+  return $ret
 }
+
 lipush() {
   # note, i had --delete-excluded, but that deletes all files in --exclude-from on
   # the remote site, which doesn't make sense, so not sure why i had it.
   local p a
-  p=(/a/bin /a/exe /a/h /a/c /p/c/machine_specific/linode{,.hosts} /a/opt/{emacs,emacs-debianstable,mu})
+  p=(/a/bin /a/exe /a/h /a/c /p/c/machine_specific/linode{,.hosts} /a/opt/{emacs-debianstable,mu})
   a="-ahviSAXPH --specials --devices --delete --relative --exclude-from=/p/c/li-rsync-excludes"
   ret=0
   m rsync "$@" $a ${p[@]} /p/c/machine_specific/l2 root@l2.b8.nz:/ || ret=$?
@@ -283,7 +333,7 @@ dup() {
       ran_d=true
       ;;&
     *DISTRO-END!*|*DISTRO!*)
-      pushd
+      pushd /
       /b/ds/distro-end || return $?
       popd
       ran_d=true
@@ -306,6 +356,8 @@ envload() { # load environment from a previous: export > file
   done < "$file"
 }
 
+failfunc() { asdf a b c; }
+failfunc2() { failfunc d e f; }
 
 # one that comes with distros is too old for newer devices
 fastboot() {
@@ -755,18 +807,29 @@ resolvcat() {
   m s nscd -i hosts
   f=/etc/resolv.conf
   echo $f:;  ccat $f
-  hr; m ser status dnsmasq | cat
   hr; s ss -lpn 'sport = 53'
-  #hr; echo dnsmasq is $(systemctl is-active dnsmasq)
-  f=/var/run/dnsmasq/resolv.conf
-  hr; echo $f:;  ccat $f
-  hr; m grr '^ *servers-file *=' /etc/dnsmasq.conf /etc/dnsmasq.d
-  f=/etc/dnsmasq-servers.conf
-  hr; echo $f:;  ccat $f
+  if systemctl is-enabled dnsmasq &>/dev/null || [[ $(systemctl is-active dnsmasq ||:) != inactive ]]; then
+    # this will fail is dnsmasq is failed
+    hr; m ser status dnsmasq | cat || :
+    f=/var/run/dnsmasq/resolv.conf
+    hr; echo $f:;  ccat $f
+    hr; m grr '^ *(servers-file|server) *=|^ *no-resolv *$' /etc/dnsmasq.conf /etc/dnsmasq.d
+    f=/etc/dnsmasq-servers.conf
+    hr; echo $f:;  ccat $f
+  fi
+  if systemctl is-enabled systemd-resolved &>/dev/null || [[ $(systemctl is-active systemd-resolved ||:) != inactive ]]; then
+    hr; m ser status systemd-resolved | cat || :
+    hr; m systemd-resolve --status
+  fi
+
 }
 rcat() {
   resolvcat | less
 }
+reresolv() {
+  sudo nscd -i hosts
+  #sudo systemctl restart dnsmasq
+}
 
 # only run on MAIL_HOST. simpler to keep this on one system.
 r2eadd() { # usage: name url
@@ -993,7 +1056,7 @@ sss() { # ssh solo
 }
 # kill off old shared socket then ssh
 ssk() {
-  m ssh -O exit "$@"
+  m ssh -O exit "$@" || [[ $? == 255 ]]
   m sl "$@"
 }
 # plain limited ssh
@@ -1167,6 +1230,8 @@ wtr() { curl wttr.in/boston; }
 
 xevkb() { xev -event keyboard; }
 
+ziva() { e "toot! i love dancing. fart"; }
+
 # * misc stuff
 
 # from curl cheat.sh/:bash_completion