- removed '#! /bin/bash' header
[util-vserver.git] / util-vserver / scripts / vserver.functions
index e5763c9..925b34f 100644 (file)
@@ -1,4 +1,4 @@
-#! /bin/bash
+# $Id$  --*- sh -*--
 
 # Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
 #  
@@ -24,6 +24,7 @@ declare -a CHBIND_OPTS=()
 declare -a CAP_OPTS=()
 declare -a CHCONTEXT_INIT_OPTS=()
 declare -a CHCONTEXT_FLAG_OPTS=()
+declare -a CHCONTEXT_DISCONNECT=()
 declare -a CHCONTEXT_OPTS=()
 declare -a CAPCHROOT_OPTS=()
 declare -a INTERFACES=()
@@ -33,6 +34,8 @@ declare -a INITCMD_START_SYNC=()
 declare -a INITCMD_STOP=()
 declare -a INITCMD_STOP_SYNC=()
 declare -a INITCMD_PREPARE=()
+declare -a INITKILL_SEQ=()
+declare -a ENTER_SHELL=()
 
 INTERFACE_CMDS_IDX=0
 
@@ -119,13 +122,31 @@ function _generateCapabilityOptions
     done <"$vdir"/capabilities
 }
 
+function getEnterShell
+{
+    local vdir=$1
+
+    ENTER_SHELL=()
+    
+    _getFileValue ENTER_SHELL   "$vdir"/shell
+    
+    test "$ENTER_SHELL" || {
+       local i
+       for i in "/bin/bash -login" "/bin/sh -l" /bin/csh; do
+           set -- $i
+           test -x "$vdir/vdir/$1" || continue
+           ENTER_SHELL=( "$@" )
+           break
+       done
+    }
+}
 
 function _generateInitOptions
 {
     local vdir=$1
     local cfgdir=$vdir/apps/init
-    local runlevel_start=3
-    local runlevel_stop=6
+    local runlevel_start
+    local runlevel_stop
     local i f
 
     INITCMD_START=()
@@ -133,16 +154,22 @@ function _generateInitOptions
     INITCMD_START_SYNC=()
     INITCMD_STOP_SYNC=()
     INITCMD_PREPARE=()
-    
+
+    INITKILL_SEQ=( 15 5 9 )
     CHCONTEXT_INIT_OPTS=()
-    
+
+
     _getFileValue INITSTYLE      "$cfgdir"/style
     _getFileValue runlevel_start "$cfgdir"/runlevel
     _getFileValue runlevel_start "$cfgdir"/runlevel.start
     _getFileValue runlevel_stop  "$cfgdir"/runlevel.stop
+    _getFileArray INITKILL_SEQ  "$cfgdir"/killseq
 
     case x"$INITSTYLE" in
        xsysv)
+           test "$runlevel_start" || runlevel_start=3
+           test "$runlevel_stop"  || runlevel_stop=6
+
            for i in /etc/init.d/rc /etc/rc.d/rc; do
                test -x "$vdir/vdir/$i" || continue
                INITCMD_START=( "$i" "$runlevel_start" )
@@ -154,7 +181,8 @@ function _generateInitOptions
        xplain)
            INITCMD_START=( /sbin/init )
            INITCMD_STOP=(  /sbin/init )
-           CHCONTEXT_INIT_OPTS=( --disconnect --flag fakeinit )
+           CHCONTEXT_INIT_OPTS=(  --flag fakeinit )
+           CHCONTEXT_DISCONNECT=( --disconnect )
            test -z "$runlevel_start" || INITCMD_START=( "${INITCMD_START[@]}" "$runlevel_start" )
            test -z "$runlevel_stop"  || INITCMD_STOP=(  "${INITCMD_STOP[@]}"  "$runlevel_stop"  )
            ;;
@@ -162,7 +190,8 @@ function _generateInitOptions
        xminit)
            INITCMD_START=( /sbin/minit-start )
            INITCMD_STOP=(  /sbin/minit-stop  )
-           CHCONTEXT_INIT_OPTS=( --disconnect --flag fakeinit )
+           CHCONTEXT_INIT_OPTS=(  --flag fakeinit )
+           CHCONTEXT_DISCONNECT=( --disconnect )
            INITCMD_START_SYNC=( "$_INITSYNC_MINIT_START" "$vdir" )
            INITCMD_STOP_SYNC=(  "$_INITSYNC_MINIT_STOP"  "$vdir" )
            test -z "$runlevel_start" || INITCMD_START=( "${INITCMD_START[@]}" "$runlevel_start" )
@@ -179,6 +208,7 @@ function _generateInitOptions
     _getFileArray INITCMD_START_SYNC "$cfgdir"/cmd.start-sync
     _getFileArray INITCMD_STOP_SYNC  "$cfgdir"/cmd.stop-sync
     _getFileArray INITCMD_PREPARE    "$cfgdir"/cmd.prepare
+
     
     test -e "$cfgdir"/sync -o "$OPTION_FORCE_SYNC" || {
        INITCMD_START_SYNC=()
@@ -199,8 +229,8 @@ function _generateFlagOptions
            x|x#)               ;;
            dummy)              ;;
            fakeinit)
-               CHCONTEXT_FLAG_OPTS=( "${CHCONTEXT_FLAG_OPTS[@]}" 
-                                     --disconnect --flag --fakeinit )
+               CHCONTEXT_FLAG_OPTS=( "${CHCONTEXT_FLAG_OPTS[@]}" --flag fakeinit )
+               CHCONTEXT_DISCONNECT=( --disconnect )
                ;;
            *)
                CHCONTEXT_FLAG_OPTS=( "${CHCONTEXT_FLAG_OPTS[@]}"
@@ -409,8 +439,16 @@ function mountVserver
 {
     local cfgdir=$1
     local vdir=$1/vdir
+    local mtab_src
 
     test -e "$cfgdir"/fstab || return 0
+
+    findObject -r mtab_src "$CONFDIR"/.defaults/init/mtab "$vdir"/apps/init/mtab /dev/null
+    
+    pushd "$vdir" >/dev/null
+    $_CHROOT_CAT /etc/mtab <"$mtab_src"
+    popd >/dev/null
+
     $_CHBIND "${CHBIND_OPTS[@]}" \
        $_SECURE_MOUNT -a --chroot "$vdir" --fstab "$cfgdir"/fstab
 }