Обновляем FreeBSD

Обновил статью 11.10.2016

Здесь будут рассмотрены 3 способа: через svn, через cvsup (уже не работает) и через freebsd-update (бинарное обновление).

через freebsd-update (бинарное обновление, только для ядра GENERIC)

Это так сказать полное обновление всех бинарников и ядра на GENERIC.

Последовательно выполним следующие команды (при условии, что у вас ядро GENERIC. Иначе будет ругань):

#freebsd-update -r 7.2-RELEASE upgrade
#freebsd-update install
#reboot
#freebsd-update install
#reboot

Если при выполнении freebsd-update … upgrade получаем ошибку:

no mirrors remaining giving up

то пробуем указать IP одного из серверов (update.freebsd.orgupdate7.freebsd.org):

#freebsd-update -s 63.140.118.125 -r 7.2-RELEASE upgrade

и дальше как обычно.

через svn (или svnup)

Используйте одну из 2-х команд:

#svnlite co svn://svn.freebsd.org/base/releng/10.1/ /usr/src/
#svn co https://svn.FreeBSD.org/src/head /usr/src
#cd /usr/src && svn update

через cvsup/csup (Официально уже закрыт, используйте только svn)

Здесь будет описан метод обновления с FreeBSD 7.0 до FreeBSD 7.1-RELEASE-p2, то есть до последнего релиза на момент обновления. Сам процесс состоит из нескольких этапов.

Примечание.

В процессе обновления нужно придерживаться такого порядка: собрать мир (не не инсталлировать), собрать и инсталлировать новое ядро (если вдруг что-то пойдёт не так, можно всегда загрузить старое ядро) и только после того, как вы поняли, что всё нормально работает — инсталлировать мир. В ином случае вы можете получить новый мир и старое ядро (если к примеру, новое не грузиться) — а это уже очень плохо, вплоть до незагружаемости сервера.

Будьте внимательны!

1) Установка cvsup и предварительная настройка.

Ставим cvsup-without-gui. (у кого оболочка bash, команду rehash делать не нужно!) Если у вас 7.0 и выше, то cvsup ставить не надо, есть уже штатный csup.

#cd /usr/ports/net/cvsup-without-gui && make install clean && rehash

Примечание.

А можно и не ставить csvup, а использовать штатный csup. В новых версиях переходят усиленно на svn, поэтому рекомендую использовать утилиту snvup (есть в портах) — легковесная замена стандартному svn.

После этого создаём файл такого содержания

*default tag=RELENG_7_1
*default host=cvsup5.ua.freebsd.org
*default prefix=/usr
*default base=/var/db
*default release=cvs tag=RELENG_7_1
*default delete use-rel-suffix
#*default compress
src-all
#*default tag=.
#ports-all

и обзываем его, например, /etc/cvs.conf

Примечание:

Если указать вместо 7_1 просто 7, то мы обновимся до PRERELEASE.

Теперь собственно будем выкачивать обновления. У кого трафик ограниченный — можно расскомментировать строку *default compress.

#cvsup /etc/cvs.conf

или так

#csup /etc/cvs.conf

Эта процедура очень длительная. Кстати, есть ещё несколько альтернативных зеркал

cvsup5.ua.freebsd.org
cvsup7.ua.freebsd.org

2) Пересобираем ядро.

После того, как всё было выкачано, приступаем к пересброрке ядра. Если у вас ядро отличается от GENERIC, рекомендуется пересобрать сначало GENERIC, а потом после того, когда система обновлена — только тогда пересобрать уже изменённое. От версии к версии некоторые переменные могут меняться. Если вы находитесь в непосредственно близко, можете пересобирать изменённое ядро, а не GENERIC. Первый мой опыт был именно пересборка не GENERIC, а моего. Хотя довольно много слышал, как некоторые админы после удалённых обновлений спешили к сервакам, ибо ядро не грузилось :). Такое вероятнее всего бывает, когда обновляете, например, с 5 до 6, или 6 до 7. Если обновления происходят в пределах главной версии (с 7.0 до 7.1) то можно пробовать и не GENERIC пересобирать.

Перед сборкой рекомендуется сделать

