Мы — долго запрягаем, быстро ездим, и сильно тормозим.
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 -L 2 /etc/supfile


Больше информации о работе csup и директивах применяемых в supfile можно узнать из
man csup



размещено: 2010-09-18,
последнее обновление: 2010-11-25,
автор: terminus


vadim64, 2010-09-20 в 13:52:25

Эта статья чтоб было куда ссылку новичкам давать?

terminus, 2010-09-20 в 19:04:55

Это мне средство от склероза. Забываю переодически про имена тегов и прочие замарочки. Если же еще кому-нить поможет в освоении, буду только рад.

Dog, 2010-10-26 в 18:28:07

А ничего что CURRENT ныне - 9-ка? Выдыхай, бобер, 8-ка уже давно не CURRENT, а текущий релиз, а RELENG_8 вытягивает 8.1-STABLE, через 3-4 месяца 8.2-STABLE будет.

meth, 2010-11-04 в 22:16:30

csup -zL3 /etc/sup/ports.sup

terminus, 2010-11-05 в 13:53:18

Щитоэта?

tehnikpc, 2014-02-14 в 12:59:58

"дерево портов очень удобно синхронизировать через portsnap"
Только в 10-й версии FreeBSD он уже не работает, csup спасёт мир :).

k-nike, 2014-02-14 в 13:35:27

tehnikpc, вы пургу несете. portsnap прекрасно работает в 10-ке!

k-nike, 2014-02-14 в 13:38:47

К тому ж, проект FreeBSD мигрировал на Subversion, поэтому csup если и работает, то это не на долго. Используйте клиента Subversion, например, svnup.

tehnikpc, 2014-02-14 в 13:47:03

Не работает "/usr/sbin/portsnap: cannot open ....gz: No such file o directory metadata is corrupt."

k-nike, 2014-02-17 в 10:30:46

Вероятнее всего вы коряво обновились с помощью csup, который уже не поддерживается. Я уже давно использую бинарные обновления freebsd-update и portsnap. Проблем пока не возникало.

tehnikpc, 2014-02-22 в 10:04:50

Не обновлялся я с csup, просто на новой системе запускал portsnap.

k-nike, 2014-03-04 в 14:55:06

Это поможет:
rm -rf /var/db/portsnap
mkdir /var/db/portsnap
portsnap fetch extract

tehnikpc, 2014-03-04 в 15:21:32

Нет!



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0295 секунд
Из них PHP: 21%; SQL: 79%; Число SQL-запросов: 77 шт.
Исходный размер: 30691; Сжатая: 8517