Назад | Перейти на главную страницу

Как узнать, требуется ли перезагрузка хосту FreeBSD для активации нового ядра?

"uname" сообщит мне версию работающего ядра. Как узнать, отличается ли оно от установленного ядра (то есть того, которое будет загружено при следующей перезагрузке)?

В идеале я хотел бы написать сценарий, который выводит «необходима перезагрузка» или «соответствие запущенного и установленного ядра».

Использовать freebsd-version -k! Из его руководство:

-k Вывести версию и уровень исправления установленного ядра. В отличие от uname (1), если новое ядро ​​было установлено, но система еще не перезагружена, freebsd-version распечатает версию и уровень исправления нового ядра.

Вы должны сравнить вывод freebsd-version -k и uname -r и если отличается, вы должны reboot.

Другой вариант - использовать strings (идея взята из /bin/freebsd-version):

strings /boot/kernel/kernel | sed -n "s,^@(#)FreeBSD \([^ ]*\).*,\1,p"

Простой, но, вероятно, ненадежный способ: сравнить время загрузки (с sysctl kern.boottime) и время установки ядра (stat -f '%c' $(sysctl -n kern.bootfile)). Время должно всегда синхронизироваться (через ntp), чтобы этот метод работал.

Лучше всего сравнить строки версии из запущенного ядра и установленного файла ядра.

Из запущенного ядра его можно получить через sysctl -n kern.version | head -1 (эта строка также отображается в uname -v, но в одной строке вместо двух). Тогда ты можешь fgrep эта строка в файле ядра (kern.bootfile) - если обнаружено - должна совпадать запущенная и установленная версия ядра. Мне не нравится здесь использовать grep, но он должен работать достаточно хорошо. Более правильным способом извлечения строки версии из файла ядра была бы программа для извлечения version переменная из данных ядра ELF (например, с использованием libelf).