##// END OF EJS Templates
dockerrpm: run docker build process as the current user, not as root...
dockerrpm: run docker build process as the current user, not as root Docker can be run by ordinary users if they are in the docker group. The build process would however be run as a root user, only protected by the sandboxing. That caused problems with the shared directory where rpmbuild would be picky about building from sources owned by less privileged users and producing files owned by root. Instead, add a build user with the right uid/gid to the image and run the docker process as that user.

File last commit:

r22440:cf7b5c01 default
r22440:cf7b5c01 default
Show More
dockerrpm
35 lines | 1.2 KiB | text/plain | TextLexer
Mads Kiilerich
dockerrpm: check that docker is running correctly before building
r22438 #!/bin/bash -e
Matt Mackall
build: initial support for in-tree autobuilding recipes
r21255
BUILDDIR=$(dirname $0)
ROOTDIR=$(cd $BUILDDIR/..; pwd)
Mads Kiilerich
dockerrpm: check that docker is running correctly before building
r22438 if which docker.io >> /dev/null 2>&1 ; then
Matt Mackall
docker: check for docker.io first
r21642 DOCKER=docker.io
Mads Kiilerich
dockerrpm: check that docker is running correctly before building
r22438 elif which docker >> /dev/null 2>&1 ; then
Matt Mackall
build: initial support for in-tree autobuilding recipes
r21255 DOCKER=docker
Mads Kiilerich
dockerrpm: check that docker is running correctly before building
r22438 else
echo "Error: docker must be installed"
exit 1
Matt Mackall
build: initial support for in-tree autobuilding recipes
r21255 fi
Mads Kiilerich
dockerrpm: check that docker is running correctly before building
r22438 $DOCKER -h 2> /dev/null | grep -q Jansens && { echo "Error: $DOCKER is the Docking System Tray - install docker.io instead"; exit 1; }
$DOCKER version | grep -q "^Client version:" || { echo "Error: unexpected output from \"$DOCKER version\""; exit 1; }
$DOCKER version | grep -q "^Server version:" || { echo "Error: could not get docker server version - check it is running and your permissions"; exit 1; }
Mads Kiilerich
dockerrpm: better handling of specification of docker name
r22439 PLATFORM="$1"
[ "$PLATFORM" ] || { echo "Error: platform name must be specified"; exit 1; }
DFILE="$ROOTDIR/contrib/docker/$PLATFORM"
[ -f "$DFILE" ] || { echo "Error: docker file $DFILE not found"; exit 1; }
CONTAINER="hg-dockerrpm-$PLATFORM"
Mads Kiilerich
dockerrpm: run docker build process as the current user, not as root...
r22440 DBUILDUSER=build
(
cat $DFILE
echo RUN groupadd $DBUILDUSER -g `id -g`
echo RUN useradd $DBUILDUSER -u `id -u` -g $DBUILDUSER
) | $DOCKER build --tag $CONTAINER -
$DOCKER run -u $DBUILDUSER --rm -v $ROOTDIR:/hg $CONTAINER bash -c \
Mads Kiilerich
dockerrpm: better handling of specification of docker name
r22439 "cp -a hg hg-build; cd hg-build; make clean local $PLATFORM; cp packages/$PLATFORM/* /hg/packages/$PLATFORM/"