Перейти к основному содержимому

Уровень 3.0

Подготовка к установке​

Внимание!

Пользователь student должен иметь возможность выполнять команды от имени других пользователей с помощью sudo (в зависимости от используемой операционной системы пользователю обычно достаточно быть членом группы wheel или sudo).

В зависимости от настроек команда sudo, возможно, потребует ввода пароля учетной записи, от имени которой запускается sudo (здесь — student). Для этой учетной записи должна быть соответствующая настройка для разрешения выполнять sudo.

  1. Проверьте наличие архива с установочным пакетом ПО Pangolin и получите его содержимое. Пакет должен быть в подкаталоге Distrib домашнего каталога пользователя student.

    [student@ServerName ~]$ ls -1 ~/Distr/
    license.json
    PSQ-{pangolin_version}-{OS}-distrib.zip
  2. Перейдите в папку ~/Distr/ и распакуйте архив:

    [student@ServerName ~]$ cd ~/Distr
    [student@ServerName Distr]$ unzip PSQ-{pangolin_version}-{OS}-distrib.zip
    Achive: PSQ-{pangolin_version}-{OS}-distrib.zip
    inflating: PSQ-{pangolin_version}-{OS}-cyclonedx-distrib.json
    inflating: PSQ-{pangolin_version}-{OS}-installer-distrib.pom
    inflating: PSQ-{pangolin_version}-{OS}-installer-distrib.zip
    inflating: PSQ-{pangolin_version}-{OS}-owned-distrib.pom
    inflating: PSQ-{pangolin_version}-{OS}-owned-distrib.zip
    inflating: PSQ-{pangolin_version}-{OS}-party-distrib.pom
    inflating: PSQ-{pangolin_version}-{OS}-party-distrib.zip
    inflating: PSQ-{pangolin_version}-{OS}-swidtag-distrib.swidtag
    inflating: PSQ-{pangolin_version}-{OS}-unpacker-distrib.sh
    inflating: PSQ-doc-{pangolin_version}-distrib.zip
    inflating: PSQ-doc-{pangolin_version}.pom
  3. Запустите скрипт PSQ-{pangolin_version}-{OS}-unpacker-distrib.sh:

    [student@ServerName Distr]$ sh PSQ-{pangolin_version}-{OS}-unpacker-distrib.sh
    start
    ~/Distr/distributive ~/Distr
    successful completion: PSQ-{pangolin_version}-distrib.tar.gz
    ~/Distr

    И вернитесь в корневой каталог:

    [student@ServerName Distr]$ cd ~
  4. Для удобства распаковка будет производиться в подкаталоге Dist домашнего каталога. Создайте каталог ~/Dist и, перейдя в него, распакуйте архив ПО Pangolin:

    [student@ServerName ~]$ mkdir ~/Dist
    [student@ServerName ~]$ cd ~/Dist
    [student@ServerName Dist]$ tar xvf ~/Distr/PSQ-{pangolin_version}-distrib.tar.gz
    ./
    ./automation_scripts/
    ./automation_scripts/pangolin_pooler/
    ./automation_scripts/pangolin_pooler/inventories/
    ./automation_scripts/pangolin_pooler/inventories/hosts.ini
    ...
    Разбор команды:

    В команде использован BSD-стиль (опции без минуса), но POSIX-стиль перед этими опциями допустим. Так как tar-архив сжат gzip, то можно было также указать опцию z, но tar подставил ее автоматически. Опция v необязательна и обеспечивает режим подробного информирования. После опции f указывают имя файла архива.

    В каталоге Dist теперь находятся извлеченные из архива tar.gz файлы, содержащие ПО для установки.

  5. Проверьте, извлечены ли из tar.gz-архива пакеты RPM, содержащие ПО Pangolin:

    [student@ServerName Dist]$ ls -1 *.rpm
    pangolin-backup-tools-1.2.5-{OS}.x86_64.rpm
    pangolin-dbms-{major.minor}-{pangolin_version}-{OS}.x86_64.rpm
    pangolin-dbms-{major.minor}-client-{pangolin_version}-{OS}.x86_64.rpm
    pangolin-dbms-{major.minor}-libpq-{pangolin_version}-{OS}.x86_64.rpm
    pangolin-dbms-{major.minor}-libpq-dev-{pangolin_version}-{OS}.x86_64.rpm
    pangolin-manager-{component_version}-{OS}.x86_64.rpm
    pangolin-pooler-{component_version}-{OS}.x86_64.rpm

