Создание .deb: dpkg-genbuildinfo: .buildinfo не имеет смысла

Вопрос или проблема

Итак, я тоже хочу создать .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 для детального отслеживания процесса.

Оцените материал
Добавить комментарий

Капча загружается...