BUILD_INITPRE=
BUILD_INITPOST=
+__BASE_GENERATED_FILES=()
+__BASE_SUCCESS=
+
function makeDevEntry
{
local dst=$1/$2
local file=
for file in "$i"/*; do
- test -e "$file" || continue
- case "$file" in
- (*/CVS) test ! -d "$file" || continue;;
- (*.rpmsave|*.rpmnew|*.rpmorig)
- continue;;
- esac
+ isRegularFile "$file" || continue
cp -a "$file" "$dst/"
done
{
test -z "$ROOTDIR" || return 0
- for item in "\"$CONFDIR/.defaults/vdirbase\" 1" "$DEFAULT_VSERVERDIR"; do
+ for item in "\"$__CONFDIR/.defaults/vdirbase\" 1" "$__DEFAULT_VSERVERDIR"; do
eval set -- "$item"
ROOTDIR=$1
ROOTDIR_REL=$2
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-release; then
+ set -- $(cat /etc/slackware-release)
+ 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."
+}
+
+function base._addGeneratedFile
+{
+ __BASE_GENERATED_FILES=( "${__BASE_GENERATED_FILES[@]}" "$@" )
}
## Usage: initFilesystem [force]
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"
+ base._addGeneratedFile "$VDIR"
+
mkdir -p -m755 "$SETUP_CONFDIR"/apps "$VDIR"/{dev/pts,etc}
+ base._addGeneratedFile "$SETUP_CONFDIR"
ln -s "$VDIR" "$SETUP_CONFDIR/vdir"
done <$_DEV_FILE
mkdir -p "$VDIR"/proc
- findAndCopy "$VDIR"/etc/hosts "$CONFDIR"/.defaults/files/hosts "$CONFDIR/.distributions/$DISTRIBUTION"/files/hosts \
- "$DISTRIBDIR/$DISTRIBUTION"/files/hosts "$DISTRIBDIR"/defaults/files/hosts ""
+ findAndCopy "$VDIR"/etc/hosts "$__CONFDIR"/.defaults/files/hosts "$__CONFDIR/.distributions/$DISTRIBUTION"/files/hosts \
+ "$__DISTRIBDIR/$DISTRIBUTION"/files/hosts "$__DISTRIBDIR"/defaults/files/hosts ""
for i in nsswitch.conf krb5.conf krb.conf krb.realms ldap.conf localtime resolv.conf; do
- findAndCopy "$VDIR"/etc/$i "$CONFDIR/.defaults/files/$i" "$CONFDIR/.distributions/$DISTRIBUTION/files/$i" ""
+ findAndCopy "$VDIR"/etc/$i "$__CONFDIR/.defaults/files/$i" "$__CONFDIR/.distributions/$DISTRIBUTION/files/$i" ""
done
}
-function base.initVariables
+function base._initVariables
{
_setRootDir
_setVserverDir
_setVdir
- findFile _DEV_FILE "$CONFDIR/.distributions/$DISTRIBUTION/devs" "$DISTRIBDIR/$DISTRIBUTION/devs" "$DISTRIBDIR/defaults/devs"
- findDir _EXECDIR "$CONFDIR/.distributions/$DISTRIBUTION/execdir" "$DISTRIBDIR/$DISTRIBUTION/execdir" /
- findFile BUILD_INITPRE "$CONFDIR/.distributions/$DISTRIBUTION/initpre" "$DISTRIBDIR/$DISTRIBUTION/initpre" ""
- findFile BUILD_INITPOST "$CONFDIR/.distributions/$DISTRIBUTION/initpost" "$DISTRIBDIR/$DISTRIBUTION/initpost" ""
+ findFile _DEV_FILE "$__CONFDIR/.distributions/$DISTRIBUTION/devs" "$__DISTRIBDIR/$DISTRIBUTION/devs" "$__DISTRIBDIR/defaults/devs"
+ findDir _EXECDIR "$__CONFDIR/.distributions/$DISTRIBUTION/execdir" "$__DISTRIBDIR/$DISTRIBUTION/execdir" /
+ findFile BUILD_INITPRE "$__CONFDIR/.distributions/$DISTRIBUTION/initpre" "$__DISTRIBDIR/$DISTRIBUTION/initpre" ""
+ findFile BUILD_INITPOST "$__CONFDIR/.distributions/$DISTRIBUTION/initpost" "$__DISTRIBDIR/$DISTRIBUTION/initpost" ""
+}
+
+function base.__cleanup
+{
+ test -z "$OPTION_KEEP" || return 0
+ test -z "$__BASE_SUCCESS" || return 0
+
+ rm -rf "${__BASE_GENERATED_FILES[@]}"
+}
+
+function base.init
+{
+ test -z "$SETUP_CONTEXT" || ! $_VSERVER_INFO -q "$SETUP_CONTEXT" RUNNING || \
+ panic $"\
+Context '$SETUP_CONTEXT' is already in use. Please select another one."
+
+ trap "base.__cleanup" EXIT
+ base._initVariables
+}
+
+function base.setSuccess
+{
+ __BASE_SUCCESS=1
}