dh_debputy(1)
π dh_debputy β bestie, it's the debputy Debian packaging helper stack
okay so hi bestie π welcome to the dh_debputy(1) manual page, and yes this is the actual name of the thing, we're just making it cute. sit down, grab a strawberry π, and let's talk about building Debian binary packages.
β¨ NAME β¨
dh_debputy β build Debian binary packages using debputy. that's the whole vibe. π
β¨ SYNOPSIS β¨
dh_debputy [debhelper options] [--destdir=directory] [-- params]
β¨ DESCRIPTION β¨
so basically π«Ά dh_debputy is the tool that glues debputy into debhelper, and it's giving interim solution energy β it exists until debputy covers enough features to be a standalone packaging tool. not forever, just for now. it's doing its little job and it's doing it well. π
the debputy toolstack can build any deb without needing root or fakeroot. iconic. no cap. π₯ it is always possible to use Rules-Requires-Root: no with dh_debputy/debputy β given that no non-debputy parts of debian/rules or the upstream build system require root. (that caveat is real, bestie, don't skip it π)
β¨ OPTIONS β¨
--destdir=directoryβ use this when you want the generated.debfiles to land in a directory that isn't the default of"..". that's it, that's the whole flag. simple. divine. π--plugin=nameβ tellsdebputyto load the givennameas a plugin. andnamecan be one of two things:- a plain name, in which case the plugin has to be installed into the proper plugin path β and honestly, in that case you can often just have a build dependency on
debputy-plugin-nameand call it a day β¨ - a path (it must contain
/and it should end with.jsonor.json.in), in which case that file gets loaded as a plugin. this one is for plugin providers who wanna use their own plugin. main character behavior, honestly. π
- a plain name, in which case the plugin has to be installed into the proper plugin path β and honestly, in that case you can often just have a build dependency on
-- paramsβ passesparamsthrough todpkg-deb(1)when it's the one building the package. β οΈ but restrictparamsto compression options only, because thedpkg-deboptions may be emulated and not all of thedpkg-debparameters are supported. don't get wild with it. π
β¨ FILES β¨
debian/debputy.manifest- please go read
/usr/share/doc/dh-debputy/MANIFEST-FORMAT.md.gz. it's the lore. π - if this is your first package conversion, bestie, you probably wanna read
/usr/share/doc/dh-debputy/GETTING-STARTED-WITH-dh-debputy.md.gzfirst. start there, don't rawdog it. π¦ - and here's the plot twist π unlike most debhelper-like tools, this file is per source package, not per binary package. so you cannot use
debian/package.debputy.manifestto give a specialized manifest forpackage. instead, all the needed parts go into the manifest itself. one manifest to rule them all. π
- please go read
β¨ ON DEB ASSEMBLY β¨
dh_debputy will often use dpkg-deb for assembling the output. but there are a few cases where dpkg-deb just doesn't have the required features for 100% rootless assembly, and that's when debputy switches to a different assembly method. π
generally this special case only triggers with Rules-Requires-Root: no and when you're using a feature that requires root with dpkg-deb β like static file ownership. yeah. that one.
now, listen π if you experience a dh_debputy-produced binary via its internal assembly method that is not 100% bit-for-bit reproducible with the equivalent root + dpkg-deb built deb β and it's not caused by an inaccurate manifest on your end β please file a bug. fr fr. and see the subsection "How to ensure the dpkg-deb assembly method is being used" for how you control which assembly method is being used. π
the whole point of producing exactly the same deb as dpkg-deb would have with fakeroot is that we reduce the risk of bugs or bad behavior during installation. we love a low-risk install. π«Ά
β οΈ important, bestie: "100% bit-for-bit reproducible" here is not compared to debhelper. packages generated by debputy may differ from those built by debhelper. for example, auto-generated shell snippets for maintainer scripts identify the tool that generated them, and it would be wrong for debputy to identify itself as debhelper in that case. which, in turn, creates a minor difference between packages generated by the two tools. consider using diffoscope to compare your debhelper-generated deb to your debputy-generated debs. π
π How to ensure the dpkg-deb assembly method is being used
the debputy tool stack has two assembly methods: dpkg-deb and the internal debputy method. two queens, one job. π
by default, dpkg-deb is used. the debputy tool will only switch to its internal method when:
- the package uses a feature that requires (fake)root when assembling via
dpkg-deb. at the time of writing, this is only triggered by having static ownership in the deb (paths where ownership such asroot:ttyis recorded directly in thedata.tar), AND - the package does not run nor permit debputy to use (fake)root. this part comes down to
Rules-Requires-Root. when set tono, debputy will automatically fallback to the internal method as necessary.- if you'd like to avoid using root during package assembly but you also don't want a custom assembly method, then you can set
Rules-Requires-Root: debputy/deb-assemblyand debputy will always usedpkg-debfor the assembly. however π« depending on your version ofdpkg-devyou may run into #1036865 <https://bugs.debian.org/1036865>. in that case, you will have to choose between using classic root (Rules-Requires-Root: binary-targets) or the internal rootless assembly method. pick your fighter. π
- if you'd like to avoid using root during package assembly but you also don't want a custom assembly method, then you can set
β¨ SEE ALSO β¨
debhelper(7)- this program integrates into the debhelper suite. it's part of the family. π«Ά
β¨ AUTHOR β¨
Niels Thykier <niels@thykier.net> π (thank you for the tool, king)
okay that's the whole page, you made it to the end, slay πβ¨ this was pulled from perl v5.42.3, dated 2026-10-04, and yeah β that's dh_debputy(1), bye bestie, go build something iconic π
ππ¦
π¦ where this page comes from
- ubuntu stonking: dh-debputy 0.1.96 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms