Глава 7. Проверка пакета на наличие ошибок

Содержание

7.1. Подозрительные изменения
7.2. Проверка установки пакета
7.3. Проверка сценариев сопровождающего пакета
7.4. Использование lintian
7.5. Команда debc
7.6. Команда debdiff
7.7. Команда interdiff
7.8. Команда mc

The rewrite of this tutorial document with updated contents and more practical examples is available as Guide for Debian Maintainers. Please use this new tutorial as the primary tutorial document.

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

Лучше проверять пакет на другой машине (не на той, на которой он собирался). Обращайте пристальное внимание на предупреждения и сообщения об ошибках, получаемые в результате описываемых тестов.

Если вы обнаружите новые автоматически сгенерированные файлы заплат debian-changes-* в каталоге debian/patches после сборки своего неродного пакета Debian в формате 3.0 (quilt), то, вероятнее всего, вы неумышленно изменили какие-то файлы или это сделал авторский сценарий сборки. Если это ваша ошибка, исправьте её. Если это сценарий, то исправьте источник ошибки с помощью dh-autoreconf, как это описано в Раздел 4.4.3, «Доработка файла rules», или обойдите её с помощью source/options, который описан в Раздел 5.24, «Файл source/options».

You must test your package for whether it installs without problems. The debi(1) command helps you to test installing all the generated binary packages.

$ sudo debi gentoo_0.9.12-1_i386.changes

To prevent installation problems on different systems, you must make sure that there are no filenames conflicting with other existing packages, using the Contents-i386 file downloaded from the Debian archive. The apt-file command may be handy for this task. If there are collisions, please take action to avoid this real problem, whether by renaming the file, moving a common file to a separate package that multiple packages can depend on, using the alternatives mechanism (see update-alternatives(1)) in coordination with the maintainers of other affected packages, or declaring a Conflicts relationship in the debian/control file.

Все сценарии сопровождающего (preinst, prerm, postinst и postrm) сложны в написании, если только для их автоматической генерации не применялись программы из пакета debhelper. Поэтому не пользуйтесь этими сценариями, если вы начинающий сопровождающий (смотрите Раздел 5.18, «Файлы {pre|post}{inst|rm}»).

Если ваш пакет использует эти нетривиальные сценарии сопровождающего, убедитесь, что не только установка, но и удаление, вычистка и обновление пакета также проходят успешно. Многие ошибки в таких сценариях проявляются при удалении или вычистке. Для проверки используйте команду dpkg:

$ sudo dpkg -r gentoo
$ sudo dpkg -P gentoo
$ sudo dpkg -i gentoo_версия-редакция_i386.deb

Следует выполнить следующие шаги:

  • установите предыдущую версию (если необходимо)

  • обновите пакет с предыдущей версии

  • откатитесь на предыдущую версию (по желанию)

  • вычистите пакет

  • установите новый пакет

  • удалите его

  • установите опять

  • вычистите пакет

Если это ваш первый пакет, то для тестирования вам понадобятся ещё пакеты-пустышки различных версий.

Не забудьте проверить наличие в Debian предыдущей версии программы, которую вы пакетируете. В этом случае пользователи, у которых установлена предыдущая версия, могут захотеть обновить пакет и вам следует убедиться в отсутствии проблем при таком обновлении. Также протестируйте обновления и с этой версии.

Хотя откат к предыдущей версии официально не поддерживается, будет здорово обеспечить такую возможность.

Запустите lintian(1), передав ей параметром файл .changes. Команда lintian выполняет множество тестовых сценариев, проверяющих наличие типичных ошибок пакетирования [75].

$ lintian -i -I --show-overrides gentoo_0.9.12-1_i386.changes

Разумеется, следует заменить имя файла .changes на то, которое было сгенерировано для вашего пакета. В результатах команды lintian используются следующие метки:

  • E: — ошибка; нарушение политики или ошибка пакетирования.

  • W: — предупреждение; возможное нарушение политики или ошибка пакетирования.

  • I: — для информации; сведения о некоторых аспектах пакетирования.

  • N: — замечание; уточнение, помогающее при отладке.

  • O: — скрытые сообщения; информация, скрываемая на основе файла lintian-overrides, но показываемая при указании параметра --show-overrides.

Если вы видите предупреждения — исправьте пакет, чтобы их не было или убедитесь, что это нормально. Если предупреждения излишни — настройте файл lintian-overrides, как описано в Раздел 5.14, «Файлы {пакет.,source/}lintian-overrides».

Заметим, что команда debuild(1) или pdebuild(1) позволяет собрать пакет с помощью dpkg-buildpackage и сразу проверить его lintian.

Вы можете просмотреть список файлов в двоичном пакете Debian с помощью команды debc(1).

$ debc пакет.changes

Вы можете сравнить содержимое файлов двух пакетов исходного кода Debian с помощью команды debdiff(1).

$ debdiff старый-пакет.dsc новый-пакет.dsc

Также с помощью команды debdiff(1) вы можете сравнить списки файлов двух двоичных пакетов Debian.

$ debdiff старый-пакет.changes новый-пакет.changes

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

Команда interdiff(1) позволяет сравнить два файла diff.gz. Это полезно для проверки отсутствия сделанных сопровождающим нечаянных правок исходного кода при обновлении пакетов в старом формате 1.0.

$ interdiff -z старый-пакет.diff.gz новый-пакет.diff.gz

В новой версии формата пакетов с исходным кодом 3.0 изменения хранятся в нескольких файлах заплат (описано в Раздел 5.25, «Файлы patches/*»). Вы можете отследить изменения каждого файла debian/patches/* также с помощью interdiff.

Большинство этих файловых проверок могут быть сделаны интуитивно понятным образом с помощью файлового менеджера типа mc(1), который позволяет просматривать содержимое не только файлов пакетов *.deb, но и таких файлов как *.udeb, *.debian.tar.gz, *.diff.gz и *.orig.tar.gz.

Внимательно следите за лишними ненужными файлами или файлами нулевой длины как в двоичном пакете, так и в пакете с исходным кодом. Зачастую, мусор не вычищается должным образом; подправьте ваш файл rules, чтобы исправить это.



[75] Вам не потребуется указывать параметр lintian -i -I --show-overrides, если вы настроили файл настройки /etc/devscripts.conf или ~/.devscripts, как это было описано в Раздел 6.3, «Команда debuild».