Документация по ОС FreeBSD Четверг, 28.03.2024, 11:58
Приветствую Вас Гость | 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

Обновление исходных текстов: cvsup, csup, svn, portsnap [2011]
ОБНОВЛЕНИЕ ИСХОДНЫХ ТЕКСТОВ СИСТЕМЫ

ВАРИАНТ №1: из CVS репозитория
Для обновления через CVS используются утилиты cvsup и csup. В настоящий момент старая утилита cvsup заменена на обновлённую csup (собственно всё обновление, это переписывание утилиты с Modula-2 на C). Но т.к. cvsup и csup практически идентичны, то вся разница обновления ими будет в использовании разных имён утилиит и всё, а для краткости рассмотрим их обе в виде csup, как более новой.
Единственная разница: csup присутствует в системе сразу, а cvsup необходимо установить:
$ pkg_add -r cvsup-without-gui
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/.../cvsup-without-gui.tbz... Done.

В дальнейшем всё будет описано для csup.
Для настройки параметров обновления создаём файл /root/updatefile.cvs:
$ cat /root/updatefile.cvs
*default host=cvsup6.ru.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs
*default delete use-rel-suffix
*default compress
*default tag=RELENG_8
src-all

Строка
*default host=cvsup6.ru.FreeBSD.org

корректируется для указания наиболее удобного (скорости и пр.) сервера обновлений - на странице описания параметров cvsup/csup выбираем CVS сервер, с которого будем брать порты и и вместо cvsup6.ru прописываем его.
Так же можно указать до какой версии необходимо обновить исходные тексты системы. Для этого из списка тэгов CVSup выбираем нужный вариант и прописываем его. Например, обновление до релиза 8.1 со всеми исправлениями на момент обновления:
*default release=cvs tag=RELENG_8_1_0_RELEASE

