Nod32 не качает обновления с lighttpd

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
roman05
рядовой
Сообщения: 26
Зарегистрирован: 2016-11-24 20:00:57

Nod32 не качает обновления с lighttpd

Непрочитанное сообщение roman05 » 2016-11-25 10:55:25

Приветствую.Скрипт качает обновления в папку /var/www/nod32/v4/
При открытии в браузере http://192.168.1.100/nod32/v4/ - файлы обновлений видны браузером, можно их скачать кликнув на них.
В нод32 4 версии вписываю сервер http://192.168.1.100/nod32/v4/
Наживаю кнопку обновить, нод скачивает update.ver , показывает размер обновлений и все.
Если же я беру и копирую папку v4 в расшаренную папку share,и указываю в ноде сервер обновлений \\192.168.1.100\share\v4\ , то нод прекрасно обновляется.
Веб сервер lighttpd.
Может что нужно в настройках вебсервера изменить?

Права на папке и на файлах
pi@FreeNAS:~$ ls -l /var/www/html/nod32/v4
total 91632
-rw-r--r-- 1 pi pi 58420 Nov 21 02:08 em000_32_l0.nup
-rw-r--r-- 1 pi pi 69580 Nov 21 02:08 em000_64_l0.nup
-rw-r--r-- 1 pi pi 764793 Nov 21 02:08 em001_32_l0.nup
-rw-r--r-- 1 pi pi 256235 Nov 21 02:08 em001_32_l1.nup
-rw-r--r-- 1 pi pi 73746 Nov 25 00:28 em001_32_l2.nup
-rw-r--r-- 1 pi pi 47410609 Nov 21 02:09 em002_32_l0.nup
-rw-r--r-- 1 pi pi 64322 Nov 21 02:09 em002_32_l1.nup
-rw-r--r-- 1 pi pi 4704820 Nov 25 00:28 em002_32_l2.nup
-rw-r--r-- 1 pi pi 1295683 Nov 21 02:10 em003_32_l0.nup
-rw-r--r-- 1 pi pi 2589056 Nov 22 12:57 em004_32_l0.nup
-rw-r--r-- 1 pi pi 152465 Nov 22 12:57 em004_32_l1.nup
-rw-r--r-- 1 pi pi 224640 Nov 21 02:10 em005_32_l0.nup
-rw-r--r-- 1 pi pi 14975 Nov 21 02:10 em005_32_l1.nup
-rw-r--r-- 1 pi pi 96343 Nov 21 02:10 em006_32_l0.nup
-rw-r--r-- 1 pi pi 12996 Nov 21 02:10 em006_32_l1.nup
-rw-r--r-- 1 pi pi 18135 Nov 21 02:10 em006_32_l2.nup
-rw-r--r-- 1 pi pi 108169 Nov 21 02:10 em006_64_l0.nup
-rw-r--r-- 1 pi pi 31889 Nov 21 02:10 em006_64_l1.nup
-rw-r--r-- 1 pi pi 21545 Nov 21 02:10 em006_64_l2.nup
-rw-r--r-- 1 pi pi 543785 Nov 25 00:28 em008_32_l0.nup
-rw-r--r-- 1 pi pi 36053 Nov 21 02:10 em008_32_l1.nup
-rw-r--r-- 1 pi pi 685456 Nov 25 00:28 em008_64_l0.nup
-rw-r--r-- 1 pi pi 93820 Nov 21 02:10 em008_64_l1.nup
-rw-r--r-- 1 pi pi 1474713 Nov 21 02:10 em009_32_l0.nup
-rw-r--r-- 1 pi pi 211372 Nov 21 02:10 em009_32_l1.nup
-rw-r--r-- 1 pi pi 78918 Nov 23 15:44 em009_32_l2.nup
-rw-r--r-- 1 pi pi 1678520 Nov 21 02:10 em009_64_l0.nup
-rw-r--r-- 1 pi pi 367098 Nov 23 15:44 em009_64_l1.nup
-rw-r--r-- 1 pi pi 210879 Nov 21 02:10 em010_32_l0.nup
-rw-r--r-- 1 pi pi 81342 Nov 21 02:10 em010_32_l1.nup
-rw-r--r-- 1 pi pi 38562 Nov 21 02:10 em010_32_l2.nup
-rw-r--r-- 1 pi pi 977697 Nov 21 02:10 em011_32_l0.nup
-rw-r--r-- 1 pi pi 13603 Nov 21 02:10 em011_32_l1.nup
-rw-r--r-- 1 pi pi 2798 Nov 21 02:10 em011_32_l2.nup
-rw-r--r-- 1 pi pi 27355 Nov 21 02:10 em013_32_l0.nup
-rw-r--r-- 1 pi pi 39664 Nov 21 02:10 em013_32_l1.nup
-rw-r--r-- 1 pi pi 12732 Nov 21 02:10 em013_32_l2.nup
-rw-r--r-- 1 pi pi 29883 Nov 21 02:10 em013_64_l0.nup
-rw-r--r-- 1 pi pi 37702 Nov 21 02:10 em013_64_l1.nup
-rw-r--r-- 1 pi pi 14382 Nov 21 02:10 em013_64_l2.nup
-rw-r--r-- 1 pi pi 22501 Nov 21 02:10 em014_32_l0.nup
-rw-r--r-- 1 pi pi 16116 Nov 21 02:10 em014_32_l1.nup
-rw-r--r-- 1 pi pi 16758 Nov 21 02:10 em014_32_l2.nup
-rw-r--r-- 1 pi pi 7130 Nov 21 02:10 em015_32_l0.nup
-rw-r--r-- 1 pi pi 8517 Nov 21 02:10 em015_64_l0.nup
-rw-r--r-- 1 pi pi 5336881 Nov 21 02:10 em017_32_l0.nup
-rw-r--r-- 1 pi pi 621685 Nov 21 02:10 em017_32_l1.nup
-rw-r--r-- 1 pi pi 192107 Nov 21 02:10 em017_32_l2.nup
-rw-r--r-- 1 pi pi 5365286 Nov 21 02:10 em017_64_l0.nup
-rw-r--r-- 1 pi pi 771136 Nov 21 02:11 em017_64_l1.nup
-rw-r--r-- 1 pi pi 347654 Nov 21 02:11 em018_32_l0.nup
-rw-r--r-- 1 pi pi 56063 Nov 21 02:11 em018_32_l1.nup
-rw-r--r-- 1 pi pi 21399 Nov 22 12:58 em018_32_l2.nup
-rw-r--r-- 1 pi pi 404926 Nov 21 02:11 em018_64_l0.nup
-rw-r--r-- 1 pi pi 94237 Nov 22 12:58 em018_64_l1.nup
-rw-r--r-- 1 pi pi 396850 Nov 21 02:11 em019_32_l0.nup
-rw-r--r-- 1 pi pi 32128 Nov 21 02:11 em019_32_l1.nup
-rw-r--r-- 1 pi pi 51407 Nov 21 02:11 em019_32_l2.nup
-rw-r--r-- 1 pi pi 92336 Nov 21 02:11 em020_32_l0.nup
-rw-r--r-- 1 pi pi 5691337 Nov 23 15:45 em021_32_l0.nup
-rw-r--r-- 1 pi pi 343523 Nov 25 00:29 em021_32_l1.nup
-rw-r--r-- 1 pi pi 24023 Nov 23 15:45 em021_32_l2.nup
-rw-r--r-- 1 pi pi 271073 Nov 21 02:11 em022_32_l0.nup
-rw-r--r-- 1 pi pi 76302 Nov 21 02:11 em022_32_l1.nup
-rw-r--r-- 1 pi pi 29709 Nov 21 02:11 em022_32_l2.nup
-rw-r--r-- 1 pi pi 7906128 Nov 21 02:11 em023_32_l0.nup
-rw-r--r-- 1 pi pi 549810 Nov 25 00:29 em023_32_l1.nup
-rw-r--r-- 1 pi pi 85033 Nov 25 00:29 em023_32_l2.nup
-rw-r--r-- 1 pi pi 30788 Nov 23 15:45 em024_32_l0.nup
-rw-r--r-- 1 pi pi 6984 Nov 21 02:11 em024_32_l1.nup
-rw-r--r-- 1 pi pi 12578 Nov 21 02:11 em028_64_l0.nup
-rw-r--r-- 1 pi pi 7237 Nov 21 02:11 em029_32_l0.nup
-rw-r--r-- 1 pi pi 3377 Nov 21 02:11 em029_32_l1.nup
-rw-r--r-- 1 pi pi 8388 Nov 21 02:11 em029_32_l2.nup
-rw-r--r-- 1 pi pi 61814 Nov 21 02:11 em034_32_l0.nup
-rw-r--r-- 1 pi pi 37759 Nov 21 02:11 em034_32_l1.nup
-rw-r--r-- 1 pi pi 23529 Nov 21 02:11 em034_32_l2.nup
-rw-r--r-- 1 pi pi 17446 Nov 25 00:28 update.ver
drwxr-xr-x 2 pi pi 4096 Nov 25 01:13 v4
-rw-r--r-- 1 pi pi 17 Nov 25 00:27 version.txt

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Neus
капитан
Сообщения: 1977
Зарегистрирован: 2008-09-08 21:59:56

