mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 09:10:30 +08:00
玩客云首次启动生成随机 mac 地址 #113 自签 SSL 证书修改为首次启动时生成,增强安全性 优化整合包镜像构建脚本和 Dockerfile 修复 docker 启动脚本错误
169 lines
4.2 KiB
Bash
Executable File
169 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# --- 配置 ---
|
|
# 允许通过环境变量覆盖默认路径
|
|
SRCPATH="${SRCPATH:-/mnt/nfs/lfs/src}"
|
|
BOOTFS="${BOOTFS:-/tmp/bootfs}"
|
|
ROOTFS="${ROOTFS:-/tmp/rootfs}"
|
|
OUTPUTDIR="${OUTPUTDIR:-/mnt/nfs/lfs/src/output}"
|
|
TMPDIR="${TMPDIR:-$SRCPATH/tmp}"
|
|
|
|
export LC_ALL=C
|
|
|
|
# 全局变量
|
|
LOOPDEV=""
|
|
ROOTFS_MOUNTED=0
|
|
BOOTFS_MOUNTED=0
|
|
PROC_MOUNTED=0
|
|
SYS_MOUNTED=0
|
|
DEV_MOUNTED=0
|
|
DOCKER_CONTAINER_NAME="to_build_rootfs_$$"
|
|
PREBUILT_DIR="/tmp/prebuilt_binaries"
|
|
|
|
# --- 引入模块化脚本 ---
|
|
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
|
|
source "$SCRIPT_DIR/functions/common.sh"
|
|
source "$SCRIPT_DIR/functions/devices.sh"
|
|
source "$SCRIPT_DIR/functions/install.sh"
|
|
source "$SCRIPT_DIR/functions/packaging.sh"
|
|
|
|
# 获取日期与Git版本
|
|
GIT_COMMIT_ID=$(get_git_commit_id)
|
|
DATE=$(date +%y%m%d)
|
|
if [ -n "$GIT_COMMIT_ID" ]; then
|
|
DATE="${DATE}-${GIT_COMMIT_ID}"
|
|
fi
|
|
|
|
# --- 注册清理函数 ---
|
|
# 在脚本退出、收到错误信号、中断信号、终止信号时执行 cleanup
|
|
trap cleanup EXIT ERR INT TERM
|
|
|
|
# --- 构建流程函数 ---
|
|
|
|
build_target() {
|
|
local target="$1"
|
|
local build_time=$(date "+%Y-%m-%d %H:%M:%S")
|
|
echo "=================================================="
|
|
echo "信息:构建目标: $target"
|
|
echo "信息:构建时间: $build_time"
|
|
echo "=================================================="
|
|
|
|
# 设置全局变量,供后续函数使用
|
|
TARGET_DEVICE_NAME="$target"
|
|
NEED_PREPARE_DNS=false # 默认不需要准备 DNS
|
|
|
|
case "$target" in
|
|
onecloud)
|
|
onecloud_rootfs
|
|
local arch="armhf"
|
|
local device_type="gpio"
|
|
local network_type="systemd-networkd"
|
|
;;
|
|
cumebox2)
|
|
cumebox2_rootfs
|
|
local arch="aarch64"
|
|
local device_type="video1"
|
|
local network_type="" # 默认 NetworkManager
|
|
NEED_PREPARE_DNS=true
|
|
;;
|
|
chainedbox)
|
|
chainedbox_rootfs_and_fix_dtb
|
|
local arch="aarch64"
|
|
local device_type="video1"
|
|
local network_type=""
|
|
NEED_PREPARE_DNS=true
|
|
;;
|
|
vm)
|
|
vm_rootfs
|
|
local arch="amd64"
|
|
local device_type=""
|
|
local network_type=""
|
|
NEED_PREPARE_DNS=true
|
|
;;
|
|
e900v22c)
|
|
e900v22c_rootfs
|
|
local arch="aarch64"
|
|
local device_type="video1"
|
|
local network_type=""
|
|
NEED_PREPARE_DNS=true
|
|
;;
|
|
octopus-flanet)
|
|
octopus_flanet_rootfs
|
|
local arch="aarch64"
|
|
local device_type="video1"
|
|
local network_type=""
|
|
NEED_PREPARE_DNS=true
|
|
;;
|
|
*)
|
|
echo "错误:未知或不支持的目标 '$target'" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
mount_rootfs
|
|
|
|
install_and_configure_kvmd "$arch" "$device_type" "$network_type"
|
|
|
|
write_meta "$target"
|
|
|
|
unmount_all
|
|
|
|
case "$target" in
|
|
onecloud)
|
|
pack_img_onecloud
|
|
;;
|
|
vm)
|
|
pack_img "Vm"
|
|
;;
|
|
cumebox2)
|
|
pack_img "Cumebox2"
|
|
;;
|
|
chainedbox)
|
|
pack_img "Chainedbox"
|
|
;;
|
|
e900v22c)
|
|
pack_img "E900v22c"
|
|
;;
|
|
octopus-flanet)
|
|
pack_img "Octopus-Flanet"
|
|
;;
|
|
*)
|
|
echo "错误:未知的打包类型 for '$target'" >&2
|
|
;;
|
|
esac
|
|
|
|
echo "=================================================="
|
|
echo "信息:目标 $target 构建完成!"
|
|
echo "=================================================="
|
|
}
|
|
|
|
# --- 主逻辑 ---
|
|
|
|
# 检查是否提供了目标参数
|
|
if [ -z "$1" ]; then
|
|
echo "用法: $0 <target|all>"
|
|
echo "可用目标: onecloud, cumebox2, chainedbox, vm, e900v22c, octopus-flanet"
|
|
exit 1
|
|
fi
|
|
|
|
# 设置脚本立即退出模式
|
|
set -eo pipefail
|
|
|
|
# 检查必要的外部工具
|
|
check_required_tools "$1"
|
|
|
|
# 执行构建
|
|
if [ "$1" = "all" ]; then
|
|
echo "信息:开始构建所有目标..."
|
|
build_target "onecloud"
|
|
build_target "cumebox2"
|
|
build_target "chainedbox"
|
|
build_target "vm"
|
|
build_target "e900v22c"
|
|
build_target "octopus-flanet"
|
|
echo "信息:所有目标构建完成。"
|
|
else
|
|
build_target "$1"
|
|
fi
|
|
|
|
exit 0 |