icecast improvements
[distro-setup] / distro-begin
index 25247dceaeda29c128307ea2d0c96fddd64a746c..86e41e6b286fe7b2fd3bf3cfad76b5167adaf1e7 100755 (executable)
@@ -1,22 +1,35 @@
 #!/bin/bash
 #!/bin/bash
-# Copyright (C) 2016 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.
+# Setup Ian's computers
+# Copyright (C) 2024  Ian Kelling
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-# for setting up a new machine
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+#### for setting up a new machine
 # usage: $0 [-r] [HOSTNAME]
 # HOSTNAME changes the machine's hostname
 
 # usage: $0 [-r] [HOSTNAME]
 # HOSTNAME changes the machine's hostname
 
+# Update target_down alerts in
+# /a/bin/ds/filesystem/etc/prometheus/rules/iank.yml
+#
+# Update hostnames in /b/ds/check-remote-mailqs
+# Update hostnames in /b/ds/machine_specific/*.hosts /p/c/machine_specific/*.hosts
+# Update hostnames in this file
+
+### end new machine setup
+
 # tips:
 # run any sudo command first so your pass is cached
 # set the scrollback to unlimited in case something goes wrong
 # tips:
 # run any sudo command first so your pass is cached
 # set the scrollback to unlimited in case something goes wrong
 
 ####### begin setup environment #######
 
 
 ####### begin setup environment #######
 
+# shellcheck disable=SC2317 # false positive
 
 ### make ssh interactive shell run better. for when running line interactively line by line
 
 ### make ssh interactive shell run better. for when running line interactively line by line
-sudo bash -c '/a/exe/ssh-emacs-setup'
+sudo bash -c '/a/exe/ssh-emacs-setup' || exit $?
 
 ##### setup error handling
 interactive=true  # set this to false to force set -x
 
 ##### setup error handling
 interactive=true  # set this to false to force set -x
@@ -52,7 +66,7 @@ interactive=true  # set this to false to force set -x
 if ! $interactive; then
   set -x
 fi
 if ! $interactive; then
   set -x
 fi
