Merge branch 'upstream', fai 5.4
authorIan Kelling <iank@fsf.org>
Sun, 8 Oct 2017 17:16:17 +0000 (10:16 -0700)
committerIan Kelling <iank@fsf.org>
Sun, 8 Oct 2017 17:16:17 +0000 (10:16 -0700)
1  2 
fai/config/basefiles/mk-basefile
fai/config/class/DEBIAN.var
fai/config/package_config/DEBIAN
fai/config/package_config/FAIBASE
fai/config/scripts/DEBIAN/40-misc
fai/config/scripts/GRUB_PC/10-setup
fai/config/scripts/LAST/50-misc

index d9823cf6c366af338d6bd314d77b933885fc9546,b93831ca3493a506c1040149a1b32e2dfd1b2a29..b688a865e985d5a18186c8c7200f1782859957e0
@@@ -4,6 -4,9 +4,9 @@@
  #
  # Thomas Lange, Uni Koeln, 2011-2017
  # based on the Makefile implementation of Michael Goetze
+ #
+ # Usage example: mk-basefile -J STRETCH64
+ # This will create a STRETCH64.tar.xz basefile.
  
  # Supported distributions (each i386/amd64):
  # Debian GNU/Linux
  
  # Define your local mirros here
  # For the first stage, set the CentOS/SLC mirror in /etc/rinse/rinse.conf
- MIRROR_DEBIAN=http://http.us.debian.org/debian
+ MIRROR_DEBIAN=http://deb.debian.org/debian/
  MIRROR_UBUNTU=http://mirror.netcologne.de/ubuntu/
 +MIRROR_TRISQUEL=http://mirror.fsf.org/trisquel/
  MIRROR_CENTOS=http://mirror.netcologne.de/
  
  EXCLUDE_SQUEEZE=isc-dhcp-client,isc-dhcp-common,info,tasksel,tasksel-data
  EXCLUDE_WHEEZY=info,tasksel,tasksel-data
- EXCLUDE_JESSIE=tasksel,tasksel-data
- EXCLUDE_STRETCH=tasksel,tasksel-data
+ EXCLUDE_JESSIE=info,tasksel,tasksel-data
+ EXCLUDE_STRETCH=info,tasksel,tasksel-data
+ EXCLUDE_BUSTER=tasksel,tasksel-data
 +EXCLUDE_BELENOS=dhcp3-client,dhcp3-common,info
  EXCLUDE_TRUSTY=dhcp3-client,dhcp3-common,info
- EXCLUDE_FLIDAS=tasksel,tasksel-data
- EXCLUDE_XENIAL=tasksel,tasksel-data
++EXCLUDE_FLIDAS=udhcpc,dibbler-client,info,tasksel,tasksel-data
+ EXCLUDE_XENIAL=udhcpc,dibbler-client,info,tasksel,tasksel-data
  
+ # we need aptitude in the base file, since users may want to use it for installing packages
  INCLUDE_DEBIAN=aptitude
  
  
