RiverOnVenus 息土 正在加载今日诗词....

非官方内核下启动cgproxy出错

» linux, tool

前言

前段时间我一直在尝试不同的内核,想以此来提高电脑的性能。官方支持的内核中我使用过linux-zen, 非官方支持的内核中我使用过linux-ck, linux-lqx, linux-xanmod, linux-xanmod-cacule, linux-cacule。其中,使用linux-zen, linux-ck时cgproxy正常,而使用其它几个内核时启动却出错,导致无法使用。

出错

在Arch Linux下我一直使用qv2ray + cgproxy来使用代理,非常好用,在这里我不一一赘述了。查看出错时的服务状态systemctl status cgproxy.service:

● cgproxy.service - cgproxy service
     Loaded: loaded (/usr/lib/systemd/system/cgproxy.service; enabled; vendor preset: disabled)
     Active: active (running)
   Main PID: 472 (cgproxy)
      Tasks: 2 (limit: 9255)
     Memory: 5.4M
        CPU: 115ms
     CGroup: /system.slice/cgproxy.service
             └─472 /usr/bin/cgproxy --daemon --execsnoop

cgproxyd[472]: info: socketserver thread started
cgproxyd[472]: info: loading /usr/lib/cgproxy/libexecsnoop.so
cgproxyd[472]: info: dlsym startThread func success
cgproxyd[472]: libbpf: elf: skipping unrecognized data section(10) .eh_frame
cgproxyd[472]: libbpf: elf: skipping relo section(11) .rel.eh_frame for section(10) .eh_frame
cgproxyd[472]: libbpf: failed to determine tracepoint 'syscalls/sys_enter_execve' perf event ID: No such file or directory
cgproxyd[472]: libbpf: prog 'syscall_enter_execve': failed to create tracepoint 'syscalls/sys_enter_execve' perf event: No such file or directory
cgproxyd[472]: failed to attach BPF programs
cgproxyd[472]: error: execsnoop thread timeout, maybe failed

经过分析已有信息和对比各个内核的config以及最后测试,确定了是这些内核直接或间接禁用了CONFIG_FTRACE_SYSCALLS造成的。

解决

(最后更新时间 2021-08-20,由于内核更新较快,且PKGBUILD和config也会有所改变,所以以下方法可能过时,仅供参考)

编译内核时在config中启用CONFIG_FTRACE_SYSCALLSCONFIG_FTRACE即可解决。

  • 对于linux-cacule系列的内核,将其PKGBUILD中禁用CONFIG_FTRACE的语句scripts/config --disable CONFIG_FTRACE注释掉或删掉以启用CONFIG_FTRACE_SYSCALLS
  • (2021-08-20更新) 对于linux-cacule系列内核,在其PKGBUILD中加入两条语句scripts/config --enable CONFIG_FTRACEscripts/config --enable CONFIG_FTRACE_SYSCALLS以启用CONFIG_FTRACE_SYSCALLS
  • 对于linux-lqx, 在其PKGBUILD中加入语句scripts/config --enable CONFIG_FTRACE_SYSCALLS以启用CONFIG_FTRACE_SYSCALLS
  • 对于linux-xanmod系列内核,在其PKGBUILD中加入两条语句scripts/config --enable CONFIG_FTRACEscripts/config --enable CONFIG_FTRACE_SYSCALLS以启用CONFIG_FTRACE_SYSCALLS

最后

经过几个月的使用和不太专业的测试,相对于默认内核,使用这些内核在系统响应能力上有一些提升。

TOP