[26807] in Source-Commits

home help back first fref pref prev next nref lref last post

/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" \


home help back first fref pref prev next nref lref last post