@@@ -68,6 -71,7 +74,7 @@@ check() 
  
  mkpost-centos() {
  
+     # set local mirror for rinse post script
      [ -z "$MIRROR_CENTOS" ] && return
      cat <<EOM > $xtmp/post
  #! /bin/sh
@@@ -81,6 -85,7 +88,7 @@@ EO
  
  mkpost-slc() {
  
+     # set local mirror for rinse post script
      ver=$1
      [ -z "$MIRROR_SLC" ] && return
      cat <<EOM > $xtmp/post
@@@ -97,10 -102,11 +105,11 @@@ EO
  
  cleanup-deb() {
  
-     chroot $xtmp aptitude clean
-     rm -f $xtmp/etc/hostname $xtmp/etc/resolv.conf $xtmp/etc/machine-id
-     rm $xtmp/var/lib/apt/lists/*_*
-     rm -f $xtmp/etc/udev/rules.d/70-persistent-net.rules
+     chroot $xtmp apt-get clean
+     rm -f $xtmp/etc/hostname $xtmp/etc/resolv.conf \
+           $xtmp/var/lib/apt/lists/*_* $xtmp/usr/bin/qemu-*-static \
+           $xtmp/etc/udev/rules.d/70-persistent-net.rules
+     > $xtmp/etc/machine-id
  }
  
  
@@@ -161,19 -167,25 +170,25 @@@ debgeneric() 
      local DIST=$1
      shift
      local mirror=$1
+     shift
+     local arch=$1
  
-     if [[ $DIST =~ 64 ]]; then
-         arch=amd64
-     else
-         arch=i386
-     fi
-     DIST=${DIST%%??}
-     dist=${DIST,,}
+     dist=${DIST%%[0-9][0-9]}
+     local exc="EXCLUDE_$dist"
+     dist=${dist,,}
  
-     local exc="EXCLUDE_$DIST"
      check
-     debootstrap --arch $arch --exclude=${!exc} --include=${INCLUDE_DEBIAN} $dist $xtmp $mirror
+     if [ -n "$arch" ]; then
+       qemu-debootstrap --arch $arch --exclude=${!exc} --include=${INCLUDE_DEBIAN} $dist $xtmp $mirror
+       target="${target}_${arch^^}"
+     else
+       if [[ $DIST =~ 64 ]]; then
+             arch=amd64
+       else
+             arch=i386
+       fi
+       debootstrap --arch $arch --exclude=${!exc} --include=${INCLUDE_DEBIAN} $dist $xtmp $mirror
+     fi
      cleanup-deb
      tarit
  }
@@@ -194,6 -206,7 +209,7 @@@ prtdists() 
      WHEEZY32     WHEEZY64
      JESSIE32     JESSIE64
      STRETCH32    STRETCH64
+     BUSTER32     BUSTER64
  "
  }
  
@@@ -202,12 -215,13 +218,13 @@@ usage() 
      cat <<EOF
  mk-basefile, create minimal base files for a Linux distritubtion
  
-    Copyright (C) 2011-2016 by Thomas Lange
+    Copyright (C) 2011-2017 by Thomas Lange
  
  Usage: mk-basefile [OPTION] ... DISTRIBUTION
  
     -s                   Show list of supported linux distributions
     -a                   Add xtattrs, acl and selinux properties to the tar file.
+    -f ARCH              Build for foreign architecture ARCH.
     -d DIR               Use DIR for creating the temporary subtree structure.
     -z                   Use gzip for compressing the tar file.
     -J                   Use xz for compressing the tar file.
@@@ -228,10 -242,11 +245,11 @@@ zip=ca
  attributes=
  cleanup=1
  
- while getopts ashzJd:k opt ; do
+ while getopts ashzJd:kf: opt ; do
      case "$opt" in
          a) attributes="--xattrs --selinux --acl" ;;
          d) export TMPDIR=$OPTARG ;;
+         f) export ARCH=$OPTARG ;;
          z) zip="gzip -9"; ext=tar.gz ;;
          J) zip="xz -8" ext=tar.xz ;;
          k) cleanup=0 ;;
@@@ -251,6 -266,7 +269,7 @@@ chmod 755 $xtm
  
  target=$1 # also the name of the output file
  
+ [ -z "$target" ] && usage
  case "$target" in
      CENTOS5_32) centos i386 5 ;;
      CENTOS5_64) centos amd64 5 ;;
      SLC6_32) slc i386 6 ;;
      SLC6_64) slc amd64 6 ;;
      SLC7_64) slc amd64 7 ;;
 +    BELENOS*|FLIDAS*)
 +        debgeneric $target $MIRROR_TRISQUEL ;;
      TRUSTY*|XENIAL*)
          debgeneric $target $MIRROR_UBUNTU ;;
-     SQUEEZE*|WHEEZY*|JESSIE*|STRETCH*)
-         debgeneric $target $MIRROR_DEBIAN ;;
+     SQUEEZE*|WHEEZY*|JESSIE*|STRETCH*|BUSTER*)
+         debgeneric $target $MIRROR_DEBIAN $ARCH;;
      *) echo "Unknown distribution. Aborting."
         prtdists
         exit 99 ;;
index ae445fa2a75b42f8bed125ddb7ea9cfdbad9f6bb,8f00bb917517969e35dcfc9dfdf28a0ea3d5155b..3823152c8a9901cc267790c8ef02c48873b90edb
@@@ -1,4 -1,3 +1,4 @@@
 +#### from upstream example config, except where noted
  CONSOLEFONT=
  KEYMAP=us-latin1
  
@@@ -10,9 -9,9 +10,11 @@@ MODULESLIST="usbhid psmouse
  
  # if you have enough RAM (>2GB) you may want to enable this line. It
  # also puts /var/cache into a ramdisk.
 -#FAI_RAMDISKS="$target/var/lib/dpkg $target/var/cache"
 +# ian: uncommented
 +FAI_RAMDISKS="$target/var/lib/dpkg $target/var/cache"
  
  # if you want to use the faiserver as APT proxy
 -#APTPROXY=http://faiserver:3142
 +# ian: uncommented
 +APTPROXY=http://faiserver:3142
+ apt_cdn=http://deb.debian.org
index d3dc95e4052119ce48cb22d3da9aaeb405d7e559,d8be34dd5a5aa5b64cba25c42979a1e03bac682b..9d13c310b49a5a043784f565a439047d39fa7eed
@@@ -1,3 -1,8 +1,8 @@@
+ PACKAGES install
+ # you may want these non-free kernel drivers
+ #firmware-bnx2 firmware-bnx2x firmware-realtek
+ #firmware-linux
  PACKAGES install I386
  linux-image-686-pae initramfs-tools
  memtest86+
@@@ -10,19 -15,22 +15,24 @@@ PACKAGES install AMD6
  linux-image-amd64 initramfs-tools
  memtest86+
  
+ PACKAGES install ARM64
+ grub-efi-arm64
+ linux-image-arm64
  PACKAGES install DHCPC
  isc-dhcp-client
  
 +# ian: note everything after the grub package should be refactored into
 +# a new class.
  PACKAGES install GRUB_PC
 -grub-pc
 +grub-pc cryptsetup btrfs-tools sudo bridge-utils netcat-openbsd
  
  PACKAGES install GRUB_EFI
 -grub-efi
 +grub-efi cryptsetup btrfs-tools sudo bridge-utils netcat-openbsd
  
  PACKAGES install LVM
  lvm2
  
  PACKAGES install CLOUD
  locales-all
+ unattended-upgrades
index 98881756fb4c28d246cdd06fb77e948629f75266,5b1f9b8a8ba251c59e86d478aff3c06f2c7590d7..f2d0b29152c80236700deca40d65c987bb62d3fa
@@@ -1,4 -1,5 +1,5 @@@
 -PACKAGES install-norec DEBIAN
 +PACKAGES install-norec DEBIAN UBUNTU
+ apt-transport-https
  fai-client
  debconf-utils
  file
@@@ -14,3 -15,4 +15,4 @@@ ejec
  locales
  console-setup kbd
  pciutils usbutils
+ unattended-upgrades
index 8d4e85d7f6f5f3456d53e43396ee49cc6f33927c,78773f35458e6f79ed797d1522600efdece768fb..e160cbb06176200ab54f4723db70b9425bb3df67
@@@ -3,22 -3,6 +3,22 @@@
  # (c) Thomas Lange, 2001-2016, lange@debian.org
  # (c) Michael Goetze, 2010-2011, mgoetze@mgoetze.net
  
 +
 +# on ubuntu 16.04 which didn't run this script, some things which didn't
 +# apply:
 +# /etc/dpkg/dpkg.cfg.d/fai didn't exist,
 +# machine-id was already setup.
 +
 +# on that system and a debian stretch system, after reboot,
 +# some things done here don't seem to persist:
 +# some thin/etc/mtab is symlink somewhere else,
 +# and mailname is $HOSTNAME.lan
 +
 +# the adjtime thing is to support changing the system clock
 +# from representing UTC (the default) to localtime (windows default).
 +
 +# afaik, the only useful thing here for me is setting /etc/hostname
 +
  error=0; trap 'error=$(($?>$error?$?:$error))' ERR # save maximum error code
  
  # a list of modules which are loaded at boot time
@@@ -44,7 -28,12 +44,12 @@@ elif [ -f $target/lib/systemd/system/ge
      sed -i -e 's#sbin/agetty --noclear#sbin/agetty -f /etc/issue.linuxlogo --noclear#' $target/lib/systemd/system/getty@.service
  fi
  
- if [ ! -f $target/etc/machine-id -a -f $target/bin/systemd-machine-id-setup ]; then
+ # make sure a machine-id exists
+ if [ ! -f $target/etc/machine-id ]; then
+     > $target/etc/machine-id
+ fi
+ # recreate machine-id if the file is empty
+ if [ X"$(stat -c '%s' $target/etc/machine-id 2>/dev/null)"  = X0 -a -f /bin/systemd-machine-id-setup ]; then
      $ROOTCMD systemd-machine-id-setup
  fi
  
index 160dfa2e35fd05333a5b98a895b90e826818aa72,c19d4fa0438cf5b8633afabb4961c62486bc5dba..47b3ba49195db9c0978482e5e6350f5e71368ffb
@@@ -25,12 -25,11 +25,12 @@@ if [ $FAI_ACTION != "install" ]; the
      exit $error
  fi
  
- $ROOTCMD grub-mkdevicemap --no-floppy
+ GROOT=$($ROOTCMD grub-probe -tdrive -d $BOOT_DEVICE)
  
  
  # Check if RAID is used for the boot device
  if [[ $BOOT_DEVICE =~ '/dev/md' ]]; then
 +    GROOT=$($ROOTCMD grub-probe -tdrive -d $BOOT_DEVICE)
      raiddev=${BOOT_DEVICE#/dev/}
      # install grub on all members of RAID
      for device in `LC_ALL=C perl -ne 'if(/^'$raiddev'\s.+raid\d+\s(.+)/){ $_=$1; s/\d+\[\d+\]//g; print }' /proc/mdstat`; do
      done
  
  elif [[ $GROOT =~ 'hostdisk' ]]; then
-     cat > $target/boot/grub/device.map <<EOF
- (hd0)   $BOOT_DEVICE
- EOF
      $ROOTCMD grub-install --no-floppy --modules=part_msdos $BOOT_DEVICE
      if [ $? -eq 0 ]; then
          echo "Grub installed on hostdisk $BOOT_DEVICE"
      fi
-     rm $target/boot/grub/device.map
  
  else
 -    $ROOTCMD grub-install --no-floppy "$GROOT"
 -    if [ $? -eq 0 ]; then
 -        echo "Grub installed on $BOOT_DEVICE = $GROOT"
 -    fi
 +    for dev in $BOOT_DEVICE; do
 +        GROOT=$($ROOTCMD grub-probe -tdrive -d $dev)
 +        $ROOTCMD grub-install --no-floppy "$GROOT"
 +        if [ $? -eq 0 ]; then
 +            echo "Grub installed on $dev = $GROOT"
 +        fi
 +    done
  fi
  $ROOTCMD update-grub
  
index 4627697ecea58fc7b859c6a6abf2037e39eaaa0f,8ae015c082ee24a5ded245b23a24958e6e82de39..459b4de92aef13687a67174cbe2e927dda5a8fca
@@@ -45,14 -45,16 +45,17 @@@ if [ $do_init_tasks -eq 1 ] ; the
  fi
  
  # Make sure everything is configured properly
 -if ifclass DEBIAN ; then
 +if ifclass DEBIAN || ifclass UBUNTU; then
 +        echo "Running \"apt-get -f install\" for the last time."
          $ROOTCMD apt-get -f install
  fi
  
  if [ $FAI_ACTION = "install" ]; then
      lskernels=$(echo $target/boot/vmlinu*)
-     [ -f ${lskernels%% *} ] || echo "ERROR: No kernel was installed. Have a look at shell.log" >&2
+     if [ ! -f ${lskernels%% *} ]; then
+       echo "ERROR: No kernel was installed. Have a look at shell.log" >&2
+       error=1
+     fi
  fi
  
  # copy sources.list
@@@ -77,17 -79,21 +80,21 @@@ setrel() 
            break
        fi
      done
-     echo "\$release set to $release"
  }
  
  # if installation was done from CD, replace useless sources.list
  setrel
  if [ -f $target/etc/apt/sources.list -a -n "$release" ]; then
      grep -q 'file generated by fai-cd' $target/etc/apt/sources.list && cat <<EOF > $target/etc/apt/sources.list
- deb http://httpredir.debian.org/debian $release main contrib non-free
- deb http://httpredir.debian.org/debian-security $release/updates main contrib non-free
+ deb $apt_cdn/debian $release main contrib non-free
+ deb $apt_cdn/debian-security $release/updates main contrib non-free
  deb [trusted=yes] http://fai-project.org/download $release koeln
  EOF
  fi
  
+ # for ARM architecture, we may need the kernel and initrd to boot or flash the device
+ if ifclass ARM64; then
+     cp -pv $target/boot/vmlinuz* $target/boot/initrd* $LOGDIR
+ fi
  exit $error