This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
Re: pre-compiled systemtap modules (try 2)
Frank Ch. Eigler wrote:
We should consider separating the compile / run front-ends into
separate programs entirely, perhaps by promoting and renaming stpd
("staprun")? This makes sense further because we will want to make it
possible to install only a small subset of systemtap itself on a
deployment machine in order to run a pre-compiled script.
OK, in the interests of furthering this, I'm attaching a patch. This
renames 'stpd' to 'staprun' and moves it to /usr/bin. The testsuite has
been modified to use 'staprun' instead of 'stpd'. The spec file has
been modified to output 2 packages instead of 1: "systemtap" and
"systemtap-runtime" (currently "systemtap-runtime" just has staprun in it).
I was able to install both rpms, compile a systemtap module, remove the
"systemtap" rpm (leaving the "systemtap-runtime" rpm behind), and run
the module.
There is still documentation work to be done (at least).
Comments?
--
David Smith
dsmith@redhat.com
Red Hat, Inc.
http://www.redhat.com
256.217.0141 (direct)
256.837.0057 (fax)
Index: Makefile.am
===================================================================
RCS file: /cvs/systemtap/src/Makefile.am,v
retrieving revision 1.53
diff -u -p -r1.53 Makefile.am
--- Makefile.am 12 Aug 2006 15:28:08 -0000 1.53
+++ Makefile.am 21 Sep 2006 15:43:07 -0000
@@ -5,14 +5,14 @@ AUTOMAKE_OPTIONS = dist-bzip2
pkglibexecdir = ${libexecdir}/${PACKAGE}
-AM_CPPFLAGS = -DPKGLIBDIR='"$(pkglibexecdir)"' -DPKGDATADIR='"${pkgdatadir}"'
+AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DPKGDATADIR='"${pkgdatadir}"'
AM_CFLAGS = -std=gnu99 -D_GNU_SOURCE -fexceptions \
-Wall -Werror -Wshadow -Wunused -Wformat=2 -W
AM_CXXFLAGS = -Wall
dist_man_MANS = stap.1 stapprobes.5 stapfuncs.5 stapex.5 lket.5
-bin_PROGRAMS = stap
+bin_PROGRAMS = stap staprun
stap_SOURCES = main.cxx \
parse.cxx staptree.cxx elaborate.cxx translate.cxx \
tapsets.cxx buildrun.cxx loc2c.c
@@ -47,11 +47,8 @@ install-elfutils:
install-exec-local: install-elfutils
endif
-# stpd goes into $libexec/$package, so libexec_PROGRAMS would
-# put it into the wrong location
-pkglibexec_PROGRAMS = stpd
-stpd_SOURCES = runtime/stpd/stpd.c runtime/stpd/librelay.c
-stpd_LDADD = -lpthread
+staprun_SOURCES = runtime/stpd/stpd.c runtime/stpd/librelay.c
+staprun_LDADD = -lpthread
pkglibexec_SCRIPTS = stp_check
CLEANFILES += $(pkglibexec_SCRIPTS)
Index: Makefile.in
===================================================================
RCS file: /cvs/systemtap/src/Makefile.in,v
retrieving revision 1.59
diff -u -p -r1.59 Makefile.in
--- Makefile.in 12 Aug 2006 15:28:08 -0000 1.59
+++ Makefile.in 21 Sep 2006 15:43:07 -0000
@@ -37,14 +37,13 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
-bin_PROGRAMS = stap$(EXEEXT)
+bin_PROGRAMS = stap$(EXEEXT) staprun$(EXEEXT)
@BUILD_ELFUTILS_TRUE@am__append_1 = -Iinclude-elfutils
@BUILD_ELFUTILS_TRUE@am__append_2 = -Llib-elfutils -Wl,-rpath-link,lib-elfutils \
@BUILD_ELFUTILS_TRUE@ -Wl,--enable-new-dtags,-rpath,$(pkglibdir)
@BUILD_ELFUTILS_TRUE@am__append_3 = stamp-elfutils
@BUILD_ELFUTILS_FALSE@stap_DEPENDENCIES =
-pkglibexec_PROGRAMS = stpd$(EXEEXT)
noinst_PROGRAMS = loc2c-test$(EXEEXT)
@BUILD_LKET_B2A_TRUE@am__append_4 = runtime/lket/b2a
subdir = .
@@ -67,11 +66,9 @@ CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = systemtap.spec stp_check stap.1 stapprobes.5 \
stapfuncs.5 stapex.5 lket.5
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" \
- "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(man1dir)" \
- "$(DESTDIR)$(man5dir)"
+ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-pkglibexecPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(pkglibexec_PROGRAMS)
+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
am_loc2c_test_OBJECTS = loc2c_test-loc2c-test.$(OBJEXT) \
loc2c_test-loc2c.$(OBJEXT)
loc2c_test_OBJECTS = $(am_loc2c_test_OBJECTS)
@@ -82,9 +79,9 @@ am_stap_OBJECTS = stap-main.$(OBJEXT) st
stap-translate.$(OBJEXT) stap-tapsets.$(OBJEXT) \
stap-buildrun.$(OBJEXT) stap-loc2c.$(OBJEXT)
stap_OBJECTS = $(am_stap_OBJECTS)
-am_stpd_OBJECTS = stpd.$(OBJEXT) librelay.$(OBJEXT)
-stpd_OBJECTS = $(am_stpd_OBJECTS)
-stpd_DEPENDENCIES =
+am_staprun_OBJECTS = stpd.$(OBJEXT) librelay.$(OBJEXT)
+staprun_OBJECTS = $(am_staprun_OBJECTS)
+staprun_DEPENDENCIES =
pkglibexecSCRIPT_INSTALL = $(INSTALL_SCRIPT)
SCRIPTS = $(pkglibexec_SCRIPTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
@@ -99,8 +96,9 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_IN
CXXLD = $(CXX)
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
-SOURCES = $(loc2c_test_SOURCES) $(stap_SOURCES) $(stpd_SOURCES)
-DIST_SOURCES = $(loc2c_test_SOURCES) $(stap_SOURCES) $(stpd_SOURCES)
+SOURCES = $(loc2c_test_SOURCES) $(stap_SOURCES) $(staprun_SOURCES)
+DIST_SOURCES = $(loc2c_test_SOURCES) $(stap_SOURCES) \
+ $(staprun_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
@@ -217,7 +215,7 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
AUTOMAKE_OPTIONS = dist-bzip2
pkglibexecdir = ${libexecdir}/${PACKAGE}
-AM_CPPFLAGS = -DPKGLIBDIR='"$(pkglibexecdir)"' -DPKGDATADIR='"${pkgdatadir}"'
+AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DPKGDATADIR='"${pkgdatadir}"'
AM_CFLAGS = -std=gnu99 -D_GNU_SOURCE -fexceptions \
-Wall -Werror -Wshadow -Wunused -Wformat=2 -W
@@ -234,8 +232,8 @@ stap_LDFLAGS = $(AM_LDFLAGS) $(am__appen
CLEANFILES = $(am__append_3) $(pkglibexec_SCRIPTS)
@BUILD_ELFUTILS_TRUE@BUILT_SOURCES = stamp-elfutils
@BUILD_ELFUTILS_TRUE@stap_DEPENDENCIES = lib-elfutils/libdw.so
-stpd_SOURCES = runtime/stpd/stpd.c runtime/stpd/librelay.c
-stpd_LDADD = -lpthread
+staprun_SOURCES = runtime/stpd/stpd.c runtime/stpd/librelay.c
+staprun_LDADD = -lpthread
pkglibexec_SCRIPTS = stp_check
loc2c_test_SOURCES = loc2c-test.c loc2c.c
loc2c_test_CPPFLAGS = $(stap_CPPFLAGS)
@@ -345,38 +343,15 @@ clean-binPROGRAMS:
clean-noinstPROGRAMS:
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-install-pkglibexecPROGRAMS: $(pkglibexec_PROGRAMS)
- @$(NORMAL_INSTALL)
- test -z "$(pkglibexecdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibexecdir)"
- @list='$(pkglibexec_PROGRAMS)'; for p in $$list; do \
- p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
- if test -f $$p \
- ; then \
- f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
- echo " $(INSTALL_PROGRAM_ENV) $(pkglibexecPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(pkglibexecdir)/$$f'"; \
- $(INSTALL_PROGRAM_ENV) $(pkglibexecPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(pkglibexecdir)/$$f" || exit 1; \
- else :; fi; \
- done
-
-uninstall-pkglibexecPROGRAMS:
- @$(NORMAL_UNINSTALL)
- @list='$(pkglibexec_PROGRAMS)'; for p in $$list; do \
- f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
- echo " rm -f '$(DESTDIR)$(pkglibexecdir)/$$f'"; \
- rm -f "$(DESTDIR)$(pkglibexecdir)/$$f"; \
- done
-
-clean-pkglibexecPROGRAMS:
- -test -z "$(pkglibexec_PROGRAMS)" || rm -f $(pkglibexec_PROGRAMS)
loc2c-test$(EXEEXT): $(loc2c_test_OBJECTS) $(loc2c_test_DEPENDENCIES)
@rm -f loc2c-test$(EXEEXT)
$(LINK) $(loc2c_test_LDFLAGS) $(loc2c_test_OBJECTS) $(loc2c_test_LDADD) $(LIBS)
stap$(EXEEXT): $(stap_OBJECTS) $(stap_DEPENDENCIES)
@rm -f stap$(EXEEXT)
$(CXXLINK) $(stap_LDFLAGS) $(stap_OBJECTS) $(stap_LDADD) $(LIBS)
-stpd$(EXEEXT): $(stpd_OBJECTS) $(stpd_DEPENDENCIES)
- @rm -f stpd$(EXEEXT)
- $(LINK) $(stpd_LDFLAGS) $(stpd_OBJECTS) $(stpd_LDADD) $(LIBS)
+staprun$(EXEEXT): $(staprun_OBJECTS) $(staprun_DEPENDENCIES)
+ @rm -f staprun$(EXEEXT)
+ $(LINK) $(staprun_LDFLAGS) $(staprun_OBJECTS) $(staprun_LDADD) $(LIBS)
install-pkglibexecSCRIPTS: $(pkglibexec_SCRIPTS)
@$(NORMAL_INSTALL)
test -z "$(pkglibexecdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibexecdir)"
@@ -986,7 +961,7 @@ check: $(BUILT_SOURCES)
all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) config.h
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)"; do \
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: $(BUILT_SOURCES)
@@ -1020,7 +995,7 @@ maintainer-clean-generic:
clean: clean-recursive
clean-am: clean-binPROGRAMS clean-generic clean-local \
- clean-noinstPROGRAMS clean-pkglibexecPROGRAMS mostlyclean-am
+ clean-noinstPROGRAMS mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
@@ -1042,7 +1017,7 @@ info-am:
install-data-am: install-data-local install-man
install-exec-am: install-binPROGRAMS install-exec-local \
- install-pkglibexecPROGRAMS install-pkglibexecSCRIPTS
+ install-pkglibexecSCRIPTS
install-info: install-info-recursive
@@ -1070,8 +1045,7 @@ ps: ps-recursive
ps-am:
uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-local \
- uninstall-man uninstall-pkglibexecPROGRAMS \
- uninstall-pkglibexecSCRIPTS
+ uninstall-man uninstall-pkglibexecSCRIPTS
uninstall-info: uninstall-info-recursive
@@ -1079,17 +1053,16 @@ uninstall-man: uninstall-man1 uninstall-
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
check-am clean clean-binPROGRAMS clean-generic clean-local \
- clean-noinstPROGRAMS clean-pkglibexecPROGRAMS clean-recursive \
- ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
- dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \
- distclean-compile distclean-generic distclean-hdr \
- distclean-recursive distclean-tags distcleancheck distdir \
- distuninstallcheck dvi dvi-am html html-am info info-am \
- install install-am install-binPROGRAMS install-data \
- install-data-am install-data-local install-exec \
- install-exec-am install-exec-local install-info \
- install-info-am install-man install-man1 install-man5 \
- install-pkglibexecPROGRAMS install-pkglibexecSCRIPTS \
+ clean-noinstPROGRAMS clean-recursive ctags ctags-recursive \
+ dist dist-all dist-bzip2 dist-gzip dist-hook dist-shar \
+ dist-tarZ dist-zip distcheck distclean distclean-compile \
+ distclean-generic distclean-hdr distclean-recursive \
+ distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS install-data install-data-am \
+ install-data-local install-exec install-exec-am \
+ install-exec-local install-info install-info-am install-man \
+ install-man1 install-man5 install-pkglibexecSCRIPTS \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-compile \
@@ -1097,7 +1070,7 @@ uninstall-man: uninstall-man1 uninstall-
tags tags-recursive uninstall uninstall-am \
uninstall-binPROGRAMS uninstall-info-am uninstall-local \
uninstall-man uninstall-man1 uninstall-man5 \
- uninstall-pkglibexecPROGRAMS uninstall-pkglibexecSCRIPTS
+ uninstall-pkglibexecSCRIPTS
@BUILD_ELFUTILS_TRUE@stamp-elfutils: config.status
@BUILD_ELFUTILS_TRUE@ $(MAKE) $(AM_MAKEFLAGS) -C build-elfutils all
Index: buildrun.cxx
===================================================================
RCS file: /cvs/systemtap/src/buildrun.cxx,v
retrieving revision 1.27
diff -u -p -r1.27 buildrun.cxx
--- buildrun.cxx 18 Sep 2006 16:55:01 -0000 1.27
+++ buildrun.cxx 21 Sep 2006 15:43:07 -0000
@@ -125,31 +125,31 @@ run_pass (systemtap_session& s)
struct passwd *pw = getpwuid(getuid());
string username = string(pw->pw_name);
- // for now, just spawn stpd
- string stpd_cmd = string("sudo ")
- + string(PKGLIBDIR) + "/stpd "
+ // for now, just spawn staprun
+ string staprun_cmd = string("sudo ")
+ + string(BINDIR) + "/staprun "
+ (s.verbose>1 ? "" : "-q ")
+ "-u " + username + " "
+ (s.output_file.empty() ? "" : "-o " + s.output_file + " ");
- stpd_cmd += "-d " + stringify(getpid()) + " ";
+ staprun_cmd += "-d " + stringify(getpid()) + " ";
if (s.cmd != "")
- stpd_cmd += "-c \"" + s.cmd + "\" ";
+ staprun_cmd += "-c \"" + s.cmd + "\" ";
if (s.target_pid)
- stpd_cmd += "-t " + stringify(s.target_pid) + " ";
+ staprun_cmd += "-t " + stringify(s.target_pid) + " ";
if (s.buffer_size)
- stpd_cmd += "-b " + stringify(s.buffer_size) + " ";
+ staprun_cmd += "-b " + stringify(s.buffer_size) + " ";
- stpd_cmd += s.tmpdir + "/" + s.module_name + ".ko";
+ staprun_cmd += s.tmpdir + "/" + s.module_name + ".ko";
- if (s.verbose>1) clog << "Running " << stpd_cmd << endl;
+ if (s.verbose>1) clog << "Running " << staprun_cmd << endl;
signal (SIGHUP, SIG_IGN);
signal (SIGINT, SIG_IGN);
- rc = system (stpd_cmd.c_str ());
+ rc = system (staprun_cmd.c_str ());
return rc;
}
Index: systemtap.spec.in
===================================================================
RCS file: /cvs/systemtap/src/systemtap.spec.in,v
retrieving revision 1.45
diff -u -p -r1.45 systemtap.spec.in
--- systemtap.spec.in 15 Aug 2006 07:08:53 -0000 1.45
+++ systemtap.spec.in 21 Sep 2006 15:43:07 -0000
@@ -42,6 +42,7 @@ Requires: glib2 >= 2.0.0
# or is that kernel-smp-devel? kernel-hugemem-devel?
Requires: gcc make
# Suggest: kernel-debuginfo
+Requires: systemtap-runtime = %{version}-%{release}
%if %{bundled_elfutils}
Source1: elfutils-%{elfutils_version}.tar.gz
@@ -56,6 +57,18 @@ SystemTap is an instrumentation system f
Developers can write instrumentation to collect data on the operation
of the system.
+%package runtime
+Summary: Instrumentation System Runtime
+Group: Development/System
+License: GPL
+URL: http://sourceware.org/systemtap/
+Requires: kernel >= 2.6.9-11
+
+%description runtime
+SystemTap runtime is the runtime component of an instrumentation
+system for systems running Linux 2.6. Developers can write
+instrumentation to collect data on the operation of the system.
+
%prep
%setup -q %{?setup_elfutils}
@@ -124,6 +137,9 @@ rm -rf ${RPM_BUILD_ROOT}
%{_libdir}/%{name}/lib*.so*
%endif
+%files runtime
+%defattr(-,root,root)
+%{_bindir}/staprun
%changelog
* Wed Jul 19 2006 Roland McGrath <roland@redhat.com> - 0.5.9-1
Index: runtime/stpd/Makefile
===================================================================
RCS file: /cvs/systemtap/src/runtime/stpd/Makefile,v
retrieving revision 1.7
diff -u -p -r1.7 Makefile
--- runtime/stpd/Makefile 24 Aug 2005 16:27:35 -0000 1.7
+++ runtime/stpd/Makefile 21 Sep 2006 15:43:08 -0000
@@ -1,7 +1,7 @@
-all: stpd stp_merge stp_dump
+all: staprun stp_merge stp_dump
-stpd: stpd.c librelay.c ../transport/transport_msgs.h librelay.h
- gcc -Wall -O3 -o stpd stpd.c librelay.c -lpthread
+staprun: stpd.c librelay.c ../transport/transport_msgs.h librelay.h
+ gcc -Wall -O3 -o staprun stpd.c librelay.c -lpthread
stp_merge: stp_merge.c
gcc -Wall -O3 -o stp_merge stp_merge.c
@@ -10,7 +10,7 @@ stp_dump: stp_dump.c
gcc -Wall -O3 -o stp_dump stp_dump.c
debug: stpd.c librelay.c ../transport/transport_msgs.h librelay.h
- gcc -Wall -g -D DEBUG -o stpd stpd.c librelay.c -lpthread
+ gcc -Wall -g -D DEBUG -o staprun stpd.c librelay.c -lpthread
clean:
- /bin/rm -f stpd stp_merge *.o *~
+ /bin/rm -f staprun stp_merge *.o *~
Index: testsuite/systemtap.samples/args.exp
===================================================================
RCS file: /cvs/systemtap/src/testsuite/systemtap.samples/args.exp,v
retrieving revision 1.1
diff -u -p -r1.1 args.exp
--- testsuite/systemtap.samples/args.exp 12 Aug 2006 05:13:10 -0000 1.1
+++ testsuite/systemtap.samples/args.exp 21 Sep 2006 15:43:08 -0000
@@ -2,12 +2,12 @@ set test "args"
if {![installtest_p]} { untested $test; return }
set stappath [exec which stap]
-set stpdpath [exec dirname $stappath]/../libexec/systemtap/stpd
+set staprunpath [exec which staprun]
-if [file exists $stpdpath] {
- pass "$test search for stpd ($stpdpath)"
+if [file exists $staprunpath] {
+ pass "$test search for staprun ($staprunpath)"
} else {
- fail "$test search for stpd"
+ fail "$test search for staprun"
return
}
@@ -37,7 +37,7 @@ if [file exists $modpath] {
return
}
-spawn sudo $stpdpath -r -d [pid] $modpath foo=hello bar=999
+spawn sudo $staprunpath -r -d [pid] $modpath foo=hello bar=999
set ok 0
expect {
-timeout 30
@@ -52,7 +52,7 @@ if {$ok == 1} {
fail "$test run 1"
}
-spawn sudo $stpdpath -r -d [pid] $modpath foo=goodbye bar=0
+spawn sudo $staprunpath -r -d [pid] $modpath foo=goodbye bar=0
set ok 0
expect {
-timeout 30
Index: testsuite/systemtap.syscall/test.tcl
===================================================================
RCS file: /cvs/systemtap/src/testsuite/systemtap.syscall/test.tcl,v
retrieving revision 1.1
diff -u -p -r1.1 test.tcl
--- testsuite/systemtap.syscall/test.tcl 12 Aug 2006 05:13:10 -0000 1.1
+++ testsuite/systemtap.syscall/test.tcl 21 Sep 2006 15:43:08 -0000
@@ -34,20 +34,17 @@ set filename "${testname}.c"
if {$modname == ""} {
set cmd "stap -c ../${testname} ../sys.stp"
} else {
- set stpd ""
- set stpd_list "/usr/local/libexec/systemtap/stpd /usr/libexec/systemtap/stpd"
- foreach path $stpd_list {
- if {[file exists $path]} {
- set stpd $path
- break
- }
- }
- if {$stpd == ""} {
- puts "stpd not found!"
+ set ccmd "which staprun"
+ catch {eval exec $ccmd} output
+ if {[file exists $output]} {
+ set staprun $output
+ } else {
+ puts "staprun not found!"
exit
}
+
set user $::tcl_platform(user)
- set cmd "sudo $stpd -rmq -u $user -c ../${testname} ${modname}"
+ set cmd "sudo $staprun -rmq -u $user -c ../${testname} ${modname}"
}
# Extract the expected results