调整version

This commit is contained in:
xiuting.xu 2026-07-28 14:21:08 +08:00
parent 859a56c434
commit a4fd0f3128
16 changed files with 190 additions and 26 deletions

2
Cargo.lock generated
View File

@ -2087,7 +2087,7 @@ dependencies = [
[[package]]
name = "rpki"
version = "0.1.0"
version = "1.3.0"
dependencies = [
"anyhow",
"arc-swap",

View File

@ -1,6 +1,6 @@
[package]
name = "rpki"
version = "0.1.0"
version = "1.3.0"
edition = "2024"
[[bin]]

View File

@ -1,6 +1,11 @@
# Target RTR server addresses for client compose files
# RPKI_RTR_CLIENT_IMAGE=rpki-rtr-debug-client-arm64:v1.2
RPKI_RTR_CLIENT_IMAGE=rpki-rtr-debug-client-amd64:v1.2
# build-run.sh auto-detects amd64/arm64 unless IMAGE_ARCH/RPKI_RTR_IMAGE_ARCH is set before running it.
# Direct docker compose uses RPKI_RTR_IMAGE_ARCH from this file; set it to arm64 on ARM hosts.
RPKI_RTR_CLIENT_IMAGE_BASE=rpki-rtr-debug-client
RPKI_RTR_CLIENT_IMAGE_TAG=v1.3
RPKI_RTR_IMAGE_ARCH=arm64
# RPKI_RTR_TARGET_PLATFORM=linux/amd64
# RPKI_RTR_CLIENT_IMAGE=rpki-rtr-debug-client-amd64:v1.3
# TCP example: 10.0.0.12:323
# TLS example: rpki.example.com:324

View File

@ -3,14 +3,65 @@ set -euo pipefail
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd -- "${SCRIPT_DIR}/../.." && pwd)"
CALLER_TARGET_PLATFORM="${TARGET_PLATFORM:-${RPKI_RTR_TARGET_PLATFORM:-}}"
CALLER_IMAGE_ARCH="${IMAGE_ARCH:-${RPKI_RTR_IMAGE_ARCH:-}}"
CALLER_CLIENT_IMAGE="${CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE:-}}"
load_env_defaults() {
local line key value
[[ -f "${SCRIPT_DIR}/.env" ]] || return
while IFS= read -r line || [[ -n "${line}" ]]; do
line="${line%$'\r'}"
[[ -z "${line}" || "${line}" =~ ^[[:space:]]*# ]] && continue
[[ "${line}" == *"="* ]] || continue
key="${line%%=*}"
value="${line#*=}"
key="${key#"${key%%[![:space:]]*}"}"
key="${key%"${key##*[![:space:]]}"}"
[[ "${key}" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]] || continue
if [[ -z "${!key+x}" ]]; then
export "${key}=${value}"
fi
done < "${SCRIPT_DIR}/.env"
}
detect_image_arch() {
case "$(uname -m)" in
x86_64|amd64) printf '%s\n' amd64 ;;
aarch64|arm64) printf '%s\n' arm64 ;;
*) die "unsupported host architecture '$(uname -m)'; set RPKI_RTR_IMAGE_ARCH=amd64 or arm64" ;;
esac
}
platform_for_image_arch() {
case "$1" in
amd64) printf '%s\n' linux/amd64 ;;
arm64) printf '%s\n' linux/arm64 ;;
*) die "unsupported image arch '$1', expected amd64 or arm64" ;;
esac
}
image_arch_from_platform() {
case "$1" in
linux/amd64|amd64) printf '%s\n' amd64 ;;
linux/arm64|arm64) printf '%s\n' arm64 ;;
*) return 1 ;;
esac
}
load_env_defaults
MODE="${MODE:-tcp}"
ACTION="up"
DETACH="${DETACH:-1}"
BUILD="${BUILD:-1}"
CLIENTS="${CLIENTS:-single}"
TARGET_PLATFORM="${TARGET_PLATFORM:-linux/arm64}"
CLIENT_IMAGE="${CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}}"
TARGET_PLATFORM="${CALLER_TARGET_PLATFORM}"
IMAGE_ARCH="${CALLER_IMAGE_ARCH}"
CLIENT_IMAGE="${CALLER_CLIENT_IMAGE}"
BUILDX_PUSH="${BUILDX_PUSH:-0}"
BUILDX_BUILDER="${BUILDX_BUILDER:-}"
SKIP_BASE_IMAGE_PULL="${SKIP_BASE_IMAGE_PULL:-0}"
@ -33,7 +84,9 @@ Actions:
Options:
--mode MODE base|tcp|tls|ssh (default: tcp)
--clients MODE single|multi (default: single)
--platform VALUE Target platform for buildx (default: linux/arm64)
--platform VALUE Target platform for buildx (default: host architecture)
--image-arch VALUE
Image architecture suffix for default tag: amd64|arm64
--client-image TAG
Client image tag for buildx and compose
--push Push buildx image instead of loading it locally
@ -161,6 +214,11 @@ while [[ $# -gt 0 ]]; do
TARGET_PLATFORM="$2"
shift 2
;;
--image-arch)
[[ $# -ge 2 ]] || die "--image-arch requires a value"
IMAGE_ARCH="$2"
shift 2
;;
--client-image)
[[ $# -ge 2 ]] || die "--client-image requires a value"
CLIENT_IMAGE="$2"
@ -197,6 +255,25 @@ while [[ $# -gt 0 ]]; do
esac
done
if [[ -z "${TARGET_PLATFORM}" ]]; then
[[ -n "${IMAGE_ARCH}" ]] || IMAGE_ARCH="$(detect_image_arch)"
TARGET_PLATFORM="$(platform_for_image_arch "${IMAGE_ARCH}")"
elif [[ -z "${IMAGE_ARCH}" ]]; then
if [[ "${TARGET_PLATFORM}" != *,* ]] && IMAGE_ARCH="$(image_arch_from_platform "${TARGET_PLATFORM}")"; then
:
else
IMAGE_ARCH="$(detect_image_arch)"
fi
fi
if [[ -z "${CLIENT_IMAGE}" ]]; then
if [[ "${TARGET_PLATFORM}" == *,* ]]; then
CLIENT_IMAGE="${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}"
else
CLIENT_IMAGE="${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${IMAGE_ARCH}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}"
fi
fi
[[ "${CLIENTS}" == "single" || "${CLIENTS}" == "multi" ]] || die "unsupported clients '${CLIENTS}', expected single|multi"
export RPKI_RTR_CLIENT_IMAGE="${CLIENT_IMAGE}"
if [[ "${ACTION}" == "buildx" ]]; then

View File

@ -2,7 +2,7 @@ version: "3.9"
services:
rtr-client-1:
image: ${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}
image: ${RPKI_RTR_CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}}
command: ["${RPKI_RTR_TCP_SERVER_ADDR:-rpki-rtr:323}", "${RPKI_RTR_PROTOCOL_VERSION:-2}", "reset", "--keep-after-error", "--summary-only"]
volumes:
- ${RPKI_RTR_CLIENT_LOG_HOST_DIR:-../../logs/client}:/app/logs
@ -11,7 +11,7 @@ services:
- rpki_net
rtr-client-2:
image: ${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}
image: ${RPKI_RTR_CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}}
command: ["${RPKI_RTR_TCP_SERVER_ADDR:-rpki-rtr:323}", "${RPKI_RTR_PROTOCOL_VERSION:-2}", "reset", "--keep-after-error", "--summary-only"]
volumes:
- ${RPKI_RTR_CLIENT_LOG_HOST_DIR:-../../logs/client}:/app/logs
@ -20,7 +20,7 @@ services:
- rpki_net
rtr-client-3:
image: ${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}
image: ${RPKI_RTR_CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}}
command: ["${RPKI_RTR_TCP_SERVER_ADDR:-rpki-rtr:323}", "${RPKI_RTR_PROTOCOL_VERSION:-2}", "reset", "--keep-after-error", "--summary-only"]
volumes:
- ${RPKI_RTR_CLIENT_LOG_HOST_DIR:-../../logs/client}:/app/logs
@ -29,7 +29,7 @@ services:
- rpki_net
rtr-client-4:
image: ${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}
image: ${RPKI_RTR_CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}}
command: ["${RPKI_RTR_TCP_SERVER_ADDR:-rpki-rtr:323}", "${RPKI_RTR_PROTOCOL_VERSION:-2}", "reset", "--keep-after-error", "--summary-only"]
volumes:
- ${RPKI_RTR_CLIENT_LOG_HOST_DIR:-../../logs/client}:/app/logs
@ -38,7 +38,7 @@ services:
- rpki_net
rtr-client-5:
image: ${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}
image: ${RPKI_RTR_CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}}
command: ["${RPKI_RTR_TCP_SERVER_ADDR:-rpki-rtr:323}", "${RPKI_RTR_PROTOCOL_VERSION:-2}", "reset", "--keep-after-error", "--summary-only"]
volumes:
- ${RPKI_RTR_CLIENT_LOG_HOST_DIR:-../../logs/client}:/app/logs

View File

@ -5,7 +5,7 @@ services:
build:
context: ../..
dockerfile: deploy/client/Dockerfile
image: ${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}
image: ${RPKI_RTR_CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}}
command:
[
"${RPKI_RTR_SSH_SERVER_ADDR:-rpki-rtr:22}",

View File

@ -5,7 +5,7 @@ services:
build:
context: ../..
dockerfile: deploy/client/Dockerfile
image: ${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}
image: ${RPKI_RTR_CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}}
command:
[
"${RPKI_RTR_SSH_SERVER_ADDR:-rpki-rtr:22}",

View File

@ -3,7 +3,7 @@ services:
build:
context: ../..
dockerfile: deploy/client/Dockerfile
image: ${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}
image: ${RPKI_RTR_CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}}
command: ["${RPKI_RTR_TCP_SERVER_ADDR:-rpki-rtr:323}", "${RPKI_RTR_PROTOCOL_VERSION:-2}", "reset", "--keep-after-error", "--summary-only"]
volumes:
- ${RPKI_RTR_CLIENT_LOG_HOST_DIR:-../../logs/client}:/app/logs

