|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> настройка
—> Использование csup
Использование csup
Автор: terminus.
Версия статьи 0.2
Программка 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 - отличаются! У src-all имя начинается с RELENG, а у doc-all, и ports-all имена начинаются с RELEASE!
Например:
src-all RELENG_8_1_0_RELEASE
ports-all RELEASE_8_1_0_RELEASE
*default release=cvs tag=RELENG_8_1_0_RELEASE
*default delete use-rel-suffix
*default compress
src-all
ports-all tag=RELEASE_8_1_0_RELEASE
doc-all tag=RELEASE_8_1_0_RELEASE
| Это надо было учитывать раньше, когда cvsup использовался как для обновления сырцов, так и для обновления дерева портов. Бывало забудешь, и вместо сырцов (или портов) получаешь пустое место =) Сейчас это не актуально так как portsnap использовать для обновления портов вместо svcup/csup - намного удобнее.
Пример обновления:
Предположим, что мы поставили себе свежеиспеченую 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 теперь всегда будут в актуальном состоянии.
Есть еще один способ того как получить актуальные checkouts файлы под правильными именами. Перед первой синхронизацией можно поместить в supfile директиву list в которой указать под каким именем должен быть сохранен checkouts файл:
src-all tag=RELENG_8_1_0_RELEASE list=RELENG_8
| В таком случае после первой синхронизации мы автоматически получим checkouts.cvs:RELENG_8 в /var/db/sup/src-all, и не надо будет переименовывать файлы. А перед проведением второй синхронизации надо убрать директиву list. Вобщем получается то же самое, только немного другим способом...
Спасибо камраду bammbr за замечание и наводку на этот способ.
Запуск csup проводится так (был указан в комментарии в supfile):
Больше информации о работе csup и директивах применяемых в supfile можно узнать из
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=28544.
размещено: 2010-09-18,
последнее обновление: 2010-11-25,
автор: terminus
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
|
Статистика сайта
|
Сейчас на сайте находится: 10 чел.
|
За последние 30 мин было: 29 человек
|
За сегодня было 7625 показов, 889 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|
Комментарии пользователей [13 шт.]