From 502113f2a6adff41c82709ca458e686dff13764e Mon Sep 17 00:00:00 2001 From: Olia Lisa Date: Sun, 28 Jun 2026 10:26:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E6=96=B0=E4=B8=89=E8=B7=AF=E7=94=B1=E5=9B=BA=E4=BB=B6=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- newifi3_d2.sh | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 newifi3_d2.sh diff --git a/newifi3_d2.sh b/newifi3_d2.sh new file mode 100644 index 0000000..971357f --- /dev/null +++ b/newifi3_d2.sh @@ -0,0 +1,156 @@ +#!/bin/bash +set -e + +install_dependencies() { + apt install -y build-essential libncurses-dev zlib1g-dev gawk git \ + gettext libssl-dev xsltproc rsync wget unzip python3 qemu-utils mkisofs zstd +} + +download_imagebuilder() { + local version="$1" + local target="ramips/mt7621" + + local file="immortalwrt-imagebuilder-$version-ramips-mt7621.Linux-x86_64.tar.zst" + local url="https://downloads.immortalwrt.org/releases/$version/targets/ramips/mt7621/$file" + + local folder="immortalwrt-imagebuilder-$version-ramips-mt7621.Linux-x86_64" + local marker="$folder/.ready" + + if [ -f "$marker" ]; then + echo "$(pwd)/$folder" + return 0 + fi + + if [ -d "$folder" ] && [ ! -f "$marker" ]; then + rm -rf "$folder" + fi + + wget -O "$file" "$url" >&2 + tar -I zstd -xvf "$file" >&2 + + touch "$marker" + echo "$(pwd)/$folder" +} + +build() { + # ============================================================= + # 设备 Profile(必须与 ImageBuilder 支持的设备一致) + # ============================================================= + PROFILE="d-team_newifi-d2" + + # ============================================================= + # 自定义文件目录(映射到固件 rootfs) + # ============================================================= + FILES_DIR="files" + + SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + BUILDER_DIR="$1" + + # ============================================================= + # 固件输出目录 + # ============================================================= + OUTPUT_DIR="$BUILDER_DIR/newifi3_output" + PROJECT_OUTPUT_DIR="$SCRIPT_DIR/newifi3_output" + + # ============================================================= + # 固件名称标识 + # ============================================================= + EXTRA_IMAGE_NAME="newifi3" + + # ============================================================= + # 插件包列表(按需增删) + # ============================================================= + PKG_LIST=( + openssh-sftp-server + luci-i18n-vlmcsd-zh-cn + luci-i18n-argon-config-zh-cn + luci-i18n-arpbind-zh-cn + luci-i18n-package-manager-zh-cn + + # 代理插件 + luci-i18n-homeproxy-zh-cn + sing-box + ) + + PACKAGES=$(printf "%s " "${PKG_LIST[@]}") + + # ============================================================= + # 颜色输出 + # ============================================================= + GREEN="\033[0;32m" + YELLOW="\033[1;33m" + RED="\033[0;31m" + NC="\033[0m" + + echo -e "${GREEN}========================================${NC}" + echo -e "${GREEN} ImmortalWrt Image Builder 开始构建${NC}" + echo -e "${GREEN}========================================${NC}" + echo -e " Device : Newifi D2" + echo -e " Target : ramips/mt7621" + echo -e " Profile : ${PROFILE}" + echo -e " Output : ${OUTPUT_DIR}" + echo "" + + cd "$BUILDER_DIR" + + mkdir -p "$FILES_DIR" + + # ============================================================= + # 复制自定义 files 目录(如果存在) + # ============================================================= + if [ -d "${SCRIPT_DIR}/files" ]; then + cp -rf "${SCRIPT_DIR}/files/." "$BUILDER_DIR/files/" + fi + + # ============================================================= + # 校验 ImageBuilder 环境 + # ============================================================= + if [ ! -f "Makefile" ]; then + echo -e "${RED}未找到 Makefile,请在 ImageBuilder 目录运行${NC}" + exit 1 + fi + + mkdir -p "$OUTPUT_DIR" + + # ============================================================= + # 开始构建固件 + # ============================================================= + make image \ + PROFILE="$PROFILE" \ + PACKAGES="$PACKAGES" \ + FILES="$FILES_DIR" \ + BIN_DIR="$OUTPUT_DIR" \ + EXTRA_IMAGE_NAME="$EXTRA_IMAGE_NAME" + + # ============================================================= + # 输出目录整理 + # ============================================================= + if [ "$OUTPUT_DIR" != "$PROJECT_OUTPUT_DIR" ]; then + if [ -e "$PROJECT_OUTPUT_DIR" ]; then + BACKUP="${PROJECT_OUTPUT_DIR}.bak.$(date +%Y%m%d%H%M%S)" + mv "$PROJECT_OUTPUT_DIR" "$BACKUP" + fi + + mv "$OUTPUT_DIR" "$PROJECT_OUTPUT_DIR" + fi + + echo "" + echo -e "${GREEN}构建完成${NC}" + echo -e "固件输出: ${PROJECT_OUTPUT_DIR}" +} + + +project_dir="$(cd "$(dirname "$0")" && pwd)" +cd "$project_dir" + +# 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号 +version="25.12.0" + +# 安装依赖 +install_dependencies + +# 下载并解压 Image Builder,返回解压后的目录路径 +builder_dir="$(download_imagebuilder "$version")" + +# 构建固件 +build "$builder_dir" \ No newline at end of file