Перенос сервера Dr.Web® Enterprise Suite с Windows на Debian со сменой типа БД

Материал из wiki.drweb.com
Перейти к: навигация, поиск

Недавно встала задача перенести сервер DrWeb EntSuite 6 с Windows 2003 на Linux. В качестве Linux было решено использовать Debian. Выкладываю плод своих испытаний.

Содержание

1. Исходные данные для переноса сервера:

  • Старый сервер: Windows 2003 + IntDB в качестве базы для сервера DrWeb
  • Новый сервер: Debian Squeeze Wheezy (по ряду причин пришлось использовать тестовую версию дистрибутива, но на Squeeze думаю тоже будет работать) + PostgreSQL в качестве СУБД для сервера DrWeb

Рекомендуется для нового сервера создать в DNS запись CNAME, чтобы при следующих переездах просто перенаправить клиентов на новый сервер, пересоздав новую CNAME. Но это не всегда актуально. Например, при использовании VPN-клиентов, которые не знают о структуре DNS в локальной сети.

2. Перенос сервера DrWeb:

2.1. Установка Dr.Web Enterprise Security Suite на целевой сервер (Debian Wheezy)

2.1.1. Скачиваем необходимую версию.

2.1.2. Переносим скачанный файл на сервер и устанавливаем:

dpkg -i drweb-esuite-server-602-201109160-unix-linux-debian-squeeze-i686.deb

Установка сервера DrWeb на Linux описана тут. Кроме пакета сервера DrWeb на debian мне пришлось вручную доустановить пакеты libcurl3, librtmp0 и libssh2-1. А так же установка сервера DrWeb завершилась ошибкой:

...
touch: невозможно выполнить touch для «/var/lock/subsys/drwcs»: Нет такого файла или каталога
invoke-rc.d: initscript drwcsd, action "start" failed.
Текущее состояние: 0 сломано [-1].
postgre ~ # # создадим недостающий каталог:
postgre ~ # mkdir /var/lock/subsys/
postgre ~ # /etc/init.d/drwcsd start 

2.1.3. Проверить работоспособность сервера и состояние репозитория

Drweb-repository-normal.png

2.1.4. Остановите новый ES-сервер строкой

/etc/init.d/drwcsd stop

или командой из веб-интерфейса.

2.2. Установка PostgreSQL на Debian

2.2.1. Устанавливаем пакет postgresql-9.1

В Debian squeeze данный пакет можно установить из бэкпортов. После установки пакетов постгреса произойдет запуск службы СУБД. В процессе первого запуска СУБД скрипт выполнил команду inidb, которая создаст все необходимое и в том числе конфигурационные файлы в папке /var/lib/pgsql. Будут инициализированы все основные настройки и встроенные базы данных.

2.2.2. Настраиваем PostgreSQL

2.2.2.1. Разрешаем доступ к СУБД из сети (для использования pgAdmin)

По умолчанию, постгрес слушает только локалхост, чтобы заставить его слушать внешний интерфейс (если вам это действительно нужно), нужно на время установки в /etc/postgresql/9.1/main/postgresql.conf изменить строку:

#listen_addresses = ‘localhost’
listen_addresses = ‘*’
# это заставит СУБД слушать все интерфейсы
# так же нужно раскомментировать строку:
password_encryption = on

а так же для доступа из локальной сети к СУБД нужно в /etc/postgresql/9.1/main/pg_hba.conf создать строку в соответствующем разделе:

host    all     all     10.0.0.222/32    md5

, где значение host определяет доступ по TCP/IP, первый all разрешает подключаться ко ВСЕМ базам данных, второй all задает доступ для ВСЕХ любого пользователей, 10.0.0.222/32 задает IP и максу компьютера с которого разрешен доступ, md5 задает доступ по хэшу пароля, а не по открытому тексту.

2.2.2.2. Настраиваем окружение PostgreSQL

Cоздаем пароль для администратора постгреса (для пользователя UNIX, под которым работает служба):

passwd postgres
Введите новый пароль UNIX:<ВАШ СЕКРЕТНЫЙ ПАРОЛЬ>
Повторите ввод нового пароля UNIX: <ВАШ СЕКРЕТНЫЙ ПАРОЛЬ>
passwd: пароль успешно обновлён