Установка​

  1. Получите информацию о пакете с серверным ПО СУБД Pangolin, а также о пакете с клиентским ПО. Используйте rpm с опциями: -q — режим запроса, -i — получение информации о пакете и -p — обращение к пакету, еще не установленному в системе:

    [student@ServerName Dist]$ rpm -qip pangolin-dbms-{major.minor}-client-{pangolin_version}-{OS}.x86_64.rpm
    Name : pangolin-dbms-{major.minor}-client
    Version : {pangolin_version}
    Release : {OS}
    Architecture: x86_64
    Install Date: (not installed)
    Group : Applications/Databases
    Size : 11255048
    License : Sbertech license
    Signature : (none)
    Source RPM : pangolin-dbms-{major.minor}-{pangolin_version}-{OS}.src.rpm
    Build Date : Thu 07 Aug 2025 12:03:55 PM UTC
    Build Host : localhost
    Relocations : /usr/pangolin-dbms-client-{major.minor}
    Packager : Sbertech
    Vendor : Sbertech
    URL : https://sbertech.ru
    Summary : Platform V Pangolin DB is an advanced Object-Relational database management system (DBMS). Pangolin DBMS client.
    Description :

    Platform V Pangolin DB is an advanced Object-Relational database management system (DBMS).
    The pangolin-dbms-client package contains the client programs that you will need to
    access a Pangolin DBMS server. These client programs can be located on the same machine as the
    Pangolin server, or on a remote machine that accesses a Pangolin server
    over a network connection. The Pangolin server can be found in the
    platform-v-pangolin-server sub-package.
    Located in the directory "/usr/pangolin-dbms-client-{major.minor}".
  2. Получите из rpm-пакетов директории для установки файлов с исполняемым кодом сервера Pangolin и клиента psql:

    [student@ServerName Dist]$ rpm -qlp pangolin-dbms-{major.minor}-{pangolin_version}-{OS}.x86_64.rpm | fgrep bin/postgres
    /usr/pangolin-{major.minor}/bin/postgres
    [student@ServerName Dist]$ rpm -qlp pangolin-dbms-{major.minor}-{pangolin_version}-{OS}.x86_64.rpm | fgrep bin/psql
    /usr/pangolin-major.minor/bin/psql_rsa_verify
    /usr/pangolin-major.minor/bin/psql_set_lsn

    Для получения директорий установки использована команда rpm с опциями -qlp, -l — список файлов, установленных из пакета.

  3. Установите ПО сервера и клиента.

    Воспользуйтесь утилитой rpm для установки rpm-пакетов. Помните, что в случае с зависимостями пакеты не будут установлены автоматически, поэтому их необходимо будет установить вручную:

    [student@ServerName Dist]$ sudo rpm -ivh pangolin-dbms-{major.minor}-{pangolin_version}-{OS}.x86_64.rpm
    error: Failed dependencies:
    uuid >= 1.6 is needed by pangolin-dbms-{major.minor}-{pangolin_version}-{OS}.x86_64
    [student@ServerName Dist]$ sudo dnf update
    [student@ServerName Dist]$ sudo dnf install uuid
    ...
    Installed:
    uuid-1.6.2-55.sl9.1.x86_64

    Complete!
    [student@ServerName Dist]$ sudo rpm -ivh pangolin-dbms-{major.minor}-{pangolin_version}-{OS}.x86_64.rpm
    Preparing... ########################################### [100%]
    Create group pangolin_users with gid=226
    ...
    Config /etc/man_db.conf was updated
    Running /usr/lib/rpm/posttrans-filetriggers
    Разбор команды:

    • -i (install) – указывает, что пакет нужно установить;
    • -v (verbose) – в процессе установки команда будет выводить на экран подробный вывод (например, имена файлов);
    • -h (hash) – во время установки на экран будут выводиться символы решетки (#), отображающие прогресс выполнения операции.

    А второй пакет установите с помощью менеджера пакетов ОС (здесь – dnf):

    [student@ServerName Dist]$ sudo dnf -y install pangolin-dbms-{major.minor}-client-{pangolin_version}-{OS}.x86_64.rpm
    Last metadata expiration check: 0:25:20 ago on Thu 27 Mar 2025 12:44:17 PM MSK.
    Dependencies resolved.
    ======================================================================================================================================================================= =========================== Package Architecture Version Repository Size
    ======================================================================================================================================================================= ===========================Installing:
    pangolin-dbms-{major.minor}-client x86_64 {pangolin-version}-redos8.0 @commandline 2.0 M
    ...
    Installed:
    pangolin-dbms-{major.minor}-client-{pangolin-version}-redos8.0.x86_64

    Complete!

    Затем проверьте, установились ли пакеты, с помощью rpm -qa:

    [student@ServerName Dist]$ rpm -qa pangolin\*
    pangolin-dbms-{major.minor}-{pangolin_version}-{OS}.x86_64
    pangolin-dbms-{major.minor}-client-{pangolin_version}-{OS}.x86_64

    С опциями -qa команда rpm выводит список имен всех установленных пакетов в системе.

  4. Подключите библиотеки, установленные в каталог /usr/pangolin/lib из пакета серверного ПО и каталог /usr/pangolin-dbms-client/lib — из клиентского. Для этого создайте файл конфигурации для ldconfig. Проиндексируйте базу данных библиотек и проверьте, подключаются ли библиотеки к ПО сервера и клиентов:

    [student@ServerName Dist]$ echo '/usr/pangolin/lib' | sudo tee /etc/ld.so.conf.d/pangolin.conf
    /usr/pangolin/lib
    [student@ServerName Dist]$ echo '/usr/pangolin-dbms-client/lib' | sudo tee -a /etc/ld.so.conf.d/pangolin.conf
    /usr/pangolin-dbms-client/lib
    [student@ServerName Dist]$ sudo cat /etc/ld.so.conf.d/pangolin.conf
    /usr/pangolin/lib
    /usr/pangolin-dbms-client/lib

    В каталоге /etc/ld.so.conf.d можно размещать конфигурационные файлы с путями к каталогам, содержащим динамические библиотеки (shared objects). Другой способ — прописать пути к библиотекам непосредственно в файл конфигурации /etc/ld.so.conf. Вот база динамических библиотек — /etc/ld.so.cache:

    [student@ServerName Dist]$ sudo ldconfig

    Утилита ldconfig индексирует базу данных динамических библиотек. Утилита ldd позволяет проверить список динамических библиотек, которые требуются для запуска динамически скомпонованных исполняемых файлов в формате ELF:

    [student@ServerName Dist]$ ldd /usr/pangolin-dbms-client/bin/psql | grep libpq
    libpq.so.5 => /usr/pangolin-dbms-client/bin/../lib/libpq.so.5 (0x00007f50090c4000)
    [student@ServerName Dist]$ ls -l /usr/pangolin-dbms-client/bin/../lib/libpq.so.5
    lrwxrwxrwx 1 root root 13 апр 27 14:01 /usr/pangolin-dbms-client/bin/../lib/libpq.so.5 -> libpq.so.5.15

    Другой возможный путь указать местоположение в файловой системе каталогов, содержащих динамические библиотеки, — использование переменной окружения LD_LIBRARY_PATH.

Подготовка к запуску​

  1. Создайте каталог для кластера баз данных (PGDATA), каталог для журналов отчета, а также каталог для размещения лицензии. Имена соответствуют рекомендуемым в документации. Установите на созданные каталоги владельца и группу postgres:

    [student@ServerName ~]$ cd
    [student@ServerName ~]$ sudo mkdir -p /pgdata/0{major_version}/data /pgerrorlogs/0{major_version} /opt/pangolin_license
    [student@ServerName ~]$ sudo ls -ld /pgdata/0{major_version}/data /pgerrorlogs/0{major_version} /opt/pangolin_license
    drwxr-xr-x 2 root root 6 Oct 14:51 /opt/pangolin_license
    drwxr-xr-x 2 root root 6 Oct 14:51 /pgdata/0{major_version}/data
    drwxr-xr-x 2 root root 6 Oct 14:51 /pgerrorlogs/0{major_version}
    [student@ServerName ~]$ sudo chown -R postgres:postgres /pgdata /pgerrorlogs /opt/pangolin_license
    [student@ServerName ~]$ sudo ls -ld /pgdata /pgerrorlogs /opt/pangolin_license
    drwxr-xr-x 2 postgres postgres 6 Oct 14:51 /opt/pangolin_license
    drwxr-xr-x 2 postgres postgres 6 Oct 14:51 /pgdata
    drwxr-xr-x 2 postgres postgres 6 Oct 14:51 /pgerrorlogs
  2. Запишите в файлы профиля пользователя postgres настройки нескольких переменных окружения:

    [student@ServerName ~]$ sudo vi ~postgres/.bash_profile
    ...
    # User specific environment and startup programs
    # Pangolin
    umask 022
    export LD_LIBRARY_PATH=/usr/pangolin/lib
    export PG_PLUGINS_PATH=/usr/pangolin/lib
    export PGHOME=/usr/pangolin
    export PGCLIENTENCODING=UTF8
    export CLNAME=clustername
    export PGDATA=/pgdata/0{major_version}/data
    export PG_LICENSE_PATH=/opt/pangolin_license/
    export LANG=en_US.UTF-8
    export LC_ALL="en_US.UTF-8"
    export MANPATH=$MANPATH:$PGHOME/share/man
    export PATH=$PATH:/usr/pangolin/bin

    В файле .bash_profile для пользователя postgres устанавливается несколько переменных окружения, к которым могут обращаться различные утилиты, взаимодействующие с СУБД Pangolin.

    Например, можно выделить переменную окружения PGDATA, в которой записан каталог с кластером баз данных. Указанную переменную, в частности, использует утилитa initdb для инициализации каталога данных, а также pg_ctl для управления экземпляром СУБД Pangolin.

  3. Скопируйте лицензию в соответствующий каталог и установите на него права для postgres. В этом примере предполагается, что файл лицензии находится в каталоге ~/Distrib. Если он находится в ином каталоге, измените соответствующим образом первый аргумент команды cp. Проверить местоположение файла лицензии поможет команда ls:

    [student@ServerName ~]$ sudo cp ~/Distrib/license*.json /opt/pangolin_license/license.json
    [student@ServerName ~]$ sudo chown -v postgres:postgres /opt/pangolin_license/license.json
    changed ownership of '/opt/pangolin_license/license.json' retained as postgres:postgres
    [student@ServerName ~]$ sudo ls -l /opt/pangolin_license/license.json
    -rw-r--r-- 1 postgres postgres 511 May 6 16:10 /opt/pangolin_license/license.json
  4. В сеансе пользователя ОС postgres проверьте работоспособность клиента и сервера, запросив информацию о версии:

    [student@ServerName ~]$ sudo su - postgres
    [postgres@ServerName ~]$ psql --version
    psql (PostgreSQL) 15.5
    [postgres@ServerName ~]$ postgres --product_version
    Platform V Pangolin DB {pangolin_version}
    [postgres@ServerName ~]$ postgres --version
    postgres (PostgreSQL) 15.5

Создание и запуск кластера баз данных​

  1. Убедитесь, что локаль установлена в en_US.UTF8, а также проверьте наличие и пустоту каталога PGDATA:

    [postgres@ServerName ~]$ locale
    LANG=en_US.UTF-8
    LC_CTYPE="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=en_US.UTF-8
    [postgres@ServerName ~]$ ls -ld $PGDATA
    drwx------ 2 postgres postgres 4096 Aug 22 20:50 /pgdata/0{major_version}/data
    [postgres@ServerName ~]$ ls -la $PGDATA
    total 8
    drwxr-xr-x 2 postgres postgres 4096 Aug 22 20:50 .
    drwxr-xr-x 3 postgres postgres 4096 Aug 22 16:37 ..
  2. Проинициализируйте кластер баз данных:

    [postgres@ServerName ~]$ initdb -k
    The files belonging to this database system will be owned by user "postgres". This user must also own the server process.
    The database cluster will be initialized with locale "en_US.UTF8".
    The default database encoding has accordingly been set to "UTF8".
    The default text search configuration will be set to "english".
    Data page checksums are enabled.
    ...
    initdb: warning: enabling "trust" authentication for local connections
    initdb: hint: You can change this by editing pg_hba.conf or using the option -A,
    or --auth-local and --auth-host, the next time you run initdb.
    Success. You can now start the database server using:
    pg_ctl -D /pgdata/0{major_version}/data -l logfile start

    Команда initdb создает кластер баз данных, в котором в том числе создаются каталоги с файлами баз данных, файлами общих системных таблиц, файлами журнала предзаписи, а также файлы с параметрами конфигурации.

    По умолчанию каталог создается в директории, указанной в переменной окружения PGDATA. Однако директория может быть явно указана с использованием ключа -D.

    В команде initdb был использован ключ -k для включения расчета контрольных сумм. Также для этого можно использовать опцию --data-checksums.

  3. Добавьте в файл конфигурации следующие настройки:

    [postgres@ServerName ~]$ vi $PGDATA/postgresql.conf
    listen_addresses = '*'
    port = 5432
    max_connections = 100
    superuser_reserved_connections = 3
    enabled_extra_auth_methods = 'peer, trust'

    Настройка listen_addresses = '*' устанавливает все имеющиеся интерфейсы в качестве разрешенных для соединений. Прослушиваться будет порт 5432, что задает настройка port (значение по умолчанию). Максимальное количество клиентских сессий — 100, что задано параметром max_connections. Из них три зарезервированы за суперпользователем — параметр superuser_reserved_connections. Специфичная для Pangolin настройка (ее нет в PostgreSQL) enabled_extra_auth_methods разрешает использовать методы аутентификации peer и trust.

  4. Убедитесь, что в конфигурационном файле аутентификации локальные соединения разрешены без проверок подлинности:

    [postgres@ServerName ~]$ egrep -v '^($|#)' $PGDATA/pg_hba.conf
    local all all trust
    host all all 127.0.0.1/32 trust
    host all all ::1/128 trust
    local replication all trust
    host replication all 127.0.0.1/32 trust
    host replication all ::1/128 trust

    В команде egrep используется регулярное выражение, удаляющее из вывода все пустые строки и строки, начинающиеся с решетки (комментарии). Метод аутентификации trust не использует каких-либо проверок аутентичности пользователей, разрешая все соединения.

  5. Запустите сервер, направив вывод отчета в каталог /pgerrorlogs/0{major_version}/. Используя psql с опцией -c, выполните команду SQL для вывода версии продукта:

    [postgres@ServerName ~]$ pg_ctl -l /pgerrorlogs/0{major_version}/pangolin-`date +%F_%T`.log start
    waiting for server to start.... done
    server started
    [postgres@ServerName ~]$ ps f -C postgres
    PID TTY STAT TIME COMMAND
    6184 ? Ss 0:00 /usr/pangolin-{major.minor}/bin/postgres
    6188 ? Ss 0:00 \_ postgres: checkpointer
    6189 ? Ss 0:00 \_ postgres: background writer
    6191 ? Ss 0:00 \_ postgres: idle sessions terminator
    6192 ? Ss 0:00 \_ postgres: walwriter
    6193 ? Ss 0:00 \_ postgres: autovacuum launcher
    6194 ? Ss 0:00 \_ postgres: autounite launcher
    6195 ? Ss 0:00 \_ postgres: integrity check launcher
    6196 ? Ss 0:00 \_ postgres: license checker
    6197 ? Ss 0:00 \_ postgres: logical replication launcher
    [postgres@ServerName ~]$ psql -c 'SELECT product_version()'
    product_version
    ---------------------------
    Platform V Pangolin DB {pangolin_version}
    (1 row)
  6. Не забудьте остановить сервер после окончания работы командой pg_ctl stop:

    [postgres@ServerName ~]$ pg_ctl stop
    waiting for server to shut down.... done
    server stopped
    [postgres@ServerName ~]$ exit
    logout

    Для выхода из сеанса — exit, logout или Ctrl+D.

Готово! Вы успешно установили, настроили и запустили СУБД Pangolin.

Самопроверка​

Вопрос 1

В bash выполнены следующие команды:

$ sudo mkdir -p /pgdata/06/data
$ sudo initdb -D /pgdata/06/data

Каким будет результат выполнения последней команды?

Вопрос 2

В какой момент выполняется создание конфигурационных файлов postgresql.conf и pg_hba.conf?

Вопрос 3

После установки Pangolin DB в bash выполнены следующие команды:

$ sudo su - postgres

postgres$ echo $HOME
/var/lib/postgres

postgres$ echo $PGHOME
/usr/pangolin

postgres$ echo $PGDATA
/pgdata/06/data

postgres$ pg_ctl -D /pangolin

Экземпляр с какой директорией кластера баз данных будет запускаться при выполнении последней команды?

Вопрос 4

Какие каталоги должны быть созданы вручную в процессе установки и инициализации кластера Pangolin DB?