Control: severity -1 important On Wed, Sep 02, 2026 at 01:31:23PM +0200, Jochen Sprickerhof wrote: > * Chow Loong Jin <[email protected]> [2026-09-02 18:40]: > > Thanks for the help! I hadn't gotten as far as examining the individual > > object files, but I did do some testing locally, here are my findings: > > - sbuild multiple times from the git packaging seems to generate the same > > binaries (including dbgsym) > > - debrebuild seems to generate a different NT_GNU_BUILD_ID value every > > time, but no other changes in the Hyprland binary itself. > > That sounds strange as debrebuild is only calling sbuild. Do you call > debrebuild with the buildinfo from your sbuild run? > How exactly do you call sbuild and debrebuild?
I call sbuild like so:
$ gbp buildpackage --git-builder="sbuild -s -d unstable"
And debrebuild like so:
$ debrebuild --builder=sbuild+unshare --cache=../cache --respect-build-path
../../hyprland_0.56.2+ds-3_amd64.buildinfo
My sbuild is still configured to use the schroot backend, but I'm unable
to get debrebuild to work with the `sbuild` (schroot) backend, so
there's a difference there I guess.
> > - diffing the output of `readelf --all usr/bin/Hyprland` and `objdump
> > --disassemble usr/bin/Hyprland` of each variant shows that only the
> > build ID changes, nothing else
> > - diffing the output of `readelf --all --debug-dump` on the debug shows
> > a lot of different offsets, but the diff output is 3.2GB and I
> > haven't managed to figure out what's different apart from offsets.
>
> That seems consistent with my findings. The question is why the offsets are
> different. My next step would be to safe all input files to the gcc call and
> check if we can reproduce the different offsets by calling gcc alone. Could
> you try this?
I was hoping to do so by extracting the build directory from debrebuild,
but have been unsuccessful in doing so thus far. I haven't had time to
have another go at it sincec, but my next attempt was going to be to put
a long sleep at the end of the build and just try copying the folder out
while the build directory is propped alive by the sleep.
> > Since you've managed to get to different variants of the build
> > directory, are you able to checksum all the files there and see what
> > other files are different? There should be some autogenerated sources in
> >
> > - src/protocols (generated by protocolnew calls in CMakeLists.txt)
> > - src/config/lua/DefaultConfigBytes.hpp (generated by xxd from
> > hyprland.lua)
> > - src/render/shaders/Shaders.hpp (generated by
> > scripts/generateShaderIncludes.sh, also see
> > Fix-shader-inclusion-order.patch)
>
> They where all the same. The complete diff was:
>
> Files
> hyprland-0.56.2+ds.1/build/CMakeFiles/4.3.4/CMakeDetermineCompilerABI_C.bin
> and hyprland-0.56.2+ds/build/CMakeFiles/4.3.4/CMakeDetermineCompilerABI_C.bin
> differ
> Files
> hyprland-0.56.2+ds.1/build/CMakeFiles/4.3.4/CMakeDetermineCompilerABI_CXX.bin
> and
> hyprland-0.56.2+ds/build/CMakeFiles/4.3.4/CMakeDetermineCompilerABI_CXX.bin
> differ
> Files hyprland-0.56.2+ds.1/build/CMakeFiles/CMakeConfigureLog.yaml and
> hyprland-0.56.2+ds/build/CMakeFiles/CMakeConfigureLog.yaml differ
> Files
> hyprland-0.56.2+ds.1/build/CMakeFiles/hyprland_lib.dir/cmake_pch.hxx.gch and
> hyprland-0.56.2+ds/build/CMakeFiles/hyprland_lib.dir/cmake_pch.hxx.gch differ
> Files
> hyprland-0.56.2+ds.1/build/CMakeFiles/hyprland_lib.dir/src/managers/fullscreen/FullscreenController.cpp.o
> and
> hyprland-0.56.2+ds/build/CMakeFiles/hyprland_lib.dir/src/managers/fullscreen/FullscreenController.cpp.o
> differ
> Files
> hyprland-0.56.2+ds.1/build/CMakeFiles/hyprland_lib.dir/src/plugins/PluginAPI.cpp.o
> and
> hyprland-0.56.2+ds/build/CMakeFiles/hyprland_lib.dir/src/plugins/PluginAPI.cpp.o
> differ
> Files
> hyprland-0.56.2+ds.1/build/CMakeFiles/hyprland_lib.dir/src/protocols/XDGShell.cpp.o
> and
> hyprland-0.56.2+ds/build/CMakeFiles/hyprland_lib.dir/src/protocols/XDGShell.cpp.o
> differ
> Files hyprland-0.56.2+ds.1/build/dumpabiver and
> hyprland-0.56.2+ds/build/dumpabiver differ
> Files hyprland-0.56.2+ds.1/build/Hyprland and
> hyprland-0.56.2+ds/build/Hyprland differ
> Files hyprland-0.56.2+ds.1/build/libhyprland_lib.a and
> hyprland-0.56.2+ds/build/libhyprland_lib.a differ
> Files hyprland-0.56.2+ds.1/debian/.debhelper/hyprland/dbgsym-build-ids and
> hyprland-0.56.2+ds/debian/.debhelper/hyprland/dbgsym-build-ids differ
> Files
> hyprland-0.56.2+ds.1/debian/.debhelper/hyprland/dbgsym-root/DEBIAN/control
> and hyprland-0.56.2+ds/debian/.debhelper/hyprland/dbgsym-root/DEBIAN/control
> differ
> Files
> hyprland-0.56.2+ds.1/debian/.debhelper/hyprland/dbgsym-root/DEBIAN/md5sums
> and hyprland-0.56.2+ds/debian/.debhelper/hyprland/dbgsym-root/DEBIAN/md5sums
> differ
> Only in
> hyprland-0.56.2+ds/debian/.debhelper/hyprland/dbgsym-root/usr/lib/debug/.build-id:
> 39
> Only in
> hyprland-0.56.2+ds.1/debian/.debhelper/hyprland/dbgsym-root/usr/lib/debug/.build-id:
> f8
> Files hyprland-0.56.2+ds.1/debian/hyprland/DEBIAN/md5sums and
> hyprland-0.56.2+ds/debian/hyprland/DEBIAN/md5sums differ
> Files hyprland-0.56.2+ds.1/debian/hyprland/usr/bin/hyprland and
> hyprland-0.56.2+ds/debian/hyprland/usr/bin/hyprland differ
> Files hyprland-0.56.2+ds.1/debian/hyprland/usr/bin/Hyprland and
> hyprland-0.56.2+ds/debian/hyprland/usr/bin/Hyprland differ
> Files hyprland-0.56.2+ds.1/debian/tmp/usr/bin/Hyprland and
> hyprland-0.56.2+ds/debian/tmp/usr/bin/Hyprland differ
>
> > How were you able to grab the build directory out, btw? I haven't found
> > a way to do so with `debrebuild`.
>
> I actually just compile on my normal system but you can do it in sbuild and
> debrebuild with this in your sbuild.conf:
>
> $external_commands = {"post-build-commands" => [ [ '%e tar c %p >
> snapshot.tar' ] ]};
This made the command run, but it looks like the snapshot.tar is just
tossed instead of being treated as an artifact. I've tried to use a
different name to try to get it to be recognized as a build artifact,
but no dice either:
$external_commands = {"post-build-commands" => [ [ '%e tar cJ %p >
%b/%SRCPACKAGE_VERSION.postbuild.tar.xz' ] ]};
In the meantime, it looks like 0.56.2+ds-3 is recognized as reproducible
in Debian so I'm going to downgrade this bug to important to let it
migrate.
--
Kind regards,
Loong Jin
signature.asc
Description: PGP signature

