Как стать автором
Обновить

Ubuntu Server 10.04 LTS i386, PostgreSQL + 1C patch, 1c server + web-интерфейс: сборка, установка, настройка

Время на прочтение 11 мин
Количество просмотров 6K
Не знаю, нужно ли это будет кому-нибудь.


Судя по реакции на habrahabr.ru/blogs/linux/107321 — это нужно.

UPD 1 Start


Из материалов комментариев внизу, спасибо OldFornit

1. texlive-binaries — вполне вероятно, что необходимости в установке этого пакета нет.

2. «Да, платформа для Linux работает не всегда стабильно, часто возникает «падение» сервера, версии разные толком никто ничего не пишет.
Причина то известна — фрагментация памяти. Замечательно помогает ограничение времени жизни одного рабочего процесса/ограничение памяти на один рабочий процесс (в районе 1.6G). Внезапно! Рабочих процессов может быть (и должно быть) больше одного.»

3. «Да, и без описания тюнинга постгреса или хотя бы отсылки на любую статью по этому вопросу — смысла в настройке данной связки никакого.

wiki.etersoft.ru/PostgreSQL/Optimum?v=148t

Etersoft продают поддержку PostgreSQL.


UPD 1 End


UPD 2 Start


1.
После того, как изменили
kernel.shmmax = 143217728
kernel.shmall = 143217728
Необходимо применить их коммандой:
sysctl -p

2.
Вполне возможно, что потребуется создать
симлинки на
libreadline.so.6

ln -s /lib/libreadline.so.6 /lib/libreadline.so.5

3.
texlive-binaries не нужны, достаточно установить

aptitude install t1utils libt1-5

и ttf2pt1

altruistic.lbl.gov/mirrors/ubuntu/pool/universe/t/ttf2pt1

(взято отсюда pg1c.ru/?page_id=173)


UPD 2 End


Поэтому не судите строго, если кто не любит Ubuntu или 1С или „и то и другое“.

[1] Исходный материал представлен на www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=show_thread&omm=0&om=67768&forum=vsluhforumID3

данная поделка является дополненнием и исправленнием.

[2] Кроме того, использован ряд материалов из сети, в частности openstar.com.ua/blog/установка-1С-linux-postgresql.

