Установка 1С Предприятия

Материал из MediaWiki
Версия от 21:39, 27 февраля 2023; Admin (обсуждение | вклад) (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-функции
    Странно, но так бывает, что в какой-то версии конфигурации забывают положить все необходимые функции. Надо выбрать предыдущую версию или более раннюю, где данной ошибки не возникает, и установить её; после чего обновить её до последней.