Написал краткую справку об обновлении локальных и удаленных серверов в пределах одной ветки.
Сначала вам нужно обновить исходные коды системы, и мы будем использовать штатные средства операционной системы 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 можно сделать двумя способами:
# shutdown -r now
# shutdown now
При удаленном обновлении вы не должны вводить машину в single mode, если вы случайно это сделаете то потеряете связь с машиной.
В виду вышесказанного необходимо действовать так:
Можно и самим остановить эти службы без перезагрузки системы.
При запуске системы в нашем случае это локальный сервер необходимо смонтировать корневой каталог и остальные разделы, а при удаленном сервере нет необходимости в монтировании каталогов. А так же запустим 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 -cv (c-контекстный diffs вместо унифицированного)
Есть несколько вариантов управления и в низу mergemaster предлагают следующие варианты работы с текущим файлом:
При построчном сравнивании экран делится на две части, слева строки из старого файла, а справа из предлагаемого. При нажатии на "Enter" выводятся возможные варианты последующих действий:
и т.д.
После того как сравнение файла закончилось, предлагаются следующие варианты:
Бывает, что с новой версией системы появляются новые файлы, которых до этого не было. В таком случае предлагается 2 варианта:
И так сравниваются все файлы.
Когда закончите, объединять файлы перезапустите систему и удалите старые библиотеки, а так же проверьте версию системы:
# 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
/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/