Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fe9ec13323 | |||
| 3f83643cb2 | |||
| 8fa54c5ae3 | |||
| 6aa3a55f32 | |||
| 3d77814af4 | |||
| cfd573c5c8 | |||
| a9b7f09e06 | |||
| 2b5026d76c |
@@ -0,0 +1,30 @@
|
|||||||
|
# EditorConfig is awesome: https://EditorConfig.org
|
||||||
|
|
||||||
|
# 根目录配置文件
|
||||||
|
root = true
|
||||||
|
|
||||||
|
|
||||||
|
# 默认规则
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
|
||||||
|
# Shell scripts
|
||||||
|
[*.sh]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
|
||||||
|
# Markdown documents
|
||||||
|
[*.md]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
|
||||||
|
[*.{json,yml,yaml}]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 安装 Image Builder 构建所需依赖
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
# =============================================================
|
||||||
|
# 交互输入函数
|
||||||
|
# 参数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"
|
||||||
|
|
||||||
|
# 第一层:检查格式,必须是4段数字
|
||||||
|
echo "$ip" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' || return 1
|
||||||
|
|
||||||
|
# 第二层:检查每段范围
|
||||||
|
echo "$ip" | awk -F. '
|
||||||
|
$1>=0 && $1<=255 &&
|
||||||
|
$2>=0 && $2<=255 &&
|
||||||
|
$3>=0 && $3<=255 &&
|
||||||
|
$4>=0 && $4<=255
|
||||||
|
' | grep -q . || return 1
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
+41
-89
@@ -1,10 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
install_dependencies() {
|
source common.sh
|
||||||
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() {
|
download_imagebuilder() {
|
||||||
local version="$1"
|
local version="$1"
|
||||||
@@ -49,7 +46,12 @@ build() {
|
|||||||
# ────────────────────────────────────────────
|
# ────────────────────────────────────────────
|
||||||
# lan口ip
|
# lan口ip
|
||||||
# ────────────────────────────────────────────
|
# ────────────────────────────────────────────
|
||||||
LAN_IP=${2}
|
LAN_IP="${2}"
|
||||||
|
|
||||||
|
# =============================================================
|
||||||
|
# 插件包列表
|
||||||
|
# =============================================================
|
||||||
|
PACKAGES="${3}"
|
||||||
|
|
||||||
# =============================================================
|
# =============================================================
|
||||||
# 固件输出目录
|
# 固件输出目录
|
||||||
@@ -62,25 +64,6 @@ build() {
|
|||||||
# =============================================================
|
# =============================================================
|
||||||
EXTRA_IMAGE_NAME="hc5962"
|
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[@]}")
|
|
||||||
|
|
||||||
# =============================================================
|
# =============================================================
|
||||||
# 颜色输出
|
# 颜色输出
|
||||||
# =============================================================
|
# =============================================================
|
||||||
@@ -102,15 +85,6 @@ build() {
|
|||||||
|
|
||||||
mkdir -p "$FILES_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 目录(如果存在)
|
# 复制自定义 files 目录(如果存在)
|
||||||
# =============================================================
|
# =============================================================
|
||||||
@@ -118,6 +92,15 @@ build() {
|
|||||||
cp -rf "${SCRIPT_DIR}/files/." "$BUILDER_DIR/files/"
|
cp -rf "${SCRIPT_DIR}/files/." "$BUILDER_DIR/files/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 如果存在 LAN IP 设置脚本,则修改默认 LAN 地址
|
||||||
|
LAN_SETTING_FILE="${BUILDER_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
|
||||||
|
|
||||||
|
|
||||||
# =============================================================
|
# =============================================================
|
||||||
# 校验 ImageBuilder 环境
|
# 校验 ImageBuilder 环境
|
||||||
@@ -156,61 +139,6 @@ build() {
|
|||||||
echo -e "固件输出: ${PROJECT_OUTPUT_DIR}"
|
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"
|
|
||||||
|
|
||||||
# 第一层:检查格式,必须是4段数字
|
|
||||||
echo "$ip" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' || return 1
|
|
||||||
|
|
||||||
# 第二层:检查每段范围
|
|
||||||
echo "$ip" | awk -F. '
|
|
||||||
$1>=0 && $1<=255 &&
|
|
||||||
$2>=0 && $2<=255 &&
|
|
||||||
$3>=0 && $3<=255 &&
|
|
||||||
$4>=0 && $4<=255
|
|
||||||
' | grep -q . || return 1
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
project_dir="$(cd "$(dirname "$0")" && pwd)"
|
|
||||||
cd "$project_dir"
|
|
||||||
|
|
||||||
# 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号
|
# 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号
|
||||||
default_version="25.12.1"
|
default_version="25.12.1"
|
||||||
@@ -220,8 +148,32 @@ version=$(ask_input "请输入 ImmortalWrt 版本" "$default_version")
|
|||||||
default_lan_ip="192.168.1.1"
|
default_lan_ip="192.168.1.1"
|
||||||
lan_ip=$(input_lan_ip "$default_lan_ip")
|
lan_ip=$(input_lan_ip "$default_lan_ip")
|
||||||
|
|
||||||
|
# =============================================================
|
||||||
|
# 插件包列表
|
||||||
|
# - 前面加 - 表示从固件中移除该包,例如 -dnsmasq
|
||||||
|
# - 每行一个,方便增删注释
|
||||||
|
# =============================================================
|
||||||
|
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[@]}") # 动态拼接成字符串
|
||||||
|
|
||||||
|
# 进入项目根目
|
||||||
|
project_dir="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
cd "$project_dir"
|
||||||
|
|
||||||
install_dependencies
|
install_dependencies
|
||||||
|
|
||||||
builder_dir="$(download_imagebuilder "$version")"
|
builder_dir="$(download_imagebuilder "$version")"
|
||||||
|
|
||||||
build $builder_dir $lan_ip
|
build "$builder_dir" "$lan_ip" "$packages"
|
||||||
+43
-88
@@ -1,10 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
install_dependencies() {
|
source common.sh
|
||||||
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() {
|
download_imagebuilder() {
|
||||||
local version="$1"
|
local version="$1"
|
||||||
@@ -32,24 +29,7 @@ download_imagebuilder() {
|
|||||||
echo "$(pwd)/$folder"
|
echo "$(pwd)/$folder"
|
||||||
}
|
}
|
||||||
|
|
||||||
# =============================================================
|
|
||||||
# 交互输入函数
|
|
||||||
# 参数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
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
# =============================================================
|
# =============================================================
|
||||||
@@ -65,11 +45,16 @@ build() {
|
|||||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
BUILDER_DIR="$1"
|
BUILDER_DIR="$1"
|
||||||
|
|
||||||
# ────────────────────────────────────────────
|
# =============================================================
|
||||||
# lan口ip
|
# lan口ip
|
||||||
# ────────────────────────────────────────────
|
# =============================================================
|
||||||
LAN_IP=${2}
|
LAN_IP=${2}
|
||||||
|
|
||||||
|
# =============================================================
|
||||||
|
# 插件包列表
|
||||||
|
# =============================================================
|
||||||
|
PACKAGES=${3}
|
||||||
|
|
||||||
# =============================================================
|
# =============================================================
|
||||||
# 固件输出目录
|
# 固件输出目录
|
||||||
# =============================================================
|
# =============================================================
|
||||||
@@ -81,25 +66,6 @@ build() {
|
|||||||
# =============================================================
|
# =============================================================
|
||||||
EXTRA_IMAGE_NAME="newifi3"
|
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[@]}")
|
|
||||||
|
|
||||||
# =============================================================
|
# =============================================================
|
||||||
# 颜色输出
|
# 颜色输出
|
||||||
# =============================================================
|
# =============================================================
|
||||||
@@ -121,14 +87,6 @@ build() {
|
|||||||
|
|
||||||
mkdir -p "$FILES_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 目录(如果存在)
|
# 复制自定义 files 目录(如果存在)
|
||||||
@@ -137,6 +95,15 @@ build() {
|
|||||||
cp -rf "${SCRIPT_DIR}/files/." "$BUILDER_DIR/files/"
|
cp -rf "${SCRIPT_DIR}/files/." "$BUILDER_DIR/files/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 如果存在 LAN IP 设置脚本,则修改默认 LAN 地址
|
||||||
|
LAN_SETTING_FILE="${BUILDER_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
|
||||||
|
|
||||||
# =============================================================
|
# =============================================================
|
||||||
# 校验 ImageBuilder 环境
|
# 校验 ImageBuilder 环境
|
||||||
# =============================================================
|
# =============================================================
|
||||||
@@ -174,43 +141,6 @@ build() {
|
|||||||
echo -e "固件输出: ${PROJECT_OUTPUT_DIR}"
|
echo -e "固件输出: ${PROJECT_OUTPUT_DIR}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 获取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"
|
|
||||||
|
|
||||||
# 第一层:检查格式,必须是4段数字
|
|
||||||
echo "$ip" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' || return 1
|
|
||||||
|
|
||||||
# 第二层:检查每段范围
|
|
||||||
echo "$ip" | awk -F. '
|
|
||||||
$1>=0 && $1<=255 &&
|
|
||||||
$2>=0 && $2<=255 &&
|
|
||||||
$3>=0 && $3<=255 &&
|
|
||||||
$4>=0 && $4<=255
|
|
||||||
' | grep -q . || return 1
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
project_dir="$(cd "$(dirname "$0")" && pwd)"
|
|
||||||
cd "$project_dir"
|
|
||||||
|
|
||||||
# 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号
|
# 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号
|
||||||
default_version="25.12.1"
|
default_version="25.12.1"
|
||||||
@@ -220,6 +150,31 @@ version=$(ask_input "请输入 ImmortalWrt 版本" "$default_version")
|
|||||||
default_lan_ip="192.168.1.1"
|
default_lan_ip="192.168.1.1"
|
||||||
lan_ip=$(input_lan_ip "$default_lan_ip")
|
lan_ip=$(input_lan_ip "$default_lan_ip")
|
||||||
|
|
||||||
|
|
||||||
|
# =============================================================
|
||||||
|
# 插件包列表
|
||||||
|
# - 前面加 - 表示从固件中移除该包,例如 -dnsmasq
|
||||||
|
# - 每行一个,方便增删注释
|
||||||
|
# =============================================================
|
||||||
|
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[@]}") # 动态拼接成字符串
|
||||||
|
|
||||||
|
# 进入项目根目
|
||||||
|
project_dir="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
cd "$project_dir"
|
||||||
|
|
||||||
# 安装依赖
|
# 安装依赖
|
||||||
install_dependencies
|
install_dependencies
|
||||||
|
|
||||||
@@ -227,4 +182,4 @@ install_dependencies
|
|||||||
builder_dir="$(download_imagebuilder "$version")"
|
builder_dir="$(download_imagebuilder "$version")"
|
||||||
|
|
||||||
# 构建固件
|
# 构建固件
|
||||||
build "$builder_dir" $lan_ip
|
build "$builder_dir" "$lan_ip" "$packages"
|
||||||
@@ -1,11 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# 安装 Image Builder 构建所需依赖
|
source common.sh
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
# 下载并解压 FriendlyARM NanoPi R2S 的 Image Builder
|
# 下载并解压 FriendlyARM NanoPi R2S 的 Image Builder
|
||||||
# 参数 1: ImmortalWrt 版本号,例如 25.12.1
|
# 参数 1: ImmortalWrt 版本号,例如 25.12.1
|
||||||
@@ -77,42 +73,10 @@ build(){
|
|||||||
# ────────────────────────────────────────────
|
# ────────────────────────────────────────────
|
||||||
LAN_IP=${3}
|
LAN_IP=${3}
|
||||||
|
|
||||||
# =============================================================
|
# ────────────────────────────────────────────
|
||||||
# 插件包列表
|
# 插件包列表
|
||||||
# - 前面加 - 表示从固件中移除该包,例如 -dnsmasq
|
# ────────────────────────────────────────────
|
||||||
# - 每行一个,方便增删注释
|
PACKAGES="${4}"
|
||||||
# =============================================================
|
|
||||||
PKG_LIST=(
|
|
||||||
vim-full
|
|
||||||
nano-plus
|
|
||||||
bash
|
|
||||||
curl
|
|
||||||
shadow-chsh
|
|
||||||
openssh-sftp-server
|
|
||||||
luci-i18n-argon-config-zh-cn
|
|
||||||
luci-i18n-package-manager-zh-cn
|
|
||||||
luci-i18n-firewall-zh-cn
|
|
||||||
luci-i18n-arpbind-zh-cn
|
|
||||||
|
|
||||||
# 现代终端工具
|
|
||||||
ripgrep
|
|
||||||
diffutils
|
|
||||||
less
|
|
||||||
|
|
||||||
# 分区扩容
|
|
||||||
luci-i18n-diskman-zh-cn
|
|
||||||
cfdisk
|
|
||||||
resize2fs
|
|
||||||
e2fsprogs
|
|
||||||
losetup
|
|
||||||
|
|
||||||
# 代理插件
|
|
||||||
luci-i18n-daed-zh-cn
|
|
||||||
luci-i18n-homeproxy-zh-cn
|
|
||||||
sing-box
|
|
||||||
)
|
|
||||||
|
|
||||||
PACKAGES=$(printf "%s " "${PKG_LIST[@]}")
|
|
||||||
|
|
||||||
GREEN="\033[0;32m"
|
GREEN="\033[0;32m"
|
||||||
YELLOW="\033[1;33m"
|
YELLOW="\033[1;33m"
|
||||||
@@ -133,24 +97,22 @@ build(){
|
|||||||
|
|
||||||
cd "$BUILDER_DIR"
|
cd "$BUILDER_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
|
|
||||||
|
|
||||||
mkdir -p "$FILES_DIR"
|
mkdir -p "$FILES_DIR"
|
||||||
# 复制 files 目录下的自定义文件到 Image Builder 的 files 目录
|
# 复制 files 目录下的自定义文件到 Image Builder 的 files 目录
|
||||||
if [ -d "${SCRIPT_DIR}/files" ]; then
|
if [ -d "${SCRIPT_DIR}/files" ]; then
|
||||||
echo -e "${YELLOW}[提示] 复制自定义 files/ 目录到 Image Builder${NC}"
|
echo -e "${YELLOW}[提示] 复制自定义 files/ 目录到 Image Builder${NC}"
|
||||||
cp ${SCRIPT_DIR}/files/* $BUILDER_DIR/files/ -rf
|
cp ${SCRIPT_DIR}/files/* $BUILDER_DIR/files/ -rf
|
||||||
else
|
|
||||||
echo -e "${YELLOW}[提示] 未找到自定义 files/ 目录,跳过复制${NC}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 如果存在 LAN IP 设置脚本,则修改默认 LAN 地址
|
||||||
|
LAN_SETTING_FILE="${BUILDER_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
|
||||||
|
|
||||||
if [ ! -f "Makefile" ]; then
|
if [ ! -f "Makefile" ]; then
|
||||||
echo -e "${RED}[错误] 未找到 Makefile,请在 imagebuilder 根目录下运行本脚本!${NC}"
|
echo -e "${RED}[错误] 未找到 Makefile,请在 imagebuilder 根目录下运行本脚本!${NC}"
|
||||||
@@ -203,64 +165,6 @@ build(){
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# =============================================================
|
|
||||||
# 交互输入函数
|
|
||||||
# 参数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"
|
|
||||||
|
|
||||||
# 第一层:检查格式,必须是4段数字
|
|
||||||
echo "$ip" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' || return 1
|
|
||||||
|
|
||||||
# 第二层:检查每段范围
|
|
||||||
echo "$ip" | awk -F. '
|
|
||||||
$1>=0 && $1<=255 &&
|
|
||||||
$2>=0 && $2<=255 &&
|
|
||||||
$3>=0 && $3<=255 &&
|
|
||||||
$4>=0 && $4<=255
|
|
||||||
' | grep -q . || return 1
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# 项目根目录,保证从任意位置执行 r2s.sh 都能找到其他资源
|
|
||||||
project_dir="$(cd "$(dirname "$0")" && pwd)"
|
|
||||||
cd "$project_dir"
|
|
||||||
|
|
||||||
# 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号
|
# 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号
|
||||||
default_version="25.12.1"
|
default_version="25.12.1"
|
||||||
version=$(ask_input "请输入 ImmortalWrt 版本" "$default_version")
|
version=$(ask_input "请输入 ImmortalWrt 版本" "$default_version")
|
||||||
@@ -269,12 +173,52 @@ version=$(ask_input "请输入 ImmortalWrt 版本" "$default_version")
|
|||||||
default_rootfs_partsize="600"
|
default_rootfs_partsize="600"
|
||||||
rootfs_partsize=$(ask_input "请输入根分区大小(MB)" "$default_rootfs_partsize")
|
rootfs_partsize=$(ask_input "请输入根分区大小(MB)" "$default_rootfs_partsize")
|
||||||
|
|
||||||
|
# 项目根目录
|
||||||
|
project_dir="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
cd "$project_dir"
|
||||||
|
|
||||||
# lan口ip
|
# lan口ip
|
||||||
default_lan_ip="192.168.1.1"
|
default_lan_ip="192.168.1.1"
|
||||||
lan_ip=$(input_lan_ip "$default_lan_ip")
|
lan_ip=$(input_lan_ip "$default_lan_ip")
|
||||||
|
|
||||||
|
# =============================================================
|
||||||
|
# 插件包列表
|
||||||
|
# - 前面加 - 表示从固件中移除该包,例如 -dnsmasq
|
||||||
|
# - 每行一个,方便增删注释
|
||||||
|
# =============================================================
|
||||||
|
pkg_list=(
|
||||||
|
vim-full
|
||||||
|
nano-plus
|
||||||
|
bash
|
||||||
|
curl
|
||||||
|
shadow-chsh
|
||||||
|
openssh-sftp-server
|
||||||
|
luci-i18n-argon-config-zh-cn
|
||||||
|
luci-i18n-package-manager-zh-cn
|
||||||
|
luci-i18n-firewall-zh-cn
|
||||||
|
luci-i18n-arpbind-zh-cn
|
||||||
|
|
||||||
|
# 现代终端工具
|
||||||
|
ripgrep
|
||||||
|
diffutils
|
||||||
|
less
|
||||||
|
|
||||||
|
# 分区扩容
|
||||||
|
luci-i18n-diskman-zh-cn
|
||||||
|
cfdisk
|
||||||
|
resize2fs
|
||||||
|
e2fsprogs
|
||||||
|
losetup
|
||||||
|
|
||||||
|
# 代理插件
|
||||||
|
luci-i18n-daed-zh-cn
|
||||||
|
luci-i18n-homeproxy-zh-cn
|
||||||
|
sing-box
|
||||||
|
)
|
||||||
|
packages=$(printf "%s " "${pkg_list[@]}") # 动态拼接成字符串
|
||||||
|
|
||||||
install_dependencies
|
install_dependencies
|
||||||
|
|
||||||
builder_dir="$(download_imagebuilder "$version")"
|
builder_dir="$(download_imagebuilder "$version")"
|
||||||
|
|
||||||
build $builder_dir $rootfs_partsize $lan_ip
|
build "$builder_dir" "$rootfs_partsize" "$lan_ip" "$packages"
|
||||||
@@ -1,11 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# 安装 Image Builder 构建所需依赖
|
source common.sh
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
# 下载并解压 x86-64 的 Image Builder
|
# 下载并解压 x86-64 的 Image Builder
|
||||||
# 参数 1: ImmortalWrt 版本号,例如 25.12.1
|
# 参数 1: ImmortalWrt 版本号,例如 25.12.1
|
||||||
@@ -74,52 +70,12 @@ build(){
|
|||||||
# ────────────────────────────────────────────
|
# ────────────────────────────────────────────
|
||||||
# lan口ip
|
# lan口ip
|
||||||
# ────────────────────────────────────────────
|
# ────────────────────────────────────────────
|
||||||
LAN_IP=${3}
|
LAN_IP="${3}"
|
||||||
|
|
||||||
# =============================================================
|
# ────────────────────────────────────────────
|
||||||
# 插件包列表
|
# 插件包列表字符串
|
||||||
# - 前面加 - 表示从固件中移除该包,例如 -dnsmasq
|
# ────────────────────────────────────────────
|
||||||
# - 每行一个,方便增删注释
|
PACKAGES="${4}"
|
||||||
# =============================================================
|
|
||||||
PKG_LIST=(
|
|
||||||
-dropbear
|
|
||||||
openssh-server
|
|
||||||
|
|
||||||
vim-full
|
|
||||||
nano-plus
|
|
||||||
bash
|
|
||||||
curl
|
|
||||||
shadow-chsh
|
|
||||||
openssh-sftp-server
|
|
||||||
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
|
|
||||||
|
|
||||||
# 现代终端工具
|
|
||||||
ripgrep
|
|
||||||
diffutils
|
|
||||||
less
|
|
||||||
eza
|
|
||||||
fish
|
|
||||||
|
|
||||||
# 分区扩容
|
|
||||||
luci-i18n-diskman-zh-cn
|
|
||||||
cfdisk
|
|
||||||
resize2fs
|
|
||||||
e2fsprogs
|
|
||||||
losetup
|
|
||||||
|
|
||||||
# 代理插件
|
|
||||||
luci-i18n-daed-zh-cn
|
|
||||||
luci-i18n-homeproxy-zh-cn
|
|
||||||
sing-box
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
# 动态拼接成字符串
|
|
||||||
PACKAGES=$(printf "%s " "${PKG_LIST[@]}")
|
|
||||||
|
|
||||||
|
|
||||||
# 颜色输出
|
# 颜色输出
|
||||||
@@ -147,14 +103,6 @@ build(){
|
|||||||
mkdir -p "$FILES_DIR"
|
mkdir -p "$FILES_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 如果存在 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 目录下的自定义文件到 Image Builder 的 files 目录
|
# 复制 files 目录下的自定义文件到 Image Builder 的 files 目录
|
||||||
if [ -d "${SCRIPT_DIR}/files" ]; then
|
if [ -d "${SCRIPT_DIR}/files" ]; then
|
||||||
@@ -164,6 +112,15 @@ build(){
|
|||||||
echo -e "${YELLOW}[提示] 未找到自定义 files/ 目录,跳过复制${NC}"
|
echo -e "${YELLOW}[提示] 未找到自定义 files/ 目录,跳过复制${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 如果存在 LAN IP 设置脚本,则修改默认 LAN 地址
|
||||||
|
LAN_SETTING_FILE="${BUILDER_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
|
||||||
|
|
||||||
# 修改.config文件, 不构建以下格式固件
|
# 修改.config文件, 不构建以下格式固件
|
||||||
sed -i \
|
sed -i \
|
||||||
-e 's/^CONFIG_ISO_IMAGES=y/# CONFIG_ISO_IMAGES is not set/' \
|
-e 's/^CONFIG_ISO_IMAGES=y/# CONFIG_ISO_IMAGES is not set/' \
|
||||||
@@ -191,35 +148,8 @@ build(){
|
|||||||
EXTRA_IMAGE_NAME="$EXTRA_IMAGE_NAME" \
|
EXTRA_IMAGE_NAME="$EXTRA_IMAGE_NAME" \
|
||||||
${ROOTFS_PARTSIZE:+ROOTFS_PARTSIZE="$ROOTFS_PARTSIZE"} # ROOTFS_PARTSIZE 参数不为空才添加
|
${ROOTFS_PARTSIZE:+ROOTFS_PARTSIZE="$ROOTFS_PARTSIZE"} # ROOTFS_PARTSIZE 参数不为空才添加
|
||||||
|
|
||||||
# 构建结果判断
|
# 构建失败
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
if [ "$OUTPUT_DIR" != "$PROJECT_OUTPUT_DIR" ]; then
|
|
||||||
if [ ! -d "$OUTPUT_DIR" ]; then
|
|
||||||
echo -e "${RED} 未找到构建输出目录: ${OUTPUT_DIR}${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -e "$PROJECT_OUTPUT_DIR" ]; then
|
|
||||||
BACKUP_OUTPUT_DIR="${PROJECT_OUTPUT_DIR}.bak.$(date +%Y%m%d%H%M%S)"
|
|
||||||
if ! mv "$PROJECT_OUTPUT_DIR" "$BACKUP_OUTPUT_DIR"; then
|
|
||||||
echo -e "${RED} 备份已有输出目录失败: ${PROJECT_OUTPUT_DIR}${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo -e "${YELLOW} 已有输出目录,已备份到: ${BACKUP_OUTPUT_DIR}${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! mv "$OUTPUT_DIR" "$PROJECT_OUTPUT_DIR"; then
|
|
||||||
echo -e "${RED} 移动构建输出目录失败: ${OUTPUT_DIR} -> ${PROJECT_OUTPUT_DIR}${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${GREEN}========================================${NC}"
|
|
||||||
echo -e "${GREEN} 构建成功!${NC}"
|
|
||||||
echo -e "${GREEN} 固件路径: ${PROJECT_OUTPUT_DIR}${NC}"
|
|
||||||
echo -e "${GREEN}========================================${NC}"
|
|
||||||
else
|
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${RED}========================================${NC}"
|
echo -e "${RED}========================================${NC}"
|
||||||
echo -e "${RED} 构建失败,请检查上方错误日志${NC}"
|
echo -e "${RED} 构建失败,请检查上方错误日志${NC}"
|
||||||
@@ -227,65 +157,37 @@ build(){
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
# 构建成功
|
||||||
|
if [ "$OUTPUT_DIR" != "$PROJECT_OUTPUT_DIR" ]; then
|
||||||
|
if [ ! -d "$OUTPUT_DIR" ]; then
|
||||||
|
echo -e "${RED} 未找到构建输出目录: ${OUTPUT_DIR}${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# =============================================================
|
if [ -e "$PROJECT_OUTPUT_DIR" ]; then
|
||||||
# 交互输入函数
|
BACKUP_OUTPUT_DIR="${PROJECT_OUTPUT_DIR}.bak.$(date +%Y%m%d%H%M%S)"
|
||||||
# 参数1: 提示信息
|
|
||||||
# 参数2: 默认值
|
|
||||||
# 返回: 用户输入值,直接回车返回默认值
|
|
||||||
# =============================================================
|
|
||||||
ask_input() {
|
|
||||||
local prompt="$1"
|
|
||||||
local default="$2"
|
|
||||||
|
|
||||||
read -p "${prompt} [ 默认: ${default} ]: " value
|
if ! mv "$PROJECT_OUTPUT_DIR" "$BACKUP_OUTPUT_DIR"; then
|
||||||
|
echo -e "${RED} 备份已有输出目录失败: ${PROJECT_OUTPUT_DIR}${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "$value" ]; then
|
echo -e "${YELLOW} 已有输出目录,已备份到: ${BACKUP_OUTPUT_DIR}${NC}"
|
||||||
echo "$default"
|
fi
|
||||||
else
|
|
||||||
echo "$value"
|
if ! mv "$OUTPUT_DIR" "$PROJECT_OUTPUT_DIR"; then
|
||||||
|
echo -e "${RED} 移动构建输出目录失败: ${OUTPUT_DIR} -> ${PROJECT_OUTPUT_DIR}${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}========================================${NC}"
|
||||||
|
echo -e "${GREEN} 构建成功!${NC}"
|
||||||
|
echo -e "${GREEN} 固件路径: ${PROJECT_OUTPUT_DIR}${NC}"
|
||||||
|
echo -e "${GREEN}========================================${NC}"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 获取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"
|
|
||||||
|
|
||||||
# 第一层:检查格式,必须是4段数字
|
|
||||||
echo "$ip" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' || return 1
|
|
||||||
|
|
||||||
# 第二层:检查每段范围
|
|
||||||
echo "$ip" | awk -F. '
|
|
||||||
$1>=0 && $1<=255 &&
|
|
||||||
$2>=0 && $2<=255 &&
|
|
||||||
$3>=0 && $3<=255 &&
|
|
||||||
$4>=0 && $4<=255
|
|
||||||
' | grep -q . || return 1
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# 项目根目录,用来保证从任意位置执行 main.sh 都能找到其他脚本
|
|
||||||
project_dir="$(cd "$(dirname "$0")" && pwd)"
|
|
||||||
cd "$project_dir"
|
|
||||||
|
|
||||||
# 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号
|
# 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号
|
||||||
default_version="25.12.1"
|
default_version="25.12.1"
|
||||||
@@ -298,7 +200,52 @@ rootfs_partsize=$(ask_input "请输入根分区大小(MB)" "$default_rootfs_part
|
|||||||
# lan口ip
|
# lan口ip
|
||||||
default_lan_ip="192.168.1.1"
|
default_lan_ip="192.168.1.1"
|
||||||
lan_ip=$(input_lan_ip "$default_lan_ip")
|
lan_ip=$(input_lan_ip "$default_lan_ip")
|
||||||
echo $lan_ip
|
|
||||||
|
# =============================================================
|
||||||
|
# 插件包列表
|
||||||
|
# - 前面加 - 表示从固件中移除该包,例如 -dnsmasq
|
||||||
|
# - 每行一个,方便增删注释
|
||||||
|
# =============================================================
|
||||||
|
pkg_list=(
|
||||||
|
-dropbear
|
||||||
|
openssh-server
|
||||||
|
|
||||||
|
vim-full
|
||||||
|
nano-plus
|
||||||
|
bash
|
||||||
|
curl
|
||||||
|
shadow-chsh
|
||||||
|
openssh-sftp-server
|
||||||
|
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
|
||||||
|
|
||||||
|
# 现代终端工具
|
||||||
|
ripgrep
|
||||||
|
diffutils
|
||||||
|
less
|
||||||
|
eza
|
||||||
|
fish
|
||||||
|
# 分区扩容
|
||||||
|
luci-i18n-diskman-zh-cn
|
||||||
|
cfdisk
|
||||||
|
resize2fs
|
||||||
|
e2fsprogs
|
||||||
|
losetup
|
||||||
|
|
||||||
|
# 代理插件
|
||||||
|
luci-i18n-daed-zh-cn
|
||||||
|
luci-i18n-homeproxy-zh-cn
|
||||||
|
sing-box
|
||||||
|
|
||||||
|
)
|
||||||
|
packages=$(printf "%s " "${pkg_list[@]}") # 动态拼接成字符串
|
||||||
|
|
||||||
|
# 进入项目根目
|
||||||
|
project_dir="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
cd "$project_dir"
|
||||||
|
|
||||||
# 安装依赖
|
# 安装依赖
|
||||||
install_dependencies
|
install_dependencies
|
||||||
@@ -307,4 +254,4 @@ install_dependencies
|
|||||||
builder_dir="$(download_imagebuilder "$version")"
|
builder_dir="$(download_imagebuilder "$version")"
|
||||||
|
|
||||||
# 构建固件
|
# 构建固件
|
||||||
build $builder_dir $rootfs_partsize $lan_ip
|
build "$builder_dir" "$rootfs_partsize" "$lan_ip" "$packages"
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
source $(pwd)/x86-64.sh
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
|
||||||
|
cd ${SCRIPT_DIR}
|
||||||
|
|
||||||
|
# 如果img-installer文件夹不存在, 下载img-installer
|
||||||
|
if [ ! -d "${SCRIPT_DIR}/img-installer" ]; then
|
||||||
|
git clone https://github.com/wukongdaily/img-installer.git
|
||||||
|
fi
|
||||||
|
chmod +x "${SCRIPT_DIR}/img-installer/custom.sh"
|
||||||
|
chmod +x "${SCRIPT_DIR}/img-installer/supportFiles/custom/build.sh"
|
||||||
|
|
||||||
|
# 构建ISO固件
|
||||||
|
PROJECT_OUTPUT_DIR="${SCRIPT_DIR}/x86-64_output"
|
||||||
|
TARGET_FILE=$(ls ${PROJECT_OUTPUT_DIR}/*ext4-combined.img.gz)
|
||||||
|
INPUT_FILE=${SCRIPT_DIR}/img-installer/input.img.gz
|
||||||
|
cp $TARGET_FILE $INPUT_FILE
|
||||||
|
cd ${SCRIPT_DIR}/img-installer
|
||||||
|
bash autobuild/autobuild.sh "$INPUT_FILE"
|
||||||
|
mv ${SCRIPT_DIR}/img-installer/output/custom-installer-x86_64.iso ${PROJECT_OUTPUT_DIR}
|
||||||
|
echo ""
|
||||||
|
echo 构建 ISO 镜像成功
|
||||||
Reference in New Issue
Block a user