Я новичок в упаковке и пытаюсь упаковать библиотеку, которую использует одна из моих программ. Библиотека называется Plytapus и используется программой PerfectTIN. Вы можете найти исходный код для них обоих на моем сайте GitHub, https://github.com/phma/ , и на сайте PerfectTIN, http://bezitopo.org/perfecttin/ download.html . Пакеты с исходным кодом находятся на https://launchpad.net/~phma-a/+archive/ubuntu/testing .
Я попытался собрать пакет PerfectTIN после добавления plytapus-dev к требованиям сборки (с установленным только plytapus, он был собран без plytapus) и получил неудачу. Оказалось, что в пакете plytapus отсутствует файл .so. Я отредактировал файлы в каталоге debian и попробовал еще раз.
changelog
plytapus (0.6.0-3) focal; urgency=medium
* Remove extra asterisk from plytapus1.install
-- Pierre Abbat <phma@bezitopo.org> Sun, 20 Dec 2020 14:02:52 -0500
plytapus (0.6.0-2) focal; urgency=medium
* Add cmake as dependency
-- Pierre Abbat <phma@bezitopo.org> Mon, 23 Nov 2020 03:42:16 -0500
plytapus (0.6.0-1) focal; urgency=medium
* Initial release
-- Pierre Abbat <phma@bezitopo.org> Tue, 17 Nov 2020 02:18:06 -0500
plytapus1.install
usr/lib/lib*.so.*
usr/lib/lib*.a
control
Source: plytapus
Priority: optional
Maintainer: Pierre Abbat <phma@bezitopo.org>
Build-Depends: debhelper-compat (= 12), cmake (>= 3.4)
Standards-Version: 4.4.0
Section: libs
Homepage: https://github.com/phma/plytapus
#Vcs-Browser: https://salsa.debian.org/debian/plytapus
#Vcs-Git: https://salsa.debian.org/debian/plytapus.git
Package: plytapus-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Depends: plytapus (= ${binary:Version}), ${misc:Depends}
Description: Library for reading and writing PLY files
Plytapus is a C++ library for reading and writing PLY (Stanford polygon)
files.
.
This package provides the header files.
Package: plytapus
Architecture: any
Multi-Arch: same
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Library for reading and writing PLY files
Plytapus is a C++ library for reading and writing PLY (Stanford polygon)
files.
.
This package provides the shared and static library.
Вот соответствующий раздел журнала сборки:
make[2]: Leaving directory '/home/phma/package/plytapus-0.6.0/obj-x86_64-linux-gnu'
Install the project...
/usr/bin/cmake -P cmake_install.cmake
-- Install configuration: "None"
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/lib/libplytapus.so.0.6.0
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/lib/libplytapus.so
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/lib/libplytapus.a
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/include/plytapus.h
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/include/plytapus/config.h
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/include/plytapus/textio.h
make[1]: Leaving directory '/home/phma/package/plytapus-0.6.0/obj-x86_64-linux-gnu'
dh_install
dh_installdocs
dh_installchangelogs
dh_perl
dh_link
dh_strip_nondeterminism
dh_compress
dh_fixperms
dh_missing
dh_missing: usr/lib/libplytapus.so.0.6.0 exists in debian/tmp but is not installed to anywhere
dh_missing: usr/lib/libplytapus.a exists in debian/tmp but is not installed to anywhere
The following debhelper tools have reported what they installed (with files per package)
* dh_install: plytapus (0), plytapus-dev (3)
* dh_installdocs: plytapus (0), plytapus-dev (0)
If the missing files are installed by another tool, please file a bug against it.
When filing the report, if the tool is not part of debhelper itself, please reference the
"Logging helpers and dh_missing" section from the "PROGRAMMING" guide for debhelper (10.6.3+).
(in the debhelper package: /usr/share/doc/debhelper/PROGRAMMING.gz)
Be sure to test with dpkg-buildpackage -A/-B as the results may vary when only a subset is built
For a short-term work-around: Add the files to debian/not-installed
dh_dwz
dh_strip
dh_makeshlibs
dh_shlibdeps
dh_installdeb
dh_gencontrol
dpkg-gencontrol: warning: Depends field of package plytapus: substitution variable ${shlibs:Depends} used, but is not defined
dh_md5sums
dh_builddeb
dpkg-deb: building package 'plytapus-dev' in '../plytapus-dev_0.6.0-3_amd64.deb'.
dpkg-deb: building package 'plytapus' in '../plytapus_0.6.0-3_amd64.deb'.
Как я могу исправить это, чтобы Файлы .so и .a находятся в пакете plytapus?
Повторяя мой ответ из https://lists.launchpad.net/launchpad-users/msg07147.html:
.../usr/lib/lib*.so.*
, но в той версии вашего пакета, которую я скачал debian/plytapus1.install
, написано usr/lib/*/lib *.so.*
, а не usr/lib/lib*.so.*
, как вы указали выше. Вам нужно удалить бит /*
. (Я предполагаю, что вы использовали dh-make
, и предполагается, что исходная конфигурация cmake
следует рекомендациям в https://wiki.debian.org/Multiarch. /Implementation#CMake, но этот пакет этого не делает; поэтому вам нужно либо сделать так, чтобы упаковка ожидала пути до мультиархитектуры, либо изменить исходную конфигурацию cmake
, чтобы она была дружественной к мультиархитектуре, как в этом wiki.) debian/control
имеет имя пакета библиотеки времени выполнения как plytapus
, что означает, что debian/plytapus1.*
полностью игнорируются. SONAME
, который в данном случае равен «0.6.0» (вы можете использовать objdump -p
в файле .so, чтобы увидеть его). Вам нужно обязательно изменить это каждый раз, когда изменяется исходный SONAME
. SONAME
явным образом в исходной конфигурации cmake
и просто оставляете cmake
на догадку. Возможно, это непреднамеренно, так как это означает, что каждый новый выпуск основной ветки разработки может быть полностью несовместим с ABI с каждым предыдущим. Если это не то, что вы имели в виду, то вы должны установить SOVERSION
в восходящей конфигурации cmake
(я думаю, я не очень хорошо разбираюсь в cmake
) и, возможно, прочитать о том, что вам нужно делать при поддержке интерфейса библиотеки C++. Файлы символов являются полезной дисциплиной, если это возможно. Итак, собрав все вместе, вы должны удалить /*
из debian/plytapus1.install
. Вы должны переименовать debian/plytapus1.install
в debian/libplytapus0.6.0.install
и debian/plytapus-dev.install
в debian/libplytapus- dev.install
.Вы должны изменить две строки «Пакет:» в debian/control
с plytapus-dev
и plytapus
на libplytapus-dev
и libplytapus0.6.0
, а также настроить libplytapus-Строка Depends dev
для соответствия. Вы также можете полностью удалить debian/*.dirs
, так как они не нужны. И я бы порекомендовал разобраться с ситуацией с вышестоящим ABI, после чего вам нужно будет снова настроить имена пакетов библиотек, чтобы они соответствовали (если ваша библиотека действительно имеет довольно стабильный ABI, тогда вы будете вознаграждены тем, что не нужно менять имена бинарных пакетов некоторое время).
Я думаю, это из-за неправильного имени файла. Попробуйте переименовать plytapus1.install
в plytapus.install
.