Яндекс.Метрика

    Ни о чём

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

    Не знаю, нужно ли это будет кому-нибудь.

    Судя по реакции на 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 для слабых духом», а машинка у нас на виртуалке :).

    Теперь точно всё.