[26807] in Source-Commits
/svn/athena r25767 - trunk/debathena/scripts/build-server
daemon@ATHENA.MIT.EDU (Jonathan D Reed)
Thu Sep 20 11:04:24 2012
Date: Thu, 20 Sep 2012 11:04:17 -0400
From: Jonathan D Reed <jdreed@MIT.EDU>
Message-Id: <201209201504.q8KF4HYI030767@drugstore.mit.edu>
To: source-commits@MIT.EDU
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Author: jdreed
Date: 2012-09-20 11:04:16 -0400 (Thu, 20 Sep 2012)
New Revision: 25767
Modified:
trunk/debathena/scripts/build-server/make-chroot
Log:
Support overlayfs chroots
Modified: trunk/debathena/scripts/build-server/make-chroot
===================================================================
--- trunk/debathena/scripts/build-server/make-chroot 2012-09-19 19:39:56 UTC (rev 25766)
+++ trunk/debathena/scripts/build-server/make-chroot 2012-09-20 15:04:16 UTC (rev 25767)
@@ -8,24 +8,35 @@
DEBUG=0
BZ2=0
-while getopts 'dz' opt; do
+TYPE=tar
+while getopts 'dzot' opt; do
case "$opt" in
d)
DEBUG=1;;
z)
BZ2=1;;
+ o)
+ TYPE=overlayfs;;
+ t)
+ TYPE=tar;;
esac
done
shift $((OPTIND-1))
+if [ $BZ2 -eq 1 ] && [ "$TYPE" != "tar" ]; then
+ echo "-z is meaningless if not using a tar chroot and will be ignored" >&2
+fi
+
set -xe
+: ${VG=/dev/dink}
: ${CHROOTDIR=/srv}
: ${MIRRORHOST=localhost:9999}
: ${DATA="$(dirname "$0")"}
SUITE=$1
ARCH=$2
CHROOT="${SUITE}-${ARCH}-sbuild"
+DEVICE="$VG/$CHROOT"
FILE="$CHROOTDIR"/"$CHROOT".tar
[ $BZ2 -eq 1 ] && FILE="${FILE}.bz2"
SIZE=4G
@@ -38,11 +49,16 @@
echo "Chroot $CHROOT already exists." >&2
exit 1
fi
-if [ -e "$FILE" ]; then
+if [ "$TYPE" = "tar" ] && [ -e "$FILE" ]; then
echo "Chroot tarball $FILE already exists." >&2
exit 1
fi
+if [ "$TYPE" = "overlayfs" ] && lvdisplay $DEVICE > /dev/null 2>&1; then
+ echo "LV $DEVICE already exists." >&2
+ exit 1
+fi
+
if [ -d /etc/schroot/chroot.d ]; then
CONF=/etc/schroot/chroot.d/$CHROOT
else
@@ -70,6 +86,12 @@
exit 1
fi
+if [ "$TYPE" = "overlayfs" ]; then
+ lvcreate --size "$SIZE" --name "$CHROOT" "$VG"
+ mkfs.ext3 "$DEVICE"
+ tune2fs -c 0 -i 0 "$DEVICE"
+fi
+
exittrap() {
if [ $DEBUG -ne 1 ]; then
rm -rf "$TMPDIR" || :
@@ -78,8 +100,13 @@
fi
}
TMPDIR=$(mktemp -d /var/tmp/make-chroot.XXXXXX)
-TARGET="$TMPDIR/root"
-SCRIPTCFG="default/config"
+if [ "$TYPE" = "overlayfs" ]; then
+ TARGET="$TMPDIR"
+ mount "$DEVICE" "$TARGET"
+else
+ TARGET="$TMPDIR/root"
+ SCRIPTCFG="default/config"
+fi
debootstrap --variant=buildd --include=apt,apt-utils,gnupg,build-essential,fakeroot --arch "$ARCH" "$SUITE" "$TARGET" "$MIRROR"
install -m a=rx,u+w "$DATA/policy-rc.d" "$TARGET/usr/sbin/"
mkdir -p "$TARGET/dev/pts"
@@ -95,14 +122,20 @@
fi
mkdir -p "$TARGET/afs"
mkdir -p "$TARGET/mit"
-TAROPTS="cf"
-[ $BZ2 -eq 1 ] && TAROPTS="cjf"
-(cd "$TMPDIR" && tar "$TAROPTS" "$FILE" --numeric-owner root)
-rm -rf "$TMPDIR"
+if [ "$TYPE" = "overlayfs" ]; then
+ umount "$TARGET"
+ rmdir "$TARGET"
+else
+ TAROPTS="cf"
+ [ $BZ2 -eq 1 ] && TAROPTS="cjf"
+ (cd "$TMPDIR" && tar "$TAROPTS" "$FILE" --numeric-owner root)
+ rm -rf "$TMPDIR"
+fi
exittrap() { :; }
! [ -s "$CONF" ] || echo >> "$CONF"
-cat >> "$CONF" <<EOF
+if [ "$TYPE" = "overlayfs" ]; then
+ cat >> "$CONF" <<EOF
[$CHROOT]
type=file
description=$CHROOT
@@ -114,6 +147,19 @@
location=/root
personality=$PERSONALITY
EOF
+else
+ cat >> "$CONF" <<EOF
+[$CHROOT]
+type=block-device
+union-type=overlayfs
+description=$CHROOT
+groups=root,sbuild
+root-groups=root,sbuild
+source-groups=root
+device=$DEVICE
+personality=$PERSONALITY
+EOF
+fi
schroot --chroot="${CHROOT}-source" --directory=/ -- /bin/sh -xe - \
8< "$SOURCES" \