aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports-mgmt/tinderbox/Makefile3
-rw-r--r--ports-mgmt/tinderbox/files/patch-chroot365
2 files changed, 368 insertions, 0 deletions
diff --git a/ports-mgmt/tinderbox/Makefile b/ports-mgmt/tinderbox/Makefile
index 201c760db9f1..f4362a73eca9 100644
--- a/ports-mgmt/tinderbox/Makefile
+++ b/ports-mgmt/tinderbox/Makefile
@@ -3,6 +3,7 @@
PORTNAME= tinderbox
PORTVERSION= 4.0.1
+PORTREVISION= 1
CATEGORIES= ports-mgmt
MASTER_SITES= http://tinderbox.marcuscom.com/ \
http://T32.TecNik93.com/FreeBSD/ports/${PORTNAME}/sources/
@@ -11,6 +12,8 @@ DIST_SUBDIR= ${PORTNAME}
MAINTAINER= itetcu@FreeBSD.org
COMMENT= Port build tinderbox system
+RUN_DEPENDS= dialog4ports-static:${PORTSDIR}/ports-mgmt/dialog4ports-static
+
CONFLICTS= tinderbox-devel-[0-9]*
OPTIONS_MULTI= DB
diff --git a/ports-mgmt/tinderbox/files/patch-chroot b/ports-mgmt/tinderbox/files/patch-chroot
new file mode 100644
index 000000000000..b052be7f5f21
--- /dev/null
+++ b/ports-mgmt/tinderbox/files/patch-chroot
@@ -0,0 +1,365 @@
+Calculate dependencies in a chroot
+
+Index: lib/makemake
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/makemake,v
+retrieving revision 1.48
+diff -u -r1.48 makemake
+--- lib/makemake 6 Nov 2012 21:55:47 -0000 1.48
++++ lib/makemake 5 Oct 2013 16:30:30 -0000
+@@ -135,11 +135,12 @@
+ my (
+ %pkgdir, %pkgdeps, %pkgedeps, %pkgpdeps, %pkgfdeps,
+ %pkgbdeps, %pkgrdeps, @duds, $portbase, $makecache,
+- %pkgtdeps, %pkgpkgdeps,
++ %pkgtdeps, %pkgpkgdeps, $chroot,
+ );
+
+ $portbase = $ENV{'PORTSDIR'};
+-$makecache = new Tinderbox::MakeCache($portbase, $ENV{'PKGSUFFIX'});
++$chroot = $ENV{'CHROOT'};
++$makecache = new Tinderbox::MakeCache($portbase, $chroot, $ENV{'PKGSUFFIX'});
+
+ while (scalar(@PORTS)) {
+ my $port = shift @PORTS;
+@@ -148,7 +149,7 @@
+
+ next if (defined($pkgdir{$portdir}));
+
+- $tportdir = "$portbase/$portdir";
++ $tportdir = "$chroot$portbase/$portdir";
+ if (!-d $tportdir) {
+ print STDERR "ERROR: Directory $tportdir does not exist.\n";
+ if (defined($pkgdeps{$portdir})
+Index: lib/tc_command.pl
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/tc_command.pl,v
+retrieving revision 1.184
+diff -u -r1.184 tc_command.pl
+--- lib/tc_command.pl 28 Apr 2013 20:05:40 -0000 1.184
++++ lib/tc_command.pl 5 Oct 2013 16:30:31 -0000
+@@ -1536,7 +1536,8 @@
+ sub addPortToOneBuild {
+ my $build = $ds->getBuildByName($opts->{'b'});
+ my $makecache =
+- new Tinderbox::MakeCache($ENV{'PORTSDIR'}, $ENV{'PKGSUFFIX'});
++ new Tinderbox::MakeCache($ENV{'PORTSDIR'}, $ENV{'CHROOT'},
++ $ENV{'PKGSUFFIX'});
+ my @bports = ();
+
+ if (!$opts->{'d'}) {
+@@ -3414,12 +3415,14 @@
+ my $cache = shift;
+ my $deps = shift;
+
+- my $portdir = $ENV{'PORTSDIR'} . "/" . $port;
++ my $portsdir = $ENV{'CHROOT'} . $ENV{'PORTSDIR'};
++
++ my $portdir = $portsdir . "/" . $port;
+ return undef if (!-d $portdir);
+
+ # Canonicalize the port directory.
+ $port = abs_path($portdir);
+- $port =~ s|$ENV{'PORTSDIR'}/||;
++ $port =~ s|$portsdir/||;
+
+ if (defined($deps)) {
+ my @list;
+Index: lib/tc_command.sh
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/tc_command.sh,v
+retrieving revision 1.175
+diff -u -r1.175 tc_command.sh
+--- lib/tc_command.sh 7 Aug 2013 18:25:52 -0000 1.175
++++ lib/tc_command.sh 5 Oct 2013 16:30:32 -0000
+@@ -1385,7 +1385,7 @@
+ cleanDirs ${buildName} ${BUILD_DIR}
+
+ if [ "${MD_FSTYPE}" = "ufs" -o "${MD_FSTYPE}" = "zfs" ]; then
+- if [ -n "${MD_SIZE}" -a ${MD_SIZE%[a-zA-Z]} -gt 0 ]; then
++ if [ -n "${MD_SIZE}" ] && [ ${MD_SIZE%[a-zA-Z]} -gt 0 ]; then
+ # setup md (ramdisk) backing for the build
+ mdconfig -a -t swap -s ${MD_SIZE} > /tmp/tinderbuild_md.${build}
+ read MD_UNIT </tmp/tinderbuild_md.${build}
+@@ -1400,7 +1400,7 @@
+ fi
+ fi
+ elif [ "${MD_FSTYPE}" = "tmpfs" ]; then
+- if [ -n "${MD_SIZE}" -a ${MD_SIZE%[a-zA-Z]} -gt 0 ]; then
++ if [ -n "${MD_SIZE}" ] && [ ${MD_SIZE%[a-zA-Z]} -gt 0 ]; then
+ mount -t tmpfs -o size=${MD_SIZE} tmpfs ${BUILD_DIR}
+ else
+ mount -t tmpfs tmpfs ${BUILD_DIR}
+@@ -1416,7 +1416,7 @@
+ execute_hook "postBuildExtract" "BUILD=${buildName} DESTDIR=${BUILD_DIR} JAIL=${jailName} PB=${pb} RC=0"
+
+ # Finalize environment
+- cp -f /etc/resolv.conf ${BUILD_DIR}/etc
++ cp /etc/resolv.conf ${BUILD_DIR}/etc || touch ${BUILD_DIR}/etc/resolv.conf
+
+ return 0
+ }
+@@ -1957,7 +1957,16 @@
+ ${tc} updatePortsTree -p ${portstree}
+ fi
+
+- # Create makefile if required
++ # Set up the chrooted environment
++ osmajor=$(echo ${jail} | sed -E -e 's|(^[[:digit:]]+).*$|\1|')
++ if [ ${osmajor} -lt 6 ]; then
++ echo "tinderbuild: unhandled OS version: ${osmajor}"
++ tinderbuild_cleanup 1
++ fi
++
++ tinderbuild_setup
++
++ # Create Makefile if required
+ if [ ${skipmake} -eq 0 ]; then
+ echo "tinderbuild: creating makefile..."
+
+@@ -1966,19 +1975,16 @@
+ (
+ export PORTBUILD_ARGS="$(echo ${pbargs})"
+ buildenvNoHost ${build}
+- if ! requestMount -t portstree -p ${portstree}; then
+- echo "tinderbuild: cannot mount portstree: ${portstree}"
+- exit 1
+- fi
+- env PORTSDIR=$(tinderLoc portstree ${portstree})/ports \
++ buildenv ${jail} ${portstree} ${build}
++ HOST_WORKDIR=$(${tc} configGet | \
++ awk -F= '/^HOST_WORKDIR/ {print $2}')
++ env PORTSDIR=/a/ports \
++ CHROOT=$(tinderLoc buildroot ${build}) \
+ $(tinderLoc scripts lib/makemake) ${noduds} ${build} ${ports}
+ )
+ if [ $? -ne 0 ]; then
+ echo "tinderbuild: failed to generate Makefile for ${build}"
+- cleanupMounts -t portstree -p ${portstree}
+ tinderbuild_cleanup 1
+- else
+- cleanupMounts -t portstree -p ${portstree}
+ fi
+ fi
+
+@@ -1987,15 +1993,6 @@
+ tinderbuild_cleanup 0
+ fi
+
+- # Set up the chrooted environment
+- osmajor=$(echo ${jail} | sed -E -e 's|(^[[:digit:]]+).*$|\1|')
+- if [ ${osmajor} -lt 6 ]; then
+- echo "tinderbuild: unhandled OS version: ${osmajor}"
+- tinderbuild_cleanup 1
+- fi
+-
+- tinderbuild_setup
+-
+ # Seatbelts off. Away we go.
+ ${tc} updateBuildStatus -b ${build} -s PORTBUILD
+ tinderbuild_phase 0 ${jobs} ${pkgDir}
+@@ -2045,7 +2042,11 @@
+ addPortToBuild_cleanup () {
+ jail=$1
+ portsTree=$2
++ build=$3
+
++ cleanupMounts -t buildports -b ${build}
++ cleanupMounts -t buildsrc -b ${build}
++ cleanupMounts -t buildoptions -b ${build}
+ cleanupMounts -t jail -j ${jail}
+ cleanupMounts -t portstree -p ${portsTree}
+ }
+@@ -2070,7 +2071,29 @@
+ exit 1
+ fi
+
+- trap "addPortToBuild_cleanup ${jail} ${portsTree}" 1 2 3 9 10 11 15
++ # Extracting the Jail tarball takes ages on some systems, so we can
++ # pretty safely (for these purposes) reuse the extraction as long as
++ # resolv.conf is newer than the tarball (resolv.conf is created
++ # by makeBuild)
++ HOST_WORKDIR=$(${tc} configGet | awk -F= '/^HOST_WORKDIR/ {print $2}')
++ if [ $(tinderLoc jailtarball ${jail}) -ot \
++ $(tinderLoc buildroot ${build})/etc/resolv.conf ]; then
++ echo "addPortToBuild: recent jail tarball exists; no need to reextract"
++ else
++ echo "addPortToBuild: extracting jail tarball to calculate dependencies inside"
++ makeBuild -b ${build}
++ fi
++
++ if ! requestMount -t buildports -b ${build} -r -n; then
++ echo "addPortToBuild: cannot mount ports source inside ${build}"
++ exit 1
++ fi
++ if ! requestMount -t buildsrc -b ${build} -r -n; then
++ echo "addPortToBuild: cannot mount base source inside ${build}"
++ exit 1
++ fi
++
++ trap "addPortToBuild_cleanup ${jail} ${portsTree} ${build}" 1 2 3 9 10 11 15
+
+ # Save TERM since we need that for OPTIONS
+ save_TERM=${TERM}
+@@ -2082,22 +2105,30 @@
+ buildenv ${jail} ${portsTree} ${build}
+ buildenvNoHost ${build}
+
+- export PORTSDIR=$(tinderLoc portstree ${portsTree})/ports
+- if [ -z "${portDir}" ]; then
+- ${tc} addPortToOneBuild -b ${build} ${norecurse}
+- else
+- if [ ! -d ${PORTSDIR}/${portDir} ]; then
+- echo "addPort: Unknown port ${portDir}"
+- exit 1
+- fi
+- ${tc} addPortToOneBuild -b ${build} -d ${portDir} ${norecurse}
++ if [ ${options} -eq 1 -a ${OPTIONS_ENABLED} -eq 1 ]; then
++ mkdir -p $(tinderLoc options ${build}) \
++ $(tinderLoc buildoptions ${build})
++ if ! requestMount -t buildoptions -b ${build} \
++ -s $(tinderLoc options ${build}) -n; then
++ echo "addPortToBuild: cannot mount options inside ${build}"
++ exit 1
++ fi
+ fi
++
++ export PORTSDIR=/a/ports
++ export CHROOT=$(tinderLoc buildroot ${build})
++
++ if [ -n "${portDir}" ] && [ ! -d ${CHROOT}/${PORTSDIR}/${portDir} ]; then
++ echo "addPort: Unknown port ${portDir}"
++ exit 1
++ fi
++
+ if [ ${options} -eq 1 -a ${OPTIONS_ENABLED} -eq 1 ]; then
+ pdirs=""
+ if [ -z "${portDir}" ]; then
+ pdirs=$(${tc} getPortsForBuild -b ${build} 2>/dev/null)
+ else
+- pdirs="${PORTSDIR}/${portDir}"
++ pdirs="${portDir}"
+ fi
+ rmconfig=true
+ if [ ${cleanOptions} -eq 1 ]; then
+@@ -2108,28 +2139,38 @@
+ fi
+ fi
+ for pdir in ${pdirs}; do
+- if [ -d ${pdir} ]; then
++ if [ -d ${CHROOT}${PORTSDIR}/${pdir} ]; then
+ export TERM=${save_TERM}
++ if ! cp /usr/local/bin/dialog4ports-static ${CHROOT}/; then
++ echo "In order to customise OPTIONS, you must install"
++ echo "ports-mgmt/dialog4ports-static."
++ break
++ fi
+ read -p "Generating options for ${build}; hit Enter to continue..." key
+ echo ""
+ if [ -z "${norecurse}" ]; then
+- ( cd ${pdir} && ${rmconfig} \
+- && make -k config-recursive )
++ chroot ${CHROOT} /bin/sh -c \
++ "cd ${PORTSDIR}/${pdir} && ${rmconfig} && \
++ make -k DIALOG4PORTS=/dialog4ports-static \
++ config-recursive"
+ else
+- ( cd ${pdir} && ${rmconfig} \
+- && make config )
++ chroot ${CHROOT} /bin/sh -c \
++ "cd ${PORTSDIR}/${pdir} && ${rmconfig} && \
++ make DIALOG4PORTS=/dialog4ports-static config"
+ fi
+ fi
+ done
+ fi
+
++ ${tc} addPortToOneBuild -b ${build} ${portDir:+-d} ${portDir} ${norecurse}
++
+ if [ -n "${save_SRCBASE}" ]; then
+ export SRCBASE=${save_SRCBASE}
+ else
+ unset SRCBASE
+ fi
+
+- addPortToBuild_cleanup ${jail} ${portsTree}
++ addPortToBuild_cleanup ${jail} ${portsTree} ${build}
+ }
+
+ addPort () {
+Index: lib/tinderlib.sh
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/tinderlib.sh,v
+retrieving revision 1.83
+diff -u -r1.83 tinderlib.sh
+--- lib/tinderlib.sh 10 Jun 2013 16:49:51 -0000 1.83
++++ lib/tinderlib.sh 5 Oct 2013 16:30:32 -0000
+@@ -498,9 +498,7 @@
+ save_IFS=${IFS}
+ IFS='
+ '
+- # Allow SRCBASE to be overridden
+- eval "export SRCBASE=${SRCBASE:-`realpath $(tinderLoc jail ${jail})/src`}" \
+- >/dev/null 2>&1
++ # Do not set SRCBASE here-- we use chroots nowadays so /usr/src is there
+
+ # Set ARCH (needed for cross-building)
+ export ARCH=$(${tc} getJailArch -j ${jail})
+@@ -524,13 +522,6 @@
+ eval "export __MAKE_CONF=${jailBase}/make.conf" >/dev/null 2>&1
+ eval "export LOCALBASE=/nonexistentlocal" >/dev/null 2>&1
+ eval "export PKG_DBDIR=/nonexistentdb" >/dev/null 2>&1
+- if [ x"${OPTIONS_ENABLED}" != x"1" ]; then
+- eval "export PORT_DBDIR=/nonexistentportdb" >/dev/null 2>&1
+- else
+- optionsDir=$(tinderLoc options ${build})
+-
+- eval "export PORT_DBDIR=${optionsDir}" >/dev/null 2>&1
+- fi
+ eval "export LINUXBASE=/nonexistentlinux" >/dev/null 2>&1
+ eval "unset DISPLAY" >/dev/null 2>&1
+ }
+Index: lib/Tinderbox/MakeCache.pm
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/Tinderbox/MakeCache.pm,v
+retrieving revision 1.12
+diff -u -r1.12 MakeCache.pm
+--- lib/Tinderbox/MakeCache.pm 4 Mar 2012 12:53:08 -0000 1.12
++++ lib/Tinderbox/MakeCache.pm 5 Oct 2013 16:30:32 -0000
+@@ -49,6 +49,7 @@
+ CACHE => undef,
+ SEEN => undef,
+ BASEDIR => shift,
++ CHROOT => shift,
+ }, $name;
+
+ $self;
+@@ -67,7 +68,10 @@
+
+ $tmp = '-V ' . join(' -V ', @makeTargets);
+ my $dir = $self->{BASEDIR} . '/' . $port;
+- @ret = split("\n", `cd $dir && make $tmp`);
++ my $cmd = "cd $dir && make $tmp";
++ $cmd = "chroot $self->{CHROOT} /bin/sh -c '$cmd'";
++
++ @ret = split("\n", `$cmd`);
+
+ foreach $tmp (@makeTargets) {
+ $self->{CACHE}->{$port}{$tmp} = shift @ret;
+? .fslckout
+? .fslckout-mjFA3F63973
+Index: lib/tc_command.sh
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/tc_command.sh,v
+retrieving revision 1.176
+diff -u -r1.176 tc_command.sh
+--- lib/tc_command.sh 7 Oct 2013 16:36:54 -0000 1.176
++++ lib/tc_command.sh 7 Oct 2013 18:34:20 -0000
+@@ -2049,6 +2049,7 @@
+ cleanupMounts -t buildoptions -b ${build}
+ cleanupMounts -t jail -j ${jail}
+ cleanupMounts -t portstree -p ${portsTree}
++ cleanenv
+ }
+
+ addPortToBuild () {