X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Fvserver.functions;h=925b34fbcd03845257f579ed75212a7b128b36a2;hb=54dca8e1902c0329b2a070098ea93b001a22cc5b;hp=e5763c91815529c9e78b259095d34e67dd7135e3;hpb=b1a6636b844a1407f9bec76460cd6874f0ca3cba;p=util-vserver.git diff --git a/util-vserver/scripts/vserver.functions b/util-vserver/scripts/vserver.functions index e5763c9..925b34f 100644 --- a/util-vserver/scripts/vserver.functions +++ b/util-vserver/scripts/vserver.functions @@ -1,4 +1,4 @@ -#! /bin/bash +# $Id$ --*- sh -*-- # Copyright (C) 2003 Enrico Scholz # @@ -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 }