X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc2;h=eae5aa93439b60f921cc061cacee567cf47d2c1f;hb=6d1ec26482f86b0f2d9560ce3d04ea8c63297c25;hp=a13574b8bccc7d6070dbe64acc3866c299fc797a;hpb=07fbcf11a78d2ee20697eb98f5b7eeaa2475f1d1;p=distro-setup diff --git a/brc2 b/brc2 index a13574b..eae5aa9 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 @@ -64,15 +83,6 @@ else export NOT_MAIL_HOST_P=t fi - -source /a/bin/log-quiet/logq-function - -# not used -# if [[ -s /a/opt/alacritty/extra/completions/alacritty.bash ]]; then -# source /a/opt/alacritty/extra/completions/alacritty.bash -# fi - - source /a/bin/ds/beet-data @@ -821,9 +831,10 @@ 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 + local do_rare_genres read_wait line lsout tmp ls_line skip_lookback local escape_char escaped_input expected_input skip_input_regex right_pad erasable_line seek_sec local pl_state_path pl_state_dir pl_state_file tmpstr local new_random pl_seed_path seed_num seed_file fmt first_play repeat1 @@ -1772,21 +1783,13 @@ bindpush() { dsign iankelling.org expertpathologyreview.com zroe.org amnimal.ninja lipush for h in li bk; do - e sshing $h - ssh $h.b8.nz <<'EOF' -source ~/.bashrc -m dnsup -EOF + m ssh $h.b8.nz dnsup done } bindpushb8() { lipush for h in li bk; do - e sshing $h - ssh $h.b8.nz <<'EOF' -source ~/.bashrc -m dnsb8 -EOF + m ssh $h.b8.nz dnsb8 done } @@ -1797,8 +1800,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 } @@ -1975,18 +1988,18 @@ capache() fi } -# wip -apache-apply() { - for file; do - if head -n1 "$file"| grep -E '^#!/bin/bash\b' &>/dev/null; then - { - head -n1 "$file" - cat <<'EOF' -# I follow the GNU license recommendations, -# https://www.gnu.org/licenses/license-recommendations.en.html, which -# recommends that small programs, < 300 lines, such those contained in -# this file or related to this file, be licensed Apache License 2.0. Any -# program which grows large enough, I will switch it to GPL. + + +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 @@ -2003,11 +2016,42 @@ apache-apply() { # 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 @@ -2296,8 +2340,8 @@ rename-test() { # test whether missing files were renamed, generally for use with fsdiff # $1 = fsdiff output file, $2 = directory to compare to. pwd = fsdiff dir # echos non-renamed files - local x y found - unset sums + local x line found renamed + local -a sums for x in "$2"/*; do { sums+=( "$(md5sum < "$x")" ) ; } 2>/dev/null done @@ -2349,8 +2393,8 @@ gup() { /a/f/gnulib/build-aux/gnupload "$@"; } dejagnu() { /a/opt/dejagnu/dejagnu "$@"; } +# do git status on published repos. hstatus() { - # do git status on published repos. c /a/bin/githtml for x in *; do cd "$(readlink -f $x)"/.. @@ -2364,6 +2408,16 @@ hstatus() { done } +hsk() { + local x + c /a/bin/githtml + for x in *; do + cd "$(readlink -f $x)"/.. + skgit + cd /a/bin/githtml + done +} + ## work log # # note: database location is specified in ~/.timetrap.yml, currently /p/.timetrap.db @@ -2513,15 +2567,21 @@ 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 } ilog() { - local chan + local chan tmpf + tmpf=$(mktemp) chan="${1:-#fsfsys}" # use * instead of -r since that does sorted order - sl root@iankelling.org ilog-local "$chan" | less +G + sl root@li.b8.nz ilog-local "$chan" > $tmpf + less +G $tmpf + rm -f $tmpf } o() { @@ -2576,20 +2636,125 @@ 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 all_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 + + # opt parsing + vpn=false + root=false + for opt in $opts; do + case $opt in + user=root) + root=true + ;; + vpn) + vpn=true + ;; + esac + done + + all_ips[$host]=$ip + if $vpn; then + vpn_ips[$host]=$ip + else + nonvpn_ips[$host]=$ip + fi + if $root; then + # note: the reason we have b8.nz suffix here but not for non_root + # hosts is that it is for the User part, the IdentityFile part is + # redundant to *.b8.nz. Also note ${host}i, we only setup those for vpn hosts, but there is no harm in overspecifying here. + root_hosts+=($host ${host}i $host.b8.nz ${host}i.b8.nz) + else + nonroot_hosts+=($host ${host}i) + fi + + host_ips[$host]=$ip + host_macs[$host]=$mac + done

/p/c/cmc-firewall-data + -vpn-ips-update() { local host ipsuf f files + + # shellcheck disable=SC2016 # shellcheck doesnt know this is sed + sedi '/edits below here are made automatically/,$d' /p/c/machine_specific/li/filesystem/etc/wireguard/wgmail.conf for host in ${!vpn_ips[@]}; do + if [[ ${root_ips[$host]} ]]; then + # root machines dont run transmission + continue + fi ipsuf=${vpn_ips[$host]} wghole $host $ipsuf u /a/bin/ds/machine_specific/$host/filesystem/etc/systemd/system/openvpn-client-tr@.service <