На сайте
http://v8.1c.ru/overview/postgres_patches_notes.htm есть три патча:
1c_FULL_90-0.19.patch
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
ql-9.0.1-1C.tar.gz -O postgresql-9.0.1.tar.gz # tar xzvf postgresql-9.0.1.tar.gz
Переходим в каталог с исходниками, конфигурируем, собираем и устанавливаем:
# 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
Далее порядок действий такой: