From 3107d504ce618b07b523526159e08f0495e08151 Mon Sep 17 00:00:00 2001 From: cruizba Date: Mon, 2 Jun 2025 17:47:46 +0200 Subject: [PATCH] openvidu-deployment: Force minimum docker and docker-compose version. --- .../community/singlenode/install.sh | 81 +++++++++++++++---- .../pro/elastic/install_ov_master_node.sh | 81 +++++++++++++++---- .../pro/elastic/install_ov_media_node.sh | 81 +++++++++++++++---- .../pro/ha/install_ov_master_node.sh | 81 +++++++++++++++---- .../pro/ha/install_ov_media_node.sh | 81 +++++++++++++++---- openvidu-deployment/pro/singlenode/install.sh | 81 +++++++++++++++---- 6 files changed, 402 insertions(+), 84 deletions(-) diff --git a/openvidu-deployment/community/singlenode/install.sh b/openvidu-deployment/community/singlenode/install.sh index 8ed8677d..5cebaea6 100644 --- a/openvidu-deployment/community/singlenode/install.sh +++ b/openvidu-deployment/community/singlenode/install.sh @@ -27,6 +27,25 @@ export LOKI_IMAGE="${LOKI_IMAGE:-docker.io/grafana/loki:3.5.1}" export MIMIR_IMAGE="${MIMIR_IMAGE:-docker.io/bitnami/grafana-mimir:2.16.0}" export GRAFANA_IMAGE="${GRAFANA_IMAGE:-docker.io/grafana/grafana:11.6.2}" +# Function to compare two version strings +compare_versions() { + # Remove 'v' prefix if present + VERSION1=$(echo "$1" | sed 's/^v//') + VERSION2=$(echo "$2" | sed 's/^v//') + + # Compare versions + if [ "$(printf '%s\n' "$VERSION1" "$VERSION2" | sort -V | head -n1)" = "$VERSION1" ]; then + if [ "$VERSION1" = "$VERSION2" ]; then + echo "equal" + else + echo "lower" + fi + else + echo "higher" + fi +} + + wait_for_docker() { echo "Waiting for Docker to start..." @@ -57,16 +76,52 @@ if [ "$(id -u)" -ne 0 ]; then exit 1 fi -if ! command -v docker > /dev/null 2>&1 -then - curl -fsSL https://get.docker.com -o /tmp/get-docker.sh - sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +# Check Docker installation and version +DOCKER_NEEDED=false +if ! command -v docker > /dev/null 2>&1; then + echo "Docker not found. Will install Docker version ${DOCKER_VERSION}." + DOCKER_NEEDED=true else - echo "Docker already installed. Check you have the latest version for best compatibility" + CURRENT_DOCKER_VERSION=$(docker --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + VERSION_COMPARISON=$(compare_versions "$CURRENT_DOCKER_VERSION" "$DOCKER_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker version $CURRENT_DOCKER_VERSION is older than required version $DOCKER_VERSION." + echo "Please update Docker to version $DOCKER_VERSION or later." + exit 1 + else + echo "Docker version $CURRENT_DOCKER_VERSION is compatible with required version $DOCKER_VERSION." + fi fi -if ! command -v docker-compose > /dev/null 2>&1 -then +# Install Docker if needed +if [ "$DOCKER_NEEDED" = true ]; then + curl -fsSL https://get.docker.com -o /tmp/get-docker.sh + sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +fi + +# Check Docker Compose installation and version +DOCKER_COMPOSE_NEEDED=false +if ! command -v docker-compose > /dev/null 2>&1; then + echo "Docker Compose not found. Will install Docker Compose version ${DOCKER_COMPOSE_VERSION}." + DOCKER_COMPOSE_NEEDED=true +else + CURRENT_DC_VERSION=$(docker-compose --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + # Add 'v' prefix for proper comparison + CURRENT_DC_VERSION="v${CURRENT_DC_VERSION}" + VERSION_COMPARISON=$(compare_versions "$CURRENT_DC_VERSION" "$DOCKER_COMPOSE_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker Compose version $CURRENT_DC_VERSION is older than required version $DOCKER_COMPOSE_VERSION." + echo "Will update Docker Compose to version $DOCKER_COMPOSE_VERSION." + DOCKER_COMPOSE_NEEDED=true + else + echo "Docker Compose version $CURRENT_DC_VERSION is compatible with required version $DOCKER_COMPOSE_VERSION." + fi +fi + +# Install or update Docker Compose if needed +if [ "$DOCKER_COMPOSE_NEEDED" = true ]; then TIME_LIMIT_SECONDS=20 START_TIME=$(awk 'BEGIN{srand(); print srand()}') while true @@ -74,24 +129,24 @@ then CURRENT_TIME=$(awk 'BEGIN{srand(); print srand()}') if [ $((CURRENT_TIME-START_TIME)) -gt $TIME_LIMIT_SECONDS ]; then echo "Error downloading docker-compose. Could not download it in $TIME_LIMIT_SECONDS seconds" - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose exit 1 fi STATUS_RECEIVED=$(curl --retry 5 --retry-max-time 40 --write-out "%{http_code}\n" -L "https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose) CURL_EXIT_CODE=$? if [ $CURL_EXIT_CODE -ne 0 ]; then echo "Error downloading docker-compose. curl failed with exit code $CURL_EXIT_CODE. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi if [ "${STATUS_RECEIVED}" -ne "200" ]; then echo "Error downloading docker-compose. Received HTTP status code $STATUS_RECEIVED. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi - echo "Success downloading docker-compose" + echo "Success downloading docker-compose version $DOCKER_COMPOSE_VERSION" chmod 755 /usr/local/bin/docker-compose break done @@ -99,9 +154,7 @@ then # Create a symbolic link to docker-compose in the Docker CLI plugins directory # so docker compose can be used also mkdir -p /usr/local/lib/docker/cli-plugins - ln -s /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose -else - echo "Docker Compose already installed. Check you have the latest version for best compatibility" + ln -sf /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose fi # Restart Docker and wait for it to start diff --git a/openvidu-deployment/pro/elastic/install_ov_master_node.sh b/openvidu-deployment/pro/elastic/install_ov_master_node.sh index 222f31ed..86fa3917 100644 --- a/openvidu-deployment/pro/elastic/install_ov_master_node.sh +++ b/openvidu-deployment/pro/elastic/install_ov_master_node.sh @@ -27,6 +27,25 @@ export LOKI_IMAGE="${LOKI_IMAGE:-docker.io/grafana/loki:3.5.1}" export MIMIR_IMAGE="${MIMIR_IMAGE:-docker.io/bitnami/grafana-mimir:2.16.0}" export GRAFANA_IMAGE="${GRAFANA_IMAGE:-docker.io/grafana/grafana:11.6.2}" +# Function to compare two version strings +compare_versions() { + # Remove 'v' prefix if present + VERSION1=$(echo "$1" | sed 's/^v//') + VERSION2=$(echo "$2" | sed 's/^v//') + + # Compare versions + if [ "$(printf '%s\n' "$VERSION1" "$VERSION2" | sort -V | head -n1)" = "$VERSION1" ]; then + if [ "$VERSION1" = "$VERSION2" ]; then + echo "equal" + else + echo "lower" + fi + else + echo "higher" + fi +} + + wait_for_docker() { echo "Waiting for Docker to start..." @@ -57,16 +76,52 @@ if [ "$(id -u)" -ne 0 ]; then exit 1 fi -if ! command -v docker > /dev/null 2>&1 -then - curl -fsSL https://get.docker.com -o /tmp/get-docker.sh - sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +# Check Docker installation and version +DOCKER_NEEDED=false +if ! command -v docker > /dev/null 2>&1; then + echo "Docker not found. Will install Docker version ${DOCKER_VERSION}." + DOCKER_NEEDED=true else - echo "Docker already installed. Check you have the latest version for best compatibility" + CURRENT_DOCKER_VERSION=$(docker --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + VERSION_COMPARISON=$(compare_versions "$CURRENT_DOCKER_VERSION" "$DOCKER_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker version $CURRENT_DOCKER_VERSION is older than required version $DOCKER_VERSION." + echo "Please update Docker to version $DOCKER_VERSION or later." + exit 1 + else + echo "Docker version $CURRENT_DOCKER_VERSION is compatible with required version $DOCKER_VERSION." + fi fi -if ! command -v docker-compose > /dev/null 2>&1 -then +# Install Docker if needed +if [ "$DOCKER_NEEDED" = true ]; then + curl -fsSL https://get.docker.com -o /tmp/get-docker.sh + sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +fi + +# Check Docker Compose installation and version +DOCKER_COMPOSE_NEEDED=false +if ! command -v docker-compose > /dev/null 2>&1; then + echo "Docker Compose not found. Will install Docker Compose version ${DOCKER_COMPOSE_VERSION}." + DOCKER_COMPOSE_NEEDED=true +else + CURRENT_DC_VERSION=$(docker-compose --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + # Add 'v' prefix for proper comparison + CURRENT_DC_VERSION="v${CURRENT_DC_VERSION}" + VERSION_COMPARISON=$(compare_versions "$CURRENT_DC_VERSION" "$DOCKER_COMPOSE_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker Compose version $CURRENT_DC_VERSION is older than required version $DOCKER_COMPOSE_VERSION." + echo "Will update Docker Compose to version $DOCKER_COMPOSE_VERSION." + DOCKER_COMPOSE_NEEDED=true + else + echo "Docker Compose version $CURRENT_DC_VERSION is compatible with required version $DOCKER_COMPOSE_VERSION." + fi +fi + +# Install or update Docker Compose if needed +if [ "$DOCKER_COMPOSE_NEEDED" = true ]; then TIME_LIMIT_SECONDS=20 START_TIME=$(awk 'BEGIN{srand(); print srand()}') while true @@ -74,24 +129,24 @@ then CURRENT_TIME=$(awk 'BEGIN{srand(); print srand()}') if [ $((CURRENT_TIME-START_TIME)) -gt $TIME_LIMIT_SECONDS ]; then echo "Error downloading docker-compose. Could not download it in $TIME_LIMIT_SECONDS seconds" - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose exit 1 fi STATUS_RECEIVED=$(curl --retry 5 --retry-max-time 40 --write-out "%{http_code}\n" -L "https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose) CURL_EXIT_CODE=$? if [ $CURL_EXIT_CODE -ne 0 ]; then echo "Error downloading docker-compose. curl failed with exit code $CURL_EXIT_CODE. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi if [ "${STATUS_RECEIVED}" -ne "200" ]; then echo "Error downloading docker-compose. Received HTTP status code $STATUS_RECEIVED. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi - echo "Success downloading docker-compose" + echo "Success downloading docker-compose version $DOCKER_COMPOSE_VERSION" chmod 755 /usr/local/bin/docker-compose break done @@ -99,9 +154,7 @@ then # Create a symbolic link to docker-compose in the Docker CLI plugins directory # so docker compose can be used also mkdir -p /usr/local/lib/docker/cli-plugins - ln -s /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose -else - echo "Docker Compose already installed. Check you have the latest version for best compatibility" + ln -sf /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose fi # Restart Docker and wait for it to start diff --git a/openvidu-deployment/pro/elastic/install_ov_media_node.sh b/openvidu-deployment/pro/elastic/install_ov_media_node.sh index 0beb0720..98ae6a91 100644 --- a/openvidu-deployment/pro/elastic/install_ov_media_node.sh +++ b/openvidu-deployment/pro/elastic/install_ov_media_node.sh @@ -27,6 +27,25 @@ export LOKI_IMAGE="${LOKI_IMAGE:-docker.io/grafana/loki:3.5.1}" export MIMIR_IMAGE="${MIMIR_IMAGE:-docker.io/bitnami/grafana-mimir:2.16.0}" export GRAFANA_IMAGE="${GRAFANA_IMAGE:-docker.io/grafana/grafana:11.6.2}" +# Function to compare two version strings +compare_versions() { + # Remove 'v' prefix if present + VERSION1=$(echo "$1" | sed 's/^v//') + VERSION2=$(echo "$2" | sed 's/^v//') + + # Compare versions + if [ "$(printf '%s\n' "$VERSION1" "$VERSION2" | sort -V | head -n1)" = "$VERSION1" ]; then + if [ "$VERSION1" = "$VERSION2" ]; then + echo "equal" + else + echo "lower" + fi + else + echo "higher" + fi +} + + wait_for_docker() { echo "Waiting for Docker to start..." @@ -57,16 +76,52 @@ if [ "$(id -u)" -ne 0 ]; then exit 1 fi -if ! command -v docker > /dev/null 2>&1 -then - curl -fsSL https://get.docker.com -o /tmp/get-docker.sh - sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +# Check Docker installation and version +DOCKER_NEEDED=false +if ! command -v docker > /dev/null 2>&1; then + echo "Docker not found. Will install Docker version ${DOCKER_VERSION}." + DOCKER_NEEDED=true else - echo "Docker already installed. Check you have the latest version for best compatibility" + CURRENT_DOCKER_VERSION=$(docker --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + VERSION_COMPARISON=$(compare_versions "$CURRENT_DOCKER_VERSION" "$DOCKER_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker version $CURRENT_DOCKER_VERSION is older than required version $DOCKER_VERSION." + echo "Please update Docker to version $DOCKER_VERSION or later." + exit 1 + else + echo "Docker version $CURRENT_DOCKER_VERSION is compatible with required version $DOCKER_VERSION." + fi fi -if ! command -v docker-compose > /dev/null 2>&1 -then +# Install Docker if needed +if [ "$DOCKER_NEEDED" = true ]; then + curl -fsSL https://get.docker.com -o /tmp/get-docker.sh + sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +fi + +# Check Docker Compose installation and version +DOCKER_COMPOSE_NEEDED=false +if ! command -v docker-compose > /dev/null 2>&1; then + echo "Docker Compose not found. Will install Docker Compose version ${DOCKER_COMPOSE_VERSION}." + DOCKER_COMPOSE_NEEDED=true +else + CURRENT_DC_VERSION=$(docker-compose --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + # Add 'v' prefix for proper comparison + CURRENT_DC_VERSION="v${CURRENT_DC_VERSION}" + VERSION_COMPARISON=$(compare_versions "$CURRENT_DC_VERSION" "$DOCKER_COMPOSE_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker Compose version $CURRENT_DC_VERSION is older than required version $DOCKER_COMPOSE_VERSION." + echo "Will update Docker Compose to version $DOCKER_COMPOSE_VERSION." + DOCKER_COMPOSE_NEEDED=true + else + echo "Docker Compose version $CURRENT_DC_VERSION is compatible with required version $DOCKER_COMPOSE_VERSION." + fi +fi + +# Install or update Docker Compose if needed +if [ "$DOCKER_COMPOSE_NEEDED" = true ]; then TIME_LIMIT_SECONDS=20 START_TIME=$(awk 'BEGIN{srand(); print srand()}') while true @@ -74,24 +129,24 @@ then CURRENT_TIME=$(awk 'BEGIN{srand(); print srand()}') if [ $((CURRENT_TIME-START_TIME)) -gt $TIME_LIMIT_SECONDS ]; then echo "Error downloading docker-compose. Could not download it in $TIME_LIMIT_SECONDS seconds" - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose exit 1 fi STATUS_RECEIVED=$(curl --retry 5 --retry-max-time 40 --write-out "%{http_code}\n" -L "https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose) CURL_EXIT_CODE=$? if [ $CURL_EXIT_CODE -ne 0 ]; then echo "Error downloading docker-compose. curl failed with exit code $CURL_EXIT_CODE. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi if [ "${STATUS_RECEIVED}" -ne "200" ]; then echo "Error downloading docker-compose. Received HTTP status code $STATUS_RECEIVED. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi - echo "Success downloading docker-compose" + echo "Success downloading docker-compose version $DOCKER_COMPOSE_VERSION" chmod 755 /usr/local/bin/docker-compose break done @@ -99,9 +154,7 @@ then # Create a symbolic link to docker-compose in the Docker CLI plugins directory # so docker compose can be used also mkdir -p /usr/local/lib/docker/cli-plugins - ln -s /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose -else - echo "Docker Compose already installed. Check you have the latest version for best compatibility" + ln -sf /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose fi # Restart Docker and wait for it to start diff --git a/openvidu-deployment/pro/ha/install_ov_master_node.sh b/openvidu-deployment/pro/ha/install_ov_master_node.sh index ba2c6366..01cff7ae 100644 --- a/openvidu-deployment/pro/ha/install_ov_master_node.sh +++ b/openvidu-deployment/pro/ha/install_ov_master_node.sh @@ -27,6 +27,25 @@ export LOKI_IMAGE="${LOKI_IMAGE:-docker.io/grafana/loki:3.5.1}" export MIMIR_IMAGE="${MIMIR_IMAGE:-docker.io/bitnami/grafana-mimir:2.16.0}" export GRAFANA_IMAGE="${GRAFANA_IMAGE:-docker.io/grafana/grafana:11.6.2}" +# Function to compare two version strings +compare_versions() { + # Remove 'v' prefix if present + VERSION1=$(echo "$1" | sed 's/^v//') + VERSION2=$(echo "$2" | sed 's/^v//') + + # Compare versions + if [ "$(printf '%s\n' "$VERSION1" "$VERSION2" | sort -V | head -n1)" = "$VERSION1" ]; then + if [ "$VERSION1" = "$VERSION2" ]; then + echo "equal" + else + echo "lower" + fi + else + echo "higher" + fi +} + + wait_for_docker() { echo "Waiting for Docker to start..." @@ -57,16 +76,52 @@ if [ "$(id -u)" -ne 0 ]; then exit 1 fi -if ! command -v docker > /dev/null 2>&1 -then - curl -fsSL https://get.docker.com -o /tmp/get-docker.sh - sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +# Check Docker installation and version +DOCKER_NEEDED=false +if ! command -v docker > /dev/null 2>&1; then + echo "Docker not found. Will install Docker version ${DOCKER_VERSION}." + DOCKER_NEEDED=true else - echo "Docker already installed. Check you have the latest version for best compatibility" + CURRENT_DOCKER_VERSION=$(docker --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + VERSION_COMPARISON=$(compare_versions "$CURRENT_DOCKER_VERSION" "$DOCKER_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker version $CURRENT_DOCKER_VERSION is older than required version $DOCKER_VERSION." + echo "Please update Docker to version $DOCKER_VERSION or later." + exit 1 + else + echo "Docker version $CURRENT_DOCKER_VERSION is compatible with required version $DOCKER_VERSION." + fi fi -if ! command -v docker-compose > /dev/null 2>&1 -then +# Install Docker if needed +if [ "$DOCKER_NEEDED" = true ]; then + curl -fsSL https://get.docker.com -o /tmp/get-docker.sh + sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +fi + +# Check Docker Compose installation and version +DOCKER_COMPOSE_NEEDED=false +if ! command -v docker-compose > /dev/null 2>&1; then + echo "Docker Compose not found. Will install Docker Compose version ${DOCKER_COMPOSE_VERSION}." + DOCKER_COMPOSE_NEEDED=true +else + CURRENT_DC_VERSION=$(docker-compose --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + # Add 'v' prefix for proper comparison + CURRENT_DC_VERSION="v${CURRENT_DC_VERSION}" + VERSION_COMPARISON=$(compare_versions "$CURRENT_DC_VERSION" "$DOCKER_COMPOSE_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker Compose version $CURRENT_DC_VERSION is older than required version $DOCKER_COMPOSE_VERSION." + echo "Will update Docker Compose to version $DOCKER_COMPOSE_VERSION." + DOCKER_COMPOSE_NEEDED=true + else + echo "Docker Compose version $CURRENT_DC_VERSION is compatible with required version $DOCKER_COMPOSE_VERSION." + fi +fi + +# Install or update Docker Compose if needed +if [ "$DOCKER_COMPOSE_NEEDED" = true ]; then TIME_LIMIT_SECONDS=20 START_TIME=$(awk 'BEGIN{srand(); print srand()}') while true @@ -74,24 +129,24 @@ then CURRENT_TIME=$(awk 'BEGIN{srand(); print srand()}') if [ $((CURRENT_TIME-START_TIME)) -gt $TIME_LIMIT_SECONDS ]; then echo "Error downloading docker-compose. Could not download it in $TIME_LIMIT_SECONDS seconds" - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose exit 1 fi STATUS_RECEIVED=$(curl --retry 5 --retry-max-time 40 --write-out "%{http_code}\n" -L "https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose) CURL_EXIT_CODE=$? if [ $CURL_EXIT_CODE -ne 0 ]; then echo "Error downloading docker-compose. curl failed with exit code $CURL_EXIT_CODE. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi if [ "${STATUS_RECEIVED}" -ne "200" ]; then echo "Error downloading docker-compose. Received HTTP status code $STATUS_RECEIVED. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi - echo "Success downloading docker-compose" + echo "Success downloading docker-compose version $DOCKER_COMPOSE_VERSION" chmod 755 /usr/local/bin/docker-compose break done @@ -99,9 +154,7 @@ then # Create a symbolic link to docker-compose in the Docker CLI plugins directory # so docker compose can be used also mkdir -p /usr/local/lib/docker/cli-plugins - ln -s /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose -else - echo "Docker Compose already installed. Check you have the latest version for best compatibility" + ln -sf /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose fi # Restart Docker and wait for it to start diff --git a/openvidu-deployment/pro/ha/install_ov_media_node.sh b/openvidu-deployment/pro/ha/install_ov_media_node.sh index c4dcadf7..5e352edc 100644 --- a/openvidu-deployment/pro/ha/install_ov_media_node.sh +++ b/openvidu-deployment/pro/ha/install_ov_media_node.sh @@ -27,6 +27,25 @@ export LOKI_IMAGE="${LOKI_IMAGE:-docker.io/grafana/loki:3.5.1}" export MIMIR_IMAGE="${MIMIR_IMAGE:-docker.io/bitnami/grafana-mimir:2.16.0}" export GRAFANA_IMAGE="${GRAFANA_IMAGE:-docker.io/grafana/grafana:11.6.2}" +# Function to compare two version strings +compare_versions() { + # Remove 'v' prefix if present + VERSION1=$(echo "$1" | sed 's/^v//') + VERSION2=$(echo "$2" | sed 's/^v//') + + # Compare versions + if [ "$(printf '%s\n' "$VERSION1" "$VERSION2" | sort -V | head -n1)" = "$VERSION1" ]; then + if [ "$VERSION1" = "$VERSION2" ]; then + echo "equal" + else + echo "lower" + fi + else + echo "higher" + fi +} + + wait_for_docker() { echo "Waiting for Docker to start..." @@ -57,16 +76,52 @@ if [ "$(id -u)" -ne 0 ]; then exit 1 fi -if ! command -v docker > /dev/null 2>&1 -then - curl -fsSL https://get.docker.com -o /tmp/get-docker.sh - sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +# Check Docker installation and version +DOCKER_NEEDED=false +if ! command -v docker > /dev/null 2>&1; then + echo "Docker not found. Will install Docker version ${DOCKER_VERSION}." + DOCKER_NEEDED=true else - echo "Docker already installed. Check you have the latest version for best compatibility" + CURRENT_DOCKER_VERSION=$(docker --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + VERSION_COMPARISON=$(compare_versions "$CURRENT_DOCKER_VERSION" "$DOCKER_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker version $CURRENT_DOCKER_VERSION is older than required version $DOCKER_VERSION." + echo "Please update Docker to version $DOCKER_VERSION or later." + exit 1 + else + echo "Docker version $CURRENT_DOCKER_VERSION is compatible with required version $DOCKER_VERSION." + fi fi -if ! command -v docker-compose > /dev/null 2>&1 -then +# Install Docker if needed +if [ "$DOCKER_NEEDED" = true ]; then + curl -fsSL https://get.docker.com -o /tmp/get-docker.sh + sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +fi + +# Check Docker Compose installation and version +DOCKER_COMPOSE_NEEDED=false +if ! command -v docker-compose > /dev/null 2>&1; then + echo "Docker Compose not found. Will install Docker Compose version ${DOCKER_COMPOSE_VERSION}." + DOCKER_COMPOSE_NEEDED=true +else + CURRENT_DC_VERSION=$(docker-compose --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + # Add 'v' prefix for proper comparison + CURRENT_DC_VERSION="v${CURRENT_DC_VERSION}" + VERSION_COMPARISON=$(compare_versions "$CURRENT_DC_VERSION" "$DOCKER_COMPOSE_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker Compose version $CURRENT_DC_VERSION is older than required version $DOCKER_COMPOSE_VERSION." + echo "Will update Docker Compose to version $DOCKER_COMPOSE_VERSION." + DOCKER_COMPOSE_NEEDED=true + else + echo "Docker Compose version $CURRENT_DC_VERSION is compatible with required version $DOCKER_COMPOSE_VERSION." + fi +fi + +# Install or update Docker Compose if needed +if [ "$DOCKER_COMPOSE_NEEDED" = true ]; then TIME_LIMIT_SECONDS=20 START_TIME=$(awk 'BEGIN{srand(); print srand()}') while true @@ -74,24 +129,24 @@ then CURRENT_TIME=$(awk 'BEGIN{srand(); print srand()}') if [ $((CURRENT_TIME-START_TIME)) -gt $TIME_LIMIT_SECONDS ]; then echo "Error downloading docker-compose. Could not download it in $TIME_LIMIT_SECONDS seconds" - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose exit 1 fi STATUS_RECEIVED=$(curl --retry 5 --retry-max-time 40 --write-out "%{http_code}\n" -L "https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose) CURL_EXIT_CODE=$? if [ $CURL_EXIT_CODE -ne 0 ]; then echo "Error downloading docker-compose. curl failed with exit code $CURL_EXIT_CODE. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi if [ "${STATUS_RECEIVED}" -ne "200" ]; then echo "Error downloading docker-compose. Received HTTP status code $STATUS_RECEIVED. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi - echo "Success downloading docker-compose" + echo "Success downloading docker-compose version $DOCKER_COMPOSE_VERSION" chmod 755 /usr/local/bin/docker-compose break done @@ -99,9 +154,7 @@ then # Create a symbolic link to docker-compose in the Docker CLI plugins directory # so docker compose can be used also mkdir -p /usr/local/lib/docker/cli-plugins - ln -s /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose -else - echo "Docker Compose already installed. Check you have the latest version for best compatibility" + ln -sf /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose fi # Restart Docker and wait for it to start diff --git a/openvidu-deployment/pro/singlenode/install.sh b/openvidu-deployment/pro/singlenode/install.sh index bf0c0697..1e863801 100644 --- a/openvidu-deployment/pro/singlenode/install.sh +++ b/openvidu-deployment/pro/singlenode/install.sh @@ -27,6 +27,25 @@ export LOKI_IMAGE="${LOKI_IMAGE:-docker.io/grafana/loki:3.5.1}" export MIMIR_IMAGE="${MIMIR_IMAGE:-docker.io/bitnami/grafana-mimir:2.16.0}" export GRAFANA_IMAGE="${GRAFANA_IMAGE:-docker.io/grafana/grafana:11.6.2}" +# Function to compare two version strings +compare_versions() { + # Remove 'v' prefix if present + VERSION1=$(echo "$1" | sed 's/^v//') + VERSION2=$(echo "$2" | sed 's/^v//') + + # Compare versions + if [ "$(printf '%s\n' "$VERSION1" "$VERSION2" | sort -V | head -n1)" = "$VERSION1" ]; then + if [ "$VERSION1" = "$VERSION2" ]; then + echo "equal" + else + echo "lower" + fi + else + echo "higher" + fi +} + + wait_for_docker() { echo "Waiting for Docker to start..." @@ -57,16 +76,52 @@ if [ "$(id -u)" -ne 0 ]; then exit 1 fi -if ! command -v docker > /dev/null 2>&1 -then - curl -fsSL https://get.docker.com -o /tmp/get-docker.sh - sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +# Check Docker installation and version +DOCKER_NEEDED=false +if ! command -v docker > /dev/null 2>&1; then + echo "Docker not found. Will install Docker version ${DOCKER_VERSION}." + DOCKER_NEEDED=true else - echo "Docker already installed. Check you have the latest version for best compatibility" + CURRENT_DOCKER_VERSION=$(docker --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + VERSION_COMPARISON=$(compare_versions "$CURRENT_DOCKER_VERSION" "$DOCKER_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker version $CURRENT_DOCKER_VERSION is older than required version $DOCKER_VERSION." + echo "Please update Docker to version $DOCKER_VERSION or later." + exit 1 + else + echo "Docker version $CURRENT_DOCKER_VERSION is compatible with required version $DOCKER_VERSION." + fi fi -if ! command -v docker-compose > /dev/null 2>&1 -then +# Install Docker if needed +if [ "$DOCKER_NEEDED" = true ]; then + curl -fsSL https://get.docker.com -o /tmp/get-docker.sh + sh /tmp/get-docker.sh --version "${DOCKER_VERSION}" || { echo "Can't install Docker automatically. Install it manually and run this script again"; exit 1; } +fi + +# Check Docker Compose installation and version +DOCKER_COMPOSE_NEEDED=false +if ! command -v docker-compose > /dev/null 2>&1; then + echo "Docker Compose not found. Will install Docker Compose version ${DOCKER_COMPOSE_VERSION}." + DOCKER_COMPOSE_NEEDED=true +else + CURRENT_DC_VERSION=$(docker-compose --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + # Add 'v' prefix for proper comparison + CURRENT_DC_VERSION="v${CURRENT_DC_VERSION}" + VERSION_COMPARISON=$(compare_versions "$CURRENT_DC_VERSION" "$DOCKER_COMPOSE_VERSION") + + if [ "$VERSION_COMPARISON" = "lower" ]; then + echo "Docker Compose version $CURRENT_DC_VERSION is older than required version $DOCKER_COMPOSE_VERSION." + echo "Will update Docker Compose to version $DOCKER_COMPOSE_VERSION." + DOCKER_COMPOSE_NEEDED=true + else + echo "Docker Compose version $CURRENT_DC_VERSION is compatible with required version $DOCKER_COMPOSE_VERSION." + fi +fi + +# Install or update Docker Compose if needed +if [ "$DOCKER_COMPOSE_NEEDED" = true ]; then TIME_LIMIT_SECONDS=20 START_TIME=$(awk 'BEGIN{srand(); print srand()}') while true @@ -74,24 +129,24 @@ then CURRENT_TIME=$(awk 'BEGIN{srand(); print srand()}') if [ $((CURRENT_TIME-START_TIME)) -gt $TIME_LIMIT_SECONDS ]; then echo "Error downloading docker-compose. Could not download it in $TIME_LIMIT_SECONDS seconds" - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose exit 1 fi STATUS_RECEIVED=$(curl --retry 5 --retry-max-time 40 --write-out "%{http_code}\n" -L "https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose) CURL_EXIT_CODE=$? if [ $CURL_EXIT_CODE -ne 0 ]; then echo "Error downloading docker-compose. curl failed with exit code $CURL_EXIT_CODE. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi if [ "${STATUS_RECEIVED}" -ne "200" ]; then echo "Error downloading docker-compose. Received HTTP status code $STATUS_RECEIVED. There are still $((TIME_LIMIT_SECONDS - (CURRENT_TIME - START_TIME))) seconds left to retry..." - rm -rf /usr/local/bin/docker-compose + rm -f /usr/local/bin/docker-compose sleep 2 continue fi - echo "Success downloading docker-compose" + echo "Success downloading docker-compose version $DOCKER_COMPOSE_VERSION" chmod 755 /usr/local/bin/docker-compose break done @@ -99,9 +154,7 @@ then # Create a symbolic link to docker-compose in the Docker CLI plugins directory # so docker compose can be used also mkdir -p /usr/local/lib/docker/cli-plugins - ln -s /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose -else - echo "Docker Compose already installed. Check you have the latest version for best compatibility" + ln -sf /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose fi # Restart Docker and wait for it to start