Памятка по обновлению ядра и мира FreeBSD

13 сентября 2012

31-го июля сего года закончилась поддержка FreeBSD 8.2. На моем ноутбуке Asus X51L как раз установлена FreeBSD, притом именно этой версии. Решил обновиться до FreeBSD 9.0 и запостить в бложик заметку о том, как выглядит процесс обновления этой системы.

Есть по крайней мере два способа обновления FreeBSD. Если вы используете ядро GENERIC (собранное с параметрами по умолчанию), то можете скачать и установить бинарное обновление с помощью утилиты freebsd-update. Чуть более сложный, но и более универсальный, способ заключается в получении исходников интересующей вас версии FreeBSD из SVN репозитория с последующей их компиляцией. Я использую ядро GENERIC, так что далее речь пойдет о первом способе.

Дополнение: Описание второго способа вы найдете в заметке Собираем ядро и мир FreeBSD из исходников.

Важно! Каждый раз, когда вы обновляете систему, не сделав бэкап, в мире умирает десять котят!

Поехали:

freebsd-update -r 9.0-RELEASE upgrade

Если во время обновления будет получена такая ошибка:

The update metadata is correctly signed, but failed an integrity check. Cowardly refusing to proceed any further.

… следует применить к /usr/sbin/freebsd-update вот этот патч. Там требуется всего лишь немного поправить одну строчку.

Во время обновления будут пропатчены некоторые конфигурационные файлы. Следует просматривать вносимые изменения крайне внимательно и разрешать конфликты с максимальной осторожностью. Если вы не уверены в том, что делаете, всегда лучше остановиться и посоветоваться с более опытными пользователями.

После завершения работы скрипта говорим:

freebsd-update install

… и перезагружаем систему:

shutdown -r now

После перезагрузки внимательно проверяем, что ничего не отвалилось. Если система вдруг не сможет загрузиться, то при следующей загрузке будет использовано прежнее ядро.

Лично я столкнулся со следующей проблемой. Оказалось, что перестал работать фаервол (PF). Команда `dmesg -a` показала мне следующую ошибку:

pfctl: DIOCADDRULE: Operation not supported by device

Как выяснилось, это ОК (причина заключается в расхождении версий ядра и мира), потому я продолжил обновление системы.

Следующим шагом говорим (да, опять):

freebsd-update install

И действительно, после выполнения команды:

pfctl -F all -f /etc/pf.conf

… фаервол заработал.

Во время последнего запуска freebsd-update вывел мне такое сообщение:

Completing this upgrade requires removing old shared object files. Please rebuild all installed 3rd party software (e.g., programs installed from the ports tree) and then run "/usr/sbin/freebsd-update install" again to finish installing updates.

Вот вам еще одна причина пользоваться бинарными пакетами, а не портами. В случае использования бинарных пакетов достаточно подправить значение переменной окружения $PACKAGESITE и сказать:

pkg_upgrade -a

У меня обновилось всего лишь пять пакетов, так что все не настолько ужасно, как вы могли бы подумать. Правда, позже выяснилось, что Perl все-таки отвалился (видимо, я собирал его из портов). Но решить проблему оказалось несложно:

ln -s /lib/libutil.so.9 /lib/libutil.so.8

Итак, завершаем обновление системы:

freebsd-update install

Готово!

Не считая названных проблем с Perl и PF, на момент написания данных строк никаких косяков мною замечено не было. Да, в некоторых системах обновление ядра устроено куда проще. Но подход, описанный выше, имеет и свои плюсы:

  • Если во время обновления ядра что-то пошло не так, можно с легкостью откатиться к старой версии;
  • Диагностировать проблемы проще, хотя бы потому что точно известно, на каком шаге обновления они возникли;
  • Не хочешь — не обновляйся, система не станет настаивать;

А вы уже перешли на девятую ветку?

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.