#!/bin/bash # # Container entrypoint that waits for all spawned processes. # set -e -u # /dev/kvm has host permissions, fix it. if [ -e /dev/kvm ]; then sudo chown root:kvm /dev/kvm fi # Create a FIFO and start reading from its read end. tempdir=$(mktemp -d "/tmp/done.XXXXXXXXXX") trap 'rm -r "$tempdir"' EXIT done="$tempdir/pipe" mkfifo "$done" cat "$done" & waiter=$! # Start the workload. Its descendants will inherit the FIFO's write end. status=0 if [ "$#" -eq 0 ]; then bash 9>"$done" || status=$? else "$@" 9>"$done" || status=$? fi # When the workload and all of its descendants exit, the FIFO's write end will # be closed and `cat "$done"` will exit. Wait until it happens. This is needed # in order to handle SelfUpdater, which the workload may start in background # before exiting. wait "$waiter" exit "$status"