MUSL FAQ
约 3 分钟阅读
标签:FAQ
- Open Issues
- 不支持 LC_TIME
- 无 ucontext.h - obsolescent in POSIX.1-2001
- makecontext
- glusterfs#268GitHub Issuegluster/glusterfs#268
- glusterfs 不支持 musl
- openssl#7406GitHub Issueopenssl/openssl#7406
- 使用 no-async 绕过
- 不支持 nsswitch
- 不支持 res_uinit
- asterisk 无法获取 nameserver
- 无 fts
- 其他软件兼容问题
- Golang runtime: c-shared builds fail with musllibc
golang/go#13492GitHub Issuegolang/go#13492尽量避免 cgo · 重复代码尽量 生成 · 不会下载源码到 了 - #31529 · c-shared 不支持 musl - golang/go#13492 · json omitempty 不支持 struct golang/go#11939笔记:Golang
- 无法获取 argc, argv - 基于 glibc 扩展
- 导致
- FluentBit 插件不支持 AlpineLinux
- libasan 不支持 musl google/sanitizers#1080GitHub Issuegoogle/sanitizers#1080
- glusterfs 不支持 musl glusterfs#268GitHub Issuegluster/glusterfs#268
- Golang runtime: c-shared builds fail with musllibc
golang/go#13492GitHub Issuegolang/go#13492尽量避免 cgo · 重复代码尽量 生成 · 不会下载源码到 了 - #31529 · c-shared 不支持 musl - golang/go#13492 · json omitempty 不支持 struct golang/go#11939笔记:Golang
- bugs-found-by-musl
- 其他软件已知因为 musl 导致的 bug
- posix_fallocate64
| symbol not found | desc |
|---|---|
| posix_fallocate64 | 64位文件偏移版本的 posix_fallocate,musl 使用统一实现 |
| fcntl64 | 64位文件偏移版本的 fcntl,musl 使用统一实现 |
__sched_cpufree | glibc 内部函数,释放 CPU 集合内存 |
__getpagesize | glibc 内部函数,获取内存页大小 |
| malloc_trim | glibc 扩展,释放堆顶部未使用内存给系统 |
__cxa_thread_atexit_impl | C++ ABI 内部函数,线程退出时析构函数支持 |
__sched_cpualloc | glibc 内部函数,分配 CPU 集合内存 |
| dlvsym | glibc 扩展,按版本查找动态库符号 |
- libjvm.so
malloc
- musl 1.2.1 启用了重写的 malloc
- 2020-06
- 参考
DNS
- 目前已经支持 DNS over TCP,大部分 DNS 问题已经解决
- musl libc 1.2.4 - tcp dns - 解决 udp dns 不能返回太多解析的问题
resolv 不支持 dns over tcp/edns, 因此一次 resolve 最多返回 一个包,512 bytes,有时候解析会因此出现问题。
- 问题
- alpine/aports#9734 - DNS resolver patch
- AAAA 不识别 NotImp 导致等待超时
- 会同时发起 A 和 AAAA 请求
- glibc's DNS resolver only generates AAAA queries if it can create an IPv6 socket.
- 5s 超时重试
options single-requestoptions timeout:1
- alpine/aports#9734 - DNS resolver patch
- 参考
- weaveworks/weave#3287GitHub Issueweaveworks/weave#3287 DNS lookup timeouts due to races in conntrack
- gliderlabs/docker-alpine#255GitHub Issuegliderlabs/docker-alpine#255
- kubernetes/kubernetes#56903GitHub Issuekubernetes/kubernetes#56903 - DNS intermittent delays of 5s
- Intermittent delays in Kubernetes
- resolve.conf 添加
options single-request-reopen
- resolve.conf 添加
- Racy conntrack and DNS Lookup Timeouts
- 因为 A 和 AAAA 通过同一个端口发起请求导致异常
- disable parallel lookups, disable IPv6 to avoid AAAA lookups, use TCP for lookups
- resolver: only exit the search path loop there are a positive number of results give - DNS 服务异常导致 musl 行为异常
- DNS resolution happenning only after timeout
- 因为 AAAA 的问题
- 目前无法禁止
- How to disable AAAA lookups?
- 目前没有好的方式
- Linux slow dns lookup (delay = 5 seconds)
- dnsmasq 也没有直接针对 aaaa 返回 nx 的方式
- Is there a way to "block" IPv6 address queries?
- 可以通过减少 DNS 外部查询以达到类似目的
cache-size=65535和min-cache-ttl=300增加缓存
- iptables 禁用 aaaa 记录查询
- oskar456/xt_dnsGitHuboskar456/xt_dns 模块可以实现 dns 匹配
- www.v2ex.com/t/242793
- 转发处理 AAAA
- shawn1m/overtureGitHubshawn1m/overture - 支持 reject qtype - 但是返回 ServFail
- 建议返回 NXDOMAIN weaveworks/weave#2244GitHub Issueweaveworks/weave#2244
# 监控 DNS 请求
tcpdump -ni eth0 port 53
# 完整查询内容例如 |03|www|07|example|03|com
# 使用 match-set 禁用 AAAA
iptables -N AAAA
# iptables -I FORWARD 1 -p udp -s 192.168.0.0/16 --dport 53 -j AAAA
iptables -I OUTPUT 1 -p udp --dport 53 -j AAAA
# drop 会导致超时 - 最好是返回 NXDATA 或者 NXDOMAIN
iptables -A AAAA -m string --algo bm --from 40 --hex-string '|001c|' -j DROPpthread_attr_setaffinity_np
- 没有
- torch libgomp
- 替代 - patches.dpdk.org/project/dpdk/patch/[email protected]
- pthread_yield -> sched_yield
- pthread_attr_setaffinity_np -> pthread_create+pthread_setaffinity_np
pthread_rwlockattr_setkind_np
gcompat
- 解决一部分兼容问题
apk add gcompat
export LD_PRELOAD=/lib/libgcompat.so.0symbols
# 基础
apk add libstdc++ libgcc- fcntl64
- clickhouse.com/codebrowser/ClickHouse/base/glibc-compatibility/musl/fcntl.c.html
- lore.kernel.org/all/[email protected]/T
posix_getdents: symbol not found
- 可以通过 preload fix
apk add gcompat
cat << EOF > posix_getdents_fix.c
#define _GNU_SOURCE
#include <dirent.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
ssize_t posix_getdents(int fd, void *buf, size_t count) {
return syscall(SYS_getdents64, fd, buf, count);
}
EOF
gcc -shared -fPIC -O2 -o posix_getdents_fix.so posix_getdents_fix.c
# 增加 preload 来处理
LD_PRELOAD="/lib/libgcompat.so.0:/home/username/posix_getdents_fix.so" xyz关联信息
反向链接、本文链接的其他页面和外部资料。
反向链接
- musl笔记 · DNS 问题已经解决 · dns
malloc 大场景性能弱 - 性能要求高的场景使用 jemalloc 或 mimaloc · 不支持 utmp/wtmp - last,who,users 命令部分功能不可用 · 安全考虑、隐私考虑 · 需要实现 suid/sgid 修改 记录
- 为什么选择 Alpine Linux?故事 · 常见的 Musl 问题
Small. Simple. Secure. · Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.
参考资料
GitHub11 条
- gluster/glusterfs#268github.com/gluster/glusterfs/issues/268
- gliderlabs/docker-alpine#255github.com/gliderlabs/docker-alpine/issues/255
- golang/go#13492github.com/golang/go/issues/13492
- google/sanitizers#1080github.com/google/sanitizers/issues/1080
- kubernetes/kubernetes#56903github.com/kubernetes/kubernetes/issues/56903
- openssl/openssl#7406github.com/openssl/openssl/issues/7406
- oskar456/xt_dnsgithub.com/oskar456/xt_dns
- pikhq/musl-nscdgithub.com/pikhq/musl-nscd
- shawn1m/overturegithub.com/shawn1m/overture
- weaveworks/weave#2244github.com/weaveworks/weave/issues/2244
- weaveworks/weave#3287github.com/weaveworks/weave/issues/3287
其他外链18 条
- andygrove.io/2020/05/why-musl-extremely-slowandygrove.io/2020/05/why-musl-extremely-slow
- clickhouse.com/codebrowser/ClickHouse/base/glibc-compatibility/musl/fcntl.c.htmlclickhouse.com/codebrowser/ClickHouse/base/glibc-compatibility/musl/fcntl.c.html
- dzone.com/articles/racy-conntrack-and-dns-lookup-timeoutsdzone.com/articles/racy-conntrack-and-dns-lookup-timeouts
- gitlab.alpinelinux.org/alpine/aports/issues/9734gitlab.alpinelinux.org/alpine/aports/issues/9734
- lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2005q2/000229.htmllists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2005q2/000229.html
- lore.kernel.org/all/[email protected]/Tlore.kernel.org/all/[email protected]/T
- medium.com/techmindtickle/e9de8239e2famedium.com/techmindtickle/e9de8239e2fa
- patches.dpdk.org/project/dpdk/patch/[email protected]patches.dpdk.org/project/dpdk/patch/[email protected]
- pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.htmlpubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html
- pythonspeed.com/articles/alpine-docker-pythonpythonspeed.com/articles/alpine-docker-python
- serverfault.com/questions/632665serverfault.com/questions/632665
- wiki.musl-libc.org/bugs-found-by-musl.htmlwiki.musl-libc.org/bugs-found-by-musl.html
- wiki.musl-libc.org/open-issues.htmlwiki.musl-libc.org/open-issues.html
- www.linkedin.com/pulse/testing-alternative-c-memory-allocators-pt-2-musl-mystery-gomeswww.linkedin.com/pulse/testing-alternative-c-memory-allocators-pt-2-musl-mystery-gomes
- www.math.tamu.edu/~comech/tools/linux-slow-dns-lookupwww.math.tamu.edu/~comech/tools/linux-slow-dns-lookup
- www.openwall.com/lists/musl/2017/10/04/6www.openwall.com/lists/musl/2017/10/04/6
- www.openwall.com/lists/musl/2018/03/30/4www.openwall.com/lists/musl/2018/03/30/4
- www.v2ex.com/t/242793www.v2ex.com/t/242793