Nod32 не качает обновления с lighttpd

Непрочитанное сообщение Neus » 2016-11-25 11:35:29

Physics is mathematics with the constraint of reality.
Engineering is physics with the constraint of money.

LOR захватили ситхи.
Добро пожаловать на светлую сторону!

roman05
рядовой
Сообщения: 26
Зарегистрирован: 2016-11-24 20:00:57

Nod32 не качает обновления с lighttpd

Непрочитанное сообщение roman05 » 2016-11-25 11:48:03

Neus писал(а):RTFM
Прочитал, но так и не понял что не так у меня. Порт 80 получается у меня.Что вы имели ввиду?

Аватара пользователя
Neus
капитан
Сообщения: 1977
Зарегистрирован: 2008-09-08 21:59:56

Nod32 не качает обновления с lighttpd

Непрочитанное сообщение Neus » 2016-11-25 11:53:01

roman05 писал(а): Что вы имели ввиду?
раз через SMB обновляется, то дело наверное в этом?:
Доступ к файлам зеркала с помощью внутреннего сервера HTTP

Предупреждение

Если планируется организовать доступ к файлам с помощью сервера HTTP, папка с копиями обновлений должна находиться на том же компьютере, что и экземпляр антивируса ESET NOD32, который ее создает.
Physics is mathematics with the constraint of reality.
Engineering is physics with the constraint of money.

