
COMPONENTS=""
REPO_NAME="os-base"
DEB_CONF="/root/apt-ww.conf"
DEB_CONF_FULL="$CHROOTDIR/root/apt-ww.conf"
DEB_SRC="/root/apt/sources.list"
DEB_SRC_FULL="$CHROOTDIR/root/apt/sources.list"

sanity_check() {
    if [ ! -x $WAREWULF_PREFIX/bin/cluster-env ]; then
        echo "warewulf-cluster package is recommended on nodes you are building VNFS images on.";
        sleep 2;
    else
        $WAREWULF_PREFIX/bin/cluster-env;
    fi

    if ! dpkg -s debootstrap >/dev/null 2>&1; then
        echo "ERROR: Could not query dpkg for debootstrap"
        return 1
    fi
    return 0
}

configure_pam() {
    # add broken_shadow to pam.d/common-account
    if [ -f "$CHROOTDIR/etc/pam.d/common-account" ]; then
        sed -i -e '/^account.*pam_unix\.so\s*$/s/\s*$/\ broken_shadow/' $CHROOTDIR/etc/pam.d/common-account
    fi
}

prechroot() {

    if [ -n "$OS_MIRROR" ]; then
        DEB_MIRROR="$OS_MIRROR"
    fi

    if [ -z "$DEB_MIRROR" ]; then
        echo "ERROR: You must define the \$DEB_MIRROR variable in the template"
        cleanup
        exit 1
    fi

    if [ -z $SUITE ]; then
        export SUITE="squeeze";
    fi
    if [ -z $ARCH ]; then
        export ARCH="amd64";
    fi
    if [ -z $COMPONENTS ]; then
        COMPONENTS="main,contrib,non-free";
    fi

    mkdir -p $CHROOTDIR
    mkdir -p $CHROOTDIR/etc

    cp -rap /etc/apt $CHROOTDIR/etc

    DEB_CONF_DIRNAME=`dirname $DEB_CONF`
    mkdir -m 0755 -p $CHROOTDIR/$DEB_CONF_DIRNAME

    DEB_SRC_DIRNAME=`dirname $DEB_SRC`
    mkdir -m 0755 -p $CHROOTDIR/$DEB_SRC_DIRNAME

    > $CHROOTDIR/$DEB_CONF
    > $CHROOTDIR/$DEB_SRC

    echo '# Generated by wwmkchroot' >> $CHROOTDIR/$DEB_CONF
    echo 'Dir "/" {' >> $CHROOTDIR/$DEB_CONF
    echo '  Etc "root/apt/" {' >> $CHROOTDIR/$DEB_CONF
    echo '    SourcesList "sources.list"' >> $CHROOTDIR/$DEB_CONF
    echo '  }' >> $CHROOTDIR/$DEB_CONF
    echo '}' >> $CHROOTDIR/$DEB_CONF
    echo "" >> $CHROOTDIR/$DEB_CONF
    echo 'DPkg {' >> $CHROOTDIR/$DEB_CONF
    echo "  Chroot-Directory \"$CHROOTDIR\"" >> $CHROOTDIR/$DEB_CONF
    echo '}' >> $CHROOTDIR/$DEB_CONF
    echo "" >> $CHROOTDIR/$DEB_CONF

    if [ -z "$INSTALL_ISO" ]; then
        echo "deb $DEB_MIRROR $SUITE main contrib non-free" >> $CHROOTDIR/$DEB_SRC
        echo "deb-src $DEB_MIRROR $SUITE main contrib non-free" >> $CHROOTDIR/$DEB_SRC
        echo ""
        echo "# For updates" >> $CHROOT/$DEB_SRC
        echo "deb http://security.debian.org/ ${SUITE}/updates main contrib" >> $CHROOTDIR/$DEB_SRC
        echo "deb-src http://security.debian.org/ ${SUITE}/updates main contrib" >> $CHROOTDIR/$DEB_SRC
        echo "" >> $CHROOTDIR/$DEB_SRC
    else
        for i in `ls -d $MEDIA_MOUNTPATH.*`; do
            if [ -z "$INSTALLDIRS" ]; then
                INSTALLDIRS="file://$i"
            else
                INSTALLDIRS="$INSTALLDIRS,file://$i"
            fi
        done
        echo "[$REPO_NAME]" >> $CHROOTDIR/$DEB_CONF
        echo 'name=Linux $releasever - $basearch' >> $CHROOTDIR/$DEB_CONF
        echo "baseurl=$INSTALLDIRS" >> $CHROOTDIR/$DEB_CONF
        echo "enabled=1" >> $CHROOTDIR/$DEB_CONF
        echo "gpgcheck=0" >> $CHROOTDIR/$DEB_CONF
    fi

    return 0;
}

buildchroot() {

    if [ -z "$PKGLIST" ]; then
        echo "ERROR: You must define the \$PKGLIST variable in the template!"
        cleanup
        exit 1
    fi

    debootstrap --arch=$ARCH --components=$COMPONENTS --variant=minbase \
        --include=$PKGLIST \
        $SUITE $CHROOTDIR $DEB_MIRROR

    if [ $? -ne 0 ]; then
        echo "ERROR: Failed to create chroot"
        return 1
    fi

    return 0
}

postchroot() {
    touch $CHROOTDIR/fastboot
    return 0
}

print_help () {
cat <<'EOF'

    Debian chroot recipe file options:

    Debian Mirrors:
        DEB_MIRROR="http://ftp.us.debian.org/debian/"
        DEB_MIRROR="http://http.us.debian.org/debian/"

    Valid architectures are:
        ARCH="i386"
        ARCH="amd64"

    To date these are the current releases.
    Future releases should also be supported.

    Release code names:
        SUITE="lenny"
        SUITE="squeeze"
        SUITE="wheezy"
        SUITE="sid"

    Standard components:
        COMPONENTS="main,contrib,non-free"

    Alternate package lists:
    32 Bit:
    PKGLIST="openssh-server,openssh-client,isc-dhcp-client, \
                    pciutils,strace,nfs-common,ethtool,iproute, \
                    iputils-ping,iputils-arping,net-tools,rsync, \
                    firmware-bnx2, linux-image-686"

    64 Bit:
    PKGLIST="openssh-server,openssh-client,isc-dhcp-client, \
                    pciutils,strace,nfs-common,ethtool,iproute, \
                    iputils-ping,iputils-arping,net-tools,rsync, \
                    firmware-bnx2, linux-image-amd64"

EOF
}

# vim: filetype=sh:syntax=sh:expandtab:ts=4:sw=4:
