Forráskód Böngészése

some optimizations

Dmitriev Roman 7 hónapja
szülő
commit
fa1b998bb9
5 módosított fájl, 137 hozzáadás és 167 törlés
  1. 31 3
      config.sh
  2. 0 2
      download_ros.sh
  3. 15 6
      functions.sh
  4. 46 79
      ros6_functions.sh
  5. 45 77
      ros7_functions.sh

+ 31 - 3
config.sh

@@ -3,12 +3,40 @@
 # Конфигурация
 TARGET_DIR="/mnt/md0/mirror/routeros"
 WGET="/bin/wget"
+LOG_DIR="/var/log/mirror"
+LOG_OFF=0
+
+[[ ! -f "${WGET}" ]] && WGET=$(command -v wget)
+if [[ ! -f "${WGET}" ]]; then
+    echo "ERROR: wget not found! Cannot continue." >&2
+    exit 100
+fi
+
+# Проверка прав на запись в каталог зеркала
+if [[ ! -w "${TARGET_DIR}" ]]; then
+    echo "WARNING: No write permissions to ${TARGET_DIR}! Bye..." >&2
+    exit 101
+fi
+
+# Проверка прав на запись в каталог лога
+if [[ ! -w "${LOG_DIR}" ]]; then
+    echo "WARNING: No write permissions to ${LOG_DIR}, using target directory for logging: ${TARGET_DIR}" >&2
+    LOG_DIR="${TARGET_DIR}/log"
+fi
+
+[[ ! -d "${LOG_DIR}" ]] && mkdir -p "${LOG_DIR}"
+
+if [[ ! -d "${LOG_DIR}" ]]; then
+    echo "WARNING: No write permissions to ${LOG_DIR}, disable logging to file." >&2
+    LOG_OFF=1
+    fi
+
+LOG_FILE="${LOG_DIR}/mirror-routeros.log"
 
-#vars
-LOG_FILE="${TARGET_DIR}/mirror.log"
-TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
 WGET_OPTS="-q -nc"
 
+TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
+
 # Версии ROS
 versions6=("6" "6fix")
 versions7=("stable")

+ 0 - 2
download_ros.sh

