From b019424e5da3eb499d0f910e6bf677a53ba37846 Mon Sep 17 00:00:00 2001 From: Herwig Hochleitner Date: Fri, 16 Sep 2016 01:08:36 +0200 Subject: [PATCH 1/2] systemtap: init at 51b7ca master needs to be tracked in order to support recent kernels --- .../tools/profiling/systemtap/default.nix | 56 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 58 insertions(+) create mode 100644 pkgs/development/tools/profiling/systemtap/default.nix diff --git a/pkgs/development/tools/profiling/systemtap/default.nix b/pkgs/development/tools/profiling/systemtap/default.nix new file mode 100644 index 00000000000..615ad346479 --- /dev/null +++ b/pkgs/development/tools/profiling/systemtap/default.nix @@ -0,0 +1,56 @@ +{ fetchurl, linuxPackages, makeWrapper, runCommand, fetchgit +, elfutils, pkgconfig, gettext, stow, gnumake }: +let + ## fetchgit info + url = git://sourceware.org/git/systemtap.git; + rev = "51b7cae3023adf137081059c7cc44a13f652ba4c"; + sha256 = "18m3lf11r99f4yr1m172548lghc0i22zqbys1fwlwakbczz0a2lz"; + + inherit (linuxPackages) kernel; + version = kernel.stdenv.lib.substring 0 6 rev; + + ## stap binaries + stapBuild = kernel.stdenv.mkDerivation { + name = "systemtap-${version}"; + src = fetchgit { inherit url rev sha256; }; + buildInputs = [ elfutils pkgconfig gettext ]; + enableParallelBuilding = true; + }; + + ## a kernel build dir as expected by systemtap + kernelBuildDir = runCommand "kbuild-${kernel.version}-merged" { + buildInputs = [ stow ]; + } '' + mkdir -p $out + stowFrom () { + D="$(dirname $1)" + P="$(basename $1)" + shift + stow -d $D -t $out -v "$@" -S $P + } + stowFrom ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build --ignore=source + ln -s ${kernel.dev}/vmlinux $out/vmlinux + ln -s ${kernel}/System.map $out/System.map + ln -s ${kernel.dev}/lib/modules/${kernel.modDirVersion}/source $out/source + ''; + +in runCommand "systemtap-${kernel.version}-${version}" { + inherit stapBuild kernelBuildDir; + buildInputs = [ makeWrapper ]; + meta = with kernel.stdenv.lib; { + homepage = https://sourceware.org/systemtap/; + repositories.git = git://sourceware.org/git/systemtap.git; + description = "SystemTap provides a simple command line interface and scripting language for writing instrumentation for a live running kernel plus user-space applications."; + license = licenses.gpl2; + platforms = platforms.linux; + }; +} '' + mkdir -p $out/bin + for bin in $stapBuild/bin/*; do # hello emacs */ + ln -s $bin $out/bin/$(basename $bin) + done + rm $out/bin/stap + makeWrapper $stapBuild/bin/stap $out/bin/stap \ + --add-flags "-r $kernelBuildDir" \ + --prefix PATH : ${kernel.stdenv.cc.cc}/bin:${elfutils}/bin:${gnumake}/bin +'' diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b77bcb54f7a..5c9f8de15dc 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14963,6 +14963,8 @@ in # linux only by now synergy = callPackage ../applications/misc/synergy { }; + systemtap = callPackage ../development/tools/profiling/systemtap { }; + tabbed = callPackage ../applications/window-managers/tabbed { # if you prefer a custom config, write the config.h in tabbed.config.h # and enable From 59ccacbcd3adb5193329f412334b0017accb9d39 Mon Sep 17 00:00:00 2001 From: Herwig Hochleitner Date: Fri, 16 Sep 2016 22:09:39 +0200 Subject: [PATCH 2/2] systemtap: clean up as per feedback - shorter description - move systemtap into linuxPackages this is only necessary for the wrapper systemtap also has a dyninsn backend to instrument userspace apps we could experiment with other platforms, using this - get rid of stow build dependency - update version - minor cleanup steps --- .../tools/profiling/systemtap/default.nix | 50 +++++++++---------- pkgs/top-level/all-packages.nix | 4 +- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/pkgs/development/tools/profiling/systemtap/default.nix b/pkgs/development/tools/profiling/systemtap/default.nix index 615ad346479..b7872780245 100644 --- a/pkgs/development/tools/profiling/systemtap/default.nix +++ b/pkgs/development/tools/profiling/systemtap/default.nix @@ -1,16 +1,17 @@ -{ fetchurl, linuxPackages, makeWrapper, runCommand, fetchgit -, elfutils, pkgconfig, gettext, stow, gnumake }: +{ fetchgit, pkgconfig, gettext, runCommand, makeWrapper +, elfutils, kernel, gnumake }: let ## fetchgit info url = git://sourceware.org/git/systemtap.git; - rev = "51b7cae3023adf137081059c7cc44a13f652ba4c"; - sha256 = "18m3lf11r99f4yr1m172548lghc0i22zqbys1fwlwakbczz0a2lz"; + rev = "a10bdceb7c9a7dc52c759288dd2e555afcc5184a"; + sha256 = "1kllzfnh4ksis0673rma5psglahl6rvy0xs5v05qkqn6kl7irmg1"; + version = "2016-09-16"; - inherit (linuxPackages) kernel; - version = kernel.stdenv.lib.substring 0 6 rev; + inherit (kernel) stdenv; + inherit (stdenv) lib; ## stap binaries - stapBuild = kernel.stdenv.mkDerivation { + stapBuild = stdenv.mkDerivation { name = "systemtap-${version}"; src = fetchgit { inherit url rev sha256; }; buildInputs = [ elfutils pkgconfig gettext ]; @@ -18,39 +19,34 @@ let }; ## a kernel build dir as expected by systemtap - kernelBuildDir = runCommand "kbuild-${kernel.version}-merged" { - buildInputs = [ stow ]; - } '' + kernelBuildDir = runCommand "kbuild-${kernel.version}-merged" { } '' mkdir -p $out - stowFrom () { - D="$(dirname $1)" - P="$(basename $1)" - shift - stow -d $D -t $out -v "$@" -S $P - } - stowFrom ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build --ignore=source - ln -s ${kernel.dev}/vmlinux $out/vmlinux - ln -s ${kernel}/System.map $out/System.map - ln -s ${kernel.dev}/lib/modules/${kernel.modDirVersion}/source $out/source + for f in \ + ${kernel}/System.map \ + ${kernel.dev}/vmlinux \ + ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build/{*,.*} + do + ln -s $(readlink -f $f) $out + done ''; in runCommand "systemtap-${kernel.version}-${version}" { inherit stapBuild kernelBuildDir; buildInputs = [ makeWrapper ]; - meta = with kernel.stdenv.lib; { + meta = { homepage = https://sourceware.org/systemtap/; - repositories.git = git://sourceware.org/git/systemtap.git; - description = "SystemTap provides a simple command line interface and scripting language for writing instrumentation for a live running kernel plus user-space applications."; - license = licenses.gpl2; - platforms = platforms.linux; + repositories.git = url; + description = "Provides a scripting language for instrumentation on a live kernel plus user-space"; + license = lib.licenses.gpl2; + platforms = lib.platforms.linux; }; } '' mkdir -p $out/bin for bin in $stapBuild/bin/*; do # hello emacs */ - ln -s $bin $out/bin/$(basename $bin) + ln -s $bin $out/bin done rm $out/bin/stap makeWrapper $stapBuild/bin/stap $out/bin/stap \ --add-flags "-r $kernelBuildDir" \ - --prefix PATH : ${kernel.stdenv.cc.cc}/bin:${elfutils}/bin:${gnumake}/bin + --prefix PATH : ${lib.makeBinPath [ stdenv.cc.cc elfutils gnumake ]} '' diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5c9f8de15dc..dff536aa7f3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11397,6 +11397,8 @@ in sysdig = callPackage ../os-specific/linux/sysdig {}; + systemtap = callPackage ../development/tools/profiling/systemtap { }; + tp_smapi = callPackage ../os-specific/linux/tp_smapi { }; v86d = callPackage ../os-specific/linux/v86d { }; @@ -14963,8 +14965,6 @@ in # linux only by now synergy = callPackage ../applications/misc/synergy { }; - systemtap = callPackage ../development/tools/profiling/systemtap { }; - tabbed = callPackage ../applications/window-managers/tabbed { # if you prefer a custom config, write the config.h in tabbed.config.h # and enable