1{stdenv, fetchurl, fetchFromGitHub, cmake, luajit, kernel, zlib, ncurses, perl, jsoncpp, libb64, openssl, curl, jq, gcc, fetchpatch}:
2
3with stdenv.lib;
4stdenv.mkDerivation rec {
5 name = "sysdig-${version}";
6 version = "0.17.0";
7
8 src = fetchFromGitHub {
9 owner = "draios";
10 repo = "sysdig";
11 rev = version;
12 sha256 = "0xw4in2yb3ynpc8jwl95j92kbyr7fzda3mab8nyxcyld7gshrlvd";
13 };
14
15 buildInputs = [
16 cmake zlib luajit ncurses perl jsoncpp libb64 openssl curl jq gcc
17 ];
18
19 hardeningDisable = [ "pic" ];
20
21 cmakeFlags = [
22 "-DUSE_BUNDLED_DEPS=OFF"
23 "-DSYSDIG_VERSION=${version}"
24 ] ++ optional (kernel == null) "-DBUILD_DRIVER=OFF";
25
26 # needed since luajit-2.1.0-beta3
27 NIX_CFLAGS_COMPILE = [
28 "-DluaL_reg=luaL_Reg"
29 "-DluaL_getn(L,i)=((int)lua_objlen(L,i))"
30 ];
31
32 postPatch = ''
33 sed 's|curl/curlbuild\.h|curl/system.h|' -i \
34 userspace/libsinsp/marathon_http.cpp \
35 userspace/libsinsp/mesos_http.cpp
36 '';
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 libPath = makeLibraryPath [
45 zlib
46 luajit
47 ncurses
48 jsoncpp
49 curl
50 jq
51 openssl
52 libb64
53 gcc
54 stdenv.cc.cc
55 ];
56
57 postInstall = optionalString (!stdenv.isDarwin) ''
58 patchelf --set-rpath "$libPath" "$out/bin/sysdig"
59 patchelf --set-rpath "$libPath" "$out/bin/csysdig"
60 '' + optionalString (kernel != null) ''
61 make install_driver
62 kernel_dev=${kernel.dev}
63 kernel_dev=''${kernel_dev#/nix/store/}
64 kernel_dev=''${kernel_dev%%-linux*dev*}
65 if test -f "$out/lib/modules/${kernel.modDirVersion}/extra/sysdig-probe.ko"; then
66 sed -i "s#$kernel_dev#................................#g" $out/lib/modules/${kernel.modDirVersion}/extra/sysdig-probe.ko
67 else
68 xz -d $out/lib/modules/${kernel.modDirVersion}/extra/sysdig-probe.ko.xz
69 sed -i "s#$kernel_dev#................................#g" $out/lib/modules/${kernel.modDirVersion}/extra/sysdig-probe.ko
70 xz $out/lib/modules/${kernel.modDirVersion}/extra/sysdig-probe.ko
71 fi
72 '';
73
74 meta = {
75 description = "A tracepoint-based system tracing tool for Linux (with clients for other OSes)";
76 license = licenses.gpl2;
77 maintainers = [maintainers.raskin];
78 platforms = platforms.linux ++ platforms.darwin;
79 downloadPage = "https://github.com/draios/sysdig/releases";
80 };
81}