## RHEL zVM installs do not properly reboot into the installed system.  This
## issue has been resolved in RHEL-5 Update3.  To get a consistent reboot
## behavior for s390* installs on all distros, this snippet can be used.  The
## snippet will attempt to discover the IPL volume zipl is being installed
## to and will attempt a reipl.  Be sure to set this snippet as the *last*
## snippet your kickstart template.

#if $arch.startswith("s390"):
%post --nochroot

# Does the kickstart file request a reboot?
grep -q "^reboot" /tmp/ks.cfg /ks.cfg 2>/dev/null
if [ \$? -ne 0 ]; then
    exit 0
fi

# find out the location of /boot and use it to re-ipl
boot_dev=""
for mountpt in /mnt/sysimage/boot /mnt/sysimage;
do
  set -- \$(grep " \$mountpt " /proc/mounts)
  if [ -b "\$1" ]; then
    boot_dev=\$1
    break
  fi
done

# lookup dasd disk
if [[ \$boot_dev == *dasd* ]]; then
   # remove the '/dev/' (aka basename)
   boot_dev=\${boot_dev\#\#/[^/]*/}
   # strip partition number from dasd device
   boot_dev=\${boot_dev%%[0-9]}
   type="ccw"
   id=`basename \$(readlink /sys/block/\$boot_dev/device)`

   # HACK - In RHEL4 and RHEL3 ... we do it the hard way
   grep -q "^[34]\$" /.buildstamp 2>/dev/null
   if [ \$? -eq 0 ]; then
      cat <<EOF> /mnt/sysimage/tmp/zeboot.sh
\#!/bin/bash
/sbin/modprobe -r vmcp
rm -f "/dev/vmcp"
sleep 2
[ -b "/dev/vmcp" ] || /bin/mknod /dev/vmcp c 10 61
/sbin/modprobe -a vmcp
sync
# Force a boot (e.g. IPL 0100)
/sbin/vmcp ipl \${id\#\#*.}
EOF
      /bin/chmod +x /mnt/sysimage/tmp/zeboot.sh
      /bin/chroot /mnt/sysimage /tmp/zeboot.sh
   # In RHEL5 ... lets cleanly shutdown (Update 3 and newer)
   else
      echo \$type > /sys/firmware/reipl/reipl_type
      echo \$id > /sys/firmware/reipl/\$type/device

      # Force a reboot
      pid=\$(cat /var/run/init.pid)
      [ -z "\$pid" ] && pid=\$(pidof init)
      kill -12 \$pid
      pid=\$(cat /var/run/loader.run)
      [ -z "\$pid" ] && pid=\$(pidof loader)
      kill \$pid
   fi
fi
#end if