Более детально параметры обновления через CVSup описаны в файле ports-supfile:
$ find /* -name ports-supfile
/usr/share/examples/cvsup/ports-supfile

Хешируем имена программ, описанных в переменной окружения PATH:
$ rehash


Некоторые командные процессоры для ускорения поиска выполнимых файлов и команд кэшируют имена программ, доступных для вызова из каталогов, перечисленных в переменной окруженияPATH.
Если используется один из таких командных процессоров, то перед использованием только что добавленных программ вам может понадобиться вызвать команду rehash после установки порта. Эта команда будет работать с такими оболочками, как, например, tcsh.
При работе с такими командными процессорами, как sh или bash, необходимо пользоваться командой hash -r. Дополнительную информацию можно найти в документации к вашему командному процессору.


Всё готово, запускает обновление:
$ cvsup -L 2 /root/updatefile.cvs

Можно добавить ключик -z (компрессия) для экономии траффика.

ВАРИАНТ №2: из SVN репозитория
Ещё в 2008 году разработчики решил заменить систему управления версиями: вместо CSVрешено проект перевести на SVN (subversion). Рекомендуется пользоваться именной этой системой контроля версий для обновления, т.к.


levsha: "из-за того, что основным репозиторием для исходников системы сейчас является svn, а в cvs идет экспорт, иногда вылазят глюки из-за кривого экспорта. Из-за отсутствия в cvs атомарного коммита нескольких файлов есть шанс счекаутить себе исходники с частичным коммитом"

На момент написания этой статьи утилита svn не была введена в базовую систему, поэтому необходимо первоначально её установить:
$ cd /usr/ports/devel/subversion-freebsd
$ make install clean


В портах есть два subversion: непосредственно subversion и subversion-freebsd. Только второй подходит для цели обновления системы через SVN, т.к. для этих целей в него добавлены специфические патчи.

Программа "тяжеловата": после её установки в систему, кроме самой программы, было добавлено существенное число зависимостей:
sqlite3-3.7.4
neon29-0.29.5
apr-devrandom-gdbm-db42-sqlite3-1.4.2.1.3.10
db42-4.2.52_5
unzip-6.0
tcl-8.5.9
tcl-modules-8.5.9
expat-2.0.1_1
subversion-freebsd-1.6.15

Первый раз скачивается база исходных текстов - файлов проекта (два варианта):
$ svn checkout http://svn.freebsd.org/base/releng/8.2/ /usr/src # через HTTP
$ svn checkout svn://svn.freebsd.org/base/releng/8.2/ /usr/src # через SVN

В дальнейшем достаточно будет выполнять:
$ svn update /usr/src/

Вместо checkout и update можно использовать сокращённые варианты написания этих подкоманд: co и up, соответственно.
Более подробно по подкомандам: ссылка.
Посмотреть, как версия исходных кодов установлена:
$ grep -A 2 'TYPE="' /usr/src/sys/conf/newvers.sh
TYPE="FreeBSD"
REVISION="8.2"
BRANCH="RC2"

Заодно узнал, что сегодня вышел второй релиз-кандидат версии 8.2 :)

ОБНОВЛЕНИЕ ИСХОДНЫХ ТЕКСТОВ ПОРТОВ

ВАРИАНТ №1: из CVS репозитория
Через описанный выше файл /root/updatefile.cvs можно обновлять исходные тексты системы и портов одновлременно, достаточно в вышеприведённый вариант файла /root/updatefile.cvsдобавить строчки:
*default tag=.
ports-all

Т.к. присвоение соответствующих переменных идёт последовательно, то тэг для обновления системы сменится для обновления портов на ".".
Если файлы для обновления системы и портов разные, то делает копия /root/updatefile.cvs(например, в /root/updateports.cvs) и в новом файле две последние строчки меняются на эту пару.
Стоит заострить внимание, что тэги для исходных текстов портов и системы - различные. И меня сильно отругали на freebsd@conference.jabber.ru за не чтение хэндбука. А в хэндбуке прописано, что для портов - одно дерево портов. Т.е. '.'. Но сами значения можно посмотреть на странице портов в выпадающем списке 'Show only files with tag:'.
Всё готово, запускает обновление:
$ cvsup -L 2 /root/updateports.cvs

Так же можно добавить ключик -z (компрессия) для экономии траффика.
После обновления необходимо проиндексировать скачаные порты:
$ cd /usr/ports
$ make fetchindex

Индексирование портов - процедура, забывание выполнения которой чревато проблемами с установкой/обновлением программ из портов.

ВАРИАНТ №2: утилитой portsnap
Обновление командой portsnap - рекомендуемый метод обновления исходных текстов портов.
Для первого запуска:
$ portsnap fetch
$ portsnap extract


Процедура первый раз выполняется достаточно долго: утилита копирует архив всей системы портов. А в дальнейшем буду скачиваться только обновления.

Для всех последующих запусков:
$ portsnap fetch
$ portsnap update

Индексация портов произойдёт по окончанию обновления автоматически.
Если есть машина с FreeBSD, где порты, обновлённые через portsnap уже есть, то можно загрузить базу портов оттуда, чтобы не скачивать ещё раз с Интернета:
$ cd /var/db
$ rm -rf portsnap
$ scp -r <user_name>@<computer>:/var/db/portsnap .
$ portsnap extract

Вданном случае <user_name> - имя пользователя на машине, откуда будем скачивать порты, а <computer> - имя или IP-адрес этой машины.

ИСПОЛЬЗОВАНИЕ УТИЛИТЫ fastest_cvsup

Задача утилиты fastest_cvsup - поиск оптимального по скорости доступа сервера с CVSрепозиторием.
$ cd /usr/ports/sysutils/fastest_cvsup/
$ make install clean & rehash

Это скрипт на Perl, который по разным признакакм выбираем наиболее быстрый (на момент тестирования) сервер с CVS репозиторием: по времени отклика на ping, скорости создания соединения.
Применение:
$ fastest_cvsup -q -c ru

Описание ключей на русском:
-h - вывод этой справки
-q - "тихий режим". Возвращает самый быстрый сервер и статус-бар;
-Q - "очень тихий режим". Статус - бар отсутствует. Выдает только результат
-r - использовать список удаленных серверов с FreeBSD Handbook
-c country codes - позволяет указать код страны (Пример: ua,uk,ru)
-c tld - использовать сервера в Top Level Domain (оффициальные - самые верхние)
-c local - использовать сервера настроенных как local в скрипте
-c all - использовать все FreeBSD сервера.

Таким образом можно узнать самый быстрый сервер на момент тестирования. Делать это каждый раз при обнолвлении  не очень удобно. Но это можно автоматизировать скриптом (спасибо lissyara):
$ cat /root/updateports.sh
#!/bin/sh
#========================================
# Обновление исходных текстов
# cvsup6 - CVS-репозиторий по умолчанию
#========================================
# Аргументы командной строки:
# ports - обновить дерево портов
# src - обновить системные исходники
#========================================
if test -f /usr/local/bin/fastest_cvsup then
 srv = "`fastest_cvsup -q -c ru`"
else
 srv = "cvsup6.ru.freebsd.org"
fi

# Проверка аргументов командной строки
if [ "x$1" = "xports" ]
then
 cvsfile="/root/updateports.cvs"
 dir="/usr/ports"
elif [ "x$1" = "xsrc" ]
then
 cvsfile="/root/updatefile.cvs"
 dir="/usr/src"
else
 echo "Unknown argument: expected ports or src"
fi

# Обновление
cd $dir
csup -h $srv -g -L 2 $cvsfile

# Если обновлялись порты - проиндексировать
if [ "x$1" = "xports" ]
then
 make fetchindex
fi

Ключи для скрипта (ports и src) соответственно, позволяют обновить дерево портов и исходники системы.

ОБНОВЛЕНИЕ ЧЕРЕЗ PROXY

При необходимости работы через proxy-сервер необходимо прописать параметры подключения к этому серверу:
1. для bash в файл ~/.bashrc дописать
export HTTP_PROXY='192.168.1.4:8080'
export http_proxy='192.168.1.4:8080'
export HTTP_PROXY_AUTH=basic::username:password

2. для chsrc в файл ~/.chsrc дописать
setenv HTTP_PROXY http://192.168.1.4:8080
setenv http_proxy http://192.168.1.4:8080
setenv HTTP_PROXY_AUTH basic::username:password

Команда portsnap "понимает" работу через proxy-сервер, А для обновления исходных текстов системы можно воспользоваться программой prtunnel(сработает через HTTP_PROXY):
$ cd /usr/ports/net/prtunnel
$ make install clean

После этого - запустить демона:
$ prtunnel -u 'proxyuser' -p 'passw0rd' -t http -H 192.168.1.4 \
-P 8080 -D 5999 cvsup6.ru.FreeBSD.org 5999
prtunnel daemon started
Waiting for connection to port 5999...

Остаётся в файле /root/updatefile.cvs исправить опрашиваемый узел на:
*default host=localhost

Всё: теперь обычным образом пользуемся cvsup-ом:
$ cvsup -L 2 /root/updatefile.cvs
$ cvsup -L 2 /root/updateports.cvs



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

Beastie

Друзья сайта

Статистика

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

Copyright MyCorp © 2024