26.10.10

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

  Создание сервер 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 и загружаем свой конфигурацию! На этом пока все.

Популярные сообщения