Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nix-community/nix-ld-rs
Run unpatched dynamic binaries on NixOS [maintainer=@zhaofengli @Mic92]
https://github.com/nix-community/nix-ld-rs
build-with-buildbot managed-by-renovate
Last synced: 3 months ago
JSON representation
Run unpatched dynamic binaries on NixOS [maintainer=@zhaofengli @Mic92]
- Host: GitHub
- URL: https://github.com/nix-community/nix-ld-rs
- Owner: nix-community
- License: mit
- Created: 2023-06-17T10:16:14.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-07-29T12:59:17.000Z (3 months ago)
- Last Synced: 2024-08-02T14:28:49.368Z (3 months ago)
- Topics: build-with-buildbot, managed-by-renovate
- Language: Rust
- Homepage:
- Size: 167 KB
- Stars: 128
- Watchers: 6
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# nix-ld-rs
Run unpatched dynamic binaries on NixOS.
This is a rewrite of [nix-ld](https://github.com/Mic92/nix-ld) in Rust, with extra functionalities.
It's intended to be upstreamed at some point.## Usage
`nix-ld-rs` is a drop-in replacement for `nix-ld`.
It honors the following environment variables:
- `NIX_LD`
- `NIX_LD_{system}`
- `NIX_LD_LIBRARY_PATH`
- `NIX_LD_LIBRARY_PATH_{system}`
- `NIX_LD_LOG` (error, warn, info, debug, trace)Here `{system}` is the value of the Nix `system` with dashes replaced with underscores, like `x86_64_linux`.
You can also run `nix-ld-rs` directly for a list.## Use in NixOS
```
{ pkgs, ... }: {
programs.nix-ld.enable = true;
programs.nix-ld.package = pkgs.nix-ld-rs;
}
```## Extra functionalities
- `NIX_LD_LIBRARY_PATH` doesn't affect child processes (on `x86_64-linux` and `aarch64-linux`)
- For example, shell environments spawned by the binary VSCode Server no longer get polluted## Development
The included `devShell` provides all dependencies required to build the project.
It's recommended to set up transparent emulation using binfmt-misc so you can run tests on all supported platforms:```nix
{
# x86_64-linux, i686-linux, aarch64-linux
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
}
```Run `cargo test` or `cargo nextest run` to run the integration tests, and `just test` to run them on all supported platforms (binfmt required).
### Current behavior
Launch
Seen by ld.so
Seen by getenv() and children (a)
NIX_LD_LIBRARY_PATH
LD_LIBRARY_PATH
NIX_LD_LIBRARY_PATH
LD_LIBRARY_PATH
NIX_LD_LIBRARY_PATH
LD_LIBRARY_PATH
1
(unset)
(unset)
(unset)
"/run/current-system/sw/share/nix-ld/lib"
(unset)
"" (b)
2
(unset)
"/some/lib"
(unset)
"/some/lib:/run/current-system/sw/share/nix-ld/lib"
(unset)
"/some/lib"
3
"/some/nix/ld/lib"
(unset)
(unset)
"/some/nix/ld/lib"
"/some/nix/ld/lib"
(unset)
4
"/some/nix/ld/lib"
"/some/lib"
"/some/nix/ld/lib"
"/some/lib:/some/nix/ld/lib"
"/some/nix/ld/lib"
"/some/lib"
(a) On X86-64 and AArch64 only (see `src/arch.rs`). On other platforms, the "Seen by ld.so" state will persist.
(b) The variable will be present but set to an empty string.