Como permitir que a tarefa do Upstart bloqueie a inicialização do sistema?

1

Estou escrevendo uma tarefa do Upstart que é executada no nível de execução 1.

Isto é para um sistema criptografado, e o trabalho da tarefa é verificar a integridade do MBR & amp; / boot. Como tal, é importante que esta tarefa seja executada o mais cedo possível durante a inicialização do sistema (por isso escolhi o nível de execução 1).

Em 99% das vezes, essa tarefa simplesmente sairá silenciosamente, mas se detectar algum problema, será necessário informar ao usuário e, idealmente, pausar a inicialização do sistema até que o usuário confirme.

Eu tentei o seguinte como um teste, mas não posso interromper a inicialização do sistema. Alguma sugestão?

inicie no nível de execução [1] exec echo -n "Atenção: MBR e / ou / boot alterado. Pressione qualquer tecla para continuar." exec ler saída do console

Obrigado antecipadamente!

    
por vonbraun 14.05.2011 / 14:02

1 resposta

2

vonbraun, runlevels significam algo muito diferente do que costumavam, então eu não acredito que o nível de execução 1 é realmente onde você quer estar.

Sine que você deseja executar o mais rápido possível, existem duas opções.

Se você pode trabalhar sem gravar no sistema de arquivos raiz, e seus dados têm garantia de estar no sistema de arquivos raiz, você pode usar o evento de montagem.

start on mounting MOUNTPOINT=/

O evento de montagem é um "gancho", então o mountall irá esperar por qualquer coisa que o use para desbloquear. Você definitivamente deve usar a palavra-chave 'task' para que suas verificações possam ser executadas totalmente antes que o mountall seja desbloqueado.

Neste ponto da inicialização, o sistema de arquivos raiz ainda é somente leitura, mas deve estar disponível. Outros sistemas de arquivos podem não estar disponíveis, então esteja ciente (o / var / run, em particular, pode ser complicado desta maneira). Do não use "AND" com outro evento de montagem, pois isso bloqueará a inicialização.

Se você precisa escrever para o FS raiz, você pode usar

start on mounted MOUNTPOINT=/

Isto irá bloquear o mountall novamente, mas depois / é remontado read-write. Isso deve impedir que os sinais resultantes que iniciam outras partes da inicialização aconteçam.

Não há garantias aqui, algumas outras coisas estarão acontecendo em paralelo. No entanto, a maioria da inicialização será atrasada aguardando o acesso ao sistema de arquivos e, no cenário declarado, parece ser o resultado desejado.

Observe que há muitas boas ideias relacionadas no livro de receitas do Upstart

link

Boa sorte!

    
por SpamapS 18.05.2011 / 21:12