#!/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."