Установка сервера 1с 8.1 и postgresql на машину с OpenSuse linux
К сожалению, 1с и postgresql так просто не устанавливаются в OpenSuse linux. в этой статье я опишу процесс установки и обработки напильником так, чтобы это было понятно и неспециалисту.
Подготовка
Необходимо скачать с интернета или скопировать с диска дистрибутивы 1с сервера и postgresql. Также возможно необходимо удалить и компоненты postgresql, которые могут быть установлены в вашей системе (так как программы все равно возможно не смогут работать с той postgresql, которая поставляется вместе с 1с)
Установка сервера 1с
Заходим как рут и пытаемся установить сервер 1с:
su пароль: rpm -Uvh /путь к дистрибутиву 1с/*.rpm
как ни странно, установка проqдет почти без ошибок, а те ошибки, которые будут, натолкнут нас на правильное решение:
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, имя пользователя, пароль, создавать новую базу в случае остутствия и все! Поздравляю!