View File

@ -5,7 +5,7 @@ services:
build:
context: ../..
dockerfile: deploy/client/Dockerfile
image: ${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}
image: ${RPKI_RTR_CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}}
command:
[
"${RPKI_RTR_TLS_SERVER_ADDR:-rpki-rtr:324}",

View File

@ -3,7 +3,7 @@ services:
build:
context: ../..
dockerfile: deploy/client/Dockerfile
image: ${RPKI_RTR_CLIENT_IMAGE:-rpki-rtr-debug-client:latest}
image: ${RPKI_RTR_CLIENT_IMAGE:-${RPKI_RTR_CLIENT_IMAGE_BASE:-rpki-rtr-debug-client}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_CLIENT_IMAGE_TAG:-latest}}
command: ["${RPKI_RTR_TCP_SERVER_ADDR:-rpki-rtr:323}", "${RPKI_RTR_PROTOCOL_VERSION:-2}", "reset", "--keep-after-error", "--summary-only"]
volumes:
- ${RPKI_RTR_CLIENT_LOG_HOST_DIR:-../../logs/client}:/app/logs

View File

@ -1,6 +1,11 @@
# Core runtime knobs.
# RPKI_RTR_SERVER_IMAGE=rpki-rtr-arm64:v1.2
RPKI_RTR_SERVER_IMAGE=rpki-rtr-amd64:v1.2
# build-run.sh auto-detects amd64/arm64 unless IMAGE_ARCH/RPKI_RTR_IMAGE_ARCH is set before running it.
# Direct docker compose uses RPKI_RTR_IMAGE_ARCH from this file; set it to arm64 on ARM hosts.
RPKI_RTR_SERVER_IMAGE_BASE=rpki-rtr
RPKI_RTR_SERVER_IMAGE_TAG=v1.3
RPKI_RTR_IMAGE_ARCH=arm64
# RPKI_RTR_TARGET_PLATFORM=linux/amd64
# RPKI_RTR_SERVER_IMAGE=rpki-rtr-amd64:v1.3
# Data source directories on host.
RPKI_RTR_CCR_HOST_DIR=../../data

