[FreeBSD]
FreeBSD - Обновление версии
FreeBSD операционная система, которая непрерывно развивается. При этом, как и в любой динамичной системе, появляются новые номерные версии.
Так как статья написана во времена 13-й версии, но некоторые скриншоты от 13-й версии - это в общем не принципиально - всё практически так эе и в общем только для иллюстрации процесса.
Текущую версию FreeBSD можно проверить на официальном сайте:
На данный момент (02.12.2025) есть три стабильных версии FreeBSD: 14.3, 15.0, 13.5 и разрабатываемая 16.0.
На моей домашней и большинстве рабочих систем была установлена 14.3. Так, как вышла 15.0, то надо обновить до актуального состояния - начнём естественно с домашней системы, как наиболее опекаемой. А на некоторых рабочих ещё и 13-я останется.
Запускаем консоль. Проверяем текущую версию:
# uname -a
FreeBSD wfwc-001 15.0-RELEASE FreeBSD 15.0-RELEASE releng/15.0-n280995-7aedc8de6446 GENERIC amd64
Для обновления текущей версии до актуального состояния и установки новой версии в FreeBSD имеется специальная команда freebsd-update. Есть и другие способы, но этот самый простой.
Так же надо иметь действующее на вашей системе подключение к интернет и выдать две команды для запуска обновления.
Сначала получение:
# freebsd-update fetch
А затем, после завершения получения необходимых компонентов обновления, провести их установку:
# freebsd-update install
Так же во время работы этого инструмента могут появляться сообщения и предложения о выполнении некоторых действий, которые инсталлятор не может выполнить самостоятельно: в основном это правка конфигурационных файлов, как правило несложная, и вывод некоторых сообщений о проведённых изменениях.
Установку новой версии FreeBSD поверх текущей осуществляют этим же инструментом: freebsd-update с дополнительными ключами, которые скажут о том, что надо установить новую версию:
# freebsd-update upgrade -r 15.0-RELEASE
Будет проведена проверка системы и так же скачивание необходимых обновлений:
# freebsd-update upgrade -r 15.0-RELEASE
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching metadata signature for 15.0-RELEASE from update1.freebsd.org... done. Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Inspecting system... done.
The following components of FreeBSD seem to be installed:
kernel/generic src/src world/base world/lib32
The following components of FreeBSD do not seem to be installed:
kernel/generic-dbg world/base-dbg world/lib32-dbg
Does this look reasonable (y/n)?
Где нам сообщат о том, что будет обновлено:
kernel/generic src/src world/base world/lib32
То есть ядро ОС, исходники ядра и мира (всё, что не входит в ядро, но является частью ОС - называют world - мир - хиппи делали бсд :))
и что обновлено не будет:
kernel/generic-dbg world/base-dbg world/lib32-dbg
Не обновятся отладочные варианты ядра и мира, но они у меня и не установлены. Так как в настоящий момент ничего связанного с отладкой ядра, драйверов, библиотек и пр. я не занимаюсь, а для прикладных программ отладочные версии соответствующих компонент не нужны.
Будет задан вопрос:
Does this look reasonable (y/n)? (Выглядит ли это приемлемым (y/n)?)
Ну наверное да :) Отвечаем "y".
Начнётся скачивание необходимого для обновления.
Когда скачается всё, что нужно:
Сообщение о окончании скачивания и применении обновлений для текущей системы. Затем будет докачено недостающее и просьба перейти на ручную правку :(
Так, как я для себя в настольной системе изменяю системные настройки на те, что мне удобнее, но отличные от стандартного и принятого в FreeBSD по умолчанию, то и появляется первый вопрос о том надо ли вернуть суперпользователю root настройки принятые по умолчанию, а именно: вернуть стандартное значение для командной оболочки: изменить
root:*:0:0:Charlie &:/root:/bin/zsh на root:*:0:0:Charlie &:/root:/bin/csh
Но так, как мне это не надо я оставляю своё и убираю предлагаемое. Что в общем не совсем правильно: так, как несколько нарушает одно из правил FreeBSD (и любого unix): "root не должен иметь настроек окружения отличных от стандартных" - не рекомендуется даже делать локализацию окружения - нужно оставлять "как есть" и анлоязычное, но я же тут вроде главный - потому делаю так, как мне больше нравится. Мне так нужно и так мне удобнее... :)
Далее будет ещё несколько вопросов, если вы изменяли системные файлы в /etc и несколько сообщений, что же именно меняется в системе:
В конце сообщений есть указание о том, что применить все изменения надо командой:
# freebsd-update install
По завершению её работы будет инструкция, что сделать после перезагрузки:
То есть надо будет перезагрузиться и, если всё прошло хорошо и обновление успешно, снова выдать команду freebsd-update install ещё раз.
Но перед перезагрузкой надо выдать на всякий случай ещё две команды, которые связаны с файловой системой zfs и zpool - если, конечно используется у вас эта файловая система:
# zpool upgrade -a
# zfs upgrade -a
и обновить загрузчики операционной системы, если у вас используется загрузка с GPT разбивкой дисков. Не забываем, указывать в ключе -i правильный раздел диска (сверившись предварительно с информацией от gpart show):
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 2 nvd0
и повторяем для всех дисков, что используются у вас в системе в качестве загрузочного:
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 2 nvd1
Если используется загрузчик uefi, то надо об6овить и его.
У вас для этих загрузчиков должны быть смонтированы и организованы соответствующие точки монтирования файловых систем uefi boot я их прописал в /etc/fstab:
/dev/nvd0p1 /boot/efi0 msdosfs rw 2 2
/dev/nvd1p1 /boot/efi1 msdosfs rw 2 2
В принципе монтировать их на постоянной основе не нужно, можно делать это по мере необходимости соответствующей командой перед непосредственно записью загрузчика:
# mount_msdosfs /dev/nvd0p1 /boot/efi0
# mount_msdosfs /dev/nvd1p1 /boot/efi1
Копируем загрузчики:
# cp /boot/loader.efi /boot/efi0/efi/boot/bootx64.efi
# cp /boot/loader.efi /boot/efi0/efi/boot/shellx64.efi
# cp /boot/loader.efi /boot/efi1/efi/boot/bootx64.efi
# cp /boot/loader.efi /boot/efi1/efi/boot/shellx64.efi
# cp /boot/loader.efi /boot/efi0/efi/freebsd/loader.efi
# cp /boot/loader.efi /boot/efi1/efi/freebsd/loader.efi
Подробнее об этом тут: FreeBSD. Файловая система zfs.
Перезагружаемся и после успешной загрузки выдаём команду:
# freebsd-update install
Будет сообщение о том что обновление завершено и в общем хоть и не требуется перезагрузки, но мы её всё-таки делаем и уже после перезагрузки проверяем, что у нас теперь:
# uname -a
Видим, что то, что нужно. Но... у нас на самом деле по-сути обновлены только ядро, утилиты и наборы библиотек, исходные коды ядра и утилит, относящихся к самой системе. Но нам надо обновить так же и всё прикладное и стороннее в системе. Оболочку (KDE) и все проинсталлированные программы и пр. пр.
Это тоже просто:
# pkg upgrade
Собственно, всё практически такое же как было в предыдущей версии. Обновлений не много. Соглашаемся и наблюдаем, как оно установится:
И, как завершающий штрих, если вы пользуетесь системой ports, то их в общем тоже можно обновить - не обязательно сейчас - можно это делать по мере необходимости - так, как они в общем для работы системы не требуются и нужны только, если вы делаете сборки ядра из исходных кодов (новые коды ядра, кстати, установлены при обновлении системы) и установки ПО из исходных кодов из коллекции ports. Это удобно делать с помощью утилиты git.
Запускаем скачивание ports:
# git clone https://git.FreeBSD.org/ports.git /usr/ports
Если ports не был установлен раньше, если он был установлен и через git, то можно обновить git pull или скачать его заново, предварительно удалив каталог ports и скачав его заново.
Так же можно поступить немного иначе, например если /usr/ports - это отдельная файловая система zfs:
# git clone https://git.FreeBSD.org/ports.git /usr/ports.000
# rm -r /usr/ports/*
# mv -r /usr/ports.000/* /usr/ports
Затем надо построить файл индекса для поиска нужных пакетов:
# make index
или скачать готовый
# make fetchindex
"то позволит быстро находить нужный пакет (не прибегая к утилите find), например найти каталог Minnight Commander
# make search name=mc
или, если не знаете точного названия пакета найти по любому предполагаемому слову:
# make search key=clone
Получение исходных кодов ядра:
# git clone --branch releng/15.0 https://git.FreeBSD.org/src.git /usr/src
аналогичным образом, как для ports
В общем всё. Система обновлена. Удачи.
[FreeBSD]