Linux离线工具链搭建及r8125驱动编译安装指南
简介在Ubuntu系统中配置开发环境或安装Realtek R8125网卡驱动时通常需要gcc、make、build-essential等基础工具而离线环境下往往因依赖缺失导致安装失败。这份资源专为这类场景准备整合了Ubuntu 18.04 amd64平台的编译工具链与r8125驱动离线安装包共42个文件、合计30.01MB。其中包含23个deb安装包覆盖gcc、g、make、libc6-dev等关键组件另有驱动C源码及头文件、Makefile构建脚本、autorun.sh自动安装脚本和readme说明可支持无网络环境下的完整部署。资源面向需要离线搭建C/C开发环境或为Realtek r8125网卡编译驱动的Ubuntu用户特别适合内网服务器、机房及网络受限的机器。包内文件组织清晰既有标准deb包也有源码包用户可以按需选取安装路径也可以参照Makefile、readme和autorun脚本理解从编译到加载驱动的完整流程节省逐个查找依赖的时间。目前已有3767人学习下载对于常需处理离线安装的开发者是一份实用的工具包。1. 离线装这套工具链和r8125驱动为什么先要“自找麻烦”一台刚开箱的服务器系统装好了但网络不通。插上网线灯不亮ip addr 里连网卡都看不到。这种情况十有八九是网卡驱动没进内核而偏偏这块网卡是 r8125——型号常见但官方驱动往往不在发行版自带内核里。没有网卡就不能联网不能联网就没法从源安装编译工具没有编译工具又没法编译驱动。这是个经典的“先有鸡还是先有蛋”局面。gcc、make、build-essential 加上 r8125 的离线安装包及依赖就是为了打破这个死锁。它要做的事很简单在一台有网的机器上把所有需要的软件包和依赖提前下载好拷到离线环境里安装然后编译驱动救活网卡。适合谁系统运维、嵌入式开发、机房交付凡是跟 Linux 服务器打交道的人都会碰上这一次。下文不讲虚的直接给你一套能照着做的完整路径。2. 搞懂依赖关系面离线安装要带哪些东西缺一个都会翻车2.1 编译一个网卡驱动需要哪些零件先看编译链路上的每个角色gcc把 C 源码编译成二进制目标文件。r8125 驱动源码基本是 C 写的没有 gcc 就没有编译动作。make按 Makefile 规则组织编译过程决定先编谁、后编谁、怎么链接。build-essentialDebian/Ubuntu 下的元包装它等于一次性把 gcc、g、make、libc6-dev 等基础编译工具拉进来省得一个个找。linux-headers-$(uname -r)驱动要编译成内核模块必须引用当前内核的源码头文件否则内核 API 对不上。r8125 官方驱动源码包这部分必须手动准备distro 仓库里一般不给。注意标题里没提 linux-headers但实际编译 r8125 时头文件是硬性依赖。常见做法是在离线仓库里顺手把 headers 包也带上。2.2 构建环境与目标环境的匹配原则离线安装最怕的一件事在一台机器上把包下齐了拿到的包在目标机上装不上。原因基本出在三点发行版不同Debian 包给 Ubuntu 装会依赖冲突。CPU 架构不同x86_64 的包不能给 arm64 用。内核版本不同编译好的内核模块严格绑定内核版本当前环境的uname -r是多少headers 就只能用对应的。我一般会这样确认匹配在目标机上执行uname -m看架构cat /etc/os-release看发行版版本然后用同样的环境去准备离线包。如果目标机开不了机进不了系统那就只能通过启动盘或救援模式先判断架构。3. 从有网主机准备离线包用 apt download 拉全依赖3.1 用 apt download 拉取指定依赖包在一台能联网、且与目标机发行版/架构一致的机器上执行。先建目录再下载 gcc、make、build-essential、linux-headers 以及 r8125 相关依赖。# 创建离线包目录 mkdir -p /data/offline-debs cd /data/offline-debs # 下载 build-essential 和内核头文件 apt-get update # 方法一直接下载元包但不会自动包含依赖需要手动补依赖 apt-get download build-essential gcc make linux-headers-$(uname -r) # 方法二用 apt-cache 分析依赖后循环下载所有依赖推荐 apt-cache depends --recurse --no-recommends --no-suggests \ build-essential linux-headers-$(uname -r) \ | grep -E ^[A-Za-z0-9] \ | grep -v g \ | sort -u \ | xargs -I {} apt-cache depends --no-recommends --no-suggests {} \ | grep -E ^[A-Za-z0-9] \ | sort -u \ | xargs -I {} apt-get download {}这段命令的逻辑是先用apt-cache depends --recurse把所有间接依赖递归解析出来再提取纯包名最后统一apt-get download。因为 build-essential 包含 g、libstdc 等循环处理能自动补齐。如果中途有某个包下载失败多半是软件源里没有该版本需要先apt-get update再重试。下载完成后检查目录里是否有.deb文件并且数量不会太少。我见过只下载了一个空壳的情况原因就是忘了用 recursion 参数。3.2 自建本地 deb 仓库供多台机器复用如果只有一台离线机直接把所有 deb 拷过去用dpkg -i装就完事。但如果是机房批量交付或者后续还要装其他驱动不如搭一个本地仓库让多台机器共用一份离线包。下面是最小做法# 生成 Packages 索引需要 dpkg-dev 工具 apt-get install dpkg-dev # 在 debs 目录下扫描生成 Packages.gz cd /data/offline-debs dpkg-scanpackages . /dev/null | gzip Packages.gz # 在离线机上把来源指向这个本地目录NFS 或 U 盘挂载均可 # 假设挂载到 /mnt/debs echo deb [trustedyes] file:///mnt/debs / /etc/apt/sources.list.d/local-offline.list apt-get update这里的关键是dpkg-scanpackages生成索引后离线机才能用apt-get install自动解析依赖否则只能手动 dpkg。trustedyes是因为本地仓库没有签名不加这个参数 apt 会拒绝安装。4. 离线机实际操作装好工具链再编译 r8125 驱动4.1 按依赖顺序安装 deb 包把打包好的目录整个拷贝到离线机比如放在/root/offline-debs。然后手动按依赖顺序安装。这里不能直接dpkg -i *.deb因为缺依赖时 apt 不会帮你自动补齐dpkg 会报错。cd /root/offline-debs # 先安装基础工具链一般按这个顺序 dpkg -i libc6*.deb libgcc*.deb libstdc*.deb dpkg -i binutils*.deb gcc-*.deb g*.deb dpkg -i make*.deb build-essential*.deb # 再安装内核头文件 dpkg -i linux-headers-*.deb # 如果报依赖错误可以再用 apt 修复本地仓库 apt-get -f install -yapt-get -f install -y是个后悔药它会在已有 local 仓库开启的情况下自动补齐缺口依赖。所以不建议删掉刚才的/etc/apt/sources.list.d/local-offline.list留着它哪怕包顺序没排对也能兜底。4.2 编译 r8125 驱动并用 modprobe 加载假设你已经把 r8125 源码包解压到/root/r8125。不同版本的源码解压后目录结构略有差异但编译套路一致cd /root/r8125 # 清理之前可能的编译产物避免旧中间文件影响 make clean # 编译并安装内核模块 make -j$(nproc) make install # 加载驱动模块 modprobe r8125 # 查看模块是否加载成功 lsmod | grep r8125make -j$(nproc)是让编译过程并行j参数后面的数字是并行任务数$(nproc)会自动取当前 CPU 核数。如果内核版本较新源码包可能编译报错这时要么换新版驱动源码要么手动修改源码里的内核兼容代码。加载成功后用ip link看是否出现类似enp3s0或者eth0的网卡接口。如果没出现多半是模块没被系统识别或者modprobe没有权限需要 root 执行。5. 离线安装常见避坑清单四个高频问题5.1 现象安装 deb 包时报错“Depends: gcc ( 4:9.3.0) but it is not installable”原因这个错误通常不是真的没有那个包而是你本地仓库没有把推荐的依赖拉全或者下载时用了--no-recommends把关键推荐包过滤掉了。解决重新在最前面那个循环下载命令里去掉--no-recommends过滤把 Recommended 也拉进来。或者直接apt-get download gcc-9-base cpp-9等对应基础版本包手动补装。5.2 现象编译 r8125 时提示“linux/compiler.h: No such file or directory”原因内核头文件没有正确安装或者装的是 headers-common 但缺少当前内核版本的 headers。这是编译驱动最常见的踩坑点。解决先执行uname -r确认目标内核版本然后确保linux-headers-$(uname -r)这个精确版本装上了。注意如果你用了apt-get download linux-headers-generic它只是一个元依赖真正的头文件包名带具体版本号如linux-headers-5.15.0-91-generic。必须把那个精确版本包下载装上。5.3 现象驱动加载成功lsmod里也有 r8125但网卡灯不亮原因驱动模块加载不等于网卡被正确配置。很多机器上 r8125 驱动的默认参数需要开启电源管理节能模式或者需要 ethtool 关闭 WOL 唤醒。解决先ip link找到网卡接口名然后ethtool -s eth0 autoneg off speed 1000 duplex full ethool -s eth0 wol d ip link set eth0 up如果灯还是不亮检查网线另一端的交换机端口是否也配置了固定的速率和双工有时两端速率不匹配会握手失败。5.4 现象重启后网卡驱动消失又回到没有网卡的状态原因手动modprobe只是临时加载不进持久化文件。系统重启后不会自动加载这个模块。解决把模块名写入/etc/modules-load.d/下的文件或者直接写入/etc/modulesecho r8125 /etc/modules-load.d/r8125.conf另外确认驱动安装路径是否在/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/下如果不在这个位置depmod -a后模块可能找不到。6. 验证驱动与进阶ethTool 检查链路DKMS 做一劳永逸驱动装完不是结束能正常跑流量才算真完成。最直接的验证是ethtool eth0查看 Speed 和 Link detected 参数接着用ping打网关试探真实流量。更进一步如果之后内核更新手动编译的 r8125 模块就会与旧内核失配导致下一次重启又没网。常见做法是转用 DKMS 来管理这个模块让系统在每次内核升级后自动重编。做法是# 安装 dkms从离线包里也要带这一项 dpkg -i dkms*.deb # 进入驱动源码目录 cd /root/r8125 # 把源码拷贝到 dkms 管理的目录通常需要提供一套 Makefile 支持 cp -r /root/r8125 /usr/src/r8125-9.001.01 dkms add -m r8125 -v 9.001.01 dkms build -m r8125 -v 9.001.01 dkms install -m r8125 -v 9.001.01这里版本号必须与源码包里的实际版本对应不能随便写。dkms会在/var/lib/dkms下记录构建状态内核升级后新内核的 initramfs 生成阶段会自动触发 rebuild 和 reinstall驱动就不会因为内核升级而丢了。另外建议在离线机装完驱动后顺手备份整个/root/offline-debs目录到一个可靠位置。我有一次因为在现场误删了打包目录后面需要再次重装环境时只能靠临时找网络教训深刻。希望帮到你少走这一步弯路。本文还有配套的精品资源点击获取