Установка 1С Предприятия - dim13/lor GitHub Wiki
В данном руководстве описывается установка клиент-серверного 1С Предприятия 8.2 в виртуальную машину с ОС на основе ядра linux. Т.к. руководство администратора 1С не содержит никакой информации по установке, кроме названия необходимых бинарных пакетов, а в сети, среди небольшого количества информации по теме, не было найдено полного руководства, которое бы описывало процесс от начала и до конца, то появилась идея описать все необходимые шаги в одном месте. ОС хозяина имеет архитектуру amd64, а 1С и ключи 32-битные, поэтому ОС в виртуальной машине будет с i386 архитектурой. И так, имеется:
- сервер с Debian GNU/Linux 6 (amd64);
- 2 usb-ключа с лицензиями: один - для сервера, второй - сетевой для клиентов;
- набор *.deb пакетов 1С (i386);
Т.к. статья писалась через какое-то время после установки, а проверять всё заново на боевой машине никакого желания нет, то могут быть не точности и ошибки.
Необходимо распаковать исходники 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
Создаём раздел и файловую систему на диске для БД:
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.
При использовании штатного файла конфигурации производительность оставляет желать лучшего. Далее пример конфигурации для сервера с 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
Подробнее про влияние параметров конфигурации на сайте [http://www.gilev.ru/1c/81/postgresql/index.htm| Вячеслава Гилёва].
Для установки ПО usb-ключей необходимо скачать архив с сайта производителя - aladdin.com. Проверены на совместную работу hasplm 8.30 и aksusbd 1.8.1. После того, как данный архив распакован, можно приступать к установке aksusbd и hasplm.
Для установки драйвера 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
Для установки управляющего лицензиями также надо разместить необходимые файлы в системе:
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С Предприятие необходимо установить нужные 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С создать на сервере кластер, сервер и рабочие процессы.
При возникновении проблем (а также для анализа работы системы) может потребоваться [http://v8.1c.ru/overview/Term_000000322.htm| Технологический Журнал] (далее ТЖ). Для включения ТЖ создаём каталоги /var/log/1c и /var/log/1c/dumps и файл /opt/1C/v8.2/i386/conf/logcfg.xml:
<config ns="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 ns="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
-
Необходимо убедиться, что локаль <span style="font-family: monospace">/usr/lib/locale/en_US.UTF-8</span> и символьные ссылки en_US и en на неё существуют ([\#Установка прочего ПО](#Установка_прочего_ПО));
-
Странно, но так бывает, что в какой-то версии конфигурации забывают положить все необходимые функции. Надо выбрать предыдущую версию или более раннюю, где данной ошибки не возникает, и установить её; после чего обновить её до последней.