找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 916|回复: 4

OpenWrt折腾记-OpenWrt的各种报错及解决办法

[复制链接]
折腾背景

因为我对听歌的音质要求高,所以我自己折腾了个可以通过 AirPlay 播放音乐的 openwrt 路由器。在路由器上插入 usb 声卡,然后接到音响上面;同时在路由器上安装了shairport-sync 插件来模拟 AirPlay 服务;这样手机就可以随时把高品质音乐通过 AirPlay 服务投流到路由器里面、然后通过音响播放出来,看起来就像是直接把歌曲投到了音响里面播放,使用起来很方便,而且音质比蓝牙高多了。

但是这样就有一个要求:路由器必须摆放在音响旁边,因为它俩是要用音频线连接到一起的。

最近我搬了新家,这个问题就暴露出来了,新家的网线位置、书桌位置在两个地方,导致路由器和音响必须摆在两个位置,如果还要继续使用我上面这套方案,就要在路由器和音响之间走一个长长的音频线,这非常的不优雅。

于是,我想到了一个新方案:放弃网络接入,改为通过4G 上网卡来接入网络,这样路由器随便摆放在哪都能上网,然后再放到音响旁边,就可以不用走线了。而且4G 上网也便宜,才几十块钱一个月,网速大概是2-6M/s,也足够用了。

这个方案需要给 openwrt 添加对4G 上网卡的支持,网上看了下教程,挺复杂的。加上我现在 openwrt的版本有些低了,干脆一不做二不休,顺便全新升级个新版本的 openwrt 吧。

于是噩梦就开始了,这个 openwrt 是真的难搞啊,一路上各种踩坑,动不动就死机、然后无限重启,真是心力憔悴,最后依靠着自己薄弱的 Linux 和网络基础,加上 ChatGPT 等工具,历时将近2周,才算是把这个方案以大概95%的完美度给完成了。

还有些小瑕疵,但是忍忍也能接受,不折腾了。

此篇文章记录下折腾 openwrt 路由器过程中踩的各种坑,算是这次折腾的告一段落的见证。

遇到的问题大全kmod相关核心插件更新出错、死机

这个是我遇到的最恶心的问题。每次遇到后就只能重刷系统,而且万一之前中途没有备份,就直接前功尽弃、从头再来。

这个问题的原因和解决方案有下面几个:

  • 安装内核相关组件(组件名称以kmod打头)时出错

    一般报错内容如下

    Collected errors: pkghashcheck_unresolved: cannot find dependency kernel (= 5.15.104-1-e469f5589b4c7b368924a6e4f8f7407f) for kmod-tun

    原因:这是因为使用的是开发版固件,也就是snapshots版。论坛有很多大神发布了集成各种常用插件的 openwrt 固件,开机就是全功能,用起来很方便,但他们的固件很多都是基于开发版打包的,内核的有效期只有3个月,时间一过,kmod 相关组件就无法更新了,就会报如上错误

    解决办法:换稳定版固件,推荐在这个网站 www.openwrt.ai 自己构建固件。使用方法也很简单,选择自己的路由器型号,然后点开自定义构建固件,勾选想添加的组件,最后点击最下面的构建即可。然后把构建好的固件刷到路由器里面,开箱即用,而且是稳定版,不用担心内核过期的问题。无需再去下载论坛那些大神自己打包的固件了。

    但是其实这个方法也有问题,我使用这种固件时候就遇到了下面第二个问题。

  • 安装内核相关组件时有一定几率死机

    常见情况是更新相关内核插件的时候,路由器直接死机、反复重启,只能重刷固件来解决。

    原因:我也不知道什么原因,猜测是第三方固件的问题,如在上面网站 www.openwrt.ai 生成的固件。

    解决办法:使用openwrt 官方的固件定制服务。官方固件定制网址:OpenWrt Firmware Selector,进去页面后右上角可选中文,接着输入自己的设备型号,就可以自己定制固件了。不过这里定制固件稍微麻烦一点,需要自己手动输入插件名称。但是胜在这里的固件是最稳定,我用这里的固件从来没有遇到过死机问题。如果你是个折腾党,强烈建议你从这里定制固件,后续折腾过程可以少踩很多坑。


opkg 无法更新,下载失败

这个问题只会在官方固件出现,问题也非常简单,因为使用的是 openwrt 官方源,而官方源的服务器在国外,所以网络不稳定,有非常大的几率导致失败,建议可以更换为国内的镜像源,如清华大学镜像源,更换方法可以参考这里:openwrt | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

aria2无法开启,显示aria2服务未运行

这个问题也很常见,主要问题是2个

  • 下载位置不可访问

    aria2默认下载位置是/mnt/sda1/aria2,必须确认这个位置是可访问的,才能让 aria2正确启动。 可以在 ssh 登录后,这样排查:

    • 确认硬盘驱动已经安装并挂载:先安装这几个插件: usbutils kmod-usb-storage-extras kmod-fs-exfat kmod-fs-ext4 kmod-fs-ntfs3 block-mount,这几个插件分别是 usb 相关工具、usb 存储相关驱动、exfat 文件格式支持、ext4文件格式支持、ntfs文件格式支持、硬件自动挂载。其中文件格式的几个插件根据你自己硬盘是什么格式的,按需安装即可。
    • 安装完后执行命令 ls /mnt,如果能看到如 sda1、sdb1相关的设置,就说明硬盘加载没有问题了。然后执行命令 mkdir /mnt/sda1/aria2建立aria2默认的下载文件夹,之后你再重新启动 aria2,一般就没问题了。 然后 aria2就默认以 aria2权限运行即可,不需要以 root 权限运行。从安全角度看,给 root 权限风险太高, 而且也不是解决问题的办法。
  • 使用第三方源下载安装的 aria2插件

    我在使用第三方固件的时候就遇到过 aria2固件无法启动的问题,且排除了各种问题都是无法启动,最终确认是第三方固件的自定义源有问题。之后我修改为了官方的镜像源,重新安装 aria2后,直接一键开启,啥问题都没有。所以还是非常建议你使用官方固件和官方镜像源。


samba4局域网共享出错

这个是我自己遇到的几个小问题,不一定很常见,但是我当时解决不了的时候也很头疼,所以也记录下。

  • 可以看到共享设备、也可以登录进去,但是无法访问里面的文件夹 原因:设置共享目录的时候,在路径里面我填写成了 /mnt/sda1,而实际正确的写法应该是 /mnt/sda1/,看出什么区别了吗?就是少了最后面一个斜杠 /。就是这个破问题,我在网上找了一堆的解决方案,什么文件权限问题、格式问题,把我折腾够呛,最后还是我自己多看了一眼,才发现这个问题。 /mnt/sda1这种写法实际上是共享 mnt 文件夹下面的 名为sda1文件,所以访问出错,加上斜杠后,才是共享 sda1文件夹。
  • mac电脑 访问openwrt 的局域网共享时反复出错、无法登录 这个问题,建议先重启 mac,因为 mac 有兼容性问题,重启就能解决。这个也是个非常傻的问题,害我浪费了很多的时间,最后竟然是 mac 的问题,哎。
frpc 安装问题

这个其实不是个问题,是我自己傻了。

我是按照 frp 官网的教程,自己一步步把 frp 安装到 openwrt 中的,而且自己手写配置文件、手写启动项,用了挺长时间才折腾好,却发现原来 openwrt 的官方源里面有现成的frp 网页配置插件可以用,就是 luci-i18n-frpc-zh-cn,我真是白白浪费很长时间。

Shairport-sync 无法使用

这个插件就是用来启动 AirPlay 服务的,但也是安装过程中出现问题最多的。且在解决问题的过程中,解决1个又冒出一个,非常难搞,我一度想放弃,当然最终还是都搞定了,整个过程容我细细说来。

  • 先安装好 shairport

    安装 shairport-sync 插件就很麻烦,因为需要安装 usb、usb 声卡、音频解码一堆基础插件,而且是涉及到 kmod 核心插件,如前面提到的问题,弄不好就死机了。所以建议你使用官方固件后再来安装这个插件。安装的命令为 opkg install kmod-sound-core kmod-usb-audio alsa-utils kmod-usb2 shairport-sync-openssl,这几个插件分别是声音处理驱动、 usb 声卡驱动、音频解码驱动、usb 驱动、shairport 的 AirPlay 服务

  • shairport无法,系统始终无进程

    安装完成后,系统会自动创建启动项并启动 shairport。但是在 mac 和 iphone 上却并搜索不到 AirPlay 服务,在openwrt 的网络管理界面中,同时查看进程发现根本没有 shairport 的进程,在启动项中反复启动也无用。

  • 排查后发现是5000端口占用,导致 shairport 无法启动

    在 ssh 登录路由器后,手动通过命令 /etc/init.d/shairport-sync start来启动 shairport,发现报错为 >fatal error: could not establish a service on port 5000 -- program terminating. Is another instance of Shairport Sync running on this device? 也就是 shairport 的默认5000端口被别的进程占用了,查了后是 UPnP服务占用的。 解决方案:修改 shairport 的配置文件,路径为 /etc/shairport-sync.conf,找到 port=5000这一行,删除行首的双斜杠,然后将5000随便修改成别的,比如5001即可。 然后重新启动shairport 即可。

  • shairport正常启动,但网络中无法搜索到 airplay 服务

    确认 shairport 已经正常启动,且通过 shairport-sync -vvv命令来查看其启动的详细日志,也发现完全正常启动,但其他设备却就是搜索不到 AirPlay 服务。 凭着我有限的网络知识,我猜测是路由器的广播发现服务出了问题。因为 AirPlay 这个服务就是靠广播让其他设备发现到的。然后查了下,openwrt 中负责广播是avchi 服务,我尝试结束 avchi 的进程并重新启动了下,没想到问题就解决了。其他设备可以搜索到 AirPlay 了,而且可以正常播放。 这真是天上掉下来的运气,虽然不知道具体 avchi 出了什么问题,但是通过重启可以解决这个问题,那就可以了,于是在openwrt 的本地启动脚本增加一行命令 sleep 60&&/etc/init.d/avahi-daemon restart &,作用就是开机后延时60秒重启 avahi 服务,问题就得到解决了😂。

  • 可以正常使用 AirPlay 服务,但是音量偏小

    通过查找 shairport 的文档,最后通过修改配置文件 /etc/shairport-sync.conf中的 volume_range_db参数,把问题解决了,将其从默认的60改成40即可。数字越小,声音越大,你可以按照你的情况自行测试其他数字。


OpenWrt通过4G 网卡上网遇到的一系列问题

openwrt 通过4G 网卡上网实际上是个挺麻烦的问题,因为4G 网卡有多种上网协议,如QMI、PPP、NCM、ECM,每种需要安装的驱动和配置方法都不一样,我以我的这个迅优D623型号的网卡为例,这个网卡的协议是NCM,以下介绍下整体配置过程。

  • 安装基础驱动

    首先需要安装这个网卡需要的系列插件 usbutils kmod-usb-serial kmod-usb-net usb-modeswitch kmod-usb-net-cdc-ncm,这些插件分别是 usb工具、usb 串口驱动、usb 网络驱动、上网卡模式切换工具、 ncm协议支持。 注意,一定要使用官方固件,不然安装这些固件的时候很容易死机重启。

  • 检查网卡是否被正确识别

    通过 lsusb-v命令,查看是否有能查看到你的上网卡设备,如果没有问题,可以看到网卡被正确识别为CDC Ethernet设备

  • 检查网卡是否被正确加载为网络设备

    通过命令 dmesg |grep -i 'eth\|cdc',查找设备加载相关信息,如果无误,应该可以看到一条类似这样的消息: >[ 1243.940337] [ 19.502581] cdcether 1-2.1:1.0 eth1: register 'cdcether' at usb-1e1c0000.xhci-2.1, ZTE CDC Ethernet Device, 34:4b:50:00:00:00 这样就代表网卡设备被正确加载,并注册为了eth1 接口。 接着执行 ifconfig命令,应该就可以看到eth1接口相关信息,如果看不到,可能是接口未开启。可以执行 ip link show命令,就能看到 eth1接口,然后执行命令 ip link seteth1 up就可以开启接口,之后在 ifconfig命令中就可以看到 eth1接口相关信息了,信息应该如下:

    eth1      

        Link encap:Ethernet  HWaddr 12:1A:B2:F1:55:C4            

        inet6 addr: fe80::101a:b2ff:fef1:55c4/64 Scopeink           

        UP BROADCAST RUNNING MULTICAST  MTU:1504  Metric:1           

        RX packets:3883 errors:0 dropped:0 overruns:0 frame:0           

        …

  • 配置通过4G 网卡上网

    配置过程不复杂,如下,这部分文字来自于 ChatGPT。

    • 登录到OpenWRT的LuCI管理界面(通常通过浏览器访问路由器的IP地址,如 192.168.1.1)。

      转到"网络" -> "接口"部分。 点击"添加新接口"按钮。

      选择合适的协议。对于CDC Ethernet设备,您通常会选择"DHCP客户端",因为这允许您的设备从网络服务提供商自动获取IP地址。如果您的服务提供商需要静态IP配置,那么选择"静态地址"并填写相应的信息。

      在"物理接口"部分,选择之前 dmesg显示的 eth1。 填写任何其他必要的配置细节,如APN、用户名和密码(如果网络服务提供商需要)。

    • 配置和连接测试

      确保新创建的接口被正确分配到了"WAN"防火墙区域,这通常是默认设置,但最好检查一下。 保存并应用设置。

      您可以通过网络接口的状态页来检查接口是否成功获取到了IP地址。

      尝试通过路由器进行一些外部网络请求,例如访问外部网站,以测试连接是否成功。




非常好的总结,不过,我的samba4共享也是按你认为错的写法写的,没问题呢。
回复

使用道具 举报

来自手机 | 显示全部楼层
牛,动作能力真强👍
回复

使用道具 举报

来自手机 | 显示全部楼层
太厉害了!看起来就知道是大神级别的了,虽然没搞过,思考了!感谢!
回复

使用道具 举报

 楼主| | 显示全部楼层
lrbin50 发表于 2024-4-28 13:27
非常好的总结,不过,我的samba4共享也是按你认为错的写法写的,没问题呢。 ...

只要没有问题就好啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-19 18:21

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表