fakeroot и сборка пакетов

Мы разработали сетевой паб / суб-коммуникационный пакет. Он используется в различных приложениях и доменах, особенно в наших полезных нагрузках на борту Международной космической станции (МКС). Ubuntu - наша основная система разработки и развертывания. Весь наш код хорошо упакован. В процессе сборки пакетов я хотел бы запустить наборы тестов, включенные в каждую кодовую базу. Однако ...

Наш протокол связи использует Avahi, который в свою очередь использует DBus. Таким образом, наши тесты используют DBus. При сборке пакета вызывается «fakeroot» для решения ряда проблем. Тем не менее, это представляет проблему, которую я не смог решить. Когда наши тесты выполняются без fakeroot, мы видим что-то вроде этого:

[pid  3286] sendto(12, "AUTH EXTERNAL 31303030\r\n", 24, MSG_NOSIGNAL, NULL, 0) = 24
[pid  3286] read(12, "OK 38b4600ae82865f9eba81cb700000"..., 2048) = 37

Когда тот же тест выполняется с использованием fakeroot, мы видим что-то вроде этого:

[pid  3280] sendto(12, "AUTH EXTERNAL 30\r\n", 18, MSG_NOSIGNAL, NULL, 0) = 18
[pid  3280] read(12, "REJECTED EXTERNAL DBUS_COOKIE_SH"..., 2048) = 46

Оказывается, что Аутентификация DBus просто использует ASCII-код строкового представления UID для пользователя. При нормальной работе UID равен 1000, «1» - 31, «0» - 30; следовательно, токен аутентификации для UID 1000 - 31303030. В fakeroot программа считает, что ее UID равен 0, и отправляет токен 30. Это отклонено, и весь беспорядок завершается неудачей.

Это соединение с системным DBus, а не сессионным DBus, поэтому я не могу просто запустить новый экземпляр внутри fakeroot. Я просмотрел наш код, код Avahi и код DBus и не вижу способа обойти это.

Итак, наконец, вопрос - есть ли способ запустить тесты во время сборки пакета без оболочки fakeroot? Я действительно хочу, чтобы тесты запускались, поскольку код передается в систему buildbot, которая имеет широкий спектр дистрибутивов и версий Linux. Это обеспечивает гораздо лучший охват тестами, чем просто запуск тестов в моей системе разработки.

2
задан 19 July 2013 в 02:16

1 ответ

Действительно, есть несколько тестовых наборов, которые запутываются, когда вы запускаете их под fakeroot. Вы можете отключить fakeroot для тех, у кого что-то подобное в debian/rules:

override_dh_auto_test:
            env -u LD_PRELOAD dh_auto_test

Это правильно, если ваш набор тестов просто «делает проверку» и вы используете достаточно современную упаковку. Суть состоит в том, чтобы раскрыть $LD_PRELOAD.

Однако, обратите внимание, что вы не можете полагаться на систему D-BUS, работающую во время сборки пакета. Сценарии init и т. П. Обычно отключаются в средах сборки с использованием policy-rc.d, поэтому, если ваши тесты нуждаются в системной шине, они должны сами запустить ее (dbus-launch и export DBUS_SYSTEM_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS).

0
ответ дан 19 July 2013 в 02:16

Другие вопросы по тегам:

Похожие вопросы: