Some programs that need to be run are compiled binaries. Unfortunately, this is not straightforward, because we need to use a shared file system to provide executable utilities for both Solaris and Linux systems. Because of this, we need another intermediate symlinked script between ISGScriptStartTemplate and the binary itself to ensure the correct executable is selected.
A precondition for this script is that setup
has already been run properly, likely via start_template
.
This simplifies the operation of binary_fork_template
as it can assume it already has a sensible path.
There is a helper program that tries to report a helpful error message if the binary cannot be executed.
This could happen, for example, if the user had permission to execute binary_fork_template
(which all users do out of necessity),
but the binaries are restricted to course accounts.
execute () { if [ ! -x "$(new-which "$1")" ]; then echo "Error: Cannot execute the binary for $progname ($1)" >&2 exit -1 fi exec "$@" }
Then, all the program has to do otherwise is determine what architecture it is running on.
To do this, it can make use of uname
.
readonly progname="$(basename "$0" _impl)" if [ "$(uname -s)" = "SunOS" ]; then execute "${progname}_solaris" "$@" else execute "${progname}_linux" "$@" fi
Because we know setup
has already been run,
the only requirement is that the _solaris
and _linux
executables exist somewhere in the subdirectories of ~isg/bin
.