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-devel
RPM в chroot до rpmbuild
пытается скомпилировать psql/command.c
, чтобы последняя компиляция нашла соответствующие заголовки библиотек (если процесс сборки не достаточно умен, чтобы идентифицировать новые библиотеки, находящиеся в процессе сборки).
Как я могулучше всего это сделать (предпочтительнее избегать нескольких вызовов mock
для каждого RPM-пакета, созданного из SRPM, если только это не единственный путь)?
Обратите внимание, что процесс сборки в моей системе порождает несколько процессов параллельно
Я также пытался использовать mockchain —recurse
безуспешно.
Информация о системе
Linux 4.16.6-202.fc27.x86_64