-source /a/bin/errhandle/err
+source /a/bin/bash-bear-trap/bash-bear
 
 mkdir -p ~/.local
 err-cleanup() {
 
 mkdir -p ~/.local
 err-cleanup() {
@@ -100,7 +114,7 @@ source $script_dir/pkgs
 set +x
 source /a/bin/distro-functions/src/identify-distros
 $interactive || set -x
 set +x
 source /a/bin/distro-functions/src/identify-distros
 $interactive || set -x
-for f in kd x2 x3 frodo tp li bk je demohost kw sy bo; do
+for f in kd x2 x3 x8 frodo tp li bk je demohost kw sy bo so; do
   eval "$f() { [[ $HOSTNAME == $f ]]; }"
 done
 codename=$(debian-codename)
   eval "$f() { [[ $HOSTNAME == $f ]]; }"
 done
 codename=$(debian-codename)
@@ -297,68 +311,11 @@ set +x
 err-allow
 source /etc/profile.d/environment.sh
 export LC_USEBASHRC=t
 err-allow
 source /etc/profile.d/environment.sh
 export LC_USEBASHRC=t
-# shellcheck source=./.bashrc
-source ~/.bashrc
+# shellcheck source=./brc
+source ~/brc
 err-catch
 $interactive || set -x
 
 err-catch
 $interactive || set -x
 
-##### use systemd-resolved for glibc resolutions
-
-pi libnss-resolve
-
-if [[ ! -L /etc/nsswitch.conf ]]; then
-  sudo mkdir -p /etc/resolved-nsswitch
-  sudo mv /etc/nsswitch.conf /etc/resolved-nsswitch
-  sudo ln -sf /etc/resolved-nsswitch/nsswitch.conf /etc
-fi
-
-f=/etc/basic-nsswitch/nsswitch.conf
-if [[ ! -e $f ]]; then
-  sudo mkdir -p ${f%/*}
-  sudo cp /etc/nsswitch.conf $f
-  sudo sed -i --follow-symlinks 's/^ *hosts:.*/hosts: files dns myhostname/' $f
-fi
-case $HOSTNAME in
-  bk|je)
-    # je should be able to get along systemd-resolved, but ive had some odd
-    # very intermittent dns failures with spamassassin, it seems it might only
-    # be happening with systemd-resolved, so just use unbound
-    # to make it consistent with the other hosts.
-    sudo sed -i --follow-symlinks 's/^ *hosts:.*/hosts: files dns myhostname/' /etc/nsswitch.conf
-    soff systemd-resolved
-    sudo ln -sf 127.0.0.1-resolv/stub-resolv.conf /etc/resolv.conf
-    sgo unbound
-    # cautious measure to make sure resolution is working
-    sleep 1
-    ;;
-  *)
-    # default is
-    # files mdns4_minimal [NOTFOUND=return] dns myhostname
-    # mdns4 is needed for my printer and for bbb webrtc, not sure exactly why.
-    # https://www.freedesktop.org/software/systemd/man/nss-resolve.html#
-    # seems more important than some potential use case.
-    # Interestingly, t9/t10 man page says use files before resolve, debian 10 says the opposite.
-    # removing files makes hostname -f not actually give the fully qualified domain name.
-    sudo sed -i --follow-symlinks 's/^ *hosts:.*/hosts: files resolve [!UNAVAIL=return] mdns4_minimal [NOTFOUND=return] myhostname/' /etc/resolved-nsswitch/nsswitch.conf
-    ;;
-esac
-
-case $HOSTNAME in
-  bk)
-    sgo named
-    ;;
-esac
-
-
-f=/etc/apparmor.d/abstractions/nameservice
-if [[ -e $f ]] && ! grep -q /etc/resolved-nsswitch/nsswitch.conf $f; then
-  sudo sed -i '/\/etc\/nsswitch.conf/a /etc/resolved-nsswitch/nsswitch.conf r,' $f
-  sudo sed -i '/\/etc\/nsswitch.conf/a /etc/basic-nsswitch/nsswitch.conf r,' $f
-  if sytemctl is-enabled apparmor; then
-    m ser reload apparmor
-  fi
-fi
-
 
 
 if dpkg -s -- nscd &>/dev/null; then
 
 
 if dpkg -s -- nscd &>/dev/null; then
@@ -377,6 +334,14 @@ if bitfolk; then
   sudo sed -ri "/^127\./n;/[[:space:]]$HOSTNAME\$/d" /etc/hosts
 fi
 
   sudo sed -ri "/^127\./n;/[[:space:]]$HOSTNAME\$/d" /etc/hosts
 fi
 
+if isdeb && [[ $(debian-codename) == aramo ]]; then
+  sudo dd of=/etc/apt/preferences.d/aramo-jammy-missing <<'EOF'
+Package: linux-libc-dev libmysqlclient21
+Pin: release n=jammy,o=Ubuntu
+Pin-Priority: 500
+EOF
+fi
+
 # libfdk just has some patent worries.
 # https://www.gnu.org/licenses/license-list.en.html#fdk
 if isdeb && [[ $(debian-codename) == nabia ]]; then
 # libfdk just has some patent worries.
 # https://www.gnu.org/licenses/license-list.en.html#fdk
 if isdeb && [[ $(debian-codename) == nabia ]]; then
@@ -449,6 +414,7 @@ if isarch; then
 fi
 
 #### update all packages
 fi
 
 #### update all packages
+# shellcheck disable=SC2119 # obvious
 pup
 
 
 pup
 
 
@@ -458,7 +424,7 @@ pi ${p1[@]}
 
 ######## fix evbug bug ######
 case $(debian-codename-compat) in
 
 ######## fix evbug bug ######
 case $(debian-codename-compat) in
-  xenial|bionic|focal)
+  xenial|bionic|focal|jammy|noble)
     # noticed in flidas. dunno if it affects any others
     #https://bugs.launchpad.net/ubuntu/+source/module-init-tools/+bug/240553
     #https://wiki.debian.org/KernelModuleBlacklisting
     # noticed in flidas. dunno if it affects any others
     #https://bugs.launchpad.net/ubuntu/+source/module-init-tools/+bug/240553
     #https://wiki.debian.org/KernelModuleBlacklisting
