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"
 |