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

Приветствую всех. Сегодня я расскажу о процессе обновления ОС FreeBSD. Ведь настает тот момент, когда текущая версия устарела или была выпущена важная заплатка, необходимая для корректной работы сервера. Конечно, выпущенные заплатки можно ставить без пересборки ядра и всей системы, но не всегда такое возможно :).

В данный момент команда uname у меня выводит следующую информацию:

# uname -a
FreeBSD srv-home.local 7.3-RELEASE-p2 FreeBSD 7.3-RELEASE-p2 #0: Sun Aug 15 12:34:26 YEKT 2010
chihpih@srv-home.local:/usr/obj/usr/src/sys/GATEWAY  i386

Итак, приступим... Обновляться будем через cvs. Для этого берем и правим файл standard-supfile из /usr/share/examples/cvsup. Я скопировал его в домашнюю папку root и назвал sys-supfile. После правки у меня он получился такого содержания:

# Хост, к которому будем подключаться
# Список доступных серверов можно посмотреть в хэндбуке
*default host=cvsup4.ru.freebsd.org
# Директория, в которой CVSup будет хранить служебную информацию
*default base=/var/db
# Место где будут храниться исходные файлы системы
*default prefix=/usr
# Ветка, до которой будем обновляться
*default release=cvs tag=RELENG_7_3
*default delete use-rel-suffix
# Сжимать передаваемый трафик
*default compress
# Обновляем все дерево исходников
src-all

После того как файл будет готов, можно приступить к обновлению дерева исходных текстов. Для этого выполняем следующую команду.

# csup -L 2 /root/sys-supfile

Обновление 23.05.2013. Поскольку распространение дерева портов и исходных текстов самой системы через CVS прекращено, то начальный этап обновления системы стал иметь другой сценарий. Сначала необходимо установить Subversion. Сделать это, можно используя систему портов (/usr/ports/devel/subversion) или используя пакеты (pkg_add -r devel/subversion). После установки скачиваем исходники такой командой (список SVN зеркал можно посмотреть в хэндбуке):

# svn checkout svn://svn0.us-east.freebsd.org/base/releng/7.3 /usr/src

В дальнейшем обновление исходников необходимо осуществлять так:

# svn up /usr/src

Чтобы обновить исходники до другой ветки, например до 8-ой, нужно либо выкачать их заново или если они уже были выкачены через SVN выполнить:

# svn switch svn://svn0.us-east.freebsd.org/base/releng/8.3 /usr/src

Дожидаемся завершения обновления исходных файлов системы и топаем собирать мир, и ядро. Предполагается, что конфигурационный файл для сборки ядра у вас уже имеется. Если же нет, то берете его в этой папке - /usr/src/sys/ARCH/conf (где ARCH, архитектура системы, ну там i386, amd64 или еще что, там у вас). Конфигурационный файл GENERIC я обычно копирую в домашнюю папку рута, переименовываю и создаю символическую ссылку на него в выше указанной директории, мне так удобнее :).
Теперь можно собирать мир, а за ним и ядро:

# cd /usr/src
# make buildworld
...
Сборка мира
...
# make buildkernel KERNCONF=EXAMPLE
...
Сборка ядра
...

Для ускорения сборки ядра и мира можно использовать многопоточную сборку, например так:

# make -j4 buildworld
# make -j4 buildkernel KERNCONF=EXAMPLE

Параметр KERNCONF принимает имя файла, в котором находятся параметры сборки ядра.
Когда все собрано, инсталлируем новое ядро.

# make installkernel KERNCONF=EXAMPLE

Перезагружаемся в однопользовательский режим и монтируем файловые системы.

# mount -u /
# mount -a -t ufs

Далее нужно сохранить старые конфигурационные файлы, чтобы при обновлении не потерять их.

# mergemaster -p

После того, как мастер завершит свою работу, можно ставить новый "мир" :)

# cd /usr/src
# make installworld

После установки сравниваем конфигурационные файлы с новыми.

# mergemaster

Некоторые пояснения к работе мастера. Если файлы не совпадают, то на экран будет выведена информация о том, какие строки будут удалены, а какие будут добавлены. В конце вывода этой информации будет предложено несколько действий:

  • i - установить новый файл и удалить старый
  • d - удалить новый файл и оставить старый
  • m - сравнить файлы построчно
  • v - снова вывести различия в файлах

Если вы выберите режим построчного сравнения файлов, то вам будет предложено ввести одну из нескольких команд:

  • ed - редактировать обе версии, каждая отображается под своим заголовком
  • eb - редактировать обе версии
  • el или e1 - редактировать версию файла слева
  • er или e2 - редактировать версию файла справа
  • e - игнорировать обе версии файла и создать свою
  • l или 1 - использовать версию файла слева
  • r или 2 - использовать версию файла справа
  • s - включить общие строки
  • v - включить общие строки (+вывод служебной инфы в консоль)
  • q - выход
  • ? - вывести данную справку

После правки вас спросят - что делать с получившимся файлом:

  • i - установить полученный файл
  • r - откатить изменения
  • v - просмотреть полученный файл

После сравнения всех конфигурационных файлов, удаляем старые файлы системы:

# make delete-old

Если такие файлы найдутся, то будет выдан запрос на подтверждение удаления этих файлов. Если они вам не нужны, то можете давать положительный ответ. При обновлении на новую ветку (например, с 7 до 8) таких вопросов может быть очень много, и чтобы не тратить время на ответы можно выполнить эту команду вот так:

# yes | make delete-old

Теперь перезагружаемся в многопользовательский режим. После загрузки нужно будет очистить систему от старых библиотек:

# cd /usr/src
# make delete-old-libs

Если найдутся старые библиотеки, то будет выдан запрос по аналогии с командой make delete-old.
Ну вот, система обновлена, посмотрим текущую информацию о ней:

# uname -a
FreeBSD srv-home.local 7.3-RELEASE-p3 FreeBSD 7.3-RELEASE-p3 #0: Sun Nov 21 21:02:20 YEKT 2010
chihpih@srv-home.local:/usr/obj/usr/src/sys/GATEWAY  i386

Готово, систему обновили, теперь можно спокойно отдыхать :).

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

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Яндекс.Метрика