[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