fscarmen / warp-sh

WARP script is move to: https://gitlab.com/fscarmen/warp
947 stars 204 forks source link

切换内核的bug #35

Closed 5t-RawBeRry closed 8 months ago

5t-RawBeRry commented 8 months ago

第一次选内核选的是 wireguard-go with reserved 之前不太清楚可以通过 warp k 来切换 wireguard-go with reserved 或者wireguard kernel ,所以直接使用 warp u 卸载之后重装。 但是在安装过程中发现无法选择内核 提示 只能使用 wireguard-go with reserved 运行。 只用warp k 切换 也是 提示 只能使用 wireguard-go with reserved 运行。

有两台机器不太方便重装,请问有什么解决方案 (如果是一开始使用 warp k 切换内核之后再卸载则不会出现这种情况)

fscarmen commented 8 months ago

你查下你的系统如何检测和打开wireguard内核

5t-RawBeRry commented 8 months ago

你查下你的系统如何检测和打开wireguard内核

这个如何查

fscarmen commented 8 months ago

谷歌,chatGPT,gemini 比如debian 12如何检测是否有wireguard内核,根据反馈再继续问如何打开

5t-RawBeRry commented 8 months ago

谷歌,chatGPT,gemini 比如debian 12如何检测是否有wireguard内核,根据反馈再继续问如何打开

我一直有在使用过wireguard组网的,内核也是自己编译的,确实勾选了wireguard debian12 默认的内核已经是6.1.0了,wireguard 是从5.6就被合进内核了 我的虚拟化是kvm 也并不是lxc或者ovz 这类容器

刚刚试着用 lsmod 发现wireguard 没有在其中,但是其他机器使用了相同的内核,并没有执行我上述内容,lsmod是存在wireguard的。

解决问题方案就是…… sudo modprobe wireguard 即可

我以为是您的脚本有啥特殊设置什么的……

fscarmen commented 8 months ago

判断那个是这样逻辑的,你逐步排查一下看看。

 # 判断是否有加载 wireguard 内核,如没有先尝试是否可以加载,再重新判断一次
  if [ ! -e /sys/module/wireguard ]; then
    [ -s /lib/modules/$(uname -r)/kernel/drivers/net/wireguard/wireguard.ko ] && [ $(type -p lsmod) ] && ! lsmod | grep -q wireguard && [ $(type -p modprobe) ] && modprobe wireguard
    [ -e /sys/module/wireguard ] && KERNEL_ENABLE=1 || KERNEL_ENABLE=0
  else
    KERNEL_ENABLE=1
  fi
5t-RawBeRry commented 8 months ago

问题似乎存在这里 [ -s /lib/modules/$(uname -r)/kernel/drivers/net/wireguard/wireguard.ko ] 改为 [ -s /lib/modules/$(uname -r)/kernel/drivers/net/wireguard/wireguard.ko* ] 问题解决 因为我的WireGuard内核模块文件叫这个 wireguard.ko.xz

user@host:~$ ls /lib/modules/$(uname -r)/kernel/drivers/net/wireguard/
wireguard.ko.xz
user@host:~$ rmmod wireguard
user@host:~$ bash test.sh 
KERNEL_ENABLE=1
user@host:~$ cat test.sh
 # 判断是否有加载 wireguard 内核,如没有先尝试是否可以加载,再重新判断一次
  if [ ! -e /sys/module/wireguard ]; then
    [ -s /lib/modules/$(uname -r)/kernel/drivers/net/wireguard/wireguard.ko* ] && [ $(type -p lsmod) ] && ! lsmod | grep -q wireguard && [ $(type -p modprobe) ] && modprobe wireguard
    [ -e /sys/module/wireguard ] && KERNEL_ENABLE=1 || KERNEL_ENABLE=0
  else
    KERNEL_ENABLE=1
  fi

echo KERNEL_ENABLE=$KERNEL_ENABLE
fscarmen commented 8 months ago

厉害!!