1{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, kernel, installShellFiles, pkg-config
2, luajit, ncurses, perl, jsoncpp, libb64, openssl, curl, jq, gcc, elfutils, tbb, protobuf, grpc
3, libyamlcpp, nlohmann_json
4}:
5
6with lib;
7let
8 # Compare with https://github.com/draios/sysdig/blob/dev/cmake/modules/falcosecurity-libs.cmake
9 libsRev = "e5c53d648f3c4694385bbe488e7d47eaa36c229a";
10 libsSha256 = "sha256-pG10y5PpDqaF/cq8oAvax5B/ls2UTRQd7tCfBjWVf0U=";
11
12 # Compare with https://github.com/falcosecurity/libs/blob/master/cmake/modules/valijson.cmake#L17
13 valijson = fetchFromGitHub {
14 owner = "tristanpenman";
15 repo = "valijson";
16 rev = "v0.6";
17 sha256 = "sha256-ZD19Q2MxMQd3yEKbY90GFCrerie5/jzgO8do4JQDoKM=";
18 };
19
20in
21stdenv.mkDerivation rec {
22 pname = "sysdig";
23 version = "0.29.3";
24
25 src = fetchFromGitHub {
26 owner = "draios";
27 repo = "sysdig";
28 rev = version;
29 sha256 = "sha256-dMLeroOd9CgvmgQdPfX8oBxQSyksZi/hP4vO03JhlF0=";
30 };
31
32 nativeBuildInputs = [ cmake perl installShellFiles pkg-config ];
33 buildInputs = [
34 luajit
35 ncurses
36 libb64
37 openssl
38 curl
39 jq
40 gcc
41 elfutils
42 tbb
43 protobuf
44 grpc
45 libyamlcpp
46 jsoncpp
47 nlohmann_json
48 ] ++ optionals (kernel != null) kernel.moduleBuildDependencies;
49
50 hardeningDisable = [ "pic" ];
51
52 postUnpack = ''
53 cp -r ${fetchFromGitHub {
54 owner = "falcosecurity";
55 repo = "libs";
56 rev = libsRev;
57 sha256 = libsSha256;
58 }} libs
59 chmod -R +w libs
60 cmakeFlagsArray+=("-DFALCOSECURITY_LIBS_SOURCE_DIR=$(pwd)/libs" "-DVALIJSON_INCLUDE=${valijson}/include")
61 '';
62
63 cmakeFlags = [
64 "-DUSE_BUNDLED_DEPS=OFF"
65 "-DSYSDIG_VERSION=${version}"
66 "-DCREATE_TEST_TARGETS=OFF"
67 ] ++ optional (kernel == null) "-DBUILD_DRIVER=OFF";
68
69 # needed since luajit-2.1.0-beta3
70 NIX_CFLAGS_COMPILE = "-DluaL_reg=luaL_Reg -DluaL_getn(L,i)=((int)lua_objlen(L,i))";
71
72 preConfigure = ''
73 if ! grep -q "${libsRev}" cmake/modules/falcosecurity-libs.cmake; then
74 echo "falcosecurity-libs checksum needs to be updated!"
75 exit 1
76 fi
77 cmakeFlagsArray+=(-DCMAKE_EXE_LINKER_FLAGS="-ltbb -lcurl -labsl_synchronization")
78 '' + optionalString (kernel != null) ''
79 export INSTALL_MOD_PATH="$out"
80 export KERNELDIR="${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
81 '';
82
83 postInstall =
84 ''
85 # Fix the bash completion location
86 installShellCompletion --bash $out/etc/bash_completion.d/sysdig
87 rm $out/etc/bash_completion.d/sysdig
88 rmdir $out/etc/bash_completion.d
89 rmdir $out/etc
90 ''
91 + optionalString (kernel != null) ''
92 make install_driver
93 kernel_dev=${kernel.dev}
94 kernel_dev=''${kernel_dev#/nix/store/}
95 kernel_dev=''${kernel_dev%%-linux*dev*}
96 if test -f "$out/lib/modules/${kernel.modDirVersion}/extra/scap.ko"; then
97 sed -i "s#$kernel_dev#................................#g" $out/lib/modules/${kernel.modDirVersion}/extra/scap.ko
98 else
99 xz -d $out/lib/modules/${kernel.modDirVersion}/extra/scap.ko.xz
100 sed -i "s#$kernel_dev#................................#g" $out/lib/modules/${kernel.modDirVersion}/extra/scap.ko
101 xz $out/lib/modules/${kernel.modDirVersion}/extra/scap.ko
102 fi
103 '';
104
105
106 meta = {
107 description = "A tracepoint-based system tracing tool for Linux (with clients for other OSes)";
108 license = with licenses; [ asl20 gpl2 mit ];
109 maintainers = [maintainers.raskin];
110 platforms = ["x86_64-linux"] ++ platforms.darwin;
111 broken = kernel != null && versionOlder kernel.version "4.14";
112 homepage = "https://sysdig.com/opensource/";
113 downloadPage = "https://github.com/draios/sysdig/releases";
114 };
115}