Help and Support
Ask a question, report a problem, request a feature...
<<  Back To Forum

Does not start on Linux with libxml2 2.13.0

by Guest on 2024/06/13 09:35:38 AM    
After today update on Archlinux for libxml2 to version 2.13.0 from 2.12.7-1 Tixati no longer starts.

Error message is:
libxml2: getentropy failed with error code 38

After downgrading only libxml2 to version 2.12.7-1 Tixati is working again.

As this is provided as binary pacakge it will need updating to support new libxml2 version.
by TixMan on 2024/06/13 06:38:38 PM    
+1 for this, please.
by Guest on 2024/06/17 10:43:27 AM    
+1
by Guest on 2024/06/18 05:34:36 PM    
Cheers, I was wondering why my Tixati was crashing every time It loaded a torrent.
Downgrading libxml2 to 2.12.7-1
by Guest on 2024/06/18 06:12:27 PM    
Interesting.

The only relevant change in libxml 2.13 is that it initializes random seed from system source of randomness if it's available.

38 (0x26) in errno.h is ENOSYS — Function not implemented.

Manuals state that getentropy() and getrandom() were added to GNU libc in version 2.25 (2017). Linux system call had been available since 2014. Therefore, any recent system should have zero problems with providing those functions to libxml library. See https://lwn.net/Articles/711013/

Therefore, there must be something wrong with dynamic loading or version compatibility overrides.

Metadata in Tixati binaries hints that they were built on RHEL 7 (or Centos 7). Assembled parts were individually built by GCC 4.8.3 (contemporary to the release) and GCC 10.3.1, 11.2.1, 11.3.1 (from recent Red Hat Developer Toolset packages). Packaged releases of Tixati state that minimum required version of glibc is 2.17, the same as system glibc in RHEL/Centos 7. There is also no version hints for functions later than 2.17 in symbol table. The whole point of building on an old system is to extend compatibility, so it's safe to assume that Tixati is built with glibc 2.17. Which does not know anything about getentropy().

However, that function is exported from local code segment in symbol table. Supposedly, some code was cherry-picked and added manually later to satisfy compilation dependencies for some bundled library. Now dynamic linker either reacts to presence of that function, and gives it to libxml instead of system glibc one, and the only thing it does when called is generating an error, or linker decides to play safe and mask some functions for all code loaded into old process assumung presence of old glibc by not overriding the address with working system-specific variant (not really sure how much magic happens in PLT manipulations at runtime).

As RHEL/Centos 7 reaches end of life at the end of this month (after solid 10 years), I can foresee that Tixati is going to solve this problem by switching to new build system, and upgrading the library version requirements in near future. Or maybe it will patch the offending code in internal libraries to let external libraries do what they want, and continue to support very old distributions.
by janet on 2024/06/19 05:55:12 AM    
Thanks everyone for reporting this.
The Dev is looking into it.
by Guest on 2024/06/22 12:19:33 AM    
+1 for this, please.
by Guest on 2024/07/07 09:50:26 AM    
+1
by Guest on 2024/07/07 09:52:44 PM    
+1
by janet on 2024/07/10 10:35:08 AM    
This should be fixed in v3.26 which is out now.




This web site is powered by Super Simple Server