20260627 完成ARM64完整安装包和运维脚本
This commit is contained in:
123
scripts/docker/build_arm64_installer_package.sh
Executable file
123
scripts/docker/build_arm64_installer_package.sh
Executable file
@@ -0,0 +1,123 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
IMAGE_TAG="${IMAGE_TAG:-ours-rp-runtime-arm64:dev}"
|
||||
IMAGE_TAR="${IMAGE_TAR:-}"
|
||||
OUT_DIR="${OUT_DIR:-$REPO_ROOT/target/arm64-installer}"
|
||||
PACKAGE_PREFIX="${PACKAGE_PREFIX:-ours-rp-arm64-installer}"
|
||||
TEMPLATE_DIR="${TEMPLATE_DIR:-$REPO_ROOT/deploy/arm64-installer}"
|
||||
|
||||
usage() {
|
||||
cat <<'USAGE'
|
||||
Usage:
|
||||
scripts/docker/build_arm64_installer_package.sh [options]
|
||||
|
||||
Options:
|
||||
--image <tag> Runtime image tag recorded in package manifest.
|
||||
--image-tar <path> Existing docker save tar/tar.gz to include.
|
||||
--out-dir <path> Output directory.
|
||||
--prefix <name> Package directory/tar prefix.
|
||||
-h, --help Show help.
|
||||
|
||||
If --image-tar is omitted, the script uses the newest
|
||||
target/arm64-docker/*.tar.gz file.
|
||||
USAGE
|
||||
}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--image)
|
||||
IMAGE_TAG="$2"
|
||||
shift 2
|
||||
;;
|
||||
--image-tar)
|
||||
IMAGE_TAR="$2"
|
||||
shift 2
|
||||
;;
|
||||
--out-dir)
|
||||
OUT_DIR="$2"
|
||||
shift 2
|
||||
;;
|
||||
--prefix)
|
||||
PACKAGE_PREFIX="$2"
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "unknown option: $1" >&2
|
||||
usage >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[[ -d "$TEMPLATE_DIR" ]] || {
|
||||
echo "missing template dir: $TEMPLATE_DIR" >&2
|
||||
exit 2
|
||||
}
|
||||
|
||||
if [[ -z "$IMAGE_TAR" ]]; then
|
||||
IMAGE_TAR="$(find "$REPO_ROOT/target/arm64-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}')"
|
||||
fi
|
||||
|
||||
[[ -n "$IMAGE_TAR" && -f "$IMAGE_TAR" ]] || {
|
||||
cat >&2 <<EOF
|
||||
missing runtime image tar.
|
||||
|
||||
Build one first, for example:
|
||||
scripts/docker/build_arm64_runtime_image.sh --image $IMAGE_TAG
|
||||
EOF
|
||||
exit 2
|
||||
}
|
||||
|
||||
mkdir -p "$OUT_DIR"
|
||||
commit="$(git -C "$REPO_ROOT" rev-parse --short HEAD 2>/dev/null || echo unknown)"
|
||||
timestamp="$(date -u +%Y%m%dT%H%M%SZ)"
|
||||
package_name="${PACKAGE_PREFIX}-${timestamp}-${commit}"
|
||||
stage="$OUT_DIR/$package_name"
|
||||
tar_path="$OUT_DIR/$package_name.tar.gz"
|
||||
|
||||
rm -rf "$stage"
|
||||
mkdir -p "$stage/images"
|
||||
rsync -a --delete "$TEMPLATE_DIR"/ "$stage"/
|
||||
cp "$IMAGE_TAR" "$stage/images/"
|
||||
|
||||
if [[ -f "$stage/.env.example" ]]; then
|
||||
tmp_env="$stage/.env.example.tmp"
|
||||
awk -v image="$IMAGE_TAG" '
|
||||
BEGIN { done=0 }
|
||||
/^RPKI_IMAGE=/ { print "RPKI_IMAGE=" image; done=1; next }
|
||||
{ print }
|
||||
END { if (!done) print "RPKI_IMAGE=" image }
|
||||
' "$stage/.env.example" > "$tmp_env"
|
||||
mv "$tmp_env" "$stage/.env.example"
|
||||
fi
|
||||
|
||||
cat > "$stage/PACKAGE-MANIFEST.env" <<EOF
|
||||
package_name=$package_name
|
||||
created_at_utc=$timestamp
|
||||
git_commit=$commit
|
||||
git_status_count=$(git -C "$REPO_ROOT" status --short 2>/dev/null | wc -l | tr -d ' ')
|
||||
image_tag=$IMAGE_TAG
|
||||
image_tar=$(basename "$IMAGE_TAR")
|
||||
image_tar_size_bytes=$(wc -c < "$IMAGE_TAR")
|
||||
target_platform=linux/arm64
|
||||
EOF
|
||||
|
||||
chmod +x "$stage"/*.sh "$stage/scripts"/*.sh
|
||||
tar -C "$OUT_DIR" -czf "$tar_path" "$package_name"
|
||||
|
||||
{
|
||||
echo "package=$tar_path"
|
||||
echo "package_dir=$stage"
|
||||
echo "package_size_bytes=$(wc -c < "$tar_path")"
|
||||
echo "manifest=$stage/PACKAGE-MANIFEST.env"
|
||||
} > "$OUT_DIR/$package_name.summary.env"
|
||||
|
||||
echo "package built: $tar_path"
|
||||
Reference in New Issue
Block a user