From: Nick Alcock <nick.alcock@oracle.com>
To: Kris Van Hees <kris.van.hees@oracle.com>
Cc: dtrace-devel@oss.oracle.com, dtrace@lists.linux.dev
Subject: Re: [DTrace-devel] [PATCH v4] Add packaging configuration for Debian
Date: Fri, 13 Feb 2026 15:14:13 +0000 [thread overview]
Message-ID: <87tsvkn0ai.fsf@esperi.org.uk> (raw)
In-Reply-To: <DS0PR10MB752255507DE8C6B11F027AF4C262A@DS0PR10MB7522.namprd10.prod.outlook.com> (Kris Van Hees via DTrace-devel's message of "Tue, 10 Feb 2026 15:59:06 -0500")
On 10 Feb 2026, Kris Van Hees via DTrace-devel outgrape:
> Packaging configuration files for Debian are provided in dists/debian.
Nice! Seems to work, even on Debian stable (I was sure I'd need at least
testing, but no!).
> Sample steps to build DEB packages:
>
> - make dist
> - cp dtrace-x.y.z.tar.bz2 $D/dtrace_x.y.z.orig.tar.bz2
This...
> - cd $D
> - tar -jxpSf dtrace_x.y.z.orig.tar.bz2
... seems rather duplicative with this. See below for a patch with a
make prep-debuild target that does this for you.
> - cd dtrace-x.y.z
> - make prep-debian
> - debuild
It is a bit annoying that you have to do a prep-debian before doing a
build, because this prevents you doing a normal apt-src or any other
large-scale build command unless you already have a source deb that this
was done to. (The changelog generation is nice though!)
I would be inclined to use git-buildpackage here. See
https://honk.sigxcpu.org/projects/git-buildpackage/manual-html/gbp.import.upstream-git.html
I tried for a minimal approach using the postexport hook, but alas gbp
wants a debian/ directory before it'll even run that :( so for now this
seems to be the best we can do.
Here's a tiny patch to let you avoid the make dist in favour of a simple
'make prep-debuild'. (I didn't fold it into make prep-debian because
some package building tools, like apt-src, don't need the .orig.tar.bz2
at all.)
8<--------------------------------->8
From 472a6c863d06f8e419827842e0e455d8f13f6edd Mon Sep 17 00:00:00 2001
From: Nick Alcock <nick.alcock@oracle.com>
Date: Fri, 13 Feb 2026 14:29:05 +0000
Subject: [PATCH] dists: add prep-debuild target
This does the creation of the .orig.tar.bz2 in the parent of
the source tree for you.
---
dists/Build | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/dists/Build b/dists/Build
index c75f933270fa3..f1ed1a4627176 100644
--- a/dists/Build
+++ b/dists/Build
@@ -9,8 +9,14 @@ dists_DIR := $(current-dir)
# Prepare package building on Debian (copy ./dists/debian in ./debian, and
# generate the debian/changelog file.
-prep-debian::
+prep-debian:: dist
$(call describe-target,DIST-PREP,Debian)
rm -rf debian
cp -rp $(dists_DIR)/debian .
debian/mkChangelog debian/control dtrace.spec > debian/changelog
+
+# Prepare for debuild, which needs a tarball to already be present.
+# Many wrappers around debuild already do this for you.
+
+prep-debuild::
+ mv dtrace-$(VERSION).tar.bz2 ../dtrace_$(VERSION).orig.tar.bz2
--
2.47.3
8<--------------------------------->8
> Signed-off-by: Kris Van Hees <kris.van.hees@oracle.com>
A couple of questions below.
> +prep-debian::
> + $(call describe-target,DIST-PREP,Debian)
> + rm -rf debian
> + cp -rp $(dists_DIR)/debian .
> + debian/mkChangelog debian/control dtrace.spec > debian/changelog
(I have a tiny patch for this.)
> diff --git a/dists/debian/control b/dists/debian/control
> new file mode 100644
> index 00000000..56687a82
> --- /dev/null
> +++ b/dists/debian/control
> @@ -0,0 +1,74 @@
> +Source: dtrace
> +Section: utils
> +Priority: optional
> +Maintainer: Kris Van Hees <kris.van.hees@oracle.com>
> +Build-Depends: debhelper-compat (= 13),
> + bison, flex, gawk, gcc-bpf, binutils-bpf, valgrind, binutils-dev, login.defs,
> + libbpf-dev, libc-dev (>= 2.34), libelf-dev, libfuse3-dev, libpcap-dev,
> + libpfm4-dev, libsystemd-dev, libz-dev
> +Standards-Version: 4.5.1
Why 4.5.1? I guess it's what debhelper writes right now. (The current
version of Debian Policy is 4.7.3. It looks to me like we're compatible
with it.)
> +Homepage: https://github.com/oracle/dtrace-utils/
> +Rules-Requires-Root: no
> +
> +Package: dtrace
> +Architecture: any
> +Depends: ${misc:Depends}, ${shlibs:Depends}
> +Description: Dynamic tracing for Linux (DTrace)
> + This is the official Linux port of the advanced tracing tool DTrace.
> + .
> + DTrace is a high-level dynamic tracing tool for Linux, built on kernel
> + tracing features (tracepoints, function probes (fentry/fexit), dynamic
> + kernel probes (kprobes), dynamic userspace probes (uprobes), ... and
> + leveraging BPF as execution engine. It features an integrated compiler
> + for its high-level tracing language and native support for interacting
> + with the BPF engine, significantly reducing runtime dependencies
Full stop at end of sentence (and for all the others below.)
> +Package: libdtrace2
> +Architecture: any
> +Depends: ${misc:Depends}, ${shlibs:Depends},
> + fuse3, libctf0, libelf1t64, libfuse3-4, libpcap0.8t64, libpfm4, libz1
> +Description: Dynamic tracing for Linux (DTrace) (library)
> + This is the official Linux port of the advanced tracing tool DTrace.
> + .
> + DTrace is a high-level dynamic tracing tool for Linux, built on kernel
> + tracing features (tracepoints, function probes (fentry/fexit), dynamic
> + kernel probes (kprobes), dynamic userspace probes (uprobes), ... and
> + leveraging BPF as execution engine. It features an integrated compiler
> + for its high-level tracing language and native support for interacting
> + with the BPF engine, significantly reducing runtime dependencies
> + .
> + This package contains the shared library.
> +
> +Package: libdtrace2-dev
> +Architecture: any
> +Depends: ${misc:Depends},
> + libdtrace2 (= ${binary:Version})
> +Description: Dynamic tracing for Linux (DTrace) (development)
> + This is the official Linux port of the advanced tracing tool DTrace.
> + .
> + DTrace is a high-level dynamic tracing tool for Linux, built on kernel
> + tracing features (tracepoints, function probes (fentry/fexit), dynamic
> + kernel probes (kprobes), dynamic userspace probes (uprobes), ... and
> + leveraging BPF as execution engine. It features an integrated compiler
> + for its high-level tracing language and native support for interacting
> + with the BPF engine, significantly reducing runtime dependencies
> + .
> + This package contains the development files necessary to develop
> + alternative implementations of the user interface for libdtrace, i.e.
> + replacements for dtrace(1) itself.
> +
> +Package: dtrace-tests
> +Architecture: any
> +Depends: ${misc:Depends}, ${shlibs:Depends}, ${perl:Depends},
> + binutils, cpp, gawk, gcc, make, pkgconf, tshark, bpftool
> +Description: Dynamic tracing for Linux (DTrace) (testsuite)
> + This is the official Linux port of the advanced tracing tool DTrace.
> + .
> + DTrace is a high-level dynamic tracing tool for Linux, built on kernel
> + tracing features (tracepoints, function probes (fentry/fexit), dynamic
> + kernel probes (kprobes), dynamic userspace probes (uprobes), ... and
> + leveraging BPF as execution engine. It features an integrated compiler
> + for its high-level tracing language and native support for interacting
> + with the BPF engine, significantly reducing runtime dependencies
> + .
> + This package contains the testsuite.
(... up to here.)
> diff --git a/dists/debian/copyright b/dists/debian/copyright
> new file mode 100644
> index 00000000..1a5c8f64
> --- /dev/null
> +++ b/dists/debian/copyright
> @@ -0,0 +1,103 @@
> +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
> +Upstream-Name: dtrace
> +Upstream-Contact: Kris Van Hees <kris.van.hees@oracle.com>
> +Source: https://github.com/oracle/dtrace-utils/
> +
> +Files: *
> +Copyright: Copyright (c) 2003, 2026, Oracle and/or its affiliates. All rights reserved.
> +License: UPL-1.0
> +
> +Files: include/linux/bpf.h
> +Copyright: Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com
> +License: GPL-2 with Linux-syscall-note exception
> +
> +Files: include/linux/btf.h
> +Copyright: Copyright (c) 2018 Facebook
> +License: GPL-2 with Linux-syscall-note exception
> +
> +Files: include/sys/auxv.h include/sys/bitmap.h
> +Copyright: copyright (c) 1984, 1986, 1987, 1988, 1989 at&t
AT&T, surely?
> --- /dev/null
> +++ b/dists/debian/libdtrace2-dev.install
> @@ -0,0 +1,5 @@
> +usr/lib/${DEB_HOST_MULTIARCH}/libdtrace.so
> +usr/include/dtrace
> +usr/include/dtrace.h
> +usr/include/sys/dtrace.h
> +usr/include/sys/dtrace_types.h
> diff --git a/dists/debian/libdtrace2.install b/dists/debian/libdtrace2.install
> new file mode 100644
> index 00000000..36294de3
> --- /dev/null
> +++ b/dists/debian/libdtrace2.install
> @@ -0,0 +1,12 @@
> +usr/lib/${DEB_HOST_MULTIARCH}/dtrace/[0-9]*/
> +usr/lib/${DEB_HOST_MULTIARCH}/dtrace/bpf_dlib.o
> +usr/lib/${DEB_HOST_MULTIARCH}/dtrace/drti/
> +usr/lib/${DEB_HOST_MULTIARCH}/dtrace/include/
> +usr/lib/${DEB_HOST_MULTIARCH}/libdtrace.so.*
> +usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/dtrace.pc
> +usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/dtrace_sdt.pc
> +usr/lib/systemd/system/dtprobed.service
> +usr/lib/systemd/system/dtrace-usdt.target
> +usr/lib/systemd/system-preset/50-dtprobed.preset
> +usr/lib/udev/rules.d/60-dtprobed.rules
> +usr/sbin/dtprobed
I've always been worried that these lists would be hard to maintain.
It's a shame we can't autogenerate them, though it's hard to imagine
from what. Maybe in the future we should do like we did for the version
numbers, and have a centralized list of files from which we can generate
things like this *and* the install commands in the Build files.
> +++ b/dists/debian/mkChangelog
> @@ -0,0 +1,174 @@
> +#!/usr/bin/awk -f
> +
> +#
> +# This script can be used to convert the dtrace.spec into a Debian changelog
> +# file. It is intended to be invoked from the 'prep-debian' make target, but
> +# it can be used manually as well:
> +# mkChangelog debian/control dtrace.spec > debian/changelog
This is really nifty!
> diff --git a/dists/debian/patches/debian-configure.patch b/dists/debian/patches/debian-configure.patch
> new file mode 100644
> index 00000000..d4a89bb9
> --- /dev/null
> +++ b/dists/debian/patches/debian-configure.patch
> @@ -0,0 +1,17 @@
> +Description: issue a warning for unknown configure options
> + The Debian build system specifies configure options that are not known to
> + the DTrace configure script. They should not cause the configure script
> + to abort.
> +--- dtrace-2.0.4.orig/configure
> ++++ dtrace-2.0.4/configure
> +@@ -172,8 +172,7 @@ for option in "$@"; do
> + HAVE_VALGRIND=*) write_config_var VALGRIND "$option";;
> + HAVE_BPFV3=*) write_config_var BPFV3 "$option";;
> + HAVE_BPFMASM=*) write_config_var BPFMASM "$option";;
> +- *) echo "Unknown option $option" >&2
> +- exit 1;;
> ++ *) echo "Unknown option $option" >&2;;
> + esac
> + done
I assumed you could just stuff an || true in there, but this is being
invoked by dh_auto_configure, so that option isn't available (plus, of
course, if there's an actual error other than unknown args, we don't
want to fail).
Maybe we should just not exit with exitcode 1 on unknown configure
options, only IIRC Gentoo actually wants us to. This may be the best we
can do.
> diff --git a/dists/debian/patches/debian-interpreter-paths.patch b/dists/debian/patches/debian-interpreter-paths.patch
> new file mode 100644
> index 00000000..58bea538
> --- /dev/null
> +++ b/dists/debian/patches/debian-interpreter-paths.patch
> @@ -0,0 +1,107 @@
> +Description: fix interpreter paths in tests
> + Lintian prefers /bin/bash and /bin/sed over /usr/bin/bash and /usr/bin/sed.
Honestly this one I think we should do upstream. I always thought that
/bin/bash is universal and /usr/bin/bash less so.
> --- /dev/null
> +++ b/dists/debian/rules
> @@ -0,0 +1,24 @@
> +#!/usr/bin/make -f
> +# You must remove unused comment lines for the released package.
> +export DH_VERBOSE = 1
> +export DEB_BUILD_MAINT_OPTIONS = hardening=+all
> +export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
I suppose without -Werror this is safe :)
--
NULL && (void)
next prev parent reply other threads:[~2026-02-13 15:14 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-10 20:59 [PATCH v4] Add packaging configuration for Debian Kris Van Hees
2026-02-13 15:14 ` Nick Alcock [this message]
2026-02-14 13:34 ` [DTrace-devel] " Sam James
2026-02-14 16:39 ` Kris Van Hees
2026-02-14 18:39 ` Kris Van Hees
2026-02-14 17:10 ` Kris Van Hees
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=87tsvkn0ai.fsf@esperi.org.uk \
--to=nick.alcock@oracle.com \
--cc=dtrace-devel@oss.oracle.com \
--cc=dtrace@lists.linux.dev \
--cc=kris.van.hees@oracle.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.