commit c9099290e10301d2a19e15ece1728018c75edfd7 Author: MSVSphere Packaging Team Date: Fri Oct 25 19:31:29 2024 +0300 import systemtap-5.1-9.el10 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a4aa422 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/systemtap-5.1.tar.gz diff --git a/.systemtap.metadata b/.systemtap.metadata new file mode 100644 index 0000000..765d7d6 --- /dev/null +++ b/.systemtap.metadata @@ -0,0 +1 @@ +5a2a16c61e815ead31e655665e6ee9cf7772f1de SOURCES/systemtap-5.1.tar.gz diff --git a/SOURCES/PR31495.patch b/SOURCES/PR31495.patch new file mode 100644 index 0000000..d8d8192 --- /dev/null +++ b/SOURCES/PR31495.patch @@ -0,0 +1,29 @@ +commit b87891f5aff91b8ebbda8d9218009495848f7747 +Author: Martin Cermak +Date: Thu May 16 16:51:08 2024 +0200 + + PR31495: teach stap-prep to work with other RT kernels + +diff --git a/stap-prep b/stap-prep +index 8b429f880..2bbb6bc2f 100755 +--- a/stap-prep ++++ b/stap-prep +@@ -103,13 +103,16 @@ done + # 5.14.0-200.rt14.201.el9 -> + # "kernel-rt-debug-5.14.0-200.rt14.201.el9" + # OR?! "kernel-rt-5.14.0-200.rt14.201.el9" +-if expr "$UNAME" : ".*\.rt.*" >/dev/null; ++# OR??!"kernel-rt-5.14.0-447.el9.x86_64+rt" ++if expr "$UNAME" : ".*\.rt.*" || expr "$UNAME" : ".*\+rt.*" >/dev/null; + then + KERNEL=`echo $KERNEL | sed -e s,kernel,kernel-rt,` + fi + + KERN_ARCH=`uname -m` +-KERN_REV=`echo $UNAME | sed s/.$KERN_ARCH//` # strip arch from uname ++# strip arch from uname, for kernels like 5.14.0-447.el9.x86_64+rt or ++# 6.9.0-0.rc2.1.el10.x86_64+rt strip the +rt suffix too ++KERN_REV=`echo $UNAME | sed s/.$KERN_ARCH// | sed s/\+rt$//` + if [ -x /usr/bin/dnf4 ]; then + DI="dnf4 debuginfo-install" + DI_DEPS="" diff --git a/SOURCES/RHEL-36201a.patch b/SOURCES/RHEL-36201a.patch new file mode 100644 index 0000000..26994cf --- /dev/null +++ b/SOURCES/RHEL-36201a.patch @@ -0,0 +1,116 @@ +commit b8d4274d1e7697801c12c512b6724dd3f59f2c72 +Author: William Cohen +Date: Mon May 6 11:36:42 2024 -0400 + + Support kernels that backported kallsym functions from newer linux kernels + + Some Linux distributions may have backported + module_kallsyms_on_each_symbol and kallsyms_on_each_symbol functions + from newer linux kernels. In these situations checking the kernel + version would not detect the proper arguments for these functions. + Systemtap now has a couple of autoconf tests to determine what + arguments should be used for these functions. + +diff --git a/buildrun.cxx b/buildrun.cxx +index bb7bdcc9d..8ee8c391f 100644 +--- a/buildrun.cxx ++++ b/buildrun.cxx +@@ -506,6 +506,8 @@ compile_pass (systemtap_session& s) + + output_autoconf(s, o, cs, "autoconf-pagefault_disable.c", "STAPCONF_PAGEFAULT_DISABLE", NULL); + output_exportconf(s, o2, "kallsyms_lookup_name", "STAPCONF_KALLSYMS_LOOKUP_NAME_EXPORTED"); ++ output_autoconf(s, o, cs, "autoconf-kallsyms_6_3.c", "STAPCONF_KALLSYMS_6_3", NULL); ++ output_autoconf(s, o, cs, "autoconf-kallsyms_6_4.c", "STAPCONF_KALLSYMS_6_4", NULL); + output_autoconf(s, o, cs, "autoconf-uidgid.c", "STAPCONF_LINUX_UIDGID_H", NULL); + output_exportconf(s, o2, "sigset_from_compat", "STAPCONF_SIGSET_FROM_COMPAT_EXPORTED"); + output_exportconf(s, o2, "vzalloc", "STAPCONF_VZALLOC"); +diff --git a/runtime/linux/autoconf-kallsyms_6_3.c b/runtime/linux/autoconf-kallsyms_6_3.c +new file mode 100644 +index 000000000..0af1a5c35 +--- /dev/null ++++ b/runtime/linux/autoconf-kallsyms_6_3.c +@@ -0,0 +1,6 @@ ++#include ++ ++int module_kallsyms_on_each_symbol(const char *modname, ++ int (*fn)(void *, const char *, struct module*, ++ unsigned long), ++ void *data); +diff --git a/runtime/linux/autoconf-kallsyms_6_4.c b/runtime/linux/autoconf-kallsyms_6_4.c +new file mode 100644 +index 000000000..3b3680c53 +--- /dev/null ++++ b/runtime/linux/autoconf-kallsyms_6_4.c +@@ -0,0 +1,3 @@ ++#include ++int kallsyms_on_each_symbol(int (*fn)(void *, const char *, unsigned long), ++ void *data); +diff --git a/runtime/linux/kprobes.c b/runtime/linux/kprobes.c +index 6b30f2c52..2fba61cbb 100644 +--- a/runtime/linux/kprobes.c ++++ b/runtime/linux/kprobes.c +@@ -737,7 +737,7 @@ __stapkp_symbol_callback(void *data, const char *name, + } + + static int +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,4,0) ++#if defined(STAPCONF_KALLSYMS_6_4) + stapkp_symbol_callback(void *data, const char *name, + unsigned long addr) + { +@@ -780,7 +780,7 @@ stapkp_init(struct stap_kprobe_probe *probes, + mutex_lock(&module_mutex); + #endif + kallsyms_on_each_symbol(stapkp_symbol_callback, &sd); +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,3,0) ++#if defined(STAPCONF_KALLSYMS_6_3) || defined(STAPCONF_KALLSYMS_6_4) + module_kallsyms_on_each_symbol(sd.modname, stapkp_symbol_callback, &sd); + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(5,12,0) + module_kallsyms_on_each_symbol(stapkp_symbol_callback, &sd); +@@ -855,7 +855,7 @@ stapkp_refresh(const char *modname, + mutex_lock(&module_mutex); + #endif + kallsyms_on_each_symbol(stapkp_symbol_callback, &sd); +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,3,0) ++#if defined(STAPCONF_KALLSYMS_6_3) + module_kallsyms_on_each_symbol(sd.modname, stapkp_symbol_callback, &sd); + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(5,12,0) + module_kallsyms_on_each_symbol(stapkp_symbol_callback, &sd); +diff --git a/runtime/sym.c b/runtime/sym.c +index 3947d42f7..23dd3be30 100644 +--- a/runtime/sym.c ++++ b/runtime/sym.c +@@ -1187,7 +1187,7 @@ unsigned long kallsyms_lookup_name (const char *name) + typedef typeof(&kallsyms_on_each_symbol) kallsyms_on_each_symbol_fn; + + // XXX Will be linked in place of the kernel's kallsyms_on_each_symbol: +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,4,0) ++#if defined(STAPCONF_KALLSYMS_6_4) + int kallsyms_on_each_symbol(int (*fn)(void *, const char *, + unsigned long), + void *data) +@@ -1214,13 +1214,13 @@ int kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *, + typedef typeof(&module_kallsyms_on_each_symbol) module_kallsyms_on_each_symbol_fn; + + // XXX Will be linked in place of the kernel's module_kallsyms_on_each_symbol: +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,4,0) ++#if defined(STAPCONF_KALLSYMS_6_4) + int module_kallsyms_on_each_symbol(const char *modname, + int (*fn)(void *, const char *, + unsigned long), + void *data) + #else +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,3,0) ++#if defined(STAPCONF_KALLSYMS_6_3) + int module_kallsyms_on_each_symbol(const char *modname, + int (*fn)(void *, const char *, struct module *, + unsigned long), +@@ -1235,7 +1235,7 @@ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module + /* First, try to use a kallsyms_lookup_name address passed to us + through the relocation mechanism. */ + if (_stp_module_kallsyms_on_each_symbol != NULL) +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,3,0) ++#if defined(STAPCONF_KALLSYMS_6_3) || defined(STAPCONF_KALLSYMS_6_4) + return ibt_wrapper(int, + (* (module_kallsyms_on_each_symbol_fn)_stp_module_kallsyms_on_each_symbol)(modname, fn, data)); + #else diff --git a/SOURCES/RHEL-36201b.patch b/SOURCES/RHEL-36201b.patch new file mode 100644 index 0000000..2e840f4 --- /dev/null +++ b/SOURCES/RHEL-36201b.patch @@ -0,0 +1,22 @@ +commit ed5649f64a3f8c2e8269f9c4435e9174c4e8c775 +Author: William Cohen +Date: Thu May 9 12:23:54 2024 -0400 + + Support kernels that backported kallsym functions (part 2) + + Git commit b8d4274d1e769780 omitted a test for the Linux 6.4 version + of kallsyms function in runtime/linux/kprobes.c. + +diff --git a/runtime/linux/kprobes.c b/runtime/linux/kprobes.c +index 2fba61cbb..9ae5565e3 100644 +--- a/runtime/linux/kprobes.c ++++ b/runtime/linux/kprobes.c +@@ -855,7 +855,7 @@ stapkp_refresh(const char *modname, + mutex_lock(&module_mutex); + #endif + kallsyms_on_each_symbol(stapkp_symbol_callback, &sd); +-#if defined(STAPCONF_KALLSYMS_6_3) ++#if defined(STAPCONF_KALLSYMS_6_3) || defined(STAPCONF_KALLSYMS_6_4) + module_kallsyms_on_each_symbol(sd.modname, stapkp_symbol_callback, &sd); + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(5,12,0) + module_kallsyms_on_each_symbol(stapkp_symbol_callback, &sd); diff --git a/SOURCES/RHEL-42605.patch b/SOURCES/RHEL-42605.patch new file mode 100644 index 0000000..0e8d68e --- /dev/null +++ b/SOURCES/RHEL-42605.patch @@ -0,0 +1,248 @@ +commit 0c437c7e2d02772615d73d1be1c3100d4c1de254 +Author: William Cohen +Date: Tue Jun 4 09:46:41 2024 -0400 + + Address changes in Linux 6.10 /include/linux/vmalloc.h + + Upstream linux kernel git commit 88ae5fb755b0d contains a number of + changes in /include/linux/vmalloc.h that affect vmalloc, vmalloc_node, + and vzalloc_node definitions. These are no longer functions but + macros and cannot be found in the list of symbols exported by the + kernel. Support for vzalloc, vmalloc_node, and vzalloc_node has been + in kernels since Linux 2.6.37. Given that systemtap requires Linux + 3.10 or newer there is no longer a need to check for the existence of + these functions or provide local versions of them. + +diff --git a/buildrun.cxx b/buildrun.cxx +index 8ee8c391f..a7fcd6297 100644 +--- a/buildrun.cxx ++++ b/buildrun.cxx +@@ -510,9 +510,6 @@ compile_pass (systemtap_session& s) + output_autoconf(s, o, cs, "autoconf-kallsyms_6_4.c", "STAPCONF_KALLSYMS_6_4", NULL); + output_autoconf(s, o, cs, "autoconf-uidgid.c", "STAPCONF_LINUX_UIDGID_H", NULL); + output_exportconf(s, o2, "sigset_from_compat", "STAPCONF_SIGSET_FROM_COMPAT_EXPORTED"); +- output_exportconf(s, o2, "vzalloc", "STAPCONF_VZALLOC"); +- output_exportconf(s, o2, "vzalloc_node", "STAPCONF_VZALLOC_NODE"); +- output_exportconf(s, o2, "vmalloc_node", "STAPCONF_VMALLOC_NODE"); + + // RHBZ1233912 - s390 temporary workaround for non-atomic udelay() + output_exportconf(s, o2, "udelay_simple", "STAPCONF_UDELAY_SIMPLE_EXPORTED"); +diff --git a/runtime/linux/alloc.c b/runtime/linux/alloc.c +index ab16249e1..add36c30d 100644 +--- a/runtime/linux/alloc.c ++++ b/runtime/linux/alloc.c +@@ -404,16 +404,6 @@ static void *_stp_kzalloc(size_t size) + return _stp_kzalloc_gfp(size, STP_ALLOC_FLAGS); + } + +-#ifndef STAPCONF_VZALLOC +-static void *vzalloc(unsigned long size) +-{ +- void *ret = vmalloc(size); +- if (ret) +- memset(ret, 0, size); +- return ret; +-} +-#endif +- + static void *_stp_vzalloc(size_t size) + { + void *ret; +@@ -438,24 +428,6 @@ static void *_stp_vzalloc(size_t size) + return ret; + } + +- +-#ifndef STAPCONF_VMALLOC_NODE +-static void *vmalloc_node(unsigned long size, int node __attribute__((unused))) +-{ +- return vmalloc(size); +-} +-#endif +- +-#ifndef STAPCONF_VZALLOC_NODE +-static void *vzalloc_node(unsigned long size, int node) +-{ +- void *ret = vmalloc_node(size, node); +- if (ret) +- memset(ret, 0, size); +- return ret; +-} +-#endif +- + static void *_stp_vzalloc_node(size_t size, int node) + { + void *ret; + +commit 1fd6fb4d7101e013e21006da3b77b9723be5b446 +Author: William Cohen +Date: Mon Jun 3 15:46:49 2024 -0400 + + Avoid -Werror=empty-body errors from runtime/linux/uprobes-inode.c + + Newer linux kernel compiles are being built with -Werror=empty-body. + For some modules generated runtime/linux/uprobes-inode.c is pulled in + and will get error messages like the following: + + In file included from /tmp/stapGIM4O9/stap_ded21c54fce18c6570a8930d823aca3a_10928_src.c:2439: + /home/wcohen/systemtap_write/install/share/systemtap/runtime/linux/uprobes-inode.c: In function 'stapiu_change_semaphore_plus': + /home/wcohen/systemtap_write/install/share/systemtap/runtime/linux/uprobes-inode.c:795:5: error: suggest braces around empty body in an 'else' statement [-Werror=empty-body] + 795 | ; // already unlocked + | ^ + cc1: all warnings being treated as errors + + Added "{}" in the appropriate location to indicate to the compiler + that this is intentional. + +diff --git a/runtime/linux/uprobes-inode.c b/runtime/linux/uprobes-inode.c +index b07e7b666..103da09dd 100644 +--- a/runtime/linux/uprobes-inode.c ++++ b/runtime/linux/uprobes-inode.c +@@ -792,7 +792,7 @@ stapiu_change_semaphore_plus(struct stapiu_consumer* c, struct task_struct *task + if (! any_found) + spin_unlock_irqrestore(&c->process_list_lock, flags); + else +- ; // already unlocked ++ {}; // already unlocked + + return rc; + } + +commit de8aba9a414b497d98c489173b878058c4031b39 +Author: William Cohen +Date: Mon Jun 3 14:40:04 2024 -0400 + + Avoid -Werror=old-style-declaration for stap_probes array in generated kernel modules + + With newer linux kernels additional compilers checks are being done + and will get error messages like the following for the generated + module: + + /tmp/stapuundLy/stap_2755fca707746de04395c85872aae4b8_1753_src.c:111:1: error: 'static' is not at beginning of declaration [-Werror=old-style-declaration] + 111 | } static stap_probes[]; + | ^ + cc1: all warnings being treated as errors + + Tweaked the code generation in translate.cxx to output the static + stap_probes array in a form that is agreeable to newer kernel builds. + +diff --git a/translate.cxx b/translate.cxx +index 19c165a1d..8fb320e66 100644 +--- a/translate.cxx ++++ b/translate.cxx +@@ -8748,7 +8748,8 @@ translate_pass (systemtap_session& s) + << "STAP_PROBE_INIT_NAME(PN) " + << "STAP_PROBE_INIT_TIMING(L, D) " + << "}"; +- s.op->newline(-1) << "} static stap_probes[];"; ++ s.op->newline(-1) << "};"; ++ s.op->newline() << "static struct stap_probe stap_probes[];"; + s.op->assert_0_indent(); + #undef CALCIT + + +commit da72d04303cfc3ba22b2bb58a26f8dc7868333eb +Author: William Cohen +Date: Mon Jun 3 14:23:08 2024 -0400 + + Avoid -Werror=empty-body errors from runtime/linux/debug.h macros + + When attempting to run the testsuite the sanity.exp test fails + due to the following -Werror=empty-body errors: + + /home/wcohen/systemtap_write/install/share/systemtap/runtime/transport/relay_v2.c: In function '__stp_relay_wakeup_timer': + /home/wcohen/systemtap_write/install/share/systemtap/runtime/linux/debug.h:47:36: error: suggest braces around empty body in an 'else' statement [-Werror=empty-body] + 47 | #define dbug_trans(level, args...) ; + | ^ + /home/wcohen/systemtap_write/install/share/systemtap/runtime/transport/relay_v2.c:195:17: note: in expansion of macro 'dbug_trans' + 195 | dbug_trans(0, "relay_v2 wakeup timer expiry\n"); + | ^~~~~~~~~~ + /home/wcohen/systemtap_write/install/share/systemtap/runtime/transport/symbols.c: In function '_stp_set_stext': + /home/wcohen/systemtap_write/install/share/systemtap/runtime/linux/debug.h:103:34: error: suggest braces around empty body in an 'else' statement [-Werror=empty-body] + 103 | #define dbug_sym(level, args...) ; + | ^ + /home/wcohen/systemtap_write/install/share/systemtap/runtime/transport/symbols.c:44:17: note: in expansion of macro 'dbug_sym' + 44 | dbug_sym(1, "found kernel _stext load address: 0x%lx\n", + | ^~~~~~~~ + + Changed the effectively empty macros in runtime/linux/debug.h to use + "do { } while (0)" to eliminate these errors. + +diff --git a/runtime/linux/debug.h b/runtime/linux/debug.h +index d2ab9e8db..dfc834dbb 100644 +--- a/runtime/linux/debug.h ++++ b/runtime/linux/debug.h +@@ -44,8 +44,8 @@ + printk(args); \ + } while (0) + #else +-#define dbug_trans(level, args...) ; +-#define dbug_trans2(args...) ; ++#define dbug_trans(level, args...) do { } while (0) ++#define dbug_trans2(args...) do { } while (0) + #endif + + #ifdef DEBUG_STP_ON_THE_FLY +@@ -53,7 +53,7 @@ + _stp_dbug(__FUNCTION__, __LINE__, args); \ + } while (0) + #else +-#define dbug_otf(args...) ; ++#define dbug_otf(args...) do { } while (0) + #endif + + #ifdef DEBUG_UPROBES +@@ -61,7 +61,7 @@ + _stp_dbug(__FUNCTION__, __LINE__, args); \ + } while (0) + #else +-#define dbug_uprobes(args...) ; ++#define dbug_uprobes(args...) do { } while (0) + #endif + + #ifdef DEBUG_UNWIND /* stack unwinder */ +@@ -70,7 +70,7 @@ + _stp_dbug(__FUNCTION__, __LINE__, args); \ + } while (0) + #else +-#define dbug_unwind(level, args...) ; ++#define dbug_unwind(level, args...) do { } while (0) + #endif + + +@@ -80,7 +80,7 @@ + _stp_dbug(__FUNCTION__, __LINE__, args); \ + } while (0) + #else +-#define dbug_task(level, args...) ; ++#define dbug_task(level, args...) do { } while (0) + #endif + + +@@ -90,7 +90,7 @@ + _stp_dbug(__FUNCTION__, __LINE__, args); \ + } while (0) + #else +-#define dbug_task_vma(level, args...) ; ++#define dbug_task_vma(level, args...) do { } while (0) + #endif + + +@@ -100,7 +100,7 @@ + _stp_dbug(__FUNCTION__, __LINE__, args); \ + } while (0) + #else +-#define dbug_sym(level, args...) ; ++#define dbug_sym(level, args...) do { } while (0) + #endif + + +@@ -110,7 +110,7 @@ + _stp_dbug(__FUNCTION__, __LINE__, args); \ + } while (0) + #else +-#define dbug_tp(level, args...) ; ++#define dbug_tp(level, args...) do { } while (0) + #endif + + #endif /* _STP_LINUX_DEBUG_H_ */ diff --git a/SOURCES/RHEL-43481.patch b/SOURCES/RHEL-43481.patch new file mode 100644 index 0000000..74a5ccb --- /dev/null +++ b/SOURCES/RHEL-43481.patch @@ -0,0 +1,70 @@ +diff --git a/python/Makefile.am b/python/Makefile.am +index a254480f9..13618dc2f 100644 +--- a/python/Makefile.am ++++ b/python/Makefile.am +@@ -29,12 +29,12 @@ pkglibexecpython_DATA += stap-resolve-module-function.py + + all-local: + if HAVE_PYTHON2_PROBES +- (cd $(srcdir); CFLAGS="$(AM_CPPFLAGS)" $(PYTHON) setup.py build \ ++ (cd $(srcdir); CFLAGS="$(CFLAGS) $(AM_CPPFLAGS)" $(PYTHON) setup.py build \ + --build-base $(shell readlink -f $(builddir))/py2build \ + --verbose) + endif + if HAVE_PYTHON3_PROBES +- (cd $(srcdir); CFLAGS="$(AM_CPPFLAGS)" $(PYTHON3) setup.py build \ ++ (cd $(srcdir); CFLAGS="$(CFLAGS) $(AM_CPPFLAGS)" $(PYTHON3) setup.py build \ + --build-base $(shell readlink -f $(builddir))/py3build \ + --verbose) + endif +@@ -45,7 +45,7 @@ endif + # and we need to keep separate build directories for python 2 and 3. + install-exec-local: + if HAVE_PYTHON2_PROBES +- (cd $(srcdir); CFLAGS="$(AM_CPPFLAGS)" $(PYTHON) setup.py build \ ++ (cd $(srcdir); CFLAGS="$(CFLAGS) $(AM_CPPFLAGS)" $(PYTHON) setup.py build \ + --build-base $(shell readlink -f $(builddir))/py2build \ + install --prefix $(DESTDIR)$(prefix) \ + --single-version-externally-managed \ +@@ -53,7 +53,7 @@ if HAVE_PYTHON2_PROBES + --verbose) + endif + if HAVE_PYTHON3_PROBES +- (cd $(srcdir); CFLAGS="$(AM_CPPFLAGS)" $(PYTHON3) setup.py build \ ++ (cd $(srcdir); CFLAGS="$(CFLAGS) $(AM_CPPFLAGS)" $(PYTHON3) setup.py build \ + --build-base $(shell readlink -f $(builddir))/py3build \ + install --prefix $(DESTDIR)$(prefix) \ + --single-version-externally-managed \ +diff --git a/python/Makefile.in b/python/Makefile.in +index 1216eefff..62fe2129c 100644 +--- a/python/Makefile.in ++++ b/python/Makefile.in +@@ -624,10 +624,10 @@ uninstall-am: uninstall-pkglibexecpythonDATA \ + + + @HAVE_PYTHON_PROBES_TRUE@all-local: +-@HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ (cd $(srcdir); CFLAGS="$(AM_CPPFLAGS)" $(PYTHON) setup.py build \ ++@HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ (cd $(srcdir); CFLAGS="$(CFLAGS) $(AM_CPPFLAGS)" $(PYTHON) setup.py build \ + @HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ --build-base $(shell readlink -f $(builddir))/py2build \ + @HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ --verbose) +-@HAVE_PYTHON3_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ (cd $(srcdir); CFLAGS="$(AM_CPPFLAGS)" $(PYTHON3) setup.py build \ ++@HAVE_PYTHON3_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ (cd $(srcdir); CFLAGS="$(CFLAGS) $(AM_CPPFLAGS)" $(PYTHON3) setup.py build \ + @HAVE_PYTHON3_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ --build-base $(shell readlink -f $(builddir))/py3build \ + @HAVE_PYTHON3_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ --verbose) + +@@ -635,13 +635,13 @@ uninstall-am: uninstall-pkglibexecpythonDATA \ + # since only the build command has the '--build-base' directory option + # and we need to keep separate build directories for python 2 and 3. + @HAVE_PYTHON_PROBES_TRUE@install-exec-local: +-@HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ (cd $(srcdir); CFLAGS="$(AM_CPPFLAGS)" $(PYTHON) setup.py build \ ++@HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ (cd $(srcdir); CFLAGS="$(CFLAGS) $(AM_CPPFLAGS)" $(PYTHON) setup.py build \ + @HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ --build-base $(shell readlink -f $(builddir))/py2build \ + @HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ install --prefix $(DESTDIR)$(prefix) \ + @HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ --single-version-externally-managed \ + @HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ --record $(shell readlink -f $(builddir))/py2build/install_files.txt \ + @HAVE_PYTHON2_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ --verbose) +-@HAVE_PYTHON3_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ (cd $(srcdir); CFLAGS="$(AM_CPPFLAGS)" $(PYTHON3) setup.py build \ ++@HAVE_PYTHON3_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ (cd $(srcdir); CFLAGS="$(CFLAGS) $(AM_CPPFLAGS)" $(PYTHON3) setup.py build \ + @HAVE_PYTHON3_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ --build-base $(shell readlink -f $(builddir))/py3build \ + @HAVE_PYTHON3_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ install --prefix $(DESTDIR)$(prefix) \ + @HAVE_PYTHON3_PROBES_TRUE@@HAVE_PYTHON_PROBES_TRUE@ --single-version-externally-managed \ diff --git a/SOURCES/RHEL-50107.patch b/SOURCES/RHEL-50107.patch new file mode 100644 index 0000000..df2fd07 --- /dev/null +++ b/SOURCES/RHEL-50107.patch @@ -0,0 +1,79 @@ +diff --git a/buildrun.cxx b/buildrun.cxx +index a7fcd6297..e3f2f83d1 100644 +--- a/buildrun.cxx ++++ b/buildrun.cxx +@@ -400,6 +400,7 @@ compile_pass (systemtap_session& s) + output_exportconf(s, o2, "__module_text_address", "STAPCONF_MODULE_TEXT_ADDRESS"); + output_exportconf(s, o2, "add_timer_on", "STAPCONF_ADD_TIMER_ON"); + output_autoconf(s, o, cs, "autoconf-514-panic.c", "STAPCONF_514_PANIC", NULL); ++ output_autoconf(s, o, cs, "autoconf-task_work_cancel_func.c", "STAPCONF_TASK_WORK_CANCEL_FUNC", NULL); + + output_dual_exportconf(s, o2, "probe_kernel_read", "probe_kernel_write", "STAPCONF_PROBE_KERNEL"); + output_autoconf(s, o, cs, "autoconf-hw_breakpoint_context.c", +diff --git a/runtime/linux/autoconf-task_work_cancel_func.c b/runtime/linux/autoconf-task_work_cancel_func.c +new file mode 100644 +index 000000000..0d460de6c +--- /dev/null ++++ b/runtime/linux/autoconf-task_work_cancel_func.c +@@ -0,0 +1,3 @@ ++#include ++ ++void* c = & task_work_cancel_func; +diff --git a/runtime/linux/runtime.h b/runtime/linux/runtime.h +index 0e9fe3fea..bd9307385 100644 +--- a/runtime/linux/runtime.h ++++ b/runtime/linux/runtime.h +@@ -265,7 +265,7 @@ static void *kallsyms_uprobe_get_swbp_addr; + static void *kallsyms_task_work_add; + #endif + #if !defined(STAPCONF_TASK_WORK_CANCEL_EXPORTED) +-static void *kallsyms_task_work_cancel; ++static void *kallsyms_task_work_cancel_fn; + #endif + + #if !defined(STAPCONF_TRY_TO_WAKE_UP_EXPORTED) && !defined(STAPCONF_WAKE_UP_STATE_EXPORTED) +diff --git a/runtime/stp_task_work.c b/runtime/stp_task_work.c +index 0dd3095b6..4818fecbf 100644 +--- a/runtime/stp_task_work.c ++++ b/runtime/stp_task_work.c +@@ -3,14 +3,25 @@ + + #include "linux/task_work_compatibility.h" + ++// Handle kernel commit 68cbd415dd4b9c5b9df69f0f091879e56bf5907a ++// task_work: s/task_work_cancel()/task_work_cancel_func()/ ++#if defined(STAPCONF_TASK_WORK_CANCEL_FUNC) ++#define TASK_WORK_CANCEL_FN task_work_cancel_func ++#else ++#define TASK_WORK_CANCEL_FN task_work_cancel ++#endif ++ ++#define STRINGIFY(x) #x ++#define TOSTRING(x) STRINGIFY(x) ++ + #if !defined(STAPCONF_TASK_WORK_ADD_EXPORTED) + // First typedef from the original decls, then #define as typecasted calls. + typedef typeof(&task_work_add) task_work_add_fn; + #define task_work_add(a,b,c) ibt_wrapper(int, (* (task_work_add_fn)kallsyms_task_work_add)((a), (b), (c))) + #endif + #if !defined(STAPCONF_TASK_WORK_CANCEL_EXPORTED) +-typedef typeof(&task_work_cancel) task_work_cancel_fn; +-#define task_work_cancel(a,b) ibt_wrapper(struct callback_head *, (* (task_work_cancel_fn)kallsyms_task_work_cancel)((a), (b))) ++typedef typeof(&TASK_WORK_CANCEL_FN) task_work_cancel_fn; ++#define task_work_cancel(a,b) ibt_wrapper(struct callback_head *, (* (task_work_cancel_fn)kallsyms_task_work_cancel_fn)((a), (b))) + #endif + + /* To avoid a crash when a task_work callback gets called after the +@@ -35,9 +46,9 @@ stp_task_work_init(void) + } + #endif + #if !defined(STAPCONF_TASK_WORK_CANCEL_EXPORTED) +- kallsyms_task_work_cancel = (void *)kallsyms_lookup_name("task_work_cancel"); +- if (kallsyms_task_work_cancel == NULL) { +- _stp_error("Can't resolve task_work_cancel!"); ++ kallsyms_task_work_cancel_fn = (void *)kallsyms_lookup_name(TOSTRING(TASK_WORK_CANCEL_FN)); ++ if (kallsyms_task_work_cancel_fn == NULL) { ++ _stp_error("Can't resolve %s!", TOSTRING(TASK_WORK_CANCEL_FN)); + return -ENOENT; + } + #endif diff --git a/SOURCES/RHEL-52491.patch b/SOURCES/RHEL-52491.patch new file mode 100644 index 0000000..0368a98 --- /dev/null +++ b/SOURCES/RHEL-52491.patch @@ -0,0 +1,22 @@ +commit 470da664cc0afd4aac982806622dbb5d700a7904 +Author: Martin Cermak +Date: Fri Aug 9 07:40:43 2024 +0200 + + RHEL-52491: NSS 3.101.0 compatibility + + After NSS rebased to 3.101.0, systemtap stopped being able to grant + trust to stap-server: https://issues.redhat.com/browse/RHEL-52491 . + This patch fixes it. + +diff --git a/client-nss.cxx b/client-nss.cxx +index 55266feb7..c09f99ca9 100644 +--- a/client-nss.cxx ++++ b/client-nss.cxx +@@ -184,6 +184,7 @@ badCertHandler(void *arg, PRFileDesc *sslSocket) + + break; + ++ case SEC_ERROR_UNKNOWN_ISSUER: + case SEC_ERROR_CA_CERT_INVALID: + /* The server's certificate is not trusted. Should we trust it? */ + secStatus = SECFailure; /* Do not trust by default. */ diff --git a/SPECS/systemtap.spec b/SPECS/systemtap.spec new file mode 100644 index 0000000..342bec8 --- /dev/null +++ b/SPECS/systemtap.spec @@ -0,0 +1,1646 @@ +# work around flakey gcc warnings +%{!?with_Werror: %global with_Werror 0} +%{!?with_sqlite: %global with_sqlite 0%{?fedora} >= 17 || 0%{?rhel} >= 7} +# prefer prebuilt docs +%{!?with_docs: %global with_docs 0} +%{!?with_htmldocs: %global with_htmldocs 0} +%{!?with_monitor: %global with_monitor 1} +# crash is not available +%ifarch ppc ppc64 %{sparc} %{mips} %{riscv} +%{!?with_crash: %global with_crash 0} +%else +%{!?with_crash: %global with_crash 1} +%endif +%{!?with_rpm: %global with_rpm 1} +%{!?elfutils_version: %global elfutils_version 0.179} +%{!?with_boost: %global with_boost 0} +%ifarch %{ix86} x86_64 ppc ppc64 ppc64le aarch64 +%{!?with_dyninst: %global with_dyninst 0%{?fedora} >= 18 || 0%{?rhel} >= 7} +%else +%{!?with_dyninst: %global with_dyninst 0} +%endif +%{!?with_bpf: %global with_bpf 0%{?fedora} >= 22 || 0%{?rhel} >= 8} +%{!?with_systemd: %global with_systemd 0%{?fedora} >= 19 || 0%{?rhel} >= 7} +%{!?with_emacsvim: %global with_emacsvim 0%{?fedora} >= 19 || 0%{?rhel} >= 7} +%ifarch %{ix86} +%{!?with_java: %global with_java 0} +%else +%{!?with_java: %global with_java 0%{?fedora} >= 19 || 0%{?rhel} >= 7} +%endif +%{!?with_debuginfod: %global with_debuginfod 0%{?fedora} >= 25 || 0%{?rhel} >= 7} +%{!?with_virthost: %global with_virthost 0%{?fedora} >= 19 || 0%{?rhel} >= 7} +%{!?with_virtguest: %global with_virtguest 1} +%{!?with_dracut: %global with_dracut 0%{?fedora} >= 19 || 0%{?rhel} >= 6} +%ifarch x86_64 +%{!?with_mokutil: %global with_mokutil 0%{?fedora} >= 18 || 0%{?rhel} >= 7} +%{!?with_openssl: %global with_openssl 0%{?fedora} >= 18 || 0%{?rhel} >= 7} +%else +%{!?with_mokutil: %global with_mokutil 0} +%{!?with_openssl: %global with_openssl 0} +%endif +%{!?with_pyparsing: %global with_pyparsing 0%{?fedora} >= 18 || 0%{?rhel} >= 7} +%{!?with_python3: %global with_python3 0%{?fedora} >= 23 || 0%{?rhel} > 7} +%{!?with_python2_probes: %global with_python2_probes (0%{?fedora} <= 28 && 0%{?rhel} <= 7)} +%{!?with_python3_probes: %global with_python3_probes (0%{?fedora} >= 23 || 0%{?rhel} > 7)} +%{!?with_httpd: %global with_httpd 0} +%{!?with_specific_python: %global with_specific_python 0%{?fedora} >= 31} +%{!?with_sysusers: %global with_sysusers 0%{?fedora} >= 32 || 0%{?rhel} >= 9} + +# Virt is supported on these arches, even on el7, but it's not in core EL7 +%if 0%{?rhel} && 0%{?rhel} <= 7 +%ifarch ppc64le aarch64 +%global with_virthost 0 +%endif +%endif + +%if 0%{?fedora} >= 18 || 0%{?rhel} >= 6 + %define initdir %{_initddir} +%else + # RHEL5 doesn't know _initddir + %define initdir %{_initrddir} +%endif + +%if %{with_virtguest} + %if 0%{?fedora} >= 18 || 0%{?rhel} >= 7 + %define udevrulesdir /usr/lib/udev/rules.d + %else + %if 0%{?rhel} >= 6 + %define udevrulesdir /lib/udev/rules.d + %endif + %endif +%endif + +%if 0%{?fedora} >= 19 || 0%{?rhel} >= 7 + %define dracutstap %{_prefix}/lib/dracut/modules.d/99stap +%else + %define dracutstap %{_prefix}/share/dracut/modules.d/99stap +%endif + +%if 0%{?rhel} == 6 || 0%{?rhel} == 7 + %define dracutbindir /sbin +%else + %define dracutbindir %{_bindir} +%endif + +%{!?_rpmmacrodir: %define _rpmmacrodir %{_rpmconfigdir}/macros.d} + +# To avoid testsuite/*/*.stp has shebang which doesn't start with '/' +%define __brp_mangle_shebangs_exclude_from .stp$ + +%define _systemtap_runtime_preinstall \ +# See systemd-sysusers(8) sysusers.d(5)\ +\ +g stapusr 156\ +g stapsys 157\ +g stapdev 158\ +g stapunpriv 159\ +u stapunpriv 159 "systemtap unprivileged user" /var/lib/stapunpriv /sbin/nologin\ +m stapunpriv stapunpriv + +%define _systemtap_server_preinstall \ +# See systemd-sysusers(8) sysusers.d(5)\ +\ +g stap-server -\ +u stap-server - "systemtap compiler server" /var/lib/stap-server /sbin/nologin\ +m stap-server stap-server + + +%define _systemtap_testsuite_preinstall \ +# See systemd-sysusers(8) sysusers.d(5)\ +\ +u stapusr - "systemtap testsuite user" / /sbin/nologin\ +u stapsys - "systemtap testsuite user" / /sbin/nologin\ +u stapdev - "systemtap testsuite user" / /sbin/nologin\ +m stapusr stapusr\ +m stapsys stapusr\ +m stapsys stapsys\ +m stapdev stapusr\ +m stapdev stapdev + + +Name: systemtap +# PRERELEASE +Version: 5.1 +Release: 9%{?release_override}%{?dist} +# for version, see also configure.ac + + +# Packaging abstract: +# +# systemtap empty req:-client req:-devel +# systemtap-server /usr/bin/stap-server*, req:-devel +# systemtap-devel /usr/bin/stap, runtime, tapset, req:kernel-devel +# systemtap-runtime /usr/bin/staprun, /usr/bin/stapsh, /usr/bin/stapdyn +# systemtap-client /usr/bin/stap, samples, docs, tapset(bonus), req:-runtime +# systemtap-initscript /etc/init.d/systemtap, dracut module, req:systemtap +# systemtap-sdt-devel /usr/include/sys/sdt.h /usr/bin/dtrace +# systemtap-testsuite /usr/share/systemtap/testsuite*, req:systemtap, req:sdt-devel +# systemtap-runtime-java libHelperSDT.so, HelperSDT.jar, stapbm, req:-runtime +# systemtap-runtime-virthost /usr/bin/stapvirt, req:libvirt req:libxml2 +# systemtap-runtime-virtguest udev rules, init scripts/systemd service, req:-runtime +# systemtap-runtime-python2 HelperSDT python2 module, req:-runtime +# systemtap-runtime-python3 HelperSDT python3 module, req:-runtime +# systemtap-jupyter /usr/bin/stap-jupyter-* interactive-notebook req:systemtap +# +# Typical scenarios: +# +# stap-client: systemtap-client +# stap-server: systemtap-server +# local user: systemtap +# +# Unusual scenarios: +# +# intermediary stap-client for --remote: systemtap-client (-runtime unused) +# intermediary stap-server for --use-server: systemtap-server (-devel unused) + +Summary: Programmable system-wide instrumentation system +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz +Patch1: RHEL-36201a.patch +Patch2: RHEL-36201b.patch +Patch3: PR31495.patch +Patch4: RHEL-42605.patch +Patch5: RHEL-50107.patch +Patch6: RHEL-43481.patch +Patch7: RHEL-52491.patch + +# Build* +BuildRequires: make +BuildRequires: gcc-c++ +BuildRequires: cpio +BuildRequires: gettext-devel +BuildRequires: pkgconfig(nss) +BuildRequires: pkgconfig(avahi-client) +%if %{with_debuginfod} +BuildRequires: pkgconfig(libdebuginfod) +BuildRequires: pkgconfig(json-c) +%endif +%if %{with_dyninst} +BuildRequires: dyninst-devel >= 10.0 +BuildRequires: pkgconfig(libselinux) +%endif +%if %{with_sqlite} +BuildRequires: sqlite-devel > 3.7 +%endif +%if %{with_monitor} +BuildRequires: pkgconfig(json-c) +BuildRequires: pkgconfig(ncurses) +%endif +%if %{with_systemd} +BuildRequires: systemd +%endif +# Needed for libstd++ < 4.0, without +%if %{with_boost} +BuildRequires: boost-devel +%endif +%if %{with_crash} +BuildRequires: crash-devel zlib-devel +%endif +%if %{with_rpm} +BuildRequires: rpm-devel +%endif +BuildRequires: elfutils-devel >= %{elfutils_version} +%if %{with_docs} +BuildRequires: /usr/bin/latex /usr/bin/dvips /usr/bin/ps2pdf +%if 0%{?fedora} >= 18 || 0%{?rhel} >= 7 +BuildRequires: tex(fullpage.sty) tex(fancybox.sty) tex(bchr7t.tfm) tex(graphicx.sty) +%endif +%if %{with_htmldocs} +# On F10, xmlto's pdf support was broken off into a sub-package, +# called 'xmlto-tex'. To avoid a specific F10 BuildReq, we'll do a +# file-based buildreq on '/usr/share/xmlto/format/fo/pdf'. +BuildRequires: xmlto /usr/share/xmlto/format/fo/pdf +%endif +%endif +%if %{with_emacsvim} +# for _emacs_sitelispdir macros etc. +BuildRequires: emacs +%endif +%if %{with_java} +BuildRequires: java-devel +%endif +%if %{with_virthost} +# BuildRequires: libvirt-devel >= 1.0.2 +BuildRequires: pkgconfig(libvirt) +BuildRequires: pkgconfig(libxml-2.0) +%endif +BuildRequires: readline-devel +%if %{with_python2_probes} +BuildRequires: python2-devel +%if 0%{?fedora} >= 1 +BuildRequires: python2-setuptools +%else +BuildRequires: python-setuptools +%endif +%endif +%if %{with_python3} +BuildRequires: python3 +%endif +%if %{with_python3_probes} +BuildRequires: python3-devel +BuildRequires: python3-setuptools +%endif + +%if %{with_httpd} +BuildRequires: libmicrohttpd-devel +BuildRequires: libuuid-devel +%endif +%if %{with_sysusers} +BuildRequires: systemd-rpm-macros +%endif + + +# Install requirements +Requires: systemtap-client = %{version}-%{release} +Requires: systemtap-devel = %{version}-%{release} + +%description +SystemTap is an instrumentation system for systems running Linux. +Developers can write instrumentation scripts to collect data on +the operation of the system. The base systemtap package contains/requires +the components needed to locally develop and execute systemtap scripts. + +# ------------------------------------------------------------------------ + +%package server +Summary: Instrumentation System Server +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +Requires: systemtap-devel = %{version}-%{release} +Conflicts: systemtap-devel < %{version}-%{release} +Conflicts: systemtap-runtime < %{version}-%{release} +Conflicts: systemtap-client < %{version}-%{release} +Requires: nss coreutils +Requires: zip unzip +Requires(pre): shadow-utils +BuildRequires: nss-devel avahi-devel +%if %{with_openssl} +Requires: openssl +%endif +%if %{with_systemd} +Requires: systemd +%else +Requires(post): chkconfig +Requires(preun): chkconfig +Requires(preun): initscripts +Requires(postun): initscripts +%endif + +%description server +This is the remote script compilation server component of systemtap. +It announces itself to nearby clients with avahi (if available), and +compiles systemtap scripts to kernel objects on their demand. + + +%package devel +Summary: Programmable system-wide instrumentation system - development headers, tools +License: GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause +URL: http://sourceware.org/systemtap/ + +%if 0%{?rhel} >= 8 || 0%{?fedora} >= 20 +Recommends: (kernel-debug-devel if kernel-debug) +Recommends: (kernel-devel if kernel) +%else +Requires: kernel-devel-uname-r +%endif + +Requires: gcc make +# for compiling --runtime=dyninst sripts, need elfutils headers, bz1930973 +Requires: elfutils-devel >= %{elfutils_version} + +Conflicts: systemtap-client < %{version}-%{release} +Conflicts: systemtap-server < %{version}-%{release} +Conflicts: systemtap-runtime < %{version}-%{release} +# Suggest: kernel-debuginfo + +%description devel +This package contains the components needed to compile a systemtap +script from source form into executable (.ko) forms. It may be +installed on a self-contained developer workstation (along with the +systemtap-client and systemtap-runtime packages), or on a dedicated +remote server (alongside the systemtap-server package). It includes +a copy of the standard tapset library and the runtime library C files. + + +%package runtime +Summary: Programmable system-wide instrumentation system - runtime +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +Requires(pre): shadow-utils +Conflicts: systemtap-devel < %{version}-%{release} +Conflicts: systemtap-server < %{version}-%{release} +Conflicts: systemtap-client < %{version}-%{release} + +%description runtime +SystemTap runtime contains the components needed to execute +a systemtap script that was already compiled into a module +using a local or remote systemtap-devel installation. + + +%package client +Summary: Programmable system-wide instrumentation system - client +License: GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND GFDL-1.2-or-later AND BSD-2-Clause +URL: http://sourceware.org/systemtap/ +Requires: zip unzip +Requires: systemtap-runtime = %{version}-%{release} +Requires: coreutils grep sed unzip zip +Requires: openssh-clients +Conflicts: systemtap-devel < %{version}-%{release} +Conflicts: systemtap-server < %{version}-%{release} +Conflicts: systemtap-runtime < %{version}-%{release} +%if %{with_mokutil} +Requires: mokutil +%endif + +%description client +This package contains/requires the components needed to develop +systemtap scripts, and compile them using a local systemtap-devel +or a remote systemtap-server installation, then run them using a +local or remote systemtap-runtime. It includes script samples and +documentation, and a copy of the tapset library for reference. + + +%package initscript +Summary: Systemtap Initscripts +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +Requires: systemtap = %{version}-%{release} +%if %{with_systemd} +Requires: systemd +%else +Requires(post): chkconfig +Requires(preun): chkconfig +Requires(preun): initscripts +Requires(postun): initscripts +%endif + +%description initscript +This package includes a SysVinit script to launch selected systemtap +scripts at system startup, along with a dracut module for early +boot-time probing if supported. + + +%package sdt-devel +Summary: Static probe support tools +License: GPL-2.0-or-later AND CC0-1.0 +URL: http://sourceware.org/systemtap/ +%if %{with_pyparsing} +%if %{with_python3} +Requires: python3-pyparsing +%else +%if 0%{?rhel} >= 7 +Requires: pyparsing +%else +Requires: python2-pyparsing +%endif +%endif +%endif + +%description sdt-devel +This package includes the header file used for static +instrumentation compiled into userspace programs and libraries, along +with the optional dtrace-compatibility preprocessor to process related +.d files into tracing-macro-laden .h headers. + + +%package testsuite +Summary: Instrumentation System Testsuite +License: GPL-2.0-or-later AND GPL-2.0-only AND GPL-3.0-or-later AND MIT +URL: http://sourceware.org/systemtap/ +Requires: systemtap = %{version}-%{release} +Requires: systemtap-sdt-devel = %{version}-%{release} +Requires: systemtap-server = %{version}-%{release} +Requires: dejagnu which elfutils grep nc wget +%if %{with_debuginfod} +Requires: elfutils-debuginfod +%endif +# work around fedora ci gating kvetching about i686<->x86-64 conflicts +%ifarch x86_64 +Conflicts: systemtap-testsuite = %{version}-%{release}.i686 +%endif +%ifarch i686 +Conflicts: systemtap-testsuite = %{version}-%{release}.x86_64 +%endif +Requires: gcc gcc-c++ make glibc-devel +# testsuite/systemtap.base/ptrace.exp needs strace +Requires: strace +# testsuite/systemtap.base/ipaddr.exp needs nc. Unfortunately, the rpm +# that provides nc has changed over time (from 'nc' to +# 'nmap-ncat'). So, we'll do a file-based require. +Requires: /usr/bin/nc +%ifnarch ia64 ppc64le aarch64 +%if 0%{?fedora} >= 21 || 0%{?rhel} >= 8 +# no prelink +%else +Requires: prelink +%endif +%endif +# testsuite/systemtap.server/client.exp needs avahi +Requires: avahi +%if %{with_crash} +# testsuite/systemtap.base/crash.exp needs crash +Requires: crash +%endif +%if %{with_java} +Requires: systemtap-runtime-java = %{version}-%{release} +%endif +%if %{with_python2_probes} +Requires: systemtap-runtime-python2 = %{version}-%{release} +%endif +%if %{with_python3_probes} +Requires: systemtap-runtime-python3 = %{version}-%{release} +%endif +%ifarch x86_64 +%if 0%{?rhel} >= 8 || 0%{?fedora} >= 20 +# fweimer, personal correspondence +Recommends: glibc-devel(x86-32) +%else +Requires: /usr/lib/libc.so +%endif +# ... and /usr/lib/libgcc_s.so.* +# ... and /usr/lib/libstdc++.so.* +%endif +%if 0%{?fedora} >= 18 +Requires: stress +%endif +# The following "meta" files for the systemtap examples run "perf": +# testsuite/systemtap.examples/hw_watch_addr.meta +# testsuite/systemtap.examples/memory/hw_watch_sym.meta +Requires: perf + +%description testsuite +This package includes the dejagnu-based systemtap stress self-testing +suite. This may be used by system administrators to thoroughly check +systemtap on the current system. + + +%if %{with_java} +%package runtime-java +Summary: Systemtap Java Runtime Support +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +Requires: systemtap-runtime = %{version}-%{release} +# work around fedora ci gating kvetching about i686<->x86-64 conflicts +%ifarch x86_64 +Conflicts: systemtap-runtime = %{version}-%{release}.i686 +%endif +%ifarch i686 +Conflicts: systemtap-runtime = %{version}-%{release}.x86_64 +%endif +Requires: byteman > 2.0 +Requires: iproute +Requires: java-devel + +%description runtime-java +This package includes support files needed to run systemtap scripts +that probe Java processes running on the OpenJDK runtimes using Byteman. +%endif + +%if %{with_python2_probes} +%package runtime-python2 +Summary: Systemtap Python 2 Runtime Support +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +Requires: systemtap-runtime = %{version}-%{release} + +%description runtime-python2 +This package includes support files needed to run systemtap scripts +that probe python 2 processes. +%endif + +%if %{with_python3_probes} +%package runtime-python3 +Summary: Systemtap Python 3 Runtime Support +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +Requires: systemtap-runtime = %{version}-%{release} + +%if ! (%{with_python2_probes}) +# Provide an clean upgrade path when the python2 package is removed +Obsoletes: %{name}-runtime-python2 < %{version}-%{release} +%endif + +%description runtime-python3 +This package includes support files needed to run systemtap scripts +that probe python 3 processes. +%endif + +%if %{with_python3_probes} +%package exporter +Summary: Systemtap-prometheus interoperation mechanism +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +Requires: systemtap-runtime = %{version}-%{release} + +%description exporter +This package includes files for a systemd service that manages +systemtap sessions and relays prometheus metrics from the sessions +to remote requesters on demand. +%endif + +%if %{with_virthost} +%package runtime-virthost +Summary: Systemtap Cross-VM Instrumentation - host +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +# only require libvirt-libs really +#Requires: libvirt >= 1.0.2 +Requires: libxml2 + +%description runtime-virthost +This package includes the components required to run systemtap scripts +inside a libvirt-managed domain from the host without using a network +connection. +%endif + +%if %{with_virtguest} +%package runtime-virtguest +Summary: Systemtap Cross-VM Instrumentation - guest +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +Requires: systemtap-runtime = %{version}-%{release} +%if %{with_systemd} +Requires(post): findutils coreutils +Requires(preun): grep coreutils +Requires(postun): grep coreutils +%else +Requires(post): chkconfig initscripts +Requires(preun): chkconfig initscripts +Requires(postun): initscripts +%endif + +%description runtime-virtguest +This package installs the services necessary on a virtual machine for a +systemtap-runtime-virthost machine to execute systemtap scripts. +%endif + +%package jupyter +Summary: ISystemtap jupyter kernel and examples +License: GPL-2.0-or-later +URL: http://sourceware.org/systemtap/ +Requires: systemtap = %{version}-%{release} + +%description jupyter +This package includes files needed to build and run +the interactive systemtap Jupyter kernel, either locally +or within a container. + +# ------------------------------------------------------------------------ + +%prep +%setup -q +%patch -P1 -p1 +%patch -P2 -p1 +%patch -P3 -p1 +%patch -P4 -p1 +%patch -P5 -p1 +%patch -P6 -p1 +%patch -P7 -p1 + +%build + +# Enable/disable the dyninst pure-userspace backend +%if %{with_dyninst} +%global dyninst_config --with-dyninst +%else +%global dyninst_config --without-dyninst +%endif + +# Enable/disable the dyninst pure-userspace backend +%if %{with_Werror} +%global Werror_config --enable-Werror +%else +%global Werror_config --disable-Werror +%endif + +# Enable/disable the sqlite coverage testing support +%if %{with_sqlite} +%global sqlite_config --enable-sqlite +%else +%global sqlite_config --disable-sqlite +%endif + +%if %{with_debuginfod} +%global debuginfod_config --with-debuginfod +%else +%global debuginfod_config --without-debuginfod +%endif + + +# Enable/disable the crash extension +%if %{with_crash} +%global crash_config --enable-crash +%else +%global crash_config --disable-crash +%endif + +# Enable/disable the code to find and suggest needed rpms +%if %{with_rpm} +%global rpm_config --with-rpm +%else +%global rpm_config --without-rpm +%endif + +%if %{with_docs} +%if %{with_htmldocs} +%global docs_config --enable-docs --enable-htmldocs +%else +%global docs_config --enable-docs --disable-htmldocs +%endif +%else +%global docs_config --enable-docs=prebuilt +%endif + +%if %{with_java} +%global java_config --with-java=%{_jvmdir}/java +%else +%global java_config --without-java +%endif + +%if %{with_python3} +%global python3_config --with-python3 +%else +%global python3_config --without-python3 +%endif +%if %{with_python2_probes} +%global python2_probes_config --with-python2-probes +%else +%global python2_probes_config --without-python2-probes +%endif +%if %{with_python3_probes} +%global python3_probes_config --with-python3-probes +%else +%global python3_probes_config --without-python3-probes +%endif + +%if %{with_virthost} +%global virt_config --enable-virt +%else +%global virt_config --disable-virt +%endif + +%if %{with_dracut} +%global dracut_config --with-dracutstap=%{dracutstap} --with-dracutbindir=%{dracutbindir} +%else +%global dracut_config %{nil} +%endif + +%if %{with_httpd} +%global httpd_config --enable-httpd +%else +%global httpd_config --disable-httpd +%endif + +%if %{with_bpf} +%global bpf_config --with-bpf +%else +%global bpf_config --without-bpf +%endif + +# We don't ship compileworthy python code, just oddball samples +%global py_auto_byte_compile 0 + +%configure %{Werror_config} %{dyninst_config} %{sqlite_config} %{crash_config} %{docs_config} %{rpm_config} %{java_config} %{virt_config} %{dracut_config} %{python3_config} %{python2_probes_config} %{python3_probes_config} %{httpd_config} %{bpf_config} %{debuginfod_config} --disable-silent-rules --with-extra-version="rpm %{version}-%{release}" +make %{?_smp_mflags} V=1 + + +%install +make DESTDIR=$RPM_BUILD_ROOT install + +%if ! (%{with_python3}) +rm -v $RPM_BUILD_ROOT%{_bindir}/stap-profile-annotate +%endif + +%find_lang %{name} +for dir in $(ls -1d $RPM_BUILD_ROOT%{_mandir}/{??,??_??}) ; do + dir=$(echo $dir | sed -e "s|^$RPM_BUILD_ROOT||") + lang=$(basename $dir) + echo "%%lang($lang) $dir/man*/*" >> %{name}.lang +done + +%if %{with_sysusers} +mkdir -p %{buildroot}%{_sysusersdir} +echo '%_systemtap_runtime_preinstall' > %{buildroot}%{_sysusersdir}/systemtap-runtime.conf +echo '%_systemtap_server_preinstall' > %{buildroot}%{_sysusersdir}/systemtap-server.conf +echo '%_systemtap_testsuite_preinstall' > %{buildroot}%{_sysusersdir}/systemtap-testsuite.conf +%endif + + +ln -s %{_datadir}/systemtap/examples + +# Fix paths in the example scripts. +find $RPM_BUILD_ROOT%{_datadir}/systemtap/examples -type f -name '*.stp' -print0 | xargs -0 sed -i -r -e '1s@^#!.+stap@#!%{_bindir}/stap@' + +# To make rpmlint happy, remove any .gitignore files in the testsuite. +find testsuite -type f -name '.gitignore' -print0 | xargs -0 rm -f + +# Because "make install" may install staprun with whatever mode, the +# post-processing programs rpmbuild runs won't be able to read it. +# So, we change permissions so that they can read it. We'll set the +# permissions back to 04110 in the %files section below. +chmod 755 $RPM_BUILD_ROOT%{_bindir}/staprun + +#install the useful stap-prep script +install -c -m 755 stap-prep $RPM_BUILD_ROOT%{_bindir}/stap-prep + +# Copy over the testsuite +cp -rp testsuite $RPM_BUILD_ROOT%{_datadir}/systemtap + +# We want the manuals in the special doc dir, not the generic doc install dir. +# We build it in place and then move it away so it doesn't get installed +# twice. rpm can specify itself where the (versioned) docs go with the +# %doc directive. +mkdir docs.installed +mv $RPM_BUILD_ROOT%{_datadir}/doc/systemtap/*.pdf docs.installed/ +%if %{with_docs} +%if %{with_htmldocs} +mv $RPM_BUILD_ROOT%{_datadir}/doc/systemtap/tapsets docs.installed/ +mv $RPM_BUILD_ROOT%{_datadir}/doc/systemtap/SystemTap_Beginners_Guide docs.installed/ +%endif +%endif + +install -D -m 644 macros.systemtap $RPM_BUILD_ROOT%{_rpmmacrodir}/macros.systemtap + +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/stap-server +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/stap-server +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/stap-server/.systemtap +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/stap-server +touch $RPM_BUILD_ROOT%{_localstatedir}/log/stap-server/log +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/cache/systemtap +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/run/systemtap +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d +install -m 644 initscript/logrotate.stap-server $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/stap-server + +# If using systemd systemtap.service file, retain the old init script in %{_libexecdir} as a helper. +%if %{with_systemd} +mkdir -p $RPM_BUILD_ROOT%{_unitdir} +touch $RPM_BUILD_ROOT%{_unitdir}/systemtap.service +# RHBZ2070857 +mkdir -p $RPM_BUILD_ROOT%{_presetdir} +echo 'enable systemtap.service' > $RPM_BUILD_ROOT%{_presetdir}/42-systemtap.preset +install -m 644 initscript/systemtap.service $RPM_BUILD_ROOT%{_unitdir}/systemtap.service +mkdir -p $RPM_BUILD_ROOT%{_sbindir} +install -m 755 initscript/systemtap $RPM_BUILD_ROOT%{_sbindir}/systemtap-service +%else +mkdir -p $RPM_BUILD_ROOT%{initdir} +install -m 755 initscript/systemtap $RPM_BUILD_ROOT%{initdir} +mkdir -p $RPM_BUILD_ROOT%{_sbindir} +ln -sf %{initdir}/systemtap $RPM_BUILD_ROOT%{_sbindir}/systemtap-service +# TODO CHECK CORRECTNESS: symlink %{_sbindir}/systemtap-service to %{initdir}/systemtap +%endif + +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/conf.d +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/script.d +install -m 644 initscript/config.systemtap $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/config + +%if %{with_systemd} +mkdir -p $RPM_BUILD_ROOT%{_unitdir} +touch $RPM_BUILD_ROOT%{_unitdir}/stap-server.service +install -m 644 stap-server.service $RPM_BUILD_ROOT%{_unitdir}/stap-server.service +mkdir -p $RPM_BUILD_ROOT%{_tmpfilesdir} +install -m 644 stap-server.conf $RPM_BUILD_ROOT%{_tmpfilesdir}/stap-server.conf +%else +install -m 755 initscript/stap-server $RPM_BUILD_ROOT%{initdir} +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/stap-server/conf.d +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig +install -m 644 initscript/config.stap-server $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/stap-server +%endif + +%if %{with_emacsvim} +mkdir -p $RPM_BUILD_ROOT%{_emacs_sitelispdir} +install -p -m 644 emacs/systemtap-mode.el* $RPM_BUILD_ROOT%{_emacs_sitelispdir} +mkdir -p $RPM_BUILD_ROOT%{_emacs_sitestartdir} +install -p -m 644 emacs/systemtap-init.el $RPM_BUILD_ROOT%{_emacs_sitestartdir}/systemtap-init.el +for subdir in ftdetect ftplugin indent syntax +do + mkdir -p $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/$subdir + install -p -m 644 vim/$subdir/*.vim $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/$subdir +done +%endif + +%if %{with_virtguest} + mkdir -p $RPM_BUILD_ROOT%{udevrulesdir} + %if %{with_systemd} + install -p -m 644 staprun/guest/99-stapsh.rules $RPM_BUILD_ROOT%{udevrulesdir} + mkdir -p $RPM_BUILD_ROOT%{_unitdir} + install -p -m 644 staprun/guest/stapsh@.service $RPM_BUILD_ROOT%{_unitdir} + %else + install -p -m 644 staprun/guest/99-stapsh-init.rules $RPM_BUILD_ROOT%{udevrulesdir} + install -p -m 755 staprun/guest/stapshd $RPM_BUILD_ROOT%{initdir} + mkdir -p $RPM_BUILD_ROOT%{_libexecdir}/systemtap + install -p -m 755 staprun/guest/stapsh-daemon $RPM_BUILD_ROOT%{_libexecdir}/systemtap + mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/modules + # Technically, this is only needed for RHEL5, in which the MODULE_ALIAS is missing, but + # it does no harm in RHEL6 as well + install -p -m 755 staprun/guest/virtio_console.modules $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/modules + %endif +%endif + +%if %{with_dracut} + mkdir -p $RPM_BUILD_ROOT%{dracutstap} + install -p -m 755 initscript/99stap/module-setup.sh $RPM_BUILD_ROOT%{dracutstap} + install -p -m 755 initscript/99stap/install $RPM_BUILD_ROOT%{dracutstap} + install -p -m 755 initscript/99stap/check $RPM_BUILD_ROOT%{dracutstap} + install -p -m 755 initscript/99stap/start-staprun.sh $RPM_BUILD_ROOT%{dracutstap} + touch $RPM_BUILD_ROOT%{dracutstap}/params.conf +%endif + +%if %{with_specific_python} +# Some files got ambiguous python shebangs, we fix them after everything else is done +%py3_shebang_fix %{buildroot}%{python3_sitearch} %{buildroot}%{_bindir}/* +%endif + +%pre runtime +%if %{with_sysusers} +echo '%_systemtap_runtime_preinstall' | systemd-sysusers --replace=%{_sysusersdir}/systemtap-runtime.conf - +%else +getent group stapusr >/dev/null || groupadd -f -g 156 -r stapusr +getent group stapsys >/dev/null || groupadd -f -g 157 -r stapsys +getent group stapdev >/dev/null || groupadd -f -g 158 -r stapdev +getent passwd stapunpriv >/dev/null || \ + useradd -c "Systemtap Unprivileged User" -u 159 -g stapunpriv -d %{_localstatedir}/lib/stapunpriv -r -s /sbin/nologin stapunpriv 2>/dev/null || \ + useradd -c "Systemtap Unprivileged User" -g stapunpriv -d %{_localstatedir}/lib/stapunpriv -r -s /sbin/nologin stapunpriv +%endif +exit 0 + +%pre server +%if %{with_sysusers} +echo '%_systemtap_server_preinstall' | systemd-sysusers --replace=%{_sysusersdir}/systemtap-server.conf - +%else +getent group stap-server >/dev/null || groupadd -f -g 155 -r stap-server +getent passwd stap-server >/dev/null || \ + useradd -c "Systemtap Compile Server" -u 155 -g stap-server -d %{_localstatedir}/lib/stap-server -r -s /sbin/nologin stap-server 2>/dev/null || \ + useradd -c "Systemtap Compile Server" -g stap-server -d %{_localstatedir}/lib/stap-server -r -s /sbin/nologin stap-server +%endif +exit 0 + +%pre testsuite +%if %{with_sysusers} +echo '%_systemtap_testsuite_preinstall' | systemd-sysusers --replace=%{_sysusersdir}/systemtap-testsuite.conf - +%else +getent passwd stapusr >/dev/null || \ + useradd -c "Systemtap 'stapusr' User" -g stapusr -r -s /sbin/nologin stapusr +getent passwd stapsys >/dev/null || \ + useradd -c "Systemtap 'stapsys' User" -g stapsys -G stapusr -r -s /sbin/nologin stapsys +getent passwd stapdev >/dev/null || \ + useradd -c "Systemtap 'stapdev' User" -g stapdev -G stapusr -r -s /sbin/nologin stapdev +%endif +exit 0 + +%post server + +# We have some duplication between the %files listings for the +# ~stap-server directories and the explicit mkdir/chown/chmod bits +# here. Part of the reason may be that a preexisting stap-server +# account may well be placed somewhere other than +# %{_localstatedir}/lib/stap-server, but we'd like their permissions +# set similarly. + +test -e ~stap-server && chmod 750 ~stap-server + +if [ ! -f ~stap-server/.systemtap/rc ]; then + mkdir -p ~stap-server/.systemtap + chown stap-server:stap-server ~stap-server/.systemtap + # PR16276: guess at a reasonable number for a default --rlimit-nproc + numcpu=`/usr/bin/getconf _NPROCESSORS_ONLN` + if [ -z "$numcpu" -o "$numcpu" -lt 1 ]; then numcpu=1; fi + nproc=`expr $numcpu \* 30` + # PR29661 -> 4G + echo "--rlimit-as=4294967296 --rlimit-cpu=60 --rlimit-nproc=$nproc --rlimit-stack=1024000 --rlimit-fsize=51200000" > ~stap-server/.systemtap/rc + chown stap-server:stap-server ~stap-server/.systemtap/rc +fi + +test -e %{_localstatedir}/log/stap-server/log || { + touch %{_localstatedir}/log/stap-server/log + chmod 644 %{_localstatedir}/log/stap-server/log + chown stap-server:stap-server %{_localstatedir}/log/stap-server/log +} +# Prepare the service +%if %{with_systemd} + # Note, Fedora policy doesn't allow network services enabled by default + # /bin/systemctl enable stap-server.service >/dev/null 2>&1 || : + /bin/systemd-tmpfiles --create %{_tmpfilesdir}/stap-server.conf >/dev/null 2>&1 || : +%else + /sbin/chkconfig --add stap-server +%endif +exit 0 + +%triggerin client -- systemtap-server +if test -e ~stap-server/.systemtap/ssl/server/stap.cert; then + # echo Authorizing ssl-peer/trusted-signer certificate for local systemtap-server + %{_libexecdir}/systemtap/stap-authorize-cert ~stap-server/.systemtap/ssl/server/stap.cert %{_sysconfdir}/systemtap/ssl/client >/dev/null + %{_libexecdir}/systemtap/stap-authorize-cert ~stap-server/.systemtap/ssl/server/stap.cert %{_sysconfdir}/systemtap/staprun >/dev/null +fi +exit 0 +# XXX: corresponding %triggerun? + +%preun server +# Check that this is the actual deinstallation of the package, as opposed to +# just removing the old package on upgrade. +if [ $1 = 0 ] ; then + %if %{with_systemd} + /bin/systemctl --no-reload disable stap-server.service >/dev/null 2>&1 || : + /bin/systemctl stop stap-server.service >/dev/null 2>&1 || : + %else + /sbin/service stap-server stop >/dev/null 2>&1 + /sbin/chkconfig --del stap-server + %endif +fi +exit 0 + +%postun server +# Check whether this is an upgrade of the package. +# If so, restart the service if it's running +if [ "$1" -ge "1" ] ; then + %if %{with_systemd} + /bin/systemctl condrestart stap-server.service >/dev/null 2>&1 || : + %else + /sbin/service stap-server condrestart >/dev/null 2>&1 || : + %endif +fi +exit 0 + +%post initscript +%if %{with_systemd} + # RHBZ2070857 - use systemd presets instead + # /bin/systemctl enable systemtap.service >/dev/null 2>&1 || : +%else + /sbin/chkconfig --add systemtap +%endif +exit 0 + +%preun initscript +# Check that this is the actual deinstallation of the package, as opposed to +# just removing the old package on upgrade. +if [ $1 = 0 ] ; then + %if %{with_systemd} + /bin/systemctl --no-reload disable systemtap.service >/dev/null 2>&1 || : + /bin/systemctl stop systemtap.service >/dev/null 2>&1 || : + %else + /sbin/service systemtap stop >/dev/null 2>&1 + /sbin/chkconfig --del systemtap + %endif +fi +exit 0 + +%postun initscript +# Check whether this is an upgrade of the package. +# If so, restart the service if it's running +if [ "$1" -ge "1" ] ; then + %if %{with_systemd} + /bin/systemctl condrestart systemtap.service >/dev/null 2>&1 || : + %else + /sbin/service systemtap condrestart >/dev/null 2>&1 || : + %endif +fi +exit 0 + +%post runtime-virtguest +%if %{with_systemd} + # Start services if there are ports present + if [ -d /dev/virtio-ports ]; then + (find /dev/virtio-ports -iname 'org.systemtap.stapsh.[0-9]*' -type l \ + | xargs -n 1 basename \ + | xargs -n 1 -I {} /bin/systemctl start stapsh@{}.service) >/dev/null 2>&1 || : + fi +%else + /sbin/chkconfig --add stapshd + /sbin/chkconfig stapshd on + /sbin/service stapshd start >/dev/null 2>&1 || : +%endif +exit 0 + +%preun runtime-virtguest +# Stop service if this is an uninstall rather than an upgrade +if [ $1 = 0 ]; then + %if %{with_systemd} + # We need to stop all stapsh services. Because they are instantiated from + # a template service file, we can't simply call disable. We need to find + # all the running ones and stop them all individually + for service in `/bin/systemctl --full | grep stapsh@ | cut -d ' ' -f 1`; do + /bin/systemctl stop $service >/dev/null 2>&1 || : + done + %else + /sbin/service stapshd stop >/dev/null 2>&1 + /sbin/chkconfig --del stapshd + %endif +fi +exit 0 + +%postun runtime-virtguest +# Restart service if this is an upgrade rather than an uninstall +if [ "$1" -ge "1" ]; then + %if %{with_systemd} + # We need to restart all stapsh services. Because they are instantiated from + # a template service file, we can't simply call restart. We need to find + # all the running ones and restart them all individually + for service in `/bin/systemctl --full | grep stapsh@ | cut -d ' ' -f 1`; do + /bin/systemctl condrestart $service >/dev/null 2>&1 || : + done + %else + /sbin/service stapshd condrestart >/dev/null 2>&1 + %endif +fi +exit 0 + +%if %{with_python3_probes} +%if %{with_systemd} +%preun exporter +if [ $1 = 0 ] ; then + /bin/systemctl stop stap-exporter.service >/dev/null 2>&1 || : + /bin/systemctl disable stap-exporter.service >/dev/null 2>&1 || : +fi +exit 0 + +%postun exporter +# Restart service if this is an upgrade rather than an uninstall +if [ "$1" -ge "1" ]; then + /bin/systemctl condrestart stap-exporter >/dev/null 2>&1 || : +fi +exit 0 +%endif +%endif + +%post +# Remove any previously-built uprobes.ko materials +(make -C %{_datadir}/systemtap/runtime/uprobes clean) >/dev/null 2>&1 || true +(/sbin/rmmod uprobes) >/dev/null 2>&1 || true + +%preun +# Ditto +(make -C %{_datadir}/systemtap/runtime/uprobes clean) >/dev/null 2>&1 || true +(/sbin/rmmod uprobes) >/dev/null 2>&1 || true + +# ------------------------------------------------------------------------ + +%files +# The main "systemtap" rpm doesn't include any files. + +%files server -f systemtap.lang +%{_bindir}/stap-server +%dir %{_libexecdir}/systemtap +%{_libexecdir}/systemtap/stap-serverd +%{_libexecdir}/systemtap/stap-start-server +%{_libexecdir}/systemtap/stap-stop-server +%{_libexecdir}/systemtap/stap-gen-cert +%{_libexecdir}/systemtap/stap-sign-module +%{_libexecdir}/systemtap/stap-authorize-cert +%{_libexecdir}/systemtap/stap-env +%{_mandir}/man7/error* +%{_mandir}/man7/stappaths.7* +%{_mandir}/man7/warning* +%{_mandir}/man8/stap-server.8* +%if %{with_systemd} +%{_unitdir}/stap-server.service +%{_tmpfilesdir}/stap-server.conf +%else +%{initdir}/stap-server +%dir %{_sysconfdir}/stap-server/conf.d +%config(noreplace) %{_sysconfdir}/sysconfig/stap-server +%endif +%config(noreplace) %{_sysconfdir}/logrotate.d/stap-server +%dir %{_sysconfdir}/stap-server +%dir %attr(0750,stap-server,stap-server) %{_localstatedir}/lib/stap-server +%dir %attr(0700,stap-server,stap-server) %{_localstatedir}/lib/stap-server/.systemtap +%dir %attr(0755,stap-server,stap-server) %{_localstatedir}/log/stap-server +%ghost %config(noreplace) %attr(0644,stap-server,stap-server) %{_localstatedir}/log/stap-server/log +%ghost %attr(0755,stap-server,stap-server) %{_localstatedir}/run/stap-server +%doc README README.unprivileged AUTHORS NEWS +%{!?_licensedir:%global license %%doc} +%license COPYING +%if %{with_sysusers} +%{_sysusersdir}/systemtap-server.conf +%endif + + +%files devel -f systemtap.lang +%{_bindir}/stap +%{_bindir}/stap-prep +%if %{with_python3} +%{_bindir}/stap-profile-annotate +%endif +%{_bindir}/stap-report +%dir %{_datadir}/systemtap +%{_datadir}/systemtap/runtime +%{_datadir}/systemtap/tapset +%{_mandir}/man1/stap.1* +%{_mandir}/man1/stap-prep.1* +%{_mandir}/man1/stap-report.1* +%{_mandir}/man7/error* +%{_mandir}/man7/stappaths.7* +%{_mandir}/man7/warning* +%doc README README.unprivileged AUTHORS NEWS +%{!?_licensedir:%global license %%doc} +%license COPYING +%if %{with_java} +%dir %{_libexecdir}/systemtap +%{_libexecdir}/systemtap/libHelperSDT.so +%endif +%if %{with_emacsvim} +%{_emacs_sitelispdir}/*.el* +%{_emacs_sitestartdir}/systemtap-init.el +%{_datadir}/vim/vimfiles/*/*.vim +%endif +# Notice that the stap-resolve-module-function.py file is used by +# *both* the python2 and python3 subrpms. Both subrpms use that same +# python script to help list python probes. +%if %{with_python3_probes} || %{with_python2_probes} +%{_libexecdir}/systemtap/python/stap-resolve-module-function.py +%exclude %{_libexecdir}/systemtap/python/stap-resolve-module-function.py? +%endif + + +%files runtime -f systemtap.lang +%attr(4110,root,stapusr) %{_bindir}/staprun +%{_bindir}/stapsh +%{_bindir}/stap-merge +%{_bindir}/stap-report +%if %{with_dyninst} +%{_bindir}/stapdyn +%endif +%if %{with_bpf} +%{_bindir}/stapbpf +%endif +%dir %{_libexecdir}/systemtap +%{_libexecdir}/systemtap/stapio +%{_libexecdir}/systemtap/stap-authorize-cert +%if %{with_crash} +%dir %{_libdir}/systemtap +%{_libdir}/systemtap/staplog.so* +%endif +%{_mandir}/man1/stap-report.1* +%{_mandir}/man7/error* +%{_mandir}/man7/stappaths.7* +%{_mandir}/man7/warning* +%{_mandir}/man8/stapsh.8* +%{_mandir}/man8/staprun.8* +%if %{with_dyninst} +%{_mandir}/man8/stapdyn.8* +%endif +%if %{with_bpf} +%{_mandir}/man8/stapbpf.8* +%endif +%doc README README.security AUTHORS NEWS +%{!?_licensedir:%global license %%doc} +%license COPYING +%if %{with_sysusers} +%{_sysusersdir}/systemtap-runtime.conf +%endif + + +%files client -f systemtap.lang +%doc README README.unprivileged AUTHORS NEWS +%{_datadir}/systemtap/examples +%{!?_licensedir:%global license %%doc} +%license COPYING +%doc docs.installed/*.pdf +%if %{with_docs} +%if %{with_htmldocs} +%doc docs.installed/tapsets/*.html +%doc docs.installed/SystemTap_Beginners_Guide +%endif +%endif +%{_bindir}/stap +%{_bindir}/stap-prep +%{_bindir}/stap-report +%{_mandir}/man1/stap.1* +%{_mandir}/man1/stap-prep.1* +%{_mandir}/man1/stap-merge.1* +%{_mandir}/man1/stap-report.1* +%{_mandir}/man1/stapref.1* +%{_mandir}/man3/* +%{_mandir}/man7/error* +%{_mandir}/man7/stappaths.7* +%{_mandir}/man7/warning* +%dir %{_datadir}/systemtap +%{_datadir}/systemtap/tapset + + + +%files initscript +%if %{with_systemd} +%{_presetdir}/42-systemtap.preset +%{_unitdir}/systemtap.service +%{_sbindir}/systemtap-service +%else +%{initdir}/systemtap +%{_sbindir}/systemtap-service +%endif +%dir %{_sysconfdir}/systemtap +%dir %{_sysconfdir}/systemtap/conf.d +%dir %{_sysconfdir}/systemtap/script.d +%config(noreplace) %{_sysconfdir}/systemtap/config +%dir %{_localstatedir}/cache/systemtap +%ghost %{_localstatedir}/run/systemtap +%{_mandir}/man8/systemtap-service.8* +%if %{with_dracut} + %dir %{dracutstap} + %{dracutstap}/* +%endif + + +%files sdt-devel +%{_bindir}/dtrace +%{_includedir}/sys/sdt.h +%{_includedir}/sys/sdt-config.h +%{_mandir}/man1/dtrace.1* +%{_rpmmacrodir}/macros.systemtap +%doc README AUTHORS NEWS +%{!?_licensedir:%global license %%doc} +%license COPYING + + +%files testsuite +%dir %{_datadir}/systemtap +%{_datadir}/systemtap/testsuite +%if %{with_sysusers} +%{_sysusersdir}/systemtap-testsuite.conf +%endif + + +%if %{with_java} +%files runtime-java +%dir %{_libexecdir}/systemtap +%{_libexecdir}/systemtap/libHelperSDT.so +%{_libexecdir}/systemtap/HelperSDT.jar +%{_libexecdir}/systemtap/stapbm +%endif + +%if %{with_python2_probes} +%files runtime-python2 +%{python_sitearch}/HelperSDT +%{python_sitearch}/HelperSDT-*.egg-info +%endif +%if %{with_python3_probes} +%files runtime-python3 +%{python3_sitearch}/HelperSDT +%{python3_sitearch}/HelperSDT-*.egg-info +%endif + +%if %{with_virthost} +%files runtime-virthost +%{_mandir}/man1/stapvirt.1* +%{_bindir}/stapvirt +%endif + +%if %{with_virtguest} +%files runtime-virtguest +%if %{with_systemd} + %{udevrulesdir}/99-stapsh.rules + %{_unitdir}/stapsh@.service +%else + %{udevrulesdir}/99-stapsh-init.rules + %dir %{_libexecdir}/systemtap + %{_libexecdir}/systemtap/stapsh-daemon + %{initdir}/stapshd + %{_sysconfdir}/sysconfig/modules/virtio_console.modules +%endif +%endif + +%if %{with_python3_probes} +%files exporter +%{_sysconfdir}/stap-exporter +%{_sysconfdir}/sysconfig/stap-exporter +%{_unitdir}/stap-exporter.service +%{_mandir}/man8/stap-exporter.8* +%{_sbindir}/stap-exporter +%endif + +%files jupyter +%{_bindir}/stap-jupyter-container +%{_bindir}/stap-jupyter-install +%{_mandir}/man1/stap-jupyter.1* +%dir %{_datadir}/systemtap +%{_datadir}/systemtap/interactive-notebook + +# ------------------------------------------------------------------------ + +# Future new-release entries should be of the form +# * DDD MMM DD YYYY YOURNAME - V-R +# - Upstream release, see wiki page below for detailed notes. +# http://sourceware.org/systemtap/wiki/SystemTapReleases + +# PRERELEASE +%changelog +* Fri Aug 9 2024 Martin Cermak - 5.1-9 +- RHEL-52491 + +* Fri Jul 26 2024 Martin Cermak - 5.1-8 +- RHEL-43481 + +* Wed Jul 24 2024 Martin Cermak - 5.1-7 +- RHEL-50107 + +* Mon Jun 24 2024 Troy Dawson - 5.1-6 +- Bump release for June 2024 mass rebuild + +* Tue Jun 18 2024 Martin Cermak - 5.1-5 +- RHEL-42605 add upstream commits 1fd6fb4d, de8aba9a, da72d043 + +* Mon Jun 17 2024 Martin Cermak - 5.1-4 +- RHEL-42605 + +* Thu May 16 2024 Martin Cermak - 5.1-3 +- RHEL-29529 +- RHEL-7318 +- RHELMISC-3948 + +* Tue May 14 2024 William Cohen - 5.1-2 +- RHEL-36201 + +* Fri Apr 26 2024 Frank Ch. Eigler - 5.1-1 +- Upstream release, see wiki page below for detailed notes. + https://sourceware.org/systemtap/wiki/SystemTapReleases + + * Thu Jan 25 2024 Frank Ch. Eigler - 5.1-17062192g5fd8daba +- Automated weekly rawhide release +- Applied spec changes from upstream git + +* Thu Jan 25 2024 Frank Ch. Eigler - 5.1-17062114g2604d135 +- Automated weekly rawhide release +- Applied spec changes from upstream git + +* Tue Jan 23 2024 Frank Ch. Eigler - 5.1-17060399gb6abf4bd +- Automated weekly rawhide release +- Applied spec changes from upstream git + +* Mon Jan 22 2024 Frank Ch. Eigler - 5.1-17059382g67086c54 +- Automated weekly rawhide release +- Applied spec changes from upstream git + +* Thu Jan 18 2024 Frank Ch. Eigler - 5.1-17056139g6c0b92b3 +- Automated weekly rawhide release +- Applied spec changes from upstream git + +* Thu Jan 18 2024 Frank Ch. Eigler - 5.1-17056120g2ccc0c4c +- Automated weekly rawhide release +- Applied spec changes from upstream git + +* Thu Jan 18 2024 Jonathan Wakely - 5.0-4 +- Rebuilt for Boost 1.83 + +* Tue Nov 14 2023 Frank Ch. Eigler - 5.0-3 +- RHEL-16549 + +* Mon Nov 06 2023 Frank Ch. Eigler - 5.0-2 +- License header tweak + +* Sat Nov 04 2023 Frank Ch. Eigler - 5.0-1 +- Upstream release, see wiki page below for detailed notes. + https://sourceware.org/systemtap/wiki/SystemTapReleases +- migrated to SPDX license + +* Fri Apr 28 2023 Frank Ch. Eigler - 4.9-1 +- Upstream release, see wiki page below for detailed notes. + https://sourceware.org/systemtap/wiki/SystemTapReleases + +* Thu Nov 03 2022 Serhei Makarov - 4.8-1 +- Upstream release, see wiki page below for detailed notes. + https://sourceware.org/systemtap/wiki/SystemTapReleases + +* Mon May 02 2022 Frank Ch. Eigler - 4.7-1 +- Upstream release, see wiki page below for detailed notes. + https://sourceware.org/systemtap/wiki/SystemTapReleases + +* Mon Nov 15 2021 Serhei Makarov - 4.6-1 +- Upstream release, see wiki page below for detailed notes. + https://sourceware.org/systemtap/wiki/SystemTapReleases + +* Fri May 07 2021 Serhei Makarov - 4.5-1 +- Upstream release. + +* Mon Nov 09 2020 Frank Ch. Eigler - 4.4-1 +- Upstream release. + +* Thu Jun 11 2020 Frank Ch. Eigler - 4.3-1 +- Upstream release. + +* Mon Nov 18 2019 Sagar Patel - 4.2-1 +- Upstream release. + +* Tue May 07 2019 Serguei Makarov - 4.1-1 +- Upstream release. + +* Sat Oct 13 2018 Frank Ch. Eigler - 4.0-1 +- Upstream release. + +* Thu Jun 07 2018 Frank Ch. Eigler - 3.3-1 +- Upstream release. + +* Wed Oct 18 2017 Frank Ch. Eigler - 3.2-1 +- Upstream release. + +* Fri Feb 17 2017 Frank Ch. Eigler - 3.1-1 +- Upstream release. + +* Sun Mar 27 2016 Frank Ch. Eigler - 3.0-1 +- Upstream release. + +* Thu Oct 08 2015 Frank Ch. Eigler - 2.9-1 +- Upstream release. + +* Wed Jun 17 2015 Abegail Jakop - 2.8-1 +- Upstream release. + +* Wed Feb 18 2015 Frank Ch. Eigler - 2.7-1 +- Upstream release. + +* Fri Sep 05 2014 Josh Stone - 2.6-1 +- Upstream release. + +* Mon Jul 07 2014 Josh Stone +- Flip with_dyninst to an %%ifarch passlist. + +* Wed Apr 30 2014 Jonathan Lebon - 2.5-1 +- Upstream release. + +* Thu Feb 13 2014 Lukas Berk +- Add directory checks for runtime-java sym links + +* Mon Jan 06 2014 Jonathan Lebon +- Added dracut module to initscript package + +* Wed Nov 06 2013 Frank Ch. Eigler - 2.4-1 +- Upstream release. + +* Wed Oct 09 2013 Jonathan Lebon +- Added runtime-virthost and runtime-virtguest packages. + +* Thu Jul 25 2013 Frank Ch. Eigler - 2.3-1 +- Upstream release. + +* Thu May 16 2013 Frank Ch. Eigler - 2.2.1-1 +- Upstream release. + +* Tue May 14 2013 Frank Ch. Eigler - 2.2-1 +- Upstream release. + +* Wed Feb 13 2013 Serguei Makarov - 2.1-1 +- Upstream release. + +* Tue Oct 09 2012 Josh Stone - 2.0-1 +- Upstream release. + +* Fri Jul 13 2012 Peter Robinson +- Fix ifarch statement +- use file based requires for glibc-devel on x86_64 so that we work in koji + +* Sun Jun 17 2012 Frank Ch. Eigler - 1.8-1 +- Upstream release. + +* Wed Feb 01 2012 Frank Ch. Eigler - 1.7-1 +- Upstream release. + +* Fri Jan 13 2012 David Smith - 1.6-2 +- Fixed /bin/mktemp require. + +* Mon Jul 25 2011 Stan Cox - 1.6-1 +- Upstream release. + +* Mon May 23 2011 Stan Cox - 1.5-1 +- Upstream release. + +* Mon Jan 17 2011 Frank Ch. Eigler - 1.4-1 +- Upstream release. + +* Wed Jul 21 2010 Josh Stone - 1.3-1 +- Upstream release. + +* Mon Mar 22 2010 Frank Ch. Eigler - 1.2-1 +- Upstream release. + +* Mon Dec 21 2009 David Smith - 1.1-1 +- Upstream release. + +* Tue Sep 22 2009 Josh Stone - 1.0-1 +- Upstream release. + +* Tue Aug 4 2009 Josh Stone - 0.9.9-1 +- Upstream release. + +* Thu Jun 11 2009 Josh Stone - 0.9.8-1 +- Upstream release. + +* Thu Apr 23 2009 Josh Stone - 0.9.7-1 +- Upstream release. + +* Fri Mar 27 2009 Josh Stone - 0.9.5-1 +- Upstream release. + +* Wed Mar 18 2009 Will Cohen - 0.9-2 +- Add location of man pages. + +* Tue Feb 17 2009 Frank Ch. Eigler - 0.9-1 +- Upstream release. + +* Thu Nov 13 2008 Frank Ch. Eigler - 0.8-1 +- Upstream release. + +* Tue Jul 15 2008 Frank Ch. Eigler - 0.7-1 +- Upstream release. + +* Fri Feb 1 2008 Frank Ch. Eigler - 0.6.1-3 +- Add zlib-devel to buildreq; missing from crash-devel +- Process testsuite .stp files for #!stap->#!/usr/bin/stap + +* Fri Jan 18 2008 Frank Ch. Eigler - 0.6.1-1 +- Add crash-devel buildreq to build staplog.so crash(8) module. +- Many robustness & functionality improvements: + +* Wed Dec 5 2007 Will Cohen - 0.6-2 +- Correct Source to point to location contain code. + +* Thu Aug 9 2007 David Smith - 0.6-1 +- Bumped version, added libcap-devel BuildRequires. + +* Wed Jul 11 2007 Will Cohen - 0.5.14-2 +- Fix Requires and BuildRequires for sqlite. + +* Mon Jul 2 2007 Frank Ch. Eigler - 0.5.14-1 +- Many robustness improvements: 1117, 1134, 1305, 1307, 1570, 1806, + 2033, 2116, 2224, 2339, 2341, 2406, 2426, 2438, 2583, 3037, + 3261, 3282, 3331, 3428 3519, 3545, 3625, 3648, 3880, 3888, 3911, + 3952, 3965, 4066, 4071, 4075, 4078, 4081, 4096, 4119, 4122, 4127, + 4146, 4171, 4179, 4183, 4221, 4224, 4254, 4281, 4319, 4323, 4326, + 4329, 4332, 4337, 4415, 4432, 4444, 4445, 4458, 4467, 4470, 4471, + 4518, 4567, 4570, 4579, 4589, 4609, 4664 + +* Mon Mar 26 2007 Frank Ch. Eigler - 0.5.13-1 +- An emergency / preliminary refresh, mainly for compatibility + with 2.6.21-pre kernels. + +* Mon Jan 1 2007 Frank Ch. Eigler - 0.5.12-1 +- Many changes, see NEWS file. + +* Tue Sep 26 2006 David Smith - 0.5.10-1 +- Added 'systemtap-runtime' subpackage. + +* Wed Jul 19 2006 Roland McGrath - 0.5.9-1 +- PRs 2669, 2913 + +* Fri Jun 16 2006 Roland McGrath - 0.5.8-1 +- PRs 2627, 2520, 2228, 2645 + +* Fri May 5 2006 Frank Ch. Eigler - 0.5.7-1 +- PRs 2511 2453 2307 1813 1944 2497 2538 2476 2568 1341 2058 2220 2437 + 1326 2014 2599 2427 2438 2465 1930 2149 2610 2293 2634 2506 2433 + +* Tue Apr 4 2006 Roland McGrath - 0.5.5-1 +- Many changes, affected PRs include: 2068, 2293, 1989, 2334, + 1304, 2390, 2425, 953. + +* Wed Feb 1 2006 Frank Ch. Eigler - 0.5.4-1 +- PRs 1916, 2205, 2142, 2060, 1379 + +* Mon Jan 16 2006 Roland McGrath - 0.5.3-1 +- Many changes, affected PRs include: 2056, 1144, 1379, 2057, + 2060, 1972, 2140, 2148 + +* Mon Dec 19 2005 Roland McGrath - 0.5.2-1 +- Fixed build with gcc 4.1, various tapset changes. + +* Wed Dec 7 2005 Roland McGrath - 0.5.1-1 +- elfutils update, build changes + +* Fri Dec 02 2005 Frank Ch. Eigler - 0.5-1 +- Many fixes and improvements: 1425, 1536, 1505, 1380, 1329, 1828, 1271, + 1339, 1340, 1345, 1837, 1917, 1903, 1336, 1868, 1594, 1564, 1276, 1295 + +* Mon Oct 31 2005 Roland McGrath - 0.4.2-1 +- Many fixes and improvements: PRs 1344, 1260, 1330, 1295, 1311, 1368, + 1182, 1131, 1332, 1366, 1456, 1271, 1338, 1482, 1477, 1194. + +* Wed Sep 14 2005 Roland McGrath - 0.4.1-1 +- Many fixes and improvements since 0.2.2; relevant PRs include: + 1122, 1134, 1155, 1172, 1174, 1175, 1180, 1186, 1187, 1191, 1193, 1195, + 1197, 1205, 1206, 1209, 1213, 1244, 1257, 1258, 1260, 1265, 1268, 1270, + 1289, 1292, 1306, 1335, 1257 + +* Wed Sep 7 2005 Frank Ch. Eigler +- Bump version. + +* Tue Aug 16 2005 Frank Ch. Eigler +- Bump version. + +* Wed Aug 3 2005 Martin Hunt - 0.2.2-1 +- Add directory /var/cache/systemtap +- Add stp_check to /usr/libexec/systemtap + +* Wed Aug 3 2005 Roland McGrath - 0.2.1-1 +- New version 0.2.1, various fixes. + +* Fri Jul 29 2005 Roland McGrath - 0.2-1 +- New version 0.2, requires elfutils 0.111 + +* Mon Jul 25 2005 Roland McGrath +- Clean up spec file, build bundled elfutils. + +* Thu Jul 21 2005 Martin Hunt +- Set Version to use version from autoconf. +- Fix up some of the path names. +- Add Requires and BuildRequires. + +* Tue Jul 19 2005 Will Cohen +- Initial creation of RPM.