easybuild icon indicating copy to clipboard operation
easybuild copied to clipboard

postinstallcmds can't use commands from the installed software

Open surak opened this issue 3 years ago • 4 comments

The example is the following:

I have a software which uses itself to rewrite its configuration files. Let's call this software "straffe" for the sake of example.

During the eb time, I would have a postinstallcmds = ['straffe --hendrik'] to initialize the software.

But this can't happen at postinstallcmds, because straffe cannot be found yet. Installation will fail with "command not found".

It can be done, though, during sanity check. In fact, if I do a sanity_check_commands = ['straffe --hendrik'], it works just fine. Although I am not sure if sanity check is the place for this.

I understand that this is because on the post install, the module of itself is not loaded - which makes sense, so I am not sure what would be a solution here.

surak avatar Jul 07 '22 17:07 surak

I guess %(installdir)s/bin/straffe would work, just use that?

ocaisa avatar Jul 07 '22 17:07 ocaisa

Fair enough, but do you see an inconsistency between them?

postinstallcmds = ['straffe'] # does not work
sanity_check_commands = ['straffe'] # works

surak avatar Jul 07 '22 18:07 surak

Actually, it's worse than that - because if it's just a binary, fine - it will run it - but things like binaries with libraries, or python codes won't, as nothing is on the path.

surak avatar Jul 07 '22 18:07 surak

You could work around this by updating $PATH and $LD_LIBRARY_PATH in the command itself:

postinstallcmds = [
    "PATH=%(installdir)s/bin:$PATH LD_LIBRARY_PATH=%(installdir)s/lib:$LD_LIBRARY_PATH straffe --hendrik",
]

I don't think we want to do that automatically though, that could lead to surprises I think...

boegel avatar Jul 09 '22 08:07 boegel