shellcheck, static usb ethnet addresses, fix vpn config
[distro-setup] / filesystem / usr / local / bin / ethusb-static
diff --git a/filesystem/usr/local/bin/ethusb-static b/filesystem/usr/local/bin/ethusb-static
new file mode 100644 (file)
index 0000000..97868d7
--- /dev/null
@@ -0,0 +1,74 @@
+#!/bin/bash
+# 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.
+
+if ! test "$BASH_VERSION"; then echo "error: shell is not bash" >&2; exit 1; fi
+shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4
+set -eE -o pipefail
+trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
+
+[[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
+
+
+shopt -s nullglob
+
+# we already configured the interface once, afterwards, comment and
+# uncomment to enable/disable. This makes it so we don't depend on /p
+# being mounted.
+
+if [[ -s /etc/network/interfaces.d/ethusb ]]; then
+  sed -i --follow-symlinks 's/^#//' /etc/network/interfaces.d/ethusb
+  exit 0
+fi
+
+
+while read -r ip host mac; do
+  if [[ $mac != usb ]]; then
+    continue
+  fi
+  if [[ $host = ${HOSTNAME}c ]]; then
+    usbip=$ip
+    break
+  fi
+done </p/c/host-info
+
+if [[ ! $usbip ]]; then
+  exit 0
+fi
+
+ethx=0
+
+# device that has an eth0, but we aren't using it because it is
+# broken. We could just hardcode a mac comparison with `cat
+# /sys/class/net/eth0/address` but this is cooler.
+if [[ -e  /sys/class/net/eth0 ]]; then
+  bus_info=$(ethtool -i eth0 | awk '$1 == "bus-info:" { print $2 }')
+  if [[ $bus_info != usb* ]]; then
+    ethx=1
+  fi
+fi
+
+cat >/etc/network/interfaces.d/ethusb <<EOF
+auto eth$ethx
+iface eth$ethx inet static
+  address 10.2.0.$ip/16
+  gateway 10.2.0.1
+EOF