svn commit: r253547 - user/nwhitehorn/condorports
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Mon Jul 22 15:02:57 UTC 2013
Author: nwhitehorn
Date: Mon Jul 22 15:02:55 2013
New Revision: 253547
URL: http://svnweb.freebsd.org/changeset/base/253547
Log:
Give up on distributing subsets of the ports tree. 2500 ports depend on
resources elsewhere in the tree with no easy way to track the dependencies.
There is still no requirement for a shared filesystem, but the relevant
(static, read-only) ports trees must be supplied ahead of time to the
build nodes. They could be advertised via classads, for example.
This includes a few changes to the scripts that get everything running in
a production kind of way. My desktop, in a cluster with itself, has built
over a thousand packages in the last few hours.
I'll write a few more scripts to automate node setup and some documentation
and then kick this over to bapt for integration with poudriere.
Modified:
user/nwhitehorn/condorports/buildport.sh
user/nwhitehorn/condorports/buildportsdag.sh
user/nwhitehorn/condorports/package.sub
user/nwhitehorn/condorports/prepbuildjail
user/nwhitehorn/condorports/reapbuildjail
user/nwhitehorn/condorports/stagebuildfiles.sh
Modified: user/nwhitehorn/condorports/buildport.sh
==============================================================================
--- user/nwhitehorn/condorports/buildport.sh Mon Jul 22 14:23:46 2013 (r253546)
+++ user/nwhitehorn/condorports/buildport.sh Mon Jul 22 15:02:55 2013 (r253547)
@@ -6,18 +6,15 @@ port=$1
pkg=$2
release=$3
tarballname=$(basename $4)
+portsdir=$5
scratchdir=$(pwd)
-# Some settings must go in make.conf:
-# USE_PACKAGE_DEPENDS=true
-
set -e
-sudo /pkgscripts/prepbuildjail $_CONDOR_SLOT $release
+sudo /pkgscripts/prepbuildjail $_CONDOR_SLOT $release $portsdir
cat $tarballname | sudo jexec $_CONDOR_SLOT tar xvf -
-sudo jexec $_CONDOR_SLOT make -C $port install USE_PACKAGE_DEPENDS=true BATCH=true DISABLE_MAKE_JOBS=true PKGREPOSITORY=/packages PACKAGES=/packages DISTDIR=/distfiles
-sudo jexec $_CONDOR_SLOT make -C $port package PKGREPOSITORY=/packages BATCH=true NO_LATEST_LINK=true
-ls -lh /scratch/$_CONDOR_SLOT/packages
+sudo jexec $_CONDOR_SLOT make -C $port install USE_PACKAGE_DEPENDS=true BATCH=true WRKDIRPREFIX=/obj DISABLE_MAKE_JOBS=true PKGREPOSITORY=/packages PACKAGES=/packages DISTDIR=/distfiles
+sudo jexec $_CONDOR_SLOT make -C $port package PKGREPOSITORY=/packages BATCH=true NO_LATEST_LINK=true WRKDIRPREFIX=/obj
cp /scratch/$_CONDOR_SLOT/packages/$pkg $scratchdir/$pkg
sudo /pkgscripts/reapbuildjail $_CONDOR_SLOT
set +e
Modified: user/nwhitehorn/condorports/buildportsdag.sh
==============================================================================
--- user/nwhitehorn/condorports/buildportsdag.sh Mon Jul 22 14:23:46 2013 (r253546)
+++ user/nwhitehorn/condorports/buildportsdag.sh Mon Jul 22 15:02:55 2013 (r253547)
@@ -23,13 +23,14 @@ for category in $(make -C $PORTSDIR -V S
export UNAME_p=$ARCH
PKGNAME=$(make package-name)
- TARBALL=$STAGEDIR/$(make -V UNIQUENAME).tgz
+ TARBALL=$STAGEDIR/stage-$category-$port.tar
echo SCRIPT PRE $job stagebuildfiles.sh $job $PKGSDIR $ARCH $TARBALL $DISTHORDE >> $dagjobs
echo SCRIPT POST $job postbuild.sh $TARBALL \$RETURN >> $dagjobs
echo VARS $job BuildArch=\"$ARCH\" >> $dagjobs
echo VARS $job port=\"$job\" >> $dagjobs
echo VARS $job pkg=\"$PKGNAME.txz\" >> $dagjobs
echo VARS $job pkgdir=\"$PKGSDIR/All\" >> $dagjobs
+ echo VARS $job portsdir=\"$PORTSDIR\" >> $dagjobs
echo VARS $job stagetarball=\"$TARBALL\" >> $dagjobs
echo VARS $job release=\"$RELEASE\" >> $dagjobs
deps=$(make -V _DEPEND_DIRS)
Modified: user/nwhitehorn/condorports/package.sub
==============================================================================
--- user/nwhitehorn/condorports/package.sub Mon Jul 22 14:23:46 2013 (r253546)
+++ user/nwhitehorn/condorports/package.sub Mon Jul 22 15:02:55 2013 (r253547)
@@ -15,5 +15,5 @@ when_to_transfer_output=ON_EXIT
transfer_output_remaps="$(pkg)=$(pkgdir)/$(pkg)"
transfer_input_files=$(stagetarball)
-arguments= $(port) $(pkg) $(release) $(stagetarball)
+arguments= $(port) $(pkg) $(release) $(stagetarball) $(portsdir)
queue
Modified: user/nwhitehorn/condorports/prepbuildjail
==============================================================================
--- user/nwhitehorn/condorports/prepbuildjail Mon Jul 22 14:23:46 2013 (r253546)
+++ user/nwhitehorn/condorports/prepbuildjail Mon Jul 22 15:02:55 2013 (r253547)
@@ -1,6 +1,7 @@
#!/bin/sh
slot=$1
release=$2
+ports=$3
#Audit slot and release names
case $slot in
@@ -9,6 +10,9 @@ esac
case $release in
*[^a-zA-Z0-9]* ) echo "Non-alphanumeric release $release"; exit 1
esac
+case $ports in
+ *[^a-zA-Z0-9/-]* ) echo "Non-alphanumeric ports $ports"; exit 1
+esac
if [ -z "$slot" -o -z "$release" ]; then
echo "Zero-length slot or release"
exit 1
@@ -20,22 +24,43 @@ if [ -d /scratch/$slot ]; then
fi
cleanup() {
+ rm -f /scratch/$slot.lock
/pkgscripts/reapbuildjail $slot
+ exit 1
}
set -e
trap cleanup EXIT
-. /etc/rc.subr
-
#TODO: localhost networking
-mkdir -p /scratch/$slot
+set -o noclobber
+echo > /scratch/$slot.lock
+
+set +o noclobber
+cat << EOF > /scratch/$slot.conf
+$slot {
+ path="/scratch/$slot";
+ host.hostname="$slot.`hostname`";
+ persist="true";
+ mount.devfs="true";
+ mount.fstab="/scratch/$slot.fstab";
+}
+EOF
# TODO: Setting nosuid seems to break "below"
-#mount_unionfs -o below /releases/$release /scratch/$slot
-mount_unionfs -o below /scratch/$release /scratch/$slot
-devfs_mount_jail /scratch/$slot/dev 4
+echo "/scratch/$release /scratch/$slot unionfs below 0 0" > /scratch/$slot.fstab
+if [ -n "$ports" ]; then
+ mkdir -p /scratch/$slot/$ports
+ echo "$ports /scratch/$slot/$ports nullfs ro 0 0" >> /scratch/$slot.fstab
+fi
-jail -c name=$slot path=/scratch/$slot host.hostname=$slot.`hostname` persist=true
+mkdir -p /scratch/$slot
+
+jail -f /scratch/$slot.conf -c $slot
+ls /scratch/$slot/dev > /dev/null # Hack around unionfs bugs
+if [ -n "$ports" ]; then
+ ls /scratch/$slot/$ports > /dev/null # And once more
+fi
trap true EXIT
+rm /scratch/$slot.lock
Modified: user/nwhitehorn/condorports/reapbuildjail
==============================================================================
--- user/nwhitehorn/condorports/reapbuildjail Mon Jul 22 14:23:46 2013 (r253546)
+++ user/nwhitehorn/condorports/reapbuildjail Mon Jul 22 15:02:55 2013 (r253547)
@@ -16,10 +16,11 @@ if [ ! -d /scratch/$slot ]; then
fi
set +e
-jail -r $slot
-umount -f /scratch/$slot/dev
-umount -f /scratch/$slot
+set -o noclobber
+echo > /scratch/$slot.lock
+jail -f /scratch/$slot.conf -r $slot
chflags -R noschg /scratch/$slot
-rm -rf /scratch/$slot
+rm -rf /scratch/$slot /scratch/$slot.conf /scratch/$slot.fstab
set +e
+rm /scratch/$slot.lock
Modified: user/nwhitehorn/condorports/stagebuildfiles.sh
==============================================================================
--- user/nwhitehorn/condorports/stagebuildfiles.sh Mon Jul 22 14:23:46 2013 (r253546)
+++ user/nwhitehorn/condorports/stagebuildfiles.sh Mon Jul 22 15:02:55 2013 (r253547)
@@ -9,8 +9,8 @@ DISTHORDE=$5
# Fetch distfiles if unfetched
cd $1
-make checksum DISTDIR=$DISTHORDE
-make package-links PACKAGES=$2
+make -DBATCH checksum DISTDIR=$DISTHORDE
+make -DBATCH package-links PACKAGES=$2
mkdir -p $2/All
@@ -29,22 +29,15 @@ ALLFILES=$(for f in `make -V ALLFILES`;
DEPENDS=`make all-depends-list`
PKGLIST=$(for x in $DEPENDS; do make -C $x PACKAGES=$2 -V PKGFILE; done)
-# Take an interesting subset of the ports tree
-# TODO: how on Earth to do this robustly?
-PORTSDIR=$(make -V PORTSDIR)
-PORTS_SUBSET="$PORTSDIR/Mk $PORTSDIR/Templates $PORTSDIR/Tools $PORTSDIR/Keywords $PORTSDIR/UIDs $PORTSDIR/GIDs $PORTSDIR/*/Makefile.inc $DEPENDS $(make -V DIR_DEPENDS) $(make -V MASTERDIR)" # Other important bits?
-
-tar cvf $TARBALL.tmp $ALLFILES $PKGLIST $PORTS_SUBSET $1
rm -rf $TARBALL-dir
-mkdir -p $TARBALL-dir/packages $TARBALL-dir/distfiles
+mkdir -p $TARBALL-dir/packages $TARBALL-dir/distfiles/$(make -V DIST_SUBDIR)
if [ -n "$ALLFILES" ]; then
- ln -s $ALLFILES $TARBALL-dir/distfiles
+ ln -s $ALLFILES $TARBALL-dir/distfiles/$(make -V DIST_SUBDIR)
fi
if [ -n "$PKGLIST" ]; then
ln -s $PKGLIST $TARBALL-dir/packages
fi
-tar -r -C $TARBALL-dir -v -L -f $TARBALL.tmp distfiles packages
-tar cvzf $TARBALL @$TARBALL.tmp
-rm -rf $TARBALL.tmp $TARBALL-dir
+tar -c -C $TARBALL-dir -v -L -f $TARBALL distfiles packages
+rm -rf $TARBALL-dir
set +e
More information about the svn-src-user
mailing list