View File

@ -3,13 +3,64 @@ set -euo pipefail
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd -- "${SCRIPT_DIR}/../.." && pwd)"
CALLER_TARGET_PLATFORM="${TARGET_PLATFORM:-${RPKI_RTR_TARGET_PLATFORM:-}}"
CALLER_IMAGE_ARCH="${IMAGE_ARCH:-${RPKI_RTR_IMAGE_ARCH:-}}"
CALLER_SERVER_IMAGE="${SERVER_IMAGE:-${RPKI_RTR_SERVER_IMAGE:-}}"
load_env_defaults() {
local line key value
[[ -f "${SCRIPT_DIR}/.env" ]] || return
while IFS= read -r line || [[ -n "${line}" ]]; do
line="${line%$'\r'}"
[[ -z "${line}" || "${line}" =~ ^[[:space:]]*# ]] && continue
[[ "${line}" == *"="* ]] || continue
key="${line%%=*}"
value="${line#*=}"
key="${key#"${key%%[![:space:]]*}"}"
key="${key%"${key##*[![:space:]]}"}"
[[ "${key}" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]] || continue
if [[ -z "${!key+x}" ]]; then
export "${key}=${value}"
fi
done < "${SCRIPT_DIR}/.env"
}
detect_image_arch() {
case "$(uname -m)" in
x86_64|amd64) printf '%s\n' amd64 ;;
aarch64|arm64) printf '%s\n' arm64 ;;
*) die "unsupported host architecture '$(uname -m)'; set RPKI_RTR_IMAGE_ARCH=amd64 or arm64" ;;
esac
}
platform_for_image_arch() {
case "$1" in
amd64) printf '%s\n' linux/amd64 ;;
arm64) printf '%s\n' linux/arm64 ;;
*) die "unsupported image arch '$1', expected amd64 or arm64" ;;
esac
}
image_arch_from_platform() {
case "$1" in
linux/amd64|amd64) printf '%s\n' amd64 ;;
linux/arm64|arm64) printf '%s\n' arm64 ;;
*) return 1 ;;
esac
}
load_env_defaults
MODE="${MODE:-tcp}"
ACTION="up"
DETACH="${DETACH:-1}"
BUILD="${BUILD:-1}"
TARGET_PLATFORM="${TARGET_PLATFORM:-linux/arm64}"
SERVER_IMAGE="${SERVER_IMAGE:-${RPKI_RTR_SERVER_IMAGE:-rpki-rtr:latest}}"
TARGET_PLATFORM="${CALLER_TARGET_PLATFORM}"
IMAGE_ARCH="${CALLER_IMAGE_ARCH}"
SERVER_IMAGE="${CALLER_SERVER_IMAGE}"
BUILDX_PUSH="${BUILDX_PUSH:-0}"
BUILDX_BUILDER="${BUILDX_BUILDER:-}"
SKIP_BASE_IMAGE_PULL="${SKIP_BASE_IMAGE_PULL:-0}"
@ -31,7 +82,9 @@ Actions:
Options:
--mode MODE base|tcp|tls|ssh (default: tcp)
--platform VALUE Target platform for buildx (default: linux/arm64)
--platform VALUE Target platform for buildx (default: host architecture)
--image-arch VALUE
Image architecture suffix for default tag: amd64|arm64
--server-image TAG
Server image tag for buildx and compose
--push Push buildx image instead of loading it locally
@ -140,6 +193,11 @@ while [[ $# -gt 0 ]]; do
TARGET_PLATFORM="$2"
shift 2
;;
--image-arch)
[[ $# -ge 2 ]] || die "--image-arch requires a value"
IMAGE_ARCH="$2"
shift 2
;;
--server-image)
[[ $# -ge 2 ]] || die "--server-image requires a value"
SERVER_IMAGE="$2"
@ -176,6 +234,25 @@ while [[ $# -gt 0 ]]; do
esac
done
if [[ -z "${TARGET_PLATFORM}" ]]; then
[[ -n "${IMAGE_ARCH}" ]] || IMAGE_ARCH="$(detect_image_arch)"
TARGET_PLATFORM="$(platform_for_image_arch "${IMAGE_ARCH}")"
elif [[ -z "${IMAGE_ARCH}" ]]; then
if [[ "${TARGET_PLATFORM}" != *,* ]] && IMAGE_ARCH="$(image_arch_from_platform "${TARGET_PLATFORM}")"; then
:
else
IMAGE_ARCH="$(detect_image_arch)"
fi
fi
if [[ -z "${SERVER_IMAGE}" ]]; then
if [[ "${TARGET_PLATFORM}" == *,* ]]; then
SERVER_IMAGE="${RPKI_RTR_SERVER_IMAGE_BASE:-rpki-rtr}:${RPKI_RTR_SERVER_IMAGE_TAG:-latest}"
else
SERVER_IMAGE="${RPKI_RTR_SERVER_IMAGE_BASE:-rpki-rtr}-${IMAGE_ARCH}:${RPKI_RTR_SERVER_IMAGE_TAG:-latest}"
fi
fi
export RPKI_RTR_SERVER_IMAGE="${SERVER_IMAGE}"
if [[ "${ACTION}" == "buildx" ]]; then
has_buildx || die "docker buildx is not available"

View File

@ -5,7 +5,7 @@ services:
build:
context: ../..
dockerfile: deploy/server/Dockerfile
image: ${RPKI_RTR_SERVER_IMAGE:-rpki-rtr:latest}
image: ${RPKI_RTR_SERVER_IMAGE:-${RPKI_RTR_SERVER_IMAGE_BASE:-rpki-rtr}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_SERVER_IMAGE_TAG:-latest}}
container_name: rpki-rtr-ssh
restart: no
ports:

View File

@ -5,7 +5,7 @@ services:
build:
context: ../..
dockerfile: deploy/server/Dockerfile
image: ${RPKI_RTR_SERVER_IMAGE:-rpki-rtr:latest}
image: ${RPKI_RTR_SERVER_IMAGE:-${RPKI_RTR_SERVER_IMAGE_BASE:-rpki-rtr}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_SERVER_IMAGE_TAG:-latest}}
container_name: rpki-rtr-tcp
restart: no
ports:

View File

@ -3,7 +3,7 @@ services:
build:
context: ../..
dockerfile: deploy/server/Dockerfile
image: ${RPKI_RTR_SERVER_IMAGE:-rpki-rtr:latest}
image: ${RPKI_RTR_SERVER_IMAGE:-${RPKI_RTR_SERVER_IMAGE_BASE:-rpki-rtr}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_SERVER_IMAGE_TAG:-latest}}
container_name: rpki-rtr-tls
restart: no
ports:

View File

@ -5,7 +5,7 @@ services:
build:
context: ../..
dockerfile: deploy/server/Dockerfile
image: ${RPKI_RTR_SERVER_IMAGE:-rpki-rtr:latest}
image: ${RPKI_RTR_SERVER_IMAGE:-${RPKI_RTR_SERVER_IMAGE_BASE:-rpki-rtr}-${RPKI_RTR_IMAGE_ARCH:-amd64}:${RPKI_RTR_SERVER_IMAGE_TAG:-latest}}
container_name: rpki-rtr
restart: no
ports: