Обновление "мира"

Приветствую всех. Сегодня я расскажу о процессе обновления ОС FreeBSD. Ведь настает тот момент, когда текущая версия устарела или была выпущена важная заплатка, необходимая для корректной работы сервера. Конечно, выпущенные заплатки можно ставить без пересборки ядра и всей системы, но не всегда такое возможно :). В данный момент команда uname у меня выводит следующую информацию:
  1. # uname -a
  2. FreeBSD srv-home.local 7.3-RELEASE-p2 FreeBSD 7.3-RELEASE-p2 #0: Sun Aug 15 12:34:26 YEKT 2010
  3. chihpih@srv-home.local:/usr/obj/usr/src/sys/GATEWAY  i386
Итак, приступим... Обновляться будем через cvs. Для этого берем и правим файл standard-supfile из /usr/share/examples/cvsup. Я скопировал его в домашнюю папку root и назвал sys-supfile. После правки у меня он получился такого содержания:
  1. # Хост, к которому будем подключаться
  2. # Список доступных серверов можно посмотреть в хэндбуке
  3. *default host=cvsup4.ru.freebsd.org
  4. # Директория, в которой CVSup будет хранить служебную информацию
  5. *default base=/var/db
  6. # Место где будут храниться исходные файлы системы
  7. *default prefix=/usr
  8. # Ветка, до которой будем обновляться
  9. *default release=cvs tag=RELENG_7_3
  10. *default delete use-rel-suffix
  11. # Сжимать передаваемый трафик
  12. *default compress
  13. # Обновляем все дерево исходников
  14. src-all
После того как файл будет готов, можно приступить к обновлению дерева исходных текстов. Для этого выполняем следующую команду.
  1. # csup -L 2 /root/sys-supfile

Обновление 23.05.2013. Поскольку распространение дерева портов и исходных текстов самой системы через CVS прекращено, то начальный этап обновления системы стал иметь другой сценарий. Сначала необходимо установить Subversion. Сделать это, можно используя систему портов (/usr/ports/devel/subversion) или используя пакеты (pkg_add -r devel/subversion). После установки скачиваем исходники такой командой (список SVN зеркал можно посмотреть в хэндбуке):
  1. # svn checkout svn://svn0.us-east.freebsd.org/base/releng/7.3 /usr/src
В дальнейшем обновление исходников необходимо осуществлять так:
  1. # svn up /usr/src
Чтобы обновить исходники до другой ветки, например до 8-ой, нужно либо выкачать их заново или если они уже были выкачены через SVN выполнить:
  1. # svn switch svn://svn0.us-east.freebsd.org/base/releng/8.3 /usr/src

Дожидаемся завершения обновления исходных файлов системы и топаем собирать мир, и ядро. Предполагается, что конфигурационный файл для сборки ядра у вас уже имеется. Если же нет, то берете его в этой папке - /usr/src/sys/ARCH/conf (где ARCH, архитектура системы, ну там i386, amd64 или еще что, там у вас). Конфигурационный файл GENERIC я обычно копирую в домашнюю папку рута, переименовываю и создаю символическую ссылку на него в выше указанной директории, мне так удобнее :). Теперь можно собирать мир, а за ним и ядро:
  1. # cd /usr/src
  2. # make buildworld
  3. ...
  4. Сборка мира
  5. ...
  6. # make buildkernel KERNCONF=EXAMPLE
  7. ...
  8. Сборка ядра
  9. ...
Для ускорения сборки ядра и мира можно использовать многопоточную сборку, например так:
  1. # make -j4 buildworld
  2. # make -j4 buildkernel KERNCONF=EXAMPLE
Параметр KERNCONF принимает имя файла, в котором находятся параметры сборки ядра. Когда все собрано, инсталлируем новое ядро.
  1. # make installkernel KERNCONF=EXAMPLE
Перезагружаемся в однопользовательский режим и монтируем файловые системы.
  1. # mount -u /
  2. # mount -a -t ufs
Далее нужно сохранить старые конфигурационные файлы, чтобы при обновлении не потерять их.
  1. # mergemaster -p
После того, как мастер завершит свою работу, можно ставить новый "мир" :)
  1. # cd /usr/src
  2. # make installworld
После установки сравниваем конфигурационные файлы с новыми.
  1. # mergemaster
Некоторые пояснения к работе мастера. Если файлы не совпадают, то на экран будет выведена информация о том, какие строки будут удалены, а какие будут добавлены. В конце вывода этой информации будет предложено несколько действий:
  • i - установить новый файл и удалить старый
  • d - удалить новый файл и оставить старый
  • m - сравнить файлы построчно
  • v - снова вывести различия в файлах
Если вы выберите режим построчного сравнения файлов, то вам будет предложено ввести одну из нескольких команд:
  • ed - редактировать обе версии, каждая отображается под своим заголовком
  • eb - редактировать обе версии
  • el или e1 - редактировать версию файла слева
  • er или e2 - редактировать версию файла справа
  • e - игнорировать обе версии файла и создать свою
  • l или 1 - использовать версию файла слева
  • r или 2 - использовать версию файла справа
  • s - включить общие строки
  • v - включить общие строки (+вывод служебной инфы в консоль)
  • q - выход
  • ? - вывести данную справку
После правки вас спросят - что делать с получившимся файлом:
  • i - установить полученный файл
  • r - откатить изменения
  • v - просмотреть полученный файл
После сравнения всех конфигурационных файлов, удаляем старые файлы системы:
  1. # make delete-old
Если такие файлы найдутся, то будет выдан запрос на подтверждение удаления этих файлов. Если они вам не нужны, то можете давать положительный ответ. При обновлении на новую ветку (например, с 7 до 8) таких вопросов может быть очень много, и чтобы не тратить время на ответы можно выполнить эту команду вот так:
  1. # yes | make delete-old
Теперь перезагружаемся в многопользовательский режим. После загрузки нужно будет очистить систему от старых библиотек:
  1. # cd /usr/src
  2. # make delete-old-libs
Если найдутся старые библиотеки, то будет выдан запрос по аналогии с командой make delete-old. Ну вот, система обновлена, посмотрим текущую информацию о ней:
  1. # uname -a
  2. FreeBSD srv-home.local 7.3-RELEASE-p3 FreeBSD 7.3-RELEASE-p3 #0: Sun Nov 21 21:02:20 YEKT 2010
  3. chihpih@srv-home.local:/usr/obj/usr/src/sys/GATEWAY  i386
Готово, систему обновили, теперь можно спокойно отдыхать :).

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

Filtered text

CAPTCHA
Этот вопрос предназначен для предотвращения автоматизированной обработки форм.
Fill in the blank.