@@ -71,11 +71,9 @@ download_specific_version() {
     
     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"

+ 15 - 6
functions.sh

@@ -1,19 +1,28 @@
 #!/bin/bash
 
-# Импорт конфигурации
-source "$(dirname "$0")/config.sh"
-
 # Функции логирования
 log() {
-    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
+    if [ "${LOG_OFF}" = "1" ]; then
+        echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1".
+    else
+        echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
+    fi
 }
 
 log_error() {
-    echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" | tee -a "$LOG_FILE"
+    if [ "${LOG_OFF}" = "1" ]; then
+        echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" >&2
+    else
+        echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" | tee -a "$LOG_FILE" >&2
+    fi
 }
 
 log_success() {
-    echo "[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS: $1" | tee -a "$LOG_FILE"
+    if [ "${LOG_OFF}" = "1" ]; then
+        echo "[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS: $1"
+    else
+        echo "[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS: $1" | tee -a "$LOG_FILE"
+    fi
 }
 
 # Функция проверки ошибок

+ 46 - 79
ros6_functions.sh

@@ -1,45 +1,45 @@
 #!/bin/bash
 
-# Импорт общих функций
-source "$(dirname "$0")/functions.sh"
-
 # Функция загрузки ROS 6
 download_ros6() {
     local force=$1
+    local old_version old_timestamp old_release_date
+    local new_version new_timestamp new_release_date version_changed
 
     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"
+    check_error $? "Failed to download NEWEST6.upgrade" || return 1
 
     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"
+        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"
+            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")
+        # Чтение версий одной командой
+        read -r old_version old_timestamp _ 2>/dev/null < "${TARGET_DIR}/LATEST.${firmware_version}"
+        read -r new_version new_timestamp _ < "${TARGET_DIR}/LATEST.${firmware_version}.new"
 
-        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")
+        old_release_date=$(date -d "@${old_timestamp}" 2>/dev/null || echo "unknown")
+        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=
+        # Упрощенная проверка изменения версии
+        if [[ "${new_version}" == "${old_version}" && "${old_timestamp}" == "${new_timestamp}" ]]; then
+            version_changed=""
+        else
+            version_changed=1
         fi
 
-        if [ "x${force}" = "x" ] && [ "x${version_changed}" = "x" ]; then
+        if [[ -z "${force}" && -z "${version_changed}" ]]; then
             log "Current version ${old_version} unchanged. Skipping."
             rm -f "${TARGET_DIR}/LATEST.${firmware_version}.new"
             continue
@@ -47,95 +47,62 @@ download_ros6() {
 
         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."
+        # Использование единой функции загрузки
+        if download_specific_ros6_version "${new_version}"; then
+            mv "${TARGET_DIR}/LATEST.${firmware_version}.new" "${TARGET_DIR}/LATEST.${firmware_version}"
+            log_success "ROS 6 version ${new_version} downloaded successfully."
+        else
+            log_error "Failed to download ROS 6 ${new_version}"
             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
+# Функция загрузки конкретной версии ROS 6
 download_specific_ros6_version() {
     local version=$1
+    local file_arch ros_filename download_err=0
 
-    log "Downloading specific ROS 6 version: $version"
+    log "Downloading ROS 6 version: $version"
 
-    mkdir -p "${TARGET_DIR}/$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
+    check_error $? "Failed to download CHANGELOG for ${version}" || return 1
 
-    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
+            download_err=1
+            break
+        fi
+
+        # RouterOS - определяем имя файла
+        if [[ "${file_arch}" = "ppc" ]]; then
+            ros_filename="routeros-powerpc-${version}.npk"
+        else
+            ros_filename="routeros-${file_arch}-${version}.npk"
+        fi
+
+        $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${version}/${ros_filename}"
         if ! check_error $? "Failed to download routeros for ${file_arch}"; then
-                download_err=1
-                break
-            fi
+            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
+    if [[ ${download_err} -ne 0 ]]; then
+        log_error "Download errors for ${version}. Skipping release."
+        return 1
     fi
 
     # Download additional files
     download_additional_files "${version}"
 
     log_success "ROS 6 version ${version} downloaded successfully."
+    return 0
 }

+ 45 - 77
ros7_functions.sh

@@ -1,14 +1,12 @@
 #!/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
+    local old_version old_timestamp new_version new_timestamp version_changed
 
     log "Checking ${description}"
 
@@ -20,112 +18,82 @@ download_ros7() {
             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}')
+        # Чтение версий одной командой
+        read -r old_version old_timestamp _ 2>/dev/null < "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}"
+        read -r new_version new_timestamp _ < "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new"
 
         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=
+        # Упрощенная проверка изменения версии
+        if [[ "${new_version}" == "${old_version}" && "${old_timestamp}" == "${new_timestamp}" ]]; then
+            version_changed=""
+        else
+            version_changed=1
         fi
 
-        if [ "x${force}" = "x" ] && [ "x${version_changed}" = "x" ]; then
+        if [[ -z "${force}" && -z "${version_changed}" ]]; 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
+        # Использование единой функции загрузки
+        if download_specific_ros7_version "${user_agent}" "${new_version}"; then
+            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."
+        else
+            log_error "Failed to download ROS 7 ${new_version}"
+            rm -f "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new"
         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() {
+# Функция загрузки конкретной версии ROS 7
+download_specific_ros7_version() {
     local user_agent=$1
     local version=$2
+    local file_arch ros_filename download_err=0
 
-    log "Downloading packages..."
+    log "Downloading ROS 7 version: $version"
 
     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
+    check_error $? "Failed to download CHANGELOG" || return 1
 
-    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
+        # 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
+            ros_filename="routeros-${version}.npk"
+        else
+            ros_filename="routeros-${version}-${file_arch}.npk"
+        fi
+
+        $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/${ros_filename}"
+        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
+    if [[ ${download_err} -ne 0 ]]; 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."
+    return 0
 }