static usb ethnet addresses
[automated-distro-installer] / faiserver-setup
index cf6b984e1837760d57d815f1c60dc2d7f0a5b306..168dcda6d0518e09652ebfbb0c59fbbfcc4bd56d 100755 (executable)
@@ -19,10 +19,9 @@ x="$(readlink -f "$BASH_SOURCE")"; source "${x%/*}/bash-trace"
 
 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
 
-LC_USEBASHRC=t; . ~/.bashrc
 
 usage() {
-  cat <<EOF
+  cat <<'EOF'
 usage: ${0##*/} [-h|--help] [BASE_CODENAME] [ARCH]
 install fai-server on the current machine
 
@@ -31,11 +30,17 @@ as the tftp server. I vaguely remember that using a hostname does not
 work.  Separate from running this, faiserver needs to be setup in dns to
 point to whatever host this is run on.
 
-Default BASE_CODENAME is bullseye. Default ARCH is 64. The script expects corresponding
-$BASEFILE_DIR/${UPCASED_BASE_CODENAME}${ARCH}.tar.(gz|xz) to exist, and it must have been
+Default BASE_CODENAME is bookworm. Default ARCH is 64. The script expects corresponding
+$BASEFILE_DIR/${UPCASED_BASE_CODENAME}${ARCH}.tar.(zst|xz) to exist, and it must have been
 generated around the same time as the nfsroot, at least so it has the
 same kernel version.
 
+for copying and running this on a remote server,
+scp -tPrl fai SERVER:
+scp $(readlink -f ~/.ssh/home.pub) SERVER:.ssh
+scp /a/bin/cedit/cedit SERVER:/usr/local/bin
+# todo: make the above key be an option
+
 
 Note: there is a bug in 5.9.4, fixed by adding
     sleep 2
@@ -46,8 +51,7 @@ Note: in t9, there is a bug in recent fai packages (eg 2021+), where
   chroot like it used to be, but I'm not bothering to make
   any persistent fix, since I'm now on t10. If it ever came
   up again, using an old fai package would also work.
-
-/usr/sbin/fai-make-nfsroot:503, before apt-get update
+  /usr/sbin/fai-make-nfsroot:503, before apt-get update
 
 
 EOF
@@ -61,7 +65,7 @@ esac
 e() { echo "+ $@"; "$@"; }
 
 
-base=${1:-bullseye}
+base=${1:-bookworm}
 arch=${2:-64}
 
 if [[ $base == [[:upper:]] ]]; then
@@ -69,7 +73,7 @@ if [[ $base == [[:upper:]] ]]; then
   exit 1
 fi
 
-basefile=($BASEFILE_DIR/${base^^}${arch^^}.tar.gz)
+basefile=($BASEFILE_DIR/${base^^}${arch^^}.tar.zst)
 sed="sed -ri --follow-symlinks"
 
 if [[ ! -e $basefile ]]; then
@@ -93,11 +97,11 @@ armhf() {
 
 # fai on ubuntu only has official support using the universe repo, but newer
 # tends to have less bugs.
-wget -O - https://fai-project.org/download/2BF8D9FE074BCDE4.asc | apt-key add -
+wget -O - https://fai-project.org/download/fai-project.gpg | sudo dd of=/etc/apt/trusted.gpg.d/fai-project.gpg
 
 update=false
 case $base in
-  stretch|bullseye|bullseye)
+  stretch|buster|bullseye|bookworm)
     if ! grep -qFx "deb https://fai-project.org/download $base koeln" /etc/apt/sources.list.d/fai.list; then
       update=true
     fi
@@ -116,7 +120,7 @@ if [[ -r $f ]]; then
   cachetime=$(stat -c %Y $f );
   now=$(date +%s)
   limittime=$(( now - 60*60*2 ))
-  if (( cachtime > limittime )); then
+  if (( cachetime > limittime )); then
     update=true
   fi
 fi
@@ -131,7 +135,8 @@ fi
 # kernel, or the ability to install it.
 # xorriso is for running fai-cd -a, not strictly need for fai-server
 # perl-tk is for fai-monitor-gui
-pkgs=(fai-doc tftpd-hpa tar reprepro squashfs-tools binutils xorriso perl-tk)
+# mtools is for fai-cd
+pkgs=(fai-doc tftpd-hpa tar reprepro squashfs-tools binutils xorriso perl-tk mtools)
 if modprobe nfsd &>/dev/null; then
   pkgs+=(nfs-kernel-server)
 else
@@ -155,7 +160,7 @@ EOF
 
 ### begin setup security repo ###
 case $base in
-  stretch|buster|bullseye)
+  stretch|buster)
     cat >>/etc/fai/apt/sources.list <<EOF
 deb http://security.debian.org/debian-security $base/updates main contrib
 EOF
@@ -189,9 +194,14 @@ EOF
 # fi
 
 
-$sed -f - /etc/fai/nfsroot.conf <<EOF
+if [[ -s /q/root/shadow/standard ]]; then
+  $sed -f - /etc/fai/nfsroot.conf <<EOF
 $ a FAI_ROOTPW='$(</q/root/shadow/standard)'
 /^\s*FAI_ROOTPW/d
+EOF
+fi
+
+$sed -f - /etc/fai/nfsroot.conf <<EOF
 $ a SSH_IDENTITY=/root/.ssh/home.pub
 /^\s*SSH_IDENTITY/d
 s,^( *FAI_DEBOOTSTRAP=).*,\1"$base $r",
@@ -284,6 +294,12 @@ else # not armhf
   e fai-setup -evf -B $basefile
   # fai-setup expert mode avoids writing to /var/log/fai/variables
   # at least config_src is needed for autodiscover
+
+
+  # lld /var/log/fai/remote-logs:
+  # d 750  fai nogroup 100 08-07 08:51 pm /var/log/fai/remote-logs
+  # We could change the group or something, but why not just give me more permissions :)
+  e usermod -a -G nogroup iank
   $sed '/^FAI_CONFIGDIR|^FAI_CONFIG_SRC|^LOGUSER/d' /var/log/fai/variables
   tee -a /var/log/fai/variables <<'EOF'
 LOGUSER=fai
@@ -291,18 +307,27 @@ FAI_CONFIGDIR=/srv/fai/config
 FAI_CONFIG_SRC=nfs://faiserver/srv/fai/config
 EOF
   # make the faiserver also the apt proxy server
-  apt-get -y install apt-cacher-ng
+  apt-get -y install apt-cacher-ng
 fi
 
 rm -f /srv/fai/nfsroot/root/.ssh/known_hosts
 if [[ $HOSTNAME == kd ]]; then
   keyscan_arg="-p 8989"
-  fi
+fi
 key=$(ssh-keyscan $keyscan_arg localhost |& grep -o "ecdsa-sha2-nistp256.*")
 for ip in faiserver $(ip addr show up| grep -w '^ *inet' | awk '{print $2}'| cut -d / -f 1 | grep -vF 127.0.0.1); do
   echo "$ip $key" >>/srv/fai/nfsroot/root/.ssh/known_hosts
 done
 
+# make it the root because pxe-kexec only looks there.
+# It wouldn't be too hard to change if we needed.
+# We could also just dump things in /srv/tftp, but fai
+# has some defaults, which I don't even use, which expect
+# the other directory, so it's kind of a tossup, whatever.
+# This means fai's example isc-dhcp-server filename directory should remove the fai/ prefix.
+sed -ri 's,^ *(TFTP_DIRECTORY=).*,\1"/srv/tftp/fai",' /etc/default/tftpd-hpa
+systemctl restart tftpd-hpa
+
 
 # serial console
 # mainly from