postgresql-1c-9.0.1.patch
applock-1c-9.0.1.patch
Попытки пропатчить ими PostgreSQL не принесли результата. Поэтому для корректной установки PostgreSQL использовались уже исправленные исходники PostgreSQL 9.0.1 для 1С, любезно предоставленные Alsigned http://www.alsigned.ru/?dl_name=postgresql-9.0.1-1C.tar.gz (спасибо огромное ему за труд).
В данной статье описывается сборка и установка PostgreSQL-9.0.1 для работы с сервером 1С Предприятия 8.2 (платформа 8.2.14,540), используемая операционная система Ubuntu 10.04 x86.
1. Установка PostgreSQL 9.0.1
Устанавливаем необходимые для сборки пакеты:
#apt-get install libreadline-dev libicu-dev patch zlib1g-dev
Переходим в директорию /usr/local/src, скачиваем и распаковываем исходники:
# cd /usr/local/src # wget http://www.alsigned.ru/?dl_name=postgres
Переходим в каталог с исходниками, конфигурируем, собираем и устанавливаем:
# cd postgresql-9.0.1 # ./configure --disable-integer-datetimes --prefix=/usr # make && make install
Переходим в каталог contrib, собираем и устанавливаем:
# cd contrib # make && make install
2. Настройка PostgreSQL 9.0.1
Создаем пользователя и группу postgres:
# groupadd -r postgres # useradd -g postgres -r -d /mnt/base/utp -s /bin/bash postgres
Создаем директорию для PostgreSQL
# mkdir /mnt/base/utp # chown postgres:postgres /mnt/base/utp
Замечание! Кталог /mnt/base/utp - это так называемый "рабочий каталог", т.е. в нем будут храниться ВСЕ базы данных (в подкаталоге base , он будет автоматически создан при инициализации каталога баз данных)
Важно! Права на каталог /mnt/base/ - должны быть 777, а на /mnt/base/utp - должны быть 700
Генерируем локали en_US и ru_RU.UTF-8 необходимые для работы PostgreSQL с 1с:
# locale-gen en_US ru_RU.UTF-8
Инициализируем базу и установим пароль для postgres. На 32-битной машине может потребоваться сделать
# echo 134217728 >/proc/sys/kernel/shmmax # echo 134217728 >/proc/sys/kernel/shmall
И чтобы руками их постоянно не менять,впишем их значения в sysctl.conf
# echo kernel.shmmax=134217728 >>/etc/sysctl.conf # echo kernel.shmall=134217728 >>/etc/sysctl.conf
Инициализируем каталог баз данных:
# su postgres $initdb -D /mnt/base/utp --locale=ru_RU.UTF-8 The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale ru_RU.UTF-8. The default database encoding has accordingly been set to UTF8. The default text search configuration will be set to "russian". . . . . . . . . . . Success. You can now start the database server using: postgres -D /mnt/base or pg_ctl -D /mnt/base/utp -l logfile start
Запускаем PostgreSQL:
#pg_ctl -D /mnt/base/utp start
Задаем пароль пользователя БД:
#psql -U postgres -c "alter user postgres with password 'наш_пароль';" #exit
Делаем скрипт для запуска-остановки, для этого создаем файл /etc/init.d/postgresql следующего содержания:
#!/bin/sh # Скрипт запуска/остановки PostgreSQL-9.0-1C DATADIR=/mnt/base/utp PGCTL=/usr/bin/pg_ctl PGUSER=postgres case $1 in start) sudo -u $PGUSER -H $PGCTL -D $DATADIR start ;; stop) sudo -u $PGUSER -H $PGCTL -D $DATADIR stop ;; restart) sudo -u $PGUSER -H $PGCTL -D $DATADIR stop sudo -u $PGUSER -H $PGCTL -D $DATADIR start ;; *) echo start|stop|restart return 1; ;; esac
Даем разрешения на запуск и добавляем сервис в автозапуск:
#chmod u+x /etc/init.d/postgresql #update-rc.d postgresql defaults
Теперь необязательное редактирование postgresql.conf . Значения , устанавливаемые в этом файле зависят от многих факторов и собственно служат для настройки оптимальной производительности.
#mcedit /mnt/base/utp/postgresql.conf
listen_addresses = ‘127.0.0.1′ - если соединения с базой будут только с локального хоста, то надежнее сделать именно так, чтобы порт 5432 слушался только на адресе 127.0.0.1 (в нашем случае оставляем по умолчанию '*' , т.к. соединения с базой будут не локально!!!).
fsync = off - значение on сильно снижает производительность, поскольку все транзакции непосредственно пишутся на жесткий диск без использования кэширования, но повышается надежность. Значение off есть смысл устанавливать, когда установлены надежные диски и надежный же UPS .
effective_cache_size = 4096MB - на сервере 8Гб ОЗУ, этот параметр надо выставить в половину ОЗУ, как рекомендует 1С для постгреса 8.2
work_mem = 16MB - насколько я понимаю, этот параметр зависит от среднего размера таблиц, в любом случае, для тонкой настройки надо тестировать на конкретном сервере с конкретной базой (оставляем по умолчанию).
Перезапускаем службу и проверяем, запустился ли PostgreSQL:
# service postgresql restart
Вы должны получить примерно следующее сообщение:
Stopping postgresql service: DONE Starting postgresql service: DONE
Проверяем, слушается ли 5432 порт:
# netstat -atn|grep 5432
Если в ответ получился, вот такой выхлоп, то всё нормально:
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN
или
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN // если Вы в файле postgresql.conf указали слушать только локальные подключения.
На этом этапе установка PostgreSQL завершена. Приходим к установке сервера 1C 8.2.
3. Установка сервера 1cv82
Здесь не должно возникнуть сложностей с установкой. Скидуем deb-пакеты версии 8.2.14-540_i386 в каталог /usr/local/srv1c и устанавливаем.
Список пакетов:
1c-enterprise82-common-nls_8.2.14-540_i386.deb
1c-enterprise82-common_8.2.14-540_i386.deb
1c-enterprise82-crs-nls_8.2.14-540_i386.deb
1c-enterprise82-crs_8.2.14-540_i386.deb
1c-enterprise82-server-nls_8.2.14-540_i386.deb
1c-enterprise82-server_8.2.14-540_i386.deb
1c-enterprise82-ws-nls_8.2.14-540_i386.deb
1c-enterprise82-ws_8.2.14-540_i386.deb
По сути, нам нужны лишь 2 пакета 1c-enterprise82-server_8.2.14-540_i386.d
eb и 1c-enterprise82-common_8.2.14-540_i386.deb , т.к. пакеты «-nls» - это языковая поддержка. Нам она не нужна, русский язык есть в основной поставке. Пакет «-ws» - это веб-сервисы. Но они есть не просят, поэтому на перспективу я их оставил.
#cd /usr/local/svr1c #dpkg -i 1c*.deb
Программа устанавливается по умолчанию в каталог /opt/1C/v8.2/i386/
Устанавливаем дополнительные пакеты, которые необходимы для нормальной работы сервера:
# apt-get install imagemagick ttf-mscorefonts-installer libgsf-1-114 texlive-base unixodbc
Далее переходим в каталог утилиты и запускаем config_server:
# cd /opt/1C/v8.2/i386/utils #./config_server
Если утилита немного задумалась и не произошло никакого выхлопа в ответ, то это значит, что сервер 1С настроен правильно и больше ничего не нужно для нормального функционирования.
!!!!! На Ubuntu 12.04 появилась проблема со скриптом ./config_server. При запуске он может не обнаруживать установленных дополнительных библиотек и сообщать "Please install following package: <имя пакета>" при установленном пакете. Либо, в некоторых случаях, при запуске тонкого клиента может происходить ошибка "Ошибка инициализации графической подсистемы".
Лечится так. Правим ./config_server:
# cd /opt/1C/v8.2/i386/utils #mcedit ./config_server В начало функции getLibPath добавить: для 32bit checkPath lib $ARCH && { echo /usr/lib; return; } для 64bit checkPath lib/x86_64-linux-gnu $ARCH && { echo /usr/lib/x86_64-linux-gnu; return; } тело функции checkInstalledLibs заменить на: для 32bit SYSTEM_LIB_PATH="/usr/lib" checkLib MagickWand Wand || checkLib Wand || askToInstall ImageMagick checkLib gsf-1 || askToInstall libgsf для 64bit SYSTEM_LIB_PATH="/usr/lib/x86_64-linux-gnu" checkLib MagickWand Wand || checkLib Wand || askToInstall ImageMagick checkLib gsf-1 || askToInstall libgsf
Даем пользователям 1С сервера права на запись:
# chown -R usr1cv82:grp1cv82 /opt/1C
Добавляем сервер 1С в автозапуск:
# update-rc.d srv1cv82 defaults
В ответ Вы должны получить следующий выхлоп:
Adding system startup for /etc/init.d/srv1cv82 ... /etc/rc0.d/K20srv1cv82 -> ../init.d/srv1cv82 /etc/rc1.d/K20srv1cv82 -> ../init.d/srv1cv82 /etc/rc6.d/K20srv1cv82 -> ../init.d/srv1cv82 /etc/rc2.d/K20srv1cv82 -> ../init.d/srv1cv82 /etc/rc3.d/K20srv1cv82 -> ../init.d/srv1cv82 /etc/rc4.d/K20srv1cv82 -> ../init.d/srv1cv82 /etc/rc5.d/K20srv1cv82 -> ../init.d/srv1cv82
Перезагружаем сервер. Проверяем запускаются ли при старте системы постгрес и сервер 1С:
#netstat -atn |grep 0.0.0.0:15
tcp 0 0 0.0.0.0:1540 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:1541 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:1560 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:1561 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:1562 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:1564 0.0.0.0:* LISTEN
Если в ответ Вы видите такой список портов, то всё отлично (а если, нет портов 1541 или других, то не запустился процесс rphost и это не есть хорошо).
Так же можно для профилактики проверить, все ли процессы сервера запущены нормально:
#ps aux|grep 1c
От имени пользователя usr1cv82 должно быть запущено три процесса: ragent, rmngr и rphost. После имен процессов идут номера портов, на которых они работают:
usr1cv82 1217 0.0 0.1 111784 15432 ? Ssl Nov18 1:10 /opt/1C/v8.2/i386/ragent -daemon usr1cv82 1220 0.4 0.3 262420 32660 ? Sl Nov18 25:54 /opt/1C/v8.2/i386/rmngr -port 1541 -range 1560:1591 usr1cv82 4034 6.5 4.5 651928 375684 ? Sl Nov20 184:46 /opt/1C/v8.2/i386/rphost -range 1560:1591 -reghost titan -regport 1541 -pid 27e017b0-11f0-11e1-7f8e-3c4a92f1a084
Если процесса не три, а один (такое почему-то иногда бывает, но только при первоначальном запуске), то делаем:
# invoke-rc.d srv1cv82 stop
Удаляем каталог «.1cv82» в домашней директории пользователя usr1cv82. И перезапускаем сервер заново. Должно стать все нормально.
На этом этапе всё готово для создания БД из под оснастки Windows "Администрирование серверов предприятия"!!!!!!!!!!!!!!!!!!!
4. Установка клиента
Установка клиента - это довольно обширная тема, по этому она рассмотрена отдельной статьей
5. Установка HASP и настройка лицензионного подключения к БД.
Дабы не замарачиваться, возьмем уже готовые и собранные пакеты HASP драйвера и демона на ETRESOFT`e. Копируем пакеты в директорию установки /usr/local/HASP и устанавливаем:
#cd /usr/local/HASP #dpkg -i *.deb
тушим сервер:
#shutdown -h now
вставляем флешки-ключи и запускаем сервак...
Проверить работает ли HASP-ключ можно командами:
#service haspd status
должно быть что то похожее на:
Hardware protection keys support bundle. Etersoft (c) 2008-2010 HASPD package 3.2 with /dev/bus/usb support Aladdin HASP 4/HL/SRM driver status: kernel module aksparlnx is not loaded (WARNING: HASP LPT keys support is disabled! Run service haspd build if needed.) aksusbd is running winehasp is running hasplm is running hasplmd is running Daemon version: 1.14 (#7779) - key API (USB) version: 3.88 (parallel driver not available) /proc/bus/usb workaround is enabled Smartkey 3 USB/LPT driver status: skeyd is stopped SafeNet Sentinel status: usbsentinel is stopped SntlKeysSrvrlnx is stopped
Ну и еще одна проверка:
#netstat -ap | grep hasp
должны увидеть, что демон слушает 475 порт:
tcp 0 0 *:1947 *:* LISTEN 1143/hasplmd udp 0 0 localhost:2790 *:* 1125/winehasp udp 0 0 *:1947 *:* 1143/hasplmd udp 0 0 *:475 *:* 1134/hasplm udp 0 0 *:51937 *:* 1143/hasplmd unix 3 [ ] STREAM CONNECTED 6106 1134/hasplm unix 3 [ ] STREAM CONNECTED 5392 1143/hasplmd unix 3 [ ] STREAM CONNECTED 5390 1143/hasplmd unix 2 [ ] DGRAM 5150 1143/hasplmd unix 2 [ ] DGRAM 5137 1134/hasplm unix 2 [ ] DGRAM 5124 1125/winehasp
6. Создаем скрипт автоматического BACKUP`a БД.
Этот скрипт нужен для автоматического бекапа БД и чистки от старых бекапов.
Собственно, приступим, создаем директорию бекапов и скрипт сответственно:
#mkdir /mnt/1c/Backup1C #cd /mnt/1c/Backup1C/ #mcedit backup1c
и в ставляем в скрипт следующее содержание:
#!/bin/bash # Скрипт запуска резервного копирования БД 1С (храним 5 последних копий) BACKUPDIR=/mnt/1c/Backup1C/ # Директория хранения бэкапов DATENAME=`date +%d.%m.%Y-%H.%M` # Дата/Время в имени файла бэкапа LOGFILE=/var/log/Backup1C.log # Хранилище лог-файлов X=1 # Счетчик файлов FILEMASK="*.backup" # маска файлов KEEP=4 # сколько файлов (бэкапов) надо оставлять
BASE=utp # база данных
cd $BACKUPDIR echo Удаление старых резервных копий базы данных... for i in `ls -t $BACKUPDIR/$FILEMASK` do if [ $X -le $KEEP ] then ((X++)) continue fi rm $i done echo Начато резервное копирование базы данных...
pg_dump -h localhost -U postgres -Fc -Z9 -c -f $DATENAME.utp.backup $BASE
echo "Резервное копирование БД УТП завершено: $DATENAME" > $LOGFILE ####LAST LINE. DO NOT REMOVE####
Смысл дествий скрипта такой:
Проверка количества старых бекапов, удаление всех старых бекапов (кроме 4х последних - параметр KEEP) и непосредственный бекап текущего состояния БД с логированием в /var/log/Backup1C.log
Теперь, для автоматического выполнения этого скрипта, добавим его в crontab:
#mcedit /etc/crontab
и добавляем туда строку:
00 3 * * * root /mnt/1c/Backup1C/backup1c
т.е. скрипт /mnt/1c/Backup1C/backup1c будет выполняться каждый день в 3:00
7. Восстановление БД из BACKUP`a.
Все действия выполняются от имени пользователя postgres. Логинимся в него:
$sudo su postgres
Далее порядок действий такой:
- удаляем существующую БД
- создать новую БД с 0-шаблоном
- восстановить данные из backup`a во вновь созданную БД
- через оснастку "Администрирование серверов предприятия" добавить БД в кластер 1С
$dropdb <ИМЯ_БД>
$createdb -T template0 <ИМЯ_БД>
$pg_restore -d <ИМЯ_БД> <ПУТЬ+ИМЯ_BACKUP`a>
Комментариев нет:
Отправить комментарий