garlicd: add to index and check for error

The garlicd is now available under garlic.garlid and it requires the
extra-sandbox-path option to be properly set.
This commit is contained in:
Rodrigo Arias 2021-02-15 16:20:06 +01:00
parent d51fe5db48
commit cb5bcd7097
3 changed files with 84 additions and 17 deletions

View File

@ -0,0 +1,28 @@
{
stdenv
, nix
, garlicTool
}:
let
extraPath = "${garlicTool}:${nix}";
in
stdenv.mkDerivation {
name = "garlicd";
preferLocalBuild = true;
phases = [ "unpackPhase" "installPhase" ];
src = ./garlicd;
unpackPhase = ''
cp $src garlicd
'';
installPhase = ''
substituteInPlace garlicd \
--replace @extraPath@ ${extraPath}
mkdir -p $out/bin
cp -a garlicd $out/bin
'';
}

View File

@ -1,11 +1,32 @@
#!/bin/bash #!/bin/bash
if [ -z "$1" -o -z "$2" ]; then set -e
>&2 echo "usage: garlicd <bscpkgs directory> <mountpoint directory>"
msg() {
>&2 echo "garlicd: $@"
}
if [ -z "$1" ]; then
>&2 echo "usage: garlicd <bscpkgs directory>"
exit 1
fi fi
export PATH="@extraPath@:$PATH"
bscpkgsdir=$(readlink -f "$1") bscpkgsdir=$(readlink -f "$1")
mountdir=$(readlink -f "$2")
garlic_sandbox=$(nix show-config |\
grep extra-sandbox-paths |\
grep -o '/garlic=[^ ]*')
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" run="$mountdir/run"
completed="$mountdir/completed" completed="$mountdir/completed"
@ -14,20 +35,34 @@ completed="$mountdir/completed"
cd "$bscpkgsdir" cd "$bscpkgsdir"
echo "Waiting for experiments..."
while read -r line < "$run"; do while true; do
echo Attempting to run: $line msg "Waiting for experiments ..."
read -r tre < "$run"
echo Copying files to MN4... msg "Attempting to run: $tre"
nix copy --to ssh://mn1 $line msg "Copying files to MN4..."
results=$(garlic -RFv $line) # It fails if the user doesn't have nix-store, but is already copied
echo "The results are: $results" # with the post build hook
drv=$(nix-store -q --deriver $results) nix copy --to ssh://mn1 $tre || true
echo "drv = $drv"
if [ -z "$drv" ]; then msg "Launching the experiment..."
echo "Something failed, drv is empty. Check the logs." garlic -R "$tre"
else
echo -n "$drv" >> "$completed" msg "Fetching results..."
fi results=$(garlic -Fv "$tre")
msg "results=\"$results\""
msg "Searching drv..."
drv=$(nix-store -q --deriver $results)
msg "drv = \"$drv\""
if [ -z "$drv" ]; then
msg "Something failed, drv is empty. Check the logs."
exit 1
fi
echo -n "$drv" >> "$completed"
msg "execution completed :-)"
done done

View File

@ -124,6 +124,10 @@
resultFromLauncher = l: import (builtins.readFile l); resultFromLauncher = l: import (builtins.readFile l);
}; };
garlicd = callPackage ./garlicd/default.nix {
garlicTool = bsc.garlic.tool;
};
# Apps for Garlic # Apps for Garlic
apps = callPackage ./apps/index.nix { }; apps = callPackage ./apps/index.nix { };