Add SystemTap.
svn path=/nixpkgs/trunk/; revision=21596
This commit is contained in:
parent
d5086fd5bd
commit
085bf1f2f1
73
pkgs/development/tools/profiling/systemtap/default.nix
Normal file
73
pkgs/development/tools/profiling/systemtap/default.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
@ -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
|
@ -6288,6 +6288,14 @@ let
|
|||||||
inherit (gnome) gtk glib pango libglade;
|
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 {
|
virtualbox = import ../applications/virtualization/virtualbox {
|
||||||
stdenv = stdenv_32bit;
|
stdenv = stdenv_32bit;
|
||||||
inherit fetchurl lib iasl dev86 libxslt libxml2 SDL hal
|
inherit fetchurl lib iasl dev86 libxslt libxml2 SDL hal
|
||||||
|
Loading…
x
Reference in New Issue
Block a user