diff --git a/garlic/exp/nbody/tampi.nix b/garlic/exp/nbody/tampi.nix index c5fd69f..90bdcca 100644 --- a/garlic/exp/nbody/tampi.nix +++ b/garlic/exp/nbody/tampi.nix @@ -101,7 +101,7 @@ let isolate = {stage, conf, ...}: with conf; w.isolate { program = stageProgram stage; clusterName = "mn4"; - inherit nixPrefix; + inherit stage nixPrefix; }; extrae = {stage, conf, ...}: w.extrae { @@ -200,7 +200,8 @@ let trebuchet = stage: w.trebuchet { program = stageProgram stage; nixPrefix = common.nixPrefix; - experiment = experiment; + #experiment = experiment; + inherit stage; }; isolatedRun = stage: isolate { diff --git a/garlic/stages/experiment.nix b/garlic/stages/experiment.nix index a397fbc..0be2d8f 100644 --- a/garlic/stages/experiment.nix +++ b/garlic/stages/experiment.nix @@ -14,6 +14,12 @@ let unitsString = builtins.concatStringsSep "\n" (map (x: "${stageProgram x}") units); + + desc = builtins.concatStringsSep "\n" + (map (x: '' + # ${x} + ${x.desc}'') units); + in stdenv.mkDerivation { name = "experiment"; @@ -21,11 +27,14 @@ stdenv.mkDerivation { preferLocalBuild = true; dontPatchShebangs = true; inherit units; + inherit desc; installPhase = '' cat > $out << EOF #!/bin/sh + ${desc} + # This is an experiment formed by the following units: ${unitsString} EOF diff --git a/garlic/stages/isolate/default.nix b/garlic/stages/isolate/default.nix index 644d2c7..d3a7211 100644 --- a/garlic/stages/isolate/default.nix +++ b/garlic/stages/isolate/default.nix @@ -7,6 +7,7 @@ { program +, stage , nixPrefix , clusterName }: @@ -23,6 +24,7 @@ stdenv.mkDerivation { dontPatchShebangs = true; programPath = "/bin/stage1"; inherit program nixPrefix clusterName nixtools busybox; + desc = "# $out\n" + (if builtins.hasAttr "desc" stage then stage.desc else ""); out = "$out"; installPhase = '' diff --git a/garlic/stages/launcher/default.nix b/garlic/stages/launcher/default.nix deleted file mode 100644 index aa019da..0000000 --- a/garlic/stages/launcher/default.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - stdenv -, nixPrefix ? "" -}: - -units: - -with stdenv.lib; - -let - - stageProgram = stage: - if stage ? programPath - then "${stage}${stage.programPath}" else "${stage}"; - - unitsString = builtins.concatStringsSep "\n" - (map (x: "${stageProgram x}") units); -in -stdenv.mkDerivation { - name = "experiment"; - phases = [ "installPhase" ]; - preferLocalBuild = true; - dontPatchShebangs = true; - inherit units; - - installPhase = '' - cat > $out << EOF - #!/bin/sh - - # This is an experiment formed by the following units: - ${unitsString} - EOF - chmod +x $out - ''; -} diff --git a/garlic/stages/launcher/old.nix b/garlic/stages/launcher/old.nix deleted file mode 100644 index 763bdb4..0000000 --- a/garlic/stages/launcher/old.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - stdenv -, nixPrefix ? "" -}: - -apps: # Each app must be unique - -stdenv.mkDerivation { - name = "launcher"; - preferLocalBuild = true; - - buildInputs = [] ++ apps; - apps = apps; - phases = [ "unpackPhase" "patchPhase" "installPhase" ]; - dontPatchShebangs = true; - programPath = "/bin/run"; - - src = ./.; - - inherit nixPrefix; - - patchPhase = '' - substituteAllInPlace run - ''; - - installPhase = '' - mkdir -p $out/apps - for j in $apps; do - target=$out/apps/$(basename $j) - if [ -e $target ]; then - echo "Duplicated app: $j" - echo - echo "Provided apps: " - printf "%s\n" $apps - echo - exit 1 - fi - ln -s $j $target - done - - mkdir -p $out/bin - install -m755 run $out/bin/run - chmod +x $out/bin/* - - # Mark the launcher for upload - touch $out/.upload-to-mn - # And mark it as an experiment - touch $out/.experiment - ''; -} diff --git a/garlic/stages/launcher/run b/garlic/stages/launcher/run deleted file mode 100644 index 3c98c2c..0000000 --- a/garlic/stages/launcher/run +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -ex - ->&2 echo "Running launcher" - -if [ ! -e "/nix" ]; then - >&2 echo "missing /nix" - exit 1 -fi - -if [ -z "$GARLIC_OUT" ]; then - >&2 echo "GARLIC_OUT is not set" - exit 1 -fi - -mkdir -p "$GARLIC_OUT" -cd "$GARLIC_OUT" - -for j in @out@/apps/*; do - $j/bin/run -done diff --git a/garlic/stages/trebuchet.nix b/garlic/stages/trebuchet.nix new file mode 100644 index 0000000..85e6b05 --- /dev/null +++ b/garlic/stages/trebuchet.nix @@ -0,0 +1,38 @@ +{ + stdenv +, nixtools +}: + +{ + program +, nixPrefix +, sshHost ? "mn" +, targetCluster ? "mn4" +, stage +}: + +stdenv.mkDerivation { + name = "trebuchet"; + phases = [ "installPhase" ]; + preferLocalBuild = true; + dontPatchShebangs = true; + installPhase = '' + cat > $out <&2 echo "Launching \"\$runexp ${program}\" in MN4" + ssh ${sshHost} \$runexp ${program} + EOF + chmod +x $out + ''; +} diff --git a/garlic/stages/trebuchet/default.nix b/garlic/stages/trebuchet/default.nix deleted file mode 100644 index 6b397c7..0000000 --- a/garlic/stages/trebuchet/default.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ - stdenv -, nixtools -}: - -{ - program -, nixPrefix -, sshHost ? "mn" -, targetCluster ? "mn4" -, experiment ? "" -}: - -with stdenv.lib; - -let - - dStages = foldr (stageFn: {conf, prevStage, stages}: { - conf = conf; - prevStage = stageFn {stage=prevStage; conf=conf;}; - stages = [ (stageFn {stage=prevStage; conf=conf;}) ] ++ stages; - }) - {conf=conf; stages=[]; prevStage=null;} stages; - - stageProgram = stage: - if stage ? programPath - then "${stage}${stage.programPath}" else "${stage}"; - - linkStages = imap1 (i: s: { - num = "${toString i}"; - name = "${toString i}-${baseNameOf s.name}"; - stage = s; - programPath = stageProgram s; - }) dStages.stages; - - units = builtins.concatStringsSep "\n" - (map (x: "# ${x}") experiment.units); - - firstStage = (x: x.programPath) (elemAt linkStages 0); -in - -stdenv.mkDerivation { - name = "trebuchet"; - phases = [ "installPhase" ]; - preferLocalBuild = true; - dontPatchShebangs = true; - installPhase = '' - cat > $out <&2 echo "Launching \"\$runexp ${program}\" in MN4" - ssh ${sshHost} \$runexp ${program} - EOF - chmod +x $out - ''; -} diff --git a/garlic/stages/unit.nix b/garlic/stages/unit.nix index f20a4dd..fd834dd 100644 --- a/garlic/stages/unit.nix +++ b/garlic/stages/unit.nix @@ -30,8 +30,9 @@ let programPath = stageProgram s; }) dStages.stages; - stageList = builtins.concatStringsSep "\n" - (map (x: "# ${x.stage}") linkStages); + desc = builtins.concatStringsSep "\n" + (map (x: "# ${x.stage}") linkStages); + firstStage = (x: x.programPath) (elemAt linkStages 0); in @@ -39,12 +40,12 @@ stdenv.mkDerivation { name = "unit"; preferLocalBuild = true; phases = [ "installPhase" ]; + inherit desc; installPhase = '' cat > $out << EOF #!/bin/sh -e - # This script defines an experimental unit with the following stages: - ${stageList} + ${desc} # Set the experiment unit in the environment export GARLIC_UNIT=$(basename $out) diff --git a/overlay.nix b/overlay.nix index 72de9e2..b329277 100644 --- a/overlay.nix +++ b/overlay.nix @@ -207,10 +207,10 @@ let envRecord = callPackage ./garlic/stages/envRecord.nix { }; valgrind = callPackage ./garlic/stages/valgrind.nix { }; isolate = callPackage ./garlic/stages/isolate { }; - trebuchet = callPackage ./garlic/stages/trebuchet { }; + trebuchet = callPackage ./garlic/stages/trebuchet.nix { }; strace = callPackage ./garlic/stages/strace.nix { }; unit = callPackage ./garlic/stages/unit.nix { }; - experiment= callPackage ./garlic/stages/experiment/default.nix { }; + experiment= callPackage ./garlic/stages/experiment.nix { }; }; # Tests (move to bsc ?)