Сборка pg_repack для Debian 8.11.1 LTS Jessie и PostgresPro 9.5.14.1
Настройка виртуальной машины
Для сборки pg_repack понадобится настроить виртуальную машину, аналогичную используемой на том сервере, где собираемся использовать утилиту. В рассматриваемом примере это система Debian 8.11.1 LTS с кодовым именем Jessie. Получить образ установочного диска можно по ссылке debian-8.11.1-amd64-netinst.iso.
Настройка репозиториев
Для настройки репозиториев поместим в файл /etc/apt/sources.list
следующие строки:
deb http://archive.debian.org/debian/ jessie main contrib non-free
deb http://archive.debian.org/debian-security/ jessie/updates main contrib non-free
deb http://repo.postgrespro.ru/pgpro-9.5/debian jessie main
Также нужно установить в систему публичный GPG-ключ, которым подписан репозиторий PostgresPro:
# wget --quiet -O - http://repo.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO | apt-key add -
Поскольу мы установили устаревший релиз, отключим проверку актуальности репозиториев, создав файл /etc/apt/apt.conf.d/valid
со следующим содержимым:
Acquire::Check-Valid-Until "false";
Отключаем установку предлагаемых зависимостей, создав файл /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.5 make gcc libicu-dev libreadline-dev checkinstall fakeroot
Т.к. пакет postgrespro-server-dev-9.5
зависит от пакетов libpq-dev
и postgrespro-common
, в обоих из которых содержится файл /usr/bin/pg_config
, то в процессе установки возникает ошибка следующего вида:
Unpacking postgrespro-common (191-1.jessie) ...
dpkg: error processing archive /var/cache/apt/archives/postgrespro-common_191-1.jessie_all.deb (--unpack):
trying to overwrite '/usr/bin/pg_config', which is also in package libpq-dev 9.5.20.1-1.jessie.pro
То для её решения я воспользовался следующей последовательностью действий:
# apt-get purge postgrespro-server-dev-9.5 postgrespro-common libpq-dev
# rm /usr/bin/pg_config.libpq-dev
# apt-get install postgrespro-common
# dpkg-divert --remove /usr/bin/pg_config
# dpkg -i --force-overwrite /var/cache/apt/archives/libpq-dev_9.5.20.1-1.jessie.pro_amd64.deb
# apt-get install postgrespro-server-dev-9.5
Сборка утилиты 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.5
Создадим описание будущего 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.5-repack' --pkgrelease='debian-jessie-1' --maintainer='vladimir@stupin.su' --requires='postgrespro-9.5' -y -D --install=no --fstrans=yes make install
Где дополнительные опции утилиты checkinstall
имеют следующий смысл:
-D
- необходимо собрать deb-пакет,-y
- отключение диалогового режима работы утилиты,--install=no
- кроме сборки пакета выполнить установку в систему,--pkgname='postgrespro-9.5-repack'
- имя пакета. В данном случае явным образом обозначаю для какой версии PostgreSQL собран пакет,--pkgrelease='debian-jessie-1'
- релиз пакета. В релизе пакета явным образом обозначаю, для какой операционной системы был собран пакет,--maintainer='vladimir@stupin.su'
- почтовый ящик ментейнера, сопровождающего этот deb-пакет,--requires='postgrespro-9.5'
- список зависимостей deb-пакета. В данном случае указана зависимость только от одного пакета postgrespro-9.6,--fstrans=yes
- использовать для сборки контейнер LXC.
Получившийся deb-пакет можно взять по ссылке postgrespro-9.5-repack 1.4.7-debian-jessie-1 amd64.deb.