После этого, необходимо сделать рестарт СУБД:

postgre ~ # service postgresql restart
Restarting PostgreSQL 9.1 database server: main.

Создать пароль для внутреннего пользователя СУБД:

postgre ~ # # сменим пользователя, передем в консоль PgSQL командой psql и зададим пароль
postgre ~ # su -l postgres
postgres@postgre ~ $ psql
psql (9.1.1)
Type "help" for help.
postgres=# alter user postgres with password 'ваш_пароль';
ALTER ROLE
postgres=# \q
2.2.2.3. Создаем базы данных для севера DrWeb

Чтобы хранить базу антивируса в отдельном каталоге (куда, к стати, можно примонтировать отдельный раздел), необходимо создать для базы каталог и назначить необходимые права (чтобы СУБД имела доступ в этот каталог):

postgre ~ # mkdir /var/drwebdb
postgre ~ # chown postgres:postgres /var/drwebdb
postgre ~ # chmod 0775 /var/drwebdb/
postgre ~ # ls -lda /var/dr*
drwxrwxr-x 2 postgres postgres 4096 Ноя 28 12:00 /var/drwebdb

Далее, подготовим СУБД к работе с сервером DrWeb. Для этого залогинемся под администратором базы данных и выполним указанные скрипты:

root@postgre:~# su -l postgres
postgres@postgre ~ $ # создаем пользователя drwcs с паролем drwcs и минимумом прав. Под этим пользователем сервер DrwebES будет подключаться к серверу PostgreSQL:
postgres@postgre ~ $ psql --dbname postgres --username postgres --command "CREATE ROLE drwcs WITH NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN ENCRYPTED PASSWORD 'drwcs';"
CREATE ROLE
postgres@postgre ~ $ # создаем табличное пространство drwebes_ts, которое будет располагаться в каталоге /var/drwebdb.
postgres@postgre ~ $ # Именно в нем, в дальнейшем, будет создана база DrwebES:
postgres@postgre ~ $ psql --dbname postgres --username postgres --command "CREATE TABLESPACE drwebes_ts OWNER postgres LOCATION '/var/drwebdb';"
CREATE TABLESPACE
postgres@postgre ~ $ # команда собственно создает базу данных для DrwebES. База данных будет расположена в табличном пространстве drwebes_ts.
postgres@postgre ~ $ # Т.е. физически она будет размещаться в каталоге /var/drwebdb.
postgres@postgre ~ $ psql --dbname postgres --username postgres --command "CREATE DATABASE drwebes OWNER postgres TABLESPACE drwebes_ts;"
CREATE DATABASE
postgres@postgre ~ $ # создает схему drwcs в базе данных drwebes. Обратите внимание, что мы подключаемся к базе drwebes (а не postgres), так как именно там мы хоти создать схему.
postgres@postgre ~ $ psql --dbname drwebes --username postgres --command "CREATE SCHEMA drwcs AUTHORIZATION drwcs;"
CREATE SCHEMA
postgres@postgre ~ $

Более подробно об этих командах написано в статье Установка Drweb Enterprise Suite 4.44 beta с PostgreSQL 8.2.5 под Windows 2000. Эти проделанные действия я бы посоветовал проверить через pgAdmin (перед этим включив доступ к СУБД в pg_hba.conf и основном конфиге - описание как это сделать было выше). После выполнения указанных команд должна получиться следующая картина:

Postgresql-drweb.png

2.3. Экспорт "рабочей" базы данных

2.3.1. Остановите службу старого ES-сервера командой из меню Пуск или веб-интерфейса. Убедитесь, что сервер остановился (дождаться сообщения об остановке сервера):

Drweb-stop.png

2.3.2. Уменьшение размера базы данных

Если база занимает много места (например моя весила на момент переезда порядка 23 Гб.), можно ее почистить от старых записей. Как это сделать описано в статье Ручное "сжатие" внутренней базы Dr.Web® Enterprise Suite. Перед очисткой желательно сделать копию базы!!! Кроме того, обязательно нужно почистить таблицу activity_data, ибо она отказывается импортироваться в базу с кодировкой UTF-8. Я сделал это по той же инструкции, за тем лишь исключением, что скрипт очистки имел следующий вид:

