Приветствую всех. Сегодня я расскажу о процессе обновления ОС 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
Готово, систему обновили, теперь можно спокойно отдыхать :).
Добавить комментарий