[BUG] Native installer incorrectly detects glibc system as musl when musl cross-compilation packages are installed
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Current: The install script checks [ -f /lib/libc.musl-x86_64.so.1 ] and downloads the musl binary if this file exists - even on glibc systems where musl is only installed for cross-compilation.
What Should Happen?
Expected: The installer should detect what libc the system actually uses, not whether musl libraries happen to exist. The existing ldd /bin/ls | grep -q musl check is correct, but the file existence check runs first and short-circuits.
Error Messages/Logs
curl -fsSL https://claude.ai/install.sh | bash
Setting up Claude Code...
Error loading shared library libstdc++.so.6: No such file or directory (needed by /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl)
Error loading shared library libgcc_s.so.1: No such file or directory (needed by /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl)
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt20__throw_length_errorPKc: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: __cxa_thread_atexit: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt9terminatev: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt15get_new_handlerv: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt13set_terminatePFvvE: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZNSt18condition_variableC1Ev: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: __cxa_guard_acquire: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt25__throw_bad_function_callv: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE15_M_replace_coldEPcmPKcmm: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt17__throw_bad_allocv: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZNSt8__detail15_List_node_base9_M_unhookEv: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt20__throw_system_errori: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: __cxa_pure_virtual: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: __cxa_guard_release: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZNSt18condition_variable10notify_allEv: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt28__throw_bad_array_new_lengthv: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: __cxa_demangle: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt21__glibcxx_assert_failPKciS0_S0_: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEmmm: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZNSt19_Sp_make_shared_tag5_S_eqERKSt9type_info: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZNSt18condition_variable10notify_oneEv: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: __dynamic_cast: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZNSt18condition_variableD1Ev: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZNSt8__detail15_List_node_base7_M_hookEPS0_: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt24__throw_out_of_range_fmtPKcz: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt11_Hash_bytesPKvmm: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: __once_proxy: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt19__throw_logic_errorPKc: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: __fixdfti: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: __modti3: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: __umodti3: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _Unwind_Resume: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt15__once_callable: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt11__once_call: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _Unwind_GetDataRelBase: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _Unwind_GetTextRelBase: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _Unwind_GetIP: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _Unwind_Backtrace: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _Unwind_GetLanguageSpecificData: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _Unwind_GetIPInfo: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _Unwind_GetRegionStart: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _Unwind_SetGR: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _Unwind_SetIP: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZTVN10__cxxabiv121__vmi_class_type_infoE: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt4cerr: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZTVN10__cxxabiv120__si_class_type_infoE: symbol not found
Error relocating /home/max/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZTVN10__cxxabiv117__class_type_infoE: sym ~8s exit:127
Steps to Reproduce
Steps to reproduce
- On Ubuntu/Debian (glibc-based):
``bash``
sudo apt install musl musl-dev musl-tools
- Run the installer:
``bash``
curl -fsSL https://claude.ai/install.sh | bash
- Observe errors:
````
Error loading shared library libstdc++.so.6: No such file or directory (needed by ~/.claude/downloads/claude-2.0.65-linux-x64-musl)
Error relocating ~/.claude/downloads/claude-2.0.65-linux-x64-musl: _ZSt20__throw_length_errorPKc: symbol not found
[... 40+ more symbol relocation errors ...]
Claude Model
None
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
2.0.65
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
Other
Additional Information
Environment Information
Operating system: Linux (Ubuntu 22.04 LTS, glibc 2.35)
Terminal: kitty
Shell: zsh
Node version: N/A (native installer)
Attempted to install 2.0.65 (downloaded musl variant incorrectly), successfully installed 2.0.72 after workaround.
Additional Context
The problematic detection logic (lines ~77-82 of install.sh):
if [ -f /lib/libc.musl-x86_64.so.1 ] || [ -f /lib/libc.musl-aarch64.so.1 ] || ldd /bin/ls 2>&1 | grep -q musl; then
platform="linux-${arch}-musl"
else
platform="linux-${arch}"
fi
The file /lib/libc.musl-x86_64.so.1 exists because Ubuntu's musl package installs it for cross-compilation. However, the system itself uses glibc:
$ ldd --version
ldd (Ubuntu GLIBC 2.35-0ubuntu3.11) 2.35
$ file /bin/ls
/bin/ls: ELF 64-bit LSB pie executable, x86-64, dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0
$ ldd /bin/ls | grep musl
(no output)
Workaround: Temporarily move the musl library before installing:
sudo mv /lib/libc.musl-x86_64.so.1 /lib/libc.musl-x86_64.so.1.bak
curl -fsSL https://claude.ai/install.sh | bash
sudo mv /lib/libc.musl-x86_64.so.1.bak /lib/libc.musl-x86_64.so.1
---
Possible solution
Remove the file existence checks and only use the ldd check:
if ldd /bin/ls 2>&1 | grep -q musl; then
platform="linux-${arch}-musl"
else
platform="linux-${arch}"
fi
Or check the ELF interpreter:
if readelf -l /bin/ls 2>/dev/null | grep -q 'ld-musl'; then
platform="linux-${arch}-musl"
else
platform="linux-${arch}"
fiThis issue has 5 comments on GitHub. Read the full discussion on GitHub ↗