Сборка pg_repack для Ubuntu 16.04 LTS Xenial и PostgresPro 9.6.21.1

Настройка виртуальной машины

Для сборки pg_repack понадобится настроить виртуальную машину, аналогичную используемой на том сервере, где собираемся использовать утилиту. В рассматриваемом примере это система Ubuntu 16.04 LTS с кодовым именем Xenial. Получить образ установочного диска можно по ссылке ubuntu-16.04.7-server-amd64.iso.

Настройка репозиториев

Для настройки репозиториев поместим в файл /etc/apt/sources.list следующие строки:

deb http://mirror.ufanet.ru/ubuntu/ xenial main restricted
deb http://mirror.ufanet.ru/ubuntu/ xenial-updates main restricted
deb http://mirror.ufanet.ru/ubuntu/ xenial-security main restricted
deb http://mirror.ufanet.ru/ubuntu/ xenial universe
deb http://mirror.ufanet.ru/ubuntu/ xenial-updates universe
deb http://mirror.ufanet.ru/ubuntu/ xenial-security universe
deb http://mirror.ufanet.ru/ubuntu/ xenial multiverse
deb http://mirror.ufanet.ru/ubuntu/ xenial-updates multiverse
deb http://mirror.ufanet.ru/ubuntu/ xenial-security multiverse
deb http://mirror.ufanet.ru/ubuntu/ xenial-backports main restricted universe multiverse
deb http://repo.postgrespro.ru/pgpro-archive/pgpro-9.6.21.1/ubuntu/ xenial main

Также нужно установить в систему публичный GPG-ключ, которым подписан репозиторий PostgresPro:

# wget --quiet -O - http://repo.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO | apt-key add -

Отключаем установку предлагаемых зависимостей, создав файл /etc/apt/apt.conf.d/suggests со следующим содержимым:

APT::Install-Suggests "false";

Отключаем установку рекомендуемых зависимостей, создав файл /etc/apt/apt.conf.d/recommends со следующим содержимым:

APT::Install-Recommends "false";

Система apt сохраняет скачанные пакеты в каталоге /var/cache/apt/archives/, чтобы при необходимости не скачивать их снова. Файлы в этом каталоге по умолчанию не удаляются, что может привести к переполнению диска. Чтобы отключить размер файлов в этом каталоге 200 мегабайтами, создадим файл /etc/apt/apt.conf.d/cache со следующим содержимым:

APT::Cache-Limit "209715200";

Создадим файл /etc/apt/apt.conf.d/timeouts с настройками таймаутов обращения к репозиториям:

Acquire::http::Timeout "5";
Acquire::https::Timeout "5";
Acquire::ftp::Timeout "5";

При необходимости, если репозитории доступны через веб-прокси, можно создать файл /etc/apt/apt.conf.d/proxy, прописав в него прокси-серверы для протоколов HTTP, HTTPS и FTP:

Acquire::http::Proxy "http://10.0.25.3:8080";
Acquire::https::Proxy "http://10.0.25.3:8080";
Acquire::ftp::Proxy "http://10.0.25.3:8080";

Обновим список пакетов, доступных через репозиторий:

# apt-get update

Обновим систему с использованием самых свежих пакетов, доступных через репозитории:

# apt-get upgrade
# apt-get dist-upgrade

Установка пакетов

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

# apt-get install unzip postgrespro-server-dev-9.6 make gcc lib64readline6-dev checkinstall fakeroot

Сборка утилиты pg_repack

Находим на странице pg_repack: PostgreSQL module for data reorganization / PostgreSQL Extension Network ссылку на скачивание утилиты и скачиваем утилиту по этой ссылке:

$ wget https://api.pgxn.org/dist/pg_repack/1.4.7/pg_repack-1.4.7.zip

Распаковываем архив:

$ unzip pg_repack-1.4.7.zip

Переходим в каталог с распакованными файлами и выполняем сборку:

$ cd pg_repack-1.4.7
$ make

Создадим каталог, который потребуется для сборки:

# mkdir -p /usr/share/postgresql/9.6/extension

Создадим описание будущего deb-пакета:

$ echo -n "Reorganize tables in PostgreSQL databases with minimal locks" > description-pak

Создадим каталог документации deb-пакета и поместим в него файлы документации:

$ mkdir doc-pak
$ cp COPYRIGHT README.rst doc/*.rst doc-pak/

Этап установки выполним через утилиты fakeroot для имитации прав пользователя root и checkinstall для сборки deb-пакета:

$ fakeroot checkinstall --pkgname='postgrespro-9.6-repack' --pkgrelease='ubuntu-xenial-1' --maintainer='vladimir@stupin.su' --requires='postgrespro-9.6' -y -D --install=no --fstrans=yes make install

Где дополнительные опции утилиты checkinstall имеют следующий смысл:

  • -D - необходимо собрать deb-пакет,
  • -y - отключение диалогового режима работы утилиты,
  • --install=no - кроме сборки пакета выполнить установку в систему,
  • --pkgname='postgrespro-9.6-repack' - имя пакета. В данном случае явным образом обозначаю для какой версии PostgreSQL собран пакет,
  • --pkgrelease='ubuntu-xenial-1' - релиз пакета. В релизе пакета явным образом обозначаю, для какой операционной системы был собран пакет,
  • --maintainer='vladimir@stupin.su' - почтовый ящик ментейнера, сопровождающего этот deb-пакет,
  • --requires='postgrespro-9.6' - список зависимостей deb-пакета. В данном случае указана зависимость только от одного пакета postgrespro-9.6,
  • --fstrans=yes - использовать для сборки контейнер LXC.

Получившийся deb-пакет можно взять по ссылке postgrespro-9.6-repack 1.4.7-ubuntu-xenial-1 amd64.deb.

Использованные материалы