Сервер 1С:Предприятие на калькогенте

Часть первая.
Устанавливаем из свежих ночнушек CSS
При установке желательно выбрать “говорящий” hostname, например css1c
Его надо будет прописать в файле /etc/hosts
192.168.30.100 css1c
указав реальный IP адрес этого сервера.
На клиентах по имени css1c должен ресолвиться сервер.
На них тоже прописываем это же в файл hosts.
Сделаем кое-какие подготовительные действия
!! В основном все действия делаем от рута и sudo я опускаю.
Разрешим установку 32х-битных либ, по дефолту запрещенных на серверной кальке
sed -i ‘s/ -abi_x86_32//’ /var/db/repos/calculate/profiles/default/server/make.defaults
cp /var/db/repos/calculate/profiles/default/server/make.defaults /var/db/repos/calculate/profiles/default/server/make.defaults.clt
не уверен, что в этой папке уместен clt, но вродб сработало
Определяем нужный минимум пакетов и кое-какие настройки для них
Приведу свои файлы из /etc/portage
/etc/portage/sets/custom

app-misc/mc
net-fs/samba
net-fs/cifs-utils
sys-devel/binutils
sys-libs/binutils-libs
sys-libs/glibc
app-arch/unzip
app-arch/p7zip
dev-libs/jansson
app-admin/syslog-ng
sys-process/cronie
app-arch/rpm
app-arch/rpm2targz

==
/etc/portage/package.use/custom

sys-kernel/calculate-sources -minimal -vmlinuz
virtual/libintl abi_x86_32
sys-apps/util-linux abi_x86_32
dev-libs/libpcre2 abi_x86_32
sys-fs/eudev abi_x86_32
#sys-libs/libsepol abi_x86_32
#sys-libs/libselinux abi_x86_32
dev-libs/libusb abi_x86_32
virtual/libusb abi_x86_32

==

# Маскируем обновление ядра, на случай несовместимости модулей с новым
`echo ">sys-kernel/calculate-sources-5.10.32" > /etc/portage/package.mask/custom`

==

После этих изменений обновляемся
cl-update

============================
Установка 1С сервера
Скачиваем кто-где может rpm-ы для 1С сервера
например непосредственно у 1С, если есть доступ

mkdir /home/41c/srpms
В папку /home/41c/srpms помещаем rpm для 1С сервера
в моем случае платформа 8.3.17-1851 и файлы такие
1C_Enterprise83-server-8.3.17-1851.x86_64.rpm
1C_Enterprise83-common-8.3.17-1851.x86_64.rpm
1C_Enterprise83-ws-8.3.17-1851.x86_64.rpm
1C_Enterprise83-crs-8.3.17-1851.x86_64.rpm
1C_Enterprise83-ws-nls-8.3.17-1851.x86_64.rpm
1C_Enterprise83-common-nls-8.3.17-1851.x86_64.rpm
1C_Enterprise83-server-nls-8.3.17-1851.x86_64.rpm
заходим в папку
cd /home/41c/srpms
и устанавливаем (от рута)
rpm -Uvh --nodeps *.rpm
можно по одному rpm устанавливать
Проверка:

  • создалась папка /opt/1C со всеми файлами 1С
  • создан юзер/группа usr1cv8/grp1cv8
  • создана ему домашняя папка /home/usr1cv8
  • в /etc/init.d/ создан скрипт srv1cv83

Не забываем проверить файл /etc/hosts

Крестимся и запускаем
/etc/init.d/srv1cv83 start
смотрим
/etc/init.d/srv1cv83 status
если
1C:Enterprise 8.3 server status:
Init script: STARTED.
     Ragent: RUNNING.
то сервер создан.
Добавим в автостарт
rc-update add srv1cv83

=====================

Переходим к postgres

Будем ставить postgresql-12.6-1.1C
Скачиваем 1С комлект для установки postgres с патчем для 1С
Как правило это zip файл, внутри которого есть то, что надо
Нам понадобится из него
postgresql-12_12.6.orig.tar.bz2 - исходники
00001-1C-FULL.patch - патч
Для 12.6.1 они в Patch_SUBD_PostgreSQL_12.6_1.1C.tar.bz2
Делаем папку
mkdir /home/41c/pg12
Распаковываем туда исходникм и добавляем файл 00001-1C-FULL.patch
Должна получиться такая структура
/…
/config
/contrib
/doc
/src
.dir-locals.el
.gitattributes
.gitignore
*00001-1C-FULL.patch
COPYRIGHT
GNUmakefile.in
HISTORY
INSTALL
Makefile
README
aclocal.m4
*configure
configure.in
configure.in

