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, имя пользователя, пароль, создавать новую базу в случае остутствия и все! Поздравляю! |