SILENT_OPT='--silent'
fi
+function _readFileToArray
+{
+ local _rfta_f="$1"
+ local _rfta_a="$2"
+ local _rfta_p="$3"
+ local _rfta_v
+
+ test -e "$_rfta_f" || return 0
+ while read _rfta_v; do
+ case x"$_rfta_v" in
+ (x|x\#*) ;;
+ (*) eval "$_rfta_a=( \"\${$_rfta_a[@]}\" $_rfta_p \"$_rfta_v\" )";;
+ esac
+ done <"$_rfta_f"
+}
+
function _generateChbindOptions
{
local vdir="$1"
getFileValue nid "$vdir/ncontext" "$vdir/context"
- CHBIND_OPTS=( $SILENT_OPT ${nid:+--nid "$nid"} ${bcast:+--bcast "$bcast"} )
+ CHBIND_OPTS=( $SILENT_OPT --secure ${nid:+--nid "$nid"} ${bcast:+--bcast "$bcast"} )
for i in "${INTERFACES[@]}"; do
CHBIND_OPTS=( "${CHBIND_OPTS[@]}" --ip "$i" )
done
+ _readFileToArray "$vdir"/nflags CHBIND_OPTS --flag
+ _readFileToArray "$vdir"/ncapabilities CHBIND_OPTS --ncap
+
_HAVE_CHBIND_OPTIONS=1
}
function _generateCCapabilityOptions
{
local vdir=$1
- local cap
- local f="$vdir"/ccapabilities
-
- test -e "$f" || return 0
- while read cap; do
- case x"$cap" in
- (x|x\#*) ;;
- (*) OPTS_VATTRIBUTE=( "${OPTS_VATTRIBUTE[@]}" --ccap "$cap" );;
- esac
- done <"$f"
+
+ _readFileToArray "$vdir"/ccapabilities OPTS_VATTRIBUTE --ccap
}
function _generateBCapabilityOptions
{
local vdir=$1
- local cap
- local f="$vdir"/bcapabilities
-
- test -e "$f" || return 0
- while read cap; do
- case x"$cap" in
- (x|x\#*) ;;
- (*) OPTS_VATTRIBUTE=( "${OPTS_VATTRIBUTE[@]}" --bcap "$cap" );;
- esac
- done <"$f"
+
+ _readFileToArray "$vdir"/bcapabilities OPTS_VATTRIBUTE --bcap
}
function _generateCapabilityOptions
CHCONTEXT_INIT_OPTS=()
- getFileValue INITSTYLE "$cfgdir"/style
+ test x"$INITSTYLE" = xrescue || \
+ getFileValue INITSTYLE "$cfgdir"/style
getFileValue RUNLEVEL_START "$cfgdir"/runlevel
getFileValue RUNLEVEL_START "$cfgdir"/runlevel.start
getFileValue RUNLEVEL_STOP "$cfgdir"/runlevel.stop
(xrescue)
INITCMD_START=( "${INITCMD_RESCUE[@]}" )
INITCMD_STOP=( /sbin/killall5 )
- _IS_FAKEINIT=1
- _NEED_VSHELPER_SYNC=
;;
(xsysv)
;;
(xgentoo)
- panic "init-style '$INITSTYLE' is no longer supported; please use plain instead; aborting";;
+ test -n "$RUNLEVEL_START" || RUNLEVEL_START="default"
+
+ INITCMD_START=( /lib/rcscripts/sh/init-vserver.sh "$RUNLEVEL_START" )
+ INITCMD_STOP=( /sbin/rc shutdown )
+ INITCMD_PREPARE=( $_FAKE_RUNLEVEL 3 /var/run/utmp )
+
+ pushd "$vdir"/vdir &>/dev/null
+ basever=$($_CHROOT_SH cat /etc/gentoo-release | $_AWK '{print $5}')
+ popd &>/dev/null
+
+ basemaj=${basever/.*}
+ basemin=${basever#*.}
+ basemin=${basemin/.*}
+
+ test "$basemaj" -lt 1 -o "$basemin" -lt 13 && \
+ panic "\
+Using init-style 'gentoo' requires >=baselayout-1.13 inside the vserver!
+
+Your vserver ($(basename "$vdir")) seems to have baselayout-$basever,
+please use 'plain' init-style instead!"
+ ;;
(x) ;;
(*) panic "Unknown init-style '$INITSTYLE'; aborting";;
function _generateScheduleOptions
{
local vdir=$1
+ if test -d "$vdir"/sched; then
+ OPTS_VSCHED=( --dir "$vdir"/sched --missingok )
+ return 0
+ fi
+
local f="$vdir"/schedule
test -e "$f" || return 0
panic $"\
/proc/uptime can not be accessed. Usually, this is caused by
procfs-security. Please read the FAQ for more details
-http://www.linux-vserver.org/index.php?page=Linux-Vserver+FAQ"
+http://linux-vserver.org/Proc-Security"
}
# these are things that have to be accessible post-cleanup
for tmp in "$root" "$__SBINDIR" "$__PKGLIBDIR" "$vdir" \
- "$__PKGSTATEDIR" "${skip[@]}"; do
+ "$__PKGSTATEDIR" "`pwd`" "${skip[@]}"; do
while test -n "$tmp"; do
list=( "${list[@]}" "$tmp" )
tmp="${tmp%/*}"