functions.sh 2.6 KB

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