Установка 1С Предприятия
Установка 1С Предприятия 8.2
Введение
В данном руководстве описывается установка клиент-серверного 1С Предприятия 8.2 в виртуальную машину с ОС на основе ядра linux. Т.к. руководство администратора 1С не содержит никакой информации по установке, кроме названия необходимых бинарных пакетов, а в сети, среди небольшого количества информации по теме, не было найдено полного руководства, которое бы описывало процесс от начала и до конца, то появилась идея описать все необходимые шаги в одном месте. ОС хозяина имеет архитектуру amd64, а 1С и ключи 32-битные, поэтому ОС в виртуальной машине будет с i386 архитектурой. И так, имеется:
- сервер с Debian GNU/Linux 6 (amd64);
- 2 usb-ключа с лицензиями: один - для сервера, второй - сетевой для клиентов;
- набор *.deb пакетов 1С (i386);
Т.к. статья писалась через какое-то время после установки, а проверять всё заново на боевой машине никакого желания нет, то могут быть не точности и ошибки.
Сборка postgresql
Необходимо распаковать исходники postgresql во временную директорию:
user@linux$ apt-get source postgresql-8.4 user@linux$ cd postgresql-8.4-8.4.13
После, скачать три патча для postgresql 8.4.1 с сайта 1С и разместить их в директории с исходниками:
user@linux$ mv ~/1c_FULL_84-0.19.2.patch debian/patches/20-1c_FULL_84-0.19.2.patch user@linux$ mv ~/postgresql-1c-8.4.patch debian/patches/21-postgresql-1c-8.4.patch user@linux$ mv ~/applock-1c-8.4.1.patch debian/patches/22-applock-1c-8.4.1.patch
В debian/rules необходимо исправить --enable-integer-datatime на --disable-integer-datatime. В debian/postgresql-contrib-8.4.install надо добавить строки:
usr/lib/postgresql/8.4/lib/mchar.so usr/lib/postgresql/8.4/lib/fulleq.so usr/lib/postgresql/8.4/lib/fasttrun.so
Перед сборкой пакета необходимо установить кроме прочего, также, и libicu-dev. После чего можно запускать сборку пакета с помощью dpkg-buildpackage.
В моём случае gcc ругался в двух местах на необъявленную переменную rest. Для исправления этого в начало функции, где возникла ошибка, надо добавить строку:
Const *rest = NULL;
Установка базовой системы
Создание диска и ФС для виртуальной машины
Создаём образы дисков:
user@linux$ kvm-img create -f raw acc.img 4G user@linux$ kvm-img create -f raw acc.db.img 8G
Ассоциируем образ с loopback-устройством:
root@linux# losetup /dev/loop0 ./acc.img
Создаём на данном устройстве один раздел, который ассоциируем с /dev/loop1. После чего создаём файловую систему на нём (передавая mkfs кол-во блоков на устройстве 4192933):
root@linux# fdisk /dev/loop0 root@linux# losetup -o $((63*512)) /dev/loop1 ./acc.img root@linux# mkfs.ext3 /dev/loop1 4192933 root@linux# tune2fs -L rootfs /dev/loop1
Узнать смещение для первого раздела, а также кол-во блоков занимаемых им, можно с помощью команды:
root@linux# fdisk -lu /dev/loop0 Disk /dev/loop0: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders, total 8388608 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x390981ce Device Boot Start End Blocks Id System /dev/loop0p1 63 8385929 4192933+ 83 Linux
Установка базовой системы
Ставим базовую систему с помощью debootstrap:
root@linux# mount /dev/loop1 /mnt root@linux# debootstrap --arch=i386 --foreign --include=grub2 squeeze /mnt http://ftp.debian.org
Ставим ядро:
root@linux# (cd /; tar -c /boot/*3.2.30-my /lib/modules/3.2.30-my) | (cd /mnt; tar -x )
Устанавливаем grub2:
root@linux# grub-install --modules=part_msdos --root-directory=/mnt /dev/loop0
После этого надо создать /mnt/boot/grub/grub.cfg. Можно просто скопировать системный и добавить туда новый пункт меню вида:
menuentry 'Debian GNU/Linux, with Linux 3.2.30-my' --class debian --class gnu-linux --class gnu --class os { insmod part_msdos insmod ext2 search --no-floppy --label rootfs --set=root echo 'Loading Linux 3.2.30-my ...' linux /boot/vmlinuz-3.2.30-my root=LABEL=rootfs console=ttyS0 ro quiet echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-3.2.30-my }
Или можно установка lilo в качестве альтернативы grub2:
root@linux# echo " boot=/dev/loop0 disk=/dev/loop0 bios=0x80 cylinders=522 heads=255 sectors=63 partition=/dev/loop1 start=1 install=menu prompt timeout=100 lba32 large-memory image=/boot/vmlinuz-3.2.30-my initrd="/boot/initrd.img-3.2.30-my" append="console=ttyS0" root="LABEL=rootfs" label=linux " > /mnt/etc/lilo.conf root@linux# lilo -r /mnt
Для возможности залогиниться с помощью telnet на ttyS0 раскомментируем в /mnt/etc/inittab следующую строку:
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
Добавим модуль ядра button в /mnt/etc/modules:
root@linux# echo button >> /mnt/etc/modules
Продолжение установки базовой системы из виртуальной машины
Теперь надо запустить виртуальную машину и подключиться к ней по vnc, чтобы продолжить установку базовой системы. В моём случае скрипт запуска следующий:
#!/bin/bash USBKEY1=`grep -EB 4 '^S:.*HASP 2.17' /proc/bus/usb/devices | awk '$0 ~ /^T:/ { split($2, a, /=/); print a[2] "." $8 }'` USBKEY2=`grep -EB 4 '^S:.*HASP HL 3.21' /proc/bus/usb/devices | awk '$0 ~ /^T:/ { split($2, a, /=/); print a[2] "." $8 }'` PIDFILE="/var/run/kvm/srv1c.pid" CMD="-enable-kvm \ -cpu host \ -smp 2 \ -m 2G \ -nographic -daemonize \ -net nic,vlan=0,macaddr=52:54:00:00:00:03,model=virtio -net tap,vlan=0,ifname=tap2,script=no \ -drive file=acc.img,if=virtio \ -drive file=acc.db.img,if=virtio \ -usb \ -usbdevice host:$USBKEY1 -usbdevice host:$USBKEY2 \ -vnc 192.168.100.203:2 \ -monitor unix:acc.mon,server,nowait \ -serial telnet:127.0.0.2:23,server,nowait \ -pidfile $PIDFILE" case "$1" in start) kvm $CMD ip link set dev tap2 up brctl addif br0 tap2 ;; stop) socat - unix-connect:acc.mon <<EOF system_powerdown EOF brctl delif br0 tap2 ;; esac
После чего можно подключиться по vnc к 192.168.100.203:2. Нужное ядро(в данном случае 3.2.30-my) необходимо загрузить с init=/bin/bash. Когда загрузка завершилась надо установить пароль для root:
root@linux# mount -o remount,rw / root@linux# passwd
И запустить продолжение установки:
root@linux# cd debootstrap; ./debootstrap --second-stage root@linux# sync
Установка прочего ПО
Для продолжения установки необходимо произвести настройку сети:
root@linux# echo " auto lo eth0 iface lo inet loopback iface eth0 inet static address 192.168.100.202 netmask 255.255.255.0 gateway 192.168.100.201 " > /etc/network/interfaces root@linux# ifup -a
И настройку apt:
root@linux# echo ' deb http://ftp.debian.org squeeze main contrib non-free deb http://security.debian.org squeeze/updates main contrib non-free ' > /etc/apt/sources.list root@linux# apt-get update
Далее ставим нужные пакеты:
root@linux# apt-get install sudo openssh-server acpid zip unzip bzip2 lsb-release openssl ssl-cert openssl-blacklist \ less libicu44 libossp-uuid16 libldap-2.4-2 libxml2 locales libxslt1.1 \ imagemagick msttcorefonts libgsf-1-114
После этого надо настроить локали. Для этого надо раскоментировать ru_RU.utf-8 и en_US.utf-8 локали в /etc/locale.gen и создать вручную локаль en_US.utf-8 с помощью localedef:
root@linux# locale-gen root@linux# echo LANG=ru_RU.utf-8 > /etc/default/locale root@linux# localedef -i en_US -f UTF-8 /usr/lib/locale/en_US.UTF-8 root@linux# cd /usr/lib/locale root@linux# ln -s en_US.UTF-8 en_US root@linux# ln -s en_US en
Установка postgresql
Создаём раздел и файловую систему на диске для БД:
root@linux# fdisk /dev/vdb root@linux# mkfs.ext3 /dev/vdb1 root@linux# tune2fs -L dbfs /dev/vdb1
Настраиваем /etc/fstab:
root@linux# mkdir /var/lib/postgresql root@linux# echo ' LABEL=rootfs / ext3 auto,errors=remount-ro 0 1 LABEL=dbfs /var/lib/postgresql ext3 auto 0 1 usbfs /proc/bus/usb usbfs auto 0 0 ' > /etc/fstab root@linux# mount -a
Устанавливаем параметры sysctl:
root@linux# echo "kernel.shmmax = 67108864" >> /etc/sysctl.conf root@linux# sysctl -p
После этого можно устанавливать postgresql:
root@linux# apt-get install postgresql-common postgresql-client-common root@linux# dpkg -i libpq5_8.4.13-0squeeze1_i386.deb root@linux# dpkg -i libpgtypes3_8.4.13-0squeeze1_i386.deb root@linux# dpkg -i postgresql-client-8.4_8.4.13-0squeeze1_i386.deb root@linux# dpkg -i postgresql-8.4_8.4.13-0squeeze1_i386.deb root@linux# dpkg -i postgresql-contrib-8.4_8.4.13-0squeeze1_i386.deb
И создавать кластер:
root@linux# pg_dropcluster --stop 8.4 main root@linux# pg_createcluster --locale=ru_RU.utf-8 -e utf-8 --start 8.4 main root@linux# sudo -u postgres psql template1 template1=# create language plpgsql; template1=# \i /tmp/mchar.sql template1=# \i /tmp/fulleq.sql template1=# \i /tmp/fasttrun.sql template1=# \i /tmp/plpgsql_call_handler.sql template1=# \i /tmp/datediff.sql template1=# alter user postgres password 'postgres';
Где, mchar.sql, fulleq.sql и fasttrun.sql надо взять из директории с исходниками postgresql из директорий contrib/mchar, contrib/fulleq и contrib/fasttrun соответственно. Добавить ссылки на plpgsql_call_handler.sql и datediff.sql.
После этого надо настроить доступ к postgresql через tcp/ip, раскомментировав строку:
host all all 127.0.0.1/32 md5
в файле /etc/postgresql/8.4/main/pg_hba.conf.
Настройка postgresql
При использовании штатного файла конфигурации производительность оставляет желать лучшего. Далее пример конфигурации для сервера с 4G оперативной памяти:
shared_buffers = 256MB temp_buffers = 32MB work_mem = 20MB maintenance_work_mem = 60MB max_fsm_pages = 1024000 max_fsm_relations = 5000 #--- fsync = on synchronous_commit = off full_page_writes = off wal_buffers = 512kB checkpoint_segments = 12 checkpoint_timeout = 15min random_page_cost = 1.5 effective_cache_size = 256MB #--- escape_string_warning = off
Подробнее про влияние параметров конфигурации на сайте Вячеслава Гилёва.
Установка ПО usb-ключей
Для установки ПО usb-ключей необходимо скачать архив с сайта производителя - aladdin.com. Проверены на совместную работу hasplm 8.30 и aksusbd 1.8.1. После того, как данный архив распакован, можно приступать к установке aksusbd и hasplm.
Установка aksusbd
Для установки драйвера usb-ключа надо разместить необходимые файлы в системе:
root@linux# cp Redistribute/Runtime/script/aksusbd /usr/sbin/ root@linux# cp Redistribute/Runtime/script/aksusbd.debian /etc/init.d/aksusbd root@linux# chmod u+rx /etc/init.d/aksusbd
Добавим LSB-заголовки в /etc/init.d/aksusbd:
### BEGIN INIT INFO # Provides: aksusbd # Required-Start: $local_fs # Required-Stop: # X-Start-Before hasplm srv1cv82 # X-Stop-After: hasplm srv1cv82 # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO
И запустим insserv:
root@linux# insserv aksusbd
Установка hasplm
Для установки управляющего лицензиями также надо разместить необходимые файлы в системе:
root@linux# cp Redistribute/LM/script/hasplm /usr/sbin/ root@linux# cp Redistribute/LM/script/hasplm.debian /etc/init.d/hasplm root@linux# chmod u+rx /etc/init.d/hasplm
Добавим LSB-заголовок в /etc/init.d/hasplm:
### BEGIN INIT INFO # Provides: hasplm # Required-Start: $local_fs aksusbd # Required-Stop: aksusbd # X-Start-Before srv1cv82 # X-Stop-After: srv1cv82 # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO
и запустим insserv:
root@linux# insserv hasplm
Установка сервера 1С Предприятие
Для установки сервера 1С Предприятие необходимо установить нужные deb-пакеты:
root@linux# dpkg -i 1c-enterprise82-common_8.2.15-318_i386.deb root@linux# dpkg -i 1c-enterprise82-server_8.2.15-318_i386.deb root@linux# dpkg -i 1c-enterprise82-ws_8.2.15-318_i386.deb root@linux# dpkg -i 1c-enterprise82-crs_8.2.15-318_i386.deb
Далее запускаем скрипт проверки установки и доустанавливаем требуемые пакеты:
root@linux# /opt/1C/v8.2/i386/utils/config_server /usr/share/fonts/truetype
В начало файла /etc/init.d/srv1cv82 после чего добавляем LSB-заголовок:
### BEGIN INIT INFO # Provides: srv1cv82 # Required-Start: $local_fs $remote_fs aksusbd hasplm postgresql # Required-Stop: aksusbd hasplm postgresql # X-Stop-After: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO
и запускаем insserv:
root@linux# insserv srv1cv82
Настройка сервера
После установки необходимо с консоли администрирования 1С создать на сервере кластер, сервер и рабочие процессы.
Включение Технологического Журнала
При возникновении проблем (а также для анализа работы системы) может потребоваться Технологический Журнал (далее ТЖ). Для включения ТЖ создаём каталоги /var/log/1c и /var/log/1c/dumps и файл /opt/1C/v8.2/i386/conf/logcfg.xml:
<config xmlns="http://v8.1c.ru/v8/tech-log"> <dump create="true" location="/var/log/1c/dumps" prntscrn="true" type="2"/> <log history="72" location="/var/log/1c"> <event> <eq property="name" value="EXCP"/> </event> <event> <eq property="name" value="EXCPCNTX"/> </event> <event> <eq property="name" value="PROC"/> </event> <event> <eq property="name" value="ADMIN"/> </event> <event> <eq property="name" value="MEM"/> </event> <event> <eq property="name" value="LEAKS"/> </event> <property name="all"/> </log> </config>
После этого перезапускаем службу.
Публикация информационных баз
На примере веб-сервера Apache 2.2. После базовой настройки веб-сервера создаём каталог /srv/www/htdocs/unf и запускаем встроенную утилиту публикации (unf - имя информационной базы в кластере):
root@linux# /opt/1C/v8.2/i386/webinst -apache22 -wsdir unf -dir '/srv/www/htdocs/unf/' \-connStr 'Srvr="hostname";Ref="unf";' -confPath /etc/apache2/conf.d/1cws.conf
При этом должен сформироваться файл /etc/apache2/conf.d/1cws.conf с директивами подключения библиотеки wsap22.so и алиасом для подключаемого прикладного решения (unf):
LoadModule _1cws_module "/opt/1C/v8.2/i386/wsap22.so" # 1c publication Alias "/unf" "/srv/www/htdocs/unf/" <Directory "/srv/www/htdocs/unf/"> AllowOverride None Options None Order allow,deny Allow from all SetHandler 1c-application ManagedApplicationDescriptor "/srv/www/htdocs/unf/default.vrd" </Directory>
VRD-файл должен выглядеть следующим образом:
<?xml version="1.0" encoding="UTF-8"?> <point xmlns="http://v8.1c.ru/8.2/virtual-resource-system" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" base="/unf" ib="Srvr="hostname";Ref="unf";"/>
После этого перезапускаем веб-сервер.
Настройка клиента
На стороне клиента необходимо настроить файл nethasp.ini (Добавить путь к файлу):
[NH_COMMON] NH_TCPIP = Enabled ... [NH_TCPIP] NH_SERVER_ADDR = 192.168.100.202 //ip-адрес компьютера, где расположен управляющий лицензиями. NH_TCPIP_METHOD = UDP NH_USE_BROADCAST = Disabled
Исправление неисправностей
- При создании информационной базы появляется ошибка с сообщением про lc_messages
- Необходимо убедиться, что локаль /usr/lib/locale/en_US.UTF-8 и символьные ссылки en_US и en на неё существуют (#Установка прочего ПО);
- При установке конфигурации 1С выдаёт ошибку, что несуществует какой-то sql-функции
- Странно, но так бывает, что в какой-то версии конфигурации забывают положить все необходимые функции. Надо выбрать предыдущую версию или более раннюю, где данной ошибки не возникает, и установить её; после чего обновить её до последней.