Глава 02. Установка
В этой главе:
- Варианты установки.
- Подготовительные процедуры.
- Установка программного обеспечения.
- Создание кластера баз данных.
- Запуск сервера.
- Проверка работоспособности.
Варианты установки
Ручная установка:
- требуются подготовительные процедуры, создание каталогов и т.п.;
- самостоятельная регистрация учетной записи postgres;
- распаковка установочных пакетов;
- установка пакетов программного обеспечения с помощью менеджеров пакетов;
- самостоятельное создание кластера баз данных;
- ручной запуск экземпляра.
Автоматизированная установка с помощью Ansible:
- standalone - без установки etcd и создания кластера Patroni на одном хосте;
- кластер Patroni.
В этом курсе рассматривается ручная установка Pangolin.
Программное обеспечение Pangolin может быть установлено двумя основными путями:
- ручным способом, предусматривающим распаковку из zip-архива с последующей установкой из пакетов RPM или DEB в зависимости от операционной платформы;
- автоматизированным способом с помощью скриптов Ansible.
Регистрация учетной записи postgres
До установки должна быть зарегистрирована учетная запись пользователя ОС postgres в качестве системного.
Пользователь postgres должен обладать домашним каталогом. Оболочка интерактивная, например, Bash. Непосредственный вход в сеанс запрещен.
$ sudo useradd -m -r -d /var/lib/postgres \
-s /bin/bash postgres
$ id postgres
uid=978(postgres) gid=977(postgres) группы=977(postgres)
Приведенная на слайде команда useradd регистрирует учетную запись пользователя в операционной системе. Опции команды useradd:
- -m - создать домашний каталог для пользователя;
- -r - пользователь системный;
- -d - каталог файловой системы, назначенный домашним для этого пользователя;
- -s - назначить оболочку.
В примере оболочка для зарегистрированного пользователя postgres - /bin/bash, так как ему потребуется возможность использования интерактивных сеансов Bash. См. man useradd
.
Блокировка пароля для postgres
Сеанс postgres запускается только с помощью sudo. Должен быть пользователь с допуском к sudo. Для запрета непосредственного входа в сеанс пароль postgres обязательно блокируется.
$ grep postgres /etc/passwd postgres:x:978:977::/var/lib/postgres:/bin/bash
$ sudo passwd -S postgres
postgres LK 2024-08-22 -1 -1 -1 -1 (Пароль заблокирован.)
Фильтр grep пропускает только те строки входного потока, которые удовлетворяют регулярному выражению. См. man grep.
Регулярные выражения - шаблоны для поиска строк. См. man 7 regex.
В примере выше посредством grep проверяется, что учетная запись для postgres зарегистрирована в файле учетных записей /etc/passwd. См. man 5 passwd.
Команда passwd -S postgres выводит состояние учетной записи. В ее выводе видно, что пароль у postgres заблокирован. См. man passwd.
Это делается для исключения интерактивного входа в сеанс по приглашению операционной системы (в текстовом режиме - приглашение сервера терминала getty, в графике - дисплей менеджера, например, gdm, или же с помощью сетевого входа, например, ssh). Запустить сеанс postgres можно будет с помощью утилиты sudo. См. man 8 sudo.
Распаковка установочных пакетов
Архив с файлом контрольных сумм:
$ unzip -l ~/Dist/PSQ-06.002.00-69-redos7.3.2-gst-distrib.zip Archive: PSQ-06.002.00-69-redos7.3.2-gst-distrib.zip
Length Date Time Name
--------- ---------- ----- ----
64 04-28-2024 16:53 PSQ-06.002.00-69-redos7.3.2-distrib.zip.gst
1495 04-28-2024 16:53 PSQ-06.002.00-69-redos7.3.2-distrib.zip.gst.p7s
--------- -------
1559 2 files
Зарегистрированные пользователи могут получить архив с установочным пакетом.
Архив в формате zip с дистрибутивами и контрольными суммами.
Программа unzip извлекает сжатые файлы из zip-архивов. С опцией -l этак команда выводит список файлов, находящихся в архиве вместо их извлечения. В примере исследовано содержимое архива с файлом контрольных сумм. См. man unzip.
Архив с установочным пакетом:
$ unzip -l ~/Dist/PSQ-06.002.00-69-redos7.3.2-distrib.zip
Archive: PSQ-06.002.00-69-redos7.3.2-distrib.zip
Length Date Time Name
--------- ---------- ----- ----
490 04-28-2024 16:50 PSQ-06.002.00-69-redos7.3.2-documentation-distrib.pom
243560569 04-28-2024 16:48 PSQ-06.002.00-69-redos7.3.2-documentation-distrib.zip
486 04-28-2024 16:50 PSQ-06.002.00-69-redos7.3.2-installer-distrib.pom
3667157 04-28-2024 16:48 PSQ-06.002.00-69-redos7.3.2-installer-distrib.zip
482 04-28-2024 16:49 PSQ-06.002.00-69-redos7.3.2-owned-distrib.pom
51369991 04-28-2024 16:48 PSQ-06.002.00-69-redos7.3.2-owned-distrib.zip
482 04-28-2024 16:50 PSQ-06.002.00-69-redos7.3.2-party-distrib.pom
549620708 04-28-2024 16:49 PSQ-06.002.00-69-redos7.3.2-party-distrib.zip
1209 04-28-2024 16:50 PSQ-06.002.00-69-redos7.3.2-unpacker-distrib.sh
-------------- -------
848221574 9 files
Зарегистрированные пользователи могут получить архив с установочным пакетом.
Архив в формате zip с дистрибутивами и контрольными суммами.
Объединяет в себе несколько zip пакетов с различным программным обеспечением.
После распаковки доступен скрипт распаковки.
Программа unzip извлекает сжатые файлы из zip-архивов. С опцией -l этак команда выводит список файлов, находящихся в архиве вместо их извлечения. См. man unzip.
На этом слайде выводится содержимое архива zip с установочного дистрибутива. Заметно, что в один zip архив помещены несколько zip архивов:
- документация;
- установочный пакет;
- дополнительные утилиты;
- сторонние пакеты;
- Shell скрипт программы распаковки.
Распаковка архива с установочным пакетом:
$ unzip ~/Dist/PSQ-06.002.00-69-redos7.3.2-distrib.zip
Archive: /home/student/Dist/PSQ-06.002.00-69-redos7.3.2-distrib.zip inflating: PSQ-06.002.00-69-redos7.3.2-documentation-distrib.pom inflating: PSQ-06.002.00-69-redos7.3.2-documentation-distrib.zip inflating: PSQ-06.002.00-69-redos7.3.2-installer-distrib.pom inflating: PSQ-06.002.00-69-redos7.3.2-installer-distrib.zip inflating: PSQ-06.002.00-69-redos7.3.2-owned-distrib.pom
inflating: PSQ-06.002.00-69-redos7.3.2-owned-distrib.zip
inflating: PSQ-06.002.00-69-redos7.3.2-party-distrib.pom
inflating: PSQ-06.002.00-69-redos7.3.2-party-distrib.zip
inflating: PSQ-06.002.00-69-redos7.3.2-unpacker-distrib.sh
В примере посредством утилиты unzip была выполнена распаковка из монолитного zip-архива его содержимого. В частности, был распакован установочный скрипт.
Скрипт распаковки:
$ bash PSQ-06.002.00-69-redos7.3.2-unpacker-distrib.sh
start
~/Distrib/distributive ~/Distrib
successful completion: PSQ-06.002.00-distrib.tar.gz ~/Distrib
В процессе распаковки zip архивов используется временный каталог distributive.
Распакованное во временный каталог программное обеспечение упаковывается в tar.gz сжатый архив.
В переупакованном tar архиве находятся RPM пакеты.
Для запуска скрипта распаковки PSQ-06.002.00-69-redos7.3.2-unpacker- distrib.sh необходимо указать его имя в качестве аргумента исполняемому файлу оболочки bash, как это сделано в примере на слайде.
Другой вариант - сделать файл скрипта исполняемым с помощью команды:
chmod a+ PSQ-06.002.00-69-redos7.3.2-unpacker-distrib.sh
Далее запустить его из текущего каталога:
./PSQ-06.002.00-69-redos7.3.2-unpacker-distrib.sh
Скрипт распаковки создает ряд подкаталогов и извлекает из zip-архива другой архив - в формате tar, сжатый компрессором gzip - PSQ-06.002.00-distrib.tar.gz.
Распаковка tar архива:
$ tar xf PSQ-06.002.00-distrib.tar.gz
$ ls -1 *.rpm pangolin-backup-tools-1.2.0-redos7.3.2.x86_64.rpm
pangolin-dbms-6.2-6.2.0-redos7.3.2.x86_64.rpm
pangolin-dbms-6.2-client-6.2.0-redos7.3.2.x86_64.rpm
pangolin-dbms-6.2-libpq-6.2.0-redos7.3.2.x86_64.rpm
pangolin-dbms-6.2-libpq-dev-6.2.0-redos7.3.2.x86_64.rpm
pangolin-manager-2.1.0-redos7.3.2.x86_64.rpm
pangolin-pooler-1.3.0-redos7.3.2.x86_64.rpm
После распаковки tar архива в текущем каталоге появляются RPM пакеты.
Для извлечения содержимого из tar-архива, сжатого gzip, выполняется команда tar xf :
- x - режим извлечения файлов из архива tar (extract);
- f - после этой опции указывают имя файла архива. См. man tar
Как видно из примера на слайде, в tar-архиве находятся установочные пакеты ПО Pangolin. В данном случае - это RPM файлы, подходящие для дистрибутивов GNU/Linux на базе Red Hat.
Установка программного обеспечения
Проверка описания RPM пакета:
$ rpm -qp pangolin-dbms-6.2-6.2.0-redos7.3.2.x86_64.rpm \
--queryformat '%{Description}\n'
Platform V Pangolin is an advanced Object-Relational
database management system (DBMS).
The pangolin-dbms package contains the programs needed to
create and run a Pangolin server, which will in turn allow
you to create and maintain Pangolin databases.
- Информацию о RPM пакете выдает rpm -qip имя_пакета.rp.
- Информацию о пакете проверяют перед его установкой.
- В примере получено только поле Description с описанием пакета.
Перед установкой пакета RPM разумно проверить его содержимое. В примере показано, как получить описание пакета ПО, содержащееся в RPM файле. Для этого можно использовать программу rpm (RedHat Package Manager) со следующими опциями:
- -q - режим запроса (query);
- -p - запрос не к базе данных RPM, а к еще не установленному пакету, имя которого задано аргументом командной строки;
- --queryformat - позволяет обращаться к необходимым полям записей (в примере - к полю Description) и форматировать выводимую информацию. См. man rpm.
Проверка содержимого RPM пакета
$ rpm -qlp pangolin-dbms-6.2-6.2.0-redos7.3.2.x86_64.rpm \ | fgrep bin/postgres
/usr/pangolin-6.2.0/bin/postgres
Содержимое RPM пакета выдает rpm -qlp имя_пакета.rpm. В примере проверено наличие файла с исполняемым кодом сервера СУБД среди упакованных в RPM пакет файлов.
Для проверки содержимого RPM пакета также используется режим запроса, заданный опцией -q, но в режиме запроса задан здесь подрежим запроса на получение списка файлов, устанавливаемых из пакета: -ql (list).
В пакете RPM много файлов, нас интересуют только исполняемые файлы, которые будут установлены из пакета. Получить их список можно фильтрацией вывода команды rpm - ql с помощью fgrep (вариант grep, не интерпретирующий регулярные выражения). См. man grep.
В примере видно, что из RPM пакета будет извлечен файл /usr/pangolin-6.2.0/bin/postgres.
Установка RPM пакета
$ sudo dnf -y install \
pangolin-dbms-6.2-6.2.0-redos7.3.2.x86_64.rpm
$ rpm -qa pangolin\*
pangolin-dbms-6.2-6.2.0-redos7.3.2.x86_64
pangolin-dbms-6.2-client-6.2.0-redos7.3.2.x86_64
- Установить RPM пакет можно командой dnf install.
- Зависимости пакета устанавливаются автоматически.
- Команда
rpm -qa <шаблон>
выводит список имен установленных пакетов, удовлетворяющих шаблону.
Установить пакет RPM проще всего командой dnf install, опция -y для ответа "да" на все вопросы. Команда dnf автоматически учитывает зависимости пакетов и разрешает их. См. man dnf.
После установки в примере проверено командой rpm -qa, действительно ли был установлен пакет. Опция -qa - запрос ко всем установленным пакетам, после которой указан GLOBBING шаблон (аналогичный шаблон Bash использует для имен файлов), позволяющий вывести только те пакеты, имена которых начинаются со строки pangolin. В выводе видно, что установлены два таких пакета. См. man rpm.
Настройка динамических библиотек
$ cat /etc/ld.so.conf.d/pangolin.conf
/usr/pangolin/lib
/usr/pangolin-dbms-client/lib
$ sudo ldconfig
Пути к динамическим библиотекам указывают в /etc/ld.so.conf или файлах, подключаемых директивой include.
База данных динамических библиотек - /etc/ld.so.cache обновляется командой ldconfig.
Альтернативный путь настройки путей поиска библиотек - переменная окружения LD_LIBRARY_PATH.
Динамические библиотеки в GNU/Linux представляют собой so файлы (shared object). Они содержат в себе машинный код, который можно динамически подключать к исполняемым процессам либо при их запуске, либо уже во время исполнения с помощью системного вызова dlopen(). Получить список so динамических библиотек, которые загружаются при запуске исполняемого файла можно, используя команду ldd - она выводит соответствующую таблицу из заголовка ELF файла. См. man ldd.
В ОС имеется специальный проиндексированный список разделяемых библиотек - файл /etc/ld.so.cache. Он необходим для загрузки динамических библиотек. Переиндексировать этот файл бывает необходимо, если в конфигурационный файл, настраивающий пути поиска разделяемых библиотек /etc/ld.so.conf вносились изменений. Либо тогда, когда в системе устанавливаются новые библиотеки. Переиндексацию выполняет команда ldconfig. См. man ldconfig.
Иной способ указания места расположения разделяемых библиотек - переменная окружения LD_LIBRARY_PATH. См. man 8 ld.so.
Создание каталогов
$ sudo mkdir -p /pgdata/06/data /pgerrorlogs/06 \ /opt/pangolin_license
$ sudo chown -R postgres:postgres /pgdata/06 \ /pgerrorlogs/06 /opt/pangolin_license
- Каталог кластера данных (PGDATA) - /pgdata/06/data.
- Каталог для журналов отчета - /pgerrorlogs/06.
- Файл лицензии должен находиться в /opt/pangolin_license.
В примере на слайде создан каталог данных кластера, в котором будут созданы необходимые структуры в виде каталогов и файлов. Также создан каталог для хранения лицензии Pangolin.
Эти каталоги должны принадлежать пользователю postgres, группа postgres.
Профиль .bash_profile
$ sudo -u postgres sed -n '/^# User/,$p' ~postgres/.bash_profile
# User specific environment and startup programs
umask 022
export PG_PLUGINS_PATH=/usr/pangolin/lib/plugins
export PGHOME=/usr/pangolin
export PGCLIENTENCODING=UTF8
export CLNAME=clustername
export PGDATA=/pgdata/06/data
export PG_LICENSE_PATH=/opt/pangolin_license/
export MANPATH=$MANPATH:$PGHOME/share/man
export PATH=$PATH:/usr/pangolin/bin
В профиле пользователя .bash_profile должны быть показанные на слайде переменные окружения.
Файл .bash_profile должен находиться в домашнем каталоге пользователя. При интерактивном входе в сеанс он запускается единожды после скрипта /etc/profile. Задача этих файлов - выполнить необходимые при входе пользователя в сеанс действия. Например, установить необходимые переменные окружения.
В примере на слайде распечатано содержимое файла ~postgres/.bash_profile, начиная с закомментированной строки # User. Видно переменные окружения, которые должны находиться в этом файле. При интерактивном входе в сеанс пользователя postgres с помощью команды sudo -i -u postgres этот файл скрипта сработает и установит эти переменные автоматически.
Создание кластера баз данных и запуск сервера
Создание кластера баз данных
$ sudo -iu postgres
postgres$ initdb -k
postgres$ ls $PGDATA
base global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_integrity pg_logical pg_multixact pg_notify pg_perf_insights pg_pp_cache pg_prep_stats pg_quota.conf pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase PG_VERSION pg_wal pg_xact postgresql.auto.conf postgresql.conf postmaster.opts postmaster.pid PRODUCT_VERSION tracing
Команда initdb создает в каталоге данных необходимые файлы и каталоги.
Опция -k команды initdb включает контрольные суммы.
Инициализация в сеансе postgres.
Создать кластер баз данных проще всего, войдя в интерактивный сеанс postgres. Кластер создается командой initdb. Каталог данных в примере не указан, так как установлена переменная окружения PGDATA. Если бы ее не было, необходимо было бы использовать опцию -D команды initdb.
Опция -k нужна для включения контрольных сумм на страницах. https://www.postgresql.org/docs/15/app-initdb.html.
Запуск СУБД
postgres$ pg_ctl -l /pgerrorlogs/06/pangolin.log start
postgres$ psql -qtc 'select product_version()' Platform V Pangolin 6.2.0
- Команда pg_ctl управляет сервером СУБД.
- Запуск - start, останов - stop.
- Опция -l указывает местоположение журнала отчета.
- Запуск и останов от имени пользователя postgres.
- Команда psql -c 'запрос' для проверки работоспособности.
Входящая в комплект PostgreSQL команда pg_ctl предназначена для управления кластером. Она может:
- запускать экземпляр;
- останавливать его;
- рестартовать;
- заставлять перечитывать конфигурационные файлы;
- выводить статус;
- и др.
В примере запущен экземпляр PostgreSQL, причем журнал отчета определен опцией -l. Далее выполнена команда, выводящая версию ПО Pangolin. https://www.postgresql.org/docs/15/app-pg-ctl.html.
Итоги главы
- В главе обсуждена распаковка установочных пакетов и подготовка RPM пакетов к установке.
- Рассмотрен процесс подключения динамических библиотек.
- Показаны создание и настройка учетных записей пользователей СУБД, а также их особенности.
- Продемонстрирована настройка профилей пользователей.
- Рассмотрено создание кластера баз данных.
- Продемонстрирован ручной запуск экземпляра СУБД.