31-го июля сего года закончилась поддержка FreeBSD 8.2 . На моем ноутбуке Asus X51L как раз установлена FreeBSD, притом именно этой версии. Решил обновиться до FreeBSD 9.0 и запостить в бложик заметку о том, как выглядит процесс обновления этой системы.
Есть по крайней мере два способа обновления FreeBSD. Если вы используете ядро GENERIC (собранное с параметрами по умолчанию), то можете скачать и установить бинарное обновление с помощью утилиты freebsd-update. Чуть более сложный, но и более универсальный, способ заключается в получении исходников интересующей вас версии FreeBSD из SVN репозитория с последующей их компиляцией. Я использую ядро GENERIC, так что далее речь пойдет о первом способе.
Дополнение: Описание второго способа вы найдете в заметке Собираем ядро и мир FreeBSD из исходников .
Важно! Каждый раз, когда вы обновляете систему, не сделав бэкап, в мире умирает десять котят!
Поехали:
Если во время обновления будет получена такая ошибка:
The update metadata is correctly signed, but failed an integrity check. Cowardly refusing to proceed any further.
… следует применить к /usr/sbin/freebsd-update вот этот патч . Там требуется всего лишь немного поправить одну строчку.
Во время обновления будут пропатчены некоторые конфигурационные файлы. Следует просматривать вносимые изменения крайне внимательно и разрешать конфликты с максимальной осторожностью. Если вы не уверены в том, что делаете, всегда лучше остановиться и посоветоваться с более опытными пользователями.
После завершения работы скрипта говорим:
… и перезагружаем систему:
После перезагрузки внимательно проверяем, что ничего не отвалилось. Если система вдруг не сможет загрузиться, то при следующей загрузке будет использовано прежнее ядро.
Лично я столкнулся со следующей проблемой. Оказалось, что перестал работать фаервол (PF). Команда `dmesg -a` показала мне следующую ошибку:
Как выяснилось , это ОК (причина заключается в расхождении версий ядра и мира), потому я продолжил обновление системы.
Следующим шагом говорим (да, опять):
И действительно, после выполнения команды:
… фаервол заработал.
Во время последнего запуска 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 и сказать:
У меня обновилось всего лишь пять пакетов, так что все не настолько ужасно, как вы могли бы подумать. Правда, позже выяснилось, что Perl все-таки отвалился (видимо, я собирал его из портов). Но решить проблему оказалось несложно:
Итак, завершаем обновление системы:
Готово!
Не считая названных проблем с Perl и PF, на момент написания данных строк никаких косяков мною замечено не было. Да, в некоторых системах обновление ядра устроено куда проще. Но подход, описанный выше, имеет и свои плюсы:
- Если во время обновления ядра что-то пошло не так, можно с легкостью откатиться к старой версии;
- Диагностировать проблемы проще, хотя бы потому что точно известно, на каком шаге обновления они возникли;
- Не хочешь — не обновляйся, система не станет настаивать;
А вы уже перешли на девятую ветку?