记录一次离线安装Ubuntu网卡驱动的坎坷经历

起因

台式机原本用着 VMware Workstation,想要搭建 AI 环境时发现虚拟机无法直接调用 nvidia 显卡资源 (如下命令输出为 False),于是决定安装 windows11 + Linux 双系统。

>> print(torch.cuda.is_available())

U盘+ Rufus 制作 Ubuntu 24.04 LTS 镜像。进入 BIOS 按步骤操作后成功安装 Ubuntu,看起来很顺利,然后来到最关键的一步安装 Nvidia驱动,哐哐一顿操作后发现显卡驱动是装上了,但网卡驱动掉了!没网了!

下载网卡官方网卡驱动

这里很自然的一个思路就是重新装网卡驱动。但是,网卡厂商通常 release driver for Linux 需要用户下载后在本地编译才能安装 (不如 windows11 那样友好)。

因此也要求 Linux 系统有基础编译环境,即 gcc, g++, make 等工具。

还需要知道网卡硬件的型号等信息,在 Linux 终端输入以下命令查看,RTL8125 是常见的消费端网卡型号。然后再去 Realtek 官网找到对应驱动下载。

>> lspci | grep -i "net"

Intel Corporation Wi-Fi 6 AX200 (xxx)
Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (xxx)

接下来,就是为了装上驱动而经历的一系列坎坷经历和学习过程~

(基础知识一) GRUB引导启动

GRUB 是 Unix 系统中常用的启动引导程序,负责在启动时加载操作系统内核。安装双系统后也是每次开机在这一步选择进入 Windows11 还是 Ubuntu 系统。

面对上述安装显卡驱动后连不上网的问题,搜索资料得知可以 GRUB 界面选择Advanced mode for Ubuntu” 进入旧版 kernel 的操作系统恢复联网。

具体来说,安装显卡驱动以前 kernel 版本是 Linux 6.14.0-27-generic, 安装显卡驱动以后是 Linux 6.17.0-14-generic (这里据说是 nvidia 驱动会自动将 kernel 升级到新版本),因此,无论是有线还是无线网卡驱动都对应旧版本 kernel,新版 kernel 需要对应新的驱动。

以下命令查看本机 kernel version:

>> hostnamectl
 Static hostname: xxx
             ...
Operating System: Ubuntu 24.04.3 LTS
          Kernel: Linux 6.17.0-14-generic
    Architecture: x86-64
             ...

(此处写点边角料)

在研究 Linux packages 过程中疑惑 Noble Numbat 是什么? 

Noble Numbat 是 Ubuntu 发行版本 24.04 LTS 的代号,同样 Ubuntu 发行版本 22.04 LTS 代号叫 Jummy Jellyfish. 尝试手动下载离线安装 packages 的时候版本不要搞错了.

附上 Ubuntu package 下载链接https://ubuntu.pkgs.org/

(基础知识二) apt / dpkg

dpkg 是 Debian 软件包管理工具。它主要处理文件格式为 .deb 的安装包, 但不解决包之间的依赖问题。如果安装的软件包缺少依赖项, dpkg 会给出提示,但并不会自动下载和安装缺失的依赖。

>> dpkg -i <package_name>.deb    // -i: install package

apt, 全名 Advanced Package Tool,也是 Debian 软件包管理器。

apt 相比 dpkg 更适合实际使用,因为它可以自动解决和下载依赖问题 (需要联网),使软件安装更为轻松。

>> apt-get install <package_name>

(基础知识三) make / build-essential

build-essential 是 Ubuntu 和其他基于 Debian 的 Linux 发行版中的一个元包,它包含了编译软件所必需的工具和库。

安装网卡驱动,需要先想办法装上 build-essential。其包含以下工具和库:

  • gdb: 用于调试程序。
  • gcc, g++: 用于编译 C 和 C++ 程序。
  • make: 用于自动化编译过程。
  • libc6-dev: GNU C 库,包含处理和编译 C 和 C++ 脚本所需的头文件和开发库。
  • dpkg-dev: 用于解压、构建甚至上传 DEB 源包

离线安装的最终解决办法

该方法的前提是双系统已经成功安装,即前文提到的 GRUB 引导启动 "Advanced mode for Ubuntu" ,选择旧版本 kernel 后可以进入系统且可以正常联网!

1. 在旧版 kernel 系统准备下载目录

>> cd /media/<user_name>/E_Disk           // 进到磁盘E盘目录
>> mkdir offline_package

2. 更新软件源

>> apt update

3. 下载 build-essential 和 cmake

注意,加上选项 --download-only, 只下载不安装!

apt 下载的 package 默认在 /var/cache/apt/archives 目录。

>> apt-get install --download-only -y build-essential cmake

>> cp /var/cache/apt/archives/*.deb /media/<user_name>/E_Disk/offline_package/

4. 重启并进入到新版 kernel 系统安装 build-essential

进入到 offline_package 目录进行离线编译和安装。

>> cd offline_package
>> apt install ./*.deb

(如果提示有依赖问题或顺序问题,可执行 apt --fix-broken install)。

我在这一步发现 apt install 失败,但是用 dpkg 安装一次成功。

>> dpkg -i ./*.deb

5. 检查安装是否成功

输入以下命令,若正常显示版本则安装成功。

>> gcc --version
>> g++ --version
>> make --version
>> cmake --version

6. 编译安装网卡驱动

进到下载的 Realtek 驱动目录下,运行 autorun 脚本编译并安装。

>> cd ~/Downloads/realtek_r8125_driver/r8125-9.016.01/
>> ./autorun.sh

...
Error: /lib/modules/6.17.0-14-generic/build/: No such file or directory
...

报错了!这是因为 make 命令在尝试编译驱动时,找不到当前 kernel (6.17.0-14-generic) 对应的源代码头文件 (Header Files),需要安装 linux-headers package。

于是重复一遍步骤1~4,在能联网的系统上下载源代码头文件,再切到离线的系统安装。

>> apt-get install --download-only -y linux-headers-6.17.0-14-generic

再运行 autorun 脚本就不再报错,同时看到桌面右上角网络连接图标出现。

使用 apt 更新其他软件包

成功安装网卡驱动!

马上用 apt 更新一遍能更新的 package,避免重蹈覆辙!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值