Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 05da3a4d57 | |||
| 09f1e7d567 | |||
| 24e2f7188d | |||
| 3c860fc7e6 | |||
| 502113f2a6 | |||
| 5deda07401 | |||
| c03f61acfb | |||
| 3ffeb904bb |
@@ -13,6 +13,9 @@
|
|||||||
|
|
||||||
建议在 Debian/Ubuntu 或 WSL Ubuntu 环境中运行。
|
建议在 Debian/Ubuntu 或 WSL Ubuntu 环境中运行。
|
||||||
|
|
||||||
|
最好找一个独立的环境执行代码.
|
||||||
|
|
||||||
|
官方说最好找一个非 root 用户执行代码. 怕是 root 权限太大, 怕出现误删文件的情况.
|
||||||
|
|
||||||
## 使用方法
|
## 使用方法
|
||||||
|
|
||||||
@@ -47,6 +50,30 @@ sudo bash r2s.sh
|
|||||||
r2s_output/
|
r2s_output/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 构建 新三路由 wifi3-d2 固件
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo bash newifi3_d2.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
构建完成后,固件文件会生成到:
|
||||||
|
|
||||||
|
```text
|
||||||
|
newifi3_output/
|
||||||
|
```
|
||||||
|
|
||||||
|
### 构建 极路由 B70 固件
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo bash hiwifi-b70.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
构建完成后,固件文件会生成到:
|
||||||
|
|
||||||
|
```text
|
||||||
|
hiwifi_b70_output/
|
||||||
|
```
|
||||||
|
|
||||||
如果输出目录已经存在,脚本会先将旧目录备份为带时间戳的 `.bak` 目录,再移动新的构建结果。
|
如果输出目录已经存在,脚本会先将旧目录备份为带时间戳的 `.bak` 目录,再移动新的构建结果。
|
||||||
|
|
||||||
## 默认配置
|
## 默认配置
|
||||||
@@ -56,7 +83,7 @@ r2s_output/
|
|||||||
- ImmortalWrt 版本:`25.12.0`
|
- ImmortalWrt 版本:`25.12.0`
|
||||||
- Target:`x86/64`
|
- Target:`x86/64`
|
||||||
- Profile:`generic`
|
- Profile:`generic`
|
||||||
- 根分区大小:`500 MB`
|
- 根分区大小:`600 MB`
|
||||||
- 输出目录:`output/`
|
- 输出目录:`output/`
|
||||||
|
|
||||||
### NanoPi R2S
|
### NanoPi R2S
|
||||||
@@ -64,9 +91,24 @@ r2s_output/
|
|||||||
- ImmortalWrt 版本:`25.12.0`
|
- ImmortalWrt 版本:`25.12.0`
|
||||||
- Target:`rockchip/armv8`
|
- Target:`rockchip/armv8`
|
||||||
- Profile:`friendlyarm_nanopi-r2s`
|
- Profile:`friendlyarm_nanopi-r2s`
|
||||||
- 根分区大小:`500 MB`
|
- 根分区大小:`600 MB`
|
||||||
- 输出目录:`r2s_output/`
|
- 输出目录:`r2s_output/`
|
||||||
|
|
||||||
|
### 新三路由(Newifi3 D2)
|
||||||
|
|
||||||
|
- ImmortalWrt 版本:`25.12.0`
|
||||||
|
- Target:`ramips/mt7621`
|
||||||
|
- Profile:`d-team_newifi-d2`
|
||||||
|
- 输出目录:`newifi3_output/`
|
||||||
|
> mt7621(newifi3-d2)构建已移除 rootfs_partsize 参数,使用 ImageBuilder 默认分区策略。
|
||||||
|
|
||||||
|
### 极路由 B70
|
||||||
|
|
||||||
|
- ImmortalWrt 版本:`25.12.0`
|
||||||
|
- Target:`ramips/mt7621`
|
||||||
|
- Profile:`hiwifi_hc5962`
|
||||||
|
- 输出目录:`newifi3_output/`
|
||||||
|
|
||||||
## 自定义固件
|
## 自定义固件
|
||||||
|
|
||||||
### 修改 ImmortalWrt 版本
|
### 修改 ImmortalWrt 版本
|
||||||
|
|||||||
+155
@@ -0,0 +1,155 @@
|
|||||||
|
#!/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(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.0"
|
||||||
|
|
||||||
|
install_dependencies
|
||||||
|
|
||||||
|
builder_dir="$(download_imagebuilder "$version")"
|
||||||
|
|
||||||
|
build "$builder_dir"
|
||||||
+158
@@ -0,0 +1,158 @@
|
|||||||
|
#!/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=(
|
||||||
|
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 : 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"
|
||||||
@@ -129,7 +129,13 @@ build(){
|
|||||||
cd "$BUILDER_DIR"
|
cd "$BUILDER_DIR"
|
||||||
|
|
||||||
mkdir -p "$FILES_DIR"
|
mkdir -p "$FILES_DIR"
|
||||||
cp "${SCRIPT_DIR}"/files/* "$BUILDER_DIR/files/" -rf
|
# 复制 files 目录下的自定义文件到 Image Builder 的 files 目录
|
||||||
|
if [ -d "${SCRIPT_DIR}/files" ]; then
|
||||||
|
echo -e "${YELLOW}[提示] 复制自定义 files/ 目录到 Image Builder${NC}"
|
||||||
|
cp ${SCRIPT_DIR}/files/* $BUILDER_DIR/files/ -rf
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}[提示] 未找到自定义 files/ 目录,跳过复制${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
# 禁用 x86 Image Builder 中常见的额外镜像格式;rockchip 目标不存在时会自动跳过
|
# 禁用 x86 Image Builder 中常见的额外镜像格式;rockchip 目标不存在时会自动跳过
|
||||||
sed -i \
|
sed -i \
|
||||||
@@ -200,7 +206,7 @@ cd "$project_dir"
|
|||||||
version="25.12.0"
|
version="25.12.0"
|
||||||
|
|
||||||
# 根分区大小(单位: MB)
|
# 根分区大小(单位: MB)
|
||||||
rootfs_partsize=500
|
rootfs_partsize=600
|
||||||
|
|
||||||
install_dependencies
|
install_dependencies
|
||||||
|
|
||||||
|
|||||||
@@ -136,7 +136,12 @@ build(){
|
|||||||
cd "$BUILDER_DIR"
|
cd "$BUILDER_DIR"
|
||||||
|
|
||||||
# 复制 files 目录下的自定义文件到 Image Builder 的 files 目录
|
# 复制 files 目录下的自定义文件到 Image Builder 的 files 目录
|
||||||
cp ${SCRIPT_DIR}/files/* $BUILDER_DIR/files/ -rf
|
if [ -d "${SCRIPT_DIR}/files" ]; then
|
||||||
|
echo -e "${YELLOW}[提示] 复制自定义 files/ 目录到 Image Builder${NC}"
|
||||||
|
cp ${SCRIPT_DIR}/files/* $BUILDER_DIR/files/ -rf
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}[提示] 未找到自定义 files/ 目录,跳过复制${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
# 修改.config文件, 不构建以下格式固件
|
# 修改.config文件, 不构建以下格式固件
|
||||||
sed -i \
|
sed -i \
|
||||||
@@ -218,7 +223,7 @@ cd "$project_dir"
|
|||||||
version="25.12.0"
|
version="25.12.0"
|
||||||
|
|
||||||
# 根分区大小(单位: MB)
|
# 根分区大小(单位: MB)
|
||||||
rootfs_partsize=500
|
rootfs_partsize=600
|
||||||
|
|
||||||
# 安装依赖
|
# 安装依赖
|
||||||
install_dependencies
|
install_dependencies
|
||||||
|
|||||||
Reference in New Issue
Block a user