fakeroot e construção de pacotes

1

Desenvolvemos um conjunto de comunicação de sub / pub / rede. Ele está em uso em vários aplicativos e domínios diferentes, principalmente em nossas cargas a bordo da Estação Espacial Internacional (ISS). O Ubuntu é o nosso principal sistema de desenvolvimento e implementação. Todo o nosso código está bem empacotado. No processo de criação dos pacotes, gostaria de executar os conjuntos de testes incluídos em cada base de código. No entanto ...

Nosso protocolo de comunicação usa o Avahi, que por sua vez usa o DBus. Assim, nossos testes usam o DBus. Ao criar um pacote, "fakeroot" é invocado para resolver vários problemas. No entanto, introduz um problema que não consegui resolver. Quando nossos testes são executados sem fakeroot, vemos algo assim:

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

Quando o mesmo teste é executado usando o fakeroot, vemos algo assim:

[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

Acontece que a autenticação DBus está simplesmente usando o código ASCII da representação de string do UID para o usuário. Quando executado normalmente, o UID é 1000, '1' é 31, '0' é 30; portanto, o token de autenticação para o UID 1000 é 31303030. Em fakeroot, o programa acha que seu UID é 0 e envia o token 30. Isso é rejeitado e toda a confusão falha.

Isso está se conectando ao sistema DBus e não a uma sessão DBus, então não posso simplesmente iniciar uma nova instância dentro do fakeroot. Eu passei por nosso código, o código Avahi e o código DBus, e não vejo nenhuma maneira de contornar isso.

Então, finalmente, a pergunta - Existe uma maneira de executar testes durante a criação de pacotes sem o wrapper fakeroot? Eu realmente quero que os testes sejam executados, já que o código é submetido a um sistema buildbot que possui uma ampla variedade de distribuições e versões do Linux. Isso oferece uma cobertura de teste muito melhor do que apenas executar os testes no meu sistema de desenvolvimento.

    
por Jim Wright 19.07.2013 / 00:16

1 resposta

0

Na verdade, existem algumas suítes de teste que ficam confusas quando você as executa sob fakeroot. Você pode desativar o fakeroot para pessoas com algo parecido em debian/rules :

override_dh_auto_test:
            env -u LD_PRELOAD dh_auto_test

Isto é certo se a sua suíte de testes é simplesmente "fazer check" e você usa uma embalagem razoavelmente moderna. A essência é para desfazer $LD_PRELOAD .

No entanto, note que você pode não confiar no sistema D-BUS em execução durante a compilação do pacote. Os scripts de inicialização e similares geralmente são desabilitados em ambientes de compilação usando policy-rc.d , portanto, se seus testes quiserem um barramento de sistema, eles precisarão iniciar um deles (dbus-launch e export DBUS_SYSTEM_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS ).

    
por pitti 07.02.2014 / 16:30