Обновление FreeBSD

Во FreeBSD cуществует 2 метода обновленией — через получение бинарных кодов с серверов update.freebsd.org (freebsd-update) и обновление через сборки из исходных кодов ( CTM, CVS, SVN )

Через freebsd-update

Использование freebsd-update, в большинстве случаев, является более предпочтительным вариантом по сравнению с обновлением через исходные коды. С помощью этой утилиты, пропускаются шаги по получению патча, применению его на исходный код и компиляция в бинарные файлы, что заметно экономит как время, так и ресурсы обновляемой машины. freebsd-update призвана обеспечивать две функции — обновлять систему через получение бинарных файлов на более новые версии, а также поддерживать безопасность текущего релиза, через получение и применение патчей.

 

Конфигурационный фаил

Вы можете редактировать конфигурационный файл /etc/freebsd-update.conf для большего контроля над процессом и более гибной работы утилиты.

 Components src world kernel

— Список компонент системы, которые подлежат обновлению. По-умолчанию, система обновляет исходный код (src), основную базу (world) и ядро системы (kernel). Вы можете обновить конкретный компонент выборочно, указав через »/» категорию, которую следует обновить, например

 src/bin - обновит лишь /usr/src/bin, world/games - обновит лишь /usr/games

Рекомендуется эти опции оставлять по-умолчанию, поскольку обновление лишь части системы может приводить к неожиданному поведению системы.

 IgnorePaths

— Пути, которые указаны в этой опции, будут проигнорированы на этапе инсталляции обновлений. Эту опцию имеет смысл использовать, чтобы не дать freebsd-update переписать Ваши локальные модификации

 UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile

— По путям, перечисленным в UpdateIfUnmonified, будут применены обновления только в том случае, если содержимое этих файлов не было модифицированно пользователем.

Опция KeepModifiedMetadata заставит freebsd-update сохранить все изменения во время модификаций.

 MergeChanges /etc/ /var/named/etc/

— При обновлении на более новый релиз FreeBSD, пользовательские модификации файлов, перечисленные в MergeChanges пройдут процедуру слияния с более новыми версиями файлов из нового релиза. Процедура работы аналогична работе с шаго mergemaster при обновлении через исходные коды.

 # WorkDir /var/db/freebsd-update

— Временный каталог, куда будут загружены обновления. Партишен, где находится этот катаолг должен содержать не меньше 1 Гигабайта доступного дискового пространства

 # StrictComponents no

— Если установлено в yes, список Componets считается полным и freebsd-update не будет пытаться провести изменения за пределами списка. Удобно, когда freebsd-update пытается обновить файл принадлежащий списку Components.

Патчи безопасности

Патчи безопасности могут быть загружены с удаленной машины следующими командами:

 freebsd-update fetch
 freebsd-update install

В том случае, если патчи безопасности относились к ядру (ядро или модули), по завершению работы freebsd-update систему необходимо будет перезагрузить. Для регулярной отработки этой операции, можно воспользоваться cron(8), поместив в него следующую строчку:

 @daily                                  root    freebsd-update cron

Эта строчка заставит freebsd-update каждый день проверять наличие обновлений для вашей системы. В том случае, если патчи безопасности имеются, они будут сохранены на локальный диск, но не применены. Применение патчей необходимо проводить вручную.

В том случае, если после freebsd-update работа системы нарушена, есть способ вернутся на прежнее состояние через команду

 freebsd-update rollback

Утилита freebsd-update в состоянии обновлять только GENERIC-ядро. В том случае, если Вы используете ядро собственной сборки, Вам потребуется его перекомпилировать после каждой отработки freebsd-update, в которой затронуты изменения относящиеся к ядру. freebsd-update также может обнаруживать и обновлять GENERIC ядро, по пути /boot/GENERIC (если оно существует), поэтому, хранить еще одно ядро в /boot/GENERIC — это хорошая идея.

Обновления

Шаг1: получение обновлений

Для того, чтобы обновить систему на определенный релиз, freebsd-update необходимо запускать с ключем -r, где после ‘r’ указывается конечная версия системы.

freebsd-update -r 8.1-RELEASE upgrade

