Вопрос или проблема
Итак, я тоже хочу создать .deb файл. Сейчас я столкнулся с этой ошибкой:
dh_installdeb
dpkg-genbuildinfo
dpkg-genbuildinfo: error: binary build with no binary artifacts found; .buildinfo is meaningless
Мне трудно найти информацию по этому вопросу.
Конечно, мои рецепты могут быть неверными, поэтому буду признателен за любую проверку!
Я строю .deb из исходников.
В папке debian/
у меня:
- compat to 10
- copyright
- changelog
- control
- rules
Мой файл control:
Source: foo
Maintainer: foo developers
Section: Web Software
Priority: extra
Version: 1.3.1
Standards-Version: 1.3.1
Build-Depends: debhelper (>= 8.0.0)
Package: foo
Architecture: any
Priority: extra
Homepage: http://foo.com
Depends: sbcl (>= 1.3),
${shlibs:Depends},
libwebkit2gtk-4.0-dev (>= 2.24),
default-dbus-session-bus | dbus-session-bus,
glib-networking,
sqlite,
gsettings-desktop-schemas,
libfixposix,
gstreamer,
gst-plugins-base-1.0,
xclip,
${misc:Depends}
Description: foo
foo is foo.
Мой файл rules:
#!/usr/bin/make -f
DH_VERBOSE = 1
%:
dh $@
NAME=foo
VERSION=1.3.1
DESTDIR=$(CURDIR)/debian/$(NAME)/
build:
dh_testdir
dh_testroot
dh_prep
make all
# Я быстро попробовал это
# override_dh_auto_build:
# dh_auto_build -- all
# без видимого эффекта
# (я хочу вызвать `make all` моего Makefile).
binary:
dh_testdir
dh_testroot
dh_installchangelogs
dh_prep
echo $(DESTDIR)
make install DESTDIR=$(DESTDIR)
dh_installdeb
# dh_gencontrol
# dh_md5sums
# dh_builddeb # только для бинарных пакетов?
# override_dh_auto_binary:
# make install
clean:
dh_testdir
dh_testroot
# make clean DESTDIR=$(DESTDIR)
# dh_clean
(обратите внимание, что я пытался использовать override_dh_auto_build
без видимого успеха. Я хочу вызвать make all
моего Makefile).
Я запускаю всё с
sudo debuild -us -uc
Я вижу шаги компиляции, до сообщения об ошибке.
Я вижу свой бинарный файл под debian/foo/usr/local/bin
.
Есть директория debian/foo/DEBIAN/
, но она пуста.
Обратите внимание, что когда я запускаю только целевой файл с помощью
sudo fakeroot debian/rules binary
он завершается нормально:
for i in 16 32 128 256 512; do \
mkdir -p "/home/vince/work/foo/debian/foo//usr/local/share/icons/hicolor/${i}x${i}/apps/" ; \
cp -f assets/foo_${i}x${i}.png "/home/vince/work/foo/debian/foo//usr/local/share/icons/hicolor/${i}x${i}/apps/foo.png" ; \
done
make[1]: Leaving directory '/home/vince/work/foo'
dh_installdeb
# dh_gencontrol
# dh_md5sums
# dh_builddeb # только бинарные пакеты?
# make install
Спасибо!
Документация, которую я просматриваю:
Я понял, что определение цели build
с большим количеством правил “dh_” — это не то.
Я переписал это с помощью
override_dh_auto_build:
$(MAKE) all
Я также добавил
override_dh_usrlocal:
echo
чтобы избежать
desktop is not a directory
ошибки, которую я не понимаю, и мой .deb создается нормально.
Однако в конце я всё ещё получаю
dpkg-genbuildinfo: error: badly formed line in files list file, line 2
Ответ или решение
Создание .deb-пакета из исходных файлов зачастую представляет собой сложный процесс, особенно если вы ранее не сталкивались с этой задачей. Основной целью является успешное создание дистрибутивного пакета, что включает сборку бинарного артефакта и корректное выполнение всех скриптов, необходимых для завершения процесса. Возникшая у вас ошибка при использовании dpkg-genbuildinfo, свидетельствующая о том, что "binary build with no binary artifacts found; .buildinfo is meaningless", требует детального рассмотрения и исправления.
Теория
Чтобы понять суть ошибки, вам необходимо осознать, что .deb-пакет должен содержать все необходимые бинарные файлы, собранные из исходного кода. Процесс сборки управляется системой debhelper, которая предоставляет набор инструментов, упрощающих создание Debian пакетов. Один из этих инструментов — dpkg-genbuildinfo, предназначенный для создания файла .buildinfo, содержащего информацию о всех скомпилированных бинарных пакетах. Если он не находит никаких бинарных файлов, то и создаваемый файл теряет смысл, что и приводит к ошибке.
Пример
В вашем случае контрольный файл и файл правил требуют доработки. Приведённый ранее файл правил не совсем корректно обрабатывает процесс сборки и создания бинарного пакета. Обычно, стандартный процесс сборки включает выполнение следующих действий:
build
: компиляция исходного кода в бинарныйinstall
: установка бинарного файла и других необходимых ресурсов в корректные директорииbinary
: создание .deb-пакета
Ваш файл правил должен включать все эти этапы, и каждый из них должен быть выполнен корректно для обеспечения успешного создания бинарного артефакта.
Применение
Прежде всего, рекомендуется воспользоваться override для dh_auto_build
и dh_auto_install
, чтобы убедиться, что сборка и установка выполняются правильно. Ваш новый подход с использованием override_dh_auto_build: $(MAKE) all
уже шаг в правильном направлении, но также следует убедиться, что используется корректный инструмент для установки — например, прописав аналогичный override_dh_auto_install
.
Также следует пересмотреть функции как dh_usrlocal
, чтобы исключить проблемы с разрешениями и доступом к необходимым директориям. Вы неоднократно сталкивались с ошибками из-за некорректно определённых директорий, таких как "desktop is not a directory" — это говорит о том, что путь к установке файлов или структура установочных директорий указана неверно.
Базовая структура правил может выглядеть так:
#!/usr/bin/make -f
DH_VERBOSE = 1
%:
dh $@
override_dh_auto_build:
$(MAKE) all
override_dh_auto_install:
$(MAKE) install DESTDIR=$(CURDIR)/debian/foo
override_dh_usrlocal:
true
clean:
dh_clean
$(MAKE) clean
Кроме того, важно убедиться, что все необходимые файлы, такие как changelog, control и copyright, находятся в директории debian и правильно настроены.
Обратите внимание на потенциальные проблемы в файле control. Некорректные зависимости или стандартные поля могут привести к сбоям на этапе генерации control-файлов. Убедитесь, что все зависимости прописаны правильно и удовлетворяют требованиям debhelper.
После корректировки всех аспектов сборки рекомендуется выполнить процесс упаковки в локальной среде без использования sudo
, учитывая, что частое использование прав суперпользователя может скрыть реальные ошибки доступа и разрешений.
Заключение
Рекомендуется внимательно пройтись по всем этапам сборки, обратив особое внимание на соответствие каждой части процесса Debian Policy. Систематическое тестирование каждой стадии, применение подходящих overrides и корректная настройка ключевых файлов должны в результате устранить упомянутую ошибку и позволить успешно создать .deb-пакет. Если после всех исправлений ошибка сохраняется, рассмотрите возможность использования инструментов отладки и логирования внутри make-файлов через set -x
для детального отслеживания процесса.