dev/chroot-test/run-test
author David Douard <david.douard@logilab.fr>
Mon, 03 Nov 2014 11:12:45 +0100
changeset 372 80f78674c56e
parent 365 f2e13e08ea13
permissions -rwxr-xr-x
Add support for phases This adds a "publish" permission level (between "init" and "write") required to be able to change the phase of a changeset from "draft" to "public". Update documentation accordingly. This is meant to be used for using the changeset evolution feature of mercurial, see http://evolution.experimentalworks.net/doc/

#!/bin/sh

# Must be root to run this

set -e

for clause in $@ ; do
    export $clause
done

cd $(hg root)

DEBVERSION=sid

PRISTINE=/var/local/cache/pristine/$DEBVERSION

if [ ! -e $PRISTINE ] ; then
    echo "Missing:" $PRISTINE
    echo "Debian pristine image not found, try running these commands as root:"
    echo mkdir -p /var/local/cache/pristine
    echo debootstrap $DEBVERSION $PRISTINE http://ftp.uk.debian.org/debian/
    exit -1
fi

BUILDDIR=$(pwd)/build
mkdir -p $BUILDDIR/env
BACKING=$BUILDDIR/env/backing
MOUNT=$BUILDDIR/env/mount
if [ -e $MOUNT ] ; then
    echo "Removing old filesystem"
    # FIXME: evil hack!
    chroot $MOUNT /etc/init.d/ssh stop || true
    umount $MOUNT/proc || true
    umount $MOUNT || true
    rm -rf $MOUNT
fi
if [ -e $BACKING ] ; then
    echo "Copying deb files into cache"
    mkdir -p $BUILDDIR/aptcache/$DEBVERSION
    cp $BACKING/var/cache/apt/archives/* $BUILDDIR/aptcache/$DEBVERSION || true
    echo "Deleting old filesystem backing store"
    rm -rf $BACKING
fi
mkdir $BACKING $MOUNT

touch $BACKING/please-trash-this-system
mkdir -p $BACKING/etc
echo "pristine" > $BACKING/etc/debian_chroot

SCRIPTS=dev/chroot-test

cp -v $SCRIPTS/policy-rc.d $BACKING/etc/policy-rc.d

mkdir -p $BACKING/var/cache/apt/archives
echo "Copying deb files out of cache"
cp $BUILDDIR/aptcache/$DEBVERSION/* $BACKING/var/cache/apt/archives || true

cp -av $SCRIPTS/action $BACKING
. $SCRIPTS/copy-installables
env | grep '^CHROOT_TEST_' > $BACKING/action/env || true

unionfs-fuse -o cow -o allow_other,suid,dev $BACKING=RW:$PRISTINE=RO $MOUNT

#mount --bind /dev "$MOUNT/dev"
#mount --bind /dev/pts "$MOUNT/dev/pts"
mount -t proc proc $MOUNT/proc

chroot $MOUNT ./action/go
echo "Completed successfully"