-# $Id: vserver-build.functions,v 1.18 2005/07/04 22:38:42 ensc Exp $ --*- sh -*--
+# $Id: vserver-build.functions 2704 2008-03-16 03:30:22Z dhozac $ --*- sh -*--
# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
#
ROOTDIR=
ROOTDIR_REL=
+CACHEDIR=
+CACHEDIR_REL=
VSERVERDIRNAME=
VDIR=
esac
}
+function populateDev
+{
+ local spec
+
+ mkdir -p -m755 "$VDIR"/dev
+ mkdir -m755 "$VDIR"/dev/pts
+
+ while read spec; do
+ makeDevEntry "$VDIR"/dev $spec
+ done <$_DEV_FILE
+}
+
function populateDirectory
{
local dst=$1
}
}
-function _setVserverDir
+function _setCacheDir
+{
+ test -z "$CACHEDIR" || return 0
+
+ for item in "\"$__CONFDIR/.defaults/cachebase\" 1" "$__PKGCACHEDIR"; do
+ eval set -- "$item"
+ CACHEDIR=$1
+ CACHEDIR_REL=$2
+ test ! -d "$CACHEDIR" || break
+ done
+
+ test -d "$CACHEDIR" || {
+ echo "Cache-directory '$CACHEDIR' does not exist or is invalid" >&2
+ exit 1
+ }
+}
+
+function _setVserverDirName
{
test -z "$VSERVERDIRNAME" || return 0
VSERVERDIRNAME="$VSERVER_NAME"
local i
for i in "$VDIR" "$SETUP_CONFDIR"; do
- test ! -e "$i" || {
+ test ! -e "$i" || isDirectoryEmpty "$i" || {
mv "$i" "$i$suffix"
say "Renamed '$i' to '$i$suffix'"
}
}
-## Usage: getDistribution [<default>]
+## Usage: getDistribution [<default>] [<ignore-config>]
function getDistribution
{
- test -z "$DISTRIBUTION" || return 0
-
- if test -e /etc/fedora-release; then
- set -- $(cat /etc/fedora-release)
- DISTRIBUTION=fdr$4
- elif test -e /etc/redhat-release; then
- set -- $(cat /etc/redhat-release)
- DISTRIBUTION=rh$5
- elif test -e /etc/debian_version; then
- set -- $(cat /etc/debian_version)
- DISTRIBUTION=deb$1
- elif test -e /etc/SuSE-release; then
- set -- $(cat /etc/SuSE-release)
- DISTRIBUTION=suse$3
- elif test -e /etc/gentoo-release; then
- set -- $(cat /etc/gentoo-release)
- DISTRIBUTION=gentoo$5
- elif test -e /etc/slackware-release; then
- set -- $(cat /etc/slackware-release)
- DISTRIBUTION=slackware$2
- elif test -n "$1"; then
- DISTRIBUTION=$1
- else
- echo \
-"Can not determine distribution; please specify it manually
-with the '-d' option" >&2
- exit 1
- fi >&2
+ local ignore_config=$2
+
+ if test -z "$DISTRIBUTION"; then
+ if test -e /etc/fedora-release; then
+ set -- $(cat /etc/fedora-release)
+ DISTRIBUTION=fdr$4
+ elif test -e /etc/redhat-release; then
+ set -- $(cat /etc/redhat-release)
+ DISTRIBUTION=rh$5
+ elif test -e /etc/debian_version; then
+ set -- $(cat /etc/debian_version)
+ DISTRIBUTION=deb$1
+ elif test -e /etc/SuSE-release; then
+ set -- $(cat /etc/SuSE-release)
+ DISTRIBUTION=suse$3
+ elif test -e /etc/gentoo-release; then
+ set -- $(cat /etc/gentoo-release)
+ DISTRIBUTION=gentoo$5
+ elif test -e /etc/slackware-version; then
+ set -- $(cat /etc/slackware-version)
+ DISTRIBUTION=slackware$2
+ elif test -n "$1"; then
+ DISTRIBUTION=$1
+ else
+ colpanic $"\
+ERROR: Can not determine distribution; please specify it manually with
+ the '-d' option."
+ fi
+ fi
+
+ test -n "$ignore_config" -o \
+ -d "$__CONFDIR/.distributions/$DISTRIBUTION" -o \
+ -d "$__DISTRIBDIR/$DISTRIBUTION" ||
+ colpanic $"\
+ERROR: Can not find configuration for the distribution '$DISTRIBUTION';
+ please read http://linux-vserver.org/HowToRegisterNewDistributions
+ for information how to add support for your own distribution."
+
+ export DISTRIBUTION
}
function base._addGeneratedFile
function base.initFilesystem
{
test -z "$1" || _renameVserverCfg
- test ! -d "$VDIR" -a ! -d "$SETUP_CONFDIR" || {
- echo \
-"vserver-topdirectory '$VDIR' and/or configuration at '$SETUP_CONFDIR'
-exist already; please try to use '--force', or remove them manually"
->&2
- exit 1
- } >&2
+ { isDirectoryEmpty "$VDIR" && test ! -e "$SETUP_CONFDIR"; } || colpanic $"\
+vserver-topdirectory '$VDIR' and/or configuration at '$SETUP_CONFDIR'
+exist already; please try to use '--force', or remove them manually."
mkdir -p -m755 "$VDIR"
- chattr -t "$VDIR"
+ $_SETATTR --~barrier "$VDIR"
+ $_SETATTR --barrier "$VDIR"/.. || colwarn $"\
+WARNING: could not set the barrier attribute on '$VDIR/..',
+ please set it manually."
base._addGeneratedFile "$VDIR"
- mkdir -p -m755 "$SETUP_CONFDIR"/apps "$VDIR"/{dev/pts,etc}
+ mkdir -p -m755 "$SETUP_CONFDIR"/apps "$VDIR"/etc
base._addGeneratedFile "$SETUP_CONFDIR"
- ln -s "$VDIR" "$SETUP_CONFDIR/vdir"
+ ln -s "$VDIR" "$SETUP_CONFDIR/vdir"
+ ln -s "$CACHEDIR/$VSERVERDIRNAME" "$SETUP_CONFDIR/cache"
- local spec
- while read spec; do
- makeDevEntry "$VDIR"/dev $spec
- done <$_DEV_FILE
+ populateDev
mkdir -p "$VDIR"/proc
findAndCopy "$VDIR"/etc/hosts "$__CONFDIR"/.defaults/files/hosts "$__CONFDIR/.distributions/$DISTRIBUTION"/files/hosts \
function base._initVariables
{
_setRootDir
- _setVserverDir
+ _setCacheDir
+ _setVserverDirName
_setVdir
findFile _DEV_FILE "$__CONFDIR/.distributions/$DISTRIBUTION/devs" "$__DISTRIBDIR/$DISTRIBUTION/devs" "$__DISTRIBDIR/defaults/devs"
test -z "$OPTION_KEEP" || return 0
test -z "$__BASE_SUCCESS" || return 0
- echo rm -rf "${__BASE_GENERATED_FILES[@]}"
+ rm -rf "${__BASE_GENERATED_FILES[@]}"
}
function base.init
{
__BASE_SUCCESS=1
}
+
+function startSleepingGuest
+{
+ local guest="$1"
+ local timeout="${2:-15}"
+ $_VSERVER "$guest" start --rescue --rescue-init bash -c "
+ exec > /dev/null
+ exec 2> /dev/null
+ trap 'kill -s 9 -- -1; exit 0' INT
+ i=0
+ while [ \$i -lt $timeout ]; do
+ sleep 1
+ let ++i
+ done
+ kill -s 15 -- -1
+ sleep 1
+ kill -s 9 -- -1"
+}
+
+function stopSleepingGuest
+{
+ local guest="$1"
+ $_VSERVER "$guest" stop --rescue-init
+}