Книга знаний

1С:Предприятие

Как я прикрутил 1cv81 к openSuSE

Как известно, скрипты 1cv81 и postgresql в init.d написаны с вызовами стандартных скриптов Red hat | Fedora Core. В других версиях linux, например SuSE они работать отказались. Вот как я попытался обойти эту проблему.Автор статьи: moreover | Редакторы:
Последняя редакция №2 от 04.01.07 | История
URL: http://kb.mista.ru/article.php?id=436

Ключевые слова: 1cv81,linux,suse


Итак, имеем:

OpenSuSE 10.2
1C Предприятие 8.1, бета-версия
Контроллер домена w2003server

Хочется, чтоб работало :)

Как настроить репликацию юзеров контроллера домена я писал в Книга знаний: v8: Личный опыт установки сервера 1cv8.1 beta на Fedora Core 5;

Теперь суть в том, чтобы переписать скрипты 1cv81 и postgresql так (они лежат в /etc/init.d), чтобы они заработали на SuSE. Сразу оговорюсь, специалист по linux я небольшой, потому взял скрипт postgresql от стандартного postgresql 8.1. Скрипт запуска предприятия переписал коряво, но, по крайней мере, он запускается и работает :)

Вот скрипт postgresql:

</HR>
#!/bin/sh
# Copyright (c) 1995-2004 SUSE Linux AG, Nuernberg, Germany.
# All rights reserved.
#
# Author: Kurt Garloff
# Please send feedback to http://www.suse.de/feedback/
#
# /etc/init.d/postgresql
#   and its symbolic link
# /(usr/)sbin/rcpostgresql
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# System startup script for PostgreSQL
#
# LSB compatible service control script; see http://www.linuxbase.org/spec/
#
### BEGIN INIT INFO
# Provides:       postgresql
# Required-Start: $network $remote_fs
# Required-Stop:
# Default-Start:  3 5
# Default-Stop:  
# Description:    Start the PostgreSQL master daemon
### END INIT INFO

# Source SuSE config
PG_SYSCONFIG=/etc/sysconfig/postgresql
test -f $PG_SYSCONFIG && . $PG_SYSCONFIG

# Shell functions sourced from /etc/rc.status:
#      rc_check         check and set local and overall rc status
#      rc_status        check and set local and overall rc status
#      rc_status -v     ditto but be verbose in local rc status
#      rc_status -v -r  ditto and clear the local rc status
#      rc_failed        set local and overall rc status to failed
#      rc_reset         clear local rc status (overall remains)
#      rc_exit          exit appropriate to overall rc status
. /etc/rc.status

LOGFILE=/var/log/postgresql
DATADIR=/home/pgbases/
OPTIONS=${POSTGRES_OPTIONS}
H=/usr/bin/postmaster
test -x $H || exit 5
PIDFILE=/home/pgbases/postmaster.pid

if [ -r $DATADIR/PG_VERSION ] ; then
   BIN_VERSION=$($H --version|sed 's/.* \([0-9]\+\.[0-9]\+\).*/\1/')
   DATA_VERSION=$(cat $DATADIR/PG_VERSION)
   if [ "$BIN_VERSION" != "$DATA_VERSION" ]; then
   for libdir in /usr/lib64 /usr/lib; do
       H=$libdir/postgresql/backup/$DATA_VERSION/postmaster
       test -x $H && break
   done
   if test -x $H; then
       export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$libdir/postgresql/backup"
       echo " Your databases are still using the format of PostgreSQL $DATA_VERSION."
       echo " Therefore a backup of the old PostgreSQL server program will be used"
       echo " until you have saved and removed your old database files"
       echo " See also /usr/share/doc/packages/postgresql/README.SuSE.{de,en} ."
   else
       echo " Your databases are still using the format of PostgreSQL $DATA_VERSION,"
       echo " but no backup of the old PostgreSQL server program was found."
       echo " See /usr/share/doc/packages/postgresql/README.SuSE.{en,de}"
       echo " for details on updating PostgeSQL."
       exit 5
   fi
   fi
fi

# The echo return value for success (defined in /etc/rc.config).
rc_reset

# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.

pg_ctl () {
   CMD="/usr/bin/pg_ctl $@"
   su - postgres -c "LD_LIBRARY_PATH=$LD_LIBRARY_PATH $CMD"
}

