 0. Задача
0. ЗадачаОбновление свежеустановленной FreeBSD 7.0 до STABLE, а дерева портов - до CURRENT. В качестве методического руководства использовался 
FreeBSD Handbook. Написание этой заметки вызвано тем, что в Handbook нужная информация "размазана" по большому количеству страниц (на каждой из которых страшно много букв - да еще и нерусских :), а тут я попробовал собрать все в кучу - и описать процедуру как неветвящуюся последовательность.
Ставим 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 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