Вопрос или проблема
Я создаю .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:
- Создайте необходимые директории в вашем пакете. Путь должен совпадать с установленной системой каталогов Debian. Путь может быть следующим:
package/usr/share/doc/<имя_вашего_пакета>
- Убедитесь, что файл changelog находится по пути:
package/usr/share/doc/<имя_вашего_пакета>/changelog.Debian
- Упакуйте его в формате gzip:
gzip changelog.Debian
Вы получите файл
changelog.Debian.gz
.
Применение
На этом этапе у вас есть правильная структура вашего проекта. Переместите ваш changelog
следующим образом и примените следующие командные операторы:
-
Переместите 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
-
Убедитесь, что структура папок соответствует требуемой:
package/ └── usr/ └── share/ └── doc/ └── msodbcsql/ └── changelog.Debian.gz
-
Запустите сборку пакета:
dpkg-deb --build package
После выполнения всех шагов выше, запустите lintian для проверки. Ошилки debian-changelog-file-missing
и unknown-control-file changelog
должны исчезнуть, так как ваш changelog теперь правильно размещен и упакован в формате, соответствующем стандартам Debian.
Эти изменения обеспечат корректную структуру вашего deb-пакета и предотвратят возникновение ошибок, связанных с логом изменений, что лучший способ поддерживать документацию вашего пакета и обеспечивать пользователям доступ к полному списку изменений и обновлений.