diff --git a/hack/dind b/hack/dind index 7810715675..17e7dfa709 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 @@ -38,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 @@ -51,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.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 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