LOR захватили ситхи.
Добро пожаловать на светлую сторону!

roman05
рядовой
Сообщения: 26
Зарегистрирован: 2016-11-24 20:00:57

Nod32 не качает обновления с lighttpd

Непрочитанное сообщение roman05 » 2016-11-25 12:18:40

Neus писал(а): Доступ к файлам зеркала с помощью внутреннего сервера HTTP
Да , но сервер ведь не нодовский,а lighttpd.
Neus писал(а): Если планируется организовать доступ к файлам с помощью сервера HTTP, папка с копиями обновлений должна находиться на том же компьютере, что и экземпляр антивируса ESET NOD32, который ее создает.
Но ведь создает файлы не нод32,а скрипт

roman05
рядовой
Сообщения: 26
Зарегистрирован: 2016-11-24 20:00:57

Nod32 не качает обновления с lighttpd

Непрочитанное сообщение roman05 » 2016-11-26 0:07:50

Сделал mod_access. ПОлучил вот такой лог. Получается что update.ver нод ищет по пути /nod32/v4, а файлы обновлений ищет по пути /v4.... Вот поэтому и не может найти. Я скопировал папку v4 для проверки в www, нод все увидел и обновился. А как можно исправить пути,чтобы и обновления он искал по пути /nod32/v4 ?


192.168.1.2 192.168.1.100:80 - [26/Nov/2016:02:10:48 +0600] "GET /nod32/v4/update.ver HTTP/1.1" 200 17667 "-" "ESS Update (Windows; U; 32bit; VDB 8117; BPC 4.2.67.10; OS: 6.1.7601 SP 1.0 NT; CH 0.0; LNG 1049; x32c; UPD http://192.168.1.100:80/nod32/v4/; APP eav; BEO 1; CPU 14156; ASP 0.10)"
192.168.1.2 192.168.1.100:80 - [26/Nov/2016:02:10:49 +0600] "GET /v4/em000_32_l0.nup HTTP/1.1" 404 345 "-" "ESS Update (Windows; U; 32bit; VDB 8117; BPC 4.2.67.10; OS: 6.1.7601 SP 1.0 NT; CH 0.0; LNG 1049; x32c; UPD http://192.168.1.100:80/nod32/v4/; APP eav; BEO 1; CPU 14156; ASP 0.10)"


И в файле update.ver содержатся такие же пути, получается путь нужно менять на моменте создания файла update.ver,а вот где он создается в скрипте?


