2025版为openwrt集成加强版geodata文件。
早年写过一篇旧的同名文章。介绍过如何在openwrt编译时,直接集成一个自己想要的geodata文件。
只是当年才疏学浅,用了最土的方式,直接修改openwrt源文件的方式来实现。
如今研究过openwrt的项目结构后,发现通过添加外部feeds
来覆盖源目标的方式才是最正确的方法。
这个方法也适用于要添加其它的自定义项目。
首先,将要添加的项目的文件,这里geodata只有一个Makefile
文件。保存到适当的位置。
以我保存的路径为例:
/home/ubuntu/openwrt/feeds/v2ray-geodata/Makefile
然后,在openwrt项目,根目录下的feeds.conf.default
的第一行添加以下一行:
src-link custom /home/ubuntu/openwrt/feeds
为什么要在第一行?因为feeds的优先级是根据自上而下的加载顺序决定的。最先加载的优先级最高,可以覆盖后面原生自带的相同项目。
这里也可以看出来,在/home/ubuntu/openwrt/feeds
的路径下,还可以放入其它多个自己想要添加的项目。
最后就是正常的编译流程:
cd lede
git pull
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
make download -j8
make V=s -j$(nproc)
下面是我的加强版geodata项目Makefile文件内容,可以直接保存使用。
# SPDX-License-Identifier: GPL-3.0-only
#
# Copyright (C) 2021-2022 ImmortalWrt.org
include $(TOPDIR)/rules.mk
PKG_NAME:=v2ray-geodata
PKG_RELEASE:=1
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=winger zhang <winger.zhang@gmail.com>
include $(INCLUDE_DIR)/package.mk
GEODATA_VER:=202503192212
GEOIP_FILE:=geoip.dat.$(GEODATA_VER)
define Download/geoip
URL:=https://github.com/Loyalsoldier/v2ray-rules-dat/releases/download/$(GEODATA_VER)/
URL_FILE:=geoip.dat
FILE:=$(GEOIP_FILE)
HASH:=e32b80017d1dea91bc36c4e7ed07a5e7f200356415e678a8a6f825fb521f7b68
endef
GEOSITE_FILE:=geosite.dat.$(GEODATA_VER)
define Download/geosite
URL:=https://github.com/Loyalsoldier/v2ray-rules-dat/releases/download/$(GEODATA_VER)/
URL_FILE:=geosite.dat
FILE:=$(GEOSITE_FILE)
HASH:=57c476f6e50737c5fdf68778ec1615fb2017f75886a6bb0252927c314e5904b7
endef
define Package/v2ray-geodata/template
SECTION:=net
CATEGORY:=Network
SUBMENU:=IP Addresses and Names
URL:=https://www.v2fly.org
PKGARCH:=all
endef
define Package/v2ray-geoip
$(call Package/v2ray-geodata/template)
TITLE:=GeoIP List for V2Ray
VERSION:=$(GEODATA_VER)-$(PKG_RELEASE)
LICENSE:=CC-BY-SA-4.0
endef
define Package/v2ray-geosite
$(call Package/v2ray-geodata/template)
TITLE:=Geosite List for V2Ray
VERSION:=$(GEODATA_VER)-$(PKG_RELEASE)
LICENSE:=MIT
endef
define Build/Prepare
$(call Build/Prepare/Default)
ifneq ($(CONFIG_PACKAGE_v2ray-geoip),)
$(call Download,geoip)
endif
ifneq ($(CONFIG_PACKAGE_v2ray-geosite),)
$(call Download,geosite)
endif
endef
define Build/Compile
endef
define Package/v2ray-geoip/install
$(INSTALL_DIR) $(1)/usr/share/v2ray
$(INSTALL_DATA) $(DL_DIR)/$(GEOIP_FILE) $(1)/usr/share/v2ray/geoip.dat
endef
define Package/v2ray-geosite/install
$(INSTALL_DIR) $(1)/usr/share/v2ray
$(INSTALL_DATA) $(DL_DIR)/$(GEOSITE_FILE) $(1)/usr/share/v2ray/geosite.dat
endef
$(eval $(call BuildPackage,v2ray-geoip))
$(eval $(call BuildPackage,v2ray-geosite))
最后,如何快速的更新Makefile文件,以编译打包最新的geodata文件。可以看我的另外一篇文章。