feat(cloner): Add OpenWrt version selection and package profiles to image builder
- Add --version and --profile CLI options to secubox-cloner build command - Add versions command to list available OpenWrt releases (24.10.5, 24.10.0, 23.05.5, 23.05.4) - Add package profiles: slim (minimal), core (mesh essentials), full (clone current device) - Add list_versions and list_build_profiles RPCD methods for LuCI - Update build_image RPCD to accept version and profile parameters - Update ACL permissions for new read methods Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
b0b27be82f
commit
c5c488b7cb
@ -3522,3 +3522,23 @@ git checkout HEAD -- index.html
|
|||||||
- `handleGenerateBulkTokens()`, `handleCopyAllTokens()`, `refreshFactory()`
|
- `handleGenerateBulkTokens()`, `handleCopyAllTokens()`, `refreshFactory()`
|
||||||
- **Polling:** Factory data included in 5-second refresh when on Factory tab
|
- **Polling:** Factory data included in 5-second refresh when on Factory tab
|
||||||
- **UI Pattern:** KISS theme components (stat boxes, cards, tables, buttons)
|
- **UI Pattern:** KISS theme components (stat boxes, cards, tables, buttons)
|
||||||
|
|
||||||
|
29. **Cloner Image Builder Version/Profile Support (2026-02-25)**
|
||||||
|
- Enhanced `secubox-cloner` CLI with OpenWrt version selection and package profiles
|
||||||
|
- **New CLI Options:**
|
||||||
|
- `--version VER`: Select OpenWrt version (24.10.5, 24.10.0, 23.05.5, 23.05.4)
|
||||||
|
- `--profile PROFILE`: Select package profile (slim, core, full)
|
||||||
|
- `secubox-cloner versions`: List available versions and profiles
|
||||||
|
- **Package Profiles:**
|
||||||
|
- `slim`: Minimal OpenWrt (LuCI + network essentials only)
|
||||||
|
- `core`: Slim + SecuBox mesh (master-link, p2p, secubox-core)
|
||||||
|
- `full`: Clone all installed SecuBox packages from current device
|
||||||
|
- **New RPCD Methods:**
|
||||||
|
- `list_versions`: Returns available OpenWrt versions with latest flag
|
||||||
|
- `list_build_profiles`: Returns available package profiles with descriptions
|
||||||
|
- `build_image`: Now accepts `version` and `profile` parameters
|
||||||
|
- **Files Modified:**
|
||||||
|
- `secubox-core/root/usr/sbin/secubox-cloner`: Added version/profile parsing and build_via_asu profile logic
|
||||||
|
- `luci-app-cloner/root/usr/libexec/rpcd/luci.cloner`: Added list_versions, list_build_profiles, updated build_image
|
||||||
|
- `luci-app-cloner/root/usr/share/rpcd/acl.d/luci-app-cloner.json`: Added permissions for new methods
|
||||||
|
- **Tested:** CLI help, versions command, RPCD methods via ubus all working
|
||||||
|
|||||||
@ -234,23 +234,30 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
do_build_image() {
|
do_build_image() {
|
||||||
local input device_type
|
local input device_type version profile
|
||||||
|
|
||||||
read input
|
read input
|
||||||
device_type=$(echo "$input" | jsonfilter -e '@.device_type' 2>/dev/null)
|
device_type=$(echo "$input" | jsonfilter -e '@.device_type' 2>/dev/null)
|
||||||
|
version=$(echo "$input" | jsonfilter -e '@.version' 2>/dev/null)
|
||||||
|
profile=$(echo "$input" | jsonfilter -e '@.profile' 2>/dev/null)
|
||||||
|
|
||||||
|
# Defaults
|
||||||
|
[ -z "$version" ] && version="24.10.5"
|
||||||
|
[ -z "$profile" ] && profile="slim"
|
||||||
|
|
||||||
json_init
|
json_init
|
||||||
|
|
||||||
if [ -x /usr/sbin/secubox-cloner ]; then
|
if [ -x /usr/sbin/secubox-cloner ]; then
|
||||||
if [ -n "$device_type" ]; then
|
local cmd_args=""
|
||||||
(/usr/sbin/secubox-cloner build "$device_type" 2>&1 > /tmp/cloner-build.log) &
|
[ -n "$device_type" ] && cmd_args="$cmd_args --device $device_type"
|
||||||
json_add_boolean "success" 1
|
cmd_args="$cmd_args --version $version --profile $profile"
|
||||||
json_add_string "message" "Build started for $device_type"
|
|
||||||
else
|
(/usr/sbin/secubox-cloner build $cmd_args 2>&1 > /tmp/cloner-build.log) &
|
||||||
(/usr/sbin/secubox-cloner build 2>&1 > /tmp/cloner-build.log) &
|
json_add_boolean "success" 1
|
||||||
json_add_boolean "success" 1
|
json_add_string "message" "Build started: ${device_type:-auto} / $version / $profile"
|
||||||
json_add_string "message" "Build started for current device"
|
json_add_string "device" "${device_type:-auto}"
|
||||||
fi
|
json_add_string "version" "$version"
|
||||||
|
json_add_string "profile" "$profile"
|
||||||
else
|
else
|
||||||
json_add_boolean "success" 0
|
json_add_boolean "success" 0
|
||||||
json_add_string "message" "secubox-cloner not installed"
|
json_add_string "message" "secubox-cloner not installed"
|
||||||
@ -291,6 +298,68 @@ do_list_devices() {
|
|||||||
json_dump
|
json_dump
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_list_versions() {
|
||||||
|
json_init
|
||||||
|
json_add_array "versions"
|
||||||
|
|
||||||
|
json_add_object ""
|
||||||
|
json_add_string "id" "24.10.5"
|
||||||
|
json_add_string "name" "OpenWrt 24.10.5"
|
||||||
|
json_add_boolean "latest" 1
|
||||||
|
json_close_object
|
||||||
|
|
||||||
|
json_add_object ""
|
||||||
|
json_add_string "id" "24.10.0"
|
||||||
|
json_add_string "name" "OpenWrt 24.10.0"
|
||||||
|
json_add_boolean "latest" 0
|
||||||
|
json_close_object
|
||||||
|
|
||||||
|
json_add_object ""
|
||||||
|
json_add_string "id" "23.05.5"
|
||||||
|
json_add_string "name" "OpenWrt 23.05.5 (LTS)"
|
||||||
|
json_add_boolean "latest" 0
|
||||||
|
json_close_object
|
||||||
|
|
||||||
|
json_add_object ""
|
||||||
|
json_add_string "id" "23.05.4"
|
||||||
|
json_add_string "name" "OpenWrt 23.05.4 (LTS)"
|
||||||
|
json_add_boolean "latest" 0
|
||||||
|
json_close_object
|
||||||
|
|
||||||
|
json_close_array
|
||||||
|
json_add_string "default" "24.10.5"
|
||||||
|
json_dump
|
||||||
|
}
|
||||||
|
|
||||||
|
do_list_build_profiles() {
|
||||||
|
json_init
|
||||||
|
json_add_array "profiles"
|
||||||
|
|
||||||
|
json_add_object ""
|
||||||
|
json_add_string "id" "slim"
|
||||||
|
json_add_string "name" "Slim"
|
||||||
|
json_add_string "description" "Minimal OpenWrt (LuCI + network essentials)"
|
||||||
|
json_add_boolean "default" 1
|
||||||
|
json_close_object
|
||||||
|
|
||||||
|
json_add_object ""
|
||||||
|
json_add_string "id" "core"
|
||||||
|
json_add_string "name" "Core"
|
||||||
|
json_add_string "description" "Slim + SecuBox mesh (master-link, p2p)"
|
||||||
|
json_add_boolean "default" 0
|
||||||
|
json_close_object
|
||||||
|
|
||||||
|
json_add_object ""
|
||||||
|
json_add_string "id" "full"
|
||||||
|
json_add_string "name" "Full"
|
||||||
|
json_add_string "description" "All SecuBox packages from current device"
|
||||||
|
json_add_boolean "default" 0
|
||||||
|
json_close_object
|
||||||
|
|
||||||
|
json_close_array
|
||||||
|
json_dump
|
||||||
|
}
|
||||||
|
|
||||||
do_tftp_start() {
|
do_tftp_start() {
|
||||||
json_init
|
json_init
|
||||||
|
|
||||||
@ -1502,6 +1571,8 @@ case "$1" in
|
|||||||
echo '"list_tokens":{},'
|
echo '"list_tokens":{},'
|
||||||
echo '"list_clones":{},'
|
echo '"list_clones":{},'
|
||||||
echo '"list_devices":{},'
|
echo '"list_devices":{},'
|
||||||
|
echo '"list_versions":{},'
|
||||||
|
echo '"list_build_profiles":{},'
|
||||||
echo '"build_progress":{},'
|
echo '"build_progress":{},'
|
||||||
echo '"build_log":{"lines":"Number","offset":"Number"},'
|
echo '"build_log":{"lines":"Number","offset":"Number"},'
|
||||||
echo '"serial_ports":{},'
|
echo '"serial_ports":{},'
|
||||||
@ -1516,7 +1587,7 @@ case "$1" in
|
|||||||
echo '"image_details":{"name":"String"},'
|
echo '"image_details":{"name":"String"},'
|
||||||
echo '"image_rename":{"old_name":"String","new_name":"String"},'
|
echo '"image_rename":{"old_name":"String","new_name":"String"},'
|
||||||
echo '"generate_token":{"auto_approve":"Boolean"},'
|
echo '"generate_token":{"auto_approve":"Boolean"},'
|
||||||
echo '"build_image":{"device_type":"String"},'
|
echo '"build_image":{"device_type":"String","version":"String","profile":"String"},'
|
||||||
echo '"tftp_start":{},'
|
echo '"tftp_start":{},'
|
||||||
echo '"tftp_stop":{},'
|
echo '"tftp_stop":{},'
|
||||||
echo '"delete_token":{"token":"String"},'
|
echo '"delete_token":{"token":"String"},'
|
||||||
@ -1550,6 +1621,8 @@ case "$1" in
|
|||||||
list_tokens) do_list_tokens ;;
|
list_tokens) do_list_tokens ;;
|
||||||
list_clones) do_list_clones ;;
|
list_clones) do_list_clones ;;
|
||||||
list_devices) do_list_devices ;;
|
list_devices) do_list_devices ;;
|
||||||
|
list_versions) do_list_versions ;;
|
||||||
|
list_build_profiles) do_list_build_profiles ;;
|
||||||
build_progress) do_build_progress ;;
|
build_progress) do_build_progress ;;
|
||||||
build_log) do_build_log ;;
|
build_log) do_build_log ;;
|
||||||
serial_ports) do_serial_ports ;;
|
serial_ports) do_serial_ports ;;
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
"ubus": {
|
"ubus": {
|
||||||
"luci.cloner": [
|
"luci.cloner": [
|
||||||
"status", "list_images", "list_tokens", "list_clones", "list_devices",
|
"status", "list_images", "list_tokens", "list_clones", "list_devices",
|
||||||
|
"list_versions", "list_build_profiles",
|
||||||
"build_progress", "build_log", "serial_ports", "serial_read",
|
"build_progress", "build_log", "serial_ports", "serial_read",
|
||||||
"history_list", "storage_info", "image_details",
|
"history_list", "storage_info", "image_details",
|
||||||
"list_remotes", "remote_status", "scan_network",
|
"list_remotes", "remote_status", "scan_network",
|
||||||
|
|||||||
@ -6,7 +6,11 @@
|
|||||||
# Cloned devices auto-resize root and join mesh as peers.
|
# Cloned devices auto-resize root and join mesh as peers.
|
||||||
#
|
#
|
||||||
# Usage:
|
# Usage:
|
||||||
# secubox-cloner build [--device TYPE] [--resize SIZE] Build clone image
|
# secubox-cloner build [OPTIONS] Build clone image via ASU API
|
||||||
|
# --device TYPE Device type (mochabin, x86-64, etc.)
|
||||||
|
# --version VER OpenWrt version (24.10.5, 24.10.0, snapshot)
|
||||||
|
# --profile PROFILE Package profile (slim, core, full)
|
||||||
|
# secubox-cloner versions List available OpenWrt versions
|
||||||
# secubox-cloner serve [--start|--stop] Manage TFTP clone server
|
# secubox-cloner serve [--start|--stop] Manage TFTP clone server
|
||||||
# secubox-cloner devices List supported device types
|
# secubox-cloner devices List supported device types
|
||||||
# secubox-cloner token [--auto-approve] Generate clone join token
|
# secubox-cloner token [--auto-approve] Generate clone join token
|
||||||
@ -14,8 +18,17 @@
|
|||||||
# secubox-cloner list List pending/joined clones
|
# secubox-cloner list List pending/joined clones
|
||||||
# secubox-cloner export [FILE] Export clone image to file
|
# secubox-cloner export [FILE] Export clone image to file
|
||||||
#
|
#
|
||||||
|
# Package Profiles:
|
||||||
|
# slim - Minimal OpenWrt (LuCI + network essentials only)
|
||||||
|
# core - Slim + SecuBox core (mesh, master-link, p2p)
|
||||||
|
# full - Current device's installed SecuBox packages
|
||||||
|
#
|
||||||
|
|
||||||
VERSION="1.0.0"
|
VERSION="1.1.0"
|
||||||
|
|
||||||
|
# Available OpenWrt versions (latest first)
|
||||||
|
OPENWRT_VERSIONS="24.10.5 24.10.0 23.05.5 23.05.4"
|
||||||
|
DEFAULT_VERSION="24.10.5"
|
||||||
|
|
||||||
# Directories
|
# Directories
|
||||||
CLONE_DIR="/srv/secubox/clone"
|
CLONE_DIR="/srv/secubox/clone"
|
||||||
@ -99,6 +112,8 @@ get_device_id() {
|
|||||||
build_image() {
|
build_image() {
|
||||||
local device_type="${1:-}"
|
local device_type="${1:-}"
|
||||||
local resize_target="${2:-}"
|
local resize_target="${2:-}"
|
||||||
|
local openwrt_version="${3:-$DEFAULT_VERSION}"
|
||||||
|
local pkg_profile="${4:-slim}"
|
||||||
|
|
||||||
log "Building clone image..."
|
log "Building clone image..."
|
||||||
|
|
||||||
@ -138,7 +153,7 @@ build_image() {
|
|||||||
# Try to build via ASU API if curl is available
|
# Try to build via ASU API if curl is available
|
||||||
if command -v curl >/dev/null 2>&1; then
|
if command -v curl >/dev/null 2>&1; then
|
||||||
log "Building image via ASU API..."
|
log "Building image via ASU API..."
|
||||||
build_via_asu "$device_type" "$image_path" || {
|
build_via_asu "$device_type" "$image_path" "$openwrt_version" "$pkg_profile" || {
|
||||||
warn "ASU build failed, trying local export..."
|
warn "ASU build failed, trying local export..."
|
||||||
build_local_export "$image_path"
|
build_local_export "$image_path"
|
||||||
}
|
}
|
||||||
@ -197,9 +212,34 @@ list_devices() {
|
|||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# List available OpenWrt versions
|
||||||
|
list_versions() {
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Available OpenWrt Versions${NC}"
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
local first=1
|
||||||
|
for ver in $OPENWRT_VERSIONS; do
|
||||||
|
if [ "$first" = "1" ]; then
|
||||||
|
echo " $ver ← latest (default)"
|
||||||
|
first=0
|
||||||
|
else
|
||||||
|
echo " $ver"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Package Profiles${NC}"
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo " slim Minimal OpenWrt (LuCI + network essentials)"
|
||||||
|
echo " core Slim + SecuBox mesh (master-link, p2p)"
|
||||||
|
echo " full Current device's SecuBox packages"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
build_via_asu() {
|
build_via_asu() {
|
||||||
local device_type="$1"
|
local device_type="$1"
|
||||||
local output="$2"
|
local output="$2"
|
||||||
|
local openwrt_version="${3:-$DEFAULT_VERSION}"
|
||||||
|
local pkg_profile="${4:-slim}"
|
||||||
|
|
||||||
# Map device type to ASU profile
|
# Map device type to ASU profile
|
||||||
local target=""
|
local target=""
|
||||||
@ -228,14 +268,47 @@ build_via_asu() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Get installed packages (for cloning same config)
|
# Build package list based on profile
|
||||||
local packages=$(opkg list-installed 2>/dev/null | awk '{print $1}' | grep -v "^kernel" | tr '\n' ' ')
|
local clone_packages=""
|
||||||
|
|
||||||
# Minimal clone packages (core system + SecuBox essentials)
|
case "$pkg_profile" in
|
||||||
# Use -dnsmasq to remove default and replace with dnsmasq-full
|
slim)
|
||||||
local clone_packages="-dnsmasq dnsmasq-full luci luci-ssl curl wget-ssl ca-certificates"
|
# Minimal: just LuCI + network essentials
|
||||||
clone_packages="$clone_packages wireguard-tools luci-proto-wireguard"
|
clone_packages="-dnsmasq dnsmasq-full luci luci-ssl"
|
||||||
clone_packages="$clone_packages block-mount e2fsprogs"
|
clone_packages="$clone_packages curl wget-ssl ca-certificates"
|
||||||
|
clone_packages="$clone_packages wireguard-tools luci-proto-wireguard"
|
||||||
|
clone_packages="$clone_packages block-mount e2fsprogs"
|
||||||
|
log "Profile: slim (minimal OpenWrt)"
|
||||||
|
;;
|
||||||
|
core)
|
||||||
|
# Slim + SecuBox core packages
|
||||||
|
clone_packages="-dnsmasq dnsmasq-full luci luci-ssl"
|
||||||
|
clone_packages="$clone_packages curl wget-ssl ca-certificates"
|
||||||
|
clone_packages="$clone_packages wireguard-tools luci-proto-wireguard"
|
||||||
|
clone_packages="$clone_packages block-mount e2fsprogs"
|
||||||
|
clone_packages="$clone_packages luci-app-secubox luci-theme-secubox"
|
||||||
|
clone_packages="$clone_packages secubox-core secubox-master-link secubox-p2p"
|
||||||
|
log "Profile: core (SecuBox mesh essentials)"
|
||||||
|
;;
|
||||||
|
full)
|
||||||
|
# Clone all installed SecuBox packages
|
||||||
|
clone_packages="-dnsmasq dnsmasq-full luci luci-ssl"
|
||||||
|
clone_packages="$clone_packages curl wget-ssl ca-certificates"
|
||||||
|
clone_packages="$clone_packages wireguard-tools luci-proto-wireguard"
|
||||||
|
clone_packages="$clone_packages block-mount e2fsprogs"
|
||||||
|
# Add all installed SecuBox and LuCI packages
|
||||||
|
local secubox_pkgs=$(opkg list-installed 2>/dev/null | awk '{print $1}' | grep -E "^secubox-|^luci-app-secubox|^luci-theme-secubox" | tr '\n' ' ')
|
||||||
|
clone_packages="$clone_packages $secubox_pkgs"
|
||||||
|
log "Profile: full (all SecuBox from current device)"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
warn "Unknown profile: $pkg_profile, using slim"
|
||||||
|
clone_packages="-dnsmasq dnsmasq-full luci luci-ssl curl wget-ssl ca-certificates wireguard-tools"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
log "OpenWrt version: $openwrt_version"
|
||||||
|
log "Target: $target / $profile"
|
||||||
|
|
||||||
# Convert packages string to JSON array
|
# Convert packages string to JSON array
|
||||||
local packages_json=$(echo "$clone_packages" | tr ' ' '\n' | grep -v '^$' | sed 's/.*/"&"/' | tr '\n' ',' | sed 's/,$//')
|
local packages_json=$(echo "$clone_packages" | tr ' ' '\n' | grep -v '^$' | sed 's/.*/"&"/' | tr '\n' ',' | sed 's/,$//')
|
||||||
@ -246,10 +319,10 @@ build_via_asu() {
|
|||||||
{
|
{
|
||||||
"profile": "$profile",
|
"profile": "$profile",
|
||||||
"target": "$target",
|
"target": "$target",
|
||||||
"version": "24.10.0",
|
"version": "$openwrt_version",
|
||||||
"packages": [$packages_json],
|
"packages": [$packages_json],
|
||||||
"rootfs_size_mb": 512,
|
"rootfs_size_mb": 512,
|
||||||
"client": "secubox-cloner/1.0"
|
"client": "secubox-cloner/$VERSION"
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@ -859,13 +932,26 @@ SecuBox Cloner - On-device clone image builder and server
|
|||||||
Usage: secubox-cloner <command> [options]
|
Usage: secubox-cloner <command> [options]
|
||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
build [--resize SIZE] Build clone image for current device type
|
build [OPTIONS] Build clone image via ASU API
|
||||||
|
versions List available OpenWrt versions and profiles
|
||||||
|
devices List supported device types
|
||||||
serve [--start|--stop] Manage TFTP clone server
|
serve [--start|--stop] Manage TFTP clone server
|
||||||
token [--auto-approve] Generate clone join token (24h TTL)
|
token [--auto-approve] Generate clone join token (24h TTL)
|
||||||
status Show cloner status (images, tokens, clones)
|
status Show cloner status (images, tokens, clones)
|
||||||
list List pending and joined clones
|
list List pending and joined clones
|
||||||
export [FILE] Export clone image to file
|
export [FILE] Export clone image to file
|
||||||
|
|
||||||
|
Build Options:
|
||||||
|
--device TYPE Device type (mochabin, x86-64, etc.)
|
||||||
|
--version VER OpenWrt version (default: 24.10.5)
|
||||||
|
--profile PROFILE Package profile: slim, core, full (default: slim)
|
||||||
|
--resize SIZE Pre-resize image (e.g., 16G for eMMC)
|
||||||
|
|
||||||
|
Package Profiles:
|
||||||
|
slim Minimal OpenWrt (LuCI + network essentials only)
|
||||||
|
core Slim + SecuBox mesh (master-link, p2p, core)
|
||||||
|
full All SecuBox packages from current device
|
||||||
|
|
||||||
Serial Flash Commands:
|
Serial Flash Commands:
|
||||||
flash detect Detect available serial ports
|
flash detect Detect available serial ports
|
||||||
flash break [PORT] Send break to enter U-Boot
|
flash break [PORT] Send break to enter U-Boot
|
||||||
@ -874,34 +960,32 @@ Serial Flash Commands:
|
|||||||
flash run [PORT] [IMAGE] Send U-Boot flash commands
|
flash run [PORT] [IMAGE] Send U-Boot flash commands
|
||||||
flash uboot Print manual U-Boot commands
|
flash uboot Print manual U-Boot commands
|
||||||
|
|
||||||
Options:
|
|
||||||
--resize SIZE Pre-resize image (e.g., 16G for eMMC)
|
|
||||||
--auto-approve Token auto-approves clone join (no manual step)
|
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
# Build and serve clone image
|
# Build slim image with latest OpenWrt
|
||||||
secubox-cloner build
|
secubox-cloner build --profile slim
|
||||||
|
|
||||||
|
# Build core image with specific version
|
||||||
|
secubox-cloner build --version 24.10.0 --profile core
|
||||||
|
|
||||||
|
# Build full clone (all SecuBox packages)
|
||||||
|
secubox-cloner build --device x86-64 --profile full
|
||||||
|
|
||||||
|
# List available versions
|
||||||
|
secubox-cloner versions
|
||||||
|
|
||||||
|
# Start TFTP server
|
||||||
secubox-cloner serve --start
|
secubox-cloner serve --start
|
||||||
|
|
||||||
# Flash a clone device via serial
|
# Flash via serial
|
||||||
secubox-cloner flash break # Enter U-Boot on target
|
secubox-cloner flash break # Enter U-Boot on target
|
||||||
secubox-cloner flash run # Send TFTP flash commands
|
secubox-cloner flash run # Send TFTP flash commands
|
||||||
secubox-cloner flash console # Monitor progress
|
|
||||||
|
|
||||||
# Generate auto-approve token
|
|
||||||
secubox-cloner token --auto-approve
|
|
||||||
|
|
||||||
# Check status
|
|
||||||
secubox-cloner status
|
|
||||||
|
|
||||||
# Export for USB transfer
|
|
||||||
secubox-cloner export /mnt/usb/clone.img.gz
|
|
||||||
|
|
||||||
Clone Workflow:
|
Clone Workflow:
|
||||||
1. Master: secubox-cloner build && secubox-cloner serve --start
|
1. Master: secubox-cloner build --profile core
|
||||||
2. Target: Boot via TFTP (U-Boot commands shown after serve)
|
2. Master: secubox-cloner serve --start
|
||||||
3. Target auto-resizes root and joins mesh
|
3. Target: Boot via TFTP (U-Boot commands shown after serve)
|
||||||
4. Master: secubox-cloner list (shows new clone)
|
4. Target auto-resizes root and joins mesh
|
||||||
|
5. Master: secubox-cloner list (shows new clone)
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -914,21 +998,30 @@ case "${1:-}" in
|
|||||||
shift
|
shift
|
||||||
device_type=""
|
device_type=""
|
||||||
resize=""
|
resize=""
|
||||||
|
version="$DEFAULT_VERSION"
|
||||||
|
profile="slim"
|
||||||
while [ $# -gt 0 ]; do
|
while [ $# -gt 0 ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--device|-d) device_type="$2"; shift 2 ;;
|
--device|-d) device_type="$2"; shift 2 ;;
|
||||||
--resize) resize="$2"; shift 2 ;;
|
--resize) resize="$2"; shift 2 ;;
|
||||||
|
--version|-v) version="$2"; shift 2 ;;
|
||||||
|
--profile|-p) profile="$2"; shift 2 ;;
|
||||||
mochabin|espressobin-v7|espressobin-ultra|x86-64) device_type="$1"; shift ;;
|
mochabin|espressobin-v7|espressobin-ultra|x86-64) device_type="$1"; shift ;;
|
||||||
|
slim|core|full) profile="$1"; shift ;;
|
||||||
*) shift ;;
|
*) shift ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
build_image "$device_type" "$resize"
|
build_image "$device_type" "$resize" "$version" "$profile"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
devices)
|
devices)
|
||||||
list_devices
|
list_devices
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
versions)
|
||||||
|
list_versions
|
||||||
|
;;
|
||||||
|
|
||||||
serve)
|
serve)
|
||||||
case "${2:-start}" in
|
case "${2:-start}" in
|
||||||
--start|start) serve_start ;;
|
--start|start) serve_start ;;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user