published: July 8, 2019, 5:44 p.m.

  Создание сервер 1C предприятия на базе CentOS, имеет некоторые нюансы. Не учтенные они могут в последствии вызвать некоторые проблемы. Изначально я устанавливал те пакеты которые предлагают сами 1c, но в процессе использования понял, что данные пакеты собраны очень криво и не будут работать адекватно. Поэтому последние версии я собирал сам, но и тут скрывалось пару подводных камней. Например сборка по x86_64 вызвала непонятные сбои в базе данных на поиск причины которых я потратил не мало времени. Поэтому я использовал 32-битную CentOS.

  Итак скачиваем дистрибутив и устанавливаем его на наш сервер. После установки следует скачать SRPM Postgresql с сайта 1С отсюда, берем версию 8.3.8 как самую стабильную сборку 1С на данный момент. Так же нам понадобится библиотека icu, скачать можно с официального сайта. Нам нужна версия 3.4 находится она здесь, скачайте сжатый архив исходников для LInux:

 #wget ftp://ftp.software.ibm.com/software/globalization/icu/3.4.1/icu-3.4.1.tgz

  На свежеустановленной системе инсталлируем все что нужно для сборки пакетов для системы:

#yum install rpm-build glibc-devel bison flex python-devel tcl-devel readline-devel zlib-devel pam-devel gcc doxygen gcc-c++

  В самом начале создаем непривилигерованного пользователя от имени которого мы будем производить сборку пакетов.

#useradd  builduser

#passwd builduser

Теперь создадим дерево каталогов для сборки пакетов, в Fedora это делается одной командой, здесь придется выполнить две :)

#mkdir -p ~/rpmbuild/{BUILD,RPMS,S{OURCE,PEC,RPM}S}

#echo "%_topdir $HOME/rpmbuild" > ~/.rpmmacros

  Ну вот все приготовительные действия закончены, начнем сборку пакетов. Во первых соберем libicu который требуется для 1c предприятия, для этого помещаем скачанный архив icu-3.4.1.tgz в каталог сборочного дерева для исходных кодов:

#cp icu-3.4.1.tgz ~/rpmbuild/SOURCES/

  Нам понадобится spec файл для сборки пакета, я брал его из более поздней версии исходных кодов, привожу его здесь полностью:

Name:            icu

Version:        3.4.1

Release:        3.1

Summary:        International Components for Unicode

 

Group:          Applications/Text

License:        X License

URL:            http://www.ibm.com/software/globalization/icu/

Source0:        ftp://ftp.software.ibm.com/software/globalization/icu/%{version}/%{name}-%{version}.tgz

BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

 

BuildRequires:  doxygen

 

%description

The International Components for Unicode (ICU) libraries provide

robust and full-featured Unicode services on a wide variety of

platforms.

 

%package     -n lib%{name}

Summary:        International Components for Unicode - libraries

Group:          System Environment/Libraries

 

%description -n lib%{name}

%{summary}.

 

%package     -n lib%{name}-devel

Summary:        Development files for International Components for Unicode

Group:          Development/Libraries

Requires:       lib%{name} = %{version}-%{release}

 

%description -n lib%{name}-devel

%{summary}.

 

%package     -n lib%{name}-doc

Summary:        Documentation for International Components for Unicode

Group:          Documentation

 

%description -n lib%{name}-doc

%{summary}.

 

 

%prep

%setup -q -n %{name}

 

%build

cd source

export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"

%configure --enable-static --with-data-packaging=library --disable-samples

make # %{?_smp_mflags} # -j(X>1) may "break" man pages as of 3.2, b.f.u #2357

make doc

 

 

%install

rm -rf $RPM_BUILD_ROOT source/__docs

make -C source install DESTDIR=$RPM_BUILD_ROOT

make -C source install-doc docdir=__docs

