From 255b6aadfacfd346ef413a1ffd945360276cbcf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Petazzoni?= Date: Thu, 17 Oct 2013 20:32:23 -0700 Subject: [PATCH 1/3] Work around an exotic bug affecting Docker-in-Docker + systemd. --- hack/dind | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/hack/dind b/hack/dind index 7810715675..e8b715cc9c 100755 --- a/hack/dind +++ b/hack/dind @@ -27,6 +27,31 @@ do [ -d $CGROUP/$SUBSYS ] || mkdir $CGROUP/$SUBSYS mountpoint -q $CGROUP/$SUBSYS || mount -n -t cgroup -o $SUBSYS cgroup $CGROUP/$SUBSYS + + # The two following sections address a bug which manifests itself + # by a cryptic "lxc-start: no ns_cgroup option specified" when + # trying to start containers withina container. + # The bug seems to appear when the cgroup hierarchies are not + # mounted on the exact same directories in the host, and in the + # container. + + # Named, control-less cgroups are mounted with "-o name=foo" + # (and appear as such under /proc//cgroup) but are usually + # mounted on a directory named "foo" (without the "name=" prefix). + # Systemd and OpenRC (and possibly others) both create such a + # cgroup. To avoid the aforementioned bug, we symlink "foo" to + # "name=foo". This shouldn't have any adverse effect. + echo $SUBSYS | grep -q ^name= && { + NAME=$(echo $SUBSYS | sed s/^name=//) + ln -s $SUBSYS $CGROUP/$NAME + } + + # Likewise, on at least one system, it has been reported that + # systemd would mount the CPU and CPU accounting controllers + # (respectively "cpu" and "cpuacct") with "-o cpuacct,cpu" + # but on a directory called "cpu,cpuacct" (note the inversion + # in the order of the groups). This tries to work around it. + [ $SUBSYS = cpuacct,cpu ] && ln -s $SUBSYS $CGROUP/cpu,cpuacct done # Note: as I write those lines, the LXC userland tools cannot setup From 8c38c309851c2a44b9c12bac8f29bc011ea4040f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Petazzoni?= Date: Thu, 17 Oct 2013 20:33:14 -0700 Subject: [PATCH 2/3] Remove spurious messages, and use proper args expansion. Also, display some (hopefully helpful) message when no command was given. --- hack/dind | 7 ++++--- hack/make/test | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hack/dind b/hack/dind index e8b715cc9c..17e7dfa709 100755 --- a/hack/dind +++ b/hack/dind @@ -63,7 +63,7 @@ grep -qw devices /proc/1/cgroup || echo "WARNING: it looks like the 'devices' cgroup is not mounted." # Now, close extraneous file descriptors. -pushd /proc/self/fd +pushd /proc/self/fd >/dev/null for FD in * do case "$FD" in @@ -76,9 +76,10 @@ do ;; esac done -popd +popd >/dev/null # Mount /tmp mount -t tmpfs none /tmp -exec $* +[ "$1" ] && exec "$@" +echo "You probably want to run hack/make.sh, or maybe a shell?" diff --git a/hack/make/test b/hack/make/test index c09727702d..9554f2946b 100644 --- a/hack/make/test +++ b/hack/make/test @@ -14,6 +14,7 @@ bundle_test() { for test_dir in $(find_test_dirs); do ( set -x cd $test_dir + go test -i go test -v -ldflags "$LDFLAGS" $TESTFLAGS ) done } 2>&1 | tee $DEST/test.log From 85956c70b5613439d9f239550c5c4ec360339cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Petazzoni?= Date: Thu, 17 Oct 2013 20:33:34 -0700 Subject: [PATCH 3/3] Change bundle order, and fix shell array expansion. I believe that it is helpful to build the binary first. That way, if you interrupt the tests, you still get a binary to play with. If you run the tests first and interrupt them, no binary for you! Also, the second part of this commit is an undeniable proof that Bash array syntax is nothing else than an elaborate troll by Bash authors. --- hack/make.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hack/make.sh b/hack/make.sh index f911c035f2..4eecfd0484 100755 --- a/hack/make.sh +++ b/hack/make.sh @@ -33,8 +33,8 @@ grep -q "$RESOLVCONF" /proc/mounts || { # List of bundles to create when no argument is passed DEFAULT_BUNDLES=( - test binary + test ubuntu ) @@ -67,7 +67,7 @@ main() { fi SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" if [ $# -lt 1 ]; then - bundles=($DEFAULT_BUNDLES) + bundles=(${DEFAULT_BUNDLES[@]}) else bundles=($@) fi