После того, как необходимые категории будут сохранены начнется процесс их применения. Скорость операции зависит от скосрости и загрузки Вашей машины. Возможно, в процессе слияния конфигурационных файлов, система может столкнуться с трудностями и запустив редактор, потребует от Вас ручного вмешательства.

Обратите внимание, что на данном этапе, все изменения и слияния конфиг-файлов происходят в другом каталоге, поэтому, в случае проблем (пропажа питания), система загрузиться в привычное состояние, а шаги по обновлению придется делать заново.

Если вы используете не GENERIC ядро то бинарное обновление не получится. Я когда то пытался так обновится с MYGENERIC.

freebsd-update upgrade -r 8.1-RELEASE No mirrors remaining, giving up. 

Шаг2: применение обновлений для ядра

freebsd-update install

На этом этапе будут обновлено ядро и модули ядра. После этого шага, система нуждается в перезагрузке. Если система работает не на GENERIC ядре, используйте nextboot(8) для установки ядра следующей загрузки:

  nextboot -k GENERIC

Перезагрузка: shutdown -r now

Шаг3: применение обновлений userland

После перезагрузки, freebsd-update должна быть запущена вновь, для обновления базовых утилит и библиотек.

 freebsd-update install

Внимание! Поскольку на этом этапе возможна инсталляция библиотек более старших версий, сторонее ПО (например устанавливаемое из портов) требуется переустанавливать. Для этого можно воспользоваться утилитами (ports-mgmt/portupgrade, ports-mgmt/portinstall).

Если Вами используется не GENERIC ядро, самое время, чтобы его перестроить и установить ( cd /usr/src && make kernel KERNCONF=«MYKERNEL» )

 shutdown -r now

Процесс обновления завершен.

Из исходных кодов

Во FreeBSD имеется две ветки разработки: FreeBSD-CURRENT и FreeBSD-STABLE. FreeBSD-CURRENT является последними рабочими версиями исходных кодов FreeBSD и предназначена в первую очередь для разработчиков, тестеров и просто интересующихся людей. В отличие от FreeBSD-CURRENT ветка FreeBSD-STABLE является разработкой, из которой делаются основные релизы. Соответственно для использования на ответственных серверах рекомендуется FreeBSD-STABLE.

Для того чтобы иметь самые последние версии исходных текстов системы необходимо провести синхронизацию с любым из серверов проекта FreeBSD. Для этих целей воспользуемся утилитой cvsup с sup-файлом stable-supfile из каталога /usr/share/examples/cvsup. Это наиболее рекомендуемый метод, так как он позволяет вам загрузить набор исходных текстов один раз полностью, а затем загружать только произошедшие изменения.

cp /usr/share/examples/cvsup/stable-supfile /etc/cvsupfile
cat /etc/cvsupfile 
#c какого сервера качать исходники
*default host=cvsup.ru.FreeBSD.org
*default base=/var/db
*default prefix=/usr
#версия исходников 
#если не указывать версию в ветке (RELENG_8_1), то будут скачиваться исходники
#последней доступной версии, которая не обязательно может быть STABLE
*default release=cvs tag=RELENG_8_1
*default delete use-rel-suffix
#включаем сжатие
*default compress
#качать все исходники
src-all

Запускаем cvsup и ждем пока закончится обновление.

# cvsup -g -L2 /etc/cvsupfile

Шаг1: компиляция мира

Запуск процесса сборки userland

 cd /usr/src
 make buildworld

