Обновление OS FreeBSD до актуального состояния

Есть установленная с CD FreeBSD 6.1 RELEASE. Обновлять будем до версии STABLE. Для начала проверим установлены ли исходные коды в системе, они находятся в /usr/src/sys. Если такого каталога нет или он пустой, необходимо исходники доустановить. Правильно это делается из sysinstall:
Запускаем sysinstall от имени root;

Выбираем Configure;
Выбираем Distribution;
Отмечаем галочками src, потом sys.

Или так:

#mount /mnt/cdrom
#cd /mnt/cdrom/src
#./install.sh all

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

# cp -Rp /boot/kernel /boot/kernel.good

Теперь имея исходники, будем их обновлять. Для это воспользуемся системой CVSup. Она связывается с указаным в конфиге CVSup-сервером, сравнивает файлы, имеющиеся в системе с теми, что выложены на CVSup-сервере и закачает изменения. Сам процесс может длиться несколько часов, однако закачивает немного по трафику. Проверить установлена ли данная программа в системе можно с помощью which:

#which cvsup

Если она установлена система покажет путь к ней /usr/local/bin/cvsup, если нет – command no found. Устанавливаем ее из портов:

#cd /usr/ports/net/cvsup-without-gui
#make install clean

При работе под X-ми, необходимо устанавливать из /usr/ports/net/cvsup. Установили программу, настраиваем конфиг. Примеры берем отсюда /usr/share/examples/cvsup. Нам нужен stable-supfile для обновления до версии STABLE, standart-supfile используется для обновления до CURRENT-версии. Копируем stable-supfile в свою выбранную папку, например /usr/my_config. Отредактируем /usr/my_config/stable-supfile:

*default host=cvsup7.ua.freebsd.org # Имя CVSup-сервера, откуда будем тянуть обновления.
*default base=/var/db # Тут хранится история обновлений.
*default prefix=/usr # Размещение полученных обновлений в папке /usr/src.
*default release=cvs tag=RELENG_6 # Обновляется 6-я версия (тег ревизии)с главного CVS-сервера.
*default delete use-rel-suffix # delete – удалить ненужные (старые) файлы, use-rel-suffix – нужно указать, но зачем, не знаю(man).
*default compress # Использование компрессии при передачи данных.
src-all # Получение всего дерева исходников.

Следует заметить, что cvsup работает на высоких портах (1024-65535), поэтому, если работает firewall, необходимо в его конфиг внести соответствующее правило. Конфиг есть, теперь запускаем из под root процесс обновления:

#cvsup -g -L 2 /usr/my_config/stable-supfile

Ждем пока все загрузится ( “Shutting down connection to server Finished successfully” ). В /usr/src находятся обновленные исходники, которые можно скопировать на аналогичную машину и с них обновлять систему. Заходим в /usr/src и перестраиваем бинарные файлы:

#cd /usr/src
#make buildworld

Эта команда полностью строит новое дерево в /usr/obj. Процесс компиляции будет длиться от часа до двух в зависимости от мощности компьютера. Если что-то пойдет не так всегда можно загрузиться со старой версии, нажав любую клавишу, кроме Enter и набрать в командной строке boot /boot/kernel.old .

После компиляции пересобираем ядро системы. Рекомендуется устанавливать ядро GENERIC, т.к. это будет проверкой на правильность работы новой системы. Также можно на этом этапе установить и собственное ядро, кому как нравится. Процесс устаноки собственного ядра описан здесь.

#cd /usr/src
#make buildkernel KERNCONF=GENERIC && make installkernel KERNCONF=GENERIC

После установки ядра переходим в однопользовательский режим, дав команду shutdown now или выбрав Single mode после перезагрузки сиситемы. Далее:

#fsck -p
#mount -u /
#mount -a -t ufs
#swapon -a

Эти команды проверяют файловые системы, повторно монтируют /, монтируют файлове системы из /etc/fstab и включают подкачку.

#cd /usr/src
#make installworld

Теперь бинарные файлы будут заменены новыми. В новой версии могут измениться конфигурационные файлы в /etc и записи устройств /dev. Вручную сравниваться измения неудобно, для этого служит программа mergemaster – это скрипт, который сравнивает файлы настроек, например из /etc/. При запуске создается папка /var/tmp/temproot, в которой будут расположено дерево новых настроечных файлов, они будут сравниваться с теми, что в /etc. На всякий случай необходимо сохранить все файлы из /etc:

#cp -Rp /etc /etc.old

Запускаем mergemaster в автоматическом режиме, однако оставляем файлы, которые правили нетронутыми – mergemaster -a -p, в результате получаем папку /var/tmp/temproot с файлами, которые не были установлены в автоматическом режие. Далее запускаем mergemaster -p получаем результат сравнения, возможные действия:
i – подтвердить установку новой версии файла
d – оставить старый вариант
m – объединить(склеить) новый и старый вариант ( не рекомендую)

В ходе работы mergemaster -p может быть вариант, когда в новой системе отсутствуют файлы, которые были в старой. Если эти файлы не редактировались, их можно смело удалять. Если ситема новая и нет редактируемых ранее конфигурационных файлов, можно запустить mergemaster c опцией -i, будут автоматически установлены новые версии файлов.

Источники информации:
1. http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/makeworld.html
2. http://www.kazna.spb.ru/~Annie/tips/free-renew.html
3. http://web.opennet.ru/docs/BSD/cvsup_makeworld/index.html

© mick, 2006.