summaryrefslogtreecommitdiffstats
path: root/snippets
diff options
context:
space:
mode:
authorJames Laska <jlaska@redhat.com>2009-03-03 08:26:37 -0500
committerJames Laska <jlaska@redhat.com>2009-03-03 11:42:26 -0500
commitb98be6d298072d1827990bb4fd1e57cbfa8aae46 (patch)
tree5bb6d9e4b68cc3a426329e3c63acf50200af7930 /snippets
parent0921e9b42306c00a547bb0932a0e5d9c0166fd17 (diff)
downloadcobbler-b98be6d298072d1827990bb4fd1e57cbfa8aae46.tar.gz
cobbler-b98be6d298072d1827990bb4fd1e57cbfa8aae46.tar.xz
cobbler-b98be6d298072d1827990bb4fd1e57cbfa8aae46.zip
Update s390 reboot snippet. Now produces a consistent reboot experience on RHEL4 and RHEL5 zVM guests installs.
Diffstat (limited to 'snippets')
-rw-r--r--snippets/post_s390_reboot71
1 files changed, 64 insertions, 7 deletions
diff --git a/snippets/post_s390_reboot b/snippets/post_s390_reboot
index 2534cd76..aa38e40f 100644
--- a/snippets/post_s390_reboot
+++ b/snippets/post_s390_reboot
@@ -1,10 +1,67 @@
-## HACK to allow RHEL4 and previous s390 installs to reboot
+## 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
-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
+
+# 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