BEGIN;
DELETE FROM procerror WHERE errrecvtime <= 20111207000000000;
DELETE FROM activity_data WHERE createtime <= 20111207000000000;
COMMIT;
VACUUM;

Где дата 20111207000000000 должна быть меньше старее текущей. Вы, наверно, поинтересуетесь почему тут еще указана таблица procerror. Потому что в моей базе она занимала бОльшую часть места, после выполнения скрипта размер базы изменился с 23 Гб до 80 Мб. (буду рад комментариям по модификации скрипта до более оптимального вида)

2.3.4. Проверка базы данных

Если обрезка базы производилась на копии, то скопируйте копию на место рабочей базы (C:\Program Files\DrWeb Enterprise Server\var\dbinternal.dbs). Из меню "Пуск" - "Программы" (или "Все программы") - "DrWeb Enterprise Server" - "Управление сервером" ("Server control") дайте команду "Проверить базу данных" ("Verify DB"). После проверки базы должно появиться соответствующее сообщение:

Drweb-verify.png

2.3.5. Экспортировать базу данных на старом сервере:

C:\Documents and Settings\user>cd C:\Program Files\DrWeb Enterprise Server\bin
C:\Program Files\DrWeb Enterprise Server\bin>drwcsd.exe -home="C:\Program Files\DrWeb Enterprise Server" -var-root="C:\Program Files\DrWeb Enterprise Server\var" -verbosity=all exportdb D:\123\esbase.es

После выполнения данной команды, в каталоге D:\123\ будет лежать файл esbase.es с экспортированной базой.

2.4. Перенос настроек старого сервера на новый

После того, как проверка базы сообщит об отсутствии повреждений и база экспортируется, скопируйте в произвольный каталог на новом сервере следующие файлы со старого ES-сервера:

  • открытый криптографический ключ ..\installer\drwcsd.pub
  • закрытый криптографический ключ ..\etc\drwcsd.pri
  • конфигурационный файл ..\etc\drwcsd.conf
  • лицензионный ключевой файл ..\etc\enterprise.key
  • файл сертификата ..\etc\certificate.pem
  • файл сертификата ..\etc\private-key.pem
  • файл внутренней базы данных ..\var\dbinternal.dbs(в нашем случае - экспортированную базу)

На новом сервере запишите скопированные в п. 4 файлы в следующие каталоги:

  • drwcsd.pub в /opt/drwcs/Installer/
  • dbinternal.dbs (esbase.es) в /var/opt/drwcs/
  • private-key.pem, certificate.pem, drwcsd.pri, drwcsd.conf и enterprise.key в /var/opt/drwcs/etc

заменив одноимённые файлы, созданные при установке ES-сервера из дистрибутива.

Задайте перенесённым файлам те же права и владельца, которые были заданы при установке ES-сервера.

postgre ~ # ls -la /opt/drwcs/Installer/
итого 3132
drwxr-xr-x 2 root  root     4096 Ноя 21 18:36 .
drwxr-xr-x 8 root  root     4096 Ноя 21 18:35 ..
-rw-r--r-- 1 drwcs drwcs     223 Ноя 21 18:36 drwcsd.pub
-rw-r--r-- 1 root  root  3192128 Сен 17 02:12 drwinst.exe
postgre ~ # ls -la /var/opt/drwcs/etc/
итого 280
drwxr-x--- 2 drwcs drwcs   4096 Ноя 21 18:36 .
drwxr-x--- 8 drwcs drwcs   4096 Ноя 21 18:36 ..
-r--r----- 1 drwcs drwcs   1629 Ноя 21 18:36 agent.key
-rw-r----- 1 drwcs drwcs    282 Сен 17 02:12 auth-ads.xml
-rw-r----- 1 drwcs drwcs   2351 Сен 17 02:12 auth-ldap.xml
-rw-r----- 1 drwcs drwcs    993 Ноя 21 18:36 certificate.pem
-rw-r----- 1 drwcs drwcs   1615 Сен 17 02:12 clean.sql
-rw-r----- 1 drwcs drwcs    689 Сен 17 02:12 db-export.sql
-rw-r----- 1 drwcs drwcs     69 Сен 17 02:12 download.conf
-rw-r----- 1 drwcs drwcs   5570 Сен 17 02:12 drwcsd.conf
-rw------- 1 drwcs drwcs    289 Ноя 21 18:36 drwcsd.pri
-rw-r----- 1 drwcs drwcs  15608 Сен 17 02:12 drweb32.ini
-r--r----- 1 drwcs drwcs   1475 Ноя 21 18:36 enterprise.key
-rw-r----- 1 drwcs drwcs 189146 Сен 17 02:12 init.sql
-rw-r----- 1 drwcs drwcs   9381 Сен 17 02:12 openssl.cnf
-rw-r----- 1 drwcs drwcs    891 Ноя 21 18:36 private-key.pem
-rw-r----- 1 drwcs drwcs   6017 Сен 17 02:12 webmin.conf

