usage() {
cat <<EOF
-Usage: ${0##*/} [OPTIONS] [sysops|tech|staff]
-3 mountpoints: fsf-sysops (default, public), fsf (all staff), fsf-tech (tech team)
+Usage: ${0##*/} [OPTIONS] [sysops|tech|staff|test]
+
+arg is icecast mountpoint suffix, except staff removes suffix.
-d debug.
-r RESOLUTION_TYPE
full: full screen even high resolution.
tall (default): half screen.
quarter: self evident
+-l loud/listen. Start unmuted. Usually for testing.
-u Undelayed. Removes 5 second video delay, and about 4 second audio delay.
-w do not launch watch of stream
delay=true
loglevel=fatal
watch=true
+volume=0
fullscreen=false
tall=true
-temp=$(getopt -l help hdr:uw "$@") || usage 1
+temp=$(getopt -l help hdlr:uw "$@") || usage 1
eval set -- "$temp"
while true; do
case $1 in
loglevel=info
ffp_args+=(-d)
;;
+ -l)
+ volume=1
+ ;;
-r)
case $2 in
tall)
done
mount_suffix=-sysops
-case $1 in
- sysops|tech)
- mount_suffix=-$1
- ;;&
- tech)
- delay=false
- ;;
- staff)
- mount_suffix=
- ;;
-esac
+if [[ $1 ]]; then
+ case $1 in
+ sysops|tech)
+ mount_suffix=-$1
+ ;;&
+ tech)
+ delay=false
+ ;;
+ staff)
+ mount_suffix=
+ ;;
+ *)
+ echo "error: unexpected \$1: $1" >&2
+ exit 1
+ ;;
+ esac
+ ffp_args+=($1)
+fi
if $delay; then
# 2500 gets us around a 4 second delay, up from 1.5s.
#
# man page say zmq url default includes "localhost", but specifying a
# localhost url caused an error for me.
- -filter_complex "[0]azmq,volume=precision=fixed: volume=0 [vol0];
+ -filter_complex "[0]azmq,volume=precision=fixed: volume=$volume [vol0];
[1]azmq='b=tcp\://127.0.0.1\:5556',volume=precision=fixed: volume=0 [vol1];
[vol0][vol1] amerge=inputs=2;
[2]zmq='b=tcp\://127.0.0.1\:5557',drawbox=color=0x262626,drawtext=fontsize=90: fontcolor=beige: x=40: y=40: text=''${delay_arg}[out]"
touch $HOME/.iank-stream-on
fi
-echo true >$HOME/.iank-stream-muted
+echo $volume >$HOME/.iank-stream-muted
ffmpeg "${opts[@]}" &
if $watch; then
# err debbugs exist but is not uid 610: investigate
# fi
+# * mail monitoring / testing
+
+# note, to test clamav, send an email with body that only contains
+# https://en.wikipedia.org/wiki/EICAR_test_file
+# which set malware_name to Eicar-Signature
+case $HOSTNAME in
+ $MAIL_HOST|bk|je)
+ # note: cronjob "ian" also does some important monitoring
+ # todo: this will sometimes cause an alert because mailtest-check will run
+ # before we have setup network namespace and spamassassin
+ u /etc/cron.d/mailtest <<EOF
+SHELL=/bin/bash
+PATH=/usr/bin:/bin:/usr/local/bin
+MAILTO=daylert@iankelling.org
+*/5 * * * * $u send-test-forward |& log-once send-test-forward
+*/10 * * * * root chmod -R g+rw /m/md/bounces |& log-once -1 bounces-chmod
+# if a bounce happened yesterday, dont let it slip through the cracks
+8 1 * * * root export MAILTO=alerts@iankelling.org; [[ -s /var/log/exim4/mainlog.1 ]] && awk '\$5 == "**"' /var/log/exim4/mainlog.1
+EOF
+
+
+ m sudo rsync -ahhi --chown=root:root --chmod=0755 \
+ /b/ds/mailtest-check /b/ds/check-remote-mailqs /usr/local/bin/
+ u /etc/systemd/system/mailtest-check.service <<'EOF'
+[Unit]
+Description=mailtest-check
+After=local-fs.target
+StartLimitIntervalSec=0
+
+[Service]
+# avoid fans spinning up
+CPUQuota=22%
+Type=simple
+ExecStart=/usr/local/bin/mailtest-check slow
+Restart=always
+RestartSec=60
+
+[Install]
+WantedBy=graphical.target
+EOF
+ sysd-prom-fail-install mailtest-check
+ ;;&
+ $MAIL_HOST)
+ test_froms=(ian@iankelling.org z@zroe.org iank@gnu.org)
+ test_tos=(testignore@expertpathologyreview.com testignore@je.b8.nz testignore@amnimal.ninja jtuttle@gnu.org)
+
+ cat >>/etc/cron.d/mailtest <<EOF
+# 10 am friday
+0 10 * * 5 root echo "weekly alert. You are not in the matrix."
+2 * * * * root check-remote-mailqs |& log-once check-remote-mailqs
+EOF
+ ;;&
+ bk)
+ test_froms=(testignore@amnimal.ninja testignore@expertpathologyreview.com)
+ test_tos=(testignore@iankelling.org testignore@je.b8.nz)
+ # We dont need to send from different addresses to the same
+ # address. this breaks down our nice elegant logic of building up
+ # froms and tos , so I just handle expertpath in a special case
+ # below and set the to: to be testignore@zroe.org. If we did sent
+ # that way, it would also mess up our mailtest-check logic that
+ # finds which messages to check.
+ # for example: from testignore@amnimal.ninja to: testignore@iankelling.org testignore@zroe.org
+ # that would become 2 messages and we'd only check 1.
+ ;;&
+ je)
+ test_froms=(testignore@je.b8.nz)
+ test_tos=(testignore@iankelling.org testignore@zroe.org testignore@expertpathologyreview.com testignore@amnimal.ninja)
+ ;;&
+ $MAIL_HOST|bk|je)
+
+ # Dont put these test messages into the sent folder or else it will
+ # overwhelm it, plus i dont want to save a copy at all.
+ # Plus addresses we generally want to ignore.
+ u /etc/exim4/ignore-sent <<EOF
+$(printf "%s\n" ${test_tos[@]})
+vojdedIdNejyebni@b8.nz
+b@eximbackup.b8.nz
+EOF
+
+ cat >/usr/local/bin/send-test-forward <<'EOF'
+#!/bin/bash
+# we remove from the queue older than 4.3 minutes since we send every 5 minutes.
+olds=(
+$(/usr/sbin/exiqgrep -o 260 -i -r '^(testignore@(iankelling\.org|zroe\.org|expertpathologyreview\.com|amnimal\.ninja|je\.b8\.nz)|jtuttle@gnu\.org)$')
+)
+if (( ${#olds[@]} )); then
+ /usr/sbin/exim -Mrm "${olds[@]}" >/dev/null
+fi
+EOF
+ for test_from in ${test_froms[@]}; do
+
+ test_to=${test_tos[0]}
+ for t in ${test_tos[@]:1}; do
+ if [[ $test_from == *@gnu.org && $t == *@gnu.org ]]; then
+ continue
+ fi
+ test_to+=", $t"
+ done
+ case $test_from in
+ testignore@expertpathologyreview.com)
+ test_to=testignore@zroe.org
+ ;;
+ esac
+
+ cat >>/usr/local/bin/send-test-forward <<EOFOUTER
+/usr/sbin/exim -odf -f $test_from -t <<EOF
+From: $test_from
+To: $test_to
+Subject: test \$(date +%Y-%m-%dT%H:%M:%S%z) \$EPOCHSECONDS
+
+/usr/local/bin/send-test-forward
+EOF
+EOFOUTER
+ done
+ m chmod +x /usr/local/bin/send-test-forward
+ ;;
+ *)
+ soff mailtest-check.service
+ rm -fv /etc/cron.d/mailtest \
+ /var/lib/prometheus/node-exporter/mailtest-check.prom* \
+ /var/local/cron-errors/check-remote-mailqs*
+ ;;
+esac
+
+
# * start / stop services
reifactive dnsmasq nscd
;;&
$MAIL_HOST|bk|je)
# start spamassassin/dovecot before exim.
- sre dovecot $spamd_ser
+ sre dovecot $spamd_ser mailtest-check
# Wait a bit before restarting exim, else I get a paniclog entry
# like: spam acl condition: all spamd servers failed. But I'm tired
# of waiting. I'll deal with this some other way.
bk) sre exim4in ;;
esac
-# * mail monitoring / testing
-
-# note, to test clamav, send an email with body that only contains
-# https://en.wikipedia.org/wiki/EICAR_test_file
-# which set malware_name to Eicar-Signature
-case $HOSTNAME in
- $MAIL_HOST|bk|je)
- # note: cronjob "ian" also does some important monitoring
- # todo: this will sometimes cause an alert because mailtest-check will run
- # before we have setup network namespace and spamassassin
- u /etc/cron.d/mailtest <<EOF
-SHELL=/bin/bash
-PATH=/usr/bin:/bin:/usr/local/bin
-MAILTO=daylert@iankelling.org
-*/5 * * * * $u send-test-forward |& log-once send-test-forward
-*/10 * * * * root chmod -R g+rw /m/md/bounces |& log-once -1 bounces-chmod
-# if a bounce happened yesterday, dont let it slip through the cracks
-8 1 * * * root export MAILTO=alerts@iankelling.org; [[ -s /var/log/exim4/mainlog.1 ]] && awk '\$5 == "**"' /var/log/exim4/mainlog.1
-EOF
-
-
- m sudo rsync -ahhi --chown=root:root --chmod=0755 \
- /b/ds/mailtest-check /b/ds/check-remote-mailqs /usr/local/bin/
- u /etc/systemd/system/mailtest-check.service <<'EOF'
-[Unit]
-Description=mailtest-check
-After=local-fs.target
-StartLimitIntervalSec=0
-
-[Service]
-Type=simple
-ExecStart=/usr/local/bin/mailtest-check slow
-Restart=always
-RestartSec=60
-
-[Install]
-WantedBy=graphical.target
-EOF
- sysd-prom-fail-install mailtest-check
- sre mailtest-check
- ;;&
- $MAIL_HOST)
- test_froms=(ian@iankelling.org z@zroe.org iank@gnu.org)
- test_tos=(testignore@expertpathologyreview.com testignore@je.b8.nz testignore@amnimal.ninja jtuttle@gnu.org)
-
- cat >>/etc/cron.d/mailtest <<EOF
-# 10 am friday
-0 10 * * 5 root echo "weekly alert. You are not in the matrix."
-2 * * * * root check-remote-mailqs |& log-once check-remote-mailqs
-EOF
- ;;&
- bk)
- test_froms=(testignore@amnimal.ninja testignore@expertpathologyreview.com)
- test_tos=(testignore@iankelling.org testignore@je.b8.nz)
- # We dont need to send from different addresses to the same
- # address. this breaks down our nice elegant logic of building up
- # froms and tos , so I just handle expertpath in a special case
- # below and set the to: to be testignore@zroe.org. If we did sent
- # that way, it would also mess up our mailtest-check logic that
- # finds which messages to check.
- # for example: from testignore@amnimal.ninja to: testignore@iankelling.org testignore@zroe.org
- # that would become 2 messages and we'd only check 1.
- ;;&
- je)
- test_froms=(testignore@je.b8.nz)
- test_tos=(testignore@iankelling.org testignore@zroe.org testignore@expertpathologyreview.com testignore@amnimal.ninja)
- ;;&
- $MAIL_HOST|bk|je)
-
- # Dont put these test messages into the sent folder or else it will
- # overwhelm it, plus i dont want to save a copy at all.
- # Plus addresses we generally want to ignore.
- u /etc/exim4/ignore-sent <<EOF
-$(printf "%s\n" ${test_tos[@]})
-vojdedIdNejyebni@b8.nz
-b@eximbackup.b8.nz
-EOF
-
- cat >/usr/local/bin/send-test-forward <<'EOF'
-#!/bin/bash
-# we remove from the queue older than 4.3 minutes since we send every 5 minutes.
-olds=(
-$(/usr/sbin/exiqgrep -o 260 -i -r '^(testignore@(iankelling\.org|zroe\.org|expertpathologyreview\.com|amnimal\.ninja|je\.b8\.nz)|jtuttle@gnu\.org)$')
-)
-if (( ${#olds[@]} )); then
- /usr/sbin/exim -Mrm "${olds[@]}" >/dev/null
-fi
-EOF
- for test_from in ${test_froms[@]}; do
-
- test_to=${test_tos[0]}
- for t in ${test_tos[@]:1}; do
- if [[ $test_from == *@gnu.org && $t == *@gnu.org ]]; then
- continue
- fi
- test_to+=", $t"
- done
- case $test_from in
- testignore@expertpathologyreview.com)
- test_to=testignore@zroe.org
- ;;
- esac
-
- cat >>/usr/local/bin/send-test-forward <<EOFOUTER
-/usr/sbin/exim -odf -f $test_from -t <<EOF
-From: $test_from
-To: $test_to
-Subject: test \$(date +%Y-%m-%dT%H:%M:%S%z) \$EPOCHSECONDS
-
-/usr/local/bin/send-test-forward
-EOF
-EOFOUTER
- done
- m chmod +x /usr/local/bin/send-test-forward
- ;;
- *)
- soff mailtest-check.service
- rm -fv /etc/cron.d/mailtest \
- /var/lib/prometheus/node-exporter/mailtest-check.prom* \
- /var/local/cron-errors/check-remote-mailqs*
- ;;
-esac
-
-
-
# * misc
m sudo -u $u mkdir -p /home/$u/.cache
set -- /m/mucache /home/$u/.cache/mu /m/.mu /home/$u/.mu
# for non-interactive, dont print unless something went
# wrong
+#set -x
-source /b/bash-bear-trap/bash-bear
[[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
+source /b/bash-bear-trap/bash-bear
+
shopt -s nullglob
e() { $int || return 0; printf "mailtest-check: %s\n" "$*"; }
# TODO, get je to deliver the local mailbox: /m/md/INBOX
# dovecot appears to setup, i can t be sure.
+maini=0
+
spamd_ser=spamd
if systemctl cat spamassassin &>/dev/null; then
spamd_ser=spamassassin
;;
*)
folders=(/m/md/l/testignore)
- froms=(testignore@je.b8.nz testignore@expertpathologyreview.com testignore@amnimal.ninja ian@iankelling.org z@zroe.org)
+ # save some cpu cycles
+ froms=(testignore@je.b8.nz ian@iankelling.org)
+ if (( maini % 10 == 0 )); then
+ froms=(testignore@je.b8.nz testignore@expertpathologyreview.com testignore@amnimal.ninja ian@iankelling.org z@zroe.org)
+ fi
if ! $int; then
### begin rsyncing fencepost email ###
# We dont want to exit if rsync fails, that will get caught by
# example line that sed is parsing:
# (-0.1 / 5.0 requ) DKIM_SIGNED=0.1,DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1,SPF_HELO_PASS=-0.001,SPF_PASS=-0.001,TVD_SPACE_RATIO=0.001 autolearn=_AUTOLEARN
resultfile=$(mktemp)
- $spamcpre sudo -u Debian-exim spamassassin -D -t --cf='score PYZOR_CHECK 0' <"$latest" &>$resultfile
+ # add -D for debug info. usually it
+ $spamcpre sudo -u Debian-exim spamassassin -t --cf='score PYZOR_CHECK 0' <"$latest" &>$resultfile
# note: on some mail, its 1 line after the send-test-forward, on others its 2 with a blank inbetween.
# I use the sed -n to filter this.
if $doprom && [[ -e $dir ]]; then
for l in "${p_unexpected_spamd_results[@]}"; do
printf "%s\n" "$l" >>$path
- done
+ done
for l in "${p_missing_dnswl[@]}"; do
printf "%s\n" "$l" >>$path
done
while true; do
premain_sec=$EPOCHSECONDS
main
+ maini=$((maini + 1))
sleep $(( 300 - ( EPOCHSECONDS - premain_sec ) ))
done
}
-if [[ $INVOCATION_ID ]]; then
+if [[ $PPID == 1 ]]; then
loop-main
else
main