manual merge of the distrib/ part from a prerelease of 0.30.215
[util-vserver.git] / distrib / redhat / initpost
index f281656..5337fe0 100755 (executable)
@@ -19,6 +19,7 @@
 
 vdir=$1/vdir
 . "$2"
+. "$_LIB_VSERVER_BUILD_FUNCTIONS"
 
 function relink
 {
@@ -40,6 +41,12 @@ function subst
     rm -f $tmp
 }
 
+vserver=$1
+
+## Do some magic to set the vserver into a defined state
+$_VSERVER "$vserver" stop  &>/dev/null || :
+startSleepingGuest "$vserver" 15
+
 pushd "$vdir"/etc/init.d &>/dev/null ||
     pushd "$vdir"/etc/rc.d/init.d &>/dev/null || exit 1
 
@@ -47,14 +54,13 @@ pushd "$vdir"/etc/init.d &>/dev/null ||
        test -e "$i" || continue
        case "$i" in
            functions|halt|killall|single) ;;
-           syslog) ;;
+           syslog|rsyslog) ;;
            *)
-               $_VSERVER ----insecure "$1" chkconfig "$i" off
+               $_VSERVER "$1" chkconfig "$i" off
                ;;
        esac
     done
 
-    relink /bin/true halt
 popd >/dev/null
 
 pushd "$vdir"/sbin &>/dev/null
@@ -70,11 +76,19 @@ pushd "$vdir" &>/dev/null
 popd >/dev/null
 
 pushd "$vdir" &>/dev/null
+    cat <<EOF | $_CHROOT_SH truncate /etc/init.d/halt
+#! /bin/bash
+
+exec /sbin/killall5 -15
+EOF
+    $_CHROOT_SH chmod 0755 /etc/init.d/halt
+    
     : | $_CHROOT_SH truncate /etc/sysctl.conf
     echo "none    /       none    defaults" | $_CHROOT_SH truncate /etc/fstab
     cat "$__DISTRIBDIR"/redhat/rc.sysinit   | $_CHROOT_SH truncate /etc/rc.d/rc.sysinit.vserver
-    # TODO: remove race/symlink-attack
-    chmod +x etc/rc.d/rc.sysinit.vserver
+    $_CHROOT_SH chmod 0755 /etc/rc.d/rc.sysinit.vserver
     subst etc/inittab 's!^\([^#].*:respawn:.* tty\)!#\1!;
                       s!si::sysinit:/etc/rc.d/rc.sysinit!si::sysinit:/etc/rc.d/rc.sysinit.vserver!'
 popd >/dev/null
+
+stopSleepingGuest "$vserver" &> /dev/null || :