Просмотр исходного кода

- winbox download has been changed. It is now placed in a separate winbox directory.
- Optimized the script. Added a log

Dmitriev Roman 7 месяцев назад
Родитель
Сommit
c25b7c4364
10 измененных файлов с 511 добавлено и 557 удалено
  1. 4 0
      CHANGELOG
  2. 1 1
      README.md
  3. 32 0
      config.sh
  4. 0 89
      download_ROS7_release.sh
  5. 0 102
      download_ROS7a_release.sh
  6. 99 0
      download_ros.sh
  7. 81 0
      functions.sh
  8. 141 0
      ros6_functions.sh
  9. 131 0
      ros7_functions.sh
  10. 22 365
      sync_mikrotik_repo.sh

+ 4 - 0
CHANGELOG

@@ -1,3 +1,7 @@
+What's new (Wed Aug 27 18:18:45 2025):
+*) winbox download has been changed. It is now placed in a separate winbox directory.
+*) Optimized the script. Added a log
+
 What's new (Fri Apr 12 12:31:53 2024):
 
 *) added scripts for downloading the specified release, for versions up to ROS 7.12.1 (download_ROS7_release.sh) and after 7.12.1 (download_ROS7a_release.sh);

+ 1 - 1
README.md

@@ -4,7 +4,7 @@ Get packages from mikrotik repo to you local repo
 
 ### Configure architecture & versions
 
-Change in script:
+Change in config.sh script:
 
 #You local repo path 
 TARGET_DIR="/mnt/mirror/routeros"

+ 32 - 0
config.sh

@@ -0,0 +1,32 @@
+#!/bin/bash
+
+# Конфигурация
+TARGET_DIR="/mnt/md0/mirror/routeros"
+WGET="/bin/wget"
+
+#vars
+LOG_FILE="${TARGET_DIR}/mirror.log"
+TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
+WGET_OPTS="-q -nc"
+
+# Версии ROS
+versions6=("6" "6fix")
+versions7=("stable")
+firmware_arch=("arm" "arm64" "mipsbe" "mmips" "ppc" "smips" "tile" "x86")
+
+# Дополнительные файлы для загрузки
+additional_files=(
+    "btest.exe"
+    "dude-install-VERSION.exe"
+    "flashfig.exe"
+    "install-image-VERSION.zip"
+    "mikrotik-VERSION.iso"
+    "mikrotik.mib"
+    "netinstall64-VERSION.zip"
+    "netinstall-VERSION.tar.gz"
+    "netinstall-VERSION.zip"
+)
+
+# Настройки Winbox
+WINBOX_DIR="${TARGET_DIR}/winbox"
+WINBOX_BASE_URL="https://download.mikrotik.com/routeros/winbox"

+ 0 - 89
download_ROS7_release.sh