[LOADER0]
version=1067 (20160630)
versionid=1067
build=1108
type=loader
category=engine
level=0
base=268435456
date=30.06.2016
platform=x86
group=perseus,ra,core,loader,eslc
buildregname="LoaderBuild"
file=/v4/em000_32_l0.nup
size=58420


Скрипт:

Код: Выделить всё

#!/usr/bin/env bash
#/usr/bin/env > /tmp/env.log
#whoami >> /tmp/env.log
# Copyright 2014-2016 Paramtamtam <github.com/tarampampam>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# 
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE. 

# Declare important variables
export NOD32MIRROR_VERSION="1.0.1.8";
alias unrar='/usr/local/bin/unrar'
[[ -z $NOD32MIRROR_BASE_DIR ]] && export NOD32MIRROR_BASE_DIR=$(dirname $(readlink -e $0));

# Execute bootstrap script
source "$NOD32MIRROR_BASE_DIR/include/bootstrap.sh" || { echo "[FATAL ERROR] Bootstrap file not found or contains errors" && exit 1; };

# Declare actions flags
ACTION_MAKE_UPDATE=0;
ACTION_MAKE_FLUSH=0;
ACTION_GET_KEY=0;
ACTION_KEYS_UPDATE=0;
ACTION_KEYS_CLEAN=0;
ACTION_KEYS_SHOW=0;
ACTION_DISABLE_NETWORK_LIMITS=0;
ACTION_SHOW_HELP=1;
ACTION_SHOW_VERSION=0;

# Check passed options and set actions flags
for arg in "$@"; do
  case $arg in
    '-u'|'--update')       ACTION_SHOW_HELP=0; ACTION_MAKE_UPDATE=1; ACTION_SHOW_STAT=1;;
    '-f'|'--flush')        ACTION_SHOW_HELP=0; ACTION_MAKE_FLUSH=1; ACTION_SHOW_STAT=1;;
    '-k'|'--get-key')      ACTION_SHOW_HELP=0; ACTION_GET_KEY=1;;
    '--keys-update')       ACTION_SHOW_HELP=0; ACTION_KEYS_UPDATE=1;;
    '--keys-clean')        ACTION_SHOW_HELP=0; ACTION_KEYS_CLEAN=1;;
    '--keys-show')         ACTION_SHOW_HELP=0; ACTION_KEYS_SHOW=1;;
    '-s'|'--stat')         ACTION_SHOW_HELP=0; ACTION_MAKE_UPDATE=0; ACTION_SHOW_STAT=1;;
    '-l'|'--no-limit')     ACTION_DISABLE_NETWORK_LIMITS=1;;
    '-h'|'-H'|'--help')    ACTION_SHOW_HELP=1;;
    '-V'|'-v'|'--version') ACTION_SHOW_HELP=0; ACTION_SHOW_VERSION=1;;
  esac;
done;

[[ -z $NOD32MIRROR_VERSION ]] && export NOD32MIRROR_VERSION='[unsetted]';

