targetRoot=/mnt/root
fail() {
    # If starting stage 2 failed, start an interactive shell.
    echo "error while running Stage 1" 
    echo "Stage 1 should mount the root partition containing the nix store on 
\`$targetRoot'";
    echo 
    echo "stage 2 is \$stage2Init $stage2Init"
    echo "I'll launch an interactive shell you should exit with to"
    echo " - status 0: continue"
    echo "             (type exit or press ctrl-d)"
    echo " - status 2: finally switch to interactive shell (exec @staticShell) "
    echo "             (type exit 2)"
    export $stage2Init
    # no longer using exec here, so after resuming we'll have this shell as 
    @staticShell@;
    case $? in
      0) echo "resuming ..";;
      2) echo "switching to final interactive shell using exec .."; exec 
@staticShell@;;
      *) echo "got exit status $? from interactive shell, quiting." 
         echo "you'll have to reboot"; exit;;
    esac
}
trap 'fail' ERR; # if we were using bash we could even show the malicious 
command using  "$BASH_COMMAND"

new features:
* resuming
* docuemntation (what should be mounted where here)

It has been:
fail() {
    # If starting stage 2 failed, start an interactive shell.
    echo "Stage 2 failed, starting emergency shell..."
    echo "(Stage 1 init script is $stage2Init)"
    exec @staticShell@
}

Marc Weber
_______________________________________________
nix-dev mailing list
[email protected]
https://mail.cs.uu.nl/mailman/listinfo/nix-dev

Reply via email to