dpkg-deb build игнорирует/неправильно интерпретирует changelog.

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

Я создаю .deb пакет, используя:

dpkg-deb --build package

Каталог “package” содержит другой каталог под названием DEBIAN, в котором есть журнал изменений, но в результате в пакете нет changelog.Debian.gz, и если я проверяю пакет с помощью lintian, я получаю следующие ошибки:

E: msodbcsql: debian-changelog-file-missing
W: msodbcsql: unknown-control-file changelog

Я не знаю, имеет ли это отношение, но права на журнал изменений следующие:

-rwxr-xr-x 1 maximk maximk  159 May 10 11:23 changelog

Почему “changelog” считается неизвестным управляющим файлом, а не, как вы знаете, журналом изменений?

В бинарном пакете changelog не является управляющим файлом, это просто часть содержимого пакета. С dpkg-deb -b это означает, что вы должны поместить changelog непосредственно в usr/share/doc/${package}/changelog.Debian.gz (или .../changelog.gz для нативного пакета).

Более конкретно, поскольку вы собираете свой пакет в каталоге package, вместо того чтобы помещать ваш changelog в package/DEBIAN/changelog, вы помещаете его в package/usr/share/doc/package/changelog.Debian.gz, и собираете ваш пакет как раньше с dpkg-deb -b package.

В исходных пакетах changelog размещается в debian/changelog и обрабатывается с помощью dh_installchangelogs.

Ответ или решение

Проблема, с которой вы столкнулись при сборке deb-пакета, связана с неправильным расположением файла changelog и его трактовкой системой сборки пакетов. Давайте детально разберем, как должна происходить работа с changelog в процессе создания deb-пакета и как избежать ошибок, указанных при использовании утилиты lintian.

Теория

Сначала разберем, как работают deb-пакеты и где должен находиться changelog. В deb-пакете существуют два типа файлов: контролируемые и полезные (payload). Контролируемые файлы содержатся в каталоге DEBIAN и включают такие файлы, как control, preinst, postinst и т.д. Эти файлы используются для управления процессом установки пакета, определяют зависимости, хранят скрипты, которые выполняются при установке и удалении пакета.

Файл changelog, напротив, не является контролируемым файлом. Он относится к содержимому пакета и обычно располагается в каталоге /usr/share/doc/${package}. Согласно стандартам, changelog должен быть упакован в формате gzip и называться changelog.Debian.gz. Правильное расположение файла changelog обеспечивает его доступность для пользователей, которые устанавливают ваш пакет, поскольку системные администраторы и пользователи обычно смотрят в этот файл, чтобы ознакомиться с историей изменений и обновлений пакета.

Пример

В вашем случае возникла ошибка из-за того, что вы поместили файл changelog в директорию DEBIAN, которая предназначена исключительно для контролируемых файлов пакета. Это стало причиной ошибки от lintian: unknown-control-file changelog, которая указывает на то, что система ожидает находить только известные ей файлы в каталоге DEBIAN. Отсутствие файла changelog в ожидаемом месте также подало сигнал о его отсутствии, и это привело к ошибке debian-changelog-file-missing.

Рассмотрим правильный процесс размещения файла changelog:

  1. Создайте необходимые директории в вашем пакете. Путь должен совпадать с установленной системой каталогов Debian. Путь может быть следующим:
    package/usr/share/doc/<имя_вашего_пакета>
  2. Убедитесь, что файл changelog находится по пути:
    package/usr/share/doc/<имя_вашего_пакета>/changelog.Debian
  3. Упакуйте его в формате gzip:
    gzip changelog.Debian

    Вы получите файл changelog.Debian.gz.

Применение

На этом этапе у вас есть правильная структура вашего проекта. Переместите ваш changelog следующим образом и примените следующие командные операторы:

  1. Переместите changelog:

    mkdir -p package/usr/share/doc/msodbcsql
    mv package/DEBIAN/changelog package/usr/share/doc/msodbcsql/changelog.Debian
    gzip package/usr/share/doc/msodbcsql/changelog.Debian
  2. Убедитесь, что структура папок соответствует требуемой:

    package/
    └── usr/
       └── share/
           └── doc/
               └── msodbcsql/
                   └── changelog.Debian.gz
  3. Запустите сборку пакета:

    dpkg-deb --build package

После выполнения всех шагов выше, запустите lintian для проверки. Ошилки debian-changelog-file-missing и unknown-control-file changelog должны исчезнуть, так как ваш changelog теперь правильно размещен и упакован в формате, соответствующем стандартам Debian.

Эти изменения обеспечат корректную структуру вашего deb-пакета и предотвратят возникновение ошибок, связанных с логом изменений, что лучший способ поддерживать документацию вашего пакета и обеспечивать пользователям доступ к полному списку изменений и обновлений.

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

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