@@ -1,89 +0,0 @@
-#!/bin/bash
-
-#wget path & opts
-wget_opts="-q -nc"
-WGET="/bin/wget"
-
-#path for you repo
-TARGET_DIR="/mnt/md0/mirror/routeros"
-
-# ROS 7
-versions7=("stable")
-
-#needed architecture's
-firmware_arch=("arm" "arm64" "mipsbe" "mmips" "ppc" "smips" "tile" "x86")
-
-##################################### Main ###################################################
-
-new_version=$1
-
-[ -z "${new_version}" ] && exit
-
-echo "Get release: ${new_version}"
-
-for firmware_version in "${versions7[@]}"; do
-
-echo "Try download packages..."
-
-if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
-    mkdir -p "${TARGET_DIR}/${new_version}"
-    fi
-
-cd "${TARGET_DIR}/${new_version}"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
-ret=$?
-if [ ${ret} -ne 0 ]; then
-    echo "Error get changelog for ${new_version}. Skip release."
-    continue
-    fi
-download_error=
-for file_arch in "${firmware_arch[@]}"; do
-    #packages
-    ${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
-    ret=$?
-    if [ ${ret} -ne 0 ]; then
-	echo "Error get all_packages-${file_arch}-${new_version}.zip"
-	download_err=1
-        break
-	fi
-    #routeros
-    if [ "${file_arch}" == "x86" ]; then
-        ${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}.npk"
-	else
-        ${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}-${file_arch}.npk"
-        ${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${file_arch}-${new_version}.npk"
-        fi
-    ret=$?
-    if [ ${ret} -ne 0 ]; then
-	echo "Error get routeros-${new_version}-${file_arch}.npk"
-	download_err=1
-        break
-	fi
-    done
-
-if [ -n "${download_err}" ]; then
-    echo "Found errors by download packages for ${new_version} ${firmware_version}. Skip release"
-    download_err=
-    [ -e "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWESTa7.${firmware_version}.new"
-    continue
-    fi
-
-#other files
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
-
-#winbox
-${WGET} ${wget_opts} -U "RouterOS 7.10" "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
-
-echo "ROS 7 version ${new_version} downloaded successfully."
-done
-
-exit

+ 0 - 102
download_ROS7a_release.sh

@@ -1,102 +0,0 @@
-#!/bin/bash
-
-#wget path & opts
-wget_opts="-q -nc"
-WGET="/bin/wget"
-
-#path for you repo
-TARGET_DIR="/mnt/md0/mirror/routeros"
-
-# ROS 7
-versions7=("stable")
-
-#needed architecture's
-firmware_arch=("arm" "arm64" "mipsbe" "mmips" "ppc" "smips" "tile" "x86")
-
-##################################### Main ###################################################
-
-new_version=$1
-
-[ -z "${new_version}" ] && exit
-
-echo "Get release: ${new_version}"
-
-for firmware_version in "${versions7[@]}"; do
-
-echo "Try download packages..."
-
-if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
-    mkdir -p "${TARGET_DIR}/${new_version}"
-    fi
-
-cd "${TARGET_DIR}/${new_version}"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
-ret=$?
-if [ ${ret} -ne 0 ]; then
-    echo "Error get changelog for ${new_version}. Skip release."
-    continue
-    fi
-download_error=
-for file_arch in "${firmware_arch[@]}"; do
-    #packages
-    ${WGET} ${wget_opts}  -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
-    ret=$?
-    if [ ${ret} -ne 0 ]; then
-       echo "Error get all_packages-${file_arch}-${new_version}.zip"
-       download_err=1
-        break
-       fi
-    #routeros
-    if [ "${file_arch}" == "x86" ]; then
-        ${WGET} ${wget_opts}  -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}.npk"
-        if [ ${ret} -ne 0 ]; then
-           echo "Error get routeros-${new_version}-${file_arch}.npk"
-           download_err=1
-           break
-           fi
-        else
-        ${WGET} ${wget_opts}  -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}-${file_arch}.npk"
-        ret=$?
-        if [ ${ret} -ne 0 ]; then
-           echo "Error get routeros-${new_version}-${file_arch}.npk"
-           download_err=1
-           break
-           fi
-        ${WGET} ${wget_opts}  -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${file_arch}-${new_version}.npk" 2>/dev/null
-        #wireless
-        ${WGET} ${wget_opts}  -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/wireless-${new_version}-${file_arch}.npk"
-        ret=$?
-        if [ ${ret} -ne 0 ]; then
-           echo "Error get wireless-${new_version}-${file_arch}.zip"
-           download_err=1
-           break
-           fi
-        fi
-    done
-
-if [ -n "${download_err}" ]; then
-    echo "Found errors by download packages for ${new_version} ${firmware_version}. Skip release"
-    download_err=
-    [ -e "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWESTa7.${firmware_version}.new"
-    continue
-    fi
-
-#other files
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
-
-#winbox
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
-
-echo "ROS 7 version ${new_version} downloaded successfully."
-done
-
-exit

+ 99 - 0
download_ros.sh

@@ -0,0 +1,99 @@
+#!/bin/bash
+
+# Импорт конфигурации и функций
+SCRIPT_DIR="$(dirname "$0")"
+source "${SCRIPT_DIR}/config.sh"
+source "${SCRIPT_DIR}/functions.sh"
+source "${SCRIPT_DIR}/ros6_functions.sh"
+source "${SCRIPT_DIR}/ros7_functions.sh"
+
+# Создаем директорию если нет
+mkdir -p "$TARGET_DIR"
+
+# Начало лога
+log "Starting RouterOS download script"
+#log "Target directory: $TARGET_DIR"
+
+##################################### Main ###################################################
+
+force=$1
+version=$2
+
+if [ -n "${force}" ] && [ "${force}" != "force" ]; then
+    # Если первый параметр не "force", то это может быть версия
+    if [ -z "${version}" ]; then
+        version="${force}"
+        force=""
+    fi
+fi
+
+if [ -n "${force}" ]; then
+    log "Force flag for download packages found!"
+fi
+
+# Функция для преобразования версии в числовой формат
+version_to_number() {
+    local version=$1
+    local major=$(echo $version | cut -d. -f1)
+    local minor=$(echo $version | cut -d. -f2)
+    local patch=$(echo $version | cut -d. -f3)
+    echo $((major * 1000000 + minor * 1000 + patch))
+}
+
+# Функция для определения типа версии и нужного user agent
+get_ros7_user_agent() {
+    local version=$1
+    local version_num=$(version_to_number "$version")
+    local threshold_num=$(version_to_number "7.12.1")
+    
+    if [ $version_num -ge $threshold_num ]; then
+        # Версия равна или выше 7.12.1
+        echo "after"
+    else
+        # Версия ниже 7.12.1
+        echo "before"
+    fi
+}
+
+# Функция для загрузки конкретной версии
+download_specific_version() {
+    local version=$1
+    local version_type=""
+    
+    if [[ "$version" =~ ^6\. ]]; then
+        version_type="ros6"
+    elif [[ "$version" =~ ^7\. ]]; then
+        version_type="ros7"
+    else
+        log_error "Unknown version format: $version"
+        exit 1
+    fi
+    
+    case $version_type in
+        "ros6")
+            log "Downloading specific ROS 6 version: $version"
+            download_specific_ros6_version "$version"
+            ;;
+        "ros7")
+            log "Downloading specific ROS 7 version: $version"
+            local user_agent_info=$(get_ros7_user_agent "$version")
+            if [ "${user_agent_info}" == 'after' ]; then
+        	download_specific_ros7 "RouterOS 7.12.1" "$version"
+        	else
+        	download_specific_ros7 "RouterOS 7.10" "$version"
+		fi
+            ;;
+    esac
+}
+
+if [ -n "${version}" ]; then
+    # Загрузка конкретной версии
+    download_specific_version "$version"
+else
+    # Если версия не передана - не делаем ничего
+    log "No version specified. Exiting."
+    exit 0
+fi
+
+log "Script completed successfully"
+exit 0

