I will run in the path of your commands
Wed, 04 Jul 2018 00:33:38 +0000
I found last week's weird bug not long after posting. Debugging really got underway when I
LD_LIBRARY_PATH to include
/nix/store/...-zlib-1.2.11.../lib and observed that then my binaries
were able to start. From this I inferred that the libraries
themselves were most probably fine and the problem must be in the
binaries referring to them or in the dynamic linker (or "ELF program
interpreter" as we're apparently supposed to call it)
strings on broken or on working binaries didn't turn up much
of note, but when I ran
readelf -d monit I got
Dynamic section at offset 0x230 contains 31 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libz.so.1] 0x00000001 (NEEDED) Shared library: [libc.so] 0x0000001d (RUNPATH) Library runpath: [/nix/store/6qw1h5hwikg4wv9dhfhyk08pzskph6y1-zlib-1.2.11-mips-unknown-linux-musl/lib:/nix/store/mkvy309rmdjzrj81j8hmc13j2fq6dpl1-musl-1.1.18-mips-unknown-linux-musl/lib] 0x0000000c (INIT) 0x4078b4 ...
for a working monit and something more like
Dynamic section at offset 0x230 contains 31 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libz.so.1] 0x00000001 (NEEDED) Shared library: [libc.so] 0x1d000000 (<unknown>: 1d000000) 0x278e 0x0000000c (INIT) 0x4078b4 ...
and wait what why's there that
1d in the MSB instead of in the LSB
where we'd recognise it? Either gcc (or ld or something) is
misgenerating the ELF tags, or something afterwards is trashing them.
Long story short, it turns out that something is
patchelf and that I
am not the first person
to find the bug.
Given the patch in the PR (thanks UraniumKnight), it was comparatively simple to add it locally to my overlay and now everything is working. I still can't run with exact nixpkgs master, but there are only two changes and I have submitted PRs for both: #42795 and #42794
Next steps (ongoing): bring the mt300a config up to date so I can get cracking on replacing the OS on my primary internet router. Probably I should buy another one for this purpose so that I actually have a test device, I don't think the family will appreciate it if I kill the live one.