新闻详情

新闻详情

首页 / 资讯中心 / 详情

Ubuntu 20.04内核源码下载与内核分析环境搭建指南

发布时间:2026/9/15 21:54:00来源:尧图网络
Ubuntu 20.04内核源码下载与内核分析环境搭建指南
最近帮人排查一个 WiFi 模块驱动加载失败的问题绕来绕去最后还是得回到内核源码里确认接口实现。类似的情况我遇到过很多次大家输入uname -r看到5.4.0-26-generic知道 Ubuntu 20.04 跑的是 5.4 内核但真到要下载对应源码的时候网上教程要么让你去 kernel.org 下压缩包要么让你敲apt source两条路走下来都会遇到一堆莫名其妙的报错最后大部分人卡在下载这一步压根没进入分析环节。这篇文章就把 Ubuntu 20.04 下内核源码下载这件事拆开说清楚。不是只给一条命令而是把版本选择、不同下载方式的适用场景、完整性校验、源码树结构、分析工具链和常见坑一次讲完。读完你可以直接从零开始在自己的机器上拿到一份干净的 Linux 内核源码并且知道下一步该从哪看起。1. 动手之前先定方向你要的是哪一份内核源码1.1 一个常见误解以为内核源码只有一份新手最常见的理解是Linux 内核源码就一个东西从官网拉下来就行了。但只要你稍微对比一下就会发现Ubuntu 20.04 默认跑的内核版本是5.4.0-26-generic而 kernel.org 首页挂出来的主线稳定版可能是 6.x或者 5.15 LTS。这里面的差异不只是新旧版本号不同而是发行版定制内核和上游内核的根本区别。Ubuntu 会在上游内核源码基础上打大量发行版补丁包括安全修复、硬件支持、Ubuntu 特有的配置项。也就是说你机器上正在运行的内核和 kernel.org 上对应大版本的源码并不是完全一致的。这一点想不清楚后面会遇到很诡异的问题比如用上游源码编译出来的内核模块加载到 Ubuntu 当前内核上报版本 magic mismatch。所以下载源码之前必须先回答一个问题我拿源码来干什么1.2 三种典型需求对应的版本选择需求场景推荐下载对象原因编译外部内核模块、写驱动、DKMS 打包与当前运行内核完全匹配的发行版源码模块依赖内核头文件和编译配置版本不一致直接编译失败定制内核、重新编译整个内核发行版源码或 LTS 主线源码发行版源码自带 Ubuntu 配置容易迁移LTS 主线社区资料多阅读源码、学习内核原理主线最新 stable 或 LTS代码结构更新注释更全网上分析文章基本都基于主线你可以在终端里用下面两条命令确认当前环境uname -r dpkg -l | grep linux-image我在这台 Ubuntu 20.04 机器上的输出是5.4.0-26-generic ii linux-image-5.4.0-26-generic 5.4.0-26.30 amd64 Signed kernel image generic如果你是为了给当前系统写驱动那就老老实实找5.4.0-26-generic对应的源码不要下载 6.x 主线后面编译模块时有你哭的。如果只是学习那用主线源码完全没问题结构更干净也不必跟 Ubuntu 的补丁纠缠。1.3 为什么必须强调这个选择我在不少技术群里看到过这种求助帖我在 Ubuntu 20.04 下编译驱动报错unknown symbol是不是内核源码下错了点进去一问十有八九用的是 kernel.org 最新主线跟系统内核完全不匹配。这个问题的根源不是在编译阶段而是在下载之前就已经埋下了。判断源码版本是否匹配当前系统有一个很直接的方法查看/lib/modules/$(uname -r)/build这个软链接。如果指向的目录是你解压的源码目录说明发行版已经帮你接好了如果指向的目录不存在或者指向了头文件包目录说明你当前只有 headers没有完整源码。编译外置模块时Kbuild 会读取这个 build 路径下的 Makefile 和配置路径错了后面全是白做。2. 从 apt source 到 kernel.org两条下载路径的实操与对比2.1 路径一apt source获取与当前内核完全匹配的发行版源码这是 Ubuntu 下最推荐的路径因为拿到的就是当前内核版本的源码加 Ubuntu 补丁。整个过程不复杂但有一处前置条件非常容易踩坑我先直接给出完整步骤。第一步确认系统里启用了源码仓库 deb-src。Ubuntu 默认的sources.list只启用二进制包仓库没有启用源码仓库。先检查一下grep -rh ^deb-src /etc/apt/sources.list /etc/apt/sources.list.d/如果没有输出说明你还没有启用源码源。编辑/etc/apt/sources.list把deb行复制一份改成deb-src。对于国内用户建议直接用清华或阿里云镜像的源速度更快。下面是典型配置# 清华源 deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse改完之后刷新索引sudo apt update第二步安装构建源码包所需的工具sudo apt install dpkg-dev第三步创建一个专门的源码工作目录最好放在家目录下mkdir -p ~/kernel-src cd ~/kernel-src第四步下载当前内核对应源码apt source linux-image-unsigned-$(uname -r)这里解释一下uname -r输出5.4.0-26-generic命令实际展开为apt source linux-image-unsigned-5.4.0-26-generic。Ubuntu 5.4 内核的包名可能是linux-image-unsigned-5.4.0-26-generic也可能不带unsigned如果你的内核是 5.15 及以后版本包名通常直接是linux-image-5.15.0-xx-generic。不确定时可以先用这个命令列一下apt-cache search linux-image-$(uname -r)执行完成后~/kernel-src目录下会多出几个文件linux-5.4.0-26-generic/ linux_5.4.0-26.30.dsc linux_5.4.0-26.30.orig.tar.xz linux_5.4.0-26.30.debian.tar.xzapt source会自动下载并解压源码最终进入linux-5.4.0-26-generic目录这就是带 Ubuntu 补丁的完整内核源码树。2.2 路径二kernel.org 下载主线源码如果你是学习或者定制内核不想跟 Ubuntu 补丁纠缠那就直接去 kernel.org 下载主线源码。打开 https://www.kernel.org 页面里会列出 mainline、stable、longterm 等版本的 tarball 下载链接。假设你想下载 6.6 主线稳定版具体版本号以页面上的实际文件名为准可以这样操作cd ~/kernel-src wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz国内直接访问这个地址可能比较慢建议换成国内镜像。清华镜像的路径结构跟 kernel.org 一致用起来很顺手# 清华镜像 wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v6.x/linux-6.6.tar.xz阿里云也有内核源码镜像路径是https://mirrors.aliyun.com/linux-kernel/v6.x/。下载速度通常能跑满带宽而且不会动不动断掉。解压命令tar -xJf linux-6.6.tar.xz解压出来的linux-6.6目录就是标准的上游内核源码树。这个路径下的代码不包含 Ubuntu 补丁结构最接近网上所有内核分析文章里说的Linux 源码。2.3 路径三git 方式获取适合持续跟踪对内核开发有长期兴趣、想跟踪补丁提交历史的人可以走 git 方式。完整克隆 Linux 内核仓库的体积很大通常超过 4GB如果只想读当前代码用浅克隆就够了cd ~/kernel-src git clone --depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git linux-git国内也可以用清华的 git 镜像git clone --depth 1 https://mirrors.tuna.tsinghua.edu.cn/git/linux-stable.git linux-git浅克隆默认只有一个主线版本。如果你想切换到一个具体 tag比如v6.6需要先取消浅克隆限制再拉取对应分支git fetch --unshallow git checkout v6.6这一步比较吃网络带宽和时间适合真正想深入内核开发的人普通阅读源码没必要这么折腾。2.4 三种下载方式的对比方式版本匹配度是否有补丁历史占用空间适合场景apt source精确匹配当前内核有 Ubuntu 补丁历史中等编译外置模块、驱动调试、DKMSkernel.org tarball上游主线/LTS无压缩包约 130-200MB解压后 1.3-2.5GB阅读学习、定制内核git clone任意版本/分支完整提交历史完整克隆 4GB 以上跟踪内核开发、做补丁分析个人建议第一次接触内核源码直接用apt source或者 kernel.org tarball 二选一。别一上来就搞 git 全量克隆网络和磁盘都会让你怀疑人生。3. 下载不等于结束完整性校验、解压与磁盘规划3.1 用 sha256 和 gpg 校验文件完整性不管通过哪个渠道下载拿到源码后第一件事不是解压而是校验文件完整性。很多人忽略这一步结果源码解压到一半报 CRC 错误或者编译时出现诡异的语法错误最后排查半天发现是压缩包下载损坏。最简单的校验方式是 sha256。从 kernel.org 下载页面可以看到每个 tarball 对应的 sha256 校验值。下载完成后执行sha256sum linux-6.6.tar.xz命令行会输出一串 64 位的十六进制字符串把它和官网展示的 sha256 值比对一致说明下载完整。如果不一致删除重新下载。如果想更严格一点可以验证 GPG 签名。内核仓库会对 tarball 生成.tar.sign签名文件验证过程是wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.sign xz -cd linux-6.6.tar.xz | gpg --verify linux-6.6.tar.sign -gpg 会提示未导入公钥你需要先导入内核发布者公钥。这个操作对普通阅读者来说不是必须的我只建议在下载敏感或关键版本时做。日常学习sha256 对比已经完全够用。3.2 磁盘空间规划别再把源码放 /tmp这块我吃过不少亏。以前图省事把内核源码解压到/tmp目录以为看完就删不占空间。结果编译到一半系统重启整个源码树没了之前的索引、配置全部作废一天白干。内核源码的体积很容易被低估压缩包150MB 左右解压后的源码目录1.3GB 到 2.5GB版本越新越大开启默认配置编译后中间文件加模块轻松超过 15GB如果使用了 debug 配置30GB 以上也常见所以动手前先看一下磁盘剩余空间df -h ~建议给内核工作目录预留至少 30GB。目录规划成这样~/kernel-src/ ├── linux-5.4.0-26-generic/ # apt source 解压的源码 ├── linux-6.6/ # kernel.org 下载解压的源码 └── linux-git/ # git 克隆的仓库源码一定要放在自家目录下的 ext4 分区不要放到 Windows 共享目录、FAT32 优盘或网络挂载目录。原因很简单内核源码树里有大量符号链接和权限位FAT32/NTFS 不支持这些属性解压时会直接报错或者静默丢失符号链接。3.3 解压后的属主与后续权限问题如果使用apt source源码目录的属主是你当前用户不需要额外处理。如果用 sudo 解压了 tarball记得把属主改回来sudo chown -R $USER:$USER ~/kernel-src/linux-6.6这一步很重要因为后续搭建 cscope 索引和阅读代码时普通用户需要能正常读写源码目录。用 root 操作很多工具会受影响而且万一改坏了源码文件排查起来更麻烦。4. 从顶层目录看懂源码骨架关键目录说明与分析素材4.1 源码树里到底装了什么不管你是从哪个渠道下载的源码解压之后顶层目录结构基本一致。很多新手打开这个目录就懵了几百个文件夹不知道该看哪里。我先把最核心的目录整理成一张表目录作用arch/各 CPU 体系结构相关代码x86、arm64、riscv 等底层逻辑都在这里block/块设备层IO 调度、请求队列管理crypto/内核加密 API 与算法实现drivers/设备驱动占整个内核代码量一半以上fs/文件系统ext4、btrfs、proc、sysfs 等include/内核公共头文件大量 API 定义init/内核启动初始化逻辑main.c 就在这里ipc/进程间通信信号量、消息队列、共享内存kernel/核心功能进程调度、时间管理、信号、模块加载lib/内核内部通用库函数mm/内存管理页分配、slab、vmanet/网络协议栈socket、TCP/IP 等scripts/内核配置和编译辅助脚本security/安全模块LSM、SELinuxsound/音频子系统tools/用户态辅助工具perf 等可以单独编译Documentation/内核文档一切学习的起点这个表不需要背但要在脑子里留个印象。以后遇到任何内核问题先判断属于哪个子系统再去对应目录里找代码比全局瞎搜高效得多。4.2 先看懂 Kconfig、Kbuild 和 .config阅读内核源码时会经常看到#ifdef CONFIG_XXX这样的条件编译语句。这些配置项来自 Kconfig 系统。每个子目录下都有一个Kconfig文件描述这个目录下有哪些可配置选项还有 Kbuild Makefile 负责描述如何编译这些代码。你可以通过make menuconfig查看图形化配置界面但对源码分析来说更常用的是直接查看当前系统内核的配置zcat /proc/config.gz | grep CONFIG_PREEMPT如果/proc/config.gz不存在可以看/boot/config-$(uname -r)grep CONFIG_PREEMPT /boot/config-$(uname -r)在学习内核源码时把当前配置导入你的源码树也是一个很好的起点cp /boot/config-$(uname -r) ~/kernel-src/linux-6.6/.config cd ~/kernel-src/linux-6.6 make olddefconfigmake olddefconfig会基于现有 .config 补齐所有新配置项的默认值。这样一来你在阅读代码时通过源码里的 Kconfig 也能反查对应配置项的含义。4.3 按子系统找材料的思路阅读内核源码最忌讳线性通读几十万行代码没人能从头读到尾。有效的做法是从一个具体入口出发顺着调用链扩散。比如想理解系统调用流程看arch/x86/entry/和kernel/sys.c想理解文件打开过程看fs/open.c里的do_sys_open想理解内存分配看mm/page_alloc.c想理解进程调度进kernel/sched/想理解网络收发路径进net/ipv4/和net/core/下载完源码后先用几分钟把顶层目录翻一遍再挑一个你最感兴趣的子系统深入这个由面到点的过程比任何教程都有效。5. 搭建顺手的内核源码分析环境从 grep 到 IDE5.1 命令行检索grep 永远是最可靠的兜底不管用什么高级工具grep 都是分析内核源码的第一道防线。它的优势是零依赖、几乎不会出 bug。常用组合我列一下# 在源码目录里递归搜索某个函数 grep -rn copy_from_user --include*.c --include*.h ~/kernel-src/linux-6.6/ # 只列出包含关键字的文件不打印具体匹配行 grep -rln SYSCALL_DEFINE3 ~/kernel-src/linux-6.6/fs/ # 带上下文打印适合看函数周围的逻辑 grep -rn -A 10 -B 10 do_sys_openat2 ~/kernel-src/linux-6.6/fs/open.c参数说明-r递归-n显示行号-l只列文件名--include限定文件后缀-A显示匹配行后面几行-B显示前面几行。grep 的局限是只能按字符串匹配没法智能区分函数调用和函数定义跨文件跳转也很笨拙。所以接下来要上索引工具。5.2 ctags cscope经典跳转组合依然能打在 Ubuntu 20.04 下安装两个工具sudo apt install universal-ctags cscope进入源码根目录生成索引cd ~/kernel-src/linux-6.6 ctags -R --fieldsl . cscope -Rqkb这里解释一下 cscope 参数-R递归生成索引-q生成反向索引文件加快查询-k让 cscope 不自动搜索内核 include 路径避免索引卡死-b只生成索引不进入交互界面。索引文件会生成在源码根目录下名字类似cscope.out、tags。之后用 vim 打开任意源码文件就能享受跳转 跳到光标所在符号的定义 Ctrl] 返回上一次位置 Ctrlt 在 vim 里调用 cscope 查找光标所在函数被谁调用 :cs find c 函数名cscope 支持的查询类型里最常用的是:cs find c查询调用该函数的代码:cs find g查询函数定义:cs find s查询符号引用:cs find t查询字符串整个内核生成索引大约需要几分钟属正常现象。索引完成后读代码的速度会有质的提升。5.3 VSCode Remote SSH 的现代阅读方案如果你还是更习惯图形界面VSCode 是一个不错的选择。直接用 VSCode 打开源码目录cd ~/kernel-src/linux-6.6 code .插件方面建议安装 C/C 插件ms-vscode.cpptools它会对整个目录建立 IntelliSense 索引。不过内核源码体量太大全量索引有时候会卡我建议配合一个技巧在 VSCode 的 settings.json 里把部分用不到的大目录排除掉比如Documentation、tools里的部分子目录这样能显著加快索引速度。还有一个更轻量的思路不依赖 VSCode 的 C/C 插件而是把 VSCode 当作带文件树的编辑器跳转依然用 ctags/cscope 在终端里完成。很多老内核开发者就是这么干的体验一点不比 IDE 差。5.4 不要迷信工具建立自己的工作流工具没有绝对好坏适合你阅读习惯的就是最好的。我的实际组合是终端里用 VSCode 打开源码目录文件切换靠项目内搜索函数跳转靠 ctags调用关系靠 cscope。这套组合在 Ubuntu 20.04 下零成本、无需编译开箱即用。如果你更喜欢 Windows 下的 Source InsightLinux 下没有官方版本可以试试 SlickEdit 或 KScope但说实话在内核这种量级的项目上cscope 的命令行方式比很多图形前端更可靠。6. 一次完整分析实践从 sys_call_table 追踪系统调用6.1 从系统调用表找到入口现在用一个具体例子把前面下载、建索引、跳转的流程串起来。假设你想知道在 Linux 中调用openat()时内核到底执行了哪些代码。第一步找到系统调用表。在 x86_64 架构下系统调用表位于arch/x86/entry/syscalls/syscall_64.tbl打开这个文件搜索openat会看到类似这样的一行257 common openat sys_openat说明openat的系统调用号是 257对应的内核入口函数是sys_openat。但这个符号你还不能直接 grep 到因为现代内核通过SYSCALL_DEFINE宏自动生成入口函数名。6.2 用 cscope 跳转到函数实现接下来用 cscope 或者 grep 定位真正的实现grep -rn __x64_sys_openat ~/kernel-src/linux-6.6/fs/open.c你会发现fs/open.c里有这样一段SYSCALL_DEFINE3(openat, int, dfd, const char __user *, filename, int, flags) { return do_sys_open(dfd, filename, flags); }这里的SYSCALL_DEFINE3表示一个带 3 个参数的系统调用的定义。宏会根据体系结构生成不同的入口符号比如 x86_64 下生成__x64_sys_openat在其他架构下生成对应前缀的符号。这就是为什么你在系统调用表里看到的是sys_openat但实际函数名前面多了一截。6.3 顺着调用链往外扩展现在的跳转目标就很清晰了。继续用 cscope 跟踪do_sys_open:cs find g do_sys_open它会跳转到同一个文件里的do_sys_open定义继续往下看long do_sys_open(int dfd, const char __user *filename, int flags) { return do_sys_openat2(dfd, filename, flags); }再往下是do_sys_openat2、do_filp_open、path_openat这一串函数。每一步都可以用Ctrl]跳转进更深层的实现用Ctrlt返回。这样你就从一行系统调用表记录逐步追踪到了 VFS 层、路径解析层最后进入具体文件系统的实现。这个过程就是分析内核源码的典型路径。不是从某一页文档开始读而是从一个用户态 API、一个系统调用、或者/proc下的某个输出入口顺着调用链一路追到底。源码里每一个宏、每一个函数定义都是可以点击跳转的节点。当你完成一次这样的追踪你对内核的理解就会比背十篇教程深刻得多。6.4 用 cscope 查调用关系建立函数地图有时候你更关心这个函数被谁调用比如想分析某个接口的影响范围。这时候用 cscope 最方便:cs find c do_filp_open这里补充一个我常用的查询技巧先用 grep 找出一个新函数在哪个文件里定义再用 cscope 查它的调用者然后挑一个最简短的调用者作为入口一层层往外扩展。整个过程就像画地图先是点再连线最后成网。7. 下载与分析过程中我踩过的几个坑7.1apt source报错没有 deb-src URIs错误提示大概是E: You must put some deb-src URIs in your sources.list我第一次看到这条报错时第一反应是去网上搜ubuntu 20.04 apt source 报错搜出来的答案七零八落。其实原因很简单Ubuntu 默认的软件源只启用了二进制包地址也就是deb开头的行没有deb-src开头的源码行。apt source找不到源码源自然就报这个错。解决办法就是前面章节里写的在/etc/apt/sources.list里把deb行复制成deb-src然后sudo apt update。如果你用的是 24.04 及以后版本源配置可能存在于/etc/apt/sources.list.d/ubuntu.sources这种 deb822 格式文件里那就把Types: deb改成Types: deb deb-src。20.04 默认没这个问题直接用旧格式改就行。7.2 下载中断wget 断点续传和国内镜像kernel.org 在国内直连速度不稳定尤其是带.tar.xz这种大文件下到一半断掉是常事。没有下载完的压缩包一旦拿去解压只会各种报错。两个解决办法。第一如果你已经用 wget 下到一半加-c参数续传wget -c https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz第二直接用国内镜像下载速度稳定得多wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v6.x/linux-6.6.tar.xz大型文件也可以考虑用aria2c多线程下载sudo apt install aria2 aria2c -x 16 -s 16 https://mirrors.tuna.tsinghua.edu.cn/kernel/v6.x/linux-6.6.tar.xz-x 16表示每个服务器最多开 16 个连接-s 16表示将文件分成 16 段并发下载。实测下来速度提升非常明显。7.3 别把源码解压到 Windows 共享目录或 FAT32 优盘我有一次图方便把源码放在 NTFS 格式的移动硬盘上看结果解压到一半报错强制跳过之后源码目录里出现了大量失效的符号链接。当时没在意直到编译模块的时候Makefile 找不到头文件排查了快一个小时才发现是挂载文件系统不支持符号链接导致的。内核源码树的符号链接是构建系统正常工作的基础。任何时候都要在 Linux 原生文件系统比如 ext4 或 btrfs 上解压和编译内核。放在/home下是最稳妥的选择。7.4 编译模块时找不到 /lib/modules/.../build这个坑看上去跟源码下载无关但实际非常常见。很多人下载了完整源码却忘了系统里还需要一个叫做linux-headers的包。外部模块编译时Kbuild 会读取/lib/modules/5.4.0-26-generic/build这个路径通常指向/usr/src/linux-headers-5.4.0-26-generic。只安装内核镜像是不够的还要安装对应版本的头文件包sudo apt install linux-headers-$(uname -r)安装完再确认一下软链接ls -l /lib/modules/$(uname -r)/build会看到它已经指向/usr/src/linux-headers-5.4.0-26-generic。这个目录里包含编译模块必需的 Makefile、Kconfig 和部分头文件但注意它不是完整源码树。如果要做源码级分析还是要回到~/kernel-src下的完整源码。7.5 磁盘空间被吃光的亲身经历最后说一下我经历过的惨痛教训。有一段时间我把源码放在/根目录下的/root里而根分区只有 10GB。解压源码没问题但一执行make -j8编译产生的.o文件和中间文件很快就把空间塞满了。然后系统开始报磁盘满各种服务异常最后只能删掉编译产物重新来。之后我养成了一个习惯在一个独立的大分区里建专用的 kernel workspace先看df -h确认空间再动手。空间规划建议至少留 30GB如果打算开 debug 配置最好留 50GB 以上。我在实际使用中还发现一个规律只要源码目录的剩余空间低于 10%不管是索引工具还是编译系统都会出现各种诡异问题。所以现在执行任何重量级操作前我都会先看一眼磁盘剩余空间十几秒的事能省下大量排查时间。内核源码下载这件事说白了并不难但里面的细节特别多。版本要对得上渠道要选得对下载完要校验解压要有空间分析要有工具。这些东西没人串起来讲一遍新手就只能靠一个个踩坑来积累。希望这篇文章能帮你把前面的路铺平让你把精力花在真正有价值的事情上——读代码、理解内核、写出自己的第一个内核模块。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Oracle数据库字符集选型指南:从乱码根因到AL32UTF8与GBK的迁移实践 2026/9/15 22:33:05

