Установка сервера PostgreSQL на операционную систему Debian 4.0

Краткое содержание:

Установка сервера PostgreSQL на операционную систему Debian 4.0

Предварительные условия

Все описанные действия проводятся на "свежеустановленной" операционной системе Debian-4.0-r3, при инсталляции которой выбраны следующие параметры:

Подготовка

ВНИМАНИЕ: Чтобы ускорить процесс установки и настройки, руководство написано так, что большинство описанных действий можно выполнить, просто копируя команды, выделенные жирным шрифтом по одной в буфер и вставляя их в командную строку.

Увеличиваем максимальный объем разделяемой памяти ядра (в данном примере до 128 Мб). Для этого нужно дописать строчку "kernel.shmmax = 134217728" в файл /etc/sysctl.conf или выполнить первую из указанных команд. После этого выполнить вторую команду, которая считает файл /etc/sysctl.conf и установит новые параметры:

Копировать в буфер обмена
debian40r3:~# echo kernel.shmmax = `echo 128*1024*1024 | bc` >> /etc/sysctl.conf 
debian40r3:~# sysctl -p
kernel.shmmax = 134217728
debian40r3:~#

Устанавливаем необходимые утилиты и библиотеки:

Копировать в буфер обмена
debian40r3:~# aptitude install alien libncurses5-dev
[ сообщения, отображаемые в процессе установки, скрыты ]
debian40r3:~#

Создаем необходимые ссылки и директории:

Копировать в буфер обмена
debian40r3:~# ln -s /lib/libreadline.so.5 /lib/libreadline.so.4
debian40r3:~# ln -s /usr/lib/libtermcap.so /usr/lib/libtermcap.so.2
debian40r3:~# mkdir -p /var/lock/subsys
debian40r3:~#

Добавляем код локализации «en_US»:

Копировать в буфер обмена
debian40r3:~# echo en_US ISO-8859-1 >> /etc/locale.gen 
debian40r3:~# locale-gen 
Generating locales (this might take a while)...
ru_RU.UTF-8... done
en_US.ISO-8859-1... done
Generation complete.
debian40r3:~#

Установка

Предполагается, что в текущей директории находятся 4 нижеперечисленных файла из дистрибутива PostgreSQL (версия не имеет значения):

Копировать в буфер обмена
debian40r3:~/psql# ls
postgresql-8.2.6-2.1C.i386.rpm		postgresql-libs-8.2.6-2.1C.i386.rpm
postgresql-contrib-8.2.6-2.1C.i386.rpm	postgresql-server-8.2.6-2.1C.i386.rpm
debian40r3:~/psql#

Преобразуем rpm-пакеты при помощи утилиты alien:

Копировать в буфер обмена
debian40r3:~/psql# alien --to-tgz *.rpm 
postgresql-8.2.6.tgz generated
postgresql-contrib-8.2.6.tgz generated
postgresql-libs-8.2.6.tgz generated
postgresql-server-8.2.6.tgz generated
debian40r3:~/psql#

Создаем директорию для хранения распакованных файлов и распаковываем в нее все архивы при помощи следующих двух команд:

Копировать в буфер обмена
debian40r3:~/psql# mkdir unpacked
debian40r3:~/psql# for line in `ls *.tgz`; do tar -zxf $line -C unpacked; done
debian40r3:~/psql#

Предустановочные скипты дистрибутива предназначены для другой операционной системы, и в Debian они будут работать некорректно, поэтому нужно выполнить следующие действия:

Это осуществляется следующими командами:

Копировать в буфер обмена
debian40r3:~/psql# groupadd -g 26 -o postgres
debian40r3:~/psql# useradd -g postgres -o -r -d /var/lib/pgsql -s /bin/bash -c "PostgreSQL Server" -u 26 postgres
debian40r3:~/psql# touch /var/log/pgsql
debian40r3:~/psql# chown postgres:postgres /var/log/pgsql
debian40r3:~/psql# chmod 0700 /var/log/pgsql 
debian40r3:~/psql#

После этого копируем распакованные файлы, удаляем временную директорию и архивы и обновляем кеш системных библиотек.

