Обновление коллекции портов и ядра FreeBSD с помощью subversion

После глобального перехода контроля исходников FreeBSD на svn, клиентам так же пришлось переводить обновление с cvsup на svn. Сделаю заметку о порядке перехода и обновления портов, ядра и мира посредством svn.

Итак, обновляем порты. Для начала ставим subversion:
cd /usr/ports/devel/subversion make install clean
rehash

Удаляем содержимое /usr/ports
Синхронизируем с последними версиями портов командой:
svn co svn://svn.FreeBSD.org/ports/head /usr/ports
В дальнейшем можно обновлять порты посредством простой синхронизации с последними версиями:
svn update /usr/ports.
Все, дерево портов обновлено, дальше можно обновлять сами порты, например через portupgrade.

Теперь что касается обновления мира и ядра. Сборку ядра и мира стандартно рекомендуется производить только после обновления установленных портов, по этому сперва обновляем порты, а затем принимаемся за ядро и мир.

Последовательность обновления ядра и мира:
1. Проверяем установленную версию: grep -A 2 'TYPE="' /usr/src/sys/conf/newvers.sh
Текущие версии можно посмотреть тут: http://www.freebsd.org/releng/

2. Удаляем содержимое /usr/obj выполнив по хендбуку последовательность:
cd /usr/obj
chflags -R noschg *
rm -rf *
cd /usr/src
эту команду выполняем дважды:
make cleandir
make cleandir

3. При желании удаляем содержимое /usr/src, но это не обязательно. Бывает необходимым только в том случае, когда разница между текущим индексом исходником и тем что лежит у нас очень большая. Тогда subversion при чекауте будет выдавать соответствующие ошибки. В любом случае удаление содержимого не приводит ни к каким плачевным последствиям.

4. Для текущей версии (в моем случае это активная в настоящий момент FreeBSD 9.1) забираем исходный код из репозитория: svn checkout http://svn.freebsd.org/base/releng/9.1/ /usr/src
В дальнейшем можно обновлять исходники так: svn upgrade /usr/src

5. Идем в /usr/src и собираем мир (легенда: time - считать время сборки, -s сократить вывод процесса на экран, -j4 запустить сборку в 4 потока):
time make -s -j4 buildworld

6. Собираем ядро (в моем случае ядро не GENERIC, по этому сразу указал какое ядро собирать):
make -j4 -s buildkernel KERNCONF=MYKERNEL

7. Устанавливаем ядро:
make -s installkernel KERNCONF=MYKERNEL

8. Объединяем конфиги:
mergemaster -p

Стандартно при слиянии конфигов нужно пользоваться следующими вариантами:
d - оставить старый вариант файла, удалив новый;
i - установить новый, удалив старый;
m - построчное сравнение старого и нового файла;
v - сравнить файлы еще раз.

При выборе построчного сравнения. на экран быдут выведены обе версии файла, слева - содержимое старого файла, справа - нового. Возможные варианты действий:
l - использовать вариант слева, то есть старый;
r - использовать вариант справа, то есть новый;

9. Устанавливаем мир:
make installworld

10. Чистим старые библиотеки:
cd /usr/src && make check-old
yes | make delete-old
yes | make delete-old-libs

11. Чистим /usr/obj:
cd /usr/obj && chflags -R noschg * && rm -rf *

12. Перезагружаем хост - все, порты обновлены, ядро и мир пересобраны.

13. После перезагрузки и успешной работы на обновленной версии, нужно повторно проверить наличие обновлений для портов и обновить их.

Поделиться

Опубликовать в Facebook
Опубликовать в LiveJournal

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>