Книга знаний

1С:Предприятие / v8 / Администрирование / Установка

v8: Установка сервера 1с 8.1 и postgresql на машину с OpenSuse linux

К сожалению, 1с и postgresql так просто не устанавливаются в OpenSuse linux. в этой статье я опишу процесс установки и обработки напильником так, чтобы это было понятно и неспециалисту.Автор статьи: Fragster | Редакторы:
Последняя редакция №17 от 30.01.08 | История
URL: http://kb.mista.ru/article.php?id=632

Ключевые слова: 1с, 1c, postgresql, opensuse, установка


Подготовка


Необходимо скачать с интернета или скопировать с диска дистрибутивы 1с сервера и postgresql. Также возможно необходимо удалить и компоненты postgresql, которые могут быть установлены в вашей системе (так как программы все равно возможно не смогут работать с той postgresql, которая поставляется вместе с 1с)

Установка сервера 1с


Заходим как рут и пытаемся установить сервер 1с:
su
пароль:
rpm -Uvh /путь к дистрибутиву 1с/*.rpm

как ни странно, установка проудет почти без ошибок, а те ошибки, которые будут, натолкнут нас на пра  
вильное решение:
2:1C_Enterprise-server   ########################################### [ 25%]

srv1cv81                  0:off  1:off  2:off  3:on   4:off  5:on   6:off
Starting 1C:Enterprise 8.1 server: su: предупреждение: невозможно сменить каталог на /home/usr1cv81: Нет такого файла или каталога
OK

Необходимо создать соттветствующую папку и назначить ей владельца:
md /home/usr1cv81
chown usr1cv81:grp1cv81 /home/usr1cv81
(пользователи уже будут созданы установщиком). Если после этого попытаться запустить сервис 1с, то это должно пройти без ошибок
service srv1cv81 start
Starting 1C:Enterprise 8.1 server: OK

В дальнейшем управлять сервисом можно из yast. к сожалению, в конфиге 1с не описана функция status, по этому в yast она всегда будет отображаться как выключенная. Проверить же можно с помощью команды netstat: если она выдает такой результат, то сервер работает:
netstat -n -a -t | grep 1540
tcp        0      0 0.0.0.0:1540            0.0.0.0:*               LISTEN

После всего этого к серверу возможно подсоединиться из консоли кластеров серверов 1с

Установка postgresql


если мы попробуем установить postgresql аналогичным образом, то система выдаст нам сообщение о неудовлетворенных зависимостях:
rpm -Uvh /путь к дистрибутиву postgresql/*.rpm
ошибка: Неудовлетворенные зависимости:
        initscripts нужен для postgresql-8.1.5-14.1C.i386

Возможно, при наличии этого пакета все устанавливается из коробки, и сразу работает, но у меня его не было, по этому пришлось идти длинным путем. Для начала установим postgresql несмотря на все зависимости, и посмотрим на ошибки:
rpm -Uvh --nodeps ./*.rpm
Подготовка...     ########################################### [100%]

   1:postgresql-libs        ########################################### [ 10%]

   2:postgresql             ########################################### [ 20%]

chown: `postgres:postgres': неверный пользователь
   3:postgresql-server      ########################################### [ 30%]

предупреждение: пользователь postgres не существует - используется root
предупреждение: пользователь postgres не существует - используется root
предупреждение: пользователь postgres не существует - используется root
предупреждение: пользователь postgres не существует - используется root
postgresql: unknown service
   4:postgresql-contrib     ########################################### [ 40%]

   5:postgresql-debuginfo   ########################################### [ 50%]

   6:postgresql-devel       ########################################### [ 60%]

   7:postgresql-docs        ########################################### [ 70%]

   8:postgresql-jdbc        ########################################### [ 80%]

   9:postgresql-pl          ########################################### [ 90%]

  10:postgresql-test        предупреждение: пользователь postgres не существует - используется root
предупреждение: пользователь postgres не существует - используется root
.........

из всего этого понятно, что по какой-то причине не создался пользователь postgresql. Поможем ему - создадим пользователя в группе postgresql (группа почему-то присутствует), для этого я использовал yast, но useradd никто не отменял ;). Потом необходимо задать владельцем папки с данными postgresql (она должна принадлежать пользователю postgres) и проинициализировать СУБД
chown postgres:postgres -R /var/lib/pgsql
su postgres -c 'LANG=ru_RU.UTF-8 initdb /var/lib/pgsql/data'
Файлы, сопутствующие этой системе баз данных, будут
принадлежать пользователю "postgres". Этот пользователь
также должен быть владельцем процесса сервера.
Кластер баз данных будет инициализирован с локалью ru_RU.UTF-8.
Кодировка базы по умолчанию установлена в UTF8.

исправление прав на существующую директорию /var/lib/pgsql/data ... ок
создание директории /var/lib/pgsql/data/global ... ок
создание директории /var/lib/pgsql/data/pg_xlog ... ок
создание директории /var/lib/pgsql/data/pg_xlog/archive_status ... ок
создание директории /var/lib/pgsql/data/pg_clog ... ок
создание директории /var/lib/pgsql/data/pg_subtrans ... ок
создание директории /var/lib/pgsql/data/pg_twophase ... ок
создание директории /var/lib/pgsql/data/pg_multixact/members ... ок
создание директории /var/lib/pgsql/data/pg_multixact/offsets ... ок
создание директории /var/lib/pgsql/data/base ... ок
создание директории /var/lib/pgsql/data/base/1 ... ок
создание директории /var/lib/pgsql/data/pg_tblspc ... ок
выбирается значение по-умолчанию для max_connections ... 100
выбирается значение по-умолчанию для shared_buffers ... 1000
создание конфигурационных файлов ... ок
создание базы template1 в /var/lib/pgsql/data/base/1 ... ок
initializing pg_authid ... ок
разрешение неограниченного размера строки для системных таблиц ... ок
initializing dependencies ... ок
создание системных представлений ... ок
загрузка pg_description ... ок
создание конверсий ... ок
установка привилегий для встроенных объектов ... ок
создание информационной схемы ... ок
сборка мусора в базе template1 ... ок
копирование template1 в template0 ... ок
copying template1 to postgres ... ок

ВНИМАНИЕ: используется аутентификация "trust" для локальных подсоединений.
Вы можете её поменять, отредактировав pg_hba.conf или используя опцию -A,
при следующем выполнении initdb.

Success. You can now start the database server using:

    postmaster -D /var/lib/pgsql/data
or
    pg_ctl -D /var/lib/pgsql/data -l logfile start


Затем проверим, как запускается сервис postgresql:
service postgresq
service: no such service postgresq

Разберемся: при установке конфиг сервиса почему-то оказался в папке /etc/init.d/init.d, а не в /etc/init.d Исправив это досадное недоразумение попробуем снова:
service postgresql start
/etc/init.d/postgresql: line 74: /etc/rc.d/init.d/functions: No such file or directory

из чего следует, что у нас остутствует какой-то файл /etc/rc.d/init.d/functions, т.е. /etc/init.d/init.d/functions для OpenSuse...  закомментировав строку с инклюдом и проверив все функции, я вывел следующие изменения, которые необходимо внести в конфиг:
убрать строку . $INITD/functions (она практически первая не закомментированная), и добавить следующие строки вместо нее:
gprintf() {
        if [ -x /bin/gettext -a -n "$1" ]; then 
       if [ -n "$GP_LANG" ]; then
           local TEXT=`LC_ALL=$GP_LANG LANGUAGE=$GP_LANGUAGE gettext -e --domain=$TEXTDOMAIN -- "$1"`
       else
           local TEXT=`gettext -e --domain=$TEXTDOMAIN -- "$1"`
       fi
    else
       local TEXT=$1
    fi
    [ "${1#*\\n}" ] || TEXT="$TEXT\n"

    shift
    printf -- "$TEXT" "$@"
}
gprintf_msg_rest() {
case "$1" in
       *%s*%s*%s*%s*)
               GPRINTF_MSG=$(gprintf "$1" "$2" "$3" "$4" "$5")
               shift 5;;
       *%s*%s*%s*)
               GPRINTF_MSG=$(gprintf "$1" "$2" "$3" "$4")
               shift 4;;
       *%s*%s*)
               GPRINTF_MSG=$(gprintf "$1" "$2" "$3")
               shift 3;;
       *%s*)
               GPRINTF_MSG=$(gprintf "$1" "$2")
               shift 2;;
       *)
               GPRINTF_MSG=$(gprintf "$1")
               shift;;
esac
GPRINTF_REST="$@"
}
echo_success() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
  gprintf "  OK  "
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 0
}
echo_failure() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
  gprintf "FAILED"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 1
}
success() {
  gprintf_msg_rest "$@"
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success
  return 0
}
failure() {
  local rc=$?
  gprintf_msg_rest "$@"
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_failure
  return $rc
}
__pids_var_run() {
    local base=${1##*/}
    local pid_file=${2:-/var/run/$base.pid}

    pid=
    if [ -f "$pid_file" ] ; then
            local line p
        read line < "$pid_file"
        for p in $line ; do
            [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
        done
            if [ -n "$pid" ]; then
                    return 0
            fi
        return 1 # "Program is dead and /var/run pid file exists"
    fi
    return 3 # "Program is not running"
}
__pids_pidof() {
    pidof -s -o $$ -o $PPID -o %PPID -x "$1" || \
        pidof -s -o $$ -o $PPID -o %PPID -x "${1##*/}"
}
status() {
    local base pid pid_file=

    # Test syntax.
    if [ "$#" = 0 ] ; then
        gprintf "Usage: status [-p pidfile] {program}\n"
        return 1
    fi
    if [ "$1" = "-p" ]; then
        pid_file=$2
        shift 2
    fi
    base=${1##*/}

    # First try "pidof"
    pid="$(__pids_pidof "$1")"
    if [ -n "$pid" ]; then
            gprintf "%s (pid %s) is running...\n" ${base} "$pid"
            return 0
    fi

    # Next try "/var/run/*.pid" files
    __pids_var_run "$1" "$pid_file"
    case "$?" in
        0)
            gprintf "%s (pid %s) is running...\n" ${base} "$pid"
            return 0
            ;;
        1)
                    gprintf "%s dead but pid file exists\n" ${base}
                    return 1
            ;;
    esac
    # See if /var/lock/subsys/${base} exists
    if [ -f /var/lock/subsys/${base} ]; then
        gprintf "%s dead but subsys locked\n" ${base}
        return 2
    fi
    gprintf "%s is stopped\n" ${base}
    return 3

}

В принципе, можно просто заменить ошибочные строки на echo, или вообще удалить - это просто вывод сообщений об успехе/неудаче - просто вместе с этими строками сообщения будут не сильно отличатся от всего остального, а на функцию статус просто забить, но тогда yast не сможет определить статус сервиса постгре, ну, в общем, для красоты добавляем :)

Далее необходимо задать пароль для пользователя, который будет соединяться с нашей БД. Для этого в сначала в файл /var/lib/pgsql/data/pg_hba.conf следует добавить строку local all all trust - доверие ко всем локальным пользователям, перезагрузить сервер postgresql, а затем выполнить команду
service postgresql restart
psql -U postgres -d template1 -c "ALTER USER postgres PASSWORD 'ваш пароль'"

, ну, или добавить нового пользователя... в дальнейшем эти действия можно делать с помощью phpPgAdmin, например, но начальная установка все-таки необходима...

Все, теперь в консоли кластеров серверов 1с добавляем новую базу для нашего сервера, указываем сервер бд - postgresql, имя пользователя, пароль, создавать новую базу в случае остутствия и все! Поздравляю!

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

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