155 lines
4.4 KiB
Bash
155 lines
4.4 KiB
Bash
#!/bin/bash
|
||
set -e
|
||
|
||
install_dependencies() {
|
||
sudo 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(HiWiFi HC5962 / 极路由B70)
|
||
# =============================================================
|
||
PROFILE="hiwifi_hc5962"
|
||
|
||
# =============================================================
|
||
# 自定义文件目录(映射到固件 rootfs)
|
||
# =============================================================
|
||
FILES_DIR="files"
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
BUILDER_DIR="$1"
|
||
|
||
# =============================================================
|
||
# 固件输出目录
|
||
# =============================================================
|
||
OUTPUT_DIR="$BUILDER_DIR/hiwifi_b70_output"
|
||
PROJECT_OUTPUT_DIR="$SCRIPT_DIR/hiwifi_b70_output"
|
||
|
||
# =============================================================
|
||
# 固件名称标识
|
||
# =============================================================
|
||
EXTRA_IMAGE_NAME="hc5962"
|
||
|
||
# =============================================================
|
||
# 插件包列表(按需增删)
|
||
# =============================================================
|
||
PKG_LIST=(
|
||
vim
|
||
nano-full
|
||
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 : HiWiFi HC5962 (B70)"
|
||
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 版本
|
||
version="25.12.1"
|
||
|
||
install_dependencies
|
||
|
||
builder_dir="$(download_imagebuilder "$version")"
|
||
|
||
build "$builder_dir" |