Oracle数据库字符集选型指南:从乱码根因到AL32UTF8与GBK的迁移实践

字符集这个东西,不碰上乱码事故的时候,没人把它当回事;一旦碰上,尤其是遇到那种"数据已经进去两三年、日志表几百G、全公司都在用"的系统时,你才会明白当初建库时随手选的那个字符集,到底有多要命…

阅读更多 →
Flowable 引擎 Docker 部署实战:REST 服务、HAProxy 负载均衡与镜像签名校验 2026/9/15 22:33:05

Flowable 引擎 Docker 部署实战:REST 服务、HAProxy 负载均衡与镜像签名校验

Flowable 引擎 Docker 部署实战:REST 服务、HAProxy 负载均衡与镜像签名校验 【免费下载链接】flowable-engine A compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users. 项…

阅读更多 →
Rocky Linux 9迁移实战:静态IP配置、SELinux与网络服务避坑指南 2026/9/15 22:33:05

Rocky Linux 9迁移实战:静态IP配置、SELinux与网络服务避坑指南

1. 为什么Rocky Linux成了CentOS用户真正的“接班人”,而不是另一个替代品我第一次在客户现场看到运维同事把CentOS 7服务器批量迁移到Rocky Linux时,他没说一句“平滑过渡”,而是直接打开终端敲了一行命令:dnf distro-sync --ref…

阅读更多 →
Docker国内镜像源9月实测:可用加速地址与配置避坑指南 2026/9/15 22:33:05

Docker国内镜像源9月实测:可用加速地址与配置避坑指南

用过 Docker 的朋友应该都有过这种经历:刚在 docker hub 上找到一个镜像,兴冲冲执行docker pull,然后就看到进度条纹丝不动,过一会儿直接给你报个net/http: TLS handshake timeout。这不是你网络的问题,也不是镜像本身…

阅读更多 →
2026最新男人女人晚上做那事网站零代码建站避坑指南 2026/9/15 22:33:05

2026最新男人女人晚上做那事网站零代码建站避坑指南

2026最新男人女人晚上做那事网站零代码建站避坑指南 手里有预算但不会写代码,想搞个类似“男人女人晚上做那事网站”这种私密性或情感类的落地页,却不知从何下手?别慌,这是2026年最典型的非技术型创业者痛点。在腾讯云开发者社区近半年的开发者调…

阅读更多 →
车载U盘怎么选?2026年选购指南与避坑全攻略 2026/9/15 22:30:04

车载U盘怎么选?2026年选购指南与避坑全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