freebsd-update — штатная утилита FreeBSD для бинарных обновлений базовой системы. Она делает две вещи: ставит исправления безопасности внутри текущего выпуска (например, 14.4-RELEASE-p1 → p3) и переводит систему на новый выпуск (14.4 → 14.5 или 14.x → 15.1). Сборка из исходников для этого не нужна.
Самый частый сценарий выглядит так. Сначала freebsd-update fetch и install, чтобы дойти до последнего патча. Затем freebsd-update upgrade -r 14.5-RELEASE, install, перезагрузка, ещё один install. После этого обновляют пакеты через pkg upgrade. При переходе на новую основную версию (14 → 15) пакеты переустанавливают принудительно и ещё раз запускают install, чтобы удалить старые библиотеки.
Ниже — пошаговые команды для FreeBSD 14.x и 15.x, сроки поддержки на осень 2026 года, проверка результата и разбор типичных ошибок. Включая ту, с которой начиналась эта статья в 2012 году на FreeBSD 8.2.
Сроки поддержки версий FreeBSD
Каждый минорный выпуск поддерживается три месяца после выхода следующего в той же ветке. Последний выпуск ветки поддерживается до конца поддержки всей ветки. Данные с freebsd.org/security на начало октября 2026 года:
| Выпуск | Вышел | Поддержка до |
|---|---|---|
| 15.1-RELEASE | 16 июня 2026 | 31 марта 2027 |
| 15.0-RELEASE | 2 декабря 2025 | 30 сентября 2026 (уже не поддерживается) |
| 14.5-RELEASE | 8 сентября 2026 | 30 июня 2027 |
| 14.4-RELEASE | 10 марта 2026 | 31 декабря 2026 |
| 14.3-RELEASE | — | 30 июня 2026 (уже не поддерживается) |
| Ветка 13 (13.5) | — | 30 апреля 2026 (уже не поддерживается) |
Ветка 14 поддерживается до 30 ноября 2028 года, ветка 15 — до 31 декабря 2029 года. Вывод простой. Сервер на 13.x или 14.3 пора обновлять сейчас. С 15.0 — сразу на 15.1. С 14.4 — минимум на 14.5 до конца декабря 2026 года. Перед работой сверьтесь со страницей freebsd.org/security: таблица там обновляется с каждым выпуском.
Где работает freebsd-update, а где нет
- Работает на системах, установленных из официальных образов -RELEASE для amd64 и arm64 (обычная установка с distribution sets).
- Обновляет только ядро GENERIC. Своё ядро после обновления нужно пересобрать и установить заново.
- Не работает на -STABLE и -CURRENT, собранных из исходников. Там обновляются через
make buildworld. - Не нужен на системах с pkgbase (базовая система ставится пакетами
FreeBSD-*). Такой вариант установки появился в 15.0, там база обновляется черезpkg. Как определить: еслиpkg info -x '^FreeBSD-'показывает пакеты базы, у вас pkgbase. - Не трогает сторонний софт из портов и пакетов. Его обновляет
pkg.
Начиная с 15.0 в FreeBSD два способа установки, но freebsd-update не объявлен устаревшим. Системы, поставленные классическим способом, обновляются им, как и раньше.
Файлы и каталоги
/etc/freebsd-update.conf— настройки. Главное:Components(что обновлять:src world kernel),KeepModifiedMetadata,MergeChanges(какие конфиги сливать при переходе на новый выпуск),CreateBootEnv(создавать загрузочное окружение ZFS перед установкой)./var/db/freebsd-update/— скачанные патчи, метаданные, состояние незавершённой установки. Нужно место: при переходе на новую версию — до нескольких сотен мегабайт./boot/kernel/— текущее ядро,/boot/kernel.old/— предыдущее после обновления.
Подготовка
- Резервная копия. Минимум —
/etc,/usr/local/etc,/boot/loader.conf, базы данных и данные сайтов. Скопировать их на другой сервер удобно через rsync, см. scp, sftp и rsync: копирование файлов между серверами. - Снимок ZFS. Если система загружается с ZFS, создайте загрузочное окружение:
bectl create -r pre-14.5. Если что-то пойдёт не так, к нему можно вернуться через меню загрузчика. ПриCreateBootEnv yesв конфигеfreebsd-updateсоздаёт окружение сам, но ручной снимок с понятным именем не помешает. - Консоль. Убедитесь, что есть доступ к консоли (IPMI, KVM, VNC у провайдера). Обновление по SSH работает, но если сервер не поднимется после перезагрузки, без консоли его не починить.
- Место на диске.
df -h /var /usr /. - Редактор. При конфликтах конфигов
freebsd-updateоткроет редактор из переменнойEDITOR. Если vi непривычен:setenv EDITOR ee(csh) илиexport EDITOR=ee(sh).
Посмотреть текущие версии ядра, установленного ядра и мира:
freebsd-version -kru
Примерно так:
14.4-RELEASE-p3
14.4-RELEASE-p3
14.4-RELEASE-p4
Первая строка — установленное ядро, вторая — работающее, третья — userland. Разные номера патчей у ядра и мира — нормальная ситуация: не каждый патч затрагивает ядро.
Обновление внутри выпуска: исправления безопасности
freebsd-update fetch
freebsd-update install
fetch скачивает патчи и показывает список файлов, которые изменятся. Список открывается в пейджере, выход — клавиша q. install ставит их. Если патч затронул ядро, нужна перезагрузка: shutdown -r now. После этого обновите пакеты:
pkg update
pkg upgrade
Проверить, есть ли непоставленные обновления, можно так:
freebsd-update updatesready
Автоматическая проверка
Чтобы сервер раз в день скачивал патчи и присылал письмо root, добавьте в /etc/crontab:
@daily root freebsd-update cron
cron только скачивает обновления в случайное время суток, ставить их всё равно нужно вручную через install. Это правильно: ядро без вашего ведома не обновится.
Переход на новый минорный выпуск: 14.4 → 14.5
Сначала доведите текущий выпуск до последнего патча (команды выше). Затем:
freebsd-update -r 14.5-RELEASE upgrade
freebsd-update install
shutdown -r now
Порядок upgrade -r 14.5-RELEASE и -r 14.5-RELEASE upgrade равнозначен. На этапе upgrade утилита определит установленные компоненты, скачает новые файлы и попробует слить изменения в ваших конфигах. Если слить автоматически не получилось, откроется редактор с маркерами конфликта <<<<<<<, =======, >>>>>>>. Оставьте нужный вариант и удалите маркеры. Потом утилита покажет списки удаляемых, добавляемых и изменяемых файлов.
Первый install ставит новое ядро. После перезагрузки система работает на новом ядре со старым миром. Ставим мир:
freebsd-update install
В пределах одной ветки ABI не меняется, поэтому пакеты достаточно обновить штатно: pkg update && pkg upgrade.
Переход на новую основную версию: 14.x → 15.1
На 15.1 можно перейти с 14.4 или 15.0. С более старых выпусков сначала поднимитесь до 14.4 или 14.5. Учтите, что в 15.0 удалены платформы i386, armv6 и 32-битный powerpc. Сервер на i386 на 15.x не переводится, только переустановка на amd64. 32-битные программы на amd64 по-прежнему работают.
# 1. Последние патчи текущего выпуска
freebsd-update fetch
freebsd-update install
# 2. Ядро новой версии
freebsd-update -r 15.1-RELEASE upgrade
freebsd-update install
shutdown -r now
# 3. После перезагрузки: мир
freebsd-update install
Теперь важный шаг. Сторонние пакеты собраны под FreeBSD 14 и ссылаются на старые библиотеки. Их нужно переустановить под новую ABI, начиная с самого pkg:
pkg-static install -f pkg
pkg update -f
pkg upgrade -f
Если пакеты собирали из портов, пересоберите их тем же способом, которым ставили (poudriere, portmaster). Модули ядра из портов (drm-kmod, virtualbox-ose-kmod и подобные) обязательно обновите до перезагрузки в следующий раз: модуль, собранный под ядро 14, на ядре 15 не загрузится.
Последний шаг удаляет старые библиотеки, которые больше не нужны:
freebsd-update install
shutdown -r now
Если сторонний софт ещё не переустановлен, этот шаг откладывают: иначе старые программы потеряют библиотеки. Если пересобрать что-то сразу нельзя, поставьте пакет совместимости misc/compat14x.
Загрузчик
freebsd-update обновляет файлы в /boot, но не трогает загрузчик в EFI-разделе и boot-код на диске. Это обязательный шаг при переходе на новую версию, особенно перед zpool upgrade.
UEFI на amd64:
efibootmgr -v
mount_msdosfs /dev/nda0p1 /boot/efi
cp /boot/loader.efi /boot/efi/efi/freebsd/loader.efi
cp /boot/loader.efi /boot/efi/efi/boot/bootx64.efi
Имя раздела (nda0p1, ada0p1, vtbd0p1) берите из вывода efibootmgr -v и gpart show. Если ESP уже смонтирован в /boot/efi, команду mount_msdosfs пропустите. Обновляйте только те файлы, которые реально есть на разделе.
BIOS (legacy) с GPT, где индекс 1 — раздел freebsd-boot из gpart show:
# ZFS
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
# UFS
gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0
На зеркале или RAID-Z повторите команду для каждого диска, с которого можно загрузиться.
ZFS: не спешите с zpool upgrade
После обновления zpool status может сообщить, что пулу доступны новые функции. Не включайте их сразу. Пока функции не включены, можно откатиться на старое загрузочное окружение. После zpool upgrade старый загрузчик и старая система могут не прочитать пул. Сначала убедитесь, что всё работает и загрузчик обновлён.
Проверка результата
freebsd-version -kru
uname -a
pkg config ABI
pkg check -dsa
Все три строки freebsd-version должны показать новый выпуск. pkg config ABI должен показать FreeBSD:15:amd64 (или FreeBSD:14:amd64 после минорного обновления). pkg check -d ищет пакеты с неудовлетворёнными зависимостями, -s — с испорченными файлами. Затем проверьте службы: service -e покажет включённые, sockstat -4l — что слушает порты. Для быстрой оценки нагрузки после перезапуска удобен htop, см. htop и btop: мониторинг процессов в Linux и FreeBSD.
Откат
Последнюю установку можно отменить:
freebsd-update rollback
shutdown -r now
rollback отменяет только последний install, а не весь переход на новую версию. На ZFS надёжнее откатиться на загрузочное окружение: bectl list, затем bectl activate pre-14.5 и перезагрузка. Или выбрать окружение в меню загрузчика.
Типичные ошибки
| Симптом | Причина | Решение |
|---|---|---|
... /usr/src/lib/libc/gen/...: no such file or directory на этапе install | Компонент src установлен частично: часть дерева /usr/src удалена вручную | Удалите src из Components в /etc/freebsd-update.conf, если исходники не нужны. Либо создайте недостающий каталог (mkdir -p) и повторите fetch и install |
You have a partially completed upgrade pending | Прошлый upgrade не доведён до конца | Выполните freebsd-update install до конца. Если старый процесс брошен намеренно — fetch -F по подсказке утилиты |
Cannot upgrade from a version that is not a release | Система -STABLE или -CURRENT из исходников | Обновляйтесь из исходников, freebsd-update тут не работает |
fetch should not be run non-interactively | fetch запущен из скрипта или cron | В cron используйте freebsd-update cron. В скриптах автоматизации — --not-running-from-cron fetch |
No mirrors remaining, giving up | Нет доступа к update.FreeBSD.org: DNS, файрвол, прокси | Проверьте host update.FreeBSD.org, правила pf/ipfw, переменную http_proxy |
Newer FreeBSD version for package ... при pkg upgrade | Пакеты под новую версию, а система ещё на старой (не перезагрузились или не доставили мир) | Доведите freebsd-update install и перезагрузку до конца. IGNORE_OSVERSION=yes — только если понимаете последствия |
После перехода на 15.x программы падают с Shared object "libXXX.so.N" not found | Старые библиотеки удалены финальным install до переустановки пакетов | pkg upgrade -f, при необходимости misc/compat14x |
| После перезагрузки нет видео или сети, не грузится модуль | Модуль ядра из портов собран под старое ядро | Обновите *-kmod-пакеты, проверьте kld_list в /etc/rc.conf |
| Своё ядро после обновления осталось старым | freebsd-update обновляет только GENERIC | Пересоберите своё ядро из исходников новой версии |
Первая строка таблицы — та самая ошибка из старой версии статьи. На FreeBSD 8.2 freebsd-update пытался обновить файл в /usr/src/lib/libc/gen/, но каталога не было. Тогда помогал mkdir -p /usr/src/lib/libc/gen и повтор fetch и install. Принцип не изменился: утилита считает компонент установленным и ждёт его файлы на месте. Сегодня аккуратнее не создавать пустые каталоги, а явно указать в Components, что обновлять.
Частые вопросы
Можно ли перепрыгнуть через выпуск, например 14.3 → 14.5?
В пределах ветки обычно да: freebsd-update -r 14.5-RELEASE upgrade работает с любого поддерживаемого или недавно снятого с поддержки выпуска. Для перехода на 15.1 официально поддерживаются исходные выпуски 14.4 и 15.0, поэтому с более старых систем сначала поднимитесь до последнего 14.x.
Сколько раз нужно запускать freebsd-update install?
При патчах внутри выпуска — один раз. При переходе на новый минорный выпуск — два: ядро, перезагрузка, мир. При переходе на новую основную версию — три: третий запуск после переустановки пакетов удаляет старые библиотеки.
Обновляет ли freebsd-update программы из портов и пакетов?
Нет. Он обновляет только базовую систему: ядро, userland, при необходимости /usr/src. Nginx, PHP, MySQL и всё остальное из /usr/local обновляется через pkg upgrade или пересборкой портов.
Нужно ли переходить на pkgbase?
Не обязательно. В 15.x оба способа поддерживаются, и freebsd-update остаётся штатным для классических установок. Проект планирует со временем сделать pkgbase основным. Переводить рабочий сервер стоит по официальной инструкции и после проверки на тестовой машине.
Как обновить jail?
У freebsd-update есть ключи -b (корень другой системы) и -j (имя запущенного jail). Удобнее пользоваться средствами менеджера jail (bastille, iocage, ezjail), они вызывают freebsd-update правильно. Мир jail не должен быть новее ядра хоста.
Что делать, если сервер не загрузился после обновления?
Через консоль выберите в меню загрузчика старое ядро (kernel.old) или прошлое загрузочное окружение ZFS. Загрузившись, разберитесь с причиной: чаще всего это модуль ядра из портов или свой loader.conf. Если менялся только последний install, поможет freebsd-update rollback.