#1089344 hylafax: Supporting rootless builds by default

#1089344#5
Date:
2024-12-07 19:22:01 UTC
From:
To:
Dear maintainer,

During a test rebuild for building packages with
`Rules-Requires-Root: no` as the default in `dpkg`,
hylafax failed to rebuild.

Log Summary:
-------------------------------------------------------------------------------
[...]
make[5]: Leaving directory '/<<PKGBUILDDIR>>/po'
make[5]: Entering directory '/<<PKGBUILDDIR>>/po'
test -d hylafax-server || mkdir hylafax-server
test -f hylafax-server/messages.pot || cat
.././po/hylafax-server/messages.pot > hylafax-server/messages.pot
cat version.po hylafax-server/messages.pot > hylafax-server/de.po.tmp
msgmerge --no-wrap --sort-by-file .././po/de.po hylafax-server/de.po.tmp
  -o hylafax-server/de.po
.............................. done.
rm -f hylafax-server/de.po.tmp
msgfmt -o hylafax-server/de.mo hylafax-server/de.po
make[5]: Leaving directory '/<<PKGBUILDDIR>>/po'
make[4]: Leaving directory '/<<PKGBUILDDIR>>/po'
make[3]: Leaving directory '/<<PKGBUILDDIR>>/po'
= pkg
make[3]: Entering directory '/<<PKGBUILDDIR>>/pkg'
if [ ! -f copyright ]; then \
	cp .././pkg/../COPYRIGHT copyright ; \
fi ; \
for i in README depend make.links preremove proto.local ; do	\
	[ -f $i ]  ||  cp .././pkg/$i . ;			\
done make[3]: Leaving directory '/<<PKGBUILDDIR>>/pkg'
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
    dh_auto_test
    create-stamp debian/debhelper-build-stamp
    dh_prep
    debian/rules override_dh_installdirs
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_installdirs -phylafax-server \
	etc/hylafax \
	usr/sbin \
	var/log/hylafax \
	usr/lib/hylafax/bin \
	var/spool/hylafax/archive var/spool/hylafax/client
var/spool/hylafax/config \
	var/spool/hylafax/dev var/spool/hylafax/info var/spool/hylafax/log
var/spool/hylafax/bin \
	var/spool/hylafax/etc var/spool/hylafax/recvq var/spool/hylafax/status
var/spool/hylafax/sendq \
	var/spool/hylafax/doneq var/spool/hylafax/docq var/spool/hylafax/tmp
var/spool/hylafax/pollq \
	usr/share/man/man5 usr/share/man/man8 \
	usr/share/lintian/overrides \
	usr/share/hylafax
dh_installdirs -phylafax-client \
	etc/hylafax \
	usr/bin \
	usr/lib \
	usr/share/man/man1 usr/share/man/man5 \
	usr/share/hylafax \
	usr/share/doc/hylafax-client/faxmail \
	usr/share/lintian/overrides
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
    debian/rules override_dh_auto_install
make[1]: Entering directory '/<<PKGBUILDDIR>>'
cp -p debian/hyla.conf faxcover/faxcover.ps faxmail/faxmail.ps \
	libhylafax/typerules \
     debian/hylafax-client/etc/hylafax/.
touch debian/hylafax-client/etc/hylafax/faxcover.ps
cp -p libhylafax/pagesizes debian/hylafax-client/usr/share/hylafax/.
install -p util/textfmt faxalter/faxalter faxcover/faxcover \
	faxmail/faxmail faxrm/faxrm faxstat/faxstat \
	sendfax/sendfax sendpage/sendpage \
debian/hylafax-client/usr/bin/.
install -p faxmail/mailfax.sh-postfix faxmail/mailfax.sh-qmail \
	faxmail/mailfax.sh-sendmail faxmail/mailfax.sh-smail \
	faxmail/README \
debian/hylafax-client/usr/share/doc/hylafax-client/faxmail/
for i in faxcover/edit-faxcover.sh; \
do \
   b=`basename $i .sh`; \
   install -p $i debian/hylafax-client/usr/bin/$b; \
done
# override lintian warnings
cp -p debian/lintian.override.hylafax-client \
	debian/hylafax-client/usr/share/lintian/overrides/hylafax-client
cp -p debian/hosts.hfaxd hfaxd/hfaxd.conf util/cover.templ \
	etc/dialrules etc/dialrules.sf-ba etc/dialrules.europe \
	etc/lutRS18.pcf debian/hfaxd.systemd.conf \
     debian/hylafax-server/etc/hylafax/.
cp -p debian/hylafax.config debian/hylafax-server/etc/hylafax/config
cp -pR etc/templates debian/hylafax-server/etc/hylafax/
rm -r debian/hylafax-server/etc/hylafax/templates/html-sample1
install --mode=a+rx -p debian/hylafax_wrapper
debian/hylafax-server/usr/sbin/hylafax_wrapper
for i in faxd/faxq hfaxd/hfaxd faxd/faxgetty; \
do \
   cp -p $i debian/hylafax-server/usr/sbin/; \