2.5. Настройка работы DrWeb ESS с СУБД PostgreSQL

В файле /var/opt/drwcs/etc/drwcsd.conf настройте подключение к новой базе, согласно документации. В данном файле нас интересует раздел Database <DRIVER> from <PATH> using <PARAMETERS>, который определяет подключение к базе данных. <DRIVER> — наименование драйвера базы, <PATH> — путь, откуда грузить драйвер, <PARAMETERS> — параметры установления связи с сервером БД. Для нашего примера необходимо привести строчку к следующему виду:

DataBase "drwpgsql"
  from ""
  using "host=localhost port=5432 dbname=drwebes user=drwcs password=drwcs"

2.6. Инициализация новой базы данных DrWeb

Для инициализации новой базы данных необходимо выполнить следующую команду:

root@postgre:~# /etc/init.d/drwcsd initdb

После инициализации PgAdmin нам покажет такую картину (добавятся таблицы):

Drweb-postgres.png

2.7. Импорт рабочей базы данных

Перед импортом файлу базы данных необходимо задать права и владельца - drwcs

root@postgre:~# mv /root/drweb/esbase.es /opt/drwcs/
root@postgre:~# chown drwcs:drwcs /opt/drwcs/esbase.es
root@postgre:~# /etc/init.d/drwcsd importdb /opt/drwcs/esbase.es
root@postgre:~# # после завершения импорта запускаем сервер:
root@postgre:~# /etc/init.d/drwcsd start
root@postgre:~# /etc/init.d/drwcsd status
Dr.Web Server is started

После завершения указанных команд, подключитесь к веб-интерфейсу сервера и проверьте, всё ли нормально работает и присутствуют ли станции со старого сервера в списке. В разделе "Администрирование" - "Состояние репозитория" убедитесь, что репозиторий в актуальном состоянии и нормально обновляется после замены файлов. При переносе некоторые параметры перенеслись не совсем корректно:

Drweb-error-import.png

2.8. Перенаправление Агентов DrWeb на новый сервер

Запустите снова старый ES-сервер, откройте настройки агента для группы Everyone, задайте на вкладке "Сеть" новый адрес сервера и сохраните настройки. Если для каких-то агентов первичной является не группа Everyone, а другая, или заданы персональные настройки, то проделайте соответствующие эти действия для других первичных групп и агентов с персональными настройками. Формат указания сервера:

tcp/drweb:2193

2.9. Деинсталляция старого сервера

После того, как все агенты отключатся от старого сервера и подключатся к новому, старый сервер можно остановить и окончательно деинсталлировать.

2.10. траблешуттинг:

Если при импорте или настройке PostgreSQL или DrWeb возникли проблемы, то можно просмотреть лог /var/opt/drwcs/log/drwcsd.log или и /var/log/postgresql/postgresql-9.1-main.log. Например, у меня была ошибка:

20111121.190756.91 inf [ 4582  4582] main   [DbMgr] Importing database content from file "/root/drweb/esbase.es"
20111121.190756.91 FTL [ 4582  4582] main   [Server] Cannot import database because of
20111121.190756.91 FTL [ 4582  4582] main     import file "/root/drweb/esbase.es" is corrupted because of
20111121.190756.91 FTL [ 4582  4582] main     cannot open file "/root/drweb/esbase.es" because of
20111121.190756.91 FTL [ 4582  4582] main     Отказано в доступе (errno=13)

которая была из-за того что не было прав к файлу экспортированной базы.

Оригинал статьи размещен тут: Перенос DrWeb ES 6.0 с Windows на Debian со сменой типа БД (dbinternal.dbs -> PostgreSQL)