# Actions declarations
[[ "$ACTION_SHOW_HELP" -eq 1 ]] && {
  self=$(basename "$(test -L "$0" && readlink "$0" || echo "$0")");
  installed="$(ui_style 'installed' 'green')";
  not_installed="$(ui_style 'not installed' 'red bold')";
#  unrar_inst="$not_installed"   && { system_application_exists 'unrar' && unrar_inst="$installed"; };
  unrar_inst="$not_installed"   && { system_application_exists '/usr/local/bin/unrar' && unrar_inst="$installed"; };
  curl_inst="$not_installed"    && { system_application_exists 'curl'  && curl_inst="$installed"; };
  wget_inst="$not_installed"    && { system_application_exists 'wget'  && wget_inst="$installed"; };
  sed_awk_inst="$not_installed" && { system_application_exists 'sed'   && system_application_exists 'awk' && sed_awk_inst="$installed"; };
echo -e "
    _   __          __________      __  ____
   / | / /___  ____/ /__  /__ \    /  |/  (_)_____________  _____
  /  |/ / __ \/ __  / /_ <__/ /   / /|_/ / / ___/ ___/ __ \/ ___/
 / /|  / /_/ / /_/ /___/ / __/   / /  / / / /  / /  / /_/ / /
/_/ |_/\____/\__,_//____/____/  /_/  /_/_/_/  /_/   \____/_/

  $(ui_style 'NOD32 Update Mirror' 'green') ($(ui_style 'https://git.io/vKs5E' 'yellow underline')), version "$(ui_style "$NOD32MIRROR_VERSION" 'yellow')"

$(ui_style 'Optional depends by:' 'yellow')
  $(ui_style 'unrar' 'yellow')      ($unrar_inst)
  $(ui_style 'curl' 'yellow')       ($curl_inst)
  $(ui_style 'wget' 'yellow')       ($wget_inst)
  $(ui_style 'sed & awk' 'yellow')  ($sed_awk_inst)

$(ui_style 'Usage:' 'yellow')
  $self [options]

$(ui_style 'Options:' 'yellow')
  $(ui_style '-u, --update' 'green')       $(ui_style 'Update mirror' 'yellow')
  $(ui_style '-f, --flush' 'green')        Remove all downloaded mirror files
  $(ui_style '-k, --get-key' 'green')      $(ui_style 'Get free key' 'yellow') ($(ui_style 'Use for educational or informational purposes only!' 'red bold'))
      $(ui_style '--keys-update' 'green')  Update free keys
      $(ui_style '--keys-clean' 'green')   Test all stored keys and remove invalid
      $(ui_style '--keys-show' 'green')    Show all stored valid keys
  $(ui_style '-C, --color' 'green')        Force enable color output
  $(ui_style '-c, --no-color' 'green')     Force disable color output
  $(ui_style '-s, --stat' 'green')         Show statistics
  $(ui_style '-l, --no-limit' 'green')     Disable any download limits
  $(ui_style '-d, --debug' 'green')        Display debug messages
  $(ui_style '-h, --help' 'green')         Display this help message
  $(ui_style '-v, --version' 'green')      Display script version
";
};

[[ "$ACTION_SHOW_VERSION" -eq 1 ]] && {
  echo -e "
Nod32 Update Mirror Script, version $NOD32MIRROR_VERSION
Copyright 2014-2016 Paramtamtam <github.com/tarampampam>
License MIT: <rawgit.com/tarampampam/nod32-update-mirror/master/LICENSE>

This is free software. There is NO WARRANTY, to the extent permitted by law.
";
};

[[ "$ACTION_MAKE_FLUSH" -eq 1 ]] && {
  ui_message 'debug' 'Execute "flush" action';
  [ -d "$NOD32MIRROR_MIRROR_DIR" ] && {
    find "$NOD32MIRROR_MIRROR_DIR" -type f \(\
      -name '*.nup' \
      -o -name '._*' \
      -o -name '*.ver' \
      -o -name "$NOD32MIRROR_TIMESTAMP_FILE_NAME" \
      -o -name "$NOD32MIRROR_VERSION_FILE_NAME" \)\
      -delete;
    find "$NOD32MIRROR_MIRROR_DIR" -type d \(\
      -name 'pcu' \
      -o -name 'v[0-9]*' \)\
      -exec rm -Rf "{}" +;
    ui_message 'notice' 'Mirror flushed';
  };
};

[[ "$ACTION_GET_KEY" -eq 1 ]] && {
  ui_message 'debug' 'Execute "get key" action';
  echo -e "\n$(ui_style 'Use for educational or informational purposes only!' 'red bold')\n";
  nod32keys_get_valid_key || {
    ui_message 'fatal' 'Cannot get valid free key' && exit 1;
  }
};

[[ "$ACTION_DISABLE_NETWORK_LIMITS" -eq 1 ]] && {
  ui_message 'debug' 'Execute "dissable network limits" action';
  ui_message 'debug' 'Download limits DISABLED';
  export NOD32MIRROR_DOWNLOAD_SPEED_LIMIT=0;
  export NOD32MIRROR_DOWNLOAD_DELAY=0;
};

[[ "$ACTION_KEYS_UPDATE" -eq 1 ]] && {
  ui_message 'debug' 'Execute "keys update" action';
  nod32keys_update_keys;
};

[[ "$ACTION_KEYS_CLEAN" -eq 1 ]] && {
  ui_message 'debug' 'Execute "keys clean" action';
  nod32keys_remove_invalid_keys;
};

[[ "$ACTION_KEYS_SHOW" -eq 1 ]] && {
  ui_message 'debug' 'Execute "keys show" action';
  nod32keys_get_all_keys 'valid';
};

