[projects/cleanbuild] docker dev

glen glen at pld-linux.org
Wed Nov 23 10:41:34 CET 2016


commit ce96f77ca0a00ce40d1ff6a8012eddb405c2f224
Author: Elan Ruusamäe <glen at delfi.ee>
Date:   Mon Jun 15 16:58:24 2015 +0300

    docker dev

 build-docker.sh   |  4 ++++
 docker-builder.sh | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 findbr            | 19 ++++++++++++---
 3 files changed, 91 insertions(+), 3 deletions(-)
---
diff --git a/build-docker.sh b/build-docker.sh
new file mode 100755
index 0000000..61befb0
--- /dev/null
+++ b/build-docker.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+# note: docker file is kept in subdir, as docker build uploads context  to docker first when building
+# and when it contains poldek cache and rpm root, it's big, unneccessary and maybe lack of permissions
+docker build -t pld/cleanbuild docker
diff --git a/docker-builder.sh b/docker-builder.sh
new file mode 100755
index 0000000..6013d08
--- /dev/null
+++ b/docker-builder.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+set -e
+
+package=$1
+image=pld/cleanbuild 
+
+name=cleanbuild-$package
+
+# cleanup
+docker kill $name && docker rm $name || :
+
+#topdir=$(rpm -E %_topdir)
+dir=$(pwd)
+topdir=$dir/rpm
+cache=$dir/cache
+install -d $topdir/bin $cache/poldek
+
+# start the container
+docker run --name=$name -d \
+	-v $topdir:/home/services/builder/rpm \
+	-v $cache/poldek:/var/cache/poldek \
+	$image
+
+if [ ! -d $topdir/packages ]; then
+	uid=$(docker exec $name id -u builder)
+	gid=$(docker exec $name getgid builder)
+	sudo chown $uid:$gid $topdir
+	docker exec $name builder --init-rpm-dir
+fi
+
+# fetch sources
+docker exec $name builder -g $package
+
+git_tag=$(GIT_DIR=$topdir/packages/$package/.git git describe --tags --always)
+buildlog=${git_tag#auto/*/}.log
+
+# remove .la dependencies
+cat > $topdir/bin/cleanup-la <<'EOF'
+#!/bin/sh
+find /usr/lib{,64} -name "*.la" -print0 | xargs -0 grep -El "dependency_libs='.+'"
+exit 0
+EOF
+chmod +x $topdir/bin/cleanup-la
+docker exec $name sh -xc '~/rpm/bin/cleanup-la'
+
+while true; do
+	./teeboth $buildlog docker exec $name builder -nn -bb -R $package && rc=$? || rc=$?
+
+	findbr=$package.findbr.log
+
+	export DOCKER_CONTAINER=$name
+	./findbr rpm/BUILD/$package $buildlog > $findbr
+
+	installed_something=false
+	while read pkg msg; do
+		./addbr $package "$pkg" "$msg"
+		installed_something=true
+	done < $findbr
+	rm -f $findbr
+
+	# go for another try
+	$installed_something && continue
+
+	# finished
+	if [ $rc -eq 0 ]; then
+		break
+	fi
+done
+
+# cleanup
+#docker kill $name && docker rm $name || :
diff --git a/findbr b/findbr
index 9e6fc5f..05917a3 100755
--- a/findbr
+++ b/findbr
@@ -4,14 +4,24 @@ use strict;
 use warnings;
 use IPC::Open2;
 use Cwd;
+use constant DOCKER => $ENV{'DOCKER_CONTAINER'} || 0;
 
 my $pwd = getcwd();
 # how to run poldek
 my @ignore = qw(vserver-packages python-devel-src);
-my @poldek = (qw(sudo poldek -n th-x86_64-ready), "--cachedir=$pwd/poldekcache",
-	"--skip-installed", "--conf=$pwd/poldekconf/poldek.conf",
+my @poldek;
+if (DOCKER) {
+	push(@poldek, "docker", "exec", DOCKER, "poldek");
+} else {
+	push(@poldek, q[sudo poldek -n th-x86_64-ready],
+		"--cachedir=$pwd/poldekcache",
+		"--conf=$pwd/poldekconf/poldek.conf",
+	);
+}
+push(@poldek, (
+	"--skip-installed", 
 	"-O", "ignore=" . (join " ", @ignore)
-);
+));
 
 # if multiple packages provide some funcionality those will be selected:
 my %preferred = (
@@ -98,6 +108,7 @@ sub add_br
 	print STDERR "\033[33;1madding: $pkg => $msg\033[0m\n";
 }
 
+use Data::Dumper;
 sub poldek_cmd
 {
 	my $cmd = shift;
@@ -107,6 +118,8 @@ sub poldek_cmd
 	my @read = <READ>;
 	close READ;
 
+	print "READ: ".Dumper \@read;
+
 	return @read if wantarray;
 	return \@read;
 }
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/projects/cleanbuild.git/commitdiff/287cc1ba718968ea23b5eec2c9e3e67bed2fbeb0



More information about the pld-cvs-commit mailing list