Add SystemTap.

svn path=/nixpkgs/trunk/; revision=21596
This commit is contained in:
Ludovic Courtès 2010-05-04 13:32:09 +00:00
parent d5086fd5bd
commit 085bf1f2f1
3 changed files with 128 additions and 0 deletions

View file

@ -0,0 +1,73 @@
{ fetchurl, stdenv, linux, elfutils, latex2html, xmlto, docbook_xml_dtd_412
, libxml2, docbook_xsl, libxslt, texLive, texLiveExtra, ghostscript, pkgconfig
, gtkmm, libglademm, boost, perl, sqlite }:
stdenv.mkDerivation rec {
name = "systemtap-1.2";
src = fetchurl {
url = "http://sources.redhat.com/systemtap/ftp/releases/${name}.tar.gz";
sha256 = "0kxgjr8p1pnncc0l4941gzx0jsyyqjzjqar2qkcjzp266ajn9qz6";
};
patches =
stdenv.lib.optional (stdenv ? glibc) ./nixos-kernel-store-path.patch;
postPatch =
'' sed -i scripts/kernel-doc -e 's|/usr/bin/perl|${perl}/bin/perl|g'
'';
preConfigure =
# XXX: This should really be handled by TeXLive's setup-hook.
'' export TEXINPUTS="${latex2html}/texinputs:$TEXINPUTS"
export TEXINPUTS="${texLiveExtra}/texmf-dist/tex/latex/preprint:$TEXINPUTS"
echo "\$TEXINPUTS is \`$TEXINPUTS'"
'';
postConfigure =
/* Work around this:
StapParser.cxx:118: instantiated from here
/...-boost-1.42.0/include/boost/algorithm/string/compare.hpp:43: error: comparison between signed and unsigned integer expressions
*/
'' sed -i "grapher/Makefile" -e's/-Werror//g'
'';
buildInputs =
[ elfutils latex2html xmlto texLive texLiveExtra ghostscript
pkgconfig gtkmm libglademm boost sqlite
docbook_xml_dtd_412 libxml2
docbook_xsl libxslt
];
meta = {
description = "SystemTap, tools to gather information about a running GNU/Linux system";
longDescription =
'' SystemTap provides free software (GPL) infrastructure to simplify
the gathering of information about the running GNU/Linux system.
This assists diagnosis of a performance or functional problem.
SystemTap eliminates the need for the developer to go through the
tedious and disruptive instrument, recompile, install, and reboot
sequence that may be otherwise required to collect data.
SystemTap provides a simple command line interface and scripting
language for writing instrumentation for a live running kernel. We
are publishing samples, as well as enlarging the internal "tapset"
script library to aid reuse and abstraction.
Among other tracing/probing tools, SystemTap is the tool of choice
for complex tasks that may require live analysis, programmable
on-line response, and whole-system symbolic access. SystemTap can
also handle simple tracing jobs.
'';
homepage = http://sourceware.org/systemtap/;
license = "GPLv2+";
maintainers = [ stdenv.lib.maintainers.ludo ];
platforms = stdenv.lib.platforms.linux;
};
}

View file

@ -0,0 +1,47 @@
This patch makes stap(1) know about the kernel store path on NixOS.
--- systemtap-1.2/main.cxx 2010-03-22 22:51:49.000000000 +0100
+++ systemtap-1.2/main.cxx 2010-05-04 14:56:19.000000000 +0200
@@ -528,6 +528,32 @@ getmemusage ()
return oss.str();
}
+/* Read `/proc/cmdline' and extract the store path. The assumption is that
+ `/proc/cmdline' looks like this:
+
+ BOOT_IMAGE=/nix/store/sxjd69wfcr6w8jlbcc5bc20nwjliq872-linux-2.6.32.8/bzImage systemConfig=/nix/store/kiicqkjwgfvkwrg4fp3dnhwldh7dq7is-system init=/nix/store/czgncihjwx3n58xij6i1rlnz8wv6ym4j-stage-2-init.sh splash=verbose vga=0x317
+
+ This is the case on NixOS GNU/Linux. */
+static string
+kernel_store_path (void)
+{
+ ifstream proc_cmdline ("/proc/cmdline");
+ string variable_name, store_path;
+
+ getline (proc_cmdline, variable_name, '=');
+ if (variable_name == "BOOT_IMAGE")
+ {
+ string boot_image_path;
+ size_t slash_pos;
+
+ getline (proc_cmdline, boot_image_path, ' ');
+ slash_pos = boot_image_path.find_last_of ('/');
+ store_path = boot_image_path.substr (0, slash_pos);
+ }
+
+ return store_path;
+}
+
int
main (int argc, char * const argv [])
{
@@ -541,7 +567,8 @@ main (int argc, char * const argv [])
struct utsname buf;
(void) uname (& buf);
s.kernel_release = string (buf.release);
- s.kernel_build_tree = "/lib/modules/" + s.kernel_release + "/build";
+ s.kernel_build_tree =
+ kernel_store_path () + "/lib/modules/" + s.kernel_release + "/build";
// PR4186: Copy logic from coreutils uname (uname -i) to squash
// i?86->i386. Actually, copy logic from linux top-level Makefile

View file

@ -6288,6 +6288,14 @@ let
inherit (gnome) gtk glib pango libglade;
};
systemtap = import ../development/tools/profiling/systemtap {
inherit fetchurl stdenv elfutils latex2html xmlto pkgconfig boost
texLive texLiveExtra ghostscript perl docbook_xml_dtd_412 libxml2
docbook_xsl libxslt sqlite;
linux = kernel;
inherit (gnome) gtkmm libglademm;
};
virtualbox = import ../applications/virtualization/virtualbox {
stdenv = stdenv_32bit;
inherit fetchurl lib iasl dev86 libxslt libxml2 SDL hal