前言
在实际生产环境中,很多服务器出于安全考虑无法连接外网。本文记录了一次完整的离线配置过程,包括:
- 编译工具链(GCC、Make、Build-Essential)
- NVIDIA 显卡驱动
- Docker 容器 GPU 支持(nvidia-container-toolkit)
- Samba 文件共享服务
所有操作均基于 Ubuntu 22.04 (jammy) ,内核版本 6.8.0-40-generic ,架构 amd64。
环境信息速查表
在开始之前,先在离线机器上执行以下命令,记录结果供后续使用:
| 查询项 | 命令 | 本次环境值 |
|---|---|---|
| 系统代号 | `lsb_release -a | grep Codename` |
| 系统架构 | dpkg --print-architecture |
amd64 |
| 内核版本 | uname -r |
6.8.0-40-generic |
| 已装依赖 | `dpkg -l | grep dkms` |
| 已装依赖 | `dpkg -l | grep build-essential` |
| 已装依赖 | `dpkg -l | grep libglvnd` |
第一部分:在联网机器上下载离线包
由于离线机器无法联网,需要找一台**同版本系统(Ubuntu 22.04 jammy)**的联网机器,使用 apt-get download 命令批量拉取所有依赖包。
1.1 一键下载编译工具链和 NVIDIA 依赖
bash
# 创建下载目录
mkdir -p ~/offline-pkgs && cd ~/offline-pkgs
# 批量下载 build-essential、dkms、内核头文件及其所有依赖
apt-get download $(apt-cache depends --recurse \
--no-recommends --no-suggests --no-conflicts \
--no-breaks --no-replaces --no-enhances \
build-essential dkms linux-headers-6.8.0-40-generic \
| grep -v i386 | grep "^\w" | sort -u)
命令解析:
apt-cache depends --recurse:递归获取所有依赖关系--no-*参数:排除推荐的、建议的、冲突的等非必须包grep -v i386:排除 32 位架构grep "^\w":只保留有效的包名sort -u:去重
1.2 下载 NVIDIA 驱动
NVIDIA 驱动需要从官网下载 .run 文件:
bash
# 在联网机器上(或直接用浏览器)
wget https://www.nvidia.com/download/driverDownloads.aspx
# 根据显卡型号搜索对应驱动,下载 .run 文件
# 或直接从 NVIDIA 官方镜像站下载
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.120/NVIDIA-Linux-x86_64-550.120.run
1.3 下载 Samba 及相关工具
bash
apt-get download samba samba-common smbclient cifs-utils
1.4 下载 nvidia-container-toolkit(如需 Docker GPU 支持)
访问 GitHub Releases,下载对应的 .tar.gz 包:
bash
# 示例:在联网机器上下载
wget https://github.com/NVIDIA/nvidia-container-toolkit/releases/download/v1.17.3/nvidia-container-toolkit_1.17.3_deb_amd64.tar.gz
1.5 传输到离线机器
将以上所有下载的文件(.deb、.run、.tar.gz)通过 U 盘或内网传输工具拷贝到离线服务器的某个目录,例如 /opt/offline-pkgs/。
第二部分:离线机器安装
2.1 安装编译工具链
bash
# 进入存放 .deb 的目录
cd /opt/offline-pkgs
# 安装所有依赖包(连续执行两次以解决依赖顺序问题)
sudo dpkg -i *.deb
sudo dpkg -i *.deb
验证安装:
bash
gcc --version # 应显示版本号
make --version # 应显示 GNU Make 4.3
dkms --version # 应显示版本号
ls /usr/src/linux-headers-6.8.0-40-generic # 应有文件列表
2.2 安装 NVIDIA 显卡驱动
2.2.1 禁用 Nouveau 开源驱动
bash
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo update-initramfs -u
sudo reboot
重启后验证 Nouveau 是否已禁用:
bash
lsmod | grep nouveau
# 无输出则表示禁用成功
2.2.2 执行驱动安装
bash
cd /opt/offline-pkgs
chmod +x NVIDIA-Linux-*.run
sudo ./NVIDIA-Linux-*.run
安装过程中会提示:
- 是否注册 DKMS:选择 Yes
- 是否安装 32 位兼容库:根据需要选择
2.2.3 验证驱动
bash
nvidia-smi
# 应显示 GPU 列表和驱动版本
2.3 安装 Samba 共享服务
bash
cd /opt/offline-pkgs
sudo dpkg -i samba*.deb samba-common*.deb smbclient*.deb cifs-utils*.deb
sudo dpkg -i *.deb # 再次执行修复依赖
启动并设置开机自启:
bash
sudo systemctl enable smbd nmbd
sudo systemctl start smbd nmbd
验证服务状态:
bash
sudo systemctl status smbd # 应显示 active (running)
smbclient -L localhost -N # 应列出共享列表
2.4 安装 nvidia-container-toolkit
bash
cd /opt/offline-pkgs
tar -zxvf nvidia-container-toolkit_1.17.3_deb_amd64.tar.gz
cd nvidia-container-toolkit_1.17.3_deb_amd64
sudo dpkg -i *.deb
sudo dpkg -i *.deb # 再次执行修复依赖
配置 Docker 运行时:
bash
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
验证:
bash
sudo docker run --rm --gpus all nvidia/cuda:12.4-base nvidia-smi
# 应显示 GPU 信息
第三部分:常见问题与排查
问题 :unable to find cc 或 check that cc is in your system
原因 :系统缺少 cc 软链接。解决方法:
bash
sudo ln -sf /usr/bin/gcc /usr/bin/cc
问题 :linux-headers 版本不匹配
原因 :下载的头文件版本与 uname -r 输出不一致。解决:务必在离线机器上执行 uname -r 获取精确版本号,再去下载对应版本。
问题 :docker: unknown server: --gpus
原因:Docker 版本过低或未安装 nvidia-container-toolkit。解决:
bash
docker --version # 需要 ≥ 20.10
或安装nvidia-container-toolkit
附录:完整命令速查
联网机器下载命令汇总
bash
# 1. 编译工具链 + 内核头文件 + DKMS
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances build-essential dkms linux-headers-6.8.0-40-generic | grep -v i386 | grep "^\w" | sort -u)
# 2. Samba 相关
apt-get download samba samba-common smbclient cifs-utils
# 3. NVIDIA 驱动(浏览器下载 .run 文件)
# 4. nvidia-container-toolkit(GitHub 下载 .tar.gz)
离线机器安装命令汇总
bash
# 1. 安装所有 .deb
sudo dpkg -i *.deb && sudo dpkg -i *.deb
# 2. 验证工具链
gcc --version && make --version
# 3. 安装 NVIDIA 驱动
sudo ./NVIDIA-Linux-*.run
# 4. 启动 Samba
sudo systemctl enable smbd nmbd && sudo systemctl start smbd nmbd
# 5. 验证 Samba
smbclient -L localhost -N
# 6. 配置 Docker GPU
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker