GL-iNet 路由使用OpenWRT ExtRoot 存储扩容



GL-iNET Expand Storage with OpenWRT ExtRoot

GL-iNet 的便携路由器很好用,只是自带存储空间有点小,所以想玩点什么还是得使用 MicroSD 或 U盘进行扩容。

基本知识:

1 GL-iNet 的固件是基于 OpenWRT 定制的

2 现代化的 Linux,基本都支持 OverlayFS

OpenWRT ExtRoot 的官方文档在此: https://openwrt.org/docs/guide-user/additional-software/extroot_configuration

纯OpenWRT luci 操作流程很简单:

1 格式化存储;fdisk -l 找到设备,fdisk 里 d 删除原有分区, n 创建新分区, 一路回车, w 保存,syncmkfs.ext4 新分区

2 在 OpenWRT luci 的 System -> Mountpoints 里配置存储,自动挂载到 /overlay

3 在 OpenWRT luci 的 System -> Backup 里,Generate archive 或者什么,创建备份

4 重启,导入备份。

在比较新的 GL-iNet 固件里,luci不是默认安装的,所以操作的时候务必保证设备能联网。然后在管理后台左侧最下边的入口安装进入luci。

之所以导出导入备份,是因为/overlay 这个目录是一个完整的overlayfs的目录结构,用户自己的配置数据在 /overlay/upper 里,如果将外部存储挂载到 /overlay ,就会导致原有配置全都不可读,启动后的效果相当于系统被初始化。



GL-iNet 路由使用OpenWRT ExtRoot 存储扩容 by @sskaje: https://sskaje.me/2021/07/gl-inet-expand-storage-with-openwrt-extroot/

Use ETAS ES582 on Ubuntu 20.04



ES582 – USB CAN FD Bus Interface by ETAS, not supported by python-can for now(20210717), but engineers from Bosch/ETAS have commit code to Linux Kernel, can be found in 5.13+.

Kernel version of Ubuntu 20.04 is 5.8.x, download latest stable kernel from Kernel PPA Mainline, 5.13.2 for now. https://kernel.ubuntu.com/~kernel-ppa/mainline/

Download 3 “generic” debs for your arch, and install by dpkg -i, reboot.

Next, lsmod | grep etas, if it’s not loaded by default, load by sudo modprobe etas_es58x.

Plug your ES582 into USB, sudo dmesg check if it’s recognized, then ip a, you should be able to see can0 and can1.

ES582 is so EXPENSIVE. To test the CAN/CANFD, get a DB9 connector and connect like this.

Now we get CAN High and CAN low connected like on a CAN BUS, we’re able to communicate between CAN0 and CAN1.

Then we configure can0 and can1 to support CANFD.

sudo ip link set can0 type can bitrate 1000000 triple-sampleing on fd on dbitrate 2000000

sudo ip link set can0 up

Same on can1.

Install can-utils and in terminal 1 send to can0 and terminal 2 dump on can1.

cansend can0 211##1112233445566

candump -L can1

MORE

Available options for ip command: https://www.kernel.org/doc/Documentation/networking/can.txt



Use ETAS ES582 on Ubuntu 20.04 by @sskaje: https://sskaje.me/2021/07/use-etas-es582-on-ubuntu-20-04/

dnsmasq & systemd-resolve



Ubuntu 20.04。试图继续搭建一个 WireGuard Hub,但是这次考虑到 DNS 转发的性能问题,决定在Hub上搭一个 dnsmasq ,这样 DNS 解析结果可以被缓存下来,能够提升访问性能。

不记得从哪个版本起,Ubuntu 不再默认安装 dnsmasq ,而靠 systemd-resolve 协调管理本机的 DNS 解析。我只用 Ubuntu 当 Server,所以一般直接读 VPS 或者云服务商的 DNS 列表,干掉 systemd-resolve,安装 dnsmasq 接管解析。

但是这次我不想管系统的设置,只希望 dnsmasq 纯转发 WireGuard 接口的 DNS 请求。于是遇到了一个奇怪的问题,当我启动 dnsmasq 时,本机 DNS 解析挂了。dnsmasq 配置如下

仔细观察,结果发现,默认的时候 resolve.conf 里 nameserver=127.0.0.53,而dnsmasq启动后变成了 127.0.0.1。但是我 dnsmasq 根本没有接管 127.0.0.1。

排查了 systemd-resolve 的设置,没有相关的选项。

回过头来看resolvconf,结果在 /etc/resolvconf/update.d/dnsmasq 里看到了更新 resolv.conf 的代码。但是出于系统完整性和可维护性考虑,这个脚本肯定是不能动的,而这个脚本里也没有提供任何方法终止执行,只能再去别的地方找。

dnsmasq 是我在 WireGuard PostUp / PreDown 里调用启动和停止的。所以看启动脚本 /etc/init.d/dnsmasq 。里边有 start_resolvconf 方法。

显然,只有让第一个 for 的块能退出,才能解决问题。后边两个 if 都不能碰。

解决方案是,在 /etc/default/dnsmasq 里加入 DNSMASQ_EXCEPT=no 。

此外,这个脚本里还有一个 IGNORE_RESOLVCONF,单加没用,我是两个都加了。

有点简单粗暴,因为我 dnsmasq 本身default里没有加任何设置,所以不怕被覆盖。



dnsmasq & systemd-resolve by @sskaje: https://sskaje.me/2021/07/dnsmasq-systemd-resolve/