[[ "$ACTION_MAKE_UPDATE" -eq 1 ]] && {
  ui_message 'debug' 'Execute "update" action';
  if [[ -z $NOD32MIRROR_MIRROR_DIR ]]; then
    ui_message 'fatal' 'Empty directory path for mirroring files. Please, check configuration file' && exit 1;
  fi;
  [[ "$NOD32MIRROR_USE_FREE_KEY" -eq 1 ]] && {
    # Work with 'free key'
    ui_message 'debug' 'Use free key option is ENABLED';
    ui_message 'info' 'Requesting for a free key.. ' '' 'no_newline';
    free_key=$(nod32keys_get_valid_key 2>&1 | tail -n 1);
    username=${free_key%%:*};
    password=${free_key#*:};
    if [[ ! -z "$username" ]] && [[ ! -z "$password" ]]; then
      export NOD32MIRROR_SERVER_URI='http://update.eset.com:80/eset_upd/';
      export NOD32MIRROR_SERVER_USERNAME="$username";
      export NOD32MIRROR_SERVER_PASSWORD="$password";
      echo -e "$(ui_style 'Success' 'green')";
    else
      echo -e "$(ui_style 'Error' 'red')";
    fi;
    ui_message 'debug' 'Username and password' "$username:$password";
  } || {
    ui_message 'debug' 'Use free key option is disabled';
    # Setup global server URI, username and password based on settings
    # declared in configuration file
    nod32_autosetup_working_server;
  };
  # Check for exists work server info
  if [[ ! -z "$NOD32MIRROR_SERVER_URI" ]]; then
    ui_message 'debug' 'Work with server' "$NOD32MIRROR_SERVER_URI";
    # Prepare directory for mirroring files
    fs_create_directory "$NOD32MIRROR_MIRROR_DIR" || {
      ui_message 'fatal' 'Cannot create directory for mirroring files' "$NOD32MIRROR_MIRROR_DIR" && exit 1;
    } && {
      ui_message 'debug' 'Directory for mirroring files' "$NOD32MIRROR_MIRROR_DIR";
    };
    # Prepare directory for temporary files
    if fs_remove_temp_directory && fs_create_temp_directory; then
      ui_message 'debug' 'Directory for temporary files' "$(fs_get_temp_directory)";
      NOD32MIRROR_VERSIONS="__ROOT__ $NOD32MIRROR_VERSIONS"; # Add '__ROOT__' to versions list
      for VERSION in $NOD32MIRROR_VERSIONS; do
        extra_url='';
        if [[ ! "$VERSION" == "__ROOT__" ]]; then
          if [[ "$VERSION" =~ ^[0-9]+$ ]]; then
            extra_url="v$VERSION/";
          else
            extra_url="$VERSION/";
          fi;
        fi;
        nod32_mirror_remote_directory "$extra_url";
      done;
      fs_create_timestamp_file "$NOD32MIRROR_MIRROR_DIR" && {
        ui_message 'info' 'Timestamp file created' "$NOD32MIRROR_TIMESTAMP_FILE_NAME";
      };
    else
      ui_message 'fatal' 'Cannot create (or remove) directory for temporary files' "$(fs_get_temp_directory)";
      ACTION_SHOW_STAT=0;
    fi;
  else
    ui_message 'fatal' 'No available servers could be found at this time. Please, check configuration file';
    ACTION_SHOW_STAT=0;
  fi;
};

[[ "$ACTION_SHOW_STAT" -eq 1 ]] && {
  mirror_dir="$NOD32MIRROR_MIRROR_DIR";
  [ -d "$mirror_dir" ] && {
    files_count=$(find "$mirror_dir" -type f -iname '*.nup' | wc -l);
    [[ ! "$files_count" == "" ]] && {
      ui_message 'info' "Total updates (*.nup) files count: $(ui_style "$files_count file(s)" 'yellow')";
    };
    updates_files_size=$(find "$mirror_dir" -type f -name '*.nup' -ls | awk '{total += $7} END {printf("%.1fM", (total/1024/1024))}');
    [[ ! "$updates_files_size" == "" ]] && {
      ui_message 'info' "Total updates (*.nup) files size: $(ui_style $updates_files_size 'yellow')";
    };
    mirror_dir_size=$(fs_get_directory_size "$mirror_dir");
    [[ ! "$mirror_dir_size" == "0" ]] && {
      ui_message 'info' "Mirror directory size is $(ui_style $mirror_dir_size 'yellow')";
    };
  };
};

[ -d "$(fs_get_temp_directory)" ] && fs_remove_temp_directory;