commit 8454fec94dae30b30b23973204fd2fbb4119b6a9 Author: Olia Lisa Date: Sat Jun 20 19:48:20 2026 +0800 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..87acd52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +dl/* +output/* +target/* + diff --git a/init.sh b/init.sh new file mode 100644 index 0000000..9d40446 --- /dev/null +++ b/init.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# 安装依赖 +apt install -y build-essential libncurses-dev zlib1g-dev gawk git \ +gettext libssl-dev xsltproc rsync wget unzip python3 qemu-utils mkisofs zstd + +# 下载并解压image builder +imagebuilder_url="https://downloads.immortalwrt.org/releases/25.12.0/targets/x86/64/immortalwrt-imagebuilder-25.12.0-x86-64.Linux-x86_64.tar.zst" +wget -O immortalwrt-imagebuilder.tar.zst $imagebuilder_url && tar -I zstd -xvf immortalwrt-imagebuilder.tar.zst --strip-components=1 \ No newline at end of file diff --git a/main.sh b/main.sh new file mode 100644 index 0000000..a456e89 --- /dev/null +++ b/main.sh @@ -0,0 +1,132 @@ +#!/bin/bash +# ============================================================= +# OpenWrt Image Builder 构建脚本 +# 使用方法: 将本脚本放在 imagebuilder 根目录下运行 +# 运行: bash main.sh +# ============================================================= + +# ──────────────────────────────────────────── +# 设备 Profile +# 运行 `make info` 查看所有可用 profile +# ──────────────────────────────────────────── +PROFILE="generic" # x86_64 通用 profile,可改为 x86_64 等 + +# ──────────────────────────────────────────── +# 自定义文件目录(映射到固件根文件系统) +# ──────────────────────────────────────────── +FILES_DIR="files" + +# ──────────────────────────────────────────── +# 固件输出目录 +# ──────────────────────────────────────────── +OUTPUT_DIR="$(pwd)/output" + +# ──────────────────────────────────────────── +# 固件文件名附加标识(可留空) +# ──────────────────────────────────────────── +EXTRA_IMAGE_NAME="" + +# ============================================================= +# 插件包列表 +# - 前面加 - 表示从固件中移除该包,例如 -dnsmasq +# - 每行一个,方便增删注释 +# ============================================================= +PKG_LIST=( + -dropbear + openssh-server + openssh-sftp-server + vim-full + nano-plus + luci-i18n-vlmcsd-zh-cn + luci-i18n-argon-config-zh-cn + luci-i18n-package-manager-zh-cn + luci-i18n-firewall-zh-cn + luci-i18n-arpbind-zh-cn + + luci-i18n-daed-zh-cn + luci-i18n-homeproxy-zh-cn + sing-box + + ripgrep + diffutils + less + eza + fish + + luci-i18n-diskman-zh-cn + cfdisk + resize2fs + e2fsprogs + losetup +) + +# 动态拼接成字符串 +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} OpenWrt Image Builder 开始构建${NC}" +echo -e "${GREEN}========================================${NC}" +echo -e " Profile : ${YELLOW}${PROFILE}${NC}" +echo -e " Files 目录 : ${YELLOW}${FILES_DIR}${NC}" +echo -e " 输出目录 : ${YELLOW}${OUTPUT_DIR}${NC}" +echo -e " 镜像标识 : ${YELLOW}${EXTRA_IMAGE_NAME}${NC}" +echo "" + + +# 修改.config文件, 不构建以下格式, +sed -i \ +-e 's/^CONFIG_ISO_IMAGES=y/# CONFIG_ISO_IMAGES is not set/' \ +-e 's/^CONFIG_QCOW2_IMAGES=y/# CONFIG_QCOW2_IMAGES is not set/' \ +-e 's/^CONFIG_VDI_IMAGES=y/# CONFIG_VDI_IMAGES is not set/' \ +-e 's/^CONFIG_VMDK_IMAGES=y/# CONFIG_VMDK_IMAGES is not set/' \ +-e 's/^CONFIG_VHDX_IMAGES=y/# CONFIG_VHDX_IMAGES is not set/' \ +.config + + +# 检查是否在 imagebuilder 目录下 +if [ ! -f "Makefile" ]; then + echo -e "${RED}[错误] 未找到 Makefile,请在 imagebuilder 根目录下运行本脚本!${NC}" + exit 1 +fi + +# 创建 files 目录(如果不存在) +if [ ! -d "$FILES_DIR" ]; then + echo -e "${YELLOW}[提示] files/ 目录不存在,已自动创建${NC}" + mkdir -p "$FILES_DIR" +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 [ $? -eq 0 ]; then + echo "" + echo -e "${GREEN}========================================${NC}" + echo -e "${GREEN} 构建成功!${NC}" + echo -e "${GREEN} 固件路径: ${OUTPUT_DIR}${NC}" + echo -e "${GREEN}========================================${NC}" +else + echo "" + echo -e "${RED}========================================${NC}" + echo -e "${RED} 构建失败,请检查上方错误日志${NC}" + echo -e "${RED}========================================${NC}" + exit 1 +fi \ No newline at end of file