chmod +x $RPM_BUILD_ROOT%{_libdir}/*.so.*

 

 

%check || :

make -C source check

 

 

%clean

rm -rf $RPM_BUILD_ROOT

 

 

%post -n lib%{name} -p /sbin/ldconfig

 

%postun -n lib%{name} -p /sbin/ldconfig

 

 

%files

%defattr(-,root,root,-)

%doc license.html readme.html

%{_bindir}/derb

%{_bindir}/genbrk

%{_bindir}/gencnval

%{_bindir}/genrb

%{_bindir}/makeconv

%{_bindir}/pkgdata

%{_bindir}/uconv

%{_sbindir}/*

%{_mandir}/man1/derb.1*

%{_mandir}/man1/gencnval.1*

%{_mandir}/man1/genrb.1*

%{_mandir}/man1/makeconv.1*

%{_mandir}/man1/pkgdata.1*

%{_mandir}/man1/uconv.1*

%{_mandir}/man8/*.8*

 

%files -n lib%{name}

%defattr(-,root,root,-)

%{_libdir}/*.so.*

 

%files -n lib%{name}-devel

%defattr(-,root,root,-)

%{_bindir}/%{name}-config

%{_mandir}/man1/%{name}-config.1*

%{_includedir}/layout

%{_includedir}/unicode

%{_libdir}/*.a

%{_libdir}/*.so

%{_libdir}/%{name}

%dir %{_datadir}/%{name}

%dir %{_datadir}/%{name}/%{version}

%{_datadir}/%{name}/%{version}/mkinstalldirs

%{_datadir}/%{name}/%{version}/config

%doc %{_datadir}/%{name}/%{version}/license.html

 

%files -n lib%{name}-doc

%defattr(-,root,root,-)

%doc source/__docs/%{name}/html/*

 

 В SPEC для icu я исправил под более старую версию пакета некоторые параметры.

 Итак создаем данный spec файл в каталоге ~/rpmbuild/SPECS/:

#vi ~/rpmbuild/SPECS/icu.spec

 И проводим сборку пакета от непривилегированного пользователя builduser:

#rpm -bb  ~/rpmbuild/SPECS/icu.spec

 Если все хорошо, устанавливаем собранные пакеты, командой от root:

#rpm -ihv /home/builduser/rpmbuild/RPMS/i386/libicu-devel-3.4.1-3.1.i386.rpm  /home/builduser/rpmbuild/RPMS/i386/libicu-3.4.1-3.1.i386.rpm

 Теперь от пользователя builduser скачиваем postgresql:

#wget http://v8.1c.ru/overview/postgresql_patches/8-3-8/postgresql-8.3.8-1.1C.src.rpm

 Устанавливаем его в дерево каталогов, запустив от пользователя builduser команду:

#rpm -ihv postgresql-8.3.8-1.1C.src.rpm

 Немного исправим spec файл для postgresql от 1С, который после установки SRPM должен находится в каталоге SPECS, , в нем следует найти такие строки:

cp %{local_libdir}/libicuuc.so.34 %{buildroot}/%{_libdir}/pgsql

cp %{local_libdir}/libicui18n.so.34 %{buildroot}/%{_libdir}/pgsql

cp %{local_libdir}/libicudata.so.34 %{buildroot}/%{_libdir}/pgsql

 И исправить их на такие:

cp %{_libdir}/libicuuc.so.34 %{buildroot}/%{_libdir}/pgsql

cp %{_libdir}/libicui18n.so.34 %{buildroot}/%{_libdir}/pgsql

cp %{_libdir}/libicudata.so.34 %{buildroot}/%{_libdir}/pgsql

 Возможно вы захотите что бы postgres использовал библиотеку libicu от самих 1C, тогда вам придется установить сначала сам сервер 1C, о чем я написал ниже, и в SPEC файле указать пути до библитек из сборки 1С:

 

cp /opt/1C/v8.1/i386/libicuuc.so.34 %{buildroot}/%{_libdir}/pgsql

cp /opt/1C/v8.1/i386/libicui18n.so.34 %{buildroot}/%{_libdir}/pgsql

cp /opt/1C/v8.1/i386/libicudata.so.34 %{buildroot}/%{_libdir}/pgsql

 

 И запускаем сборку:

#rpmbuild -bb ~/rpmbuild/SPECS/postgresql-8.3.1C.spec

 Если сборка завершилась удачно, в сборочном дереве, в каталоге RPMS мы получим наши rpm файлы для установки. Устанавливать их следует командой:

#rpm -ihv /home/builduser/rpmbuild/RPMS/i386/postgresql-*

 После установки нужно изменить файл профиля для пользователя postgres который создается при установке postgresq, точнее следует указать какую локаль следует использовать серверу Postgresq, для этого открываем файл /var/lib/pgsql/.bash_profile и добавляем следующие строчки:

 

LANG=ru_RU.UTF-8

export LANG

 Кстати там я заметил переменную PGDATA которая казалось бы должна определять где будет лежать база данных, но она не работает. Такая же переменная существует в скрипте запуска сервера, думаю что если поменять ее значение в обоих местах то можно добиться что бы база лежала в нужном месте, я не стал заморачиватся так как все равно делаю бекапы на другой компьютер в сети. Итак после того как переменная будет записана делаем инициализацию базы данных:

#service postgres initdb

 Теперь поправим конфигурационный файл что бы можно было заходить локально без пароля, что бы этот самый пароль установить. Открываем файл /var/lib/pgsql/data/pg_hba.conf и изменяем там строчку:

host    all         all         127.0.0.1/32          md5

на:

host    all         all         127.0.0.1/32          trust

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

#service postgres start

и войти в систему под пользователем postgres:

 

#psql -h 127.0.0.1 -U postgres

И поменять пароль доступа для пользователя postgres:

 

>ALTER USER postgres PASSWORD 'password';

 Теперь вновь открываем конфиг /var/lib/pgsql/data/pg_hba.conf и меняем там в строчке:

host    all         all         127.0.0.1/32          trust

 Слово trust на md5.

 Сделаем перезагрузку сервера:

 #service postgres reload

 Теперь с postgresql законченно. Следующий шаг установка самого сервера 1C. Скачайте ваш дистрибутив с сайта 1C, напрмиер в домашнюю директорию и установите его командой:

#rpm -ihv ~/1C_Enterprise-*

 Следует скачать драйвера от аппаратного ключа и сервер лицензия для него же, взять их можно отсюда: aksusdb и hasplm.

 Скачиваем и распаковываем их. Втыкаем ключи. Файлы hasplm-redhat-8.30-1.i386.rpm и aksusbd-redhat-1.8.1-3.i386.rpm копируем на сервер и ставим командой:

#rpm -ihv hasplm-redhat-8.30-1.i386.rpm aksusbd-redhat-1.8.1-3.i386.rpm

 Все защита установлена, теперь запускаем сервер предприятий:

#service srv1cv81 start

Если все стартовало нормально, ставим клиент. Я ставил клиента с SMB ресурса с опцией /adm что позволяет обновить все клиенты в сети. Но это не обязательно. Кстати клиент для 1C неплохо работает под wine. Теперь с помощью консоли управления сервером создаем базу данных, как приведено ниже на скриншотах, тока не забудьте поставить данные актуальные для вас ;) :

 

 

 

 

 

Все прошло хорошо? Тогда запускаем клиент указываем существующую базу данных our_base на сервере 1с_server и загружаем свой конфигурацию! На этом пока все.