Skip to main content

max / balanced_breakfast

Turn off linuxdeploy's strip pass on an Alloy build host linuxdeploy bundles its own binutils, and Fedora 43 links with -z pack-relative-relocs, so every bundled library carries a .relr.dyn section (SHT_RELR, type 0x13) that binutils rejects. Measured building inside the fw13 Alloy image: it hit libxkbcommon, libxml2, libxslt, libyuv and libzstd among others, which is most of what a GTK/WebKit app bundles, and cargo-tauri reports the lot as 'failed to run linuxdeploy' with the cause swallowed. Conditional rather than unconditional because stripping still works on Pop and still saves download size. Same shape as alloy's build/privilege.sh and for the same reason: a transition where two hosts need different things, losing its branch once no build host runs anything else. _private/scripts/build-dist.sh already carried NO_STRIP=true; the move to Bento recipes dropped it, which is how this came back.
Author: Max Johnson <me@maxj.phd> · 2026-09-04 16:04 UTC
Signed with PGP, not checked
Commit: d9555bff747223c1b7a527495891c6c0e2f7c21e
Parent: 1f78712
1 file changed, +21 insertions, -0 deletions
@@ -29,7 +29,28 @@
29 29 sh_ok(h, "cd " + r + " && cargo test --workspace " + feature_flags());
30 30
31 31 step("build");
32 + // LINUXDEPLOY CANNOT STRIP A FEDORA 43 LIBRARY, so the strip pass is turned off
33 + // on an Alloy host and left alone everywhere else.
34 + //
35 + // Measured 2026-09-04 building this app inside the fw13 Alloy image: linuxdeploy
36 + // bundles its own binutils, and Fedora 43 links with `-z pack-relative-relocs`,
37 + // so every bundled library carries a `.relr.dyn` section (SHT_RELR, type 0x13)
38 + // that binutils rejects with "unknown type [0x13]" and "Unable to recognise the
39 + // format of the input file". It hit libxkbcommon, libxml2, libxslt, libyuv and
40 + // libzstd among others -- not a stray library, most of what a GTK/WebKit app
41 + // bundles. cargo-tauri reports the whole thing as `failed to run linuxdeploy`
42 + // and swallows the cause, so the error names nothing you could act on.
43 + //
44 + // Conditional rather than unconditional because stripping still works today and
45 + // still saves download size: Pop ships older libraries with no SHT_RELR. This is
46 + // the same shape as build/privilege.sh in alloy, for the same reason -- a
47 + // transition where two hosts need different things -- and it loses its branch
48 + // the same way, once no build host runs anything but Alloy.
49 + //
50 + // `_private/scripts/build-dist.sh` already carried NO_STRIP=true and the move to
51 + // Bento recipes dropped it, which is how this came back.
32 52 sh_ok(h, "cd " + r + " && . ~/.tauri/passwords.env && " +
53 + "if grep -q '^ID=alloy' /usr/lib/os-release; then export NO_STRIP=true; fi; " +
33 54 "TAURI_SIGNING_PRIVATE_KEY=$HOME/.tauri/balanced-breakfast.key " +
34 55 "TAURI_SIGNING_PRIVATE_KEY_PASSWORD=$BB_TAURI_PASSWORD " +
35 56 "cargo tauri build " + feature_flags());