# $Id: vserver-build.debootstrap 2641 2007-12-05 00:51:04Z dhozac $ --*- sh -*-- # Copyright (C) 2003 Enrico Scholz # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. function init { workdir= MIRROR= options= } function initVariables { base.init test -n "${MIRROR}" || { local aux findFile aux "$__CONFDIR"/.distributions/"$DISTRIBUTION"/debootstrap.mirror \ "$__CONFDIR"/.defaults/apps/debootstrap/mirror \ "$__DISTRIBDIR"/"$DISTRIBUTION"/debootstrap.mirror \ "$__PKGLIBDEFAULTDIR"/debootstrap.mirror '' test -z "$aux" || read MIRROR <"$aux" } local file findFile file "$__CONFDIR"/.distributions/"$DISTRIBUTION"/debootstrap.options \ "$__CONFDIR"/.defaults/apps/debootstrap/options '' test -z "$file" || read options <"$file" } function initFilesystem { base.initFilesystem "$1" mkdir -p "$SETUP_CONFDIR"/apps/pkgmgmt touch "$SETUP_CONFDIR"/apps/pkgmgmt/internal } function findDebootstrap { test ! -x "$DEBOOTSTRAP" || return 0 pushd . &>/dev/null DEBOOTSTRAP=$(which debootstrap 2>/dev/null) || { dir=$($_MKTEMPDIR -p /var/tmp debootstrap.XXXXXX) workdir=$dir dst=$dir/debootstrap.deb base._addGeneratedFile "$workdir" findFile DEBOOTSTRAP_URI "$__CONFDIR"/.defaults/apps/debootstrap/uri "$__PKGLIBDEFAULTDIR"/debootstrap.uri read tmp <$DEBOOTSTRAP_URI case "$tmp" in (/*) ln -s "$tmp" "$dst";; (http://*|ftp://*) echo $"\ Could not find local version of 'debootstrap'; downloading it from ${tmp}..." $_WGET -nv -O "$dst" "$tmp" || { $_CAT <&2 ERROR: Could not download the debootstrap package from $tmp Usually, this means that Debian released a new version which is unknown to util-vserver and removed the known ones. To fix this, go to http://ftp.debian.org/debian/pool/main/d/debootstrap/ (or a nearby mirror) and search the URL for the most recent *.deb package matching your platform. Then, put this URL into $__CONFDIR/.defaults/apps/debootstrap/uri and retry the vserver-build command again. EOF exit 1 } ;; (*) echo $"Unsupported URI scheme '$tmp'" >&2 exit 1;; esac cd $dir ar x "$dst" tar xzf data.tar.gz DEBOOTSTRAP_DIR=`pwd`/usr/lib/debootstrap DEBOOTSTRAP=`pwd`/usr/sbin/debootstrap test -d "$DEBOOTSTRAP_DIR" || DEBOOTSTRAP_DIR=`pwd`/usr/share/debootstrap export DEBOOTSTRAP_DIR local arch arch=$(uname -i 2>/dev/null) || \ arch=$(arch 2>/dev/null) || arch= ## Wash the calculated architecture case $arch in (i?86|athlon) arch=i386;; esac test -z "$arch" || echo "$arch" >$DEBOOTSTRAP_DIR/arch } popd &>/dev/null test -x "$DEBOOTSTRAP" || { echo $"Can not find debootstrap at '$DEBOOTSTRAP'" >&2; exit 1; } } function fixupDebian { $_RM -rf "$1"/dev $_MV "$1"/dev.X "$1"/dev } ### main starts here <--- tmp=$(getopt -o '+d:m:s:' --long debug -n "$0" -- "$@") || exit 1 eval set -- "$tmp" init while true; do case "$1" in (-d) DISTRIBUTION=$2; shift;; (-m) MIRROR=$2; shift;; (-s) script=$2; shift;; (--debug) set -x;; (--) shift; break ;; (*) echo "vserver-build.debootstrap: internal error: unrecognized option '$1'" >&2 exit 1 ;; esac shift done getDistribution '' 1 initVariables initFilesystem "$OPTION_FORCE" setup_writeOption "$VSERVER_NAME" setup_writeInitialFstab findDebootstrap if test -z "$script"; then findFile script "$__CONFDIR/.distributions/$DISTRIBUTION/debootstrap.script" \ "$__DISTRIBDIR/$DISTRIBUTION/debootstrap.script" '' fi export MIRROR test -z "$BUILD_INITPRE" || "$BUILD_INITPRE" "$SETUP_CONFDIR" "$UTIL_VSERVER_VARS" mv "$VDIR"/dev "$VDIR"/dev.X "$_VNAMESPACE" --new -- \ "$DEBOOTSTRAP" $options "$@" "$DISTRIBUTION" "$VDIR" "$MIRROR" "$script" || : ## HACK: ignore all errors... fixupDebian "$VDIR" test -z "$BUILD_INITPOST" || "$BUILD_INITPOST" "$SETUP_CONFDIR" "$UTIL_VSERVER_VARS" $_RM -fr "$workdir" base.setSuccess