Главная > Операционные системы > UNIX > BSD > FreeBSD Обновление FreeBSDОперационная система FreeBSD находится в постоянным развитии. Некоторые люди предпочитают использовать официальные релизы, в то время как другие предпочитают синхронизировать систему в том числе и между этими событиями. И для первых, и для вторых также, достаточно важно, чтобы их система всегда содержала последние исправления безопасности. В этом разделе описаны те инструменты, которыми можно поддерживать Вашу систему все время обновленной и в случае доступности, перейти на более поздний релиз FreeBSD. Существует 2 метода обновленией - через получение бинарных кодов с серверов update.freebsd.org (freebsd-update) и обновление через сборки из исходных кодов ( CTM, CVS, SVN )
Через freebsd-update(8)Использование freebsd-update, в большинстве случаев, является более предпочтительным вариантом по сравнению с обновлением через исходные коды. С помощью этой утилиты, пропускаются шаги по получению патча, применению его на исходный код и компиляция в бинарные файлы, что заметно экономит как время, так и ресурсы обновляемой машины. freebsd-update призвана обеспечивать две функции - обновлять систему через получение бинарных файлов на более новые версии, а также поддерживать безопасность текущего релиза, через получение и применение патчей. Конфигурационный файлВы можете редактировать конфигурационный файл /etc/freebsd-update.conf для большего контроля над процессом и более гибной работы утилиты. Components src world kernel - Список компонент системы, которые подлежат обновлению. По-умолчанию, система обновляет исходный код (src), основную базу (world) и ядро системы (kernel). Вы можете обновить конкретный компонент выборочно, указав через >/> категорию, которую следует обновить, например src/bin - обновит лишь /usr/src/bin, world/games - обновит лишь /usr/games Рекомендуется эти опции оставлять по-умолчанию, поскольку обновление лишь части системы может приводить к неожиданному поведению системы. IgnorePaths - Пути, которые указаны в этой опции, будут проигнорированы на этапе инсталляции обновлений. Эту опцию имеет смысл использовать, чтобы не дать freebsd-update переписать Ваши локальные модификации UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile - По путям, перечисленным в UpdateIfUnmonified, будут применены обновления только в том случае, если содержимое этих файлов не было модифицированно пользователем. Опция KeepModifiedMetadata заставит freebsd-update сохранить все изменения во время модификаций. MergeChanges /etc/ /var/named/etc/ - При обновлении на более новый релиз FreeBSD, пользовательские модификации файлов, перечисленные в MergeChanges пройдут процедуру слияния с более новыми версиями файлов из нового релиза. Процедура работы аналогична работе с шаго mergemaster при обновлении через исходные коды. # WorkDir /var/db/freebsd-update - Временный каталог, куда будут загружены обновления. Партишен, где находится этот каталог должен содержать не меньше 1 Гигабайта доступного дискового пространства # StrictComponents no - Если установлено в yes, список Componets считается полным и freebsd-update не будет пытаться провести изменения за пределами списка. Удобно, когда freebsd-update пытается обновить файл принадлежащий списку Components. Патчи безопасностиПатчи безопасности могут быть загружены с удаленной машины следующими командами: freebsd-update fetch freebsd-update install В том случае, если патчи безопасности относились к ядру (ядро или модули), по завершению работы freebsd-update систему необходимо будет перезагрузить. Для регулярной отработки этой операции, можно воспользоваться cron(8), поместив в него следующую строчку: @daily root freebsd-update cron Эта строчка заставит freebsd-update каждый день проверять наличие обновлений для вашей системы. В том случае, если патчи безопасности имеются, они будут сохранены на локальный диск, но не применены. Применение патчей необходимо проводить вручную. В том случае, если после freebsd-update работа системы нарушена, есть способ вернутся на прежнее состояние через команду freebsd-update rollback Утилита freebsd-update в состоянии обновлять только GENERIC-ядро. В том случае, если Вы используете ядро собственной сборки, Вам потребуется его перекомпилировать после каждой отработки freebsd-update, в которой затронуты изменения относящиеся к ядру. freebsd-update также может обнаруживать и обновлять GENERIC ядро, по пути /boot/GENERIC (если оно существует), поэтому, хранить еще одно ядро в /boot/GENERIC - это хорошая идея. Уровень патчей на системе идентифицирует число, следующее за буквой 'p' в имени релиза (команда uname -r) ОбновленияПодготовкаВнимание! Вы можете обновлять систему, будучи загруженным на собственном ядре, однако всегда рекомендуется иметь в системе копию стандартного ядра, расположенного в /boot/GENERIC каталоге. Его можно получить, например, с установочного диска FreeBSD: mount /cdrom cd /cdrom/X.Y-RELEASE/kernels ./install.sh GENERIC Где X.Y - это релиз системы, который Вы используете. Помимо этого, GENERIC ядро можно собрать из исходных кодов: cd /usr/src env DESTDIR=/boot/GENERIC make kernel mv /boot/GENERIC/boot/kernel/* /boot/GENERIC rm -rf /boot/GENERIC/boot Шаг 1: получение обновленийДля того, чтобы обновить систему на определенный релиз, freebsd-update необходимо запускать с ключем -r, где после 'r' указывается конечная версия системы. Например: freebsd-update -r 7.2-RELEASE upgrade заставит freebsd-update получить те дополнения, которые необходимы для FreeBSD 7.2-RELEASE. В процессе отработки, будут выведены те категории системы, которые будут подлежать обновлению. Нажатием 'y' (или Enter) на вопрос "Does this look reasonable (y/n)? y" Вы подтверждаете, что freebsd-update будет скачивать перечисленные категории на локальный диск. В том случае, если система запущена не на GENERIC ядре, вы получите об этом соответствующее уведомление: WARNING: This system is running a "MYKERNEL" kernel, which is not a kernel configuration distributed as part of FreeBSD 7.1-RELEASE. This kernel will not be updated: you MUST update the kernel manually before running >/usr/sbin/freebsd-update install> Это предупреждение на этом этапе можно игнорировать. Новое GENERIC ядро можно использовать как промежуточный шаг в процессе обновления. После того, как необходимые категории будут сохранены начнется процесс их применения. Скорость операции зависит от скосрости и загрузки Вашей машины. Возможно, в процессе слияния конфигурационных файлов, система может столкнуться с трудностями и запустив редактор, потребует от Вас ручного вмешательства. Обратите внимание, что на данном этапе, все изменения и слияния конфиг-файлов происходят в другом каталоге, поэтому, в случае проблем (пропажа питания), система загрузиться в привычное состояние, а шаги по обновлению придется делать заново. Шаг 2: применение обновлений для ядраfreebsd-update install На этом этапе будут обновлено ядро и модули ядра. После этого шага, система нуждается в перезагрузке. Если система работает не на GENERIC ядре, используйте nextboot(8) для установки ядра следующей загрузки: nextboot -k GENERIC Перезагрузка: shutdown -r now Шаг 3: применение обновлений userlandПосле перезагрузки, freebsd-update должна быть запущена вновь, для обновления базовых утилит и библиотек. freebsd-update install Внимание! Поскольку на этом этапе возможна инсталляция библиотек более старших версий, сторонее ПО (например устанавливаемое из портов) требуется переустанавливать. Для этого можно воспользоваться утилитами (ports-mgmt/portupgrade, ports-mgmt/portinstall). Если в данный момент времени эта процедура невозможна, прочтите пункт 'c' в замечениях. Если Вами используется не GENERIC ядро, самое время, чтобы его перестроить и установить ( cd /usr/src && make kernel KERNCONF="MYKERNEL" ) shutdown -r now Процесс обновления завершен. Из исходных кодовДолгое время, до появления freebsd-update, этот метод был единственным. В данный момент метод полезен в тех вариантах, когда утилита freebsd-update не поддерживает требуемую вам ветку ( например FreeBSD-HEAD ), используете свои собственные модификации исходных кодов, используете одну сборку системы для поддержания большого количества систем и ряда других случаев. Шаг 1: Получение исходных кодов.Исходные коды FreeBSD обычно располагаются в каталоге /usr/src. Если содержимое этого каталога пусто, его можно получить например следующими способами:
a) подмонтируйте диск в любую доступную точку монтирования, например /cdrom: mount /cdrom b) Зайти в каталог, содержащий комперссированное содержимое исходных кодов, каталог /cdrom/{RELEASE-NAME}/src. Для 7.1-RELEASE: cd /cdrom/7.1-RELEASE/src c) Запустить распаковку: sh install.sh all
a) Скопируем пример конфигурационного файла для cvsup в удобную директорию, например /root/share/csup mkdir -p /root/share/csup/ cp /usr/share/examples/cvsup/stable-supfile /root/share/csup/ b) Откроем /root/share/csup/stable-supfile на редактирование, где как минимум, необходимо задать на какую ревизию обновлять и откуда.
где tag= указывает, какую ветку следует синхронизировать. Если Вы хотите иметь N-stable, ставьте RELENG_N Если Вы хотите N.M-RELEASE, ставьте RELENG_N_M Если Вы хотите обновится на HEAD (CURRENT), девелоп-версию FreeBSD, ставьте tag=.
CHANGE_THIS.FreeBSD.org - изменить на зеркало CVSup. Их список можно просмотреть, например здесь http://www.freebsd.org/doc/handbook/mirrors.html Hint: можно использовать утилиту sysutils/fastest_cvsup для поиска наиболее быстрого/ближайшего для Вас зеркала Строчки
Заставят дерево исходных кодов обновиться до 7.1-RELEASE с зеркала cvsup4.ru.freebsd.org c) Создадим скрипт для запуска csup, например /root/bin/csup-bsd.sh Содержимое файла: #!/bin/sh CSUP=`which csup` CONFFILE="/root/share/csup/stable-supfile" if [ ! -z ${CSUP} ]; then ${CSUP} -g -z ${CONFFILE} else echo "csup not found" fi
PS: содержимое файла /root/bin/csup-bsd.sh, если Вы используете sysutils/fastest_cvsup (и ищите
cvsup в зоне #!/bin/sh CSUP=`which csup` CONFFILE="/root/share/csup/stable-supfile" FASTEST_CVSUP=`which fastest_cvsup` if [ ! -z ${FASTEST_CVSUP} ]; then if SERVER=`fastest_cvsup -q -c ru`; then ${CSUP} -h $SERVER ${CONFFILE} fi else echo fastest_cvsup not found, using directly ${CSUP} -g -z ${CONFFILE} fi d) Сделать скрипт выполняемым и запустить: chmod +x /root/bin/csup-bsd.sh sh /root/bin/csup-bsd.sh
После миграции "движка" SCM для проекта FreeBSD с Cvsup на Subversion, стал доступен метод обновления через утилиту svn(1). Старый (cvsup) метод по-прежнему доступен, но через какое-то время cvsup выйдет из эксплуатации. Тем не менее, в силу некоторых причин (например, отсутствие svn клиента в базовой системе FreeBSD 7/8) csup является предпочтительным вариантом. a) Установка svn, если это еще не сделано: Из портов: cd /usr/ports/devel/subversion && make install Из пекеджей с сервера ftp.freebsd.org: pkg_add -r subversion b) Создадим скрипт для запуска сессии обновления, например /root/bin/svn-bsd.sh: #!/bin/sh SVN=`which svn` if [ ! -z ${SVN} ]; then ${SVN} checkout svn://svn.freebsd.org/base/stable/7 /usr/src else echo "svn not found" fi где svn:svn.freebsd.org/base/stable/7 - задает ветку синхронизации указывая svn-у обновить /usr/src до 7-STABLE другие примеры: svn:svn.freebsd.org/base/release/7.1.0 - обновить до 7.1-RELEASE svn://svn.freebsd.org/base/head - обновить /usr/src до HEAD (CURRENT), develop-версии FreeBSD Посмотреть, куда можно обновиться, можно используя WEB интерфейс svn.freebsd.org c) Сделать скрипт выполняемым и запустить: chmod +x /root/bin/svn-bsd.sh sh /root/bin/svn-bsd.sh Шаг 2: компиляция мираЗапуск процесса сборки userland cd /usr/src make buildworld (PS: Процесс длительный, зависящий от быстродействия Вашей системы и файлов /etc/src.conf, /etc/make.conf Если Вы планируете и дальше поддерживать состояние системы в актуальном состоянии, можно добавить ключ NO_CLEAN для make, чтобы система не собирала объектные файлы для тех исходных кодов, кто не претерпел изменения, что заметно экономит время при вторичной и будущих перекомпиляций: make buildworld -DNO_CLEAN Также, можно попробовать собирать через параллельную сборку (ключ -j для make(1)), указав сборку в несколько потоков. Рекомендуется для мультипроцессорных(-ядерных) систем: make buildworld -j4 -DNO_CLEAN Шаг 3: компиляция ядра и инсталляцияЗапуск процесса сборки ядра и инсталляция в /boot/kernel/* cd /usr/src make kernel KERNCONF="KERNEL_NAME" где KERNEL_NAME - имя ядра. Если кастомизации конфиг ядра не было, как правило - GENERIC Ваше старое ядро при этом, будет скопировано в /boot/kernel.old/kernel Указать, что следующая загрузка системы пройдет в Single-mode (если Вы обновляете локальную машину, либо имеете доступ к удаленной машине посредством KVM/iLO и тп: nextboot -k kernel -o "-s" Если обновляемая система удаленная, только с доступом по сети в ОС, этого не требуется, однако риск столкнуться с проблемой возрастает. Перезагрузка системы: shutdown -r now Шаг 4: инсталляция мираПосле загрузки в Single-mode. Примонтируем все в RW-режим: /sbin/mount -a Убедим, что загруженное ядро является работоспособным и обновленным: /usr/bin/uname -a Запускаем инсталляцию свежескомпилированных базовых программ: cd /usr/src make installworld Перезагружаемся: /sbin/shutdown -r now Шаг 5: синхронизация конфиг файловВ данный момент, система загружена на обновленую версию, однако содержащую старые библиотеки от предыдущего релиза и старый синтаксис конфигурационных файлов (а возможно и уже устаревших и лишних) Исправляется последнее через интерактивную работу с mergemaster mergemaster -p где Вам будет предложено совместить ваши старые конфиг файлы с обновленными версиями. по окончанию выполните exit для загрузки в многопользовательский режим, если Вы загружены в однопользовательский. Шаг 6: пересборка стороннего ПОВнимание! Поскольку на этом этапе обновления возможна инсталляция библиотек более старших версий, сторонее ПО (например устанавливаемое из портов) требуется переустанавливать. Для этого можно воспользоваться утилитами (ports-mgmt/portupgrade, ports-mgmt/portinstall). Если в данный момент времени эта процедура невозможна, прочтите пункт © в замечениях до перехода к пункту 7. Шаг 7: удаление старый файлов и библиотекУдалить устаревшие для Вашего релиза файлы и библиотеки следующими действиями: cd /usr/src make delete-old make delete-old-libs Данные команды интерактивно будут Вас спрашивать удаление конкретного устаревшего файла. Если вы уверены в себе и своей системе, удалить без вопросов можно через yes | make delete-old yes | make delete-old-libs Процесс обновления завершен. Замечанияa) Просмотреть, какие версии для обновления доступны через freebsd-update, можно здесь: http://update.freebsd.org - каталоги с префиксом "to-". b) Посмотреть список систем, с которых можно обновляться через freebsd-update, можно здесь: http://update.freebsd.org/ -каталоги вида X.Y-RELEASE. (Например, с любого RELENG_X, ввиду того, что исходные коды этой ветки никогда не бывают "заморожены", воспользоваться freebsd-update не получиться.) c) Для того, чтобы сторонее ПО могло продолжать успешно работать без перекомпиляции, через порты доступны пакеты, содержащие более ранние версии библиотек (misc/compatNx), где N - номер версии FreeBSD, требующейся для совместимости. misc/compat3x misc/compat4x misc/compat5x misc/compat6x Если Вы используете собственные сборки ядра, опции COMPAT_ также могут быть полезны для поддержки системных вызовов более ранних ядер релизов: options COMPAT_FREEBSD4 # Compatible with FreeBSD4 options COMPAT_FREEBSD5 # Compatible with FreeBSD5 options COMPAT_FREEBSD6 # Compatible with FreeBSD6 options COMPAT_FREEBSD7 # Compatible with FreeBSD7 Для проверки, имеются ли в Вашей системе файлы, слинкованные с удаленными библиотеками, можно воспользоваться утилитой sysutils/libchk, доступной из портов. d) Всегда используйте процедуры резервного копирования перед любыми работами по обновленю системы. Ссылки по теме: Chapter 24: Updating and Upgrading FreeBSD Материалы по обновлению FreeBSD
Главная > Операционные системы > UNIX > BSD > FreeBSD |