1
0

ros7_functions.sh 4.6 KB

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