OpenWRT

我之前买了一个 n1 盒子用来玩,上面已经刷了 iStoreOS,这是一个 OpenWRT 的分支。这里记录了一些我的折腾过程。

一句话:iStoreOS 非常垃圾,服务越开越多,用得越来越难受。20250114 跑了,刷成了 Arch Linux ARM。

包管理

OpenWRT 用的包管理器是 opkg。虽然 OpenWRT 已经声称要转到 apt,但是还没转,并且 iStoreOS 应该还没有那么快跟上。因此我不得不用这个不合格的包管理器。

docker

iStoreOS 上啥都没有,但是有 docker。

然而这个 docker 的配置是 OpenWRT 乱写的,需要去看 /etc/init.d/dockerd 才知道怎么配,配置文件在哪。网上的 docker 配置教程都废了。(开喷)

代理

OpenWRT 的 Linux 内核是 5.10,iStoreOS 也遵循上游内核版本。然而 dae 的最低内核要求是 5.17,因此我无法在 iStoreOS 上使用 dae 作为代理。

服务

OpenWRT 不支持 systemd,果然还是太重了吧。所以必须使用传统的 procd init script。

  1. 在 /etc/init.d/<service name> 写入:
    bash
    #!/bin/sh /etc/rc.common
    USE_PROCD=1
    START=90
    start_service() {
        procd_open_instance <Instance name 随便取>
        procd_set_param command <your startup command>
        procd_set_param limits nofile="unlimited"
        procd_set_param respawn 300 5 10
        procd_set_param stdout 1
        procd_set_param stderr 1
        procd_close_instance
    }
    (startup command 可以不是绝对可执行路径)
  2. 添加权限:chmod +x /etc/init.d/<service name>
  3. 运行 service <service name> enable。
  4. 开机自启:cd /etc/rc.d && ln -s ../init.d/<service> ./S99<service>