1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 autoreconfHook,
6 ant,
7 jdk,
8 perl,
9 stripJavaArchivesHook,
10 afflib,
11 libewf,
12 openssl,
13 zlib,
14}:
15
16stdenv.mkDerivation (finalAttrs: {
17 pname = "sleuthkit";
18 version = "4.12.1"; # Note: when updating don't forget to also update the rdeps outputHash
19
20 src = fetchFromGitHub {
21 owner = "sleuthkit";
22 repo = "sleuthkit";
23 rev = "sleuthkit-${finalAttrs.version}";
24 hash = "sha256-q51UY2lIcLijycNaq9oQIwUXpp/1mfc3oPN4syOPF44=";
25 };
26
27 # Fetch libraries using a fixed output derivation
28 rdeps = stdenv.mkDerivation {
29 name = "sleuthkit-${finalAttrs.version}-deps";
30 inherit (finalAttrs) src;
31
32 nativeBuildInputs = [
33 ant
34 jdk
35 ];
36
37 # unpack, build, install
38 dontConfigure = true;
39
40 buildPhase = ''
41 export IVY_HOME=$NIX_BUILD_TOP/.ant
42 pushd bindings/java
43 ant retrieve-deps
44 popd
45 pushd case-uco/java
46 ant get-ivy-dependencies
47 popd
48 '';
49
50 installPhase = ''
51 mkdir -m 755 -p $out/bindings/java
52 cp -r bindings/java/lib $out/bindings/java
53 mkdir -m 755 -p $out/case-uco/java
54 cp -r case-uco/java/lib $out/case-uco/java
55 cp -r $IVY_HOME/lib $out
56 chmod -R 755 $out/lib
57 '';
58
59 outputHashMode = "recursive";
60 outputHashAlgo = "sha256";
61 outputHash = "sha256-mc/KQrwn3xpPI0ngOLcpoQDaJJm/rM8XgaX//5PiRZk=";
62 };
63
64 postUnpack = ''
65 export IVY_HOME="$NIX_BUILD_TOP/.ant"
66 export ANT_ARGS="-Doffline=true -Ddefault-jar-location=$IVY_HOME/lib"
67
68 # pre-positioning these jar files allows -Doffline=true to work
69 mkdir -p source/{bindings,case-uco}/java $IVY_HOME
70 cp -r ${finalAttrs.rdeps}/bindings/java/lib source/bindings/java
71 chmod -R 755 source/bindings/java
72 cp -r ${finalAttrs.rdeps}/case-uco/java/lib source/case-uco/java
73 chmod -R 755 source/case-uco/java
74 cp -r ${finalAttrs.rdeps}/lib $IVY_HOME
75 chmod -R 755 $IVY_HOME
76 '';
77
78 postPatch = ''
79 substituteInPlace tsk/img/ewf.cpp --replace libewf_handle_read_random libewf_handle_read_buffer_at_offset
80 '';
81
82 enableParallelBuilding = true;
83
84 nativeBuildInputs = [
85 autoreconfHook
86 ant
87 jdk
88 perl
89 stripJavaArchivesHook
90 ];
91
92 buildInputs = [
93 afflib
94 libewf
95 openssl
96 zlib
97 ];
98
99 # Hack to fix the RPATH
100 preFixup = ''
101 rm -rf */.libs
102 '';
103
104 meta = with lib; {
105 description = "Forensic/data recovery tool";
106 homepage = "https://www.sleuthkit.org/";
107 changelog = "https://github.com/sleuthkit/sleuthkit/blob/${finalAttrs.src.rev}/NEWS.txt";
108 maintainers = with maintainers; [
109 raskin
110 gfrascadorio
111 ];
112 platforms = platforms.unix;
113 sourceProvenance = with sourceTypes; [
114 fromSource
115 binaryBytecode # dependencies
116 ];
117 license = licenses.ipl10;
118 };
119})