Como saber se um host do FreeBSD precisa de uma reinicialização para ativar o novo kernel?

4

"uname" me informará a versão do kernel em execução. Como eu sei se isso é diferente do kernel instalado (ou seja, aquele que será carregado na próxima reinicialização)?

Idealmente, gostaria de escrever um script que possa gerar "reinicialização necessária" ou "correspondência de kernel em execução e instalada".

    
por TomOnTime 08.12.2016 / 15:34

2 respostas

2

Use freebsd-version -k ! Do seu manual :

-k Print the version and patch level of the installed kernel. Unlike uname(1), if a new kernel has been installed but the system has not yet rebooted, freebsd-version will print the version and patch level of the new kernel.

Você deve comparar a saída de freebsd-version -k e uname -r e, se diferir, deverá reboot .

Outra opção é usar strings (idéia tirada de /bin/freebsd-version ):

strings /boot/kernel/kernel | sed -n "s,^@(#)FreeBSD \([^ ]*\).*,,p"
    
por 08.12.2016 / 20:28
0

Modo 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 ser sempre sincronizado (via ntp) para que esse método funcione.

A melhor maneira é comparar as strings da versão do kernel em execução e do arquivo do kernel instalado.

Do kernel em execução, ele pode ser obtido via sysctl -n kern.version | head -1 (esta string também é mostrada no uname -v, mas em uma linha, em vez de duas linhas). Então você pode fgrep esta cadeia de caracteres no arquivo do kernel ( kern.bootfile ) - se encontrar - a versão do kernel em execução e instalada deve corresponder. Eu não gosto de usar o grep aqui, mas deve funcionar bem o suficiente. Uma maneira mais correta de extrair a string version do arquivo kernel seria algum programa para extrair a variável version dos dados ELF do kernel (por exemplo, usando libelf).

    
por 08.12.2016 / 16:37

Tags