Всем привет!
В данной статье я собрал три используемых мной алгоритма обновления FreeBSD на личном компьютере. Всю эту информацию можно легко найти в Handbook, но я решил консолидировать ее в виде краткой шпаргалки, преимущественно для самого себя. Впрочем, первые два алгоритма не составляет труда запомнить, а вот третий приятнее применять имея перед глазами инструкцию: все-таки не каждый день новая версия операционной системы выходит.
Алгоритм 1: установка заплаток безопасности
Это самое простое и безболезненное, но в то же время самое необходимое действие. Чем чаще оно выполняется, тем лучше. Можно легко автоматизировать его периодический запуск с помощью crontab (при обновлении по минору или мажору данное задание обязательно комментировать), однако в данной статье эта тема рассмотрена не будет.
Итак, чтобы установить заплатки безопасности, нужно выполнить всего две команды:
sudo freebsd-update fetch
sudo freebsd-update install
Первая скачает заплатки, вторая установит.
В выводе команды так же может содержаться информация о том, что текущая версия системы приближается к завершению своего жизненного цикла и пора ее обновлять. Об этом - Алгоритм 3. А пока...
Алгоритм 2: обновление программного обеспечения
Достоинством FreeBSD является наличие централизованного репозитория программного обеспечения. Во времена создания первых версий системы это было своего рода know how. Данный репозиторий содержит так называемые ports - программное обеспечение, ported на FreeBSD с других систем (в наши дни, как правило с Linux). Называется он Ports Tree. Кроме него создатели FreeBSD предложили набор инструментов для простой сборки и установки программного обеспечения из Ports Tree. Со временем у каждого инструмента появились аналоги. Я пользовался portsnap, portupgrade, portmaster. Может и еще чем-то, но это было почти 10 лет назад и оставило тягостные впечатления, так как обновление софта превращалось в тяжкий труд, чего хотелось избежать на личном оборудовании. Потом появился pkgng - средства для управления бинарными пакетами взамен pkg_* tools. Миновав время нестабильности, сейчас pkgng представляет собой потрясающий инструмент, позволяющий управлять программным обеспечением в FreeBSD. Смысл пакетов (packages) состоит в сокращении времени на установку пакетов в невероятное количество раз за счет устранения необходимости собирать их на машине, на которую они устанавливаются. Так, если ранее приходилось ждать сборки программ из исходного кода, то с помощью пакетов установка пакетов представляет собой простое скачивание архива со скомпилированными файлами программы и его распаковку плюс скачивание и установку всех пакетов, требуемых для работы устанавливаемого пакета (так называемых зависимостей). Таким образом, установка/обновление любого пакета не превышает минуты, хотя обычно длится всего несколько секунд, а раньше установка или обновление только одной программы из исходников могла занять и всю ночь (особенно долго собирались браузеры: firefox, WebKit). Из недостатков пакетов - разработчики портов регулярно забывают указывать зависимости к своим ports, из-за чего пакеты перестают работать при обновлениях, удалении других пакетов, удалении ненужных пакетов (autoremove). Однако исправление в данном случае сводится к установке нужных пакетов, на что уходит совсем немного времени. Кроме того pkg позволяет помечать пакеты как "нужные" (команда keep).
После этой многословной рекламы и экскурса в историю, посмотрим как обновить пакеты (все):
sudo pkg upgrade -y
Не советую правда применять эту команду на версиях, завершивших свой жизненный цикл. В моем случае это как правило, через обновление зависимостей, выливается в потерю работоспособности X.Org из-за несовместимости видео-драйвера. Если вы пропустили окончание жизненного цикла релиза, лучше перейти к обновлению системы по минору или мажору в соответствии с Алгоритмом 3. В остальном, по сравнению с FreeBSD 9 и 10, в FreeBSD 13 обновление программного обеспечения проходит гладко и не превращается в ежемесячный день мучений, когда приходилось разбираться с кучей вопросов в духе "почему не работает X.Org?", "почему GDM ругается на keyring?", "почему не работает GNOME?", "почему не запускается Firefox?", "почему в Firefox не работает Flash?", "почему крешится MPlayer?" и так далее и так далее и так далее. Причем при использовании портов исправление причин таких проблем занимало иногда часы по причине необходимости собирать их из исходных кодов. Сейчас всего этого не нужно и после обновления обновленный софт просто берет и работает (тьфу-тьфу-тьфу).
Секрет успеха - использование quarterly канала обновлений репозитория: изменения туда выкатываются реже и за три месяца maintainers успевают их неплохо стабилизировать.
Как часто обновлять пакеты? Если часто, то, в случае проблем, будет проще их исправлять ввиду меньшего количества, но нужно находить время делать это часто на регулярной основе. Так что лучше обновляться так часто, насколько позволяет время. Если обновляться редко, то установка какого-нибудь потребовавшегося в работе пакета скорее всего приведет к обновлению нескольких сотен пакетов-зависимостей, что увеличивает вероятность выхода из строя какого-нибудь используемого пакета, либо его обновление может потребовать миграции ваших проектов на новую версию этого пакета.
Алгоритм 3: обновление версии FreeBSD по минору и мажору
Немного теории: обновление по мажору (major version upgrade), иначе называемое обновлением старшего номера версии - это когда меняется первая цифра версии системы: обновление с версии x.y на версию z.t, где z > x, например c 12.3 на 13.0. Как правило обновление по мажору предполагает значительные изменения в ядре и мире операционной системы.
Обновление по минору (minor version upgrade) aka обновление младшего номера версии - это изменение второго числа в версии системы: с x.y на x.z, где z > y, например обновление с 13.0 на 13.1. Как правило эти обновления попроще и направлены на стабилизацию мажора после изменений при его создании (то есть чем выше минор, тем стабильнее система).
По причине, описанной выше в предыдущей главе об обновлении пакетов (Алгоритм 2), рекомендую следить за жизненным циклом выпусков операционной системы на странице Release Information. Так же, при установке заплаток, описанной в Алгоритме 1, утилита freebsd-update напомнит вам о приближающемся к завершению жизненного цикла или завершившем его установленном релизе. Ниже алгоритм обновления системы на примере перехода на версию 13.1. Если вы переходите на другую, вместо 13.1 укажите нужную. Версии в поддержке перечислены на странице Release Information.
Перед обновлением операционной системы по минору или мажору выполните установку заплаток. Процесс описан в Алгоритме 1. Если установка заплаток настроена на автозапуск с помощью crontab (или как-то еще, хотя по другому как-то странно), то нужно ее отключить (закомментировать).
Далее выполнить следующую последовательность команд (по одной):
sudo freebsd-update -r 13.1-RELEASE upgrade
sudo freebsd-update install
shutdown -r now
sudo freebsd-update install
sudo pkg-static upgrade -f
sudo freebsd-update install
Как видите процесс довольно прост. Первая команда запускает обновление в копии вашей системы (привет, chroot), так что пока выполняется обновление ваша система остается во-первых нетронутой, во-вторых полностью работоспособной. Может потребоваться контроль или (очень редко, вероятнее при обновлении по мажору) решение конфликтов в конфигурационных файлах. Дальше идет первый и второй этапы установки, разделенные перезагрузкой. После второго этапа нужно обновить все установленное программное обеспечение, так как оно отличается для разных версий ОС (ABI сменяется при обновлении по мажору, но я делаю полный upgrade даже при обновлении по минору). При обновлении по мажору после перезагрузки часто отваливаются драйвера nvidia, но пугаться этого не стоит - драйвера предыдущего мажора просто оказываются несовместимыми с устанавливаемым мажором: обновление пакетов исправит эту проблему. После него установка завершается третьим вызовов команды install утилиты freebsd-update. После можно перезагрузить машину и включить установку заплаток в crontab (при наличии).
Больше информации вы всегда сможете найти в официальном Handbook.