done
for i in util/faxmsg util/faxconfig util/faxmodem util/faxstate
util/faxwatch \
	util/faxinfo util/tiffcheck util/dialtest util/faxadduser util/faxdeluser \
	faxd/faxqclean faxd/faxsend \
	faxd/pagesend faxd/tsitest faxd/tagtest faxd/cqtest \
	faxd/choptest \
	etc/ondelay \
	etc/lockname; \
do \
   b=`basename $i`; \
   cp -p $i debian/hylafax-server/usr/lib/hylafax/bin/$b; \
   ln --symbolic --relative
debian/hylafax-server/usr/sbin/hylafax_wrapper
debian/hylafax-server/usr/sbin/$b; \
done
for i in \
   util/xferfaxstats.sh util/recvstats.sh util/faxcron.sh \
   etc/faxaddmodem.sh etc/faxsetup.sh etc/probemodem.sh; \
do \
   b=`basename $i .sh`; \
   cp -p $i debian/hylafax-server/usr/lib/hylafax/bin/$b; \
   chmod a+rx debian/hylafax-server/usr/lib/hylafax/bin/$b; \
   ln --symbolic --relative
debian/hylafax-server/usr/sbin/hylafax_wrapper
debian/hylafax-server/usr/sbin/$b; \
done
for i in \
   ps2fax.gs.sh pdf2fax.gs.sh pcl2fax.sh tiff2fax.sh tiff2pdf.sh \
   archive.sh notify.sh notify-4.1.sh faxrcvd.sh pollrcvd.sh mkcover.sh
wedged.sh \
   common-functions.sh dictionary.sh qp-encode.awk b64-encode.awk; \
do \
   b=`basename $i .sh`; \
   install -p util/$i debian/hylafax-server/var/spool/hylafax/bin/$b; \
