Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

daednext-git — AUR 打包(DaedNext)

本目录为 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-gitprovides=('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-geoipv2ray-domain-list-community
  • 与 AUR 中 daeuniverse 的 daed 系列包冲突:它们同样提供 /usr/bin/daeddaed.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<短哈希>

eBPF 工具链:固定 nightly 与 bpf-linker 的 LLVM 必须配对

守护进程默认特性 native-ebpf 会编译 bpfel-unknown-none 目标文件,上游 dae-build-supportrustup 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。

构建流程

  1. prepare():安装 rustup stable 与固定日期的 nightly-2026-09-01(含 rust-src), chmod +x 解压出的 bpf-linkerpnpm install --frozen-lockfilecargo fetch --locked(把联网动作集中在 prepare)。
  2. 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)。
  3. check():运行 ./daed --version 并断言输出包含 bpf-btf,确认原生 eBPF 物体已内嵌。
  4. package():安装二进制、前端、systemd 单元、desktop、图标、geodata 软链接与 license。

本地构建

cd daednext
makepkg -si          # 或 makepkg -f 只构建
makepkg --printsrcinfo > .SRCINFO   # 修改 PKGBUILD 后更新元数据

makedepends:clang cmake git libelf llvm perl pkgconf pnpm rustupbpf-linker 由 PKGBUILD 自己下载固定的 aya-rs 预编译版本,见上文)。

安装后:

systemctl enable --now daed.service
# 浏览器打开 http://127.0.0.1:2023 完成初始化

构建测试记录

docs/build-test.md(本次在本机 Arch Linux 上无 root 环境下的完整 cold build 过程与结果)。

特别感谢

About

daednext 的 PKGBUILD,测试用意

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages