{ lib, stdenv, fetchFromGitHub , autoreconfHook, pkg-config , glibcLocales, kmod, coreutils, perl , dmidecode, hwdata, sqlite, libtraceevent , fetchpatch , nixosTests }: stdenv.mkDerivation rec { pname = "rasdaemon"; version = "0.8.0"; src = fetchFromGitHub { owner = "mchehab"; repo = "rasdaemon"; rev = "v${version}"; sha256 = "sha256-BX3kc629FOh5cnD6Sa/69wKdhmhT3Rpz5ZvhnD4MclQ="; }; patches = [ (fetchpatch { # fix #295002 (segfault on AMD), will be in the release after 0.8.0 name = "fix crash on AMD"; url = "https://github.com/mchehab/rasdaemon/commit/f1ea76375281001cdf4a048c1a4a24d86c6fbe48.patch"; hash = "sha256-1VPDTrAsvZGiGbh52EUdG6tYV/n6wUS0mphOSXzran0="; }) ]; nativeBuildInputs = [ autoreconfHook pkg-config ]; buildInputs = [ coreutils glibcLocales hwdata kmod sqlite libtraceevent (perl.withPackages (ps: with ps; [ DBI DBDSQLite ])) ] ++ lib.optionals (!stdenv.isAarch64) [ dmidecode ]; configureFlags = [ "--sysconfdir=/etc" "--localstatedir=/var" "--with-sysconfdefdir=${placeholder "out"}/etc/sysconfig" "--enable-all" ]; # The installation attempts to create the following directories: # /var/lib/rasdaemon # location of the RAS event log generated by rasdaemon -r # /etc/ras/dimm_labels.d # location of the DIMM labels generated by ras-mc-ctl # /etc/sysconfig/rasdaemon # location of rasdaemon config file, currently only used for CE PFA config # these are optional (for logging, DIMM label storage and user config) # /var/lib/rasdaemon should be created by the NixOS module # /etc/ras/dimm_labels.d should probably be generated, # from user supplied content, in the NixOS module # /etc/sysconfig/rasdaemon should be generated if there is user supplied content # and default to $out/etc/sysconfig/rasdaemon which should hold the supplied default # therefore, stripping these from the generated Makefile # (needed in the config flags because those set where the tools look for these) # easy way out, ends up installing /nix/store/...rasdaemon/bin in $out postConfigure = '' substituteInPlace Makefile \ --replace '"$(DESTDIR)/etc/ras/dimm_labels.d"' '"$(prefix)/etc/ras/dimm_labels.d"' ''; outputs = [ "out" "dev" "man" "inject" ]; postInstall = '' install -Dm 0755 contrib/edac-fake-inject $inject/bin/edac-fake-inject install -Dm 0755 contrib/edac-tests $inject/bin/edac-tests ''; postFixup = '' # Fix dmidecode and modprobe paths substituteInPlace $out/bin/ras-mc-ctl \ --replace 'find_prog ("modprobe") or exit (1)' '"${kmod}/bin/modprobe"' '' + lib.optionalString (!stdenv.isAarch64) '' substituteInPlace $out/bin/ras-mc-ctl \ --replace 'find_prog ("dmidecode")' '"${dmidecode}/bin/dmidecode"' ''; passthru.tests = nixosTests.rasdaemon; meta = with lib; { description = '' A Reliability, Availability and Serviceability (RAS) logging tool using EDAC kernel tracing events ''; longDescription = '' Rasdaemon is a RAS (Reliability, Availability and Serviceability) logging tool. It records memory errors, using the EDAC tracing events. EDAC is a Linux kernel subsystem with handles detection of ECC errors from memory controllers for most chipsets on i386 and x86_64 architectures. EDAC drivers for other architectures like arm also exists. ''; homepage = "https://github.com/mchehab/rasdaemon"; license = licenses.gpl2Plus; platforms = platforms.linux; changelog = "https://github.com/mchehab/rasdaemon/blob/v${version}/ChangeLog"; maintainers = with maintainers; [ evils ]; }; }