commit c799778b3e73f7b63a7c70d0a46af02e77eb6aba Author: bgme <i@bgme.me> Date: Sat May 10 00:16:42 2025 +0800 Squashed 'smartdns/' content from commit 5514f3d git-subtree-dir: smartdns git-subtree-split: 5514f3d41c72d6bdea89e72f8c4546f6376cb44f diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..335c2a5 --- /dev/null +++ b/Makefile @@ -0,0 +1,143 @@ +# +# Copyright (c) 2018-2023 Nick Peng (pymumu@gmail.com) +# This is free software, licensed under the GNU General Public License v3. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=smartdns +PKG_VERSION:=1.2025.46.2 +PKG_RELEASE:=3 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://www.github.com/pymumu/smartdns.git +PKG_SOURCE_VERSION:=20f56745c4f2ad2a5a4e1fb927770b3cb8122a69 +PKG_MIRROR_HASH:=29b32ee0c275a4b845b28c53a2597b43f4d3f04676e04b9c53aae5ecaf3c6f94 + +SMARTDNS_WEBUI_VERSION:=1.0.0 +SMAETDNS_WEBUI_SOURCE_PROTO:=git +SMARTDNS_WEBUI_SOURCE_URL:=https://github.com/pymumu/smartdns-webui.git +SMARTDNS_WEBUI_SOURCE_VERSION:=7bbd1a6f6a7038ecb6cfbf424615aa7831bc1cea +SMARTDNS_WEBUI_FILE:=smartdns-webui-$(SMARTDNS_WEBUI_VERSION).tar.gz + +PKG_MAINTAINER:=Nick Peng <pymumu@gmail.com> +PKG_LICENSE:=GPL-3.0-or-later +PKG_LICENSE_FILES:=LICENSE + +PKG_BUILD_PARALLEL:=1 + +# node compile is slow, so do not use it, doownload node manually. +# PACKAGE_smartdns-ui:node/host +PKG_BUILD_DEPENDS:=PACKAGE_smartdns-ui:rust/host + +include ../../lang/rust/rust-package.mk +include $(INCLUDE_DIR)/package.mk + +MAKE_VARS += VER=$(PKG_VERSION) +MAKE_PATH:=src + +define Package/smartdns/default + SECTION:=net + CATEGORY:=Network + SUBMENU:=IP Addresses and Names + URL:=https://www.github.com/pymumu/smartdns/ +endef + +define Package/smartdns + $(Package/smartdns/default) + TITLE:=smartdns server + DEPENDS:=+libpthread +libopenssl +endef + +define Package/smartdns/description +SmartDNS is a local DNS server which accepts DNS query requests from local network clients, +gets DNS query results from multiple upstream DNS servers concurrently, and returns the fastest IP to clients. +Unlike dnsmasq's all-servers, smartdns returns the fastest IP, and encrypt DNS queries with DoT or DoH. +endef + +define Package/smartdns/conffiles +/etc/config/smartdns +/etc/smartdns/address.conf +/etc/smartdns/blacklist-ip.conf +/etc/smartdns/custom.conf +/etc/smartdns/domain-block.list +/etc/smartdns/domain-forwarding.list +endef + +define Package/smartdns/install + $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d + $(INSTALL_DIR) $(1)/etc/smartdns $(1)/etc/smartdns/domain-set $(1)/etc/smartdns/conf.d/ + $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/smartdns $(1)/usr/sbin/smartdns + $(INSTALL_BIN) $(PKG_BUILD_DIR)/package/openwrt/files/etc/init.d/smartdns $(1)/etc/init.d/smartdns + $(INSTALL_CONF) $(PKG_BUILD_DIR)/package/openwrt/address.conf $(1)/etc/smartdns/address.conf + $(INSTALL_CONF) $(PKG_BUILD_DIR)/package/openwrt/blacklist-ip.conf $(1)/etc/smartdns/blacklist-ip.conf + $(INSTALL_CONF) $(PKG_BUILD_DIR)/package/openwrt/custom.conf $(1)/etc/smartdns/custom.conf + $(INSTALL_CONF) $(PKG_BUILD_DIR)/package/openwrt/files/etc/config/smartdns $(1)/etc/config/smartdns +endef + +define Package/smartdns-ui + $(Package/smartdns/default) + TITLE:=smartdns dashboard + DEPENDS:=+smartdns $(RUST_ARCH_DEPENDS) +endef + +define Package/smartdns-ui/description +A dashboard ui for smartdns server. +endef + +define Package/smartdns-ui/conffiles +/etc/config/smartdns +endef + +define Package/smartdns-ui/install + $(INSTALL_DIR) $(1)/usr/lib + $(INSTALL_DIR) $(1)/etc/smartdns/conf.d/ + $(INSTALL_DIR) $(1)/usr/share/smartdns/wwwroot + $(INSTALL_BIN) $(PKG_BUILD_DIR)/plugin/smartdns-ui/target/libsmartdns_ui.so $(1)/usr/lib/libsmartdns_ui.so + $(CP) $(PKG_BUILD_DIR)/smartdns-webui/out/* $(1)/usr/share/smartdns/wwwroot +endef + +define Build/Compile/smartdns-webui + which npm || (echo "npm not found, please install npm first" && exit 1) + npm install --prefix $(PKG_BUILD_DIR)/smartdns-webui/ + npm run build --prefix $(PKG_BUILD_DIR)/smartdns-webui/ +endef + +define Build/Compile/smartdns-ui + cargo install --force --locked bindgen-cli + CARGO_BUILD_ARGS="$(if $(strip $(RUST_PKG_FEATURES)),--features "$(strip $(RUST_PKG_FEATURES))") --profile $(CARGO_PKG_PROFILE)" + +$(CARGO_PKG_VARS) CARGO_BUILD_ARGS="$(CARGO_BUILD_ARGS)" CC=$(TARGET_CC) \ + PATH="$$(PATH):$(CARGO_HOME)/bin" \ + make -C $(PKG_BUILD_DIR)/plugin/smartdns-ui +endef + +define Download/smartdns-webui + FILE:=$(SMARTDNS_WEBUI_FILE) + PROTO:=$(SMAETDNS_WEBUI_SOURCE_PROTO) + URL:=$(SMARTDNS_WEBUI_SOURCE_URL) + MIRROR_HASH:=b3f4f73b746ee169708f6504c52b33d9bbeb7c269b731bd7de4f61d0ad212d74 + VERSION:=$(SMARTDNS_WEBUI_SOURCE_VERSION) + HASH:=$(SMARTDNS_WEBUI_HASH) + SUBDIR:=smartdns-webui +endef +$(eval $(call Download,smartdns-webui)) + +ifdef CONFIG_PACKAGE_smartdns-ui +define Build/Prepare + $(call Build/Prepare/Default) + $(TAR) -C $(PKG_BUILD_DIR)/ -xf $(DL_DIR)/$(SMARTDNS_WEBUI_FILE) +endef +endif + +define Build/Compile + $(call Build/Compile/Default,smartdns) +ifdef CONFIG_PACKAGE_smartdns-ui + $(call Build/Compile/smartdns-ui) + $(call Build/Compile/smartdns-webui) +endif +endef + +$(eval $(call BuildPackage,smartdns)) +$(eval $(call RustBinPackage,smartdns-ui)) +$(eval $(call BuildPackage,smartdns-ui)) + diff --git a/ReadMe.md b/ReadMe.md new file mode 100644 index 0000000..eacd0c0 --- /dev/null +++ b/ReadMe.md @@ -0,0 +1,71 @@ +# openwrt-smartdns + +此仓库为smartdns独立仓库,为单独编译使用,可配合luci-app-smartdns一起使用。 +luci界面:[luci-app-smartdns](https://github.com/pymumu/luci-app-smartdns) + +## 使用方式 + +注意:如下命令操作路径为openwrt源代码所在目录。 + +### 复制仓库中的文件到如下目录,并执行安装 + +```shell +./feeds/packages/net/smartdns/ +./scripts/feeds install package -a +``` + +### 执行openwrt配置, 选中smartdns + +执行编译配置: + +```shell +make menuconfig +``` + +* 选择路径: + + Network > smartdns + Network > smartdns-ui + +* 编译模式: + +1. 若编译独立软件包,选择编译模式为`M` +1. 若编译到固件中,选择编译模式为`*` +1. UI为单独安装包,需要选择后才能编译。 + +### 执行openwrt编译 + +仅编译软件包: + +```shell +make package/feeds/packages/smartdns/compile +``` + +编译固件以及软件包。 + +```shell +make -j8 +``` + +## 懒人脚本 + +也可可执行如下命令,一次性下载smartdns。 + +下列命令可采用复制粘贴的方式执行, 注意目录需要在openwrt源代码目录中。 + +```shell +WORKINGDIR="`pwd`/feeds/packages/net/smartdns" +mkdir $WORKINGDIR -p +rm $WORKINGDIR/* -fr +wget https://github.com/pymumu/openwrt-smartdns/archive/master.zip -O $WORKINGDIR/master.zip +unzip $WORKINGDIR/master.zip -d $WORKINGDIR +mv $WORKINGDIR/openwrt-smartdns-master/* $WORKINGDIR/ +rmdir $WORKINGDIR/openwrt-smartdns-master +rm $WORKINGDIR/master.zip + +./scripts/feeds install -a +make menuconfig + +``` + +上述命令完成后,可执行编译。