O trabalho Upstart (.conf) falha na instalação

1

Eu tenho um pacote simples (.deb) em que o objetivo principal é criar um trabalho Upstart. Chame isso de Foo. Falha ao criar o arquivo de trabalho /etc/init/Foo.conf .

Definição do pacote

Eu criei a origem do pacote usando dh_make --createorig e adicionei Foo.upstart ao diretório debian . Eu construo o pacote com debuild -us -uc .

Instalação

sudo dpkg -i Foo_1.0-1_all.deb

Quando instalo o pacote em uma máquina, tudo corre bem, mas outro falha. (Foo.conf é adicionado ao /etc/init e o serviço é iniciado). Ou seja, o Foo.conf não é adicionado a /etc/init . O script Foo com compatibilidade retroativa (link simbólico para upstart-job ) é adicionado a /etc/init.d e os arquivos doc são adicionados a% código%. Mas, /usr/share/doc/Foo está faltando.

EDITAR

Originalmente, acreditava que o problema se devia à arquitetura. Isso foi simplesmente porque eu tinha uma instalação funcional em amd64, mas o problema ocorreu em uma máquina i386. Eu esqueci de perceber que eu tinha feito anteriormente a instalação manual & amp; remoção na máquina i386 que o dpkg evitou interferir.

    
por Jacob Foshee 08.04.2014 / 22:33

1 resposta

1

Solução de problemas

Quando um pacote falha na instalação, você pode solucionar problemas usando a opção Depurar. É preciso um campo de bits para determinar o nível e o assunto. Um valor de D = 7777 mostrará tudo. Para este problema, sabemos que estamos especificamente interessados em arquivos conf para que possamos usar D = 220.

sudo dpkg -D=220 -i Foo_1.0-1_all.deb

Sua saída pode mostrar algo como o seguinte:

D000200: conffderef in='/etc/init/Foo.conf' current working='/etc/init/Foo.conf'
D000200: conffderef nonexistent
D000020: deferred_configure '/etc/init/Foo.conf' (= '/etc/init/Foo.conf') useredited=1 distedited=0 what=2002

A pista principal é useredited=1 . Por padrão, dpkg não substituirá os arquivos de configuração editados pelo usuário. A exclusão manual de um arquivo .conf conta como editá-lo, portanto, pode ser uma surpresa que o dpkg não substitua o arquivo ausente. Pode ser duplamente surpreendente para aqueles experientes com a instalação de serviços em outros sistemas operacionais que uma tarefa do Upstart é tratada como configuração.

Forçar a falta de instalação conf

O dpkg tem várias opções de força. Você pode forçar a substituição do arquivo .conf ausente da seguinte forma:

sudo dpkg -i --force-confmiss Foo_1.0-1_all.deb

Existem outras opções de força para cenários semelhantes; verifique a página de manual ou use dpkg --force-help para detalhes. Essas opções devem ser usadas com cuidado, especialmente para pacotes de terceiros.

Pacote Dev / Ciclo de Testes

No desenvolvimento de um pacote .deb (por exemplo, para um trabalho do Upstart), você instalará e removerá o pacote várias vezes. Você também poderá mexer no arquivo .conf manualmente às vezes. Por padrão, dpkg -r (ou apt-get remove ) não removerá o arquivo .conf. (Então, surpreendentemente, o trabalho inicial permanece enquanto os binários associados podem desaparecer.) Para isso, você deve usar a opção de limpeza. Portanto, para testar completamente a remoção e a reinstalação do trabalho inicial, você pode fazer o seguinte:

sudo dpkg -i Foo_1.0-1_all.deb
# testing...
sudo apt-get purge Foo

E agora que você sabe sobre as opções de força e depuração, é possível aplicá-las conforme necessário.

Referências

Veja o tópico Bug # 1198: o dpkg silenciosamente falha ao instalar um arquivo :

  

Remover o arquivo conta como "editando", porque para muitos   arquivos de configuração, a ausência de um arquivo é significativa.

Página de manual para dpkg

    
por Jacob Foshee 18.04.2014 / 17:43