Skip to content

通过使用本地源的方法为将smartdns集成到openwrt固件内

PikuZheng edited this page Sep 9, 2022 · 11 revisions

建立本地源

  1. 建一个本地源文件夹,比如我的是 localsource

  2. 在本地源文件夹内建两个子文件夹,分别命名为 smartdns 和 luci-app-smartdns

  3. 复制 smartdns 项目中 package/openwrt/ 内所有文件和子文件夹到 localsource/smartdns/

    复制 smartdns 项目中的 /src/ 内所有文件和子文件夹到 localsource/smartdns/src/

  4. 复制 smartdns 项目中 package/luci-compat/files/luci/ 内所有文件和子文件夹到 localsource/luci-app-smartdns/luasrc/

    复制 smartdns 项目中 package/luci-compat/files/etc/ 内所有文件和子文件夹到 localsource/luci-app-smartdns/root/etc/

    复制 smartdns 项目中 package/luci-compat/control/ 内所有文件和子文件夹到 localsource/luci-app-smartdns/control/

    (此处也可直接引用 luci-app-smartdns 项目 lede 分支文件。如果选用 package/luci 可参考 luci-app-smartdns 项目的 master 分支)

    (注意: coolsnowwolf 及其衍生的分支不支持 luci-app-smartdns,必须用 luci-app-smartdns-compat)

  5. 复制 luci-app-smartdns 项目 lede 分支中的 Makefile 文件到 localsource/luci-app-smartdns/

此时 localsource 文件夹结构如下(以下只显示第一层子文件夹和文件,其他省略;其中带<>的表示文件夹,其他为文件):

root@localhost:~/localsource# tree -L 2
.
├── <luci-app-smartdns>
│   ├── <control>
│   ├── <luasrc>
│   ├── Makefile
│   └── <root>
└── <smartdns>
    ├── address.conf
    ├── blacklist-ip.conf
    ├── <control>
    ├── custom.conf
    ├── debian-binary              <-----此文件不必要,但由于复制方便所以在此处
    ├── <files>
    ├── Makefile
    ├── make.sh              <-----此文件不必要,但由于复制方便所以在此处
    └── <src>

修改文件

  1. 修改 localsource/smartdns/Makefile 文件和 localsource/luci-app-smartdns/Makefile 文件中的版本号:

    修改 PKG_VERSION:= 改为新版本号(比如我当前的自编号为1.2022.v37.2.10

    删除以下开头的若干行(或在行首加#注释掉):

PKG_SOURCE_PROTO:=......
PKG_SOURCE_URL:=......
PKG_SOURCE_VERSION:=......
PKG_MIRROR_HASH:=......
  1. 到 localsource/luci-app-smartdns/luasrc/i18n 文件夹,执行po2lmo smartdns.zh-cn.po smartdns.zh-cn.lmo

    (如果提示没有po2lmo,就先到 openwrt 项目文件夹 make package/feeds/luci/luci-base/compile

    (这个地方折腾了很久,但这个方法不符合规范。如果你有更好的方法请务必告诉我)

  2. 到 openwrt 项目文件夹,修改 feeds.conf(如果没有这个文件就复制feeds.conf.default 到 feeds.conf),在最后一行增加 src-link custom /root/localsource

    其中 /root/localsource 为本地源文件夹的绝对路径

  3. 执行

./scripts/feeds update -a && ./scripts/feeds install -a
./scripts/feeds uninstall smartdns luci-app-smartdns
./scripts/feeds install -f -p custom smartdns luci-app-smartdns

编译

执行 make menuconfig 选中 luci-app-smartdns(此时会自动选中smartdns),然后正常编译即可。

如果需要编译单个包,可执行make package/luci-app-smartdns/compile(由于依赖关系,编译luci-app-smartdns会先自动编译smartdns)

检查

为了证实安装后为最新版而不是官方仓库的文件。在自定义设置中增加

domain-set -name test -type list -file

domain-set 是 v37.2.10 新增的配置,由于缺少参数中的文件名,新版本将无法启动并在系统日志中记录配置错误形如 smartdns: process config file 'xxxxxx' failed at line xxxx.。旧版则可以正常启动运行。