"uname" me dirá a versão do kernel em execução. Como sei se é diferente do kernel instalado (ou seja, aquele que será carregado na próxima reinicialização)?
Idealmente, gostaria de escrever um script que pudesse gerar "reinicialização necessária" ou "correspondência de kernel em execução e instalado".
Use
freebsd-version -k
! Do seu manual :Você deve comparar a saída de
freebsd-version -k
euname -r
e se for diferente, você devereboot
.Outra opção é usar
strings
(ideia retirada de/bin/freebsd-version
):Maneira simples, mas provavelmente não confiável: compare o tempo de inicialização (de
sysctl kern.boottime
) e o tempo em que o kernel foi instalado (stat -f '%c' $(sysctl -n kern.bootfile)
). O tempo deve estar sempre sincronizado (via ntp) para que este método funcione.A melhor maneira é comparar as strings de versão do kernel em execução e o arquivo do kernel instalado.
A partir do kernel em execução, ele pode ser obtido via
sysctl -n kern.version | head -1
(essa string também é mostrada em uname -v, mas em uma linha em vez de duas linhas). Em seguida, você podefgrep
inserir essa string no arquivo do kernel (kern.bootfile
) - se for encontrado - a versão do kernel em execução e instalada deve corresponder. Não gosto de usar grep aqui, mas deve funcionar bem. A maneira mais correta de extrair a string da versão do arquivo do kernel seria algum programa para extrair aversion
variável dos dados ELF do kernel (por exemplo, usando libelf).