1
0

ros6_functions.sh 4.3 KB

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