(PS: Процесс длительный, зависящий от быстродействия Вашей системы и файлов /etc/src.conf, /etc/make.conf Если Вы планируете и дальше поддерживать состояние системы в актуальном состоянии, можно добавить ключ NO_CLEAN для make, чтобы система не собирала объектные файлы для тех исходных кодов, кто не претерпел изменения, что заметно экономит время при вторичной и будущих перекомпиляций:

 make buildworld -DNO_CLEAN

Также, можно попробовать собирать через параллельную сборку (ключ -j для make(1)), указав сборку в несколько потоков. Рекомендуется для мультипроцессорных(-ядерных) систем:

 make buildworld -j4 -DNO_CLEAN

Шаг2: компиляция ядра и инсталляция

Запуск процесса сборки ядра и инсталляция в /boot/kernel/*

 cd /usr/src
 make kernel KERNCONF="KERNEL_NAME"

где KERNEL_NAME — имя ядра. Если кастомизации конфиг ядра не было, как правило — GENERIC Ваше старое ядро при этом, будет скопировано в /boot/kernel.old/kernel

Указать, что следующая загрузка системы пройдет в Single-mode (если Вы обновляете локальную машину, либо имеете доступ к удаленной машине посредством KVM/iLO и тп:

 nextboot -k kernel -o "-s"

Если обновляемая система удаленная, только с доступом по сети в ОС, этого не требуется, однако риск столкнуться с проблемой возрастает.Что бы снизить риск можно отключить некоторые службы.Отключить в /etc/rc.conf все службы, в которых нет необходимости для запуска системы это СУБД, FTP, Apache и т.д. (sshd не выключать!)

Перезагрузка системы:

 shutdown -r now

Шаг3: инсталляция мира

После загрузки в Single-mode. Примонтируем все в RW-режим:

 /sbin/mount -a

Убедимся, что загруженное ядро является работоспособным и обновленным:

 /usr/bin/uname -a

Запускаем инсталляцию свежескомпилированных базовых программ:

 cd /usr/src
 make installworld

Перезагружаемся:

 /sbin/shutdown -r now

Шаг4: синхронизация конфиг файлов

В данный момент, система загружена на обновленую версию, однако содержащую старые библиотеки от предыдущего релиза и старый синтаксис конфигурационных файлов (а возможно и уже устаревших и лишних)

Исправляется последнее через интерактивную работу с mergemaster

Несколько слов о работе этой утилиты. Она сравнивает уже установленные файлы конфигурации с теми которые предлагаются новой версией FreeBSD. Если есть отличия, то на экране появляется сообщение об этом. Первой строкой в нем идет имя файла, который не соответствует новым требованиям, а ниже сами отличия. Знаком «-» помечаются строки, которые утилита собирается удалить, а «+» — которые будут добавлены.

В конце предлагаются следующие варианты:

d — удалить предлагаемый вариант и оставить старый;

i — установить предлагаемый вариант, удалив старый;

m — сравнить построчно старый и предлагаемый вариант;

v — посмотреть отличия в файлах снова.

Чаще всего можно жать i, но иногда это может привести к замене ваших настроек на дефолтные. Так что будте внимательны. Например, у меня установлен exim, а mergemaster предложил вернуть файл /etc/mail/mailer.conf в первоначальное состояние. Это мне не нужно, поэтому выбираю m.

Начинается построчное сравнение файлов. Экран делится на две части, слева строки из старого файла, а справа из предлагаемого. При нажатии на «Enter» выводятся возможные варианты последующих действий:

l — использовать вариант слевой стороны;

r — использовать вариант справой стороны;

и т.д.

В моем случае, чтобы оставить старые настройки жмем «l». После того как сравнение кончилось, предлагаются следующие варианты:

i — установить получившийся файл;

r — повторить сравнение снова;

v — просмотреть получивщийся файл.

Возможен также вариант, когда с новой версией системы появляются новые файлы, которых до этого не было. В таком случае предлагается только 2 варианта:

d — удалить предлагаемый вариант и оставить старый;

i — установить предлагаемый вариант, удалив старый.

И в таком же духе сравниваются все файлы.

mergemaster -p

по окончанию выполните

 exit

для загрузки в многопользовательский режим, если Вы загружены в однопользовательский.

Шаг5: удаление старый файлов и библиотек

Удалить устаревшие для Вашего релиза файлы и библиотеки следующими действиями:

 cd /usr/src
 make delete-old
 make delete-old-libs

Данные команды интерактивно будут Вас спрашивать удаление конкретного устаревшего файла. Если вы уверены в себе и своей системе, удалить без вопросов можно через

 yes | make delete-old
 yes | make delete-old-libs

Процесс обновления завершен.

Ссылки

http://wiki.bsdportal.ru/doc:freebsd_update

http://www.lissyara.su/articles/freebsd/tuning/make_buildworld/

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *