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

Содержание

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

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

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

7.1. Подозрительные изменения

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

7.2. Проверка установки пакета

Вы должны убедиться, что пакет устанавливается. Команда debi(1) поможет протестировать установку всех сгенерированных двоичных пакетов.

$ sudo debi gentoo_0.9.12-1_i386.changes

Используя взятый из архива Debian файл Contents-i386, убедитесь, что в собранном пакете нет файлов, которые существуют в других пакетах, что может приводить к проблемам установки. Для этой задачи может пригодиться команда apt-file. Если совпадения есть, то решите эту проблему либо переименовав файл в своём пакете, либо выделив общий файл в отдельный пакет, от которого будут зависеть конфликтующие пакеты, или воспользуйтесь механизмом альтернатив (смотрите update-alternatives(1)) совместно с другими сопровождающими других пакетов, либо объявите параметр Conflicts с нужным значением в файле debian/control.

7.3. Проверка сценариев сопровождающего пакета

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

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

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

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

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

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

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

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

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

  • удалите его

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

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

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

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

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

7.4. Использование lintian

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

$ 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.

7.5. Команда debc

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

$ debc пакет.changes

7.6. Команда debdiff

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

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

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

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

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

7.7. Команда interdiff

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

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

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

7.8. Команда mc

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

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



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