Merge branch '12940-arvbox-runit' closes #12940
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Wed, 10 Jan 2018 15:23:10 +0000 (10:23 -0500)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Wed, 10 Jan 2018 15:23:10 +0000 (10:23 -0500)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

tools/arvbox/bin/arvbox
tools/arvbox/lib/arvbox/docker/Dockerfile.base
tools/arvbox/lib/arvbox/docker/common.sh
tools/arvbox/lib/arvbox/docker/runit/1 [new file with mode: 0755]
tools/arvbox/lib/arvbox/docker/runit/2 [new file with mode: 0755]
tools/arvbox/lib/arvbox/docker/runit/3 [new file with mode: 0755]
tools/arvbox/lib/arvbox/docker/runit/ctrlaltdel [new file with mode: 0755]
tools/arvbox/lib/arvbox/docker/service/docker/run
tools/arvbox/lib/arvbox/docker/service/ready/run-service
tools/arvbox/lib/arvbox/docker/service/workbench/run

index f4a65da537ecb96f861c946ba8c92a2938dd1600..234d15aecd03d42537b5f93f02a4dcd8b3f0340b 100755 (executable)
@@ -220,8 +220,8 @@ run() {
                        "--volume=$PIPCACHE:/var/lib/pip:rw" \
                        "--volume=$NPMCACHE:/var/lib/npm:rw" \
                        "--volume=$GOSTUFF:/var/lib/gopath:rw" \
-                       arvados/arvbox-dev$TAG \
-                       /usr/local/bin/runsvinit -svdir=/etc/test-service
+                      "--env=SVDIR=/etc/test-service" \
+                       arvados/arvbox-dev$TAG
 
                 docker exec -ti \
                        $ARVBOX_CONTAINER \
index f29066ec9fcb71de007837e295de61bcefc85ffa..83d507b62b4931163b73dded52240705ebd2ae70 100644 (file)
@@ -62,10 +62,6 @@ RUN mkdir -p /etc/apt/sources.list.d && \
 
 RUN rm -rf /var/lib/postgresql && mkdir -p /var/lib/postgresql
 
-RUN cd /root && \
-    GOPATH=$PWD go get github.com/curoverse/runsvinit && \
-    install bin/runsvinit /usr/local/bin
-
 ENV PJSVERSION=1.9.8
 # bitbucket is the origin, but downloads fail sometimes, so use our own mirror instead.
 #ENV PJSURL=https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-${PJSVERSION}-linux-x86_64.tar.bz2
@@ -96,8 +92,9 @@ ADD crunch-setup.sh gitolite.rc \
     application_yml_override.py api-setup.sh \
     /usr/local/lib/arvbox/
 
-RUN mkdir /etc/docker
-ADD daemon.json /etc/docker/
+ADD runit /etc/runit
 
 # Start the supervisor.
-CMD ["/usr/local/bin/runsvinit"]
+ENV SVDIR /etc/service
+STOPSIGNAL SIGINT
+CMD ["/sbin/runit"]
index c5e15233bcb9720a7a8f7d416a8bf274e42fa623..2cb8473657e7705bc0759bd054da0e0d57222754 100644 (file)
@@ -46,17 +46,16 @@ run_bundler() {
     else
         frozen=""
     fi
-    if ! test -x bundle ; then
+    if ! test -x /var/lib/gems/bin/bundler ; then
         bundlergem=$(ls -r $GEM_HOME/cache/bundler-*.gem 2>/dev/null | head -n1 || true)
         if test -n "$bundlergem" ; then
             flock /var/lib/gems/gems.lock gem install --local --no-document $bundlergem
         else
             flock /var/lib/gems/gems.lock gem install --no-document bundler
         fi
-        ln -sf /var/lib/gems/bin/bundle /usr/local/bin
     fi
-    if ! flock /var/lib/gems/gems.lock bundle install --path $GEM_HOME --local --no-deployment $frozen "$@" ; then
-        flock /var/lib/gems/gems.lock bundle install --path $GEM_HOME --no-deployment $frozen "$@"
+    if ! flock /var/lib/gems/gems.lock bundler install --path $GEM_HOME --local --no-deployment $frozen "$@" ; then
+        flock /var/lib/gems/gems.lock bundler install --path $GEM_HOME --no-deployment $frozen "$@"
     fi
 }
 
diff --git a/tools/arvbox/lib/arvbox/docker/runit/1 b/tools/arvbox/lib/arvbox/docker/runit/1
new file mode 100755 (executable)
index 0000000..fea9cf6
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+# system one time tasks
+
+PATH=/command:/sbin:/bin:/usr/sbin:/usr/bin
+
+touch /run/runit.stopit
+chmod 0 /run/runit.stopit
diff --git a/tools/arvbox/lib/arvbox/docker/runit/2 b/tools/arvbox/lib/arvbox/docker/runit/2
new file mode 100755 (executable)
index 0000000..6b092ea
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+PATH=/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
+
+echo
+echo "Arvados-in-a-box starting"
+echo
+
+exec env - PATH=$PATH \
+runsvdir -P $SVDIR
diff --git a/tools/arvbox/lib/arvbox/docker/runit/3 b/tools/arvbox/lib/arvbox/docker/runit/3
new file mode 100755 (executable)
index 0000000..525b96b
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh
+exec 2>&1
+
+PATH=/command:/sbin:/bin:/usr/sbin:/usr/bin
+
+LAST=0
+test -x /run/runit.reboot && LAST=6
+
+echo 'Waiting for services to stop...'
+sv -w196 force-stop /service/*
+sv exit /service/*
+
+echo 'Shutdown...'
+/etc/init.d/rc $LAST
diff --git a/tools/arvbox/lib/arvbox/docker/runit/ctrlaltdel b/tools/arvbox/lib/arvbox/docker/runit/ctrlaltdel
new file mode 100755 (executable)
index 0000000..02bb2ea
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+exec 2>&1
+
+PATH=/command:/sbin:/bin:/usr/sbin:/usr/bin
+
+LAST=0
+test -x /run/runit.reboot && LAST=6
+
+echo 'Waiting for services to stop...'
+sv -w196 force-stop $SVDIR/*
+sv exit $SVDIR/*
+
+echo 'Shutdown...'
index cbc8486d6ee88f23afb516ed81e98e4bd89469f7..b6dbaf1abb2db174ccceca73258bd0727ca850e2 100755 (executable)
@@ -100,6 +100,12 @@ rm -rf /var/run/docker.pid
 read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat
 trap "kill -TERM -$pgrp; exit" EXIT TERM KILL SIGKILL SIGTERM SIGQUIT
 
-if ! docker daemon --storage-driver=overlay $DOCKER_DAEMON_ARGS ; then
-    docker daemon $DOCKER_DAEMON_ARGS
+mkdir /etc/docker
+# Prefer overlay2
+echo '{"storage-driver": "overlay2"}' > /etc/docker/daemon.json
+
+if ! dockerd ; then
+    # Oops overlay2 didn't work, let docker choose a default.
+    echo '{}' > /etc/docker/daemon.json
+    dockerd
 fi
index 3c7eff61765a8b638a9722cf6f489895e3d0c85f..6d5fe243e09d6ec639f166ba618001e94bc7f4d8 100755 (executable)
@@ -8,9 +8,6 @@
 set -eu -o pipefail
 
 if ! [[ -d /tmp/arvbox-ready ]] ; then
-   echo
-   echo "Arvados-in-a-box starting"
-   echo
    echo "Note: if this is a fresh arvbox installation, it may take 10-15 minutes (or longer) to download and"
    echo "install dependencies.  Use \"arvbox log\" to monitor the progress of specific services."
    echo
index a41922bb343948656d838f3d958c0b8131fa9d26..d90a2e2f8170d9d8d5960b69ba903822538a0ce0 100755 (executable)
@@ -1,10 +1,12 @@
-#!/bin/sh
+#!/bin/bash
 # Copyright (C) The Arvados Authors. All rights reserved.
 #
 # SPDX-License-Identifier: AGPL-3.0
 
 set -e
 
+.  /usr/local/lib/arvbox/common.sh
+
 /usr/local/lib/arvbox/runsu.sh $0-service $1
 
 cd /usr/src/arvados/apps/workbench