| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #!/bin/bash
- # Функция загрузки ROS 7
- download_ros7() {
- local ros_version=$1
- local user_agent="RouterOS $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}"
- for firmware_version in "${versions7[@]}"; do
- #skip check long-term before 7.12.1
- if [[ -z ${version_prefix} && "${firmware_version}" == "long-term" ]]; then
- continue
- fi
- log "Analyzing version ${firmware_version}"
- $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"
- if ! check_error $? "Failed to get NEWEST${version_prefix}7.${firmware_version}"; then
- continue
- fi
- # Чтение версий одной командой
- 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}"
- # Упрощенная проверка изменения версии
- if [[ "${new_version}" == "${old_version}" && "${old_timestamp}" == "${new_timestamp}" ]]; then
- version_changed=""
- else
- version_changed=1
- fi
- 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}"
- # Использование единой функции загрузки
- if download_specific_ros7_version "${ros_version}" "${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
- done
- }
- # Функция загрузки конкретной версии ROS 7
- download_specific_ros7_version() {
- local ros_version=$1
- local user_agent="RouterOS $1"
- local version=$2
- local file_arch ros_filename download_err=0
- log "Downloading ROS 7 version: $version"
- mkdir -p "${TARGET_DIR}/${version}"
- cd "${TARGET_DIR}/${version}" || return 1
- [ -e "CHANGELOG" ] && rm -f CHANGELOG
- $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/CHANGELOG"
- check_error $? "Failed to download CHANGELOG" || return 1
- # packages.csv
- [ -e "packages.csv" ] && rm -f packages.csv
- $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/packages.csv"
- check_error $? "Failed to download packages.csv"
- 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
- 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
- local user_agent_info=$(get_ros7_user_agent "$version")
- if [ "${file_arch}" != "x86" ] && [ "${user_agent_info}" == 'after' ]; then
- #download wireless after 7.12
- ${WGET} $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/wireless-${version}-${file_arch}.npk"
- if ! check_error $? "Failed to download wireless for ${file_arch}"; then
- download_err=1
- break
- fi
- fi
- done
- if [[ ${download_err} -ne 0 ]]; then
- log_error "Download errors for ${version}. Skipping."
- return 1
- fi
- # Additional files
- download_additional_files "${version}" "$user_agent"
- return 0
- }
|