В операционной системе FreeBSD есть два различных способа установки обновлений – бинарное обновление при помощи стандартной утилиты freebsd-update, либо обновление из исходных текстов, которые можно получить при помощи SVN.
Процесс обновления системы на более новую версию описан в статье FreeBSD: обновление 8.2 RELEASE до 8.3 RELEASE.
Первый способ более простой, но он не будет работать в том случае, если используется нестандартное ядро. Точнее – можно на время установить версию ядра GENERIC, провести обновление world, после чего вручную пересобрать заново ваше ядро. В случае, если вы запускаете freebsd-update на системе с нестандартным ядром – система выведет предупреждение:
WARNING: This system is running a «MYKERNEL» kernel, which is not a kernel configuration distributed as part of FreeBSD 9.0-RELEASE. This kernel will not be updated: you MUST update the kernel manually before running »/usr/sbin/freebsd-update install»
Но в в таком случае будет проще выполнить обновление из исходных текстов, которые можно получить при помощи SVN (которая пришла на смену устаревшей CVS).
Рассмотрим первый вариант, с помощью freebsd-update.
Утилита freebsd-update имеет всего несколько опций:
fetch – получает обновления для текущей архитектуры и конфигурации, например – для установки новых патчей безопасности текущей версии;
cron – случайно, с промежутком от 1 до 3600 секунды выполняет fetch для получения обновлений, при обнаружении обновлений – отправит письмо администратору;
upgrade – используется для обновления на новый релиз, например – при обновлении 8.* на 9.*;
install – установка полученных обновлений;
rollback – откатывает внесённые изменения, удаляет обновления.
Процесс обновления включает в себя 3 этапа – получение обновлений, установка, и завершение установки.
Дополнительную настройку обновления можно выполнить при помощи файла /etc/freebsd-update.conf.
Узнать последние изменения и текущую версию ревизии можно на странице http://svnweb.freebsd.org/base/releng/9.0/sys/conf/newvers.sh?view=log.
Проверить текущую версию вашей системы можно несколькими способами:
# grep -A 2 ‘TYPE=”‘ /usr/src/sys/conf/newvers.sh
TYPE=”FreeBSD”
REVISION=”9.0″
BRANCH=”RELEASE”
Или:
# uname -srmi
FreeBSD 9.0-RELEASE i386 GENERIC
Или:
# uname -v
FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:15:25 UTC 2012 [email protected]:/usr/obj/usr/src/sys/GENERIC
Для того, что бы получить обновления – выполняем:
# freebsd-update fetch
Looking up update.FreeBSD.org mirrors… 4 mirrors found.
Fetching public key from update5.freebsd.org… done.
Fetching metadata signature for 9.0-RELEASE from update5.freebsd.org… done.
…
Inspecting system… done.
Preparing to download files… done.
Fetching 221 patches…
…
После окончания загрузки файлов – будет выведен список файлов и каталогов, которые будут обновлены:
The following files will be updated as part of updating to 9.0-RELEASE-p7:
…
Теперь можно приступить к установке обновлений:
# freebsd-update install
Installing updates… done.
Если обновления коснулись ядра или его модулей – необходимо перезагрузить сервер, и повторить установку обновлений.
Если обновление производится в системе с нестандартным ядром – используйте nextboot для загрузки ядра GENERIC после перезагрузки системы:
# nextboot -k GENERIC
Теперь перезагружаем систему:
# shutdown -r now
После перезагрузки запускаем повторно установку:
# freebsd-update install
Если система сообщает, что:
# freebsd-update install
No updates are available to install.
Значит обновление завершено.
Проверим текущую версию:
# uname -v
FreeBSD 9.0-RELEASE-p3
Для проверки – можно ещё раз запустить freebsd-update:
# freebsd-update fetch
…
Inspecting system… done.
Preparing to download files… done.
No updates needed to update system to 9.0-RELEASE-p3.
В случае, если что-то пошло не так – можно “откатить” установку обновлений:
# freebsd-update rollback
Uninstalling updates… done.
Перезагружаем сервер и проверяем текущую версию:
# uname -v
FreeBSD 9.0-RELEASE
Что бы проверять наличие обновлений автоматически – в cron можно добавить задачу:
@daily freebsd-update cron
В случае ошибки “freebsd-update: not found” – меняем строку на:
@daily /usr/sbin/freebsd-update cron
Так, раз в сутки, ночью, freebsd-update будет проверять наличие обновлений и, при их наличии, загрузит их на машину и уведомит письмом администратора. После чего необходимо вручную провести установку обновлений.
P.S. Вы могли заметить, что некоторые выводы консоли содержат версию 9.0-RELEASE-p7, в то время как uname выводит версию 9.0-RELEASE-p3. Связано это с тем, что при этом обновлении не было затронуто ядро системы, именно поэтому информация в uname не соответствует содержимому файла /usr/src/sys/conf/newvers.sh.
При выполнении обновления системы из исходных текстов – такого наблюдаться не будет, т.к. и world (“мир”) и само ядро (“kernel”) будут пересобираться.