mirror of
https://github.com/XTXMarkets/ternfs.git
synced 2026-01-06 02:49:45 -06:00
...most notably we now produce fully static binaries in an alpine
image.
A few assorted thoughts:
* I really like static binaries, ideally I'd like to run EggsFS
deployments with just systemd scripts and a few binaries.
* Go already does this, which is great.
* C++ does not, which is less great.
* Linking statically against `glibc` works, but is unsupported.
Not only stuff like NSS (which `gethostbyname` requires)
straight up does not work, unless you build `glibc` with
unsupported and currently apparently broken flags
(`--enable-static-nss`), but also other stuff is subtly
broken (I couldn't remember exactly what was broken,
but see comments such as
<https://github.com/haskell/haskell-language-server/issues/2431#issuecomment-985880838>).
* So we're left with alternative libcs -- the most popular being
musl.
* The simplest way to build a C++ application using musl is to just
build on a system where musl is already the default libc -- such
as alpine linux.
The backtrace support is in a bit of a bad state. Exception stacktraces
work on musl, but DWARF seems to be broken on the normal release build.
Moreover, libunwind doesn't play well with musl's signal handler:
<https://maskray.me/blog/2022-04-10-unwinding-through-signal-handler>.
Keeping it working seems to be a bit of a chore, and I'm going to revisit
it later.
In the meantime, gdb stack traces do work fine.
22 lines
551 B
Plaintext
22 lines
551 B
Plaintext
# I haven't investigated this -- some uninitialized memory when
|
|
# invoking libunwind for the first time.
|
|
{
|
|
libunwind-uninitialized
|
|
Memcheck:Param
|
|
write(buf)
|
|
fun:syscall
|
|
...
|
|
fun:_ULx86_64_step
|
|
...
|
|
}
|
|
# # I'm not sure why it picks the slow version (it shouldn't), even
|
|
# # if I do build for Haskell with valgrind it should still have
|
|
# # the required instructions. Worth investigating
|
|
# {
|
|
# rocksdb-crc32c
|
|
# Memcheck:Value8
|
|
# ...
|
|
# fun:_ZN7rocksdb6crc32c10ExtendImplIXadL_ZNS0_L10Slow_CRC32EPmPPKhEEEEjjPKcm
|
|
# ...
|
|
# }
|