64 lines
2.0 KiB
Bash
Executable File
64 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
CONFIG_FILE="${DEPLOY_CONFIG:-deploy-routeros.env}"
|
|
if [ -f "$CONFIG_FILE" ]; then
|
|
# shellcheck disable=SC1090
|
|
case "$CONFIG_FILE" in
|
|
/*) . "$CONFIG_FILE" ;;
|
|
*) . "./$CONFIG_FILE" ;;
|
|
esac
|
|
fi
|
|
|
|
: "${ROUTER_HOST:=192.168.88.1}"
|
|
: "${ROUTER_USER:=admin}"
|
|
: "${ROUTER_PORT:=22}"
|
|
: "${ROUTER_IDENTITY_FILE:=}"
|
|
: "${ROUTER_SCP_DIR:=/}"
|
|
: "${REMOTE_IMAGE_NAME:=}"
|
|
|
|
IMAGE_PATH="${1:-}"
|
|
if [ -z "$IMAGE_PATH" ]; then
|
|
echo "Usage: $0 /path/to/ready-image.tar" >&2
|
|
echo "This script only uploads the TAR. It never builds or deploys it." >&2
|
|
exit 2
|
|
fi
|
|
[ -f "$IMAGE_PATH" ] || { echo "Ready image TAR not found: $IMAGE_PATH" >&2; exit 2; }
|
|
case "$IMAGE_PATH" in
|
|
*.tar) ;;
|
|
*) echo "Expected a .tar image archive: $IMAGE_PATH" >&2; exit 2 ;;
|
|
esac
|
|
|
|
command -v scp >/dev/null 2>&1 || { echo "scp is required" >&2; exit 2; }
|
|
command -v ssh >/dev/null 2>&1 || { echo "ssh is required" >&2; exit 2; }
|
|
|
|
if [ -z "$REMOTE_IMAGE_NAME" ]; then
|
|
REMOTE_IMAGE_NAME="$(basename "$IMAGE_PATH")"
|
|
fi
|
|
case "$REMOTE_IMAGE_NAME" in
|
|
*'/'*|*'\\'*|*'"'*|*';'*|*'$'*|*'`'*)
|
|
echo "REMOTE_IMAGE_NAME contains unsupported characters" >&2
|
|
exit 3
|
|
;;
|
|
esac
|
|
|
|
SSH_TARGET="${ROUTER_USER}@${ROUTER_HOST}"
|
|
REMOTE_PATH="${ROUTER_SCP_DIR%/}/${REMOTE_IMAGE_NAME}"
|
|
[ "$ROUTER_SCP_DIR" = "/" ] && REMOTE_PATH="/${REMOTE_IMAGE_NAME}"
|
|
REMOTE_ROS_NAME="${REMOTE_PATH#/}"
|
|
|
|
printf '[upload] %s -> %s:%s\n' "$IMAGE_PATH" "$SSH_TARGET" "$REMOTE_PATH"
|
|
if [ -n "$ROUTER_IDENTITY_FILE" ]; then
|
|
scp -i "$ROUTER_IDENTITY_FILE" -P "$ROUTER_PORT" "$IMAGE_PATH" "${SSH_TARGET}:$REMOTE_PATH"
|
|
ssh -i "$ROUTER_IDENTITY_FILE" -p "$ROUTER_PORT" "$SSH_TARGET" "/file/print without-paging where name=\"${REMOTE_ROS_NAME}\"" || true
|
|
else
|
|
scp -P "$ROUTER_PORT" "$IMAGE_PATH" "${SSH_TARGET}:$REMOTE_PATH"
|
|
ssh -p "$ROUTER_PORT" "$SSH_TARGET" "/file/print without-paging where name=\"${REMOTE_ROS_NAME}\"" || true
|
|
fi
|
|
|
|
echo "[upload] done"
|
|
echo "RouterOS file: ${REMOTE_ROS_NAME}"
|
|
echo "Nothing was built, imported, deployed or started."
|