From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 6179A158B20 for ; Wed, 05 Feb 2025 01:12:39 +0000 (UTC) Received: from lists.gentoo.org (bobolink.gentoo.org [140.211.166.189]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) (Authenticated sender: relay-lists.gentoo.org@gentoo.org) by smtp.gentoo.org (Postfix) with ESMTPSA id 48D1E341C25 for ; Wed, 05 Feb 2025 01:12:39 +0000 (UTC) Received: from bobolink.gentoo.org (localhost [127.0.0.1]) by bobolink.gentoo.org (Postfix) with ESMTP id 7C98C110471; Wed, 05 Feb 2025 01:12:35 +0000 (UTC) Received: from smtp.gentoo.org (mail.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bobolink.gentoo.org (Postfix) with ESMTPS id 71EBA110471 for ; Wed, 05 Feb 2025 01:12:35 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 186C434120D for ; Wed, 05 Feb 2025 01:12:35 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 3B83E2195 for ; Wed, 05 Feb 2025 01:12:33 +0000 (UTC) From: "Sam James" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Sam James" Message-ID: <1738717871.103b03cd2feb446b6248eb17e3927c504d19d8d0.sam@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: dev-debug/dtrace/ X-VCS-Repository: repo/gentoo X-VCS-Files: dev-debug/dtrace/Manifest dev-debug/dtrace/dtrace-2.0.2.ebuild X-VCS-Directories: dev-debug/dtrace/ X-VCS-Committer: sam X-VCS-Committer-Name: Sam James X-VCS-Revision: 103b03cd2feb446b6248eb17e3927c504d19d8d0 X-VCS-Branch: master Date: Wed, 05 Feb 2025 01:12:33 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: bc84c69e-d86a-45a2-8dd1-8d5a87b6aaa8 X-Archives-Hash: a7bd35a730f9561acd46479e4af64dbf commit: 103b03cd2feb446b6248eb17e3927c504d19d8d0 Author: Sam James gentoo org> AuthorDate: Wed Feb 5 01:11:11 2025 +0000 Commit: Sam James gentoo 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 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 +}