xiaorouji / openwrt-passwall

7.19k stars 2.65k forks source link

[Feature Request]: naiveproxy 的构建更换为 prebuilt 有利于节省构建耗时 #2770

Closed sbwml closed 1 year ago

sbwml commented 1 year ago

描述你想要的新功能

不知道有没有人注意到从源码构建 naiveproxy 是一件非常耗时的事情,尤其在 github actions 这种性能有限的环境下,从源码 naiveproxy 至少需要一个多小时才能完成这一个 pkg,假如在构建 OpenWrt 固件时启用了 ALL_KMODS 和 额外增加一些比较耗时的插件,github runner 一不小心就会超过 6 小时被终止任务。

然而 naiveproxy 上游有发布基于 openwrt sdk 构建的二进制文件,而且是动态的,它和我们平时从源码构建出来几乎完全一致,如果直接使用 “下载” 二进制的方式替代现有的源码构建,能节省不少的耗时。

或者可以新建一个包 naiveproxy_prebuilt,由用户自行选择通过源码构建还是直接使用上游的 prebuilt。

描述你想要的解决方案

# SPDX-License-Identifier: GPL-3.0-only
#
# Copyright (C) 2021 ImmortalWrt.org

include $(TOPDIR)/rules.mk

PKG_NAME:=naiveproxy
PKG_VERSION:=116.0.5845.92-2
PKG_RELEASE:=1

PKG_SOURCE:=naiveproxy-v$(PKG_VERSION)-openwrt-$(ARCH_PACKAGES).tar.xz
PKG_SOURCE_URL:=https://github.com/klzgrad/naiveproxy/releases/download/v$(PKG_VERSION)/
PKG_HASH:=skip

PKG_LICENSE:=BSD 3-Clause
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>

PKG_BUILD_DIR:=$(BUILD_DIR)/naiveproxy-v$(PKG_VERSION)-openwrt-$(ARCH_PACKAGES)

include $(INCLUDE_DIR)/package.mk

define Package/naiveproxy
  SECTION:=net
  CATEGORY:=Network
  SUBMENU:=Web Servers/Proxies
  TITLE:=Make a fortune quietly
  URL:=https://github.com/klzgrad/naiveproxy
  DEPENDS:=@!(arc||armeb||mips||mips64||powerpc||TARGET_gemini) +libatomic
endef

define Package/naiveproxy/description
  NaïveProxy uses Chrome's network stack to camouflage traffic with strong
  censorship resistance and low detectability. Reusing Chrome's stack also
  ensures best practices in performance and security.
endef

define Build/Compile
endef

define Package/naiveproxy/install
    $(INSTALL_DIR) $(1)/usr/bin
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/naive $(1)/usr/bin/naive
endef

$(eval $(call BuildPackage,naiveproxy))

描述你考虑过的替代方案

👆 上面是一个可用 Makefile 参考,因为架构太多了,也懒,文件 HASH 值就没逐一放在示例 Makefile 中了,直接 skip 掉了

其他信息

No response

sbwml commented 1 year ago

这样就可以让需要构建 naiveproxy 时,从1小时的耗时变成 5 秒钟。

hcym commented 1 year ago

确实如此,我是偶尔编译一次保留下来,半年一年的再来一次,平常几乎不用这个协议