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

相关推荐
方乐寺村13 小时前
彩笔运维勇闯机器学习--拟合
运维·人工智能·机器学习
toooooop813 小时前
如何用 ss + ps 精准定位本机 Redis 的“隐形”消费者?
linux·数据库·redis·缓存
画中有画14 小时前
pc浏览器网页如何实现自动化操作?
运维·自动化
重生的黑客14 小时前
Linux 进程程序替换与自定义 Shell:从 exec 函数族到命令行解释器
linux·运维·服务器·shell
北极糊的狐14 小时前
阿里云服务器-命令2-Linux 系统实时资源监视器 top 命令详解(进程级实时资源监控)
linux·运维·服务器
三言老师15 小时前
clear与history历史命令管理实操
linux·运维·服务器·网络·centos
味悲16 小时前
Linux 环境下 DNS 服务器搭建
linux·运维·服务器
greenbbLV16 小时前
中小公司积分商城选型:SaaS与私有化优劣对比分析
大数据·运维·人工智能
dok1216 小时前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (7)open,release (8) write read
linux