done
install -p util/notify.awk debian/hylafax-server/var/spool/hylafax/bin/
chmod a-x debian/hylafax-server/var/spool/hylafax/bin/dictionary
chmod a-x debian/hylafax-server/var/spool/hylafax/bin/common-functions
cp -p config/* debian/hylafax-server/var/spool/hylafax/config/
rm debian/hylafax-server/var/spool/hylafax/config/Makefile
rm debian/hylafax-server/var/spool/hylafax/config/Makefile.in
ln -sf faxmsg debian/hylafax-server/usr/sbin/faxanswer
ln -sf faxmsg debian/hylafax-server/usr/sbin/faxabort
ln -sf faxmsg debian/hylafax-server/usr/sbin/faxquit
ln -sf faxmsg debian/hylafax-server/usr/sbin/faxlock
# override lintian warnings
cp -p debian/lintian.override.hylafax-server \
	debian/hylafax-server/usr/share/lintian/overrides/hylafax-server
cp debian/hylafax-server.hylafax.default-maintainer
debian/hylafax-server/usr/share/hylafax/hylafax.default-maintainer
dh override_dh_auto_install
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
    dh_install
    debian/rules override_dh_installdocs
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_installdocs -a -A \
	debian/README.mgetty debian/README.Debian \
	TODO CONTRIBUTORS
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
    debian/rules override_dh_installchangelogs
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_installchangelogs -a doc/RELEASENOTES-6.0.txt
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
    debian/rules override_dh_installexamples
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_installexamples -phylafax-server debian/examples/*
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
    debian/rules override_dh_installman
make[1]: Entering directory '/<<PKGBUILDDIR>>'
: # install server man pages
for i in man/sman.files/*.4f; do \
   b=`basename $i .4f`; \
   cp -p $i debian/hylafax-server/usr/share/man/man5/$b.5; \
done
for i in man/sman.apps/*.1m; do \
   b=`basename $i .1m`; \
   cp -p $i debian/hylafax-server/usr/share/man/man8/$b.8; \
done
for i in debian/man/*.8; do \
   b=`basename $i .8`; \
   cp -p $i debian/hylafax-server/usr/share/man/man8/$b.8; \
done
: # install client man pages
for i in man/cman.files/*.4f; do \
   b=`basename $i .4f`; \
   cp -p $i debian/hylafax-client/usr/share/man/man5/$b.5; \
done
for i in man/cman.apps/*.1; do \
   b=`basename $i .1`; \
   [ $b != sgi2fax ] && cp -p $i
debian/hylafax-client/usr/share/man/man1/$b.1; \
done
cp -p util/typetest debian/hylafax-client/usr/bin/
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
    debian/rules override_dh_installcron
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_installcron -phylafax-server --name=hylafax
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
    dh_installdebconf
    debian/rules override_dh_installinit
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_installinit --no-start --no-enable -phylafax-server --name=hylafax
dh_installsystemd --no-start --no-enable -phylafax-server --name=faxgetty@
dh_installsystemd --no-start --no-enable -phylafax-server --name=hfaxd
dh_installsystemd --no-start --no-enable -phylafax-server --name=faxq
dh_installsystemd --no-start --no-enable -phylafax-server --name=hylafax
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
    dh_installsystemd
    debian/rules override_dh_installlogrotate
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_installlogrotate -phylafax-server --name xferfaxlog
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
    dh_installudev
    dh_perl
    dh_link
    dh_strip_nondeterminism
    dh_compress
    debian/rules override_dh_fixperms
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_fixperms
chgrp uucp debian/hylafax-server/etc/hylafax
chgrp: changing group of 'debian/hylafax-server/etc/hylafax': Operation
not permitted
make[1]: *** [debian/rules:233: override_dh_fixperms] Error 1
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
make: *** [debian/rules:12: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit
status 2
--------------------------------------------------------------------------------
Build finished at 2024-11-16T18:06:13Z
-------------------------------------------------------------------------------


The above is just how the build ends and not necessarily the most
relevant part. If required, the full build log is available here:

https://people.debian.org/~nthykier/rrr-no-as-default/logs/997661.gz

You can find common solutions at
https://people.debian.org/~nthykier/rrr-no-as-default/docs/solutions.md

If this is really a bug in one of the build-depends, please use
reassign and affects, so that this is still visible in the BTS web
page for this package.

If this package is listed in
https://people.debian.org/~nthykier/rrr-no-as-default/docs/static-ownership.list,
then please just set `Rules-Requires-Root: binary-targets` to the source
stanza of `debian/control` as a fix to this bug.

If this package is listed in
https://people.debian.org/~nthykier/rrr-no-as-default/docs/maybe-misbuilds.list,
then the package was deemed at risk for misbuilding (having wrong
ownership) but had a FTBFS problem we tested it. Please test whether the
package works with `Rules-Requires-Root: no` validating that the
resulting deb has the correct ownership for all paths in the deb.

The goal is to have the default changed in `dpkg` either in `Trixie` or
`Forky`, depending on progress and feasibility with the release schedule
for Trixie.

For more information on this bug filing, please see:
https://lists.debian.org/debian-dpkg/2024/11/msg00016.html

Thanks,


PS: The builds were performed in mid-November. If you fixed the problem
between between then and this bug being filed, then please just close
the bug with the version it was fixed in.

#1089344#10
Date:
2024-12-16 09:13:27 UTC
From:
To:
Control: tags -1 patch

Please see attached patch.

Best regards,
Niels

#1089344#17
Date:
2024-12-16 14:30:12 UTC
From:
To:
Hello Niels,

Il giorno lun, 16/12/2024 alle 10.13 +0100, Niels Thykier ha scritto:
[...]

thank you for the patch. I was trying to find a way to create the package
without requiring root, but I think I'll upload a package with your patch, in
the meantime.

Bye,
Giuseppe

#1089344#22
Date:
2024-12-16 18:25:16 UTC
From:
To:
Giuseppe Sacco:

For a package like `hylafax`, which uses "non-root:root" ownership in
the `.deb`, it is not possible to do rootless builds with vanilla
`dpkg-deb` at this time. Therefore, for this MBF, I have recommended
people to use `Rules-Requires-Root: binary-targets` for this kind of
situation.


**If you want to go beyond** vanilla `dpkg-deb` and the requirements of
this MBF, then `debputy` would be an option.

You can see examples of this in:
  * https://salsa.debian.org/debian/lighttpd/-/merge_requests/47
  * https://salsa.debian.org/debian/man-db/-/merge_requests/8

Which should you give you an idea of what you would be looking at if you
go down this route. Those MR links also have advice for how to validate
the `debputy.manifest` file for basic mistakes without having to do a
full build-cycle.

The gist of it will be:

    # apt install dh-debputy

    .../hylafax $ debputy migrate-from-dh \
       --migration-target dh-sequence-zz-debputy-rrr \
       --acceptable-migration-issues=min-compat-level

And follow the instructions from there (it will link to relevant
documentation as needed). There is also
https://salsa.debian.org/debian/debputy/-/blob/main/GETTING-STARTED-WITH-dh-debputy.md
if you prefer to read the docs first.

If you try it out and get stuck, let me know and I will happily take a
look. Alternatively, if this is not what you were looking for, then you
are obviously more than welcome to stick with `Rules-Requires-Root:
binary-targets`.

Best regards,
Niels

#1089344#27
Date:
2024-12-28 14:53:06 UTC
From:
To:
Hi Giuseppe,

I hope the above answered your question satisfactorily. Let me know if
you are interested in the `debputy` route and would like help with it.
If so, I am happy to provide a patch.

And if the `debputy` based solution is not really interesting to you,
then that is fine. If so, then I would like to go for a quick upload
with the `Rules-Requires-Root: binary-targets` solution that I proposed
earlier. My hope that we can get the majority of the blockers out of the
way before the freeze.

Best regards,
Niels

#1089344#38
Date:
2025-01-14 08:54:22 UTC
From:
To:
Source: hylafax
Source-Version: 6.0.7-11.1


Thanks for the upload.

Best regards,
Niels