easybuilders / easybuild

EasyBuild - building software with ease
http://easybuild.io
GNU General Public License v2.0
461 stars 143 forks source link

postinstallcmds can't use commands from the installed software #809

Open surak opened 2 years ago

surak commented 2 years ago

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.

ocaisa commented 2 years ago

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

surak commented 2 years ago

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

postinstallcmds = ['straffe'] # does not work
sanity_check_commands = ['straffe'] # works
surak commented 2 years ago

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.

boegel commented 2 years ago

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...