case "$1" in
   start)
   touch $LOGFILE
   chown postgres:postgres $LOGFILE
   chmod 0600 $LOGFILE
   if [ ! -f $DATADIR/PG_VERSION ]; then
       echo -n "Initializing the PostgreSQL database at location ${DATADIR}"
       LANG_SYSCONFIG=/etc/sysconfig/language
       test -f "$LANG_SYSCONFIG" && . $LANG_SYSCONFIG
       LANG=${POSTGRES_LANG:-$RC_LANG}
       INITDB=/usr/bin/initdb
       install -d -o postgres -g postgres -m 700 ${DATADIR} && su - postgres -c \
       "$INITDB --locale=$LANG --auth=\"ident sameuser\" $DATADIR &> initlog" ||
       rc_failed
       rc_status -v
       rc_status || {
       echo "You can find a log of the initialisation in ~postgres/initlog ."
       rc_exit
      }
   fi
   echo -n "Starting PostgreSQL"
       ## remove old socket, if it exists and no daemon is running.
   checkproc -p $PIDFILE $H || {
       rm -f /tmp/.s.PGSQL.5432 $PIDFILE
   }

   ## Start daemon with startproc(8). If this fails
   ## the echo return value is set appropriate.
   #/sbin/startproc -e -t 1 -u postgres -l $LOGFILE $H $OPTIONS -D$DATADIR
   pg_ctl start -s -w -p $H -D $DATADIR -o "\"$OPTIONS\""
   rc_status -v
   ;;

   stop)
   echo -n "Shutting down PostgreSQL"
   ## Stop daemon with killproc(8) and if this fails
   ## set the echo return value.

   pg_ctl stop -s -D $DATADIR -m fast
   rc_status -v
   ;;

   try-restart)
       ## Stop the service and if this succeeds (i.e. the
       ## service was running before), start it again.
       ## Note: try-restart is not (yet) part of LSB (as of 0.7.5)
   $0 status && $0 restart
   ;;

   restart)
       ## Stop the service and regardless of whether it was
       ## running or not, start it again.
       $0 stop
       $0 start
   rc_status
   ;;

   force-reload | reload)
   echo -n "Reloading configuration for PostgreSQL"
   pg_ctl reload -s -D $DATADIR
       rc_status -v
   ;;

   status)
   echo -n "Checking for PostgreSQL: "
       ## Check status with checkproc(8), if process is running
       ## checkproc will return with exit status 0.

       # Status has a slightly different for the status command:
       # 0 - service running
       # 1 - service dead, but /var/run/  pid  file exists
       # 2 - service dead, but /var/lock/ lock file exists
       # 3 - service not running

       # NOTE: checkproc returns LSB compliant status values.
       checkproc -p $PIDFILE $H
       rc_status -v
   ;;
   
   probe)
       rc_failed 3
       rc_status -v
   ;;

   *)
       echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
       exit 1
   ;;
esac

# Inform the caller not only verbosely and set an exit status.
rc_exit

</HR>

Проблема в том, что по умолчанию база данных (при ее отсутствии) инициализируется не с русской локалью, так что работа с русскими конфигурациями будет невозможна.
Переписывать скрипт мне не хотелось, поэтому я инициализировал базу руками (в системе должен присутствовать системный юзер postrgres и на каталог БД (в данном случае /var/lib/pgsql)  у него должны быть все права):

su - -s /bin/bash postgres
postgres@SuSE:~> initdb --locale=ru_RU.UTF8 --encoding=UTF8 /var/lib/pgsql/data

После этого нужно запустить сервис postgresql и убедиться, что все работает.
service postgresql start

А вот переписанный скрипт сервера 1cv81

</HR>
# chkconfig: 35 74 46
# description: Starts and stops the 1C:Enterprise daemons

INITD=/etc/rc.d/init.d
#. $INITD/functions

# Check that networking is up.
#. /etc/sysconfig/network
[ "${NETWORKING}" = "no" ] && exit 0

# Find the name of the script
NAME=`basename $0`
if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ]
then
  NAME=${NAME:3}
fi

# Set defaults
INSTDIR=/opt/1cv81
AGENTUSR=user1cv81server

. /etc/rc.status
rc_reset

start(){
  echo -n "Starting 1C:Enterprise 8.1 server: "
  start_daemon -u$AGENTUSR $INSTDIR/ragent
  start_daemon -u$AGENTUSR $INSTDIR/rmngr
  rc_status -v    
  echo
}

stop(){
  echo -n "Stopping 1C:Enterprise 8.1 server: "
  killproc ragent -INT
  killproc rmngr -INT
  rc_status -v
}

# See how we were called.
case "$1" in
 start)
   start
   ;;
 stop)
   stop
   ;;
 restart)
       stop
       sleep 5
       start
       ;;
 status)
   echo -n "Checking status of 1C:Enterprise 8.1 server "
   checkproc $INSTDIR/ragent
   checkproc $INSTDIR/rmngr
   rc_status -v
       ;;
 *)
   echo $"Usage: $0 {start|stop}"
   exit 1
esac

rc_exit

</HR>

Переписан коряво, так что, может, специалисты поправят, но запускается и работает :)

Кстати, в бете есть как минимум одна кроссплатформенная ошибка -- при выборе счета из плана счетов "вводом по строке" в элементе формы, клиент умирает с ошибкой SDBL :)



Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2024 | Mista.ru

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