#rm -rf /usr/obj/usr/src/

а потом уже

#cd /usr/src && make -j4 -s buildworld && make -j4 -s buildkernel KERNCONF=GENERIC INSTKERNNAME=kernel.new

Примечание: при апдейте на версию 10.3 и выше, нужно дополнительно выполнить:

# cd /usr/src && make -C sys/boot install

после этого продолжаем:

#cd /usr/src && make -s -j4 installkernel KERNCONF=GENERIC INSTKERNNAME=kernel.new

Параметр -j4 означает собирать в 4 потока, а параметр -s — показывать только то, что скомпиллилось, а не полностью процесс компиляции. То есть, если у вас как минимум dual-core, тогда имеет смысл использовать этот параметр и сборка теоретически должна пройти в несколько раз быстрее.

Так же можно использовать параметры:

— INSTKERNNAME=kernel.new, который установит новое ядро с именем kernel.new. Если этого не требуется, то можете убрать INSTKERNNAME=kernel.new

— KODIR=/boot/kernel.other, явно указывает куда устанавливать ядро

Если всё удачно (а что бы было всё удачно, рекомендую использовать nextboot), то выполняем ребут чтобы в случае проблем можно было остаться со старой версией системы (загрузить старое ядро и потом скопировать его в /boot/kernel):

#/sbin/shutdown -r now

3) mergemaster и согласование паролей и групп.

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

#mergemaster -p

UPD.

Начиная с 9-ой версии, рекомендуют использовать вместо mergemaster использовать etcupdate.

4) Обновляем «мир»

#cd /usr/src && make -s -j4 installworld

При выполнении следующей команды, будьте внимательны, так как она удаляет старые библиотеки, с которыми могут быть слинкованы, например, ssh или bash. Эту команду лучше делать уже после полного пересбора критичного ПО. Если вы обновляетесь в пределах релиза (например, с 10.1 на 10.3), то данная команда практически безобидна, но лучше ещё раз всё проверить.

#yes | make delete-old && yes | make delete-old-libs

5) mergemaster и обновления всех конфигурационных файлов.

Сейчас предстоит самая-самая трудоёмкая процедура. Будут задаваться вопросы о замене или сохранении существующих файлов конфигурации. Для большего познания mergemaster рекомендую прочесть хороший обзор этой утилиты здесь

Выполняем команду:

#mergemaster -F

А можно попробовать выполнить и в автоматическом режиме (естественно, на свой страх и риск):

#mergemaster -iFUP

6) Заключительный reboot.

Вообщем, делаем эту команду, и сидим молимся :). Если что-то пошло не так — тогда читаем, думаем и гуглим 🙂

7) PS

Обязательно проверьте, одной ли версии ядро и мир:

$ uname -K
1003000
$ uname -U
1001000

После удачной загрузки рекомендую проверить установленные пакеты (если используете pkg-ng):

# pkg check -Ba

и по возможности обновить порты и обновить весь софт, который стоит. Как обновить порты описано здесь, а как обновить софт — используем следующую команду:

#portupgrade -af

Эта команда обновит все установленных пакеты, а так же обновит базу, в которой находится инфа о пакетах (название, версии, зависимости, и прочее).

PPS. А можно всё это и одной командой сделать:

#csup /etc/cvs.conf && rm -rf /usr/obj && make cleanworld && make buildworld && make buildkernel KERNCONF=GENERIC && make installkernel KERNCONF=GENERIC && reboot

Примечание.

При обновлении с 7.2 на 8.0-RC2 после выполнения конечного mergemaster — начали сыпаться ошибки. И что я только не делал, и очищал всё и закачивал заново сорцы и пересобирал. Ошибки начали сыпаться уже при сборке мира. Почитал в инете, что одному челу помог ребут. Я ребутнул, ядро загрузилось новое, а вот «мир» — остался прежний. Это я понял, потому что большинство прог отказались запускаться. Я пересобрал ещё раз ядро, мир и перегрузился. После этого всё заработало.

На другой машине вылетела ошибка при выполнении mergemaster. Я перегрузился, и заново запустил mergemaster, после чего ошибок уже не было.

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

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