1{stdenv, fetchurl, fetchFromGitHub, cmake, luajit, kernel, zlib, ncurses, perl, jsoncpp, libb64, openssl, curl}:
2let
3 inherit (stdenv.lib) optional optionalString;
4 baseName = "sysdig";
5 version = "0.10.0";
6 # sysdig-0.11.0 depends on some headers from jq which are not
7 # installed by default.
8 # Relevant sysdig issue: https://github.com/draios/sysdig/issues/626
9 jq-prefix = fetchurl {
10 url="https://github.com/stedolan/jq/releases/download/jq-1.5/jq-1.5.tar.gz";
11 sha256="0g29kyz4ykasdcrb0zmbrp2jqs9kv1wz9swx849i2d1ncknbzln4";
12 };
13in
14stdenv.mkDerivation {
15 name = "${baseName}-${version}";
16
17 src = fetchurl {
18 url = "https://github.com/draios/sysdig/archive/${version}.tar.gz";
19 sha256 = "0hs0r9z9j7padqdcj69bwx52iw6gvdl0w322qwivpv12j3prcpsj";
20 };
21
22 buildInputs = [
23 cmake zlib luajit ncurses perl jsoncpp libb64 openssl curl
24 ];
25
26 hardeningDisable = [ "pic" ];
27
28 postPatch = ''
29 sed '1i#include <cmath>' -i userspace/libsinsp/{cursesspectro,filterchecks}.cpp
30 '';
31
32 cmakeFlags = [
33 "-DUSE_BUNDLED_DEPS=OFF"
34 "-DUSE_BUNDLED_JQ=ON"
35 "-DSYSDIG_VERSION=${version}"
36 ] ++ optional (kernel == null) "-DBUILD_DRIVER=OFF";
37
38 preConfigure = ''
39 export INSTALL_MOD_PATH="$out"
40 '' + optionalString (kernel != null) ''
41 export KERNELDIR="${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
42 '';
43
44 preBuild = ''
45 mkdir -p jq-prefix/src
46 cp ${jq-prefix} jq-prefix/src/jq-1.5.tar.gz
47 '';
48
49 postInstall = optionalString (kernel != null) ''
50 make install_driver
51 kernel_dev=${kernel.dev}
52 kernel_dev=''${kernel_dev#/nix/store/}
53 kernel_dev=''${kernel_dev%%-linux*dev*}
54 if test -f "$out/lib/modules/${kernel.modDirVersion}/extra/sysdig-probe.ko"; then
55 sed -i "s#$kernel_dev#................................#g" $out/lib/modules/${kernel.modDirVersion}/extra/sysdig-probe.ko
56 else
57 xz -d $out/lib/modules/${kernel.modDirVersion}/extra/sysdig-probe.ko.xz
58 sed -i "s#$kernel_dev#................................#g" $out/lib/modules/${kernel.modDirVersion}/extra/sysdig-probe.ko
59 xz $out/lib/modules/${kernel.modDirVersion}/extra/sysdig-probe.ko
60 fi
61 '';
62
63 meta = with stdenv.lib; {
64 description = "A tracepoint-based system tracing tool for Linux (with clients for other OSes)";
65 license = licenses.gpl2;
66 maintainers = [maintainers.raskin];
67 platforms = platforms.linux ++ platforms.darwin;
68 downloadPage = "https://github.com/draios/sysdig/releases";
69 };
70}