Instalando um novo kernel do OpenBSD “com segurança”: por que o 'make install' passa por esses aros extras?

4

Após construir um novo kernel do OpenBSD, o install target do kernel Makefile faz o seguinte:

rm -f /obsd
ln /bsd /obsd
cp bsd /nbsd
mv /nbsd /bsd

Eu entendo que as duas primeiras linhas removem o antigo kernel de backup /obsd e criam um hard link /obsd apontando para o kernel atualmente em execução /bsd . Em particular, o kernel em execução não é movido de todo. Isso faz sentido para mim.

No entanto, qual é o propósito de mover primeiro o kernel recém-criado./bsd para /nbsd e renomeá-lo para /bsd ? Por que não substituir a terceira e quarta linha pelo aparentemente mais simples cp bsd /bsd ?

Se isto deve ser importante: o esquema de particionamento padrão do OpenBSD coloca a árvore de construção do kernel em um sistema de arquivos diferente (disklabel) do que o sistema de arquivos raiz.

    
por Minas 11.08.2014 / 02:34

1 resposta

5

Uma receita do makefile deixará de ser executada se algum comando nela retornar um status de falha (a menos que o comando seja precedido por um - ). A receita citada garantirá que /bsd seja substituído apenas se o comando cp bsd /nbsd for bem-sucedido. O cp pode falhar se a partição estiver cheia ou sem inodes.

    
por 11.08.2014 / 06:35