Skip to content

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

PikuZheng edited this page Sep 8, 2022 · 11 revisions

建立本地源

  1. 建一个本地源文件夹,比如我的是 localsource
  2. 在本地源文件夹内建两个子文件夹,分别命名为 smartdns 和 luci-app-smartdns
  3. 复制 smartdns 项目中 package/openwrt/ 内所有文件和子文件夹到 localsource/smartdns/
  4. 复制 smartdns 项目中的 /src/ 内所有文件和子文件夹到 localsource/smartdns/src/
  5. 复制 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 分支文件)
  6. 复制 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

  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),然后正常编译即可。

检查

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

domain-set -name test -type list -file

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