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;
|
||||
};
|
||||
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user