36 lines
		
	
	
		
			843 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			843 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
#!/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"
 |