1{ lib
2, stdenv
3, fetchFromGitHub
4, autoreconfHook
5, libewf
6, afflib
7, openssl
8, zlib
9, openjdk
10, perl
11, ant
12}:
13
14stdenv.mkDerivation rec {
15 version = "4.12.0";
16 pname = "sleuthkit";
17
18 sleuthsrc = fetchFromGitHub {
19 owner = "sleuthkit";
20 repo = "sleuthkit";
21 rev = "${pname}-${version}";
22 hash = "sha256-NX7LNtor7UQJ6HCDz9wGpxbqrLQTTH9+543hOaQOAz4=";
23 };
24
25 # Fetch libraries using a fixed output derivation
26 rdeps = stdenv.mkDerivation rec {
27
28 version = "1.0";
29 pname = "sleuthkit-deps";
30 nativeBuildInputs = [
31 openjdk
32 ant
33 ];
34
35 src = sleuthsrc;
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 export IVY_HOME=$NIX_BUILD_TOP/.ant
52 mkdir -m 755 -p $out/bindings/java
53 cp -r bindings/java/lib $out/bindings/java
54 mkdir -m 755 -p $out/case-uco/java
55 cp -r case-uco/java/lib $out/case-uco/java
56 cp -r $IVY_HOME/lib $out
57 chmod -R 755 $out/lib
58 '';
59
60 outputHashMode = "recursive";
61 outputHash = "0fq7v6zlgybg4v6k9wqjlk4gaqgjrpihbnr182vaqriihflav2s8";
62 outputHashAlgo = "sha256";
63 };
64
65 src = sleuthsrc;
66
67 postPatch = ''
68 substituteInPlace tsk/img/ewf.cpp --replace libewf_handle_read_random libewf_handle_read_buffer_at_offset
69 '';
70
71 enableParallelBuilding = true;
72
73 nativeBuildInputs = [
74 autoreconfHook
75 openjdk
76 perl
77 ant
78 rdeps
79 ];
80
81 buildInputs = [
82 libewf
83 afflib
84 openssl
85 zlib
86 ];
87
88 # Hack to fix the RPATH
89 preFixup = ''
90 rm -rf */.libs
91 '';
92
93 postUnpack = ''
94 export IVY_HOME="$NIX_BUILD_TOP/.ant"
95 export JAVA_HOME="${openjdk}"
96 export ant_args="-Doffline=true -Ddefault-jar-location=$IVY_HOME/lib"
97
98 # pre-positioning these jar files allows -Doffline=true to work
99 mkdir -p source/{bindings,case-uco}/java $IVY_HOME
100 cp -r ${rdeps}/bindings/java/lib source/bindings/java
101 chmod -R 755 source/bindings/java
102 cp -r ${rdeps}/case-uco/java/lib source/case-uco/java
103 chmod -R 755 source/case-uco/java
104 cp -r ${rdeps}/lib $IVY_HOME
105 chmod -R 755 $IVY_HOME
106 '';
107
108 meta = with lib; {
109 description = "A forensic/data recovery tool";
110 homepage = "https://www.sleuthkit.org/";
111 changelog = "https://github.com/sleuthkit/sleuthkit/releases/tag/sleuthkit-${version}";
112 maintainers = with maintainers; [ raskin gfrascadorio ];
113 platforms = platforms.linux;
114 sourceProvenance = with sourceTypes; [
115 fromSource
116 binaryBytecode # dependencies
117 ];
118 license = licenses.ipl10;
119 };
120}