You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Although YottaDB should in principle be able to use any libc, in practice it successfully builds and runs only with glibc (GNU libc). While this is generally a good choice, at least one Alpine Linux uses musl. This Issue is to remove the requirement that libc be provided by glibc, or at least that YottaDB accept musl as a libc.
Draft Release Note
The text was updated successfully, but these errors were encountered:
Note while the build part seems to work well, there are a number of tests that do not
yet run correctly so this work is only partially complete but is ongoing as a background
(not prioritized) activity. But we got this far so wanted to merge it since it does not
affect the other platforms.
We would like to thank Matthew Hughes (@matt312@gitlab) for the initial mods to allow
YottaDB to build on Alpine (MR !835). Certain of those changes were pulled into this merge
which contains additional changes that allow at least some parts of our test regression
suite to run. They will all run before this is a supportable platform - this is just the
first wave of changes.
Alpine uses the musl libc instead of GNU's glibc. This is a "bare-bones" version of libc
without many of glibc's extensions. Alpine also uses "BusyBox" (generally for embedded
systems) to provide many of the common system utility commands. For example, "ping" is
a root-only command in Alpine. Several options on the ps and ls commands are also either
different or missing. The entire output of the ls command is different so tests looking
for information in files or processes have to be modified to be able to work correctly
on Alpine.
Change summary:
- CMakeLists.txt - Added messages suggested by @nars1 so we could see what libraries were
being used.
- sr_linux/caller_id.c - Treat a musl build much like cygwin (no backtrace supported).
- sr_port/dse_chng_fhead.c - Just moving gtm_string.h include to where it belongs. Out of
order build caused issues on Alpine.
- sr_port/dse_rest.c - Same.
- sr_port/dse_save.c - Same.
- sr_port/gtm_malloc_src.h - The mallopt() call does not exist on Alpine so adjust #ifdef
- sr_port/iosocket_snr.c - Include the correct include - a gtm_poll.h version was available
- sr_port/iosocket_wait.c - Same.
- sr_port/mdef.h - Define __MUSL for Alpine builds, some mitigation of memcpy() macro
issues because of how sched.h gets included (see comments in mdef.h).
- sr_port/repl_comm.c - Include the correct include - a gtm_poll.h version was available
- sr_port/repl_filter.c - Move an #ifdef/#include to avoid build errors on alpine.
- sr_unix/configure.gtc - Use gold loader to build shared libraries on alpine. When the
regular loader built a shared library from M program object code, the MUSL version of
dlopen() was unable to load the created shared library. The gold loader fixes this issue.
- sr_unix/gtm_filter_command.c - Move mdef.h to top of include list (build issues).
- sr_unix/iormdef.h - Make assert GLIBC only as Alpine does not have the fields used in
the assert.
- sr_unix/mdefsp.h - Alpinemusl uses va_copy differently than does glibc.
Final Release Note
Description
Although YottaDB should in principle be able to use any libc, in practice it successfully builds and runs only with glibc (GNU libc). While this is generally a good choice, at least one Alpine Linux uses musl. This Issue is to remove the requirement that libc be provided by glibc, or at least that YottaDB accept musl as a libc.
Draft Release Note
The text was updated successfully, but these errors were encountered: