如何配置GCP VM实现多用户共享预装依赖无需重复安装
这个需求完全可以实现。你之前分配的Compute Admin、Service Account User属于GCP云平台层面的IAM权限,仅管控云资源的操作权限,不涉及VM操作系统内部的文件访问、程序执行权限,用户无法调用预装资源本质是系统内的安装路径、文件权限、环境变量配置不符合全局共享要求,按以下步骤调整即可,完全不需要每个用户重复安装依赖:
核心调整步骤
统一全局安装路径
所有需要共享的依赖、库、驱动不要安装在单个用户的个人主目录(比如/home/xxx/下的私有路径),这类目录默认仅所有者有完整执行权限。系统级软件直接用包管理器加sudo安装即可:Debian/Ubuntu系用apt install、RHEL/CentOS系用dnf/yum install,这类安装默认会放到/usr/bin、/usr/lib等全局系统路径,天然对所有用户可见。自定义安装的大型依赖(比如多版本CUDA、独立Python环境、自研驱动)统一放到/opt/shared_deps这类全局共享目录,安装完成后执行sudo chmod -R 755 /opt/shared_deps给所有用户开放目录的读、执行权限。
注意:用pip、npm这类语言包管理器装依赖的时候不要加--user参数,该参数会把包装到当前用户的私有目录,其他用户无法访问。配置全局生效的环境变量
不要把PATH、LD_LIBRARY_PATH这类路径配置写到你个人账号的~/.bashrc、~/.zshrc等私有配置文件里,这类配置仅对你自己的账号生效。需要把所有共享依赖的路径配置写到系统全局配置文件中:在/etc/profile.d/目录下新建自定义配置文件比如shared_env.sh,写入对应的路径声明,示例:# 共享CUDA路径 export PATH=/opt/shared_deps/cuda/bin:$PATH export LD_LIBRARY_PATH=/opt/shared_deps/cuda/lib64:$LD_LIBRARY_PATH # 共享全局Python环境路径 export PATH=/opt/shared_deps/python3/bin:$PATH写完执行
sudo chmod 644 /etc/profile.d/shared_env.sh给配置文件加全局可读权限,所有用户重新登录SSH时会自动加载该配置,无需单独修改个人配置。配置特殊资源的访问权限
部分硬件驱动、服务默认限制普通用户访问,需要提前配置用户组权限:- 如需使用NVIDIA GPU,将需要访问GPU的用户加入
video用户组:sudo usermod -aG video 目标用户名 - 如需使用Docker,将需要操作容器的用户加入
docker用户组:sudo usermod -aG docker 目标用户名
组权限配置完成后,用户重新登录SSH即可生效,无需重启实例。
- 如需使用NVIDIA GPU,将需要访问GPU的用户加入
验证方法
配置完成后,用任意普通用户账号通过SSH密钥登录实例,执行对应依赖的调用命令(比如nvidia-smi验证GPU驱动、python -c "import 你预装的库"验证Python库、which 预装的命令行工具验证二进制程序),如果能正常返回结果就说明配置生效,后续新增用户只要按需加入对应用户组,直接就能使用所有预装资源,不需要重复安装。
内容的提问来源于stack exchange,提问作者Yiğit Mesci

