Всем известно, что FreeBSD довольно мощная система, и на сей день пользуется большой популярностью из-за своей безопасности. Немаловажной особенностью в BSD является cvsup. Иными словами это апдейт до системы более старшей версии.
В данной статье я расскажу об этом интересном процессе и попытаюсь развеять мнение о том, что cvsup'ом можно убить систему при неопытности администратора ;), то бишь кто выполняет cvsup. Небольшая поправка к статье: я выполнял cvsup на двух серверах без какого-либо предыдущего опыта, поэтому в статье могут быть неточности, но итогом является вполне работоспособная система (глюков после cvsup'инга не наблюдалось), поэтому они уходят в погрешность :).
Итак, поехали. Я описываю процесс cvsup'a до FreeBSD 4.7 Release (если верить слухам, то 4.x вполне безболезненно cvsup'ится до 4.7).
Для начала, я, как всякий здравомыслящий человек, поставил cvsup из портов (командой cd /usr/ports/net/cvsupit && make install). Среда cvsup может быть как GUI так и консольная, так что подредактируй Makefile, указав опцию NOGUI к флагам make (тогда ты побережешь себя от стягивания сорцов Xfree, которые, я думаю, тебе не нужны).
После успешной инсталляции перейдем к редактированию cvsup.conf. Полное описание параметров этого файла можно найти в /usr/share/examples/cvsup, но я думаю, лазить и смотреть маны тебе лениво, поэтому опишу более-менее дефолтовый конфиг:
*default host=cvsup.ru.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_4_7
*default delete use-rel-suffix
*default compress
src-all
Подробнее.
Параметр *default host означает хост, с которого будет производиться скачивание нужного файла для новой системы (рекомендуется изменять в зависимости от географического положения сервера).
*default base и *default prefix - директории, куда будет скидываться это самое файло.
*default release показывает систему, до какой будем обновлять. Поле tag указывает версию. Пиши RELENG_4_7 - не ошибешься (RELEASE ENGLISH 4.7).
*default delete use-rel-suffix - рекомендуемый параметр.
*default compress - рекомендуется ставить при слабом канале в инет.
src-all - полное обновление системы (может быть частичным: src-bin и другое - смотри examples для подробного описания).
После редактирования конфа, можно запускать cvsup. Рекомендуется запускать его с такими параметрами: cvsup -g -L 2 /path/to/your/cvsup.conf (подробный вывод информации и
debug).
И вот первая незадача: cvsup ругнулся на какой-то устаревший протокол и отсоединился от сервера,
выдав линк в инет. На страничке была ссылка на
новый cvsup, который я скачал. Собрал его без осложнений, перезапустил, и в течении 30 минут cvsup полностью обновил и синхронизировал файлы для новой системы.
Далее, следует выполнить buildworld (что-то типа "построить мир", то есть новую систему). Идем в /usr/src и командуем make -j4 buildworld. Параметр -j4 означает количество потомков от make (процесс должен пойти быстрее).
Внимание. При этой процедуре (как всегда после часу работы), во время построения ядра, dd ругнулся на несуществующее значения параметра conv=osync, поэтому позаботься заранее чтобы бинарник dd верно переваривал этот параметр (простой проверкой dd if=/etc/passwd of=/tmp/passwd conv=osync). Возможно это было из за старой системы (4.2 RELEASE). Если вовремя не позаботиться, придется начинать все сначала (тебе же неохота терять 2 часа времени, правда?).
Построение мира идет около полутора часов (бывает и два часа), поэтому запасись терпением и пивом, а если работаешь удаленно, то уйди в скрин, чтобы, не дай бог, не увидеть фатальной ошибки.
Когда все прошло успешно, можно приступать к компиляции ядра. Набивай make buildkernel, чтобы собрать kernel с GENERIC-конфом (это default), если тебе хочется изменить параметры ядрышка - никто тебе не запрещает этого сделать. Компиляция ядра займет около получаса времени, после этого пиши make installkernel, чтобы заинсталлить ядро.
Затем, когда все выполнено корректно, пришло время сделать install всех бинарников и библиотек командой make installworld У меня возникла проблема в этом месте. make ругнулся на опцию -b в /usr/bin/install бинарнике (ее попросту не было). Она встречается 2 раза при инсталляции /sbin/init и еще какой то библиотеки. Поэтому, либо косметически подправь Makefile, либо обнови бинарник (если конечно у тебя этой опции тоже нет). Иначе, придется править Makefile's, так как, после install все файлы удаляются, и make выдает fatal error: no such file (на самом деле новый файл уже инсталлирован).
После install, требуется запустить /usr/sbin/mergemaster (синхронизация системных директорий после инсталла). Бинарник интерактивно скажет, что не хватает системе и предложит сделать обновление или создать нужные директории. От тебя требуется лишь сказать "да" или "нет".
Когда mergemaster завершил работу, можно смело писать reboot. И надеяться, что это будет не последний ребут этого сервера в твоей жизни =), особенно если делаешь cvsup удаленно.
Итак, сервер поднимается, ты лезешь на ssh, и получаешь нечто следующее:
[root@serv root]# uname -r
4.7-RELEASE-p1
Что и ожидалось :). Осталось подтереть директории, которые содержат мусор от компиляции. Сделай rm -rf /usr/obj/* /tmp/install*. Затем войди в /usr/ports/net/cvsupit и скомандуй make clean, чтобы стереть лишние сорцы.
Поздравляю, ты выполнил cvsup ;). Как видишь ничего сложного в этом процессе нет, а эффект впечатляет. =)
Удачи.