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
капитан
Сообщения: 1791
Зарегистрирован: 2008-09-08 21:59:56

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

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

«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

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

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

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

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

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

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

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

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

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

Если планируется организовать доступ к файлам с помощью сервера HTTP, папка с копиями обновлений должна находиться на том же компьютере, что и экземпляр антивируса ESET NOD32, который ее создает.
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

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;