Укажите порядок сборки RPM в макете - PullRequest
0 голосов
/ 11 февраля 2019

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

Симптом

Когдапри перестройке PostgreSQL 11.1 SRPM с использованием mock сборка завершается неудачно с помощью:

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

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

Действия по воспроизведению

Я выполнил следующее, чтобы перестроить 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)

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

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

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

Ask

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

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

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

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

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

Linux 4.16.6-202.fc27.x86_64

1 Ответ

0 голосов
/ 11 февраля 2019

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

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

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

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

...