本目录为 ksong008/DaedNext 的 AUR -git 包打包文件。
DaedNext 是 dae 的「产品外壳」:Web 仪表盘 + 与 Rust 原生 daed 守护进程的整合与打包脚本;
守护进程本身来自配套的 Rust 工作区 ksong008/DaeNext。
项目文件均由 DeepSeek V4.1 生成,在人工审核完成之前仅供测试。
| 文件 | 说明 |
|---|---|
PKGBUILD |
包定义(pkgname=daednext-git) |
daednext-git.install |
pacman 安装脚本(daemon-reload、升级后重启服务、卸载时停用服务) |
.SRCINFO |
AUR 使用的元数据(makepkg --printsrcinfo 生成) |
README.md |
本文件 |
docs/build-test.md |
两次 cold build 的完整记录(含 2026-09-18 paru 构建失败的定位与修复) |
- 包名:
daednext-git,provides=('daednext') - 安装内容:
/usr/bin/daed/usr/share/daed/web/(前端产物)/usr/lib/systemd/system/daed.service/usr/share/applications/daed.desktop、/usr/share/icons/hicolor/*/apps/daed.png/usr/share/daed/geoip.dat、/usr/share/daed/geosite.dat(软链接到v2ray-geoip/v2ray-domain-list-community,运行时会在/etc/daed、/usr/local/share/daed、/usr/share/daed中查找 geodata)/etc/daed/(配置与状态目录)
- 运行时依赖:
ca-certificates(订阅/geodata 的 TLS 信任库)、hicolor-icon-theme(图标主题 层级)、iproute2(守护进程会调用ip(8)处理网卡)、v2ray-geoip、v2ray-domain-list-community - 与 AUR 中 daeuniverse 的
daed系列包冲突:它们同样提供/usr/bin/daed、daed.service与/usr/share/daed,因此conflicts=('daed' 'daed-git' 'daed-edge-git' 'daed-avx2-bin')
source 使用两个 git 源,均固定在 work/boringssl 分支(该分支即两个仓库当前的默认分支,
也是 DaedNext/.github/daenext-core-ref 里为 UI 指定的匹配核心版本):
DaedNext::git+https://github.com/ksong008/DaedNext.git#branch=work/boringssl
DaeNext::git+https://github.com/ksong008/DaeNext.git#branch=work/boringssl
第三个源是 bpf-linker 预编译包(见下文「eBPF 工具链」),URL 里的 ${CARCH}
由 makepkg 按架构展开,校验和通过 sha256sums_x86_64 / sha256sums_aarch64
分别给出。
pkgver() 优先使用 git describe --tags --long(输出形如 3.1.0rc2.r77.gb084f2f);
若该分支上没有可达的 release tag,则退化为 apps/web/package.json 的版本号 +
r<提交数>.g<短哈希>。
守护进程默认特性 native-ebpf 会编译 bpfel-unknown-none 目标文件,上游
dae-build-support 用 rustup run <toolchain> cargo -Z build-std=core 完成这一步,
再由 bpf-linker 链接。两个关键点:
1)为什么需要 nightly。 bpfel-unknown-none 是 tier-3 的 no_std 目标,rustup
不为它提供预编译的 core,所以必须从源码编译 core,也就是 cargo -Z build-std=core;
而 -Z 是 cargo 的不稳定开关,stable cargo 会直接拒绝:
error: the `-Z` flag is only accepted on the nightly channel of Cargo, but this is the `stable` channel
(也试过用 RUSTC_BOOTSTRAP=1 在 stable 上放行 -Z,能编过,但那是未支持的旁路,
且会作用于整个构建,所以最终仍选择跟随上游用 nightly。见 docs/build-test.md 附录。)
2)bpf-linker 的 LLVM 不能比 rustc 旧。 bpf-linker 用自带的 LLVM 读 rustc 产出的 bitcode,旧 LLVM 读不了新 LLVM 的 bitcode:
| 工具链 | bpf-linker | 结果 |
|---|---|---|
| nightly(LLVM 23) | extra/bpf-linker 0.11.0(libLLVM.so.22) |
✗ ERROR llvm: Invalid record |
| nightly-2026-08-01(LLVM 22.1.8) | extra/bpf-linker 0.11.0(libLLVM.so.22) |
✗ A call to built-in function 'memset' is not supported |
| nightly-2026-09-01(LLVM 23.1.0) | aya-rs 预编译 0.11.0(静态链接 LLVM 23.1.0) | ✓ |
即:仓库里的 bpf-linker 对这段代码根本不可用(与用不用 nightly 无关),必须用
_bpf_linker_ver='0.11.0' 的 aya-rs 预编译版本,通过
CARGO_TARGET_BPFEL_UNKNOWN_NONE_LINKER="$srcdir/bpf-linker" 指定。
因此 PKGBUILD 里:
_nightly='nightly-2026-09-01':prepare()安装该日期的 nightly(含rust-src), 并通过DAE_RUST_NATIVE_BPF_TOOLCHAIN让上游构建脚本使用它(而不是浮动的nightly);_bpf_linker_ver='0.11.0':从 aya-rs 官方 release 下载静态链接的bpf-linker。
升级方式:_nightly 与 _bpf_linker_ver 必须同时保证「linker 内嵌 LLVM ≥ 工具链 LLVM」;
若 Arch 的 llvm 升到 23、仓库 bpf-linker 重建且能通过 memset 那一步,可以改回
makedepends=('bpf-linker') 并删掉预编译源。改动后务必重跑一次 cold build。
prepare():安装 rustupstable与固定日期的nightly-2026-09-01(含rust-src),chmod +x解压出的bpf-linker,pnpm install --frozen-lockfile,cargo fetch --locked(把联网动作集中在 prepare)。build():pnpm build --filter daed(turbo 构建apps/web及其依赖包), 然后调用上游 Makefile:make DAED_SKIP_WEB_BUILD=1 RUST_WORKSPACE=<core> APPNAME=daed VERSION=v<pkgver> daed-rust-native。 该目标执行cargo build --locked -p dae-daemon --bin daed --release,默认特性native-ebpf,构建脚本用rustup run nightly-2026-09-01 cargo -Z build-std=core编译bpfel-unknown-none的 eBPF 目标文件(链接器为固定的bpf-linker)。check():运行./daed --version并断言输出包含bpf-btf,确认原生 eBPF 物体已内嵌。package():安装二进制、前端、systemd 单元、desktop、图标、geodata 软链接与 license。
cd daednext
makepkg -si # 或 makepkg -f 只构建
makepkg --printsrcinfo > .SRCINFO # 修改 PKGBUILD 后更新元数据makedepends:clang cmake git libelf llvm perl pkgconf pnpm rustup
(bpf-linker 由 PKGBUILD 自己下载固定的 aya-rs 预编译版本,见上文)。
安装后:
systemctl enable --now daed.service
# 浏览器打开 http://127.0.0.1:2023 完成初始化见 docs/build-test.md(本次在本机 Arch Linux 上无 root 环境下的完整 cold build 过程与结果)。