split metrics installer image
This commit is contained in:
5
scripts/docker/build_arm64_metrics_image.sh
Executable file
5
scripts/docker/build_arm64_metrics_image.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
exec "$SCRIPT_DIR/build_docker_metrics_image.sh" --arch arm64 "$@"
|
||||
@@ -7,6 +7,8 @@ REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
TARGET_ARCH="${TARGET_ARCH:-}"
|
||||
IMAGE_TAG="${IMAGE_TAG:-}"
|
||||
IMAGE_TAR="${IMAGE_TAR:-}"
|
||||
METRICS_IMAGE="${METRICS_IMAGE:-}"
|
||||
METRICS_IMAGE_TAR="${METRICS_IMAGE_TAR:-}"
|
||||
PROMETHEUS_IMAGE="${PROMETHEUS_IMAGE:-prom/prometheus:v2.55.1}"
|
||||
PROMETHEUS_IMAGE_TAR="${PROMETHEUS_IMAGE_TAR:-}"
|
||||
GRAFANA_IMAGE="${GRAFANA_IMAGE:-grafana/grafana:11.3.1}"
|
||||
@@ -24,6 +26,10 @@ Options:
|
||||
--arch <arch> Target architecture: amd64|arm64
|
||||
--image <tag> Runtime image tag recorded in package manifest.
|
||||
--image-tar <path> Existing docker save tar/tar.gz to include.
|
||||
--metrics-image <tag>
|
||||
Metrics image tag recorded in package manifest.
|
||||
--metrics-image-tar <path>
|
||||
Existing metrics docker save tar/tar.gz to include.
|
||||
--prometheus-image <tag>
|
||||
Prometheus image tag to record and package.
|
||||
--prometheus-image-tar <path>
|
||||
@@ -38,8 +44,8 @@ Options:
|
||||
Package template directory.
|
||||
-h, --help Show help.
|
||||
|
||||
If --image-tar is omitted, the script uses the newest
|
||||
target/<arch>-docker/*.tar.gz file.
|
||||
If --image-tar or --metrics-image-tar is omitted, the script uses the
|
||||
matching docker-save archive under target/<arch>-docker/.
|
||||
USAGE
|
||||
}
|
||||
|
||||
@@ -69,6 +75,10 @@ default_runtime_tag() {
|
||||
printf 'ours-rp-runtime-%s:dev\n' "$1"
|
||||
}
|
||||
|
||||
default_metrics_tag() {
|
||||
printf 'ours-rp-metrics-%s:dev\n' "$1"
|
||||
}
|
||||
|
||||
default_package_prefix() {
|
||||
printf 'ours-rp-docker-installer-%s\n' "$1"
|
||||
}
|
||||
@@ -153,6 +163,22 @@ save_image_if_needed() {
|
||||
printf '%s\n' "$tar_path"
|
||||
}
|
||||
|
||||
default_saved_image_tar() {
|
||||
local image="$1"
|
||||
local out_dir="$REPO_ROOT/target/${TARGET_ARCH}-docker"
|
||||
local safe_name
|
||||
safe_name="$(safe_tag_name "$image")"
|
||||
if [[ -f "$out_dir/${safe_name}.tar.gz" ]]; then
|
||||
printf '%s\n' "$out_dir/${safe_name}.tar.gz"
|
||||
return 0
|
||||
fi
|
||||
if [[ -f "$out_dir/${safe_name}.tar" ]]; then
|
||||
printf '%s\n' "$out_dir/${safe_name}.tar"
|
||||
return 0
|
||||
fi
|
||||
printf '\n'
|
||||
}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--arch)
|
||||
@@ -170,6 +196,14 @@ while [[ $# -gt 0 ]]; do
|
||||
IMAGE_TAR="$2"
|
||||
shift 2
|
||||
;;
|
||||
--metrics-image)
|
||||
METRICS_IMAGE="$2"
|
||||
shift 2
|
||||
;;
|
||||
--metrics-image-tar)
|
||||
METRICS_IMAGE_TAR="$2"
|
||||
shift 2
|
||||
;;
|
||||
--prometheus-image)
|
||||
PROMETHEUS_IMAGE="$2"
|
||||
shift 2
|
||||
@@ -224,6 +258,9 @@ done
|
||||
if [[ -z "$IMAGE_TAG" ]]; then
|
||||
IMAGE_TAG="$(default_runtime_tag "$TARGET_ARCH")"
|
||||
fi
|
||||
if [[ -z "$METRICS_IMAGE" ]]; then
|
||||
METRICS_IMAGE="$(default_metrics_tag "$TARGET_ARCH")"
|
||||
fi
|
||||
if [[ -z "$OUT_DIR" ]]; then
|
||||
OUT_DIR="$REPO_ROOT/target/${TARGET_ARCH}-installer"
|
||||
fi
|
||||
@@ -237,7 +274,10 @@ COMPOSE_PROJECT_DEFAULT="$(default_compose_project "$TARGET_ARCH")"
|
||||
METRICS_INSTANCE_DEFAULT="$(default_metrics_instance "$TARGET_ARCH")"
|
||||
|
||||
if [[ -z "$IMAGE_TAR" ]]; then
|
||||
IMAGE_TAR="$(find "$REPO_ROOT/target/${TARGET_ARCH}-docker" -maxdepth 1 -type f \( -name '*.tar.gz' -o -name '*.tar' \) -printf '%T@ %p\n' 2>/dev/null | sort -nr | awk 'NR==1 {print $2}')"
|
||||
IMAGE_TAR="$(default_saved_image_tar "$IMAGE_TAG")"
|
||||
fi
|
||||
if [[ -z "$METRICS_IMAGE_TAR" ]]; then
|
||||
METRICS_IMAGE_TAR="$(default_saved_image_tar "$METRICS_IMAGE")"
|
||||
fi
|
||||
|
||||
[[ -n "$IMAGE_TAR" && -f "$IMAGE_TAR" ]] || {
|
||||
@@ -249,6 +289,15 @@ Build one first, for example:
|
||||
EOF
|
||||
exit 2
|
||||
}
|
||||
[[ -n "$METRICS_IMAGE_TAR" && -f "$METRICS_IMAGE_TAR" ]] || {
|
||||
cat >&2 <<EOF
|
||||
missing metrics image tar for $TARGET_ARCH.
|
||||
|
||||
Build one first, for example:
|
||||
scripts/docker/build_docker_metrics_image.sh --arch $TARGET_ARCH --image $METRICS_IMAGE
|
||||
EOF
|
||||
exit 2
|
||||
}
|
||||
|
||||
mkdir -p "$OUT_DIR"
|
||||
commit="$(git -C "$REPO_ROOT" rev-parse --short HEAD 2>/dev/null || echo unknown)"
|
||||
@@ -261,6 +310,7 @@ rm -rf "$stage"
|
||||
rsync -a --delete "$TEMPLATE_DIR"/ "$stage"/
|
||||
mkdir -p "$stage/images"
|
||||
cp "$IMAGE_TAR" "$stage/images/"
|
||||
cp "$METRICS_IMAGE_TAR" "$stage/images/"
|
||||
|
||||
monitor_image_stage="$OUT_DIR/.monitor-images-$TARGET_ARCH-$timestamp"
|
||||
rm -rf "$monitor_image_stage"
|
||||
@@ -276,6 +326,8 @@ if [[ -f "$stage/.env.example" ]]; then
|
||||
replace_or_append_env "$stage/.env.example" "COMPOSE_PROJECT_NAME" "$COMPOSE_PROJECT_DEFAULT"
|
||||
replace_or_append_env "$stage/.env.example" "RPKI_IMAGE" "$IMAGE_TAG"
|
||||
replace_or_append_env "$stage/.env.example" "RPKI_PLATFORM" "$TARGET_PLATFORM"
|
||||
replace_or_append_env "$stage/.env.example" "METRICS_IMAGE" "$METRICS_IMAGE"
|
||||
replace_or_append_env "$stage/.env.example" "METRICS_PLATFORM" "$TARGET_PLATFORM"
|
||||
replace_or_append_env "$stage/.env.example" "HOST_DATA_DIR" "$HOST_DATA_DIR_DEFAULT"
|
||||
replace_or_append_env "$stage/.env.example" "ALLOW_CROSS_ARCH" "0"
|
||||
replace_or_append_env "$stage/.env.example" "METRICS_INSTANCE" "$METRICS_INSTANCE_DEFAULT"
|
||||
@@ -302,6 +354,7 @@ replace_text_in_file "$stage/docs/troubleshooting.zh-CN.md" "__HOST_DATA_DIR__"
|
||||
replace_text_in_file "$stage/docs/troubleshooting.en.md" "__HOST_DATA_DIR__" "$HOST_DATA_DIR_DEFAULT"
|
||||
|
||||
runtime_tar_sha256="$(sha256sum "$IMAGE_TAR" | awk '{print $1}')"
|
||||
metrics_tar_sha256="$(sha256sum "$METRICS_IMAGE_TAR" | awk '{print $1}')"
|
||||
prometheus_tar_sha256="$(sha256sum "$prometheus_tar" | awk '{print $1}')"
|
||||
grafana_tar_sha256="$(sha256sum "$grafana_tar" | awk '{print $1}')"
|
||||
|
||||
@@ -316,20 +369,35 @@ package_arch=$TARGET_ARCH
|
||||
package_platform=$TARGET_PLATFORM
|
||||
cross_arch_default=deny
|
||||
cross_arch_enable_var=ALLOW_CROSS_ARCH
|
||||
RPKI_IMAGE=$IMAGE_TAG
|
||||
RPKI_PLATFORM=$TARGET_PLATFORM
|
||||
image_tag=$IMAGE_TAG
|
||||
image_tar=$(basename "$IMAGE_TAR")
|
||||
image_tar_size_bytes=$(wc -c < "$IMAGE_TAR")
|
||||
image_tar_sha256=$runtime_tar_sha256
|
||||
rpki_image=$IMAGE_TAG
|
||||
rpki_platform=$TARGET_PLATFORM
|
||||
METRICS_IMAGE=$METRICS_IMAGE
|
||||
METRICS_PLATFORM=$TARGET_PLATFORM
|
||||
metrics_image=$METRICS_IMAGE
|
||||
metrics_image_tar=$(basename "$METRICS_IMAGE_TAR")
|
||||
metrics_image_tar_size_bytes=$(wc -c < "$METRICS_IMAGE_TAR")
|
||||
metrics_image_tar_sha256=$metrics_tar_sha256
|
||||
PROMETHEUS_IMAGE=$PROMETHEUS_IMAGE
|
||||
prometheus_image=$PROMETHEUS_IMAGE
|
||||
prometheus_image_tar=$(basename "$prometheus_tar")
|
||||
prometheus_image_tar_size_bytes=$(wc -c < "$prometheus_tar")
|
||||
prometheus_image_tar_sha256=$prometheus_tar_sha256
|
||||
GRAFANA_IMAGE=$GRAFANA_IMAGE
|
||||
grafana_image=$GRAFANA_IMAGE
|
||||
grafana_image_tar=$(basename "$grafana_tar")
|
||||
grafana_image_tar_size_bytes=$(wc -c < "$grafana_tar")
|
||||
grafana_image_tar_sha256=$grafana_tar_sha256
|
||||
target_platform=$TARGET_PLATFORM
|
||||
MONITOR_PLATFORM=$TARGET_PLATFORM
|
||||
rpki_image_tar=$(basename "$IMAGE_TAR")
|
||||
monitor_platform=$TARGET_PLATFORM
|
||||
metrics_platform=$TARGET_PLATFORM
|
||||
default_host_data_dir=$HOST_DATA_DIR_DEFAULT
|
||||
default_compose_project_name=$COMPOSE_PROJECT_DEFAULT
|
||||
default_metrics_instance=$METRICS_INSTANCE_DEFAULT
|
||||
@@ -340,6 +408,7 @@ package_name: $package_name
|
||||
package_arch: $TARGET_ARCH
|
||||
package_platform: $TARGET_PLATFORM
|
||||
runtime_image: $IMAGE_TAG
|
||||
metrics_image: $METRICS_IMAGE
|
||||
prometheus_image: $PROMETHEUS_IMAGE
|
||||
grafana_image: $GRAFANA_IMAGE
|
||||
default_host_data_dir: $HOST_DATA_DIR_DEFAULT
|
||||
|
||||
78
scripts/docker/build_docker_metrics_image.sh
Executable file
78
scripts/docker/build_docker_metrics_image.sh
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
normalize_arch() {
|
||||
case "$1" in
|
||||
amd64|x86_64)
|
||||
printf 'amd64\n'
|
||||
;;
|
||||
arm64|aarch64)
|
||||
printf 'arm64\n'
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
TARGET_ARCH="${TARGET_ARCH:-}"
|
||||
IMAGE_TAG="${IMAGE_TAG:-}"
|
||||
DOCKERFILE="${DOCKERFILE:-$REPO_ROOT/docker/ours-rp-metrics.Dockerfile}"
|
||||
args=()
|
||||
image_explicit=0
|
||||
dockerfile_explicit=0
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--arch)
|
||||
TARGET_ARCH="$(normalize_arch "$2")" || {
|
||||
echo "unsupported target architecture: $2" >&2
|
||||
exit 2
|
||||
}
|
||||
args+=("$1" "$TARGET_ARCH")
|
||||
shift 2
|
||||
;;
|
||||
--image)
|
||||
IMAGE_TAG="$2"
|
||||
image_explicit=1
|
||||
args+=("$1" "$2")
|
||||
shift 2
|
||||
;;
|
||||
--dockerfile)
|
||||
DOCKERFILE="$2"
|
||||
dockerfile_explicit=1
|
||||
args+=("$1" "$2")
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
args+=("$1")
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$TARGET_ARCH" ]]; then
|
||||
cat >&2 <<'EOF'
|
||||
missing target architecture.
|
||||
|
||||
Usage:
|
||||
scripts/docker/build_docker_metrics_image.sh --arch amd64|arm64 [options]
|
||||
EOF
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [[ -z "$IMAGE_TAG" ]]; then
|
||||
IMAGE_TAG="ours-rp-metrics-${TARGET_ARCH}:dev"
|
||||
fi
|
||||
|
||||
if [[ "$dockerfile_explicit" != "1" ]]; then
|
||||
args=(--dockerfile "$DOCKERFILE" "${args[@]}")
|
||||
fi
|
||||
if [[ "$image_explicit" != "1" ]]; then
|
||||
args=(--image "$IMAGE_TAG" "${args[@]}")
|
||||
fi
|
||||
|
||||
exec "$SCRIPT_DIR/build_docker_runtime_image.sh" "${args[@]}"
|
||||
@@ -8,6 +8,8 @@ REMOTE_HOST="${REMOTE_HOST:-root@47.77.204.233}"
|
||||
REMOTE_ROOT="${REMOTE_ROOT:-/root/ours-rp-arm64-compose}"
|
||||
IMAGE_TAG="${IMAGE_TAG:-ours-rp-runtime-arm64:dev}"
|
||||
IMAGE_TAR="${IMAGE_TAR:-$REPO_ROOT/target/arm64-docker/ours-rp-runtime-arm64-dev.tar.gz}"
|
||||
METRICS_IMAGE="${METRICS_IMAGE:-ours-rp-metrics-arm64:dev}"
|
||||
METRICS_IMAGE_TAR="${METRICS_IMAGE_TAR:-$REPO_ROOT/target/arm64-docker/ours-rp-metrics-arm64-dev.tar.gz}"
|
||||
EXECUTE="${EXECUTE:-0}"
|
||||
INSTALL_DOCKER="${INSTALL_DOCKER:-1}"
|
||||
INSTALL_BINFMT="${INSTALL_BINFMT:-1}"
|
||||
@@ -27,6 +29,9 @@ Options:
|
||||
--remote-root <path> Remote compose root
|
||||
--image <tag> Image tag loaded by docker load
|
||||
--image-tar <path> Local docker save tar.gz
|
||||
--metrics-image <tag> Metrics image tag loaded by docker load
|
||||
--metrics-image-tar <path>
|
||||
Local metrics docker save tar.gz
|
||||
--no-install-docker Skip Docker installation
|
||||
--no-binfmt Skip binfmt/qemu installation
|
||||
--start-core Start ours-rp-soak after deploy
|
||||
@@ -57,6 +62,14 @@ while [[ $# -gt 0 ]]; do
|
||||
IMAGE_TAR="$2"
|
||||
shift 2
|
||||
;;
|
||||
--metrics-image)
|
||||
METRICS_IMAGE="$2"
|
||||
shift 2
|
||||
;;
|
||||
--metrics-image-tar)
|
||||
METRICS_IMAGE_TAR="$2"
|
||||
shift 2
|
||||
;;
|
||||
--no-install-docker)
|
||||
INSTALL_DOCKER=0
|
||||
shift
|
||||
@@ -117,6 +130,10 @@ require_command rsync
|
||||
echo "missing image tar: $IMAGE_TAR" >&2
|
||||
exit 2
|
||||
}
|
||||
[[ -f "$METRICS_IMAGE_TAR" ]] || {
|
||||
echo "missing metrics image tar: $METRICS_IMAGE_TAR" >&2
|
||||
exit 2
|
||||
}
|
||||
|
||||
compose_src="$REPO_ROOT/deploy/arm64-compose/"
|
||||
[[ -f "$compose_src/docker-compose.yml" ]] || {
|
||||
@@ -128,6 +145,8 @@ echo "remote=$REMOTE_HOST"
|
||||
echo "remote_root=$REMOTE_ROOT"
|
||||
echo "image=$IMAGE_TAG"
|
||||
echo "image_tar=$IMAGE_TAR"
|
||||
echo "metrics_image=$METRICS_IMAGE"
|
||||
echo "metrics_image_tar=$METRICS_IMAGE_TAR"
|
||||
|
||||
if [[ "$INSTALL_DOCKER" == "1" ]]; then
|
||||
remote_run "if ! command -v docker >/dev/null 2>&1; then apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y docker.io; fi; if ! docker compose version >/dev/null 2>&1; then if apt-cache show docker-compose-plugin >/dev/null 2>&1; then DEBIAN_FRONTEND=noninteractive apt-get install -y docker-compose-plugin; elif apt-cache show docker-compose-v2 >/dev/null 2>&1; then DEBIAN_FRONTEND=noninteractive apt-get install -y docker-compose-v2; elif apt-cache show docker-compose >/dev/null 2>&1; then DEBIAN_FRONTEND=noninteractive apt-get install -y docker-compose; else echo 'no docker compose package found' >&2; exit 2; fi; fi; systemctl enable --now docker || true"
|
||||
@@ -136,10 +155,13 @@ fi
|
||||
remote_run "mkdir -p '$REMOTE_ROOT/images'"
|
||||
run_or_echo rsync -a --delete "$compose_src" "$REMOTE_HOST:$REMOTE_ROOT/"
|
||||
run_or_echo rsync -a "$IMAGE_TAR" "$REMOTE_HOST:$REMOTE_ROOT/images/"
|
||||
run_or_echo rsync -a "$METRICS_IMAGE_TAR" "$REMOTE_HOST:$REMOTE_ROOT/images/"
|
||||
|
||||
remote_tar="$REMOTE_ROOT/images/$(basename "$IMAGE_TAR")"
|
||||
remote_metrics_tar="$REMOTE_ROOT/images/$(basename "$METRICS_IMAGE_TAR")"
|
||||
remote_run "cd '$REMOTE_ROOT' && test -f .env || cp .env.example .env"
|
||||
remote_run "gunzip -c '$remote_tar' | docker load"
|
||||
remote_run "gunzip -c '$remote_metrics_tar' | docker load"
|
||||
|
||||
if [[ "$INSTALL_BINFMT" == "1" ]]; then
|
||||
remote_run "docker run --rm --privileged tonistiigi/binfmt --install arm64"
|
||||
@@ -147,6 +169,7 @@ fi
|
||||
|
||||
remote_run "docker run --rm --platform linux/arm64 '$IMAGE_TAG' uname -m"
|
||||
remote_run "docker run --rm --platform linux/arm64 '$IMAGE_TAG' /opt/ours-rp/bin/rpki --help >/tmp/ours-rp-arm64-help.txt && head -5 /tmp/ours-rp-arm64-help.txt"
|
||||
remote_run "docker run --rm --platform linux/arm64 '$METRICS_IMAGE' /opt/ours-rp/bin/rpki_artifact_metrics --help >/tmp/ours-rp-arm64-metrics-help.txt && head -5 /tmp/ours-rp-arm64-metrics-help.txt"
|
||||
|
||||
if [[ "$START_CORE" == "1" ]]; then
|
||||
remote_run "cd '$REMOTE_ROOT' && docker compose --profile core up -d ours-rp-soak"
|
||||
|
||||
Reference in New Issue
Block a user