OK, I found a solution after taking a longer look at the bundlerEnv
Each gem is packaged as a separate derivation (which makes complete sense).
BundlerEnv offers the `gemConfig', in which one can set another postInstall

In my case, the following snippet works:

with pkgs; (bundlerEnv {
    name ="ruby-protoc-v3";
    inherit ruby;
    gemfile= ./Gemfile;
    lockfile = ./Gemfile.lock;
    gemset = ./gemset.nix;
    gemConfig = {
      grpc-tools = attr: {
        postInstall= ''
          for file in $(find
$out/lib/ruby/gems/2.3.0/gems/grpc-tools-1.0.1/bin/x86_64-linux -type f
-executable ); do
            patchelf --set-interpreter
${stdenv.glibc}/lib/ld-linux-x86-64.so.2 $file

I think that I got confused by the fact that I did not see any symlinks
during my investigation. I must have missed that somewhere.

- Maarten

2016-12-01 21:24 GMT+01:00 Maarten Hoogendoorn <maar...@moretea.nl>:

> Hi,
> I'm trying to build a gem that has vendored a statically compiled program
> (that still depends on /lib64/ld-linux-x86-64.so.2).
> I've tried to use patchelf in the postBuild in a bundlerEnv, but it's
> complaining about not having write permissions to $out
> I wrote a one-liner to check for .nix files that contained both the words
> bundlerEnv and patchelf, but only the top-level/all-packages.nix matched
> both.
> I tried to create another derivation, that pulls all file in from the
> bundlerEnv, and then patches the elf file, but it's resulting in the same
> error message.
> A nix-expression that reproduces this error is attached.
nix-dev mailing list

Reply via email to