0. ЗадачаОбновление свежеустановленной FreeBSD 7.0 до STABLE, а дерева портов - до CURRENT. В качестве методического руководства использовался
FreeBSD Handbook. Написание этой заметки вызвано тем, что в Handbook нужная информация "размазана" по большому количеству страниц (на каждой из которых страшно много букв - да еще и нерусских :), а тут я попробовал собрать все в кучу - и описать процедуру как неветвящуюся последовательность.
1. Установка FreeBSDСтавим FreeBSD как обычно, только не забываем исходные тексты (src) и коллекцию портов (FreeBSD ports).
2. Получение свежей версии исходных текстовДля синхронизации использовался
csup (1) (рекомендуемый в handbook
cvsup нужно ставить из
/usr/ports/net/cvsup, а он хочет еще компилятор языка Modula 3 (кто когда последний раз на таком программировал? :) - а нам зачем все это надо?) Болванки для supfile лежат в
/usr/share/examples/cvsup.
Чтобы их использовать, нужно изменить строку
*default host=CHANGE_THIS.FreeBSD.orgна какой-то реальный адрес. Я поставил
cvsup4.ru.FreeBSD.org, но на всякий случай -
вот здесь есть полный список зеркал. Нам интересны два файла stable-supfile и ports-supfile. Правим их - и поехали:
# csup stable-supfile
# csup ports-supfile3. Пересборка пользовательского окруженияЕсли не хочется собирать много лишнего, можно создать файл
/etc/make.conf (по умолчанию не существут) и добавить в него что-нибудь типа:
CPUTYPE=pentium4WITHOUT_INET6=YESWITHOUT_IPX=YESWITHOUT_ZFS=YES(представление о возможных опциях можно получить, изучая содержимое файлов
/usr/share/examples/etc/make.conf и /usr/share/mk/bsd.own.mk)
Крайне не рекомендую писать
WITHOUT_FORTH - если, конечно, вы не знаете точно, чего хотите от этой опции добиться - дело в том, что интерпретатор экзотического языка Forth входит в загрузчик FreeBSD. У меня собранная с этой опцией система насмерть зависала при начале загрузки ядра.
А теперь собственно пересборка:
# cd /usr/src
# make buildworld4. Пересборка ядраОбычно нужно что-то подправить в конфиге GENERIC (напр. закоментить options INET6 и device trm), так что создадим свой конфиг:
# cd /usr/src/sys/i386/conf
# cp GENERIC MYCFG... правим его...
# cd ../../..
# make buildkernel KERNCONF=MYCFG# make installkernel KERNCONF=MYCFGна всякий случай перед обновлением системы забекапим файлы конфигурации. Например, так:
# mkdir -p ~/tmp/etc# cd /etc# find . -print | cpio -p -m ~/tmp/etc5. Перезагрузка в однопользовательском режимеТеперь перегружаемся - и в меню загрузки FreeBSD выбираем
Single user mode (Клавиша 4). Когда видим приглашение для
/bin/sh нажать RETURN, жмем этот самый RETURN - и начинается самое увлекательное:
# fsck -p# mount -u /
# mount -a -t ufs
# swapon -a(эти операции не относятся к пересборке - просто
Single user mode ничего лишнего не запускал - вот мы ручками и поднимаем более-менее работоспособное окружение - примонтируем на чтение-запись файловые системы и подключаем раздел подкачки).
А теперь - пора за дело:
# cd /usr/src# mergemaster -p
# make installworld# mergemaster -Uопции последней команды задают автоматическое обновление всех файлов в
/etc , которые не изменялись пользователем.
И - на перезагрузку. Теперь уже - обычную.
6. Пейзаж после битвыПерезагрузились? Любуемся на новый вывод команды
$ uname -aИ - если все остались живы - самое время убрать после себя мусор:
# cd /usr/src# make delete-old(перед тем, как дать эту команду можно посмотреть
$ make check-old
увидим список того, что предполагается удалить. А то вдруг там что-то ценное? :)
# rm -rf /usr/obj