На сайте 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 я не пытался их наложить без внесения изменений в исходники он либо не собирается, либо не работает с 1С. Поэтому для корректной установки 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=postgresql-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
Генерируем локали 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
postgres@pgsrv$ 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:
postgres@pgsrv$ pg_ctl -D /mnt/base/utp start
server starting
Задаем пароль пользователя БД:
postgres@pgsrv$ psql -U postgres -c «alter user postgres with password ‘наш_пароль’;»
postgres@pgsrv$ exit
Делаем скрипт для запуска-остановки, для этого создаем файл /etc/init.d/postgresql следующего содержания:
#!/bin/sh
# Скрипт запуска/остановки PostgreSQL-9.0-1C
DATADIR=/mnt/baser/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 . Значения , устанавливаемые в этом файле зависят от многих факторов и собственно служат для настройки оптимальной производительности.
# nano /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
# 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
Здесь не должно возникнуть сложностей с установкой, если у вас 10.04 (на 11.04 я безуспешно потратил 2 дня, но об этом позже). Я скачал 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.deb и 1c-enterprise82-common_8.2.14-540_i386.deb , т.к. пакеты «-nls» — это языковая поддержка. Нам она не нужна, русский язык есть в основной поставке. Пакет «-ws» — это веб-сервисы. Но они есть не просят, поэтому на перспективу я их оставил.
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С настроен правильно и больше ничего не нужно для нормального функционирования.
Даем пользователям 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
Именно здесь у меня и вознгикли проблемы при установке 1С сервера на систему 11.04. Упорно не хотел стартовать rphost и открывать порт 1541, который необходим для удалённого создания кластеров базы 1С.
Если процесса не три, а один (такое почему-то иногда бывает, но только при первоначальном запуске), то делаем:
# invoke-rc.d srv1cv82 stop
Удаляем каталог «.1cv82» в домашней директории пользователя usr1cv82. И перезапускаем сервер заново. Должно стать все нормально.
На этом этапе всё готово для создания БД из под оснастки Windows «Администрирование серверов предприятия».
4. Установка клиента 1С 8.2 Предприятие под Wine 1.2 (Wine Etersoft) на Ubuntu 9.04 — 10.04
Устанавливаем Wine версии не ниже 1.2 из стандартьных репозитариев. Если их нет, то добавьте:
deb ppa.launchpad.net/ubuntu-wine/ppa/ubuntu jaunty main
deb-src ppa.launchpad.net/ubuntu-wine/ppa/ubuntu jaunty main
Процесс установки 1с под wine почти ничем не отличается от такового процесса под Windows. В процессе установки следует помнить, что НЕ НАДО устанавливать HASP DEVICE DRIVER.
Драйвер защиты не устанавливал. После установки на рабочем столе появился ярлык с рюмкой «вина» (с Etersoft был корректный значок ярлыка запуска 1С). Далее, если сервер не локальный, то потребуется прописать в /etc/hosts адрес и имя сервера кластеров.
192.168.10.1 name_server
Затем запускаем winecfg, добавляем в список приложение 1cv8.exe, и для него переопределяем 4 библиотеки:
mshtml, shdocvw, shlwapi и urlmon, затем нажать на OK.
Если вы используете схемы из Панели функций, то Вам приёдётся также дополнительно установить IE6. Для этого Вам понадобиться скачать скрипт Winetricks:
# sh winetricks
В принципе, устанавливать IE и переопределять библиотеки — не обязательно. Тогда все работает, но мы лишаемся синтакс помощника и объекта ПолеHTMLДокумента и т.п. — потому что 1с использует IE для всего этого. Причем лишаемся очень грубо — 1С будет виснуть при попытке работать с этими объектами.
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 # сколько файлов (бэкапов) надо оставлять
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 -Fc -U postgres «utp» > $DATENAME.utp.backup
echo «Резервное копирование БД УТП завершено: $DATENAME» > $LOGFILE
# Команда для восстановления БД из Backup
# pg_restore –U postgres –d utp –v /ПУТЬ/ИМЯФАЙЛА.utp.backup
####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
Далее порядок действий такой:
удаляем существующую БД
$dropdb
создать новую БД с 0-шаблоном
$createdb -T template0
восстановить данные из backup`a во вновь созданную БД
$pg_restote -d
через оснастку «Администрирование серверов предприятия» добавить БД в кластер 1С.
Желаю, Вам, удачи в установке и настройке связки! Ведь именно без удачи настроить Linux, ой как, не просто )) ИМХО.