public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-debug/dtrace/
Date: Wed, 05 Feb 2025 01:12:33 +0000 (UTC)	[thread overview]
Message-ID: <1738717871.103b03cd2feb446b6248eb17e3927c504d19d8d0.sam@gentoo> (raw)

commit:     103b03cd2feb446b6248eb17e3927c504d19d8d0
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Wed Feb  5 01:11:11 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Feb  5 01:11:11 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=103b03cd

dev-debug/dtrace: add 2.0.2

Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-debug/dtrace/Manifest            |   1 +
 dev-debug/dtrace/dtrace-2.0.2.ebuild | 225 +++++++++++++++++++++++++++++++++++
 2 files changed, 226 insertions(+)

diff --git a/dev-debug/dtrace/Manifest b/dev-debug/dtrace/Manifest
index 554f7f6f5e67..dc6c52516a58 100644
--- a/dev-debug/dtrace/Manifest
+++ b/dev-debug/dtrace/Manifest
@@ -1 +1,2 @@
 DIST dtrace-2.0.1.1.tar.gz 1435524 BLAKE2B 761a931b9d871e9316f11ebe960f6bbfd3c16a82cf1cdd9ae5d69b22e0d8cea8d4b3924c960b7915f8843ce1e5c37bd257a52f1ce346957002b0ab00e59306fb SHA512 15809f2bc996bac9bd6cbb2b03eaa9a0c6a2aea9404642280f14d75b7d6feaec31b5d2c16915255cd202006cdff7835f578c042b087605708a9eb935407f1b95
+DIST dtrace-2.0.2.tar.gz 1466888 BLAKE2B 82bcf55f46802b525dd5bfb8d2ee96223d6ee3e76b752632b61cdc652308efa143f8158fbdfff7f2af1e63d5fc57aa44b0ca826e313b3c5c9d3019528101fccb SHA512 7d3fcb6ffcbfc6732b66e217cee6d45a504beb7c8b9f887b2a781eea68ef2f44de9aa373728a91d3a91e59a0be0664e2d7d92d42fd25b88de4c5005e62505c78

diff --git a/dev-debug/dtrace/dtrace-2.0.2.ebuild b/dev-debug/dtrace/dtrace-2.0.2.ebuild
new file mode 100644
index 000000000000..d514c846de59
--- /dev/null
+++ b/dev-debug/dtrace/dtrace-2.0.2.ebuild
@@ -0,0 +1,225 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit edo flag-o-matic linux-info systemd toolchain-funcs udev
+
+DESCRIPTION="Dynamic BPF-based system-wide tracing tool"
+HOMEPAGE="https://github.com/oracle/dtrace-utils https://wiki.gentoo.org/wiki/DTrace"
+
+if [[ ${PV} == 9999 ]]; then
+	EGIT_BRANCH="devel"
+	EGIT_REPO_URI="https://github.com/oracle/dtrace-utils"
+	inherit git-r3
+else
+	SRC_URI="https://github.com/oracle/dtrace-utils/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
+	S="${WORKDIR}"/dtrace-utils-${PV}
+
+	KEYWORDS="-* ~amd64 ~arm64"
+fi
+
+LICENSE="UPL-1.0"
+SLOT="0"
+IUSE="test-install valgrind"
+
+# XXX: right now, we auto-adapt to whether multilibs are present:
+# should we force them to be? how?
+#
+# TODO: can we make the wireshark dep conditional?
+DEPEND="
+	dev-libs/elfutils
+	dev-libs/libbpf
+	dev-libs/libpfm:=
+	net-analyzer/wireshark[dumpcap]
+	net-libs/libpcap
+	>=sys-fs/fuse-3.2.0:3
+	>=sys-libs/binutils-libs-2.42:=
+	sys-libs/zlib
+"
+RDEPEND="
+	${DEPEND}
+	!dev-debug/systemtap[dtrace-symlink(+)]
+	net-analyzer/wireshark
+	test-install? (
+		app-alternatives/bc
+		app-editors/vim-core
+		dev-build/make
+		dev-lang/perl
+		dev-util/perf
+		net-fs/nfs-utils
+		sys-apps/coreutils
+		sys-fs/xfsprogs
+		sys-process/time
+		virtual/jdk
+		virtual/perl-IO-Socket-IP
+	)
+"
+BDEPEND="
+	dev-build/make
+	sys-apps/gawk
+	sys-devel/bison
+	>=sys-devel/bpf-toolchain-14.1.0
+	sys-devel/flex
+"
+DEPEND+=" valgrind? ( dev-debug/valgrind )"
+
+QA_PRESTRIPPED="
+	usr/.*/dtrace/testsuite/test/triggers/.*
+"
+QA_FLAGS_IGNORED="
+	usr/.*/dtrace/testsuite/test/triggers/.*
+"
+
+# TODO: report upstream (bug #938221) although it seems like it's
+# not relevant given it's a BPF object.
+QA_EXECSTACK="
+	usr/*/dtrace/bpf_dlib.*
+"
+
+pkg_pretend() {
+	# TODO: optional kernel patches
+
+	# Basics for debugging information, BPF
+	local CONFIG_CHECK="~BPF ~DEBUG_INFO_BTF ~KALLSYMS_ALL"
+
+	CONFIG_CHECK+=" ~CUSE"
+
+	# Tracing
+	CONFIG_CHECK+=" ~TRACING"
+	CONFIG_CHECK+=" ~UPROBES ~UPROBE_EVENTS"
+	CONFIG_CHECK+=" ~FTRACE ~FTRACE_SYSCALLS ~DYNAMIC_FTRACE ~FUNCTION_TRACER"
+	CONFIG_CHECK+=" ~FPROBE"
+	# DTrace can fallback to kprobes for fbt but people often want them off
+	# for security and newer kernels work fine with BPF for that, so
+	# let's omit it. kprobes are slower and scale poorly.
+
+	# https://gcc.gnu.org/PR84052
+	CONFIG_CHECK+=" !GCC_PLUGIN_RANDSTRUCT"
+
+	if use test-install ; then
+		# See test/modules
+		CONFIG_CHECK+=" ~EXT4_FS ~ISO9660_FS ~NFS_FS ~RDS ~TUN"
+	fi
+
+	check_extra_config
+}
+
+pkg_setup() {
+	eval unset ${!LC_*} LANG
+}
+
+src_configure() {
+	if tc-is-cross-compiler; then
+		die "DTrace does not yet support cross-compilation."
+	fi
+
+	tc-export CC
+
+	# lld does this by default, so fix that, although lld fails anyway...
+	# 'LIBDTRACE_1.0' to symbol 'dtrace_provider_modules' failed: symbol not defined
+	append-ldflags $(test-flags-CCLD -Wl,--undefined-version)
+	# mold and lld can't cope with some relocation types used, e.g.
+	#  'test-triggers--usdt-tst-forker-prov.o:(.SUNW_dof): unknown relocation: R_X86_64_GLOB_DAT'
+	tc-ld-force-bfd
+
+	# -fno-semantic-interposition seems to lead to a broken dtrace
+	# that can't actually obtain results from probes, even trivial examples
+	# just hang.
+	filter-flags -fno-semantic-interposition
+	# https://github.com/oracle/dtrace-utils/issues/86
+	filter-lto
+
+	local confargs=(
+		# TODO: Maybe we should set the UNPRIV_UID to something? -3 is a bit... kludgy
+		--prefix="${EPREFIX}"/usr
+		--mandir="${EPREFIX}"/usr/share/man
+		--docdir="${EPREFIX}"/usr/share/doc/${PF}
+		--with-systemd
+		HAVE_LIBCTF=yes
+		HAVE_BPFV3=yes
+		HAVE_VALGRIND=$(usex valgrind)
+	)
+
+	edo ./configure "${confargs[@]}"
+}
+
+src_compile() {
+	# -j1: https://github.com/oracle/dtrace-utils/issues/82
+	emake verbose=1 -j1 $(usev !test-install TRIGGERS='')
+}
+
+src_test() {
+	# Needs root and is also very time-consuming
+	:;
+}
+
+src_install() {
+	emake DESTDIR="${D}" -j1 install $(usev test-install install-test)
+
+	# Stripping the BPF libs breaks them
+	dostrip -x "/usr/$(get_libdir)"
+
+	# It's a binary (TODO: move it?)
+	docompress -x /usr/share/doc/${PF}/showUSDT
+
+	newinitd "${FILESDIR}"/dtprobed.init dtprobed
+}
+
+pkg_postinst() {
+	# We need a udev reload to pick up the CUSE device node rules.
+	udev_reload
+
+	if [[ -n ${REPLACING_VERSIONS} ]]; then
+		# TODO: Make this more intelligent wrt comparison
+		# One option for this is to detect when it's needed (DOF stash layout changes)
+		# and then e.g. sleep and restart for the user.
+		if systemd_is_booted ; then
+			einfo "Restart the DTrace 'dtprobed' service after upgrades once all dtraces are stopped with:"
+			einfo " systemctl try-restart dtprobed"
+		else
+			einfo "Restart the DTrace 'dtprobed' service after upgrades once all dtraces are stopped with:"
+			einfo " /etc/init.d/dtprobed restart"
+		fi
+	else
+		einfo "See https://wiki.gentoo.org/wiki/DTrace for getting started."
+
+		# We can't do magic for people with ROOT=.
+		if [[ -n ${ROOT} ]] ; then
+			einfo "Enable and start the DTrace 'dtprobed' service for systemd with:"
+			einfo " systemctl enable --now dtprobed"
+			einfo
+			einfo "Enable and start the DTrace 'dtprobed' service for OpenRC with:"
+			einfo " rc-update add dtprobed"
+			einfo " /etc/init.d/dtprobed start"
+			return
+		fi
+
+		# For first installs, we enable the service and start it.
+		#
+		# This is unusual, but the behaviour without dtprobed running
+		# is untested/unsupported. It's not a network service, it
+		# has no configuration, reads a single device node, and
+		# does all parsing within a seccomp jail. It also leads
+		# to hard-to-diagnose issues because USDT probes won't
+		# be registered and an application might have already
+		# started up which needs to be traced.
+		if systemd_is_booted ; then
+			ebegin "Enabling & starting DTrace 'dtprobed' service"
+			systemctl enable --now dtprobed
+			eend $?
+		else
+			ebegin "Enabling DTrace 'dtprobed' service"
+			rc-update add dtprobed
+			eend $?
+
+			ebegin "Starting DTrace 'dtprobed' service"
+			rc-service dtprobed start
+			eend $?
+		fi
+	fi
+}
+
+pkg_postrm() {
+	udev_reload
+}


             reply	other threads:[~2025-02-05  1:12 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-05  1:12 Sam James [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-03-25  8:14 [gentoo-commits] repo/gentoo:master commit in: dev-debug/dtrace/ Sam James
2025-03-08  8:41 Arthur Zamarin
2025-03-08  1:41 Sam James
2024-10-30 22:50 Sam James
2024-10-30 22:50 Sam James
2024-10-30 22:50 Sam James
2024-10-30 22:50 Sam James
2024-10-24  8:22 Arthur Zamarin
2024-10-24  2:37 Sam James
2024-09-12  1:06 Sam James
2024-09-12  0:43 Sam James
2024-09-12  0:42 Sam James
2024-09-12  0:42 Sam James
2024-09-12  0:38 Sam James
2024-09-12  0:38 Sam James
2024-09-12  0:30 Sam James
2024-09-12  0:10 Sam James
2024-09-11 23:59 Sam James
2024-09-11  3:35 Sam James
2024-09-10 13:58 Sam James
2024-08-30 18:13 Sam James
2024-08-25 18:49 Sam James
2024-08-22 12:54 Sam James
2024-08-22 12:36 Sam James
2024-08-22 12:36 Sam James
2024-08-22 12:22 Sam James
2024-08-20  1:49 Sam James
2024-08-20  1:49 Sam James
2024-08-20  1:49 Sam James
2024-08-19 23:27 Sam James
2024-08-19 20:16 Sam James
2024-08-18 22:59 Sam James
2024-08-18 21:47 Sam James
2024-08-18 21:42 Sam James
2024-08-18 21:36 Sam James

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1738717871.103b03cd2feb446b6248eb17e3927c504d19d8d0.sam@gentoo \
    --to=sam@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox