Ubuntu 22.04 离线环境完全配置指南:从 GCC 到 NVIDIA 驱动再到 Samba 共享

前言

在实际生产环境中,很多服务器出于安全考虑无法连接外网。本文记录了一次完整的离线配置过程,包括:

  • 编译工具链(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 cccheck 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

相关推荐
晨枫阳16 小时前
@changesets/cli是什么?哪些情况下需要使用?怎么使用
linux·运维·ubuntu
天远Date Lab17 小时前
零信任架构实战:基于天远行驶证核查构建自动化车队准入网关
运维·人工智能·架构·自动化
不会就选b17 小时前
Linux之网络基础(二)
linux·运维·网络
莫浅子18 小时前
Day 4:USB 2.0 时序与带宽预算
linux·运维·网络
ly768918 小时前
Linux 从入门到实践:系统架构、常用命令、服务管理与故障排查详解
linux·运维·系统架构
2401_8685347818 小时前
在企业环境中快速安装配置 FreeBSD Unix 服务器操作系
linux·网络协议
小雪崩18 小时前
嵌入式学习 day27:标准IO
linux·c语言·学习
Arnold.Shen19 小时前
Dell Storage SC - 如何发送SupportAssist,并启用安全控制台
linux·安全
青瓦梦滋19 小时前
IP/MAC帧/ARP协议
运维·服务器·网络·网络协议·tcp/ip
wunaiqiezixin19 小时前
MIT 6.S081 xv6 源码精读(Scheduling):sched、scheduler
linux·unix·os·xv6·mit6.s081