3e98f667ab
`jellyfin` appeared unsupported on `aarch64` due to `dotnet` platform support in nixpkgs, but there are ARM64 downloads of the `dotnet` SDKs available. This change follows the kind of pattern used in the `firecracker` packaging to support selective x86_64/arm64 downloads. With this change I can build `jellyfin` on a Raspberry Pi 4. The other content hashes have been filled in, and all build successfully, but they have not been further tested.
72 lines
2.4 KiB
Nix
72 lines
2.4 KiB
Nix
{ type
|
|
, version
|
|
, sha512
|
|
}:
|
|
assert builtins.elem type [ "aspnetcore" "netcore" "sdk"];
|
|
{ stdenv
|
|
, fetchurl
|
|
, libunwind
|
|
, openssl
|
|
, icu
|
|
, libuuid
|
|
, zlib
|
|
, curl
|
|
}:
|
|
let pname = if type == "aspnetcore" then "aspnetcore-runtime" else if type == "netcore" then "dotnet-runtime" else "dotnet-sdk";
|
|
suffix = {
|
|
x86_64-linux = "x64";
|
|
aarch64-linux = "arm64";
|
|
}."${stdenv.hostPlatform.system}" or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
|
|
urls = {
|
|
aspnetcore = "https://dotnetcli.azureedge.net/dotnet/aspnetcore/Runtime/${version}/${pname}-${version}-linux-${suffix}.tar.gz";
|
|
netcore = "https://dotnetcli.azureedge.net/dotnet/Runtime/${version}/${pname}-${version}-linux-${suffix}.tar.gz";
|
|
sdk = "https://dotnetcli.azureedge.net/dotnet/Sdk/${version}/${pname}-${version}-linux-${suffix}.tar.gz";
|
|
};
|
|
descriptions = {
|
|
aspnetcore = "ASP .NET Core runtime ${version}";
|
|
netcore = ".NET Core runtime ${version}";
|
|
sdk = ".NET SDK ${version}";
|
|
};
|
|
in stdenv.mkDerivation rec {
|
|
inherit pname version;
|
|
|
|
rpath = stdenv.lib.makeLibraryPath [ stdenv.cc.cc libunwind libuuid icu openssl zlib curl ];
|
|
|
|
src = fetchurl {
|
|
url = builtins.getAttr type urls;
|
|
sha512 = sha512."${stdenv.hostPlatform.system}" or (throw "Missing hash for host system: ${stdenv.hostPlatform.system}");
|
|
};
|
|
|
|
sourceRoot = ".";
|
|
|
|
dontPatchELF = true;
|
|
noDumpEnvVars = true;
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
mkdir -p $out/bin
|
|
cp -r ./ $out
|
|
ln -s $out/dotnet $out/bin/dotnet
|
|
runHook postInstall
|
|
'';
|
|
|
|
postFixup = ''
|
|
patchelf --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" $out/dotnet
|
|
patchelf --set-rpath "${rpath}" $out/dotnet
|
|
find $out -type f -name "*.so" -exec patchelf --set-rpath '$ORIGIN:${rpath}' {} \;
|
|
find $out -type f -name "apphost" -exec patchelf --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" --set-rpath '$ORIGIN:${rpath}' {} \;
|
|
'';
|
|
|
|
doInstallCheck = true;
|
|
installCheckPhase = ''
|
|
$out/bin/dotnet --info
|
|
'';
|
|
|
|
meta = with stdenv.lib; {
|
|
homepage = "https://dotnet.github.io/";
|
|
description = builtins.getAttr type descriptions;
|
|
platforms = [ "x86_64-linux" "aarch64-linux" ];
|
|
maintainers = with maintainers; [ kuznero ];
|
|
license = licenses.mit;
|
|
};
|
|
}
|