Archived
Public Access
Rewrite README around install script
This commit is contained in:
@@ -1,132 +1,178 @@
|
||||
# Actions BBRv3 Kernel
|
||||
# BBRv3 管理脚本
|
||||
|
||||
面向 Debian/Ubuntu VPS 的 BBRv3 内核自动构建与安装项目。
|
||||
一个用于 Debian/Ubuntu VPS 的 BBRv3 内核安装与网络加速管理脚本。
|
||||
|
||||
本项目的核心目标很明确:**BBRv3 补丁固定,内核自动跟随 kernel.org 最新 stable 版本更新**。构建流程每天检查最新 stable 内核,下载对应 Linux stable 分支源码,然后把仓库内固定的 BBRv3 patch 打到新内核上并生成 Debian 包。
|
||||
|
||||
## 当前策略
|
||||
|
||||
- 内核版本:自动读取 kernel.org 最新 stable 版本。
|
||||
- BBR 版本:固定使用仓库内的 BBRv3 port patch,不自动更新 BBR 实现。
|
||||
- 支持架构:`x86_64`、`arm64`。
|
||||
- 构建产物:`linux-image`、`linux-headers`、`linux-libc-dev` 等 `.deb` 包。
|
||||
- Debug 包:默认不编译、不上传、不发布 `linux-image-*-dbg`。
|
||||
- 发布方式:每个架构和内核版本生成独立 GitHub Release tag,例如 `x86_64-7.0.11`、`arm64-7.0.11`。
|
||||
|
||||
## 自动更新边界
|
||||
|
||||
同一个内核主线系列内的小版本更新会自动复用同一个 patch。
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
7.0.11 -> 7.0.12
|
||||
使用 patches/bbrv3-linux-7.0.patch
|
||||
```
|
||||
|
||||
如果 kernel.org 最新 stable 跳到新的主线系列,例如:
|
||||
|
||||
```text
|
||||
7.0.x -> 7.1.x
|
||||
```
|
||||
|
||||
构建脚本会寻找:
|
||||
|
||||
```text
|
||||
patches/bbrv3-linux-7.1.patch
|
||||
```
|
||||
|
||||
如果该 patch 不存在,构建会明确失败并停止。这是有意设计:跨主线系列时 TCP/BBR 相关代码可能变化,不能盲目把旧 patch 打上去。
|
||||
|
||||
## 安装
|
||||
|
||||
在 Debian/Ubuntu VPS 上执行:
|
||||
脚本入口:
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://raw.githubusercontent.com/byJoey/Actions-bbr-v3/main/install.sh)
|
||||
```
|
||||
|
||||
脚本会从当前 GitHub Releases 中选择适合本机架构的内核包,并提供安装、检查、切换队列算法和卸载入口。
|
||||
脚本会自动识别当前系统架构,从本仓库 GitHub Releases 下载匹配的 BBRv3 内核 `.deb` 包,并提供安装、指定版本安装、状态检查、加速模式切换和卸载功能。
|
||||
|
||||
## 支持环境
|
||||
|
||||
| 项目 | 要求 |
|
||||
| --- | --- |
|
||||
| 系统 | Debian / Ubuntu |
|
||||
| 包管理器 | `apt-get` |
|
||||
| 架构 | `x86_64` / `aarch64` |
|
||||
| 系统 | Debian 10+ / Ubuntu 18.04+ |
|
||||
| 引导 | GRUB |
|
||||
| 场景 | VPS / 云服务器 / 独立服务器 |
|
||||
| 引导方式 | 建议使用 GRUB |
|
||||
| 使用场景 | VPS / 云服务器 / 独立服务器 |
|
||||
|
||||
不建议在树莓派、NanoPi 等使用 U-Boot 或厂商定制内核链路的设备上使用。
|
||||
不建议在树莓派、NanoPi 等依赖 U-Boot 或厂商定制内核链路的设备上使用。此类设备的内核安装和启动流程通常与通用 Debian/Ubuntu VPS 不一致。
|
||||
|
||||
## GitHub Actions 构建流程
|
||||
## 菜单功能
|
||||
|
||||
构建流程在 `.github/workflows/build.yml` 中定义:
|
||||
|
||||
1. 读取 kernel.org 最新 stable 版本。
|
||||
2. 检查当前架构对应 release 是否已经存在,存在则跳过。
|
||||
3. 下载 `gregkh/linux` 的 `linux-X.Y.y` stable 分支。
|
||||
4. 使用 `scripts/apply-bbrv3-port.sh` 应用固定 BBRv3 patch。
|
||||
5. 套用对应架构 `.config` 并运行 `olddefconfig`。
|
||||
6. 强制关闭 debug info,避免生成 `-dbg` 包。
|
||||
7. 构建 Debian 包并发布到 GitHub Release。
|
||||
|
||||
手动触发:
|
||||
|
||||
```bash
|
||||
gh workflow run build.yml
|
||||
```
|
||||
|
||||
查看最近构建:
|
||||
|
||||
```bash
|
||||
gh run list --limit 5
|
||||
```
|
||||
|
||||
## BBRv3 Patch 管理
|
||||
|
||||
当前固定 patch:
|
||||
运行脚本后会进入交互菜单:
|
||||
|
||||
```text
|
||||
patches/bbrv3-linux-7.0.patch
|
||||
1. 安装或更新 BBR v3 最新版
|
||||
2. 指定版本安装
|
||||
3. 检查 BBR v3 状态
|
||||
4. 启用 BBR + FQ
|
||||
5. 启用 BBR + FQ_CODEL
|
||||
6. 启用 BBR + FQ_PIE
|
||||
7. 启用 BBR + CAKE
|
||||
8. 卸载 BBR 内核
|
||||
```
|
||||
|
||||
脚本会根据内核源码 `Makefile` 中的 `VERSION` 和 `PATCHLEVEL` 自动选择对应 patch:
|
||||
常用流程:
|
||||
|
||||
1. 选择 `1` 安装或更新 BBRv3 内核。
|
||||
2. 按提示重启系统。
|
||||
3. 重新运行脚本,选择 `3` 检查 BBRv3 状态。
|
||||
4. 按需选择 `4` 到 `7` 设置队列算法。
|
||||
|
||||
## 内核与 BBR 策略
|
||||
|
||||
本项目的构建目标是:
|
||||
|
||||
```text
|
||||
BBRv3 补丁固定,内核自动跟随 kernel.org 最新 stable 更新。
|
||||
```
|
||||
|
||||
也就是说,BBR 实现不会在自动构建时偷偷更新;自动更新的是 Linux stable 内核版本。构建流程会把仓库内固定的 BBRv3 patch 应用到最新 stable 内核上。
|
||||
|
||||
当前 patch 选择规则:
|
||||
|
||||
```text
|
||||
linux-7.0.y -> patches/bbrv3-linux-7.0.patch
|
||||
linux-7.1.y -> patches/bbrv3-linux-7.1.patch
|
||||
```
|
||||
|
||||
这保证了两点:
|
||||
同一个主线系列内的小版本更新会自动复用同一个 patch,例如 `7.0.11 -> 7.0.12`。如果内核跳到新的主线系列但仓库内还没有对应 patch,构建会直接失败,避免产出不可验证的内核包。
|
||||
|
||||
- 小版本自动更新时不需要改 BBR。
|
||||
- 新主线系列不兼容时会明确失败,避免产出不可验证的内核。
|
||||
## 安装最新版
|
||||
|
||||
## 安全与配置
|
||||
```bash
|
||||
bash <(curl -fsSL https://raw.githubusercontent.com/byJoey/Actions-bbr-v3/main/install.sh)
|
||||
```
|
||||
|
||||
构建流程会在 `.config` 中强制关闭以下风险面:
|
||||
选择:
|
||||
|
||||
- `CONFIG_AFS_FS`
|
||||
- `CONFIG_AF_RXRPC`
|
||||
- `CONFIG_RXKAD`
|
||||
- `CONFIG_XFRM_ESP`
|
||||
- `CONFIG_INET_ESP`
|
||||
- `CONFIG_INET6_ESP`
|
||||
- `CONFIG_SYSTEM_TRUSTED_KEYS`
|
||||
- `CONFIG_SYSTEM_REVOCATION_KEYS`
|
||||
```text
|
||||
1. 安装或更新 BBR v3 最新版
|
||||
```
|
||||
|
||||
同时关闭 debug info:
|
||||
脚本会:
|
||||
|
||||
- `CONFIG_DEBUG_INFO`
|
||||
- `CONFIG_DEBUG_INFO_BTF`
|
||||
- `CONFIG_DEBUG_INFO_BTF_MODULES`
|
||||
- 检查系统是否为 Debian/Ubuntu。
|
||||
- 检查架构是否为 `x86_64` 或 `aarch64`。
|
||||
- 从 GitHub Releases 获取当前架构最新版本。
|
||||
- 下载非 debug 的内核 `.deb` 包。
|
||||
- 安装新内核并更新引导配置。
|
||||
- 提示是否重启。
|
||||
|
||||
构建结束后会检查是否生成 `*-dbg*.deb`。如果出现 debug deb,workflow 会直接失败。
|
||||
如果遇到 GitHub API rate limit,可先设置 token:
|
||||
|
||||
## 检测脚本
|
||||
```bash
|
||||
export GITHUB_TOKEN=你的 GitHub Token
|
||||
bash <(curl -fsSL https://raw.githubusercontent.com/byJoey/Actions-bbr-v3/main/install.sh)
|
||||
```
|
||||
|
||||
仓库提供 CVE-2026-31431 风险面检测脚本:
|
||||
## 指定版本安装
|
||||
|
||||
运行脚本后选择:
|
||||
|
||||
```text
|
||||
2. 指定版本安装
|
||||
```
|
||||
|
||||
脚本会列出当前架构可用的 release tag,并按编号安装指定版本。
|
||||
|
||||
release tag 格式:
|
||||
|
||||
```text
|
||||
x86_64-7.0.11
|
||||
arm64-7.0.11
|
||||
```
|
||||
|
||||
## 检查 BBRv3 状态
|
||||
|
||||
运行脚本后选择:
|
||||
|
||||
```text
|
||||
3. 检查 BBR v3 状态
|
||||
```
|
||||
|
||||
脚本会检查:
|
||||
|
||||
- `tcp_bbr` 模块版本是否为 `3`。
|
||||
- 当前 TCP 拥塞控制算法是否为 `bbr`。
|
||||
- CVE-2026-31431 缓解是否写入。
|
||||
- Dirty Frag 相关模块黑名单是否写入。
|
||||
|
||||
也可以手动检查:
|
||||
|
||||
```bash
|
||||
uname -r
|
||||
sysctl net.ipv4.tcp_congestion_control
|
||||
sysctl net.core.default_qdisc
|
||||
modinfo tcp_bbr 2>/dev/null | grep '^version:'
|
||||
```
|
||||
|
||||
## 加速模式
|
||||
|
||||
脚本支持以下组合:
|
||||
|
||||
| 菜单 | 拥塞控制 | 队列算法 |
|
||||
| --- | --- | --- |
|
||||
| 4 | `bbr` | `fq` |
|
||||
| 5 | `bbr` | `fq_codel` |
|
||||
| 6 | `bbr` | `fq_pie` |
|
||||
| 7 | `bbr` | `cake` |
|
||||
|
||||
选择后脚本会立即尝试应用配置,并询问是否永久写入:
|
||||
|
||||
```text
|
||||
/etc/sysctl.d/99-joeyblog.conf
|
||||
```
|
||||
|
||||
对于需要模块加载的队列算法,脚本会尝试加载对应 `sch_*` 模块,并在需要时写入:
|
||||
|
||||
```text
|
||||
/etc/modules-load.d/joeyblog-qdisc.conf
|
||||
```
|
||||
|
||||
## 安全缓解
|
||||
|
||||
脚本启动时会写入安全缓解规则:
|
||||
|
||||
```text
|
||||
/etc/modprobe.d/99-joeyblog-security.conf
|
||||
```
|
||||
|
||||
包含:
|
||||
|
||||
- `algif_aead` 黑名单,用于收敛 CVE-2026-31431 风险面。
|
||||
- `esp4` / `esp6` / `rxrpc` 黑名单,用于收敛 Dirty Frag 相关风险面。
|
||||
|
||||
如果模块当前已加载,脚本会尝试卸载;如果模块被占用,则黑名单会在重启后生效。
|
||||
|
||||
## CVE-2026-31431 检测
|
||||
|
||||
仅检测,不利用:
|
||||
|
||||
```bash
|
||||
command -v python3 >/dev/null 2>&1 || (sudo apt update && sudo apt install -y python3)
|
||||
@@ -135,35 +181,51 @@ chmod +x cve_2026_31431_detector.py
|
||||
sudo python3 cve_2026_31431_detector.py
|
||||
```
|
||||
|
||||
检测脚本只做本机风险面检查,不执行漏洞利用。
|
||||
## 内核包来源
|
||||
|
||||
## 常用命令
|
||||
`.deb` 内核包由 GitHub Actions 构建并发布到本仓库 Releases。
|
||||
|
||||
检查当前 TCP 拥塞算法:
|
||||
构建流程会:
|
||||
|
||||
```bash
|
||||
sysctl net.ipv4.tcp_congestion_control
|
||||
- 读取 kernel.org 最新 stable 版本。
|
||||
- 下载 `gregkh/linux` 对应 stable 分支。
|
||||
- 应用仓库内固定 BBRv3 patch。
|
||||
- 强制默认启用 BBR。
|
||||
- 关闭 debug info。
|
||||
- 拒绝发布 `*-dbg*.deb`。
|
||||
|
||||
构建不会自动更新 BBR patch 本身。
|
||||
|
||||
## 卸载
|
||||
|
||||
运行脚本后选择:
|
||||
|
||||
```text
|
||||
8. 卸载 BBR 内核
|
||||
```
|
||||
|
||||
检查当前默认队列算法:
|
||||
脚本会卸载由本项目安装的 `joeyblog` 内核包,并更新引导配置。卸载后建议重启。
|
||||
|
||||
```bash
|
||||
sysctl net.core.default_qdisc
|
||||
```
|
||||
## 反馈
|
||||
|
||||
启用常见组合:
|
||||
博客:
|
||||
|
||||
```bash
|
||||
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
|
||||
sudo sysctl -w net.core.default_qdisc=fq
|
||||
```
|
||||
[JoeyBlog](https://joeyblog.net)
|
||||
|
||||
确认当前内核版本:
|
||||
反馈群组:
|
||||
|
||||
```bash
|
||||
uname -r
|
||||
```
|
||||
[Telegram Feedback Group](https://t.me/+ft-zI76oovgwNmRh)
|
||||
|
||||
## 免责声明
|
||||
|
||||
内核升级有风险。安装前建议保留可启动的旧内核,并确认 VPS 控制台或救援模式可用。使用本项目构建或安装的内核造成的系统启动失败、网络异常或数据损失,由使用者自行承担。
|
||||
内核升级有风险。安装前建议确认 VPS 控制台、救援模式或旧内核启动项可用。使用本项目构建或安装的内核造成的系统启动失败、网络异常或数据损失,由使用者自行承担。
|
||||
|
||||
## Star History
|
||||
|
||||
<a href="https://star-history.com/#byJoey/Actions-bbr-v3&Timeline">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=byJoey/Actions-bbr-v3&type=Timeline&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=byJoey/Actions-bbr-v3&type=Timeline" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=byJoey/Actions-bbr-v3&type=Timeline" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
Reference in New Issue
Block a user