forked from rarias/jungle
		
	It seems that bash is unable to propagate the SIGINT while reading from the FIFO. This fixes the anoying ^C^C^C problems found when running garlicd.
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| set -e
 | |
| 
 | |
| msg() {
 | |
|   >&2 echo "garlicd: $@"
 | |
| } 
 | |
| 
 | |
| if [ ! -z "$1" ]; then
 | |
|   >&2 echo "usage: garlicd"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| export PATH="@extraPath@:$PATH"
 | |
| 
 | |
| garlic_sandbox=$(nix show-config |\
 | |
|   grep extra-sandbox-paths |\
 | |
|   grep -o '/garlic=[^ ]*' || true)
 | |
| 
 | |
| if [ -z "$garlic_sandbox" ]; then
 | |
|   msg "Missing extra-sandbox-paths /garlic mountpoint"
 | |
|   msg "Check the ~/.config/nix/nix.conf file"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| mountdir_rel=$(echo "$garlic_sandbox" | sed 's@^/garlic=@@g')
 | |
| mountdir=$(readlink -f "$mountdir_rel")
 | |
| run="$mountdir/run"
 | |
| completed="$mountdir/completed"
 | |
| wipe="$mountdir/wipe"
 | |
| 
 | |
| handle_bad_signal() {
 | |
|   msg "cleaning FIFO pipes"
 | |
|   rm -f "$run" "$completed" "$wipe"
 | |
|   exit 1
 | |
| }
 | |
| 
 | |
| trap handle_bad_signal SIGINT
 | |
| 
 | |
| for fifo in "$run" "$completed" "$wipe"; do
 | |
|   if [ ! -e "$fifo" ]; then
 | |
|     mkfifo "$fifo"
 | |
|     # FIXME: Use more resctrictive permissions
 | |
|     chmod 666 "$fifo"
 | |
|   fi
 | |
| done
 | |
| 
 | |
| while true; do
 | |
|   msg "Waiting for experiments ..."
 | |
|   tre=$(head -1 "$run")
 | |
| 
 | |
|   msg "Attempting to run: $tre"
 | |
|   msg "Copying files to MN4..."
 | |
|   # It fails if the user doesn't have nix-store, but is already copied
 | |
|   # with the post build hook
 | |
|   nix copy --to ssh://mn1 $tre || true
 | |
| 
 | |
|   msg "Launching the experiment..."
 | |
|   garlic -R "$tre"
 | |
| 
 | |
|   msg "Fetching results..."
 | |
|   garlic -FKv "$tre"
 | |
| 
 | |
|   echo -n "$tre" >> "$completed"
 | |
| 
 | |
|   msg "Waiting for nix to finish the build..."
 | |
| 
 | |
|   tre2=$(head -1 "$wipe")
 | |
|   if [ "$tre" != "$tre2" ]; then
 | |
|     msg "error: trebuchet mismatch"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   msg "Removing temporal files..."
 | |
|   garlic -D "$tre"
 | |
| 
 | |
|   echo -n "$tre" >> "$completed"
 | |
| 
 | |
|   msg "Execution completed :-)"
 | |
| done
 |