dotnet: fix dotnet executables in darwin sandbox
This fixes: Could not load ICU data. UErrorCode: 2 We're using a hook instead of a wrapper because various things like to reference the unwrapped dotnet executable.
This commit is contained in:
parent
dd1e778bf6
commit
26c3d6878a
4 changed files with 45 additions and 20 deletions
|
@ -185,6 +185,10 @@ stdenvNoCC.mkDerivation (args // {
|
||||||
|
|
||||||
inherit selfContainedBuild useAppHost useDotnetFromEnv;
|
inherit selfContainedBuild useAppHost useDotnetFromEnv;
|
||||||
|
|
||||||
|
# propagate the runtime sandbox profile since the contents apply to published
|
||||||
|
# executables
|
||||||
|
propagatedSandboxProfile = toString dotnet-runtime.__propagatedSandboxProfile;
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit nuget-source;
|
inherit nuget-source;
|
||||||
} // lib.optionalAttrs (!lib.isDerivation nugetDeps) {
|
} // lib.optionalAttrs (!lib.isDerivation nugetDeps) {
|
||||||
|
@ -316,8 +320,4 @@ stdenvNoCC.mkDerivation (args // {
|
||||||
} // args.passthru or { };
|
} // args.passthru or { };
|
||||||
|
|
||||||
meta = (args.meta or { }) // { inherit platforms; };
|
meta = (args.meta or { }) // { inherit platforms; };
|
||||||
}
|
})
|
||||||
# ICU tries to unconditionally load files from /usr/share/icu on Darwin, which makes builds fail
|
|
||||||
# in the sandbox, so disable ICU on Darwin. This, as far as I know, shouldn't cause any built packages
|
|
||||||
# to behave differently, just the dotnet build tool.
|
|
||||||
// lib.optionalAttrs stdenvNoCC.isDarwin { DOTNET_SYSTEM_GLOBALIZATION_INVARIANT = 1; })
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ assert if type == "sdk" then packages != null else true;
|
||||||
, mkNugetDeps
|
, mkNugetDeps
|
||||||
, callPackage
|
, callPackage
|
||||||
, dotnetCorePackages
|
, dotnetCorePackages
|
||||||
|
, xmlstarlet
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
@ -47,6 +48,9 @@ let
|
||||||
|
|
||||||
targetRid = dotnetCorePackages.systemToDotnetRid stdenv.targetPlatform.system;
|
targetRid = dotnetCorePackages.systemToDotnetRid stdenv.targetPlatform.system;
|
||||||
|
|
||||||
|
sigtool = callPackage ./sigtool.nix {};
|
||||||
|
signAppHost = callPackage ./sign-apphost.nix {};
|
||||||
|
|
||||||
in
|
in
|
||||||
mkCommon type rec {
|
mkCommon type rec {
|
||||||
inherit pname version;
|
inherit pname version;
|
||||||
|
@ -54,7 +58,11 @@ mkCommon type rec {
|
||||||
# Some of these dependencies are `dlopen()`ed.
|
# Some of these dependencies are `dlopen()`ed.
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
makeWrapper
|
makeWrapper
|
||||||
] ++ lib.optional stdenv.isLinux autoPatchelfHook;
|
] ++ lib.optional stdenv.isLinux autoPatchelfHook
|
||||||
|
++ lib.optionals (type == "sdk" && stdenv.isDarwin) [
|
||||||
|
xmlstarlet
|
||||||
|
sigtool
|
||||||
|
];
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
stdenv.cc.cc
|
stdenv.cc.cc
|
||||||
|
@ -71,6 +79,16 @@ mkCommon type rec {
|
||||||
|
|
||||||
sourceRoot = ".";
|
sourceRoot = ".";
|
||||||
|
|
||||||
|
postPatch = if type == "sdk" && stdenv.isDarwin then ''
|
||||||
|
xmlstarlet ed \
|
||||||
|
--inplace \
|
||||||
|
-s //_:Project -t elem -n Import \
|
||||||
|
-i \$prev -t attr -n Project -v "${signAppHost}" \
|
||||||
|
sdk/*/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets
|
||||||
|
|
||||||
|
codesign --remove-signature packs/Microsoft.NETCore.App.Host.osx-*/*/runtimes/osx-*/native/{apphost,singlefilehost}
|
||||||
|
'' else null;
|
||||||
|
|
||||||
dontPatchELF = true;
|
dontPatchELF = true;
|
||||||
noDumpEnvVars = true;
|
noDumpEnvVars = true;
|
||||||
|
|
||||||
|
@ -108,6 +126,14 @@ mkCommon type rec {
|
||||||
$out/packs/Microsoft.NETCore.App.Host.${targetRid}/*/runtimes/${targetRid}/native/*host
|
$out/packs/Microsoft.NETCore.App.Host.${targetRid}/*/runtimes/${targetRid}/native/*host
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
# fixes: Could not load ICU data. UErrorCode: 2
|
||||||
|
propagatedSandboxProfile = lib.optionalString stdenv.isDarwin ''
|
||||||
|
(allow file-read* (subpath "/usr/share/icu"))
|
||||||
|
(allow file-read* (subpath "/private/var/db/mds/system"))
|
||||||
|
(allow mach-lookup (global-name "com.apple.SecurityServer")
|
||||||
|
(global-name "com.apple.system.opendirectoryd.membership"))
|
||||||
|
'';
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit icu;
|
inherit icu;
|
||||||
} // lib.optionalAttrs (type == "sdk") {
|
} // lib.optionalAttrs (type == "sdk") {
|
||||||
|
|
|
@ -52,7 +52,12 @@
|
||||||
run ? null,
|
run ? null,
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
built = runCommand "dotnet-test-${name}" { buildInputs = [ finalAttrs.finalPackage ]; } (''
|
sdk = finalAttrs.finalPackage;
|
||||||
|
built = runCommand "dotnet-test-${name}" {
|
||||||
|
buildInputs = [ sdk ];
|
||||||
|
# make sure ICU works in a sandbox
|
||||||
|
propagatedSandboxProfile = toString sdk.__propagatedSandboxProfile;
|
||||||
|
} (''
|
||||||
HOME=$PWD/.home
|
HOME=$PWD/.home
|
||||||
dotnet new nugetconfig
|
dotnet new nugetconfig
|
||||||
dotnet nuget disable source nuget
|
dotnet nuget disable source nuget
|
||||||
|
@ -65,11 +70,13 @@
|
||||||
if run == null
|
if run == null
|
||||||
then built
|
then built
|
||||||
else
|
else
|
||||||
runCommand "${built.name}-run" { src = built; nativeBuildInputs = runInputs; } (
|
runCommand "${built.name}-run" {
|
||||||
lib.optionalString (runtime != null) ''
|
src = built;
|
||||||
# TODO: use runtime here
|
nativeBuildInputs = [ built ] ++ runInputs;
|
||||||
export DOTNET_ROOT=${runtime}
|
} (lib.optionalString (runtime != null) ''
|
||||||
'' + run);
|
# TODO: use runtime here
|
||||||
|
export DOTNET_ROOT=${runtime}
|
||||||
|
'' + run);
|
||||||
|
|
||||||
# Setting LANG to something other than 'C' forces the runtime to search
|
# Setting LANG to something other than 'C' forces the runtime to search
|
||||||
# for ICU, which will be required in most user environments.
|
# for ICU, which will be required in most user environments.
|
||||||
|
|
|
@ -25,8 +25,6 @@ let
|
||||||
|
|
||||||
patchNupkgs = pkgsBuildHost.callPackage ./patch-nupkgs.nix {};
|
patchNupkgs = pkgsBuildHost.callPackage ./patch-nupkgs.nix {};
|
||||||
|
|
||||||
signAppHost = callPackage ./sign-apphost.nix {};
|
|
||||||
|
|
||||||
deps = mkNugetDeps {
|
deps = mkNugetDeps {
|
||||||
name = "dotnet-vmr-deps";
|
name = "dotnet-vmr-deps";
|
||||||
sourceFile = depsFile;
|
sourceFile = depsFile;
|
||||||
|
@ -51,12 +49,6 @@ let
|
||||||
-s //Project -t elem -n Import \
|
-s //Project -t elem -n Import \
|
||||||
-i \$prev -t attr -n Project -v "${./patch-restored-packages.proj}" \
|
-i \$prev -t attr -n Project -v "${./patch-restored-packages.proj}" \
|
||||||
src/*/Directory.Build.targets
|
src/*/Directory.Build.targets
|
||||||
'' + lib.optionalString stdenv.isDarwin ''
|
|
||||||
xmlstarlet ed \
|
|
||||||
--inplace \
|
|
||||||
-s //Project -t elem -n Import \
|
|
||||||
-i \$prev -t attr -n Project -v "${signAppHost}" \
|
|
||||||
src/runtime/Directory.Build.targets
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postConfigure = old.postConfigure or "" + ''
|
postConfigure = old.postConfigure or "" + ''
|
||||||
|
|
Loading…
Reference in a new issue