Добавление postinst в выпуск debian

#ubuntu #debian #ros #bloom

#убунту #debian #розенкранц #блум

Вопрос:

У меня есть пакет debian, который уже выпущен, но я пытаюсь применить к нему шаг после установки, и он не выполняется. Репозиторий моего пакета и репозиторий выпуска находятся по ссылкам ниже, соответственно: https://github.com/shadow-robot/sr_hand_detector/blob/melodic-devel/scripts/postinst
https://github.com/shadow-robot/sr_hand_detector-release

Как вы можете видеть по первой ссылке, у меня есть файл postinst в папке scripts. Во время выпуска у меня только что был этот скрипт, который, как я теперь понимаю, не вставил бы скрипт в мой выпуск debian. Поэтому только сегодня я внес дополнительные изменения, т.Е. Я вручную зафиксировал и перенес файл postinst в ветку debian / melodic / sr_hand_detector репозитория release, как показано здесь: https://github.com/shadow-robot/sr_hand_detector-release/tree/debian/melodic/sr_hand_detector/debian

Тем не менее, я вижу, что сценарий все еще не применяется, когда я делаю sudo apt install шаг. Поэтому мой вопрос заключается в следующем: какие дополнительные шаги я должен выполнить, чтобы четко выполнить этап после установки для моей версии debian. Нужно ли мне просто создать другой выпуск версии и сделать PR для rosdistro, нужно ли мне только дождаться следующей синхронизации, или и того, и другого, или какого-то другого шага, который я здесь упускаю?

Заранее спасибо за любые советы!

Ответ №1:

Вы можете найти, установлен ли в системе ваш скрипт. Регистрируйтесь /var/lib/dpkg/info/<package_name>.postinst . Я предполагаю, что apt / dpkg установил его.

Итак, проблема заключается в postinst :

 <HERE THE ERROR: A EMPTY LINE>
#!/bin/sh
set -e
(...)
 

первая строка пуста. Ядро просто проверяет первые байты: # ! ev. пробел (который требовался в старые времена) путь, с которого должен начинаться / .

Поскольку у вас была пустая строка, ядро не выполнило проверку, поэтому оно пытается выполнить непосредственно программу (не передавая ее /bin/sh ), но это недопустимая двоичная программа, поэтому ей не удается выполнить скрипт.

Комментарии:

1. Спасибо за ваш ответ, Джакомо! Итак, основная проблема, я думаю, заключается в том, что скрипт не установлен в первую очередь. в /var/lib/dpkg/info postinst отсутствует. Кроме того, при запуске sudo dpkg -D2 -i ros-melodic-sr-hand-detector_0.0.2-1bionic.20201017.081752_amd64.deb я получаю D000002: vmaintscript_installed несуществующий postinst После добавления файлов postinst (после исправления этой пустой строки) в /debian/melodic/sr-hand-detectorветка, мне нужно предварительно подготовить полный новый выпуск или подождать синхронизации, пока изменения не начнут существовать в файле debian?

2. Я не понимаю вашего вопроса (или что вы подразумеваете под «синхронизацией»). Обычно в Debian мы выпускаем новую версию, если что-то меняем (но для тестирования, но поэтому мы устанавливаем их вручную, а не без apt [Я думаю, что в apt вы можете принудительно переустановить, но не загружать повторно).

3. Под синхронизацией я имел в виду следующее (из документации blood): «Созданные пакеты периодически синхронизируются с теневыми и общедоступными репозиториями, поэтому может пройти до месяца, прежде чем ваш пакет станет доступен в общедоступных репозиториях debian ROS (т. Е. Доступен через apt-get). Чтобы получать обновления о том, когда произойдет следующая синхронизация (sync), проверьте форумы обсуждения ROS «.