@@ -12,6 +12,7 @@
# the top-level directory.
import os
+import stat
import sys
import subprocess
import json
@@ -25,6 +26,7 @@ import signal
from tarfile import TarFile, TarInfo
from StringIO import StringIO
from shutil import copy, rmtree
+from pwd import getpwuid
DEVNULL = open(os.devnull, 'wb')
@@ -225,6 +227,8 @@ class BuildCommand(SubCommand):
help="""Specify a binary that will be copied to the
container together with all its dependent
libraries""")
+ parser.add_argument("--user", "-u", action="store_true",
+ help="Add the current user to images passwd")
parser.add_argument("tag",
help="Image Tag")
parser.add_argument("dockerfile",
@@ -260,6 +264,21 @@ class BuildCommand(SubCommand):
_copy_binary_with_libs(args.include_executable,
docker_dir)
+ if args.user:
+ uid = os.getuid()
+ uname = getpwuid(uid).pw_name
+ scriptlet = docker_dir+"/setup_user.sh"
+
+ # write scriptlet
+ setup = open(scriptlet, "w")
+ setup.write("#!/bin/sh\n")
+ setup.write("useradd -u %d -U %s" % (uid, uname))
+ setup.close()
+
+ st = os.stat(scriptlet)
+ os.chmod(scriptlet,
+ st.st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
+
dkr.build_image(tag, docker_dir, dockerfile,
quiet=args.quiet, argv=argv)
@@ -14,6 +14,9 @@ RUN sed -i 's/in_target mount/echo not for docker in_target mount/g' /debootstra
# Run stage 2
RUN /debootstrap/debootstrap --second-stage
+# Do we want to tweak the user?
+RUN if test -e /setup_user.sh; then /setup_user.sh; fi
+
# At this point we can install additional packages if we want
# Duplicate deb line as deb-src
RUN cat /etc/apt/sources.list | sed "s/deb/deb-src/" >> /etc/apt/sources.list
Currently all docker builds are done by exporting a tarball to the docker container and running the build as the containers root user. Other use cases are possible however and it is possible to map a part of users file-system to the container. This is useful for example for doing cross-builds of arbitrary source trees. For this to work smoothly the container needs to have a user created that maps cleanly to the host system. This adds a -u option to the docker script so that: DEB_ARCH=armhf DEB_TYPE=stable ./tests/docker/docker.py build \ -u --include-executable=arm-linux-user/qemu-arm \ debian:armhf ./tests/docker/dockerfiles/debian-bootstrap.docker Will build a container that can then be run like: docker run --rm -it -v /home/alex/lsrc/qemu/risu.git/:/src \ --user=alex:alex -w /src/ debian:armhf \ sh -c "make clean && ./configure -s && make" Signed-off-by: Alex Bennée <alex.bennee@linaro.org> --- tests/docker/docker.py | 19 +++++++++++++++++++ tests/docker/dockerfiles/debian-bootstrap.docker | 3 +++ 2 files changed, 22 insertions(+) -- 2.11.0