| #!/bin/bash |
| |
| # see test-integration-cli for example usage of this script |
| |
| export PATH="$ABS_DEST/../binary:$ABS_DEST/../dynbinary:$ABS_DEST/../gccgo:$ABS_DEST/../dyngccgo:$PATH" |
| |
| if ! command -v docker &> /dev/null; then |
| echo >&2 'error: binary or dynbinary must be run before .integration-daemon-start' |
| false |
| fi |
| |
| # intentionally open a couple bogus file descriptors to help test that they get scrubbed in containers |
| exec 41>&1 42>&2 |
| |
| export DOCKER_GRAPHDRIVER=${DOCKER_GRAPHDRIVER:-vfs} |
| export DOCKER_EXECDRIVER=${DOCKER_EXECDRIVER:-native} |
| export DOCKER_USERLANDPROXY=${DOCKER_USERLANDPROXY:-true} |
| |
| # example usage: DOCKER_STORAGE_OPTS="dm.basesize=20G,dm.loopdatasize=200G" |
| storage_params="" |
| if [ -n "$DOCKER_STORAGE_OPTS" ]; then |
| IFS=',' |
| for i in ${DOCKER_STORAGE_OPTS}; do |
| storage_params="--storage-opt $i $storage_params" |
| done |
| unset IFS |
| fi |
| |
| if [ -z "$DOCKER_TEST_HOST" ]; then |
| # Start apparmor if it is enabled |
| if [ -e "/sys/module/apparmor/parameters/enabled" ] && [ "$(cat /sys/module/apparmor/parameters/enabled)" == "Y" ]; then |
| # reset container variable so apparmor profile is applied to process |
| # see https://github.com/docker/libcontainer/blob/master/apparmor/apparmor.go#L16 |
| export container="" |
| ( |
| set -x |
| /etc/init.d/apparmor start |
| |
| /sbin/apparmor_parser -r -W -T contrib/apparmor/ |
| ) |
| fi |
| |
| export DOCKER_HOST="unix://$(cd "$DEST" && pwd)/docker.sock" # "pwd" tricks to make sure $DEST is an absolute path, not a relative one |
| ( set -x; exec \ |
| docker --daemon --debug \ |
| --host "$DOCKER_HOST" \ |
| --storage-driver "$DOCKER_GRAPHDRIVER" \ |
| --exec-driver "$DOCKER_EXECDRIVER" \ |
| --pidfile "$DEST/docker.pid" \ |
| --userland-proxy="$DOCKER_USERLANDPROXY" \ |
| $storage_params \ |
| &> "$DEST/docker.log" |
| ) & |
| # make sure that if the script exits unexpectedly, we stop this daemon we just started |
| trap 'bundle .integration-daemon-stop' EXIT |
| else |
| export DOCKER_HOST="$DOCKER_TEST_HOST" |
| fi |
| |
| # give it a second to come up so it's "ready" |
| tries=10 |
| while ! docker version &> /dev/null; do |
| (( tries-- )) |
| if [ $tries -le 0 ]; then |
| if [ -z "$DOCKER_HOST" ]; then |
| echo >&2 "error: daemon failed to start" |
| echo >&2 " check $DEST/docker.log for details" |
| else |
| echo >&2 "error: daemon at $DOCKER_HOST fails to 'docker version':" |
| docker version >&2 || true |
| fi |
| false |
| fi |
| sleep 2 |
| done |