about summary refs log tree commit diff
path: root/pkgs/applications/networking/instant-messengers/signald
diff options
context:
space:
mode:
authorMaximilian Bosch <maximilian@mbosch.me>2021-12-13 00:45:49 +0100
committerMaximilian Bosch <maximilian@mbosch.me>2022-05-20 14:49:34 +0200
commite78bdc683c3e8d41d3b43a171e6788b2a0d74def (patch)
tree5772d7eb0d6c4e62e54b1d8f078ad800eb9569be /pkgs/applications/networking/instant-messengers/signald
parent7372d298cdf5010058071a4e6f6bdb810ee151d7 (diff)
signald: reduce closure size by switching to a custom JRE bundle
This effectively reduces the size of the runtime closure by ~79%:

    $ nix path-info ./result-old -Sh
    /nix/store/9ggmj6fmqszfvd0lg2im7qssscql0jac-signald-0.15.0	 729.0M
    $ nix path-info ./result -Sh
    /nix/store/z9bfj547j9fkyl8g0mqb1n108s7zw4w5-signald-0.15.0	 155.2M

Similar change as 2f9426ad8312101f4e84bcc4e28860695d28005f: newer Java
versions don't support a "traditional" JRE anymore, but it's possible to
create dedicated runtime environments using `jlink`[1].

[1] https://medium.com/azulsystems/using-jlink-to-build-java-runtimes-for-non-modular-applications-9568c5e70ef4

Closes #150493
Diffstat (limited to 'pkgs/applications/networking/instant-messengers/signald')
-rw-r--r--pkgs/applications/networking/instant-messengers/signald/default.nix23
1 files changed, 21 insertions, 2 deletions
diff --git a/pkgs/applications/networking/instant-messengers/signald/default.nix b/pkgs/applications/networking/instant-messengers/signald/default.nix
index 37c763d5a4b9c..e60a683a491db 100644
--- a/pkgs/applications/networking/instant-messengers/signald/default.nix
+++ b/pkgs/applications/networking/instant-messengers/signald/default.nix
@@ -1,5 +1,5 @@
 { lib, stdenv, fetchurl, fetchFromGitLab, jdk17_headless, coreutils, gradle_6, git, perl
-, makeWrapper, fetchpatch, substituteAll
+, makeWrapper, fetchpatch, substituteAll, jre_minimal
 }:
 
 let
@@ -13,6 +13,25 @@ let
     sha256 = "sha256-2cb1pyBOoOlFqJsNKXA0Q9x4wCE4yzzcfrDDtTp7HMk=";
   };
 
+  jre' = jre_minimal.override {
+    jdk = jdk17_headless;
+    # from https://gitlab.com/signald/signald/-/blob/0.18.5/build.gradle#L173
+    modules = [
+      "java.base"
+      "java.management"
+      "java.naming"
+      "java.sql"
+      "java.xml"
+      "jdk.crypto.ec"
+      "jdk.httpserver"
+
+      # for java/beans/PropertyChangeEvent
+      "java.desktop"
+      # for sun/misc/Unsafe
+      "jdk.unsupported"
+    ];
+  };
+
   # fake build to pre-download deps into fixed-output derivation
   deps = stdenv.mkDerivation {
     pname = "${pname}-deps";
@@ -67,7 +86,7 @@ in stdenv.mkDerivation rec {
     tar xvf ./build/distributions/signald.tar --strip-components=1 --directory $out/
     wrapProgram $out/bin/signald \
       --prefix PATH : ${lib.makeBinPath [ coreutils ]} \
-      --set JAVA_HOME "${jdk17_headless}"
+      --set JAVA_HOME "${jre'}"
 
     runHook postInstall
   '';