Огромное спасибо компании Ailant (http://ailant.com.ru/) которая раскурила все нужные маны и предложила исходную сборку RPM и DEB.

Так же персональный „respect и уважуха“ Игорю Вершинину ( Igor Vershinin ) из того же Ailant.

А так же тому парню, который сделал сборку под i386 по описанию Ailant'a, скорее всего его имя Валерий.

Материал по locale.gen взят из базы знаний 1С.

Приступим пожалуй?

Итак, наша задача установить:
  1. Ubuntu Server 10.04 LTS .
  2. 1C Server.
  3. PostgreSQL сервер, собранный специально под 1С.

Проведем первоначальную настройку.
Загрузим и установим сервер, при установке выберем сразу LAMP и  SAMBA.
Хотя PHP и MySQL нам не нужен, но, мало ли, вдруг мы потом надумаем делать на этой машине ещё и вебсервер.
Первые команды в сервере после установки:
sudo -i
apt-get install mc
apt-get install ntp
apt-get update
apt-get upgrade
apt-get dist-upgrade
echo kernel.shmmax = `echo 128*1024*1024 | bc` >> /etc/sysctl.conf
echo kernel.shmall = `echo 128*1024*1024 | bc` >> /etc/sysctl.conf

Проверяем:
nano /etc/sysctl.conf

В самом конце должно быть:
kernel.shmmax = 143217728
kernel.shmall = 143217728

 Не знаю, надо или нет, просто проследовал рекомендациям в [2], на всякий случай поставил.
apt-get install libxslt1.1 libxml2

 Теперь то, что точно нужно:
echo en_US ISO-8859-1 >> /etc/locale.gen
locale-gen
Generating locales…
ru_RU.UTF-8… done
en_US.ISO-8859-1… done
Generation complete.

Сделаем две символических ссылки, без которых «1С: Предприятие» не сможет работать с СУБД:
ln -s /usr/lib/locale/en_US.utf8 /usr/lib/locale/en_US
ln -s /usr/share/locale/en /usr/share/locale/en_US


 
Теперь установка PostgreSQL
Ещё немного зависимостей:
apt-get install postgresql-common postgresql-client-common libicu42 libossp-uuid16

Далее, собираем PostgreSQL так, как это указано в инструкции OpenNet.
Скачиваем с http://v8.1c.ru/overview/postgres_patches_notes.htm все три патча самых последних версий (там еще RPM лежит, но он нам не подойдет).
Версия 8.4.1
  • 1c_FULL_84-0.19.2.patch -- патч содержит дополнительные модули расширения и необходимые изменения к СУБД,
    добавляющие функциональность, необходимую для работы с сервером 1С: Предприятия 8.1 и 1С: Предприятия 8.2.
  • postgresql-1c-8.4.patch  патч модифицирующий скрипт запуска/останова и конфигурационных файлов PostgreSQL для повышения производительности при работе с сервером 1С: Предприятия 8.1 и 1С: Предприятия 8.2.
  • applock-1c-8.4.1.patch  патч устраняющий проблему блокировок при использовании AUTOVACUUM.

 То, что версия 8.4.1 совсем не страшно, т.к. по информации OpenNet „все минорные исправления не затрагивают того, что патчит фирма 1С.
>> „Переименовываем патчи, добавляя перед названием «20-», «21-» и «22-», т. е. приводим их к виду: 20-1c_FULL_84-0.19.2.patch, 21-postgresql-1c-8.4.patch, 22-applock-1c-8.4.1.patch.“
Создаем папку 1С, если ещё не сделали этого.
Качаем в неё PostgreSQL:
apt-get source postgresql

>> „После скачивания архивы автоматически распакуются, будут наложены специфичные для Ubuntu патчи (что очень хорошо, так как итоговая сборка будет “родной»). Затем копируем наши патчи в каталог "/debian/patches/". Далее нам предстоит исправить три файла, ответственных за правильную сборку пакета. Все три файла содержаться в каталоге «debian»."
Т.е. если все делать по шагам то это будет нечто вроде "/1c/debian/patches".
>> Файл «changelog». Отвечает за правильное наименование пакетов после сборки. Добавляем туда следующие строки в начало файла:
  postgresql-8.4 ([префикс ваш, чтобы версия была выше чем 8, например 18]8.4.4-[как вы хотите назвать сборку]-0ubuntu10.04) lucid; urgency=low
  * Apply 1C patch for PostgreSQL (from 8.4.1 version)
    — add mchar, fulleq, fasttrun
  -- [Имя] [Фамилия] <e-mail>  [дата в правильном формате]
Посмотрите внимательно на этот файл и Вы поймете, что сначала идет полное имя сборки, потом, после звездочки что именно изменяется, потом описание, более подробное, потом кто конкретно коммитил патчами и что было сделано.
Таким образом версия наша будет [цифра, которую вы вписали вначале, например]: 18.4.4, чтобы в дальнейшем она самостоятельно не обновилась при апдейте системы.
Если будут выходить новые версии, то всегда можно сделать то же самое пересобрав PostgreSQL.
Да, сейчас вышла 9 версия, хорошо, что она пока не «скачивается автоматом» для Ubuntu 10.04 LTS, т.к. о её совместимости пока толком ничего сказать нельзя.
>> Следующий файл «control».
Необходимо добавить зависимость от библиотеки «libicu42» (требуется для патча от «1С»).
В секции «Build-Depends» (в начале файла) в конце списка добавляем ", libicu-dev".
Целиком строка будет выглядеть вот так:

 
bison, flex, docbook-utils, openjade, docbook, libicu-dev

 
И последний файл «postgresql-contrib-8.4.install». В него необходимо добавить строки с именами 1С-овских модулей: mchar, fulleq и fasttrun. После строк:
usr/lib/postgresql/8.4/lib/pg_stat_statements.so
usr/lib/postgresql/8.4/lib/citext.so
usr/lib/postgresql/8.4/lib/btree_gin.so

надо добавить:
usr/lib/postgresql/8.4/lib/mchar.so
usr/lib/postgresql/8.4/lib/fulleq.so
usr/lib/postgresql/8.4/lib/fasttrun.so

Но это не все.
>> Т.к. мы собираем на 32-bit компьютере i386, нам необходимо прописать правильные «обработки дат».
Это указывается в файле /debian/rules, фактически это обычный make-файл, указывающий порядок сборки.
В нем есть в строке 31 опция "--enable-integer-datetimes", ее надо заменить на "--disable-..."

Теперь нужно поправить сам патч от 1С, тот файл, который больше всего по размеру, т.к.
>> Вышло обновление патча 0.19.3 от 1С с небольшим инзменением, вместо строки 2118:
    +LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;
используется она же с одним измененным словом, а именно так:
    +LANGUAGE C RETURNS NULL ON NULL INPUT VOLATILE;

Вот теперь "операцию по адаптации можно считать законченой".
Компилируем как указано в статье, через «pbuilder» (>> «Более подробно об этом можно почитать в https://wiki.ubuntu.com/PbuilderHowto»).
Для этого ставим, собственно, его и ещё одну нужную либу.
apt-get install pbuilder cdbs

Создаем сборочный стенд:
pbuilder create

Обновляем сборочный стенд (желательно каждый раз перед компиляцией):
pbuilder update

Переходим в каталог, где лежат наши исходники PostgreSQL и «говорим»:
pdebuild

>> Сборка началась. В первый раз по зависимостям будет вытянуто около 500 мегабайт, надо быть к этому готовым. Либо собирать на unlim-канале (дома, например). В дальнейшем пакеты кешируются. У нас используется пакет apt-proxy, который также умеет это делать. Для предприятий, где работает не один сервер, очень рекомендую.
Сборка проходит ровно и спокойно. По окончанию в каталоге "/var/cache/pbuilder/result" будут лежать собранные пакеты.
Все так и есть.
Берем полученые пакеты куда-нибудь из /var.
Под root (sudo -i) делаем установку.
И, собственно, установка PostgreSQL, последовательность имеет значение, если использовать кнопку TAB для автодополнения то набрать эти длинные имена очень просто:
dpkg -i libpq5_[имя вашей сборки, у меня вышло 8.4_8.4.5]-0ubuntu10.04_i386.deb
dpkg -i libpgtypes3_[имя вашей сборки, у меня вышло 8.4_8.4.5]-0ubuntu10.04_i386.deb
dpkg -i postgresql-client-[имя вашей сборки, у меня вышло 8.4_8.4.5]-0ubuntu10.04_i386.deb
dpkg -i postgresql-8.4_[имя вашей сборки, у меня вышло 8.4_8.4.5]-0ubuntu10.04_i386.deb
dpkg -i postgresql-contrib-8.4_[имя вашей сборки, у меня вышло 8.4_8.4.5]-0ubuntu10.04_i386.deb

Всё, PostgreSQL установлен, запущен он был на четвертом пакете.

Проверяем просто:
ps aux | grep post

Проверим, чтобы PostgreSQL всегда запускался после перезагрузки:

update-rc.d postgresql-8.4 defaults

У меня написало
System start/stop links for /etc/init.d/postgresql-8.4 already exist.

 Проверяем что PostgreSQL встал «как надо», смотрим существует ли:
/etc/postgresql/8.4/main/pg_hba.conf

Заодно поправим pg_hba.conf, так, чтобы PostgreSQL был легко «виден по сети».
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# local   all         all                               ident sameuser # БЫЛО
local   all         all                               trust # СТАЛО
#host    all         all         0.0.0.0/0             md5 # БЫЛО
host    all         all         0.0.0.0/0             trust # СТАЛО

С точки зрения безопасности это, конечно, неверно, зато — работает.
Теперь поправим пароль на PostgreSQL, ведь мы его пока не знаем?
sudo passwd postgres

Это, конечно, не задаст пароль на базу, но задаст пароль на СУБД, по сети мы его увидим.
 
Теперь, собственно, установка 1С.
Первоначальная подготовка включает в себя:
apt-get install imagemagick msttcorefonts libgsf-1-114 texlive-binaries 

Качаем 1С с сайта users.v8.1c.ru, конечно, это касается тех, у кого есть туда доступ.
Можно попытаться поискать на дисках ИТС или в сети...
Далее все вполне стандартно и банально, последовательно ставим:
1c-enterprise82-common_8.2.12-92_i386.deb
1c-enterprise82-common-nls_8.2.12-92_i386.deb
1c-enterprise82-server_8.2.12-92_i386.deb
1c-enterprise82-server-nls_8.2.12-92_i386.deb
1c-enterprise82-ws_8.2.12-92_i386.deb
1c-enterprise82-ws-nls_8.2.12-92_i386.deb
1c-enterprise82-crs_8.2.12-92_i386.deb
1c-enterprise82-crs-nls_8.2.12-92_i386.deb

Проверяем, что всё нормально, что всё установилось:
/opt/1c/v8.2/i386/utils/config_server

Должен отработать, не выдав никаких сообщений.
Если всё-таки что-то выдает, значит, следуем инструкции, он ругается на то, что ему не хватает.
>> Обычно она указывает не на название пакетов, а на недостающие файлы. Узнать в каком они пакете можно через «apt-file search».

Делаем возможность запуска после перезагрузки и запускаем:

update-rc.d srv1cv82 defaults
service srv1cv82 start
ps aux | grep 1c 

От имени пользователя «usr1cv82» должно быть запущено три процесса. Если процесса не три, а один (такое почему-то иногда бывает, но только при первоначальном запуске), то грохаем всё в каталоге /home/usr1cv82:

service srv1cv82 stop
грохаем
service srv1cv82 start

Перезагружаемся и проверяем, что все работает:
ps aux | grep apache
ps aux | grep post
ps aux | grep 1c 

 
Теперь разберемся с web сервисом:
Обычно, каждое клиентское подключение хочет ключик, это же касается и web-сервиса, каждый web-клиент забирает 1 «свободную лицензию».
Заморачиваться с установкой HASP LM даже под Ubuntu у меня не было никакого желания, т.к. на сайте Alladin только TAR.
Я пошел в обход. С Windows компьютера, на котором установлена платформа 8.2 берется файл:
C:\Program Files\1cv82\conf\nethasp.ini

Фийл располагается в
/opt/1c/v8.2/i386/conf/nethasp.ini

В файле правятся
;;NH_TCPIP = Enabled or Disabled ; Use the TCP/IP protocol

на
NH_TCPIP = Enabled; Use the TCP/IP protocol

это примерно 24 строка.
 
И 110 строка
;;NH_SERVER_ADDR = <Addr1>, <Addr2>  ; IP addresses of all the NetHASP

на
NH_SERVER_ADDR = IP компьютера, на котором установлен HASP LM

После этого web сервис начнет видеть лицензии.
 
Теперь сам web.
Я создал папку "/1c/web/".
Положил в неё файл default.vrd следующего содержания:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
  3.         xmlns:xs="http://www.w3.org/2001/XMLSchema"
  4.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.         base="/unf"
  6.         ib="Srvr=&quot;[имя сервера]&quot;;Ref=&quot;[имя БД сервера]quot;;">
  7.     <ws enable="false"/>
  8. </point>
* This source code was highlighted with Source Code Highlighter.


 В девственно пустой /etc/apache2/httpd.conf добавилась строка:
LoadModule _1cws_module "/opt/1C/v8.2/i386/wsap22.so"

А в /etc/apache-2/sites-enabled/000-default
  1.     Alias /1с "/1c/web"
  2.     <Directory "/1c/web/">
  3.         AllowOverride None
  4.         Options None
  5.         Order allow,deny
  6.         Allow from all
  7.         SetHandler 1c-application
  8.         ManagedApplicationDescriptor "/1c/web/default.vrd"
  9.     </Directory>
* This source code was highlighted with Source Code Highlighter.


Важно, чтобы и apache и 1С имели доступ к папке "/1c/web/".
Я поступил топорно:
chmod 777 -R /1c

Т.к. задолго перед этим уже успел «убить» безопасность вещью типа:
[share]
   comment = All Share
   browseable = yes
   path = /1c/share
   guest ok = yes
   read only = no
   create mask = 0777
   directory mask = 0777

В /etc/samba/smb.conf.
Да, платформа для Linux работает не всегда стабильно, часто возникает «падение» сервера, версии разные толком никто ничего не пишет.
Для того, чтобы этого избежать применяем типичный костыль:
  1. Берём скрипт стартера 1С (для тех, кто в танке: "/etc/init.d/srv1cv82"), копируем куда-нибудь в свою папочку (у меня "/1c/script").
  2. Правим его как нам угодно, желательно вывести сообщения в лог, методом проб и ошибок разберетесь...
  3. Вешаем на crontab (man crontab) под root (sudo -i) (можно просто повесить service srv1cv82 start, про start не забываем!)
    crontab -e
    */5 * * * * service srv1cv82 start

Если кого-то интересуют «плоские» базы 8.2 в http-Intranet то  для них нужно:
  1. Полная шара типа описанной выше, это для конфигурирования.
  2. Соответственно, сама конфигурация в этой шаре.
  3. Сами настройки Apache не меняются, меняется default.vrd:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
  3.         xmlns:xs="http://www.w3.org/2001/XMLSchema"
  4.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.         base="/new"
  6.         ib="File=&quot;[путь до шары типа /1c/baza]&quot;;">
  7.     <ws enable="false"/>
  8. </point>
* This source code was highlighted with Source Code Highlighter.

 
На этом, вроде как, все.
 
И, на всякий случай:
  1. Монтирование доступных ресурсов Windows выполняется так:  sudo smbmount \\\\[имя компьютера]\\[имя ресурса] /mnt -o username=[username],password=[password],[rw?],iocharset=utf8
  2. /etc/network/interfaces:
    iface eth0 inet static
            address 192.168.XXX.XXX
            netmask 255.255.255.0
            gateway 192.168.XXX.XXX
    а так же смотрим чтобы в /etc/resolv.conf было «все ОК»
  3. Не забываем про /etc/.wgetrc, /etc/apt/apt.conf, /etc/environment если у нас proxy, правим https_proxy http_proxy и ftp_proxy  по формату = http://[user]:[pass]@[IP:port]
  4. Не забываем, что для Samba Share тоже нужно давать chmod
  5. Не забываем, что строго говоря, apache ничего не знает об /opt, вполне может быть что тоже нужно давать chmod


Замечу, что все в консоли: используем простую истину, что «GUI для слабых духом», а машинка у нас на виртуалке :).

Теперь точно всё.
Теги:
Хабы:
+14
Комментарии 14
Комментарии Комментарии 14

Публикации

Истории

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн