-ARVADOS_PORT=`random_free_port`
-go run ./cmd/arvados-server boot \
- -config ${ARVADOS_CONF} \
- -type test \
- -own-temporary-database \
- -controller-address :${ARVADOS_PORT} \
- -listen-host localhost > ${ARVADOS_LOG} 2>&1 &
+# ARVADOS_PORT=`random_free_port`
+# go run ./cmd/arvados-server boot \
+# -config ${ARVADOS_CONF} \
+# -type test \
+# -own-temporary-database \
+# -controller-address :${ARVADOS_PORT} \
+# -listen-host localhost > ${ARVADOS_LOG} 2>&1 &
+coproc arvboot (~/go/bin/arvados-server boot \
+ -type test \
+ -config ${ARVADOS_CONF} \
+ -own-temporary-database \
+ -timeout 20m)
+trap cleanup_arvboot ERR EXIT
+
+read controllerURL <&"${arvboot[0]}"
+
+# Copy coproc's stdout to stderr, to ensure `arvados-server boot`
+# doesn't get blocked trying to write stdout.
+exec 7<&"${arvbboot[0]}"; coproc consume_stdout (cat <&7 >&2)