X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc2;h=e936badfba828a52dcbab2c003e8b1c05bd2c65a;hb=7f9af41bd119784d4f062731911d1485d224ec73;hp=5c86f00f8845b7c5f18885922fdb06c77f300cb7;hpb=ef708570f1f42d9bb54ddc5b7b0432de4f761eb0;p=distro-setup diff --git a/brc2 b/brc2 index 5c86f00..e936bad 100644 --- a/brc2 +++ b/brc2 @@ -1,6 +1,25 @@ #!/bin/bash -# Copyright (C) 2019 Ian Kelling -# SPDX-License-Identifier: AGPL-3.0-or-later +# I, Ian Kelling, follow the GNU license recommendations at +# https://www.gnu.org/licenses/license-recommendations.en.html. They +# recommend that small programs, < 300 lines, be licensed under the +# Apache License 2.0. This file contains or is part of one or more small +# programs. If a small program grows beyond 300 lines, I plan to switch +# its license to GPL. + +# Copyright 2024 Ian Kelling + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # this gets sourced. shebang is just for file mode detection @@ -197,6 +216,20 @@ rm-docker-iptables() { # usage mkschroot [-] distro codename packages # - means no piping in of sources.list +# +# note some useful post mkschroot i've used in the past +# tu /nocow/schroot/flidas/etc/sudoers </dev/null || [[ $? == 141 ]]; then "$@" fi @@ -771,7 +810,7 @@ mpvrpc-loadfile() { finalpath="$cachedir${path#/i/m}" rowir rsync --partial -a --inplace --mkpath "b8.nz:$path" "$finalpath" finalnextpath="$cachedir${nextpath#/i/m}" - count=$(pgrep -a -f "^rsync --partial -a --inplace --mkpath $cachdir" || [[ $? == 1 ]] ) + count=$(pgrep -a -f "^rsync --partial -a --inplace --mkpath $cachedir" || [[ $? == 1 ]] ) # allow us to start 2 rsyncs in the background if [[ $count == [01] ]]; then rinr rsync --partial -a --inplace --mkpath "b8.nz:$nextpath" "$finalnextpath" & @@ -801,6 +840,7 @@ mpvrpc-loadfile() { # q quit # ret next # +# todo: enter should also unpause beetag() { local last_genre_i fstring tag id char new_item char_i genre tag remove doplay i j random path local do_rare_genres read_wait help line lsout tmp ls_line skip_lookback @@ -1752,19 +1792,13 @@ bindpush() { dsign iankelling.org expertpathologyreview.com zroe.org amnimal.ninja lipush for h in li bk; do - m sl $h.b8.nz <<'EOF' -source ~/.bashrc -m dnsup -EOF + m ssh $h.b8.nz dnsup done } bindpushb8() { lipush for h in li bk; do - m sl $h <<'EOF' -source ~/.bashrc -m dnsb8 -EOF + m ssh $h.b8.nz dnsb8 done } @@ -1775,8 +1809,18 @@ dnsup() { dnsb8() { local f=/var/lib/bind/db.b8.nz m ser stop named - m sleep 1 - m sudo rm -fv $f.jnl $f.signed.jnl + # jbk is like a temp file. dunno if removing it helps + + i=0 + while pgrep '^named$' &>/dev/null; do + sleep .5 + i=$(( i + 1 )) + if (( i > 100 )); then + echo "dnsb8: error: timeout waiting for named to exit" + return 1 + fi + done + m sudo rm -fv $f.jnl $f.signed.jnl $f.jbk m sudo install -m 644 -o bind -g bind /p/c/machine_specific/vps/bind-initial/db.b8.nz $f m ser restart named } @@ -1953,6 +1997,71 @@ capache() fi } + + +apache-header() { + # First paragraph is to avoid people being confused about why a + # file is apache licensed. + cat <<'EOF' +# I, Ian Kelling, follow the GNU license recommendations at +# https://www.gnu.org/licenses/license-recommendations.en.html. They +# recommend that small programs, < 300 lines, be licensed under the +# Apache License 2.0. This file contains or is part of one or more small +# programs. If a small program grows beyond 300 lines, I plan to switch +# its license to GPL. + +# Copyright 2024 Ian Kelling + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +EOF + +} + +# apply apache to git tracked bash files + README, except files with A?GPL3 header. +apache-apply-repo() { + for f in $(git ls-files); do + [[ -L $f || ! -f $f ]] && continue + if [[ $f != README ]]; then + if ! grep -n '^#!/bin/bash' $f | grep ^1: &>/dev/null; then continue; fi + if head -n 10 $f | grep 'it under the terms of the GNU General Public License as published by' &>/dev/null; then continue; fi + fi + apache-apply $f + done +} + +apache-apply() { + for file; do + if head -n1 "$file"| grep -E '^#!/bin/bash\b' &>/dev/null; then + { + head -n1 "$file" + apache-header + tail -n+2 "$file" + } | sponge "$file" + else + { + apache-header + cat "$file" + } | sponge "$file" + fi + done +} +# strip out the apache license from a file. +apache-strip() { + # shellcheck disable=SC2044 # meh + for f in $(find . -type f -maxdepth 1); do if head -n1 "$f"| grep -E '^#!/bin/bash\b' &>/dev/null; then { head -n 20 $f | tac | sed '/^# limitations under the License.$/,/^# Copyright.*Ian Kelling$/d' | tac; tail -n+21 $f; } |sponge $f; fi ; done +} + chrome() { if type -p chromium &>/dev/null; then cmd=chromium @@ -2457,7 +2566,10 @@ ilog-local() { cd $d$n/"$chan" hr for x in *; do - echo $x; sed "s/^./${x%log}/" $x; hr; + # *** are parts and joins and such, and they make reading hard. + # I probably will want to see them sometimes, just have to + # remove that part. + echo $x; sed "s/^./${x%log}/;/\*\*\*/d" $x; hr; done done } @@ -2520,19 +2632,62 @@ wgkey() { umask $umask_orig } -declare -A vpn_ips -vpn_ips[kd]=2 -# note: 1, 4, 5 are occupied by mail wireguard -vpn_ips[x3]=8 -vpn_ips[sy]=12 -vpn_ips[x2]=13 -vpn_ips[kw]=27 -vpn_ips[bo]=28 -vpn_ips[frodo]=34 -vpn_ips[s23b]=49 +host-info-all() { + host-info-update + bindpushb8 + wrt-setup +} + + +# if you change a host's ip, then run +# bindpushb8 +# wrt-setup +host-info-update() { + + local -A vpn_ips host_ips host_macs nonvpn_ips + local -a root_hosts nonroot_hosts + + # the hosts with no mac + root_hosts=( bk je li b8.nz ) + for h in ${root_hosts[@]}; do + root_hosts+=(${h}ex) + done + root_hosts+=(cmc) + + while read -r ip host mac opts; do + if [[ $ip == *#* || ! $host ]]; then continue; fi + if [[ $opts == vpn ]]; then + vpn_ips[$host]=$ip + else + nonvpn_ips[$host]=$ip + fi + + + if [[ $opts == user=root ]]; then + # note: the b8.nz suffix is for the User part, the IdentityFile + # part is redundant to *.b8.nz. + root_hosts+=($host i$host $host.b8.nz i$host.b8.nz) + else + nonroot_hosts+=($host i$host) + fi + + host_ips[$host]=$ip + host_macs[$host]=$mac + done

