Files
immortalwrt_image_builder/hiwifi-b70.sh
T
2026-07-22 20:28:34 +08:00

223 lines
6.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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() {
# =============================================================
# 设备 ProfileHiWiFi HC5962 / 极路由B70
# =============================================================
PROFILE="hiwifi_hc5962"
# =============================================================
# 自定义文件目录(映射到固件 rootfs)
# =============================================================
FILES_DIR="files"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
BUILDER_DIR="$1"
# ────────────────────────────────────────────
# lan口ip
# ────────────────────────────────────────────
LAN_IP=${2}
# =============================================================
# 固件输出目录
# =============================================================
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"
# 如果存在 LAN IP 设置脚本,则修改默认 LAN 地址
LAN_SETTING_FILE="${SCRIPT_DIR}/files/etc/uci-defaults/98-network-setting"
if [ -e "$LAN_SETTING_FILE" ]; then
# 根据用户输入的 LAN_IP 修改默认 IP
sed -i \
"s/^update_lan_ip .*/update_lan_ip ${LAN_IP}/" \
"$LAN_SETTING_FILE"
fi
# =============================================================
# 复制自定义 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}"
}
# =============================================================
# 交互输入函数
# 参数1: 提示信息
# 参数2: 默认值
# 返回: 用户输入值,直接回车返回默认值
# =============================================================
ask_input() {
local prompt="$1"
local default="$2"
read -p "${prompt} [ 默认: ${default} ]: " value
if [ -z "$value" ]; then
echo "$default"
else
echo "$value"
fi
}
# 获取lan口ip
input_lan_ip() {
local default_ip="$1"
while true; do
local ip
ip=$(ask_input "请输入lan口ip" "$default_ip")
if valid_ipv4 "$ip"; then
echo "$ip"
return 0
else
echo "[错误] IP地址格式不正确,请重新输入" >&2
fi
done
}
valid_ipv4() {
local ip="$1"
echo "$ip" | awk -F. '
NF==4 &&
$1>=0 && $1<=255 &&
$2>=0 && $2<=255 &&
$3>=0 && $3<=255 &&
$4>=0 && $4<=255
'
}
project_dir="$(cd "$(dirname "$0")" && pwd)"
cd "$project_dir"
# 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号
default_version="25.12.1"
version=$(ask_input "请输入 ImmortalWrt 版本" "$default_version")
# lan口ip
default_lan_ip="192.168.1.1"
lan_ip=$(input_lan_ip "$default_lan_ip")
install_dependencies
builder_dir="$(download_imagebuilder "$version")"
build $builder_dir $lan_ip