misc minor fixes
authorIan Kelling <ian@iankelling.org>
Sun, 12 Jun 2022 05:08:10 +0000 (01:08 -0400)
committerIan Kelling <ian@iankelling.org>
Sun, 12 Jun 2022 05:08:10 +0000 (01:08 -0400)
brc
btrfsmaint
filesystem/etc/systemd/system/btrfsmaint.timer
filesystem/usr/local/bin/check-lets-encrypt-ssl-settings
mail-cert-cron
mail-setup

diff --git a/brc b/brc
index b0f8846bef148f95392839e8e32808ef66893b54..c9cd4fcee4af66f81029ec406f6007de50d9ae0a 100644 (file)
--- a/brc
+++ b/brc
@@ -1689,23 +1689,15 @@ sgu() {
 sk() {
 
 
-  # note, if you do something like this
-  # x=( prefix* )
-  # then disable the warning with:
-  # shellcheck disable=SC2206 # globbing is intended
+  # disable a warning with:
+  # shellcheck disable=SC2206 # reasoning
 
-  # 2029: "unescaped, this expands on the client side.": yes, I know how ssh works
-  # 2164: "Use 'cd ... || exit' or 'cd ... || return' in case cd fails.": i have automatic error handling
-  # 2086: unquoted $var: Quoting every var I set is way too much quotes.
-  # 2068: Double quote array expansions to avoid re-splitting elements: same as above.
-  # 2033: command arg is a function name: too many false positives.
+  # see bash-template/style-guide.md for justifications
 
-
-  # these ones I had disabled, but without a good written explanation, so enabling them temporarily
-  # 2046: unquoted $(cmd)
-  # 2119: Functions with optional args get bad warnings when none are passed.
-
-  shellcheck -W 999 -x -e 2029,2164,2086,2068,2033 "$@" || return $?
+  local quotes others
+  quotes=2048,2068,2086,2206
+  others=2029,2033,2164
+  shellcheck -W 999 -x -e $quotes,$others "$@" || return $?
 }
 
 
index 8e7214187a13e7709880f6d6d1fd169fed22074e..33cae4a36280351c170155f11fc83ba8ca3b2102 100755 (executable)
@@ -41,13 +41,12 @@ check-idle() {
   fi
 }
 
-
 usage() {
   cat <<EOF
 Usage: ${0##*/} [ARGS]
 Do btrfs maintence or stop if xprintidle shows a user
 
-force  Run regardless of user idle status
+force  Run regardless of user idle status on all disks.
 check  Only check if an existing maintence should be cancelled due to
          nonidle user. Also, runs in a loop every 20 seconds for 10
          minutes.
@@ -85,32 +84,53 @@ main() {
   idle=true
   if ! $force; then
     check-idle
+    if ! $check; then
+      min=0
+      max_min=300
+      # When the cron kicks in, we may not be idle (physically sleeping) yet, so
+      # wait.
+      while ! $idle && (( min < max_min )); do
+        min=$(( min + 1 ))
+        sleep 60
+        check-idle
+      done
+      # If we've waited a really long time for idle, just give up.
+      if (( min == max_min )); then
+        return
+      fi
+    fi
   fi
 
-  tmp=$(mktemp)
 
+  tmp=$(mktemp)
   fnd="findmnt --types btrfs --noheading"
   for x in $($fnd --output "SOURCE" --nofsroot | sort -u); do
     mnt=$($fnd --output "TARGET" --first-only --source $x)
     [[ $mnt ]] || continue
 
-    if ! btrfs dev stats -c $mnt >$tmp; then
-      if diff -q $mnt/btrfs-dev-stats $tmp; then
-        diff -u $mnt/btrfs-dev-stats $tmp | mail -s "$HOSTNAME: error: btrfs dev stats -c $mnt" root@localhost
-        cat $tmp >$mnt/btrfs-dev-stats
-      fi
-    fi
-    rm -f $tmp
+    #### begin look for diff in stats, eg: increasing error count ####
 
-    if ! $idle; then
-      if $dryrun; then
-        echo "$0: not idle. if this wasnt a dry run, btrfs scrub cancel $mnt"
-      else
-        btrfs scrub cancel $mnt &>/dev/null ||:
-        continue
+    # Only run for $check, since it runs in parallel to non-check, avoid
+    # race condition.
+    if $check; then
+      if ! btrfs dev stats -c $mnt >$tmp; then
+        if diff -q $mnt/btrfs-dev-stats $tmp; then
+          diff -u $mnt/btrfs-dev-stats $tmp | mail -s "$HOSTNAME: error: btrfs dev stats -c $mnt" root@localhost
+          cat $tmp >$mnt/btrfs-dev-stats
+        fi
       fi
+      rm -f $tmp
     fi
+    #### end look for diff in stats, eg: increasing error count ####
+
     if $check; then
+      if ! $idle; then
+        if $dryrun; then
+          echo "$0: not idle. if this wasnt a dry run, btrfs scrub cancel $mnt"
+        else
+          btrfs scrub cancel $mnt &>/dev/null ||:
+        fi
+      fi
       continue
     fi
 
@@ -149,11 +169,10 @@ main() {
         echo "$0: last scrub finish for $mnt: $date"
       fi
       date=$(date --date="$date" +%s)
-      # if date is sooner than 90 days ago
+      # if date is sooner than 60 days ago
       # the wiki recommends 30 days or so, but
-      # it makes the comp lag like shit for a day,
-      # so I'm going with 90 days.
-      if (( date > EPOCHSECONDS - 60*60*24*30 )); then
+      # I'm going with 60 days.
+      if (( date > EPOCHSECONDS - 60*60*24*60 )); then
         if $dryrun; then
           echo "$0: skiping scrub of $mnt, last was $(( (EPOCHSECONDS - date) / 60/60/24 )) days ago, < 30 days"
         fi
@@ -162,6 +181,13 @@ main() {
     fi
     # -c 2 -n 4 is from btrfsmaintenance, does ionice
     e btrfs scrub start -Bd -c 2 -n 4 $mnt
+
+    # We normally only do one disk since this is meant to be run while I sleep
+    # and if we try to do all disks, we invariably end up doing a scrub still
+    # after I've woken up. So, just do one per day.
+    if ! $force; then
+      return 0
+    fi
   done
 }
 
index 761380c4e43da58cc86efd519b2664cbb0466232..355cda41a523d98b4ccee118d1d95632553b66e5 100644 (file)
@@ -6,7 +6,10 @@ Description=btrfsmaint
 # timedatectl show --property=Timezone | sed 's/^[^=]*=//'
 # or
 # readlink /etc/localtime | sed -r 's,^.*/([^/]+/[^/]+)$,\1,'
-OnCalendar=Thu *-*-* 02:00:00 America/New_York
+
+# previously, was running weekly.
+#OnCalendar=Thu *-*-* 02:00:00 America/New_York
+OnCalendar=*-*-* 02:00:00 America/New_York
 
 [Install]
 WantedBy=timers.target
index 8fb11c96804e3ad8c4c0484183f8c3c9dd807ac2..7c212d9b98fa0a71c9c44e94474006180b1e7890 100755 (executable)
@@ -34,15 +34,16 @@ gitget https://github.com/certbot/certbot.git $d |& ts "%F %T" >>/tmp/${0##*/}.l
 cd $d
 
 f=certbot-apache/certbot_apache/_internal/tls_configs/current-options-ssl-apache.conf
-out=$(git log -p --since 2020-04-06 $f)
+out=$(git log -p --since 2022-05-14 $f)
 
 if [[ $out ]]; then
   cat <<EOF
 Let's encrypt has new ssl settings.
-1. edit mail-setup and web-conf
-2. Update servers
-3. edit the date in $0
-4. rm $lock_file
+1. edit mail-setup if needed: search for check-lets-encrypt-ssl-settings
+2. edit web-conf, search for common_ssl_conf
+3. Update servers if needed
+4. edit the date in /a/bin/ds/filesystem/usr/local/bin/check-lets-encrypt-ssl-settings
+5. rm $lock_file
 The change is:
 $out
 EOF
index 5b63b9a55f52f46ed86536efb395d893d8634b9e..99563a98ad4a61b12c19b7b33545a07554c33789 100755 (executable)
@@ -5,7 +5,7 @@ trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
 
 case $1 in
-  # for first run, accept host key
+  # For first run, accept host key. Note, known_hosts is saved in /p.
   -1)
     opt=(-e 'ssh -oStrictHostKeyChecking=no')
     ;;
index b53530a2a9c9ab2610aa18d82b194c74e8c26a8e..de9db482acad97f7c8cb4b23e4b856c7a8d87994 100755 (executable)
@@ -347,7 +347,6 @@ stopifactive() {
 
 mxhost=mx.iankelling.org
 mxport=587
-forward=$u@$mxhost
 
 # old setup. left as comment for example
 # mxhost=mail.messagingengine.com
@@ -1622,7 +1621,7 @@ EOF
       cat <<'EOF'
 # https://ssl-config.mozilla.org
 ssl = required
-# this is the same as the certbot list, in my cert cronjob, I check if that has changed upstream.
+# this is the same as the certbot list, i check changes in /a/bin/ds/filesystem/usr/local/bin/check-lets-encrypt-ssl-settings
 ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
 ssl_protocols = TLSv1.2
 ssl_prefer_server_ciphers = no
@@ -1633,7 +1632,7 @@ protocol lmtp {
   mail_plugins = $mail_plugins sieve
 }
 EOF
-      if dpkg --compare-versions $(dpkg-query -f='${Version}\n' --show dovecot-core) ge 1:2.3; then
+      if dpkg --compare-versions "$(dpkg-query -f='${Version}\n' --show dovecot-core)" ge 1:2.3; then
         cat <<EOF
 ssl_dh = </etc/dovecot/dhparam
 EOF
@@ -3161,7 +3160,7 @@ case $HOSTNAME in
   $MAIL_HOST)
     # < 2.1 (eg: in t9), uses a different data format which required manual
     # migration. dont start if we are running an old version.
-    if dpkg --compare-versions $(dpkg -s radicale | awk '$1 == "Version:" { print $2 }') ge 2.1; then
+    if dpkg --compare-versions "$(dpkg -s radicale | awk '$1 == "Version:" { print $2 }')" ge 2.1; then
       m systemctl --now enable radicale
     fi
     ;;&