Категорії
FreeBSD

Обновляем FreeBSD

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

Здесь будут рассмотрены 2 способа: через git и через 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

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

через git – новый метод

# git clone -b releng/13.0 https://git.freebsd.org/src.git src

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

Используйте одну из 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 (Официально уже закрыт, используйте только git)

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

Примечание.

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

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

1) Установка cvsup и предварительная настройка. (Официально уже закрыт, используйте только git)

Ставим 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 -p

UPD.

Начиная с 9-ой (а в 14-ой уже obsoleted) версии рекомендуют использовать вместо mergemaster использовать etcupdate:

# etcupdate -p

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 -F

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

# mergemaster -iFUP

UPD.

Начиная с 9-ой (а в 14-ой уже obsoleted) версии рекомендуют использовать вместо mergemaster использовать etcupdate: (n – dry-run mode)

# etcupdate -nFB

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

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

7) PS

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

$ uname -K
1003000
$ uname -U
1001000

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

# pkg check -Ba

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

# portupgrade -af

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

Так же важно проверить ABI установленых пакетов, что бы они были той версии, которой ОС. Сделать это можно так:

$ pkg query "%n-%v: %q"

А вот так проверить ABI самой ОС:

$ pkg -vv | grep -i abi

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 адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff