ros7_functions.sh 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/bin/bash
  2. # Функция загрузки ROS 7
  3. download_ros7() {
  4. local user_agent=$1
  5. local version_prefix=$2
  6. local description=$3
  7. local force=$4
  8. local old_version old_timestamp new_version new_timestamp version_changed
  9. log "Checking ${description}"
  10. for firmware_version in "${versions7[@]}"; do
  11. log "Analyzing version ${firmware_version}"
  12. $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"
  13. if ! check_error $? "Failed to get NEWEST${version_prefix}7.${firmware_version}"; then
  14. continue
  15. fi
  16. # Чтение версий одной командой
  17. read -r old_version old_timestamp _ 2>/dev/null < "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}"
  18. read -r new_version new_timestamp _ < "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new"
  19. log "Latest ${description} release: ${new_version}"
  20. # Упрощенная проверка изменения версии
  21. if [[ "${new_version}" == "${old_version}" && "${old_timestamp}" == "${new_timestamp}" ]]; then
  22. version_changed=""
  23. else
  24. version_changed=1
  25. fi
  26. if [[ -z "${force}" && -z "${version_changed}" ]]; then
  27. log "Current version ${old_version} unchanged. Skipping."
  28. rm -f "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new"
  29. continue
  30. fi
  31. log "New version found: ${new_version}"
  32. # Использование единой функции загрузки
  33. if download_specific_ros7_version "${user_agent}" "${new_version}"; then
  34. mv "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new" "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}"
  35. log_success "ROS 7 version ${new_version} downloaded successfully."
  36. else
  37. log_error "Failed to download ROS 7 ${new_version}"
  38. rm -f "${TARGET_DIR}/NEWEST${version_prefix}7.${firmware_version}.new"
  39. fi
  40. done
  41. }
  42. # Функция загрузки конкретной версии ROS 7
  43. download_specific_ros7_version() {
  44. local user_agent=$1
  45. local version=$2
  46. local file_arch ros_filename download_err=0
  47. log "Downloading ROS 7 version: $version"
  48. mkdir -p "${TARGET_DIR}/${version}"
  49. cd "${TARGET_DIR}/${version}" || return 1
  50. $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/CHANGELOG"
  51. check_error $? "Failed to download CHANGELOG" || return 1
  52. for file_arch in "${firmware_arch[@]}"; do
  53. # Packages
  54. $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/all_packages-${file_arch}-${version}.zip"
  55. if ! check_error $? "Failed to download all_packages-${file_arch}-${version}.zip"; then
  56. download_err=1
  57. break
  58. fi
  59. # RouterOS - определяем имя файла
  60. if [[ "${file_arch}" = "x86" ]]; then
  61. ros_filename="routeros-${version}.npk"
  62. else
  63. ros_filename="routeros-${version}-${file_arch}.npk"
  64. fi
  65. $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/${ros_filename}"
  66. if ! check_error $? "Failed to download routeros for ${file_arch}"; then
  67. download_err=1
  68. break
  69. fi
  70. done
  71. if [[ ${download_err} -ne 0 ]]; then
  72. log_error "Download errors for ${version}. Skipping."
  73. return 1
  74. fi
  75. # Additional files
  76. download_additional_files "${version}" "$user_agent"
  77. log_success "ROS 7 version ${version} downloaded successfully."
  78. return 0
  79. }