Идем в эту папку и от рута выполняем

cd /home/41c/pg12
patch -p1 <00001-1C-FULL.patch
После применения патча папке contrib должны появиться подпапки
fulleq
mchar
online_analyze
plantuner
Эти подпапки должны присутствовать. Без них 1С-ка не примет постгрю.

./configure

В configure можно задать префикс
по дефолту все будет ставиться в /usr/local/pgsql
если configure прошло без ошибок, выполняем
make
make install
cd contrib
make all
make install

Конечно каждый следующий шаг делаем, если предыдущий прошел без ошибок.
Не лишне перед установкой почитать INSTALL, а также contrib/README
Нет ошибок - postgres установлен!!
Готовим запуск.

useradd postgres
mkdir /var/calculate/pg12/data здесь будут базы постгрес
Я выбрал в /var/calculate/, чтобы не “кушать” на диске корневой раздел
Можно выбрать и другое место, но нужно запомнить для инициализации базы и запуска постгреса.

chown -R postgres /var/calculate/pg12

su - postgres

инициализация базы

/usr/local/pgsql/bin/initdb -D /var/calculate/pg12/data

и наконец старт

/usr/local/pgsql/bin/pg_ctl -D /var/calculate/pg12/data -l /var/calculate/pg12/pgsql.log start
и ждем
waiting for server to start… done
server started
Сервер запущен.
Установим пароль для юзера postgres
/usr/local/pgsql/bin/psql
postgres@css1c~$
ALTER USER postgres with PASSWORD ‘postgres’;
\q
Остановим сервер
/usr/local/pgsql/bin/pg_ctl -D /var/calculate/pg12/data -l /var/calculate/pg12/pgsql.log stop

Можно выйти из под юзера postgres
exit

В папке contrib/start-script исходников есть файлик linux
Скопируем его в /etc/init.d/
Переименуем, например в /etc/init.d/pgsql12
Внутри файла правим строку

Data directory

PGDATA="/usr/local/pgsql/data"
в соответствии с назначенной для баз папкой

Data directory

#PGDATA="/usr/local/pgsql/data"
PGDATA="/var/calculate/pg12/data"

и делаем файл исполняемым.
Теперь запуск
/etc/init.d/pgsql12 start
Добавим в авто старт
rc-update add pgsql12

Делаем несколько полезных линков
ln -s /usr/local/pgsql/bin/psql /usr/bin/psql
ln -s /opt/1C/v8.3/x86_64/ras /usr/bin/ras
ln -s /opt/1C/v8.3/x86_64/rac /usr/bin/rac

Для проверки перегружаемся и смотрим стартовали ли сервисы.
Если стартуют-хорошо. у меня не стартовали оба((
Пока не понял почему.
Выход:
Удаляем сервисы из автостарта
rc-update del pgsql12
rc-update del srv1cv83
в папке /etc/local.d/ создакм скрипт srv1s.start с содержимым

#!/bin/bash
/etc/init.d/pgsql12 start
/etc/init.d/srv1cv83 start

==
делаем его исполняемым.
Костыль, но сервисы стартуют.

======
Несколько полезных скриптов
Можно, к примеру, сохдать в папке /home/any/41c/bin

Скрипт goras запус демона связи ras с 1С
остальные скрипты работают после запуска демона ras

#!/bin/bash
/opt/1C/v8.3/x86_64/ras --daemon cluster
#/opt/1C/v8.3/x86_64/ras cluster>/dev/nul &

==
lsclusters список кластеров
запускается первым и формируеи имя кластера в файле clid
используемым другими скриптами

#!/bin/bash
rcl=/opt/1C/v8.3/x86_64/rac
CLASTID=`$rcl  cluster list | grep "cluster                       :"`
clid="${CLASTID: -36}"
echo "clastid=$clid">clid
echo "$clid"

==
list1c Список баз 1С

#!/bin/bash
. clid
rcl=/opt/1C/v8.3/x86_64/rac
$rcl infobase summary list --cluster=$clastid |grep -f idnm

==
Вспомогательный файл формата вывода idnm для list1c

infobase :
name     :

==
new1cdb Создание базы 1с

#!/bin/bash
. clid
rcl=/opt/1C/v8.3/x86_64/rac
if [ ! $1 ] 
then
  echo "Создание информационой базы 1С"
  echo "Usage: $0 ИмяИнфоБазы ИмяPGбазы "
  echo "ИмяPGбазы можно опустить, тогда ИмяPGбазы=ИмяИнфоБазы"
else
  if [ ! $2 ] 
  then
    dbname=$1
  else
    dbname=$2
  fi
  $rcl infobase --cluster=$clastid create --create-database --name=$1 --dbms=PostgreSQL --db-server=css1c --db-name=$dbname --locale=ru --db-user=postgres --db-pwd="postgres" --scheduled-jobs-deny=on
fi

==
Скрипт del1cdb улаление базы 1С

#!/bin/bash
. clid
rcl=/opt/1C/v8.3/x86_64/rac
if [ ! $1 ] 
then
  echo "Удаление информационой базы 1С"
  echo "Usage: $0 UUID ИнфоБазы  "
  echo "Список UUID-ов можно получить скриптом list1c  "
else
  $rcl infobase --cluster=$clastid drop --infobase=$1 --drop-database
#  без удаления базы постгрес
#  $rcl infobase --cluster=$clastid drop --infobase=$1
#  echo "Удали $1 из Postgres, если нужно"
fi
#Параметр --drop-database
#   при удалении информационной базы удалить базу данных

==
info1cbase вывод информации о базе 1с

#!/bin/bash
. clid
rcl=/opt/1C/v8.3/x86_64/rac
if [ ! $1 ] 
then
  echo "Сведения об информационой базе 1С"
  echo "Usage: $0 UUID ИнфоБазы  "
  echo "Список UUID-ов можно получить скриптом list1c  "
else
  $rcl infobase info --cluster=$clastid --infobase=$1
fi

===
infodbsess Сведения о сессиях базы 1С

#!/bin/bash
. clid
rcl=/opt/1C/v8.3/x86_64/rac
if [ ! $1 ] 
then
  echo "Сведения о сессиях базы 1С"
  echo "Usage: $0 UUID ИнфоБазы  "
  echo "Список UUID-ов баз можно получить скриптом list1c  "
else
$rcl session list --cluster=$clastid --infobase=$1
fi

==
killsess Убить сесию 1С

#!/bin/bash
. clid
rcl=/opt/1C/v8.3/x86_64/rac
if [ ! $1 ] 
then
  echo "Убить сесию 1С"
  echo "Usage: $0 UUID сессии  "
  echo "Список UUID-ов можно получить скриптом infodbsess, или list1csessions "
else
$rcl session terminate --cluster=$clastid --session=$1
#--infobase=$1
fi

==
list1csessions список сессий кластера

#!/bin/bash
. clid
rcl=/opt/1C/v8.3/x86_64/rac
$rcl session list --cluster=$clastid

==
restorePGdb Восстановление PostGres-базы из архива bz2

#!/bin/bash
if [ ! $1 ]
then
  echo "Восстановление PG-базы из архива"
  echo "Usage: $0 ИмяБазы"
  echo "база создается и не должна существовать"
  echo "если существет, ее надо предварительно удалить"
  echo "АРХИВ ДЛЯ ВОССТАНОВЛЕНИЯ ИмяБазы.bz2"
  echo "должен присутствовать в текущей папке"
  read -p "Жмакни че-нить..."
else
  psql -U postgres -c "CREATE DATABASE $1;" ; bzip2 -d -c $1.bz2|psql -U postgres -d $1      
fi

==

2 Likes

Некоторые поправки.

Делаем несколько полезных линков

-- ln -s /usr/local/pgsql/bin/psql /usr/bin/psql
++ cd /usr/local/pgsql/bin
++ for i in *;do  ln -sf "/usr/local/pgsql/bin/$i" "/usr/bin/$i" ;done

==
– В папке contrib/start-script исходников есть файлик linux
– Скопируем его в /etc/init.d/
– Переименуем, например в /etc/init.d/pgsql12
Скрипт для init.d в приложении
pgsql12 (1.1 KB)

Полезно. Давно делал но по другому, потом забросил на кальке. ставлю на debian. Проблем меньше с сервером.