{#
## 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 distro_tree is arch('s390', 's390x') and postreboot is undefined %}
%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 }}
{% endif %}
