FreeBSD: обновление системы при помощи freebsd-update

Автор: | 06/02/2013
 

freebsd_logoВ операционной системе 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     root@obrian.cse.buffalo.edu:/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») будут пересобираться.