diff options
-rw-r--r-- | ports-mgmt/tinderbox/Makefile | 3 | ||||
-rw-r--r-- | ports-mgmt/tinderbox/files/patch-chroot | 365 |
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 () { |