functions.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/bin/bash
  2. # Импорт конфигурации
  3. source "$(dirname "$0")/config.sh"
  4. # Функции логирования
  5. log() {
  6. echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
  7. }
  8. log_error() {
  9. echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" | tee -a "$LOG_FILE"
  10. }
  11. log_success() {
  12. echo "[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS: $1" | tee -a "$LOG_FILE"
  13. }
  14. # Функция проверки ошибок
  15. check_error() {
  16. local ret=$1
  17. local message=$2
  18. if [ $ret -ne 0 ]; then
  19. log_error "$message"
  20. return 1
  21. fi
  22. return 0
  23. }
  24. # Функция загрузки дополнительных файлов
  25. download_additional_files() {
  26. local version=$1
  27. local user_agent=${2:-""}
  28. for file in "${additional_files[@]}"; do
  29. file=$(echo ${file} | sed "s/VERSION/${version}/")
  30. if [ -n "$user_agent" ]; then
  31. $WGET $WGET_OPTS -U "$user_agent" "http://upgrade.mikrotik.com/routeros/${version}/${file}" || \
  32. log "Warning: Failed to download ${file}"
  33. else
  34. $WGET $WGET_OPTS "http://upgrade.mikrotik.com/routeros/${version}/${file}" || \
  35. log "Warning: Failed to download ${file}"
  36. fi
  37. done
  38. }
  39. # Функция загрузки Winbox
  40. download_winbox() {
  41. log "Downloading Winbox"
  42. mkdir -p "$WINBOX_DIR"
  43. LINKS=$($WGET $WGET_OPTS https://mikrotik.com/download -O - | grep -oP 'https?://[^"]*winbox[^"]*\.(exe|zip)' || echo "")
  44. if [ -z "$LINKS" ]; then
  45. log_error "No winbox links found"
  46. return 1
  47. fi
  48. for LINK in $LINKS; do
  49. if [[ "$LINK" == ${WINBOX_BASE_URL}/* ]]; then
  50. RELATIVE_PATH="${WINBOX_DIR}/${LINK#${WINBOX_BASE_URL}/}"
  51. mkdir -p "$(dirname "$RELATIVE_PATH")"
  52. if [ -f "$RELATIVE_PATH" ]; then
  53. log "File already exists: $RELATIVE_PATH"
  54. continue
  55. fi
  56. log "Downloading: $LINK"
  57. if curl -s -L -o "$RELATIVE_PATH" "$LINK"; then
  58. FILE_SIZE=$(du -h "$RELATIVE_PATH" | cut -f1)
  59. log_success "Downloaded: $RELATIVE_PATH ($FILE_SIZE)"
  60. else
  61. log_error "Failed to download: $LINK"
  62. rm -f "$RELATIVE_PATH"
  63. fi
  64. else
  65. log "Skipping external link: $LINK"
  66. fi
  67. done
  68. }