自托管Linux Runner执行Maven发布命令时nx依赖报错的解决办法
解决自托管Linux Runner上Nx Native绑定加载失败导致Maven构建失败的问题
针对你遇到的/tmp/nx-native-file-cache-xxx/nx.linux-x64-gnu.node: failed to map segment from shared object错误,以下是几个可行的解决思路:
检查/tmp目录的挂载权限
大部分Linux系统默认会给/tmp挂载noexec选项,禁止执行其中的文件,这会直接导致Nx的native模块无法运行。- 先查看/tmp的挂载参数:
mount | grep /tmp,如果输出里有noexec,就需要调整 - 修改
/etc/fstab文件,找到/tmp对应的行,去掉noexec参数,然后执行mount -o remount,rw,exec /tmp重新挂载 - 要是不想修改系统配置,也可以临时指定Nx的缓存目录到有执行权限的路径:
export NX_NATIVE_CACHE_DIR=/var/tmp/nx-cache,确保这个目录存在且当前用户有读写权限
- 先查看/tmp的挂载参数:
清理Nx缓存和依赖
缓存损坏或者依赖安装不完整也会触发这类错误:- 删除本地的
node_modules和Nx缓存目录:rm -rf node_modules .nx - 重新安装依赖:
npm install(或yarn install,根据你的包管理器来) - 再重新执行Maven构建命令
- 删除本地的
验证Runner用户的权限
确保执行Maven命令的自托管Runner用户对/tmp目录有足够权限:- 切换到Runner用户:
su - runner-user(替换成实际的用户名) - 测试/tmp的执行权限:
touch /tmp/test_exec && chmod +x /tmp/test_exec && ./tmp/test_exec,如果能正常执行就没问题,否则需要调整/tmp的权限或者给Runner用户添加对应权限
- 切换到Runner用户:
调整Nx版本
当前使用的Nx 19.1.1可能和自托管系统存在兼容性问题:- 尝试升级到最新稳定版:
npm install nx@latest --save-dev - 或者降级到之前验证过能正常运行的版本,比如
npm install nx@18.3.5 --save-dev - 重新安装依赖后再执行构建
- 尝试升级到最新稳定版:
补充系统依赖库
Nx的native模块依赖系统的动态链接库(比如glibc),如果自托管系统的库版本过低会报错:- 查看系统glibc版本:
ldd --version,对比GitHub Actions的ubuntu-latest(一般是22.04,对应glibc 2.35) - 如果版本差距大,Debian/Ubuntu系可以安装兼容库:
apt-get install libc6-dev,或者考虑升级系统版本
- 查看系统glibc版本:
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

