From 447e08c3dad83341f5c7473ab229e29f8aa129cc Mon Sep 17 00:00:00 2001 From: gfrascadorio Date: Tue, 21 Sep 2021 16:57:16 -0600 Subject: [PATCH] sleuthkit: add build for JNI libraries Enhance sleuthkit package so it builds the optional JNI libraries that allow clients like autopsy to use sleuthkit. --- pkgs/tools/system/sleuthkit/default.nix | 76 +++++++++++++++++++++---- 1 file changed, 66 insertions(+), 10 deletions(-) diff --git a/pkgs/tools/system/sleuthkit/default.nix b/pkgs/tools/system/sleuthkit/default.nix index 6dc84da1e14e..175c34020307 100644 --- a/pkgs/tools/system/sleuthkit/default.nix +++ b/pkgs/tools/system/sleuthkit/default.nix @@ -1,33 +1,89 @@ -{ lib, stdenv, fetchFromGitHub, autoreconfHook, libewf, afflib, openssl, zlib }: +{ lib, stdenv, fetchFromGitHub, autoreconfHook, libewf, afflib, openssl, zlib, openjdk, perl, ant }: stdenv.mkDerivation rec { version = "4.11.0"; pname = "sleuthkit"; - src = fetchFromGitHub { + sleuthsrc = fetchFromGitHub { owner = "sleuthkit"; repo = "sleuthkit"; rev = "${pname}-${version}"; - sha256 = "sha256-cY55zK6N3tyCLBJtZn4LhK9kLkikJjg640Pm/NA0ALY="; + sha256 = "1dh06k8grrj3wcx3h9m490p69bw41dz6cv8j5j1drpldmv67k3ki"; }; + # Fetch libraries using a fixed output derivation + rdeps = stdenv.mkDerivation rec { + + version = "1.0"; + pname = "sleuthkit-deps"; + nativeBuildInputs = [ openjdk ant ]; + + src = sleuthsrc; + + # unpack, build, install + dontConfigure = true; + + buildPhase = '' + export IVY_HOME=$NIX_BUILD_TOP/.ant + pushd bindings/java + ant retrieve-deps + popd + pushd case-uco/java + ant get-ivy-dependencies + popd + ''; + + installPhase = '' + export IVY_HOME=$NIX_BUILD_TOP/.ant + mkdir -m 755 -p $out/bindings/java + cp -r bindings/java/lib $out/bindings/java + mkdir -m 755 -p $out/case-uco/java + cp -r case-uco/java/lib $out/case-uco/java + cp -r $IVY_HOME/lib $out + chmod -R 755 $out/lib + ''; + + outputHashMode = "recursive"; + outputHash = "0fq7v6zlgybg4v6k9wqjlk4gaqgjrpihbnr182vaqriihflav2s8"; + outputHashAlgo = "sha256"; + }; + + src = sleuthsrc; + postPatch = '' substituteInPlace tsk/img/ewf.cpp --replace libewf_handle_read_random libewf_handle_read_buffer_at_offset ''; enableParallelBuilding = true; - nativeBuildInputs = [ autoreconfHook ]; + nativeBuildInputs = [ autoreconfHook openjdk perl ant rdeps ]; buildInputs = [ libewf afflib openssl zlib ]; - # Hack to fix the RPATH. - preFixup = "rm -rf */.libs"; + # Hack to fix the RPATH + preFixup = '' + rm -rf */.libs + ''; - meta = { + postUnpack = '' + export IVY_HOME="$NIX_BUILD_TOP/.ant" + export JAVA_HOME="${openjdk}" + export ant_args="-Doffline=true -Ddefault-jar-location=$IVY_HOME/lib" + + # pre-positioning these jar files allows -Doffline=true to work + mkdir -p source/{bindings,case-uco}/java $IVY_HOME + cp -r ${rdeps}/bindings/java/lib source/bindings/java + chmod -R 755 source/bindings/java + cp -r ${rdeps}/case-uco/java/lib source/case-uco/java + chmod -R 755 source/case-uco/java + cp -r ${rdeps}/lib $IVY_HOME + chmod -R 755 $IVY_HOME + ''; + + meta = with lib; { description = "A forensic/data recovery tool"; homepage = "https://www.sleuthkit.org/"; - maintainers = [ lib.maintainers.raskin ]; - platforms = lib.platforms.linux; - license = lib.licenses.ipl10; + maintainers = with maintainers; [ raskin gfrascadorio ]; + platforms = platforms.linux; + license = licenses.ipl10; }; }