+ 81 - 0
functions.sh

@@ -0,0 +1,81 @@
+#!/bin/bash
+
+# Импорт конфигурации
+source "$(dirname "$0")/config.sh"
+
+# Функции логирования
+log() {
+    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
+}
+
+log_error() {
+    echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" | tee -a "$LOG_FILE"
+}
+
+log_success() {
+    echo "[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS: $1" | tee -a "$LOG_FILE"
+}
+
+# Функция проверки ошибок
+check_error() {
+    local ret=$1
+    local message=$2
+    if [ $ret -ne 0 ]; then
+        log_error "$message"
+        return 1
+    fi
+    return 0
+}
+
+# Функция загрузки дополнительных файлов
+download_additional_files() {
+    local version=$1
+    local user_agent=${2:-""}
+    
+    for file in "${additional_files[@]}"; do
+	file=$(echo ${file} | sed "s/VERSION/${version}/")
+        if [ -n "$user_agent" ]; then
+            $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/${file}" || \
+            log "Warning: Failed to download ${file}"
+        else
+            $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${version}/${file}" || \
+            log "Warning: Failed to download ${file}"
+        fi
+    done
+}
+
+# Функция загрузки Winbox
+download_winbox() {
+    log "Downloading Winbox"
+
+    mkdir -p "$WINBOX_DIR"
+
+    LINKS=$($WGET $WGET_OPTS https://mikrotik.com/download -O - | grep -oP 'https?://[^"]*winbox[^"]*\.(exe|zip)' || echo "")
+    if [ -z "$LINKS" ]; then
+        log_error "No winbox links found"
+        return 1
+    fi
+
+    for LINK in $LINKS; do
+        if [[ "$LINK" == ${WINBOX_BASE_URL}/* ]]; then
+            RELATIVE_PATH="${WINBOX_DIR}/${LINK#${WINBOX_BASE_URL}/}"
+            mkdir -p "$(dirname "$RELATIVE_PATH")"
+
+            if [ -f "$RELATIVE_PATH" ]; then
+                log "File already exists: $RELATIVE_PATH"
+                continue
+            fi
+
+            log "Downloading: $LINK"
+            if curl -s -L -o "$RELATIVE_PATH" "$LINK"; then
+                FILE_SIZE=$(du -h "$RELATIVE_PATH" | cut -f1)
+                log_success "Downloaded: $RELATIVE_PATH ($FILE_SIZE)"
+            else
+                log_error "Failed to download: $LINK"
+                rm -f "$RELATIVE_PATH"
+            fi
+        else
+            log "Skipping external link: $LINK"
+        fi
+    done
+}

+ 141 - 0
ros6_functions.sh

@@ -0,0 +1,141 @@
+#!/bin/bash
+
+# Импорт общих функций
+source "$(dirname "$0")/functions.sh"
+
+# Функция загрузки ROS 6
+download_ros6() {
+    local force=$1
+
+    log "Checking ROS 6 releases"
+
+    # Get upgrade version to ROS 7
+    $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/NEWEST6.upgrade?version=6.49.13" -O "${TARGET_DIR}/NEWEST6.upgrade"
+    check_error $? "Failed to download NEWEST6.upgrade"
+
+    for firmware_version in "${versions6[@]}"; do
+        log "Analyzing version ${firmware_version}"
+        
+        [ -e "${TARGET_DIR}/LATEST.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
+        
+        $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/LATEST.${firmware_version}" -O "${TARGET_DIR}/LATEST.${firmware_version}.new"
+        if ! check_error $? "Failed to get LATEST.${firmware_version}"; then
+            [ -e "${TARGET_DIR}/LATEST.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
+            continue
+        fi
+
+        old_version=$(head -1 "${TARGET_DIR}/LATEST.${firmware_version}" 2>/dev/null | awk '{print $1}')
+        old_timestamp=$(head -1 "${TARGET_DIR}/LATEST.${firmware_version}" 2>/dev/null | awk '{print $2}')
+        old_release_date=$(date -d @${old_timestamp} 2>/dev/null || echo "unknown")
+
+        new_version=$(head -1 "${TARGET_DIR}/LATEST.${firmware_version}.new" | awk '{print $1}')
+        new_timestamp=$(head -1 "${TARGET_DIR}/LATEST.${firmware_version}.new" | awk '{print $2}')
+        new_release_date=$(date -d @${new_timestamp} 2>/dev/null || echo "unknown")
+
+        log "Latest release: ${new_version}"
+
+        version_changed=1
+        if [ "x${new_version}" = "x${old_version}" ] && [ "x${old_timestamp}" = "x${new_timestamp}" ]; then
+            version_changed=
+        fi
+
+        if [ "x${force}" = "x" ] && [ "x${version_changed}" = "x" ]; then
+            log "Current version ${old_version} unchanged. Skipping."
+            rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
+            continue
+        fi
+
+        log "New version found: ${new_version} from ${new_release_date}"
+        log "Old version: ${old_version} from ${old_release_date}"
+        log "Downloading packages..."
+
+        mkdir -p "${TARGET_DIR}/${new_version}"
+        cd "${TARGET_DIR}/${new_version}" || continue
+
+        # Download changelog first
+        $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
+        if ! check_error $? "Failed to download CHANGELOG for ${new_version}"; then
+            continue
+        fi
+
+        download_err=
+        for file_arch in "${firmware_arch[@]}"; do
+            # Packages
+            $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
+            if ! check_error $? "Failed to download all_packages-${file_arch}-${new_version}.zip"; then
+                download_err=1
+                break
+            fi
+
+            # RouterOS
+            if [ "${file_arch}" = "ppc" ]; then
+                $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-powerpc-${new_version}.npk"
+            else
+                $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${file_arch}-${new_version}.npk"
+            fi
+            if ! check_error $? "Failed to download routeros for ${file_arch}"; then
+                download_err=1
+                break
+            fi
+        done
+
+        if [ -n "${download_err}" ]; then
+            log_error "Download errors for ${new_version}. Skipping release."
+            rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
+            continue
+        fi
+
+        # Download additional files
+        download_additional_files "${new_version}"
+
+        mv "${TARGET_DIR}/LATEST.${firmware_version}.new" "${TARGET_DIR}/LATEST.${firmware_version}"
+        log_success "ROS 6 version ${new_version} downloaded successfully."
+    done
+}
+
+# Функция загрузки ROS 6
+download_specific_ros6_version() {
+    local version=$1
+
+    log "Downloading specific ROS 6 version: $version"
+
+    mkdir -p "${TARGET_DIR}/$version"
+    cd "${TARGET_DIR}/${version}" || return 1
+
+    # Download changelog first
+    $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${version}/CHANGELOG"
+    if ! check_error $? "Failed to download CHANGELOG for ${version}"; then
+        return 1
+    fi
+
+    download_err=
+    for file_arch in "${firmware_arch[@]}"; do
+        # Packages
+        $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${version}/all_packages-${file_arch}-${version}.zip"
+        if ! check_error $? "Failed to download all_packages-${file_arch}-${version}.zip"; then
+                download_err=1
+                break
+            fi
+        # RouterOS
+        if [ "${file_arch}" = "ppc" ]; then
+                $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${version}/routeros-powerpc-${version}.npk"
+            else
+                $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${version}/routeros-${file_arch}-${version}.npk"
+            fi
+        if ! check_error $? "Failed to download routeros for ${file_arch}"; then
+                download_err=1
+                break
+            fi
+    done
+
+    if [ -n "${download_err}" ]; then
+            log_error "Download errors for ${version}. Skipping release."
+            rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
+            return 1
+    fi
+
+    # Download additional files
+    download_additional_files "${version}"
+
+    log_success "ROS 6 version ${version} downloaded successfully."
+}

+ 131 - 0
ros7_functions.sh

@@ -0,0 +1,131 @@
+#!/bin/bash
+
+# Импорт общих функций
+source "$(dirname "$0")/functions.sh"
+
+# Функция загрузки ROS 7
+download_ros7() {
+    local user_agent=$1
+    local version_prefix=$2
+    local description=$3
+    local force=$4
+
+    log "Checking ${description}"
+
+    for firmware_version in "${versions7[@]}"; do
+        log "Analyzing version ${firmware_version}"
+
+        $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/NEWEST${version_prefix}7.${firmware_version}" -O "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new"
+        if ! check_error $? "Failed to get NEWEST${version_prefix}7.${firmware_version}"; then
+            continue
+        fi
+
+        old_version=$(head -1 "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}" 2>/dev/null | awk '{print $1}')
+        old_timestamp=$(head -1 "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}" 2>/dev/null | awk '{print $2}')
+        new_version=$(head -1 "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new" | awk '{print $1}')
+        new_timestamp=$(head -1 "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new" | awk '{print $2}')
+
+        log "Latest ${description} release: ${new_version}"
+
+        version_changed=1
+        if [ "x${new_version}" = "x${old_version}" ] && [ "x${old_timestamp}" = "x${new_timestamp}" ]; then
+            version_changed=
+        fi
+
+        if [ "x${force}" = "x" ] && [ "x${version_changed}" = "x" ]; then
+            log "Current version ${old_version} unchanged. Skipping."
+            rm -f "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new"
+            continue
+        fi
+
+        log "New version found: ${new_version}"
+        log "Downloading packages..."
+
+        mkdir -p "${TARGET_DIR}/${new_version}"
+        cd "${TARGET_DIR}/${new_version}" || continue
+
+        $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
+        if ! check_error $? "Failed to download CHANGELOG"; then
+            continue
+        fi
+
+        download_err=
+        for file_arch in "${firmware_arch[@]}"; do
+            # Packages
+            $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
+            if ! check_error $? "Failed to download all_packages-${file_arch}-${new_version}.zip"; then
+                download_err=1
+                break
+            fi
+
+            # RouterOS
+            if [ "${file_arch}" = "x86" ]; then
+                $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}.npk"
+            else
+                $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}-${file_arch}.npk"
+            fi
+            if ! check_error $? "Failed to download routeros for ${file_arch}"; then
+                download_err=1
+                break
+            fi
+        done
+
+        if [ -n "${download_err}" ]; then
+            log_error "Download errors for ${new_version}. Skipping."
+            continue
+        fi
+
+        # Additional files
+        download_additional_files "${new_version}" "$user_agent"
+
+        mv "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new" "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}"
+        log_success "ROS 7 version ${new_version} downloaded successfully."
+    done
+}
+
+# Функция загрузки ROS 7
+download_specific_ros7() {
+    local user_agent=$1
+    local version=$2
+
+    log "Downloading packages..."
+
+    mkdir -p "${TARGET_DIR}/${version}"
+    cd "${TARGET_DIR}/${version}" || return 1
+
+    $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/CHANGELOG"
+    if ! check_error $? "Failed to download CHANGELOG"; then
+        return 1
+    fi
+
+    download_err=
+    for file_arch in "${firmware_arch[@]}"; do
+            # Packages
+            $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/all_packages-${file_arch}-${version}.zip"
+            if ! check_error $? "Failed to download all_packages-${file_arch}-${version}.zip"; then
+                download_err=1
+                break
+            fi
+
+            # RouterOS
+            if [ "${file_arch}" = "x86" ]; then
+                $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/routeros-${version}.npk"
+            else
+                $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/routeros-${version}-${file_arch}.npk"
+            fi
+            if ! check_error $? "Failed to download routeros for ${file_arch}"; then
+                download_err=1
+                break
+            fi
+    done
+
+    if [ -n "${download_err}" ]; then
+            log_error "Download errors for ${version}. Skipping."
+            return 1
+    fi
+
+    # Additional files
+    download_additional_files "${version}" "$user_agent"
+
+    log_success "ROS 7 version ${version} downloaded successfully."
+}

+ 22 - 365
sync_mikrotik_repo.sh

@@ -1,378 +1,35 @@
 #!/bin/bash
 
-#wget path & opts
-wget_opts="-q -nc"
-WGET="/bin/wget"
+# Импорт конфигурации и функций
+SCRIPT_DIR="$(dirname "$0")"
+source "${SCRIPT_DIR}/config.sh"
+source "${SCRIPT_DIR}/functions.sh"
+source "${SCRIPT_DIR}/ros6_functions.sh"
+source "${SCRIPT_DIR}/ros7_functions.sh"
 
-#path for you repo
-TARGET_DIR="/mnt/md0/mirror/routeros"
+# Создаем директорию если нет
+mkdir -p "$TARGET_DIR"
 
-#Analyze ROS versions
-# ROS 6
-#stable=>"6" lts=>"6fix"
-versions6=("6" "6fix")
-
-# ROS 7
-versions7=("stable")
-
-#needed architecture's
-firmware_arch=("arm" "arm64" "mipsbe" "mmips" "ppc" "smips" "tile" "x86")
+# Начало лога
+log "Starting RouterOS mirror script"
+log "Target directory: $TARGET_DIR"
 
 ##################################### Main ###################################################
 
-#always sync packages
 force=$1
-
 if [ -n "${force}" ]; then
-    echo "Force flag for download packages found!"
-    fi
-
-###################################### ROS 6 ##################################################
-
-echo "Check ROS 6 releases"
-
-#get upgrade version to ROS 7
-
-${WGET} ${wget_opts}  "http://upgrade.mikrotik.com/routeros/NEWEST6.upgrade?version=6.49.13" -O "${TARGET_DIR}/NEWEST6.upgrade"
-
-for firmware_version in "${versions6[@]}"; do
-echo "Analyze version ${firmware_version}"
-echo -n "Get latest release: "
-[ -e "${TARGET_DIR}/LATEST.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
-${WGET} ${wget_opts}  "http://upgrade.mikrotik.com/routeros/LATEST.${firmware_version}" -O "${TARGET_DIR}/LATEST.${firmware_version}.new"
-ret=$?
-if [ ${ret} -ne 0 ]; then
-    [ -e "${TARGET_DIR}/LATEST.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
-    echo "Error get release 6 version ${firmware_version}"
-    exit 100
-    fi
-
-old_version=$(cat "${TARGET_DIR}/LATEST.${firmware_version}" | head -1 | awk '{ print $1 }')
-old_timestamp=$(cat "${TARGET_DIR}/LATEST.${firmware_version}" | head -1 | awk '{ print $2 }')
-old_release_date=$(date -d @${old_timestamp})
-
-new_version=$(cat "${TARGET_DIR}/LATEST.${firmware_version}.new" | head -1 | awk '{ print $1 }')
-new_timestamp=$(cat "${TARGET_DIR}/LATEST.${firmware_version}.new" | head -1 | awk '{ print $2 }')
-new_release_date=$(date -d @${new_timestamp})
-
-echo "${new_version}"
-
-version_changed=1
-if [ "x${new_version}" == "x${old_version}" -a "x${old_timestamp}" == "x${new_timestamp}" ]; then
-    version_changed=
-    fi
-
-if [ "x${force}" == "x" -a "x${version_changed}" == "x" ]; then
-    echo "Current version ${old_version}. Don't changed. Next."
-    rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
-    continue
-    fi
-
-echo "Found version: ${new_version} from ${new_release_date}"
-echo "Old version: ${old_version} from ${old_release_date}"
-echo "Try download packages..."
-
-if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
-    mkdir -p "${TARGET_DIR}/${new_version}"
-    fi
-
-cd "${TARGET_DIR}/${new_version}"
-${WGET} ${wget_opts}  "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
-ret=$?
-if [ ${ret} -ne 0 ]; then
-    echo "Error get changelog for ${new_version}. Skip release."
-    continue
-    fi
-
-download_error=
-for file_arch in "${firmware_arch[@]}"; do
-    #packages
-    ${WGET} ${wget_opts}  "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
-    ret=$?
-    if [ ${ret} -ne 0 ]; then
-        echo "Error get all_packages-${file_arch}-${new_version}.zip"
-        download_err=1
-        break
-       fi
-    #routeros
-    if [ "${file_arch}" == "ppc" ]; then
-        ${WGET} ${wget_opts}  "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-powerpc-${new_version}.npk"
-        else
-        ${WGET} ${wget_opts}  "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${file_arch}-${new_version}.npk"
-        fi
-    ret=$?
-    if [ ${ret} -ne 0 ]; then
-        echo "Error get routeros-${file_arch}-${new_version}.npk"
-        download_err=1
-        break
-       fi
-    done
-
-if [ -n "${download_err}" ]; then
-    echo "Found errors by download packages. Skip release"
-    rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
-    download_err=
-    continue
-    fi
-
-#other files
-${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
-${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
-${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
-${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
-${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
-${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
-${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
-${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
-${WGET} ${wget_opts} "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
-
-#winbox
-${WGET} ${wget_opts} "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
-${WGET} ${wget_opts} "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
-
-[ -e "${TARGET_DIR}/LATEST.${firmware_version}" ] && rm -f "${TARGET_DIR}/LATEST.${firmware_version}"
-mv "${TARGET_DIR}/LATEST.${firmware_version}.new" "${TARGET_DIR}/LATEST.${firmware_version}"
-
-echo "ROS 6 version ${new_version} downloaded."
-done
-
-###################################### Before ROS 7.12.1 ##################################################
-
-echo "Check ROS 7 releases before 7.12.1"
-
-#get latest release for ROS7
-[ -e "${TARGET_DIR}/LATEST.7.new" ] && rm -f "${TARGET_DIR}/LATEST.7.new"
-${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/LATEST.7" -O "${TARGET_DIR}/LATEST.7.new"
-ret=$?
-if [ ${ret} -ne 0 ]; then
-    echo "Error get release 7 version"
-    [ -e "${TARGET_DIR}/LATEST.7.new" ] && rm -f "${TARGET_DIR}/LATEST.7.new"
-    exit 100
-    fi
-[ -e "${TARGET_DIR}/LATEST.7" ] && rm -f "${TARGET_DIR}/LATEST.7"
-mv "${TARGET_DIR}/LATEST.7.new" "${TARGET_DIR}/LATEST.7"
-
-for firmware_version in "${versions7[@]}"; do
-
-echo "Analyze version ${firmware_version}"
-echo -n "Get latest release: "
-
-${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/NEWEST7.${firmware_version}" -O "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
-ret=$?
-if [ ${ret} -ne 0 ]; then
-    echo "Error get newest release 7 version ${firmware_version}"
-    [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
-    exit 100
-    fi
-
-old_version=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}" | head -1 | awk '{ print $1 }')
-old_timestamp=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}" | head -1 | awk '{ print $2 }')
-old_release_date=$(date -d @${old_timestamp})
-
-new_version=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}.new" | head -1 | awk '{ print $1 }')
-new_timestamp=$(cat "${TARGET_DIR}/NEWEST7.${firmware_version}.new" | head -1 | awk '{ print $2 }')
-new_release_date=$(date -d @${new_timestamp})
-
-echo "${new_version}"
-
-version_changed=1
-if [ "x${new_version}" == "x${old_version}" -a "x${old_timestamp}" == "x${new_timestamp}" ]; then
-    version_changed=
-    fi
-
-if [ "x${force}" == "x" -a "x${version_changed}" == "x" ]; then
-    echo "Current version ${old_version}. Don't changed. Next."
-    [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
-    continue
-    fi
-
-echo "Found version: ${new_version} from ${new_release_date}"
-echo "Old version: ${old_version} from ${old_release_date}"
-echo "Try download packages..."
-
-if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
-    mkdir -p "${TARGET_DIR}/${new_version}"
-    fi
-
-cd "${TARGET_DIR}/${new_version}"
-${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
-ret=$?
-if [ ${ret} -ne 0 ]; then
-    echo "Error get changelog for ${new_version}. Skip release."
-    continue
-    fi
-download_error=
-for file_arch in "${firmware_arch[@]}"; do
-    #packages
-    ${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
-    ret=$?
-    if [ ${ret} -ne 0 ]; then
-        echo "Error get all_packages-${file_arch}-${new_version}.zip"
-        download_err=1
-        break
-       fi
-    #routeros
-    if [ "${file_arch}" == "x86" ]; then
-        ${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}.npk"
-        else
-        ${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}-${file_arch}.npk"
-        ret=$?
-        if [ ${ret} -ne 0 ]; then
-           echo "Error get routeros-${new_version}-${file_arch}.npk"
-           download_err=1
-           break
-           fi
-        ${WGET} ${wget_opts}  -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${file_arch}-${new_version}.npk" 2>/dev/null
-        fi
-    done
-
-if [ -n "${download_err}" ]; then
-    echo "Found errors by download packages for ${new_version} ${firmware_version}. Skip release"
-    download_err=
-    [ -e "${TARGET_DIR}/NEWEST7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}.new"
-    continue
-    fi
-
-#other files
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
-
-#winbox
-${WGET} ${wget_opts} -U "RouterOS 7.10" "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.10" "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
-
-[ -e "${TARGET_DIR}/NEWEST7.${firmware_version}" ] && rm -f "${TARGET_DIR}/NEWEST7.${firmware_version}"
-mv "${TARGET_DIR}/NEWEST7.${firmware_version}.new" "${TARGET_DIR}/NEWEST7.${firmware_version}"
-
-echo "ROS 7 version ${new_version} downloaded successfully."
-done
-
-
-###################################### After ROS 7.12.1 ##################################################
-
-echo "Check ROS 7 releases after 7.12.1"
-
-echo -n "Get latest release: "
-
-for firmware_version in "${versions7[@]}"; do
-
-echo "Analyze version ${firmware_version}"
-
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/NEWESTa7.${firmware_version}?version=7.12.1" -O "${TARGET_DIR}/NEWESTa7.${firmware_version}.new"
-ret=$?
-if [ ${ret} -ne 0 ]; then
-    echo "Error get newest release 7 version ${firmware_version}"
-    [ -e "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWESTa7.${firmware_version}.new"
-    exit 100
-    fi
-
-old_version=$(cat "${TARGET_DIR}/NEWESTa7.${firmware_version}" | head -1 | awk '{ print $1 }')
-old_timestamp=$(cat "${TARGET_DIR}/NEWESTa7.${firmware_version}" | head -1 | awk '{ print $2 }')
-old_release_date=$(date -d @${old_timestamp})
-
-new_version=$(cat "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" | head -1 | awk '{ print $1 }')
-new_timestamp=$(cat "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" | head -1 | awk '{ print $2 }')
-new_release_date=$(date -d @${new_timestamp})
-
-echo "${new_version}"
-
-version_changed=1
-if [ "x${new_version}" == "x${old_version}" -a "x${old_timestamp}" == "x${new_timestamp}" ]; then
-    version_changed=
-    fi
-
-if [ "x${force}" == "x" -a "x${version_changed}" == "x" ]; then
-    echo "Current version ${old_version}. Don't changed. Next."
-    [ -e "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWESTa7.${firmware_version}.new"
-    continue
-    fi
-
-echo "Found version: ${new_version} from ${new_release_date}"
-echo "Old version: ${old_version} from ${old_release_date}"
-echo "Try download packages..."
-
-if [ ! -e "${TARGET_DIR}/${new_version}" ]; then
-    mkdir -p "${TARGET_DIR}/${new_version}"
-    fi
-
-cd "${TARGET_DIR}/${new_version}"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/CHANGELOG"
-ret=$?
-if [ ${ret} -ne 0 ]; then
-    echo "Error get changelog for ${new_version}. Skip release."
-    continue
-    fi
-download_error=
-for file_arch in "${firmware_arch[@]}"; do
-    #packages
-    ${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/all_packages-${file_arch}-${new_version}.zip"
-    ret=$?
-    if [ ${ret} -ne 0 ]; then
-       echo "Error get all_packages-${file_arch}-${new_version}.zip"
-       download_err=1
-       break
-       fi
-    #routeros
-    if [ "${file_arch}" == "x86" ]; then
-        ${WGET} ${wget_opts}  -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}.npk"
-        if [ ${ret} -ne 0 ]; then
-           echo "Error get routeros-${new_version}-${file_arch}.npk"
-           download_err=1
-           break
-           fi
-        else
-        ${WGET} ${wget_opts}  -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${new_version}-${file_arch}.npk"
-        ret=$?
-        if [ ${ret} -ne 0 ]; then
-           echo "Error get routeros-${new_version}-${file_arch}.npk"
-           download_err=1
-           break
-           fi
-        ${WGET} ${wget_opts}  -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/routeros-${file_arch}-${new_version}.npk" 2>/dev/null
-        #wireless
-        ${WGET} ${wget_opts}  -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/wireless-${new_version}-${file_arch}.npk"
-        ret=$?
-        if [ ${ret} -ne 0 ]; then
-           echo "Error get wireless-${new_version}-${file_arch}.zip"
-           download_err=1
-           break
-           fi
-        fi
-    done
-
-if [ -n "${download_err}" ]; then
-    echo "Found errors by download packages for ${new_version} ${firmware_version}. Skip release"
-    download_err=
-    [ -e "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" ] && rm -f "${TARGET_DIR}/NEWESTa7.${firmware_version}.new"
-    continue
-    fi
-
-#other files
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/btest.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/dude-install-${new_version}.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/flashfig.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/install-image-${new_version}.zip"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik-${new_version}.iso"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/mikrotik.mib"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall64-${new_version}.zip"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.tar.gz"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "http://upgrade.mikrotik.com/routeros/${new_version}/netinstall-${new_version}.zip"
+    log "Force flag for download packages found!"
+fi
 
-#winbox
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "https://mt.lv/winbox" -O "${TARGET_DIR}/${new_version}/winbox.exe"
-${WGET} ${wget_opts} -U "RouterOS 7.12.1" "https://mt.lv/winbox64" -O "${TARGET_DIR}/${new_version}/winbox64.exe"
+# Загрузка ROS 6
+download_ros6 "$force"
 
-[ -e "${TARGET_DIR}/NEWESTa7.${firmware_version}" ] && rm -f "${TARGET_DIR}/NEWESTa7.${firmware_version}"
-mv "${TARGET_DIR}/NEWESTa7.${firmware_version}.new" "${TARGET_DIR}/NEWESTa7.${firmware_version}"
+# Загрузка ROS 7 версий
+download_ros7 "RouterOS 7.10" "" "ROS 7 before 7.12.1" "$force"
+download_ros7 "RouterOS 7.12.1" "a" "ROS 7 after 7.12.1" "$force"
 
-echo "ROS 7 version ${new_version} downloaded successfully."
-done
+# Загрузка Winbox
+download_winbox
 
-exit
+log "Mirror script completed successfully"
+exit 0