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