Документация по ОС FreeBSD Четверг, 28.03.2024, 21:36
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » cvs

Использование csup [2010]
Версия статьи 0.1

Программка csup это тот же самый CVSup, но написанный на С, а не на modula. Начиная с версии FreeBSD 6.2 csup поставляется в базовом наборе системы, и теперь нет необходимости ставить CVSup пакетом или долго собирать его из портов. Для чего используется csup? Грубо говоря это клиент для подключения к CVS репозиторию и скачи от туда всякого-разного. На данный момент проект FreeBSD хранит в CVS зеркалах дерево исходных кодов системы, дерево портов и документацию. На сегодняшний день этот инструмент уже не является жизненно необходимым в большинстве случаев - дерево портов очень удобно синхронизировать через portsnap, а ставить заплатки на систему можно без пересборки из исходников используя для этого бинарные патчи freebsd-update. Если же хочеться заниматься пересборкой мира и ядра, то придется научиться обновлять исходные тексты из репозитория. Я так делаю, потому что ради интереса использую STABLE и CURRENT ветки FreeBSD.

Цель заметки - описать некоторые моменты касающиеся того как использовать csup для синхронизации исходных кодов системы.

Для работы csup требуется составить supfile с инструкциями где указываетя - что именно и откуда csup должен скачать, куда и как сохранить.


Пример supfile
#csup -L 2 /etc/supfile
#
# IMPORTANT: Change the next line to use one of the CVSup mirror sites
# listed at http://www.freebsd.org/doc/handbook/mirrors.html.
*default host=cvsup.lv.freebsd.org
#*default host=cvsup.ru.FreeBSD.org

*default base=/var/db
*default prefix=/usr
#*default release=cvs tag=RELENG_8_1_0_RELEASE
*default release=cvs tag=RELENG_8
*default delete use-rel-suffix
*default compress

src-all
# ports-all tag=.
doc-all tag=.


Описание директив:


*default host=cvsup.lv.freebsd.org
Так указывается cvsup сервер с которого мы будем скачивать данные. Список с зеркалами можно посмотреть тут ( http://www.freebsd.org/doc/handbook/cvsup.html#CVSUP-MIRRORS ). Соответственно имеет смысл указывать тот кто ближе географически.

*default base=/var/db
Где csup будет хранить временные и служебные файлы генерируемые в ходе работы. Там будут сохраняться checkouts файлы для каждой из указанных коллекций (src-all, ports-all, doc-all, etc).

*default prefix=/usr
Корень под которым у нас будут сохраняться полученные с сервера данные. В нашем случае это будет /usr/src и /usr/doc. Если указать что-то другое, например /tmp/test то скаченные исходники пойдут туда.

*default release=cvs tag=RELENG_8
Используемый по-умолчанию tag. То есть, если бы его небыло, нам надо было бы вручную указывать что мы хотим скачать. В настройках коллекции src-all ничего не указано - значит она будет использовать тег по-умолчанию какой мы задали, а для doc-all мы тег изменили на tag=. так как коллекция документов не имеет такого же тега как коллекция исходников.

src-all
Перечисляем коллекции которые хотим скачать.

Про теги:


Детальнее про используемые существующие в данный момент теги можно прочитать здесь (http://www.freebsd.org/doc/en/books/handbook/cvs-tags.html ) - хендбук всегда в актуальном состоянии. Что такое тег? В ходе разработки FreeBSD дерево исходных кодов переодически дробится на релизы и на ветки STABLE и CURRENT. Тег указывает какую версию мы хотим скачать. 

Вот примеры тегов для дерева src-all:
RELENG_8 - Ветка FreeBSD 8-STABLE
RELENG_8_1 - Ветка FreeBSD 8.1 в которую идут патчи безопасности
RELENG_8_1_0_RELEASE - "Замороженный" снепшот состояния кода FreeBSD 8.1 в момент его релиза

Для дерева doc-all и ports-all веток типа STABLE не существует, а есть только ветка "." (CURRENT) и замороженные ветки релизов типа RELEASE_8_1_0_RELEASE. Да, тут есть одни грабельки - имена веток релизов для src-all и для doc-all/ports-all отличаются - RELENG/RELEASE!

Пример обновления:

Предположим, что мы поставили себе свежеиспеченую FreeBSD 8.1-RELEASE, и захотели обновить ее до ветки FreeBSD 8-STABLE (или до того же релиза, но с патчами RELENG_8_1). В ходе установки системы мы в sysinstall выбрали, что хотим кроме прочего так же установить и дерево исходных текстов.

Нам необходимо произвести синхронизацию тех исходных текстов которые у нас есть на диске, с репозиторем - скачать новые части.

Последовательность действий такова:
- составляем supfile и сохраняем его где нам больше нравиться. Я обычно сохраняю его в /etc/supfile
- проводим первую синхронизация с замороженной веткой нашего релиза RELENG_8_1_0_RELEASE
- переименовываем checkouts файлы с RELENG_8_1_0_RELEASE на RELENG_8
- проводим вторую синхронизацию с веткой RELENG_8 - обновляем исходники до STABLE
- далее как обычно пересобираем и устанавливаем мир и ядро
- каждый следующий раз, обновляясь до STABLE, делаем это один раз как обычно без переименований файлов

У бывалых БСДшников может возникнуть вопрос - что это еще за чехарда с переименовываением файлов и синхронизацией два раза? Это такой трюк позволяющий во-первых сохранить пропускную способность линии, а во-вторых более чисто провести синхронизацию исходников, чтобы не осталось никаких лишних файлов в дереве. Подробнее эта фишка описана в FAQ на CVSup ( http://www.cvsup.org/faq.html#adopt ). Суть идеи в следующем - при работе csup она использует checkouts файлы для того чтобы сравнивать информацию о версиях файлов на локальном диске и на сервере, и проводить синхронизацию только изменившихся. Сразу после установки системы, в директории /var/db/sup никаких checkouts файлов для синхронизируемых нами коллекций еще нет. Трюк в том, чтобы сначала их создать. Так как у нас релиз 8.1 и исходники установлены от него же, то проведя первую "синхронизацию" с "замороженным" тегом этого же самого релиза RELENG_8_1_0_RELEASE мы сможем построить актуальные checkouts файлы. Первая синхронизация по сути нечего не синхронизирует, а только энумерует файлы на диске и в репозитории, да строит базу данных - checkouts файл. После первой синхронизации мы получим в директории /var/db/sup две новых поддиректории doc-all src-all. Первая нас не интересует, а во второй будет файл с именем checkouts.cvs:RELENG_8_1_0_RELEASE. Этот файл надо переименовать в checkouts.cvs:RELENG_8. После этого в /etc/supfile заменить ранее использованный тег RELENG_8_1_0_RELEASE на тег для ветки на которую мы хотим обновиться - RELENG_8. Все, теперь у нас есть актуальные checkouts файлы которые отражают положение вещей на нашем локальном диске. Как только мы начнем вторую синхронизацию с сервером, то csup будет точно знать какие версии файлов надо передать, а что надо удалить. Синхронизация будет выполнена более чисто, займет меньше времени и потребует меньше трафика. Как я уже сказал - все последующие синхронизации выполняются как обычно только один раз без переименований файлов - checkouts теперь всегда будут в актуальном состоянии.

Запуск csup проводится так (был указан в комментарии в supfile):
csup -L 2 /etc/supfile



Источник: http://www.lissyara.su/articles/freebsd/tuning/csup/
Категория: cvs | Добавил: oleg (19.09.2010) | Автор: terminus
Просмотров: 1294 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024