#!/bin/sh

print_usage()
{
    [ "$1" = 0 ] || ($@ >&2; echo "")
    cat <<EOF
Usage: vsr-build [options] <workdir> <package-lists>

vsr-build will install and setup vserver under <workdir>/root
Valid options are:
  -s, --sources-list <file> Use specified sources.list
<packages-lists> - files with plain packages list.
		     				     
Report bugs to <shalupov@altlinux.ru>
EOF
    exit 1
}

TEMP=`getopt -o s: --long sources-list: -n vsr-build -- "$@"`
if [ $? != 0 ] ; then print_usage 0; fi
eval set -- "$TEMP"

SOURCES_LIST=
while true; do
    case "$1" in
        -s|--sources-list)
            SOURCES_LIST="$2"
            shift 2
            ;;
		--)
            shift
            break
            ;;
		*)
            echo "Internal error!"
            exit 1
            ;;
	esac
done

WORKDIR=$1
shift

[ -z "$WORKDIR" ] && print_usage echo "ERROR: WORKDIR not specified"
[ -z "$1" ] && print_usage echo "ERROR: You must specify at least one package list"

uris()
{
    $APTBOX/apt-get -y --print-uris install "$@" |sed -ne "s/^'\\([^']\\+\\)' .*/\\1/pg"
}

# Create workdir
test -d "$WORKDIR" && print_usage echo "ERROR: WORKDIR already exists"
mkdir -p "$WORKDIR"
WORKDIR=`realpath $WORKDIR`
mkdir -p $WORKDIR/{root,tmp}
APTBOX="$WORKDIR/aptbox"
TMPDIR="$WORKDIR/tmp"

# aptbox
echo "Initializing APT..."
/usr/bin/mkaptbox --no-update --no-stuff $WORKDIR

# Install root
[ -z "$SOURCES_LIST" ] || cp -v "$SOURCES_LIST" $APTBOX/etc/apt/sources.list
$APTBOX/apt-get update
uris `grep -h '^[^#]' $@`|uniq -u >$WORKDIR/tmp/packages
rm -Rf $WORKDIR/root/*
rm -f $TMPDIR/permiss
touch $TMPDIR/permiss

fakeroot -s $TMPDIR/permiss -i $TMPDIR/permiss \
	-l `ls /usr/lib/libfakechroot/libfakechroot.so* | head -n 1` \
	/usr/share/vserverator/install-helper $WORKDIR &&
    echo "All done. Have fun."