@@ -468,7 +434,7 @@ case $(debian-codename-compat) in
     file=/etc/modprobe.d/evbug.conf
     line="blacklist evbug"
     if [[ $(cat $file) != "$line" ]]; then
     file=/etc/modprobe.d/evbug.conf
     line="blacklist evbug"
     if [[ $(cat $file) != "$line" ]]; then
-      sudo dd of=$file 2>/dev/null <<<"$line"
+      sudo dd of=$file status=none <<<"$line"
       sudo depmod -a
       sudo update-initramfs -u
     fi
       sudo depmod -a
       sudo update-initramfs -u
     fi
@@ -514,7 +480,7 @@ fi
 # disabled temporarily
 ###### setup /i
 # if home_network; then
 # disabled temporarily
 ###### setup /i
 # if home_network; then
-#   tu /etc/fstab <<'EOF'
+#   sudo /a/exe/teeu /etc/fstab <<'EOF'
 # /i/w  /w  none  bind,noauto  0 0
 # /i/k  /k  none  bind,noauto  0 0
 # EOF
 # /i/w  /w  none  bind,noauto  0 0
 # /i/k  /k  none  bind,noauto  0 0
 # EOF
@@ -523,11 +489,11 @@ fi
 #     sudo chown $USER:user2 /kr
 #   fi
 #   if [[ $HOSTNAME == frodo ]]; then
 #     sudo chown $USER:user2 /kr
 #   fi
 #   if [[ $HOSTNAME == frodo ]]; then
-#     tu /etc/fstab <<'EOF'
+#     sudo /a/exe/teeu /etc/fstab <<'EOF'
 # /k  /kr  none  bind,noauto  0 0
 # EOF
 #   else
 # /k  /kr  none  bind,noauto  0 0
 # EOF
 #   else
-#     tu /etc/fstab <<'EOF'
+#     sudo /a/exe/teeu /etc/fstab <<'EOF'
 # frodo:/k  /kr  nfs  noauto  0 0
 # EOF
 #   fi
 # frodo:/k  /kr  nfs  noauto  0 0
 # EOF
 #   fi
@@ -597,8 +563,8 @@ if has_btrfs; then
     fi
 
     first_root_crypt=$(awk '$2 == "/" {print $1}' /etc/mtab)
     fi
 
     first_root_crypt=$(awk '$2 == "/" {print $1}' /etc/mtab)
-    tu /etc/fstab <<EOF
-$first_root_crypt  /nocow  btrfs  noatime,subvol=nocow$( ((`nproc` > 2)) && echo ,compress=zstd )  0 0
+    sudo /a/exe/teeu /etc/fstab <<EOF
+$first_root_crypt  /nocow  btrfs  noatime,subvol=nocow$( (( $(nproc) > 2)) && echo ,compress=zstd )  0 0
 EOF
     sudo mkdir -p $dir
     sudo chown $USER:$USER $dir
 EOF
     sudo mkdir -p $dir
     sudo chown $USER:$USER $dir
@@ -610,15 +576,31 @@ fi
 
 case $HOSTNAME in
   kd)
 
 case $HOSTNAME in
   kd)
-    tu /etc/fstab <<'EOF'
+    sudo /a/exe/teeu /etc/fstab <<'EOF'
 /dev/mapper/crypt_dev_ata-Samsung_SSD_870_QVO_8TB_S5VUNG0N900656V-part7  /d  btrfs  nofail,x-systemd.device-timeout=30s,x-systemd.mount-timeout=30s,noatime,compress=zstd,subvol=d  0 0
 /dev/mapper/crypt_dev_ata-Samsung_SSD_870_QVO_8TB_S5VUNG0N900656V-part7  /d  btrfs  nofail,x-systemd.device-timeout=30s,x-systemd.mount-timeout=30s,noatime,compress=zstd,subvol=d  0 0
+/d/m /i  none  bind,compress=zstd  0 0
 EOF
     if ! mountpoint /d &>/dev/null; then
 EOF
     if ! mountpoint /d &>/dev/null; then
