Systemd support, providing backwards compatibility via FILE_RC class [Closes: issue1015]
[grml-live.git] / etc / grml / fai / config / scripts / GRMLBASE / 15-initsetup
index e4b28f0..f94cd3f 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Filename:      /etc/grml/fai/config/scripts/GRMLBASE/15-initsetup
+# Filename:      ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/15-initsetup
 # Purpose:       configure init system for the live-system
 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 
 set -u
 set -e
+. "$GRML_LIVE_CONFIG"
 
-GRML_NAME="${GRML_NAME:-grml}"
+systemd_setup() {
+  fcopy -i -B -v -r /etc/systemd
 
-if ! [ -r $target/etc/runlevel.conf ] ; then
-   echo 'Warning: /etc/runlevel.conf does not exist...'
-   echo '... assuming we do not have file-rc, skipping 15-initsetup'
-   exit 0
-fi
+  echo "Enabling user '$USERNAME' for autologin"
+  sed -i "s/\$USERNAME/$USERNAME/" "$target"/etc/systemd/system/getty@tty*.service.d/override.conf
 
-# keep a backup of the original runlevel.conf file for reference
-# but only save it as /etc/runlevel.conf.original if it's not the
-# according live system version, this should prevent from overriding
-# /etc/runlevel.conf.original if re-running grml-live with -b option.
-if ! cmp $target/etc/runlevel.conf $target/etc/runlevel.conf.livecd 1>/dev/null || \
-   ! cmp $target/etc/runlevel.conf $target/etc/runlevel.conf.livecd.small 1>/dev/null ; then
-
-   # make sure to store old backup files if they differ as well
-   if [ -r $target/etc/runlevel.conf.original ] ; then
-      if ! cmp $target/etc/runlevel.conf $target/etc/runlevel.conf.original 1>/dev/null ; then
-         cp $target/etc/runlevel.conf.original $target/etc/runlevel.conf.original."$(date +%Y%m%d_%k:%M:%S)"
-      fi
-   fi
-
-   cp $target/etc/runlevel.conf $target/etc/runlevel.conf.original
-fi
+  # enable TTY logins
+  local service
+  for file in "${target}"/etc/systemd/system/getty@tty*.service.d ; do
+    service=$(basename "$file" .d)
+    $ROOTCMD systemctl enable "$service" || echo "failed to enable $service"
+  done
+  unset service
+
+  # FIXME - ssh-keygen isn't executed yet before ssh-bootoption + ssh services
+  $ROOTCMD systemctl enable ssh-bootoption.service || echo "failed to enable ssh-bootoption.service"
+  $ROOTCMD systemctl enable ssh-keygen.service     || echo "failed to enable ssh-keygen.service"
+
+  # fails on overlayfs with
+  # "Failed to unmount transient /etc/machine-id file in our private namespace: Invalid argument"
+  $ROOTCMD systemctl mask systemd-machine-id-commit.service || echo "failed to mask $systemd-machine-id-commit.service"
+
+  # disable unwanted services
+  local service
+  for service in \
+    cron.service \
+    lvm2-lvmetad.service \
+    lvm2-lvmetad.socket \
+    lvm2-lvmpolld.socket \
+    lvm2-monitor.service \
+    mdadm-raid.service \
+    smartd.service \
+    ssh.service \
+    swap.target \
+    systemd-timesyncd.service \
+    uuidd.service
+  do
+    $ROOTCMD systemctl disable ${service} || echo "failed to disable $service"
+  done
+  unset service
+
+  # TODO ->
+
+  # * *proper* integration for grml-autoconfig
+      $ROOTCMD systemctl enable grml-autoconfig.service || echo "failed to enable grml-autoconfig.service"
+      ln -sf /etc/systemd/system/grml-autoconfig.service "${target}"/etc/systemd/system/multi-user.target.wants/grml-autoconfig.service
+
+  # * avoid startup of any LSB scripts; NOTE: jessie doesn't support that
+  #   system-generators approach yet, only >=stretch
+      mkdir -p "${target}"/etc/systemd/system-generators/
+      ln -sf /dev/null "${target}"/etc/systemd/system-generators/systemd-sysv-generator
+  #   -> revert /etc/systemd/system-generators/systemd-sysv-generator && systemctl daemon-reload during *bootup*
+  #      + possibly move this into startup so it's always executed on bootup, even with persistency enabled
+  #      where the change towards systemd-sysv-generator might persist across
+  #      reboots -> LSB scripts executed on reboots
+}
+
+file_rc_setup() {
+  if ! [ -r "${target}"/etc/runlevel.conf ] ; then
+     echo 'Warning: /etc/runlevel.conf does not exist...'
+     echo '... assuming we do not have file-rc, skipping 15-initsetup'
+     exit 0
+  fi
+
+  # keep a backup of the original runlevel.conf file for reference
+  if [ -r "${target}"/etc/runlevel.conf.original ] ; then
+    # make sure to store old backup files if they differ as well
+    if ! cmp "${target}"/etc/runlevel.conf "${target}"/etc/runlevel.conf.original >/dev/null ; then
+      cp "${target}"/etc/runlevel.conf.original "${target}/etc/runlevel.conf.original.$(date +%Y%m%d_%k:%M:%S)"
+    fi
+  fi
+
+  cp "${target}"/etc/runlevel.conf "${target}"/etc/runlevel.conf.original
+
+  # provide Grml's default file-rc configuration
+  fcopy -v /etc/runlevel.conf
+
+  # provide Grml's inittab configuration
+  fcopy -v /etc/inittab
+  sed -i "s/\$USERNAME\$/${USERNAME}/" "${target}"/etc/inittab
+
+  # provide Grml's bootlocal init scripts
+  fcopy -v -mroot,root,0755 /etc/init.d/bootlocal.first
+  fcopy -v -mroot,root,0755 /etc/init.d/bootlocal.middle
+  fcopy -v -mroot,root,0755 /etc/init.d/bootlocal.last
+}
 
-# if we have a small ISO let's adjust runlevel.conf:
-if [ -n "$GRML_NAME" ] ; then
-   if echo "$GRML_NAME" | grep -q small ; then
-      cp $target/etc/runlevel.conf.livecd.small $target/etc/runlevel.conf
-   else
-      cp $target/etc/runlevel.conf.livecd $target/etc/runlevel.conf
-   fi
+if ifclass FILE_RC ; then
+  file_rc_setup
+else
+  systemd_setup
 fi
 
 ## END OF FILE #################################################################
-# vim:ft=sh expandtab ai tw=80 tabstop=4 shiftwidth=3
+# vim:ft=sh expandtab ai tw=80 tabstop=4 shiftwidth=2