summaryrefslogtreecommitdiffstats
path: root/nixos/modules/system
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2020-01-27 20:08:12 -0500
committerGitHub <noreply@github.com>2020-01-27 20:08:12 -0500
commit3a7fe07e3cc57c5075fc56a601160c960084bb4b (patch)
tree34af680dfd1fa94d93f0f25a85456fa23dd5750f /nixos/modules/system
parent415acd19c198f04d2b9ad6cbc6f92dd1bed7ef37 (diff)
parent45db499d2de2235388212a911b8344b58ddfda36 (diff)
Merge pull request #69057 from volth/ld-linux
add config.environment.ld-linux
Diffstat (limited to 'nixos/modules/system')
-rw-r--r--nixos/modules/system/activation/activation-script.nix33
1 files changed, 32 insertions, 1 deletions
diff --git a/nixos/modules/system/activation/activation-script.nix b/nixos/modules/system/activation/activation-script.nix
index ddfd1af4a319..495d77dfd497 100644
--- a/nixos/modules/system/activation/activation-script.nix
+++ b/nixos/modules/system/activation/activation-script.nix
@@ -162,6 +162,16 @@ in
<literal>/usr/bin/env</literal>.
'';
};
+
+ environment.ld-linux = mkOption {
+ default = false;
+ type = types.bool;
+ visible = false;
+ description = ''
+ Install symlink to ld-linux(8) system-wide to allow running unmodified ELF binaries.
+ It might be useful to run games or executables distributed inside jar files.
+ '';
+ };
};
@@ -195,9 +205,30 @@ in
''
else ''
rm -f /usr/bin/env
- rmdir --ignore-fail-on-non-empty /usr/bin /usr
+ rmdir -p /usr/bin || true
'';
+ system.activationScripts.ld-linux =
+ concatStrings (
+ mapAttrsToList
+ (target: source:
+ if config.environment.ld-linux then ''
+ mkdir -m 0755 -p $(dirname ${target})
+ ln -sfn ${escapeShellArg source} ${target}.tmp
+ mv -f ${target}.tmp ${target} # atomically replace
+ '' else ''
+ rm -f ${target}
+ rmdir $(dirname ${target}) || true
+ '')
+ {
+ "i686-linux" ."/lib/ld-linux.so.2" = "${pkgs.glibc.out}/lib/ld-linux.so.2";
+ "x86_64-linux" ."/lib/ld-linux.so.2" = "${pkgs.pkgsi686Linux.glibc.out}/lib/ld-linux.so.2";
+ "x86_64-linux" ."/lib64/ld-linux-x86-64.so.2" = "${pkgs.glibc.out}/lib64/ld-linux-x86-64.so.2";
+ "aarch64-linux"."/lib/ld-linux-aarch64.so.1" = "${pkgs.glibc.out}/lib/ld-linux-aarch64.so.1";
+ "armv7l-linux" ."/lib/ld-linux-armhf.so.3" = "${pkgs.glibc.out}/lib/ld-linux-armhf.so.3";
+ }.${pkgs.stdenv.system} or {}
+ );
+
system.activationScripts.specialfs =
''
specialMount() {