Копировать в буфер обмена
debian40r3:~/psql# mv unpacked/etc/rc.d/init.d/postgresql /etc/init.d
debian40r3:~/psql# rm unpacked/etc/rc.d/ -r
debian40r3:~/psql# cp -r unpacked/etc/ /
debian40r3:~/psql# cp -r unpacked/var/ /
debian40r3:~/psql# cp -r unpacked/usr/ /
debian40r3:~/psql# rm -rf unpacked *tgz
debian40r3:~/psql# ldconfig 
debian40r3:~/psql#

Сменим владельца каталога /var/lib/pgsql и добавим стартовый скрипт /etc/init.d/postgres в автозагрузку.

Копировать в буфер обмена
debian40r3:~/psql# chown postgres:postgres -R /var/lib/pgsql
debian40r3:~/psql# update-rc.d postgresql defaults
Adding system startup for /etc/init.d/postgresql ...
/etc/rc0.d/K20postgresql -> ../init.d/postgresql
/etc/rc1.d/K20postgresql -> ../init.d/postgresql
/etc/rc6.d/K20postgresql -> ../init.d/postgresql
/etc/rc2.d/S20postgresql -> ../init.d/postgresql
/etc/rc3.d/S20postgresql -> ../init.d/postgresql
/etc/rc4.d/S20postgresql -> ../init.d/postgresql
/etc/rc5.d/S20postgresql -> ../init.d/postgresql
debian40r3:~/psql#

Далее необходимо вставить в командную строку содержимое следующей команды (вместе с символом новой строки после EOF в конце):

Копировать в буфер обмена
debian40r3:~/psql# cat <<EOF > /tmp/header 
echo_failure() {
echo -n FAIL
}
echo_success() {
echo -n OK
}
failure() {
echo_failure
}
success() {
echo_success}
EOF

Таким образом будет создан файл /tmp/header, содержащий в себе функции, которые нужно будет добавить в файл /etc/init.d/postgresql.

Далее модифицируем файл /etc/init.d/postgres, добавляя к нему файл с необходимыми функциями и комментируем строки ". $INITD/functions" и ". /etc/sysconfig/network":

Копировать в буфер обмена
debian40r3:~# mv /etc/init.d/postgresql{,.tmp}
debian40r3:~# mv /tmp/header /etc/init.d/postgresql
debian40r3:~# cat /etc/init.d/postgresql.tmp | sed 's|\(. $INITD/functions\)|#\0|' |
sed 's|\(. /etc/sysconfig/network\)|#\0|' >> /etc/init.d/postgresql
debian40r3:~# rm /etc/init.d/postgresql.tmp 
debian40r3:~# chmod +x /etc/init.d/postgresql

После этого инициализируем базу данных:

Копировать в буфер обмена
debian40r3:~# /etc/init.d/postgresql initdb
Инициализируется база данных:                              [  OK  ]
debian40r3:~#

Меняем пароль для учетной записи SQL-сервера postgres. Сначала нужно изменить настройки безопасности: для этого в последней строке файла /var/lib/pgsql/data/pg_hba.conf нужно заменить "md5" на "trust". Таким образом, мы включаем "доверительный" режим. Отредактировать файл можно в любом текстовом редакторе, а в данном примере это делается при помощи следующих команд:

Копировать в буфер обмена
debian40r3:~# mv -f /var/lib/pgsql/data/pg_hba.conf{,.tmp}
debian40r3:~# sed 's/md5$/trust/' < /var/lib/pgsql/data/pg_hba.conf.tmp > /var/lib/pgsql/data/pg_hba.conf 
debian40r3:~# /etc/init.d/postgresql start
Запускается служба postgresql:                             [  OK  ]

Теперь соединяемся с SQL-сервером под учетной записью postgres и меняем пароль учетной записи SQL-сервера postgres :

Копировать в буфер обмена
debian40r3:~# psql -d template1 -U postgres -h localhost
Welcome to psql 8.3.3, the PostgreSQL interactive terminal.
Type:  \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
template1=# alter user postgres with password 'new_password';
ALTER ROLE
template1=# \q
debian40r3:~#

Возвращаем настройки обратно и перезапускаем сервер:

Копировать в буфер обмена
debian40r3:~# mv -f /var/lib/pgsql/data/pg_hba.conf{.tmp,}
debian40r3:~# /etc/init.d/postgresql restart
Останавливается служба postgresql:                         [  OK  ]
Запускается служба postgresql:                             [  OK  ]
debian40r3:~#

Сервер PostgreSQL готов к работе!