#!/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