Обновление FreeBSD до последней стабильной версии

Предполагается что мы обновляем удаленную машину. Для локальной машины пара деталей будут отличаться. Например, после сборки ядра, на локальной машине желательно пререзагрузиться в single mode для дальнейшего обновления, на удаленной же машине - при этом мы потеряем сеть %)
Почистим каталоги от предыдущего построения системы
chflags -R noschg /usr/obj/usr
rm -rf /usr/obj/usr
cd /usr/src
make cleandir
make cleandir
Обновляем исходники системы до последней стабильной версии.

Обновляться будем с помощью cvsup. Для cvsup нужны supfiles - файлы где будет написано что, где и куда обновлять.
Файлы с примерами supfiles - берем в /usr/share/examples/cvsup/
После копируем файлы куда-нибудь в укромное место, например в /root/supfiles где начинаем из изменять.
Для начала нам нужен supfile для загрузки исходных кодов системы.
Для этого берем файл stable-supfile и в строчке
*default release=cvs tag=RELENG_8_2
Ставим желаемый для нас CVS tag. Подробнее о CVS tag-ах можно посмотреть в handbook-е
Пусть CVS tag будет к примеру RELENG_8_2 - что означает что мы обновимся то релиза FreeBSD 8.2
После того как мы закончим с supfile-ом - мы можем начать обновление исходных кодов системы:

cvsup -g -L 2 /root/supfiles/stable-supfile

Альтернативный вариант обновления через SVN:
Устанавливаем порт: /usr/ports/devel/subversion-freebsd
cd /usr/ports/devel/subversion-freebsd
make install clean

Затем получаем исходники:
svn checkout svn://svn.freebsd.org/base/stable/8 /usr/src

После того как мы обновили исходные коды системы, имеет смысл проверить файлы make.conf и src.conf на предмет потребных вам настроек.
Правим make.conf и src.conf

В файле /etc/make.conf указываются различные опции компиляции мира и портов, C и C++ флаги и тому подобное.
Так же имеет смысл добавить в /etc/make.conf
NO_PROFILE=true

Это выключит генерацию профилирующего кода. Вам это скорее всего никогда не понадобится.
Можно добавить, что укажет конфигурационный файл для ядра по умолчанию:
KERNCONF=PROXY_KERNEL

тогда при сборке ядра, можно будет вместо
make buildkernel KERNCONF=PROXY_KERNEL
make installkernel KERNCONF=PROXY_KERNEL

писать:
make buildkernel
make installkernel

В src.conf можно отказаться от сборки отдельных частей мира. Например собрать мир без sendmail.
Подробнее смотрите в man make.conf, /usr/share/examples/etc/make.conf и man src.conf. Так же обратите внимание на ссылки в конце статьи.
Собираем мир и ядро

Итак мы готовы к сборке - собираем мир:
cd /usr/src
make buildworld

После окончания сборки мира, можем приступать к сборке ядра.
Для сборки ядра нам прежде всего понадобится конфиг ядра. Лучший вариант это взять рабочий конфиг ядра из /usr/src/sys/i386/conf/GENERIC
Скопировать его в укромное место (например в /root/kernels), затем переименовать, например в PROXY_KERNEL и там менять как вам будет угодно.
О сборке ядра смотрите в handbook, это как всегда всеобъемлющая книга.
После того как изменения будут сочтены достаточными можно создать ссылку в каталог и сделать таким образом ядро доступным для сборки.
cd /usr/src/sys/i386/conf/
ln -s /root/kernels/PROXY_KERNEL PROXY_KERNEL

После переходим к сборке ядра.
cd /usr/src
make buildkernel KERNCONF=PROXY_KERNEL
make installkernel KERNCONF=PROXY_KERNEL

По возможности отключаем сетевые сервисы (ftp, apache, samba и т.д.), sshd конечно оставляем. Выполняем перезагрузку. После перезагрузки - мы будем уже с новым ядром.
reboot
Обновления конфигурационных файлов. установка мира

После перезагрузки начинаем обновление конфигурационных файлов и установку мира.
mergemaster -p
cd /usr/src
make installworld

Потом для
mergemaster

или
mergemaster -iFU

mergemaster сравнивает существующие конфигурационные файлы с теми, которые предлагаются новой версией FreeBSD. И если существуют отличия, то появляется сообщение об этом. Первой строкой в нем идет имя файла, который не соответствует новым требованиям, а ниже сами отличия.
Ключи во втором варианте вызова mergemaster означают:

-i что новые конфигурационные файлы нужно устанавливать автоматически

-U что файлы без пользовательских правок, нужно устанавливать автоматически.

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

Знаки:

- - этим знаком помечаются строки, которые mergemaster собирается удалить.

+ - этим знаком помечаются строки, которые будут добавлены.

Есть несколько вариантов управления и в низу mergemaster предлагают следующие варианты работы с текущим файлом:

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

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

m - сравнить и объединить при необходимости построчно старый и новый вариант.

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

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

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

r - использовать вариант с правой стороны.

и т.д.

После того как сравнение файла закончилось, предлагаются следующие варианты:

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

r - повторить сравнение снова.

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

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

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

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

И так сравниваются все файлы.

По окончании этой процедуры выполняем вторую перезагрузку.
reboot
Обновляем документацию

Для обновления документации нам нужен doc-supfile, пример которого можно взять все там же в /usr/share/examples/cvsup/
Если хочется закачивать только русскую и английскую документацию (к примеру) можно указать это в /etc/make.conf вписав туда строку:
DOC_LANG=en_US.ISO8859-1 ru_RU.KOI8-R

После выполняем загрузку свежей документации.
cvsup -h cvsup.FreeBSD.org -g -L 2 /root/supfiles/doc-supfile
Обновляем порты

Для обновления портов нам нужен ports-supfile, пример которого можно взять все там же в /usr/share/examples/cvsup/
После правки файла согласно нашим предпочтениям, выполняем загрузку свежих портов.
cvsup -h cvsup.FreeBSD.org -g -L 2 /root/supfiles/ports-supfile

Переиндексируем порты:
cd /usr/ports
make fetchindex

После загрузки свежих портов можно обновить уже установленные пакеты до последней версии:
Обновляем базу данных пакетов:
pkgdb -F

Что бы посмотреть какие пакеты требуют обновления
pkg_version -v | grep "need"

Собственно обновить пакеты:
portupgrade -a

Вуаля! - система обновлена

http://jakshi.org.ua/dokuwiki/обновление_freebsd_до_последней_стабильной_версии

Обновлено: 12.03.2015