more comprehensive local dns records
[automated-distro-installer] / faiserver-setup
index cf0da93e24d49b00eadba6e267ee7b1cce4c6d18..d8489eda2c0a1e31b8998ce6a9c41f25100ca7fd 100755 (executable)
@@ -21,18 +21,18 @@ x="$(readlink -f "$BASH_SOURCE")"; source "${x%/*}/bash-trace"
 
 usage() {
   cat <<EOF
-usage: ${0##*/} [-h|--help]
+usage: ${0##*/} [-h|--help] [BASE_CODENAME] [ARCH]
 install fai-server on the current machine
 
-Initial setup of a fai server on debian. works on localhost.
-Set's the current ip 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.
+Initial setup of a fai server. works on localhost.  Set's the current ip
+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.
 
-It expects $BASEFILE_DIR/STRETCH64.tar.gz to exist, and it
-must have been generated around the same time as the nfsroot,
-at least so it has the same kernel version.
+Default BASE_CODENAME is stretch. Default ARCH is 64. The script expects corresponding
+$BASEFILE_DIR/${UPCASED_BASE_CODENAME}${ARCH}.tar.(gz|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.
 
 EOF
   exit $1
@@ -42,16 +42,21 @@ case $1 in
 esac
 
 
-e() { echo "$@"; "$@"; }
+e() { echo "$@"; "$@"; }
 
-# the automatic basefile getting will be for stretch
-# instead of jessie, so if you install jessie, you need
-# to setup the basefile and it\'s corresponding class.
-base=stretch
+
+base=${1:-stretch}
+arch=${2:-64}
+basefile=($BASEFILE_DIR/${base^^}${arch^^}.tar.[gx]z)
 sed="sed -ri --follow-symlinks"
 
-if [[ ! -e $BASEFILE_DIR/STRETCH64.tar.gz ]]; then
-  printf "%s\n" "$0: error BASEFILE_DIR=$BASEFILE_DIR \$BASEFILE_DIR/STRETCH64.tar.gz does not exist"
+if [[ ! -e $basefile ]]; then
+  printf "%s\n" "$0: error basefile=$basefile  does not exist" >&2
+  exit 1
+fi
+
+if [[ ! -d $BASEFILE_DIR ]]; then
+  printf "%s\n" "$0: error BASEFILE_DIR=$BASEFILE_DIR  does not exist" >&2
   exit 1
 fi
 
@@ -64,42 +69,28 @@ armhf() {
   [[ $(dpkg --print-architecture) == armhf ]]
 }
 
-if armhf; then
-  if apt-cache policy | grep o=Debian,a=testing,n=stretch &>/dev/null; then
-    cat >/etc/apt/sources.list.d/testing.list <<'EOF'
-deb http://http.us.debian.org/debian testing main contrib non-free
-deb-src http://http.us.debian.org/debian testing main contrib non-free
-
-deb http://security.debian.org/ testing/updates main contrib non-free
-deb-src http://security.debian.org/ testing/updates main contrib non-free
-
-deb http://http.us.debian.org/debian testing-updates main contrib non-free
-deb-src http://http.us.debian.org/debian testing-updates main contrib non-free
-EOF
-
-    cat >/etc/apt/preferences.d/fai <<'EOF'
-Package: fai-server fai-client fai-doc
-Pin: release a=testing
-Pin-Priority: 500
-
-Package: *
-Pin: release a=testing
-Pin-Priority: -10
-EOF
-  fi
-elif grep -xFq 'VERSION="8 (jessie)"' /etc/os-release; then
+if grep -xFq 'VERSION="8 (jessie)"' /etc/os-release; then
   gpg -a --recv-keys 2BF8D9FE074BCDE4; gpg -a --export 2BF8D9FE074BCDE4 | apt-key add -
   cat >/etc/apt/sources.list.d/fai.list <<'EOF'
 deb https://fai-project.org/download jessie koeln
 EOF
-elif grep -xFq 'VERSION="9 (stretch)"' /etc/os-release || grep -iE 'flidas|xenail' /etc/os-release ; then
+elif grep -iE 'VERSION=.*(stretch|flidas|xenail)' /etc/os-release; then
   # fai on ubuntu only has official support using the universe repo, but newer
   # tends to have less bugs.
   gpg --keyserver hkp://pool.sks-keyservers.net -a --recv-keys 2BF8D9FE074BCDE4; gpg -a --export 2BF8D9FE074BCDE4 | apt-key add -
 
-  cat >/etc/apt/sources.list.d/fai.list <<'EOF'
+  case $base in
+    stretch)
+      cat >/etc/apt/sources.list.d/fai.list <<'EOF'
 deb https://fai-project.org/download stretch koeln
 EOF
+      ;;
+    buster)
+      cat >/etc/apt/sources.list.d/fai.list <<'EOF'
+deb https://fai-project.org/download buster koeln
+EOF
+      ;;
+  esac
 else
   rm -f /etc/apt/sources.list.d/fai.list
 fi
@@ -120,10 +111,10 @@ else
 fi
 
 
-apt-get install -y ${pkgs[@]}
+apt-get install -y ${pkgs[@]}
 # confnew since we edit /etc/fai/NFSROOT in an automated way
 # fai-client is already a fai-server dependency, but make sure it gets upgraded
-apt-get install --no-install-recommends -y -o Dpkg::Options::="--force-confnew" fai-server fai-client
+apt-get install --no-install-recommends -y -o Dpkg::Options::="--force-confnew" fai-server fai-client
 
 r=http://http.us.debian.org/debian
 # like default, but scrap httpredir, and nonfree.
@@ -136,7 +127,7 @@ EOF
 
 
 case $base in
-  jessie|stretch)
+  jessie|stretch|buster)
     cat >>/etc/fai/apt/sources.list <<EOF
 # use fai repo. it's commented in the defaults. it's got bug fixes.
 # and may contain newer packages.
@@ -159,8 +150,6 @@ EOF
 fi
 
 
-# tried out a stretch base, doesn't work yet.
-#
 $sed -f - /etc/fai/nfsroot.conf <<EOF
 $ a FAI_ROOTPW='$(</q/root/shadow/standard)'
 /^\s*FAI_ROOTPW/d
@@ -175,8 +164,11 @@ s,^( *FAI_DEBOOTSTRAP=).*,\1"$base $r",
 EOF
 
 $sed 's/#LOGUSER/LOGUSER/' /etc/fai/fai.conf
+$sed -i '/^LOGUSER=/d' /etc/fai/fai.conf
 $sed -i '/^FAI_FLAGS=/d' /etc/fai/fai.conf
 echo "FAI_FLAGS=verbose" >>/etc/fai/fai.conf
+# note if this isnt set, the user isnt created
+echo "LOGUSER=fai" >>/etc/fai/fai.conf
 
 # from man fai-make-nfsroot,
 # figured out after partitioning ignored my crypt partition
@@ -192,8 +184,8 @@ fi
 
 if armhf; then
   cd /srv/fai
-  rm -rf nfsroot
-  tar Jxf $BASEFILE_DIR/STRETCH64.tar.xz
+  rm -rf nfsroot
+  e tar Jxf $basefile
   # background: Can't build the nfsroot on my arm system now.  First,
   # fai-make-nfsroot won't work out of the box. One idea to make it work
   # is by installing qemu-user-static, then copying qemu-x86_64-static
@@ -216,7 +208,7 @@ if armhf; then
     if [ -f $NFSROOT/usr/lib/PXELINUX/pxelinux.0 ]; then
       pxebin=$NFSROOT/usr/lib/PXELINUX/pxelinux.0
     else
-      # jessie/stretch path
+      # jessie+ path
       pxebin=$NFSROOT/usr/lib/syslinux/pxelinux.0
     fi
 
@@ -239,17 +231,17 @@ if armhf; then
 type setup_tftp
 EOF
                               )
-  setup_tftp
+  setup_tftp
 
   # -g causes skipping set_root_pw() in fai-make-nfsroot, -ag
   # is the only way to make it run without chrooting. the options
   # seem contradictory, but it works.
-  fai-setup -evag
+  fai-setup -evag
 
 else # not armhf
   # note, this copies the -B arg to
   # /srv/fai/nfsroot/var/tmp/base.tar.xz
-  e fai-setup -evf -B $BASEFILE_DIR/STRETCH64.tar.gz
+  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
   $sed '/^FAI_CONFIGDIR|^FAI_CONFIG_SRC|^LOGUSER/d' /var/log/fai/variables