无sudo权限的CentOS共享集群如何安装运行LLVM/Clang?
CentOS共享集群无sudo权限部署LLVM/Clang可行方案
核心逻辑是所有部署操作、文件存储全部放在个人用户的家目录/专属路径下,完全不触碰系统级目录,不需要任何管理员权限。
优先推荐:下载官方预编译二进制包(零编译成本、部署最快)
- 直接从LLVM官方发布渠道获取和集群CentOS版本、glibc版本适配的预编译Clang/LLVM安装包,这类包是官方静态/半静态编译的开箱即用版本,没有复杂的系统依赖要求
- 把压缩包解压到个人目录下的任意位置,比如
~/opt/llvm - 配置个人shell的环境变量:在
~/.bashrc(或者zsh的~/.zshrc)末尾追加两行配置export PATH=~/opt/llvm/bin:$PATH export LD_LIBRARY_PATH=~/opt/llvm/lib:$LD_LIBRARY_PATH - 执行
source ~/.bashrc让配置生效,直接运行clang --version验证,能正常输出版本号就说明部署完成 - 适配注意:CentOS7集群普遍带的是glibc 2.17,选预编译包的时候要匹配对应的glibc最低要求版本,避免运行时报
version 'GLIBC_2.xx' not found的错误
次选:用户态包管理器安装(环境隔离性强)
适合需要灵活切换LLVM版本、或者预编译包和集群环境不兼容的场景,所有操作都在用户空间完成,不需要sudo
- Miniconda方案:先在家目录下安装Miniconda(安装过程全程不需要root),创建独立的虚拟环境后,直接通过conda源安装对应版本的LLVM/Clang,所有依赖都会被隔离在虚拟环境目录下,不会和其他用户、系统环境冲突
- Spack方案:这类HPC场景专用的用户态包管理器,本身就是为无sudo的共享集群设计的,安装完成后可以直接拉取源码编译任意版本的LLVM/Clang,自动处理和集群现有编译器、依赖库的兼容问题,还能很方便的在多个LLVM版本之间切换
自定义场景:源码编译安装(完全可控)
如果有特殊的编译参数需求(比如要开特定的Sanitizer、适配特定的硬件架构),完全可以自己编译,只要把安装路径指到家目录就行:
- 把对应版本的LLVM源码拉取到个人目录
- 用cmake配置编译参数时,把安装前缀指定为自己的目录路径,比如
-DCMAKE_INSTALL_PREFIX=~/opt/llvm-custom - 编译过程尽量提交到集群的计算节点上跑,不要占用公共登录节点的资源拖慢其他用户的操作
- 编译完成后,同样把bin、lib路径加到个人shell的环境变量里就能正常调用
- 编译过程中遇到依赖缺失的情况,把对应的依赖也安装到个人目录下,通过
CMAKE_PREFIX_PATH参数指定依赖的查找路径即可,不要尝试往系统目录装任何东西
常见注意事项
- 不要尝试往
/usr、/usr/local这类系统级目录写文件,普通用户本身没有写入权限,操作不会生效还可能产生无意义的报错 - 配置环境变量只修改个人的shell配置文件,不要去改
/etc/profile、全局bashrc这类系统配置文件 - 部署前可以先检查集群的模块化系统:很多共享集群的管理员会提前把常用的LLVM/Clang版本装在公共共享路径下,通过
module avail查找对应模块,用module load命令就能直接调用,连手动安装的步骤都能省掉
内容的提问来源于stack exchange,提问作者skidjoe
相关产品推荐
相关产品推荐

