Обновление 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.