[PATCH 6 of 6 packaging] dockerdeb: rules to build a debian package using docker

Gregory Szorc gregory.szorc at gmail.com
Fri May 8 13:04:46 CDT 2015


On Fri, May 8, 2015 at 10:10 AM, Augie Fackler <raf at durin42.com> wrote:

> # HG changeset patch
> # User Augie Fackler <augie at google.com>
> # Date 1430932539 14400
> #      Wed May 06 13:15:39 2015 -0400
> # Node ID f7c7e1a155383727d54decd6f31b865b8a52eb8b
> # Parent  eb1672b7b846324d4275b49c09d33373e3cb1920
> dockerdeb: rules to build a debian package using docker
>
> Currently only supports jessie (current stable), but other version
> should be trivial.
>
> diff --git a/Makefile b/Makefile
> --- a/Makefile
> +++ b/Makefile
> @@ -163,6 +163,10 @@ debian-jessie:
>         mv debbuild/*.deb packages/debian-jessie
>         rm -rf debbuild
>
> +docker-debian-jessie:
> +       mkdir -p packages/debian/jessie
> +       contrib/dockerdeb jessie
> +
>  fedora20:
>         mkdir -p packages/fedora20
>         contrib/buildrpm
> diff --git a/contrib/docker/debian-jessie b/contrib/docker/debian-jessie
> new file mode 100644
> --- /dev/null
> +++ b/contrib/docker/debian-jessie
> @@ -0,0 +1,11 @@
> +FROM debian:jessie
> +RUN apt-get update && apt-get install -y \
> +  build-essential \
> +  debhelper \
> +  dh-python \
> +  devscripts \
> +  python \
> +  python-all-dev \
> +  python-docutils \
> +  zip \
> +  unzip
> diff --git a/contrib/dockerdeb b/contrib/dockerdeb
> new file mode 100755
> --- /dev/null
> +++ b/contrib/dockerdeb
> @@ -0,0 +1,39 @@
> +#!/bin/bash -eu
> +
> +. $(dirname $0)/dockerlib.sh
> +. $(dirname $0)/packagelib.sh
> +
> +BUILDDIR=$(dirname $0)
> +export ROOTDIR=$(cd $BUILDDIR/..; pwd)
> +
> +checkdocker
> +
> +PLATFORM="debian-$1"
> +shift # extra params are passed to build process
> +
> +initcontainer $PLATFORM
> +
> +DEBBUILDDIR=$ROOTDIR/packages/$PLATFORM
> +contrib/builddeb --debbuilddir $DEBBUILDDIR/staged --prepare
> +
> +DSHARED=/mnt/shared/
> +if [ $(uname) = "Darwin" ] ; then
> +    $DOCKER run -u $DBUILDUSER --rm -v $DEBBUILDDIR:$DSHARED -v
> $PWD:/mnt/hg $CONTAINER \
> +            sh -c "cd /mnt/hg && make clean && make local"
> +fi
> +$DOCKER run -u $DBUILDUSER --rm -v $DEBBUILDDIR:$DSHARED -v $PWD:/mnt/hg
> $CONTAINER \
> +  sh -c "cd /mnt/hg && make PREFIX=$DSHARED/staged/usr install"
> +$DOCKER run -u $DBUILDUSER --rm -v $DEBBUILDDIR:$DSHARED $CONTAINER \
> +  dpkg-deb --build $DSHARED/staged
> +if [ $(uname) = "Darwin" ] ; then
> +    $DOCKER run -u $DBUILDUSER --rm -v $DEBBUILDDIR:$DSHARED -v
> $PWD:/mnt/hg $CONTAINER \
> +            sh -c "cd /mnt/hg && make clean"
> +fi
>

As you alluded to in an earlier patch, uids are fragile. And mounting
volumes will almost certainly result in uid/gid badness, especially when
host OSs differ.

When I need to transfer files from my host to Docker, I typically end up
going through an intermediate, such as a tar file (with normalized
permissions) or even a Mercurial bundle so this mismatch doesn't occur.
This patch is probably fine for now. But if my experience is an indication,
this approach is brittle and will need to be replaced by something more
complicated :/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20150508/156907bf/attachment.html>


More information about the Mercurial-devel mailing list