&2 return 1 @@ -4007,12 +4175,6 @@ vrun() { "$@" } -f=/a/f/ansible-configs/files/common/etc/fsf-workstation-bashrc.sh -if [[ -e $f ]]; then - # shellcheck disable=SC1090 - source $f -fi - electrum() { # https://electrum.readthedocs.io/en/latest/tor.html # https://github.com/spesmilo/electrum-docs/issues/129 @@ -4024,6 +4186,12 @@ monero() { } +# grep + find +gef() { + faf | grep -E "$@" ||: + rgv "$@" +} + # rg my main files rgm() { rg "$@" /p/w.org /a/t.org /a/work.org /b @@ -4036,17 +4204,27 @@ rem() { find $paths -not \( -name .svn -prune -o -name .git -prune \ -o -name .hg -prune -o -name .editor-backups -prune \ -o -name .undo-tree-history -prune \) 2>/dev/null | grep -iP --color=auto -- "$*" ||: - rgv -- "$*" $paths /a/t.org /p/w.org /a/work.org ||: + rgv $local_rgv_args -g "!bash_unpublished" -- "$*" $paths /a/work.org ||: } -reml() { # with limit to 5 matches per file +reml() { # rem with limit to 5 matches per file + local_rgv_args="-m 5" + rem "$@" +} + +rep() { local paths - paths="/p/c /b" + paths="/p/c" find $paths -not \( -name .svn -prune -o -name .git -prune \ -o -name .hg -prune -o -name .editor-backups -prune \ -o -name .undo-tree-history -prune \) 2>/dev/null | grep -iP --color=auto -- "$*" ||: - rgv -m 5 -- "$*" $paths /a/t.org /p/w.org /a/work.org ||: + rgv $local_rgv_args -- "$*" $paths /a/t.org /p/w.org ||: +} +repl() { # rem with limit to 5 matches per file + local local_rgv_args="-m 5" + rem "$@" } + # re on common fsf files ref() { local paths @@ -4193,9 +4371,6 @@ mypyenvinit () { } -export GOPATH=$HOME/go -path-add $GOPATH/bin -path-add /usr/local/go/bin # I have the git repo and a release. either one should work. # I have both because I was trying to solve an issue that @@ -4305,7 +4480,7 @@ hssh-update() { case $HOSTNAME in sy|kd) hosts=( - kd x3.office.fsf.org syw + kd.b8.nz x3.office.fsf.org syw x2.b8.nz ) ;; x3) @@ -4357,6 +4532,54 @@ ftoc() { units "tempF($1)" tempC } +# requires dns/firewall setup first +local-icecast() { + web-conf -e ian@iankelling.org -f 8000 - apache2 live.iankelling.org <<'EOF' + +AuthType Basic +AuthName "basic_auth" +# created with +# htpasswd -c icecast-fsf-htpasswd USERNAME +AuthUserFile "/etc/icecast-fsf-htpasswd" +Require valid-user + + +AuthType Basic +AuthName "basic_auth" +AuthUserFile "/etc/icecast-fsf-tech-htpasswd" +Require valid-user + +EOF +} + +# obs screen switching of +obof() { + ls -l /tmp/no-obs-auto-scene-switch + touch /tmp/no-obs-auto-scene-switch +} +# obs screen switching on +obon() { + ls -l /tmp/no-obs-auto-scene-switch + if [[ -e /tmp/no-obs-auto-scene-switch ]]; then + rm -f /tmp/no-obs-auto-scene-switch + fi +} + +obs-gen-profiles() { + local p=/p/c/basic/profiles + sed 's/fsf-sysops/fsf-tech/g' $p/fsfsysops/basic.ini >$p/fsftech/basic.ini + sed 's/fsf-sysops/fsf/g' $p/fsfsysops/basic.ini >$p/fsf/basic.ini +} + +# terminal clear. like clear, but put the prompt at the bottom, +# useful for obs streaming the bottom half of a terminal window. +tclear() { + for ((i=0; i