Обновление мира («world») FreeBSD
Рассматривается переход с версии 8.2 на 9.0.
Во FreeBSD имеется две ветки разработки: FreeBSD-CURRENT и FreeBSD-STABLE. FreeBSD-CURRENT является последними рабочими версиями исходных кодов FreeBSD и предназначена в первую очередь для разработчиков, тестеров и просто интересующихся людей. В отличие от FreeBSD-CURRENT ветка FreeBSD-STABLE является разработкой, из которой делаются основные релизы. Соответственно для использования на ответственных серверах рекомендуется FreeBSD-STABLE.Для того чтобы иметь самые последние версии исходных текстов системы необходимо провести синхронизацию с любым из серверов проекта FreeBSD. Для этих целей воспользуемся утилитой cvsup с sup-файлом stable-supfile из каталога /usr/share/examples/cvsup. Это наиболее рекомендуемый метод, так как он позволяет вам загрузить набор исходных текстов один раз полностью, а затем загружать только произошедшие изменения. Если интернет трафик ограничен, то имеет смысл перенести исходные тексты с установочного диска и затем провести синхронизацию.
Копируем stable-supfile и приводим его содержание к следующему виду:
# cp /usr/share/examples/cvsup/stable-supfile /etc/ # vi /etc/stable-supfile
Выбираем cvsup сервер. Кому какой ближе. Для российских пользователей: cvsup2.ru.FreeBSD.org или cvsup3.ru.FreeBSD.org
*default host=cvsup2.ru.FreeBSD.org *default base=/var/db *default prefix=/usr
Загружаем исходные тексты 9.0 ветки. Если необходимо 5, 4, 3 или 2.2, то меняем на «RELENG_5″, «RELENG_4″, «RELENG_3″, «RELENG_2_2″ соответственно.
Если не указывать версию в ветке (RELENG_9_0), то будут скачиваться исходники последней доступной версии, которая не обязательно может быть STABLE. На момент правки статьи это 9.0).
*default release=cvs tag=RELENG_9_0 *default delete use-rel-suffix # Включаем сжатие трафика *default compress # Качаем полное дерево исходников src-all
Запускаем cvsup и ждем пока закончится обновление.
server# cvsup -g -L2 /etc/stable-supfile
Переходим в /usr/scr и начинаем процесс обновления. Запаситесь терпением, так как это занимает 1-2 часа на Core2Duo.
# cd /usr/src/ # rm -rf /usr/obj # make -j4 buildworld
Где j4 — компилировать в 4 потока. Рекомендуется для однопроцессорных машин, т.к. компиляция в большей степени требовательная к системе ввода-вывода, а не процессору. Для многопроцессорных это значение можно увеличить.
!!!ВАЖНО!!! Не используйте опцию -j для слабых машин (менее 300МГц). Это может привести к ошибкам при компиляции.
Для настройки системы можно использовать make.conf. Пример смотрите здесь /usr/share/examples/etc/make.conf
# make -j4 buildkernel KERNCONF=MYKERNEL
Где MYKERNEL — ваше ядро. Без KERNCONF=MYKERNEL собирается с ядром GENERIC. В следующей строке поступаем соответственно.
# make installkernel KERNCONF=MYKERNEL
Перезагрузимся
# reboot
Перейдем в однопользовательский режим. При загрузке жмем 4, либо из основного режима следующей командой:
# shutdown now
Монтируем разделы файловой системы.
# mount -u / # mount -a # mergemaster -p
Устанавливаем мир
# cd /usr/src # make installworld
Удаляем временные файлы
# make delete-old
# mergemaster
Несколько слов о работе этой утилиты. Она сравнивает уже установленные файлы конфигурации с теми которые предлагаются новой версией FreeBSD. Если есть отличия, то на экране появляется сообщение об этом. Первой строкой в нем идет имя файла, который не соответствует новым требованиям, а ниже сами отличия. Знаком «-» помечаются строки, которые утилита собирается удалить, а «+» — которые будут добавлены.
В конце предлагаются следующие варианты:
d — удалить предлагаемый вариант и оставить старый;
i — установить предлагаемый вариант, удалив старый;
m — сравнить построчно старый и предлагаемый вариант;
v — посмотреть отличия в файлах снова.
Чаще всего можно жать i, но иногда это может привести к замене ваших настроек на дефолтные. Так что будте внимательны. Например, у меня установлен exim, а mergemaster предложил вернуть файл /etc/mail/mailer.conf в первоначальное состояние. Это мне не нужно, поэтому выбираю m.
Начинается построчное сравнение файлов. Экран делится на две части, слева строки из старого файла, а справа из предлагаемого. При нажатии на «Enter» выводятся возможные варианты последующих действий:
l — использовать вариант слевой стороны;
r — использовать вариант справой стороны;
и т.д.
В моем случае, чтобы оставить старые настройки жмем «l». После того как сравнение кончилось, предлагаются следующие варианты:
i — установить получившийся файл;
r — повторить сравнение снова;
v — просмотреть получивщийся файл.
Возможен так же вариант, когда с новой версией системы появляются новые файлы, которых до этого не было. В таком случае предлагается только 2 варианта:
d — удалить предлагаемый вариант и оставить старый;
i — установить предлагаемый вариант, удалив старый.
И в таком же духе сравниваются все файлы.
Перезагрузимся
# reboot # cd /usr/src/ # make delete-old-libs
Все. Проверяем.
# uname -a ...9.0-RELEASE FreeBSD 9.0-RELEASE #0...
До обновления было FreeBSD 8.2-RELEASE
Для создания материала использована страница: http://www.lissyara.su/articles/freebsd/tuning/make_buildworld/
Локальное и удаленное обновление FreeBSD
Написал краткую справку об обновлении локальных и удаленных серверов в пределах одной ветки.
Обновление csup
Сначала вам нужно обновить исходные коды системы, и мы будем использовать штатные средства операционной системы csup. Конфигурационный файл готов, его необходимо скопировать и изменить, он находится в директории:
# cd /usr/share/examples/cvsup/ # ls README gnats-supfile refuse.README www-supfile cvs-supfile ports-supfile stable-supfile doc-supfile refuse standard-supfile
Укажем нужную версию операционной системы.
В существующем конфигурационном файле стоит текущая версия.
# cat standard-supfile | grep default *default host=CHANGE_THIS.FreeBSD.org *default base=/var/db *default prefix=/usr *default release=cvs tag=RELENG_7_1 *default delete use-rel-suffix *default compress src-all
Скопируем файл и немного изменим:
# cp standard-supfile standard-supfile-RELENG_8_2 # cat standard-supfile-RELENG_8_2 | grep default *default host=CHANGE_THIS.FreeBSD.org *default base=/var/db *default prefix=/usr *default release=cvs tag=RELENG_8_2 *default delete use-rel-suffix *default compress src-all
Теперь нам необходимо синхронизировать src делается просто:
# /usr/bin/csup -h cvsup4.ru.freebsd.org -g -L 2 \ /usr/share/examples/cvsup/standard-supfile-RELENG_8_2
Когда синхронизация завершилась, приступим к обновлению системы (не забываем прочитать файл UPDATING чтобы все прошло гладко). Предупреждаю, что сначала мы будем устанавливать, ядро GENERIC и если все пройдет гладко и вы протестируете хотя бы один день сервер то можете, скомпилируйте свое ядро.
Очистим директории, от предыдущего мусора соберем мир и ядро и установим ядро:
# cd /usr/obj ;chflags -R noschg * ;rm -rf * # cd /usr/src # make -j4 buildworld # make -j4 buildkernel KERNCONF=GENERIC # make installkernel KERNCONF=GENERIC
Теперь начинаются различия обновления локального и удаленного серверов. Рассмотрим два этих варианта:
Локальный сервер
Для безопасного и корректного обновления необходимо ввести машину в single mode можно сделать двумя способами:
- Перезагрузкой и выбором в стартовом меню загрузку в single mode (номер 4).
# shutdown -r now
- Или напрямую активировать данный режим:
# shutdown now
Удаленный сервер
При удаленном обновлении вы не должны вводить машину в single mode, если вы случайно это сделаете, то потеряете связь с машиной.
В виду вышесказанного необходимо действовать так:
- Отключить в /etc/rc.conf все службы, в которых нет необходимости для запуска системы это СУБД, FTP, Apache и т.д. (sshd не выключать!)
- Перезагрузить сервер
Можно и самим остановить эти службы без перезагрузки системы.
Продолжаем обновление
При запуске системы в нашем случае это локальный сервер необходимо смонтировать корневой каталог и остальные разделы, а при удаленном сервере нет необходимости в монтировании каталогов. А так же запустим mergemaster для создания начальной точки работы:
# /sbin/mount -u / # /sbin/mount -a # csh # su # mergemaster -p
Установим мир и удалим старые файлы.
# cd /usr/src # make installworld # make delete-old
Для автоматизации удаления старых версий выполните:
# yes | make delete-old
mergemaster
Запустим mergemaster для синхронизации файлов, библиотек, конфигурационных файлов с новыми версиями.
# mergemaster -cv (c-контекстный diffs вместо унифицированного)
mergemaster сравнивает существующие конфигурационные файлы с теми, которые предлагаются новой версией FreeBSD. И если существуют отличия, то появляется сообщение об этом. Первой строкой в нем идет имя файла, который не соответствует новым требованиям, а ниже сами отличия.
Знаки:
- - — этим знаком помечаются строки, которые mergemaster собирается удалить.
- + — этим знаком помечаются строки, которые будут добавлены.
Есть несколько вариантов управления и в низу mergemaster предлагают следующие варианты работы с текущим файлом:
- d — удалить предлагаемый вариант оставить старый.
- i — установить предлагаемый вариант, удалив старый.
- m — сравнить и объединить при необходимости построчно старый и новый вариант.
- v — посмотреть отличия в файлах снова.
При построчном сравнивании экран делится на две части, слева строки из старого файла, а справа из предлагаемого. При нажатии на «Enter» выводятся возможные варианты последующих действий:
- l — использовать вариант с левой стороны.
- r — использовать вариант с правой стороны.
и т.д.
После того как сравнение файла закончилось, предлагаются следующие варианты:
- i — установить получившийся файл.
- r — повторить сравнение снова.
- v — просмотреть получившийся файл.
Бывает, что с новой версией системы появляются новые файлы, которых до этого не было. В таком случае предлагается 2 варианта:
- d — удалить предлагаемый вариант и оставить старый.
- i — установить предлагаемый вариант, удалив старый.
И так сравниваются все файлы.
Завершение
Когда закончите, объединять файлы перезапустите систему и удалите старые библиотеки, а так же проверьте версию системы:
# shutdown -r now # cd /usr/src/ # make delete-old-libs # uname -a FreeBSD bsd.ampul.local 8.2-RELEASE FreeBSD 8.2-RELEASE #1: Tue May 19 09:55:51 MSD 2009 Raven2000@bsd.ampul.local:/usr/obj/usr/src/sys/MYKERNEL i386
Обновление портов FreeBSD
# /usr/bin/csup -h cvsup4.ru.freebsd.org -g -L 2 /usr/share/examples/cvsup/ports-supfile \ && cd /usr/ports/ && make fetchindex
Обновление по крону
# crontab -l | grep csup 1 8 * * * (/usr/bin/csup -h cvsup4.ru.freebsd.org -g -L 2 \ /usr/share/examples/cvsup/ports-supfile \ && cd /usr/ports/ && make fetchindex) >/dev/null 2>&1
Проблемы
В. Не запускаются программы требуют старые библиотеки
О. Есть два варианта. Пересобрать ПО или установить библиотеки нужной версии ОС:
# /usr/ports/misc/compat compat3x/ compat4x/ compat5x/ compat6x/ compat7x/