Укажите порядок сборки RPM в макете

TLDR: обязательно обновляйте системную ОС, чтобы обеспечить согласованность с текущими файлами спецификаций.

Симптом

При перестроении SRPM PostgreSQL 11.1 с использованием mock сборка завершается с ошибкой:

BUILDSTDERR: /builddir/build/BUILD/postgresql-11.1/src/bin/psql/command.c:1814 undefined reference to `PQencryptPasswordConn`

Примечание: PQencryptPasswordConn — это функция libpq.so (предоставляется postgresql-devel-10.3-5.fc27.x86_64 в моей системе... за пределами фиктивной среды chroot). Если я не ошибаюсь, Postgresql SRPM создает postgresql-devel RPM вместе с другими.

Этапы воспроизведения

Я выполнил следующее, чтобы перестроить SRPM перед попыткой применить какие-либо исправления, которых еще нет в SRPM:

# Obtain SRPM source
git clone https://src.fedoraproject.org/rpms/postgresql.git
cd postgresql

# Download local copies of SRPM sources
wget $(spectool -S *.spec | awk '/^Source.*:\/\//{IFS=" "; print $2}')
# ...check SHAs of downloaded sources...

# Run SRPM-specific prep scripts
./generate-pdf.sh
./generate-sources.sh

# Generate the SRPM
mock --root=fedora-27-x86_64 --resultdir="./SRPMS" --buildsrpm --spec postgresql.spec --sources .

# >>> Everything seems to work fine up to this point <<<

# Build the RPM inside mock chroot
mock --root=fedora-27-x86_64 --rebuild ./SRPMS/postgresql-11.1-4.fc27.src.rpm

# !!! Fail here (with symptom above) !!!

Проблема

До сих пор мне не удалось mock загрузить соответствующие заголовки библиотеки libpq в среду chroot, чтобы убедиться, что rpmbuild строится против libpq, содержащего заголовок PQencryptPasswordConn (который, по-видимому, существует в моей системе вне среды сборки):

grep -lr "PQencryptPasswordConn" /usr/include
# /usr/include/libpq-fe.h

grep -lr "PQencryptPasswordConn" /var/lib/mock/fedora-27-x86_64/root/usr/include
# (Nothing returned)

При просмотре installed_pkgs.log mock было установлено следующее (последний из которых, я ожидаю, предоставит версию заголовков libpq):

postgresql-libs-9.6.10-3.fc27.x86_64
postgresql-devel-9.6.10-3.fc27.x86_64

Однако я не могу найти способ установить пакеты postgresql-* в среду chroot, содержащие обновленные заголовки библиотек.

Спросить

Поскольку предполагается, что postgresql SRPM собирает postgresql-devel RPM, я думаю, что mock потребуется собрать и установить postgresql-devel RPM в chroot, прежде чем rpmbuild попытается скомпилировать psql/command.c, чтобы последняя компиляция нашла соответствующие заголовки библиотек (если только процесс сборки не будет достаточно интеллектуальным). для определения новых библиотек, находящихся в стадии сборки).

Как мне лучше всего это сделать (я бы предпочел избегать нескольких вызовов mock для каждого пакета RPM, созданного из SRPM, если только это не единственный путь)?

Обратите внимание, что процесс сборки в моей системе порождает несколько процессов для параллельных компиляций.

Я также безуспешно пытался использовать mockchain —recurse.

Информация о системе

Linux 4.16.6-202.fc27.x86_64

person Whee    schedule 10.02.2019    source источник
comment
Не уверен, что именно здесь не так, но сборка PostgreSQL работает без установки PostgreSQL.   -  person Laurenz Albe    schedule 11.02.2019
comment
@LaurenzAlbe Полностью согласен - я не совсем уверен, почему mock извлекает пакеты postgresql-* для выполнения сборки ...   -  person Whee    schedule 11.02.2019


Ответы (1)


Первая подсказка: вы используете последнюю версию postgresql.spec, но пытаетесь собрать ее против довольно старой (фактически неподдерживаемой в настоящее время) версии 27 дистрибутива Fedora. Я бы посоветовал вам перейти на более новую версию Fedora или, по крайней мере, проверить ветку f27 в том же git-репозитории RPM.

Второй совет: мы изменили макет упаковки PostgreSQL в Fedora 30+. Мы выделили библиотеку (libpq.so) в отдельный пакет согласно объявление.

Как продолжить; всегда проверяйте соответствующую ветку в зависимости от того, с какой Fedora вы строите, и соответствующим образом корректируйте файл спецификации (в данном случае извлеките f27 и обновите до PostgreSQL 11.1).

JFTR (может помочь), уже существует модульная сборка PostgreSQL 11 для тестирования в сравнении с Fedora 28+, а скрипты сборки хранятся в отдельных ветвь stream-postgresql-11. Если повезет, вы сможете собрать эту ветку и против старой Fedora 27. Обратите внимание, что эта версия файла postgresql.spec немного сложна (так и должно быть, потому что мы создаем ее для разных версий Fedora).

person Pavel Raiskup    schedule 11.02.2019
comment
Спасибо Павел (а время шло незаметно — обязательно нужно обновить до f29). Мне потребуется некоторое время, чтобы пройти обновление сервера, но я вернусь после прохождения подсказок. Цените потраченное на это время! - person Whee; 12.02.2019
comment
На выходных потребовалось время, чтобы обновить до f29. Все работает так, как ожидалось. Спасибо. В интересах других, официальные вопросы по сборке Fedora RPM можно направлять по адресу Fedora Ask или freenode #fedora-devel. - person Whee; 19.02.2019