-      sudo mkdir /d
+      sudo mkdir -p /d
       if [[ -d /mnt/r7/d ]]; then
         sudo mount /d
       fi
     fi
       if [[ -d /mnt/r7/d ]]; then
         sudo mount /d
       fi
     fi
+    if ! mountpoint /i &>/dev/null; then
+      sudo mkdir -p /i
+      sudo mount /i
+    fi
+    ;;
+  frodo)
+    sudo /a/exe/teeu /etc/fstab <<'EOF'
+/dev/mapper/crypt_dev_ata-ata-Hitachi_HDS722020ALA330_JK1121YAG7SXWS-part1  /i  btrfs  nofail,x-systemd.device-timeout=30s,x-systemd.mount-timeout=30s,noatime,subvol=i  0 0
+EOF
+    if ! mountpoint /i &>/dev/null; then
+      sudo mkdir -p /i
+      if [[ -d /mnt/i/i ]]; then
+        sudo mount /i
+      fi
+    fi
     ;;
 esac
 
     ;;
 esac
 
@@ -660,8 +642,7 @@ if has_monitor; then
 
 
   ###### install X
 
 
   ###### install X
-  # no recommends due to this bug: https://trisquel.info/en/issues/26525
-  pi --no-install-recommends i3
+  pi i3
 
   ##### install xinput
   case $(distro-name) in
 
   ##### install xinput
   case $(distro-name) in
@@ -670,31 +651,19 @@ if has_monitor; then
       ;;
   esac
 
       ;;
   esac
 
-  # recommends gets us geoclue (for darkening automatically at night i assume),
-  # which recommends modemmanager, which is annoying to fix for the model01 keyboard.
-  # commented because I dont use it much, and in nabia its named changed to redshift-gtk
-  #pi --no-install-recommends gtk-redshift
-
   ##### setup X autostart
   ##### setup X autostart
-  # install for multiple display managers in case we use one
-  dir=/etc/X11/xinit/xinitrc.d/
-  sudo mkdir -p $dir
-  sudo cp /a/bin/distro-setup/desktop-20-autostart.sh $dir
-  s teeu /etc/systemd/logind.conf <<'EOF'
-HandleLidSwitch=
-EOF
 
 
-  # this works on
-  dir=/etc/gdm3
-  sudo mkdir -p $dir/PostLogin
-  sudo cp /a/bin/distro-setup/desktop-20-autostart.sh $dir/PostLogin/Default
+  ## disabled since i'm not using gdm atm
+  dir=/etc/gdm3
+  sudo mkdir -p $dir/PostLogin
+  # sudo cp /a/bin/distro-setup/myx $dir/PostLogin/Default
   sudo mkdir -p /etc/lightdm/lightdm.conf.d
   # etiona lightdm.log:
   # [SeatDefaults] is now called [Seat:*], please update this configuration
   sudo dd of=/etc/lightdm/lightdm.conf.d/12-iank.conf <<'EOF'
 [Seat:*]
   sudo mkdir -p /etc/lightdm/lightdm.conf.d
   # etiona lightdm.log:
   # [SeatDefaults] is now called [Seat:*], please update this configuration
   sudo dd of=/etc/lightdm/lightdm.conf.d/12-iank.conf <<'EOF'
 [Seat:*]
-display-setup-script=/a/bin/ds/lightdm-start
-session-setup-script=/a/bin/distro-setup/desktop-20-autostart.sh
+display-setup-script=/a/bin/ds/lightdm-start
+session-setup-script=/a/bin/distro-setup/myx
 EOF
 
 
 EOF
 
 
@@ -723,8 +692,10 @@ if $emacs; then
   else
     if $recompile; then
       /a/bin/buildscripts/emacs
   else
     if $recompile; then
       /a/bin/buildscripts/emacs
+      /a/bin/buildscripts/mu4e
     else
       /a/bin/buildscripts/emacs --no-r
     else
       /a/bin/buildscripts/emacs --no-r
+      /a/bin/buildscripts/mu4e --no-r
     fi
   fi
   # the first pup command can kill off our /etc/ mod, so rerun this
     fi
   fi
   # the first pup command can kill off our /etc/ mod, so rerun this