В случае SVN
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
ОБНОВЛЕНИЕ ИСХОДНЫХ ТЕКСТОВ СИСТЕМЫ
ВАРИАНТ №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/updatesys.cvs:
$ cat /root/updatesys.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:
Некоторые командные процессоры для ускорения поиска выполнимых файлов и команд кэшируют имена программ, доступных для вызова из каталогов, перечисленных в переменной окружения PATH.
Если используется один из таких командных процессоров, то перед использованием только что добавленных программ вам может понадобиться вызвать команду rehash после установки порта. Эта команда будет работать с такими оболочками, как, например, tcsh.
При работе с такими командными процессорами, как sh или bash, необходимо пользоваться командой hash -r. Дополнительную информацию можно найти в документации к вашему командному процессору.
Всё готово, запускает обновление:
$ cvsup -L 2 /root/updatefile.cvs
|
Можно добавить ключик -z (компрессия) для экономии траффика.
ВАРИАНТ №2: из SVN репозитория
Ещё в 2008 году разработчики решил заменить систему управления версиями: вместо CSV решено проект перевести на SVN (subversion). Рекомендуется пользоваться именной этой системой контроля версий для обновления, т.к.
levsha: "из-за того, что основным репозиторием для исходников системы сейчас является svn, а в cvs идет экспорт, иногда вылазят глюки из-за кривого экспорта. Из-за отсутствия в cvs атомарного коммита нескольких файлов есть шанс счекаутить себе исходники с частичным коммитом"
В FreeBSD до 10 версии утилита svn не была введена в базовую систему, поэтому необходимо первоначально её установить:
$ cd /usr/ports/devel/subversion
$ make install clean
|
В портах раньше было два пакета subversion: непосредственно subversion и subversion-freebsd. И только второй подходил для цели обновления системы через SVN, т.к. для этих целей в него были добавлены специфические патчи.
Сейчас subversion-freebsd из портов исчез: вероятно патчи перенесли в основной пакет subversion.
С обновлением subversion до версии 1.8 поддержка neon для доступа к SVN по протоколам HTTP/HTTPS прекращена. В случае использования этих протоколов необходимо при сборке subversion в опциях указать поддерку SERF (WebDAV/Delta-V (HTTP/HTTPS) repo access module).
С выходом 10 версии упрощённая версия svn в системе уже присутствует: в форме утилиты svnlite. Поэтому в дальнейшем всё описывается утилитой svnlite.
Первый раз скачивается база исходных текстов - файлов проекта (два варианта):
$ svnlite checkout http://svn.freebsd.org/base/releng/11.0/ /usr/src # через HTTP
$ svnlite checkout svn://svn.freebsd.org/base/releng/11.0/ /usr/src # через SVN
|
В дальнейшем достаточно будет выполнять:
$ svnlite update /usr/src/
|
Вместо checkout и update можно использовать сокращённые варианты написания этих подкоманд: co и up, соответственно.
Посмотреть, как версия исходных кодов установлена:
$ grep -A 2 'TYPE="' /usr/src/sys/conf/newvers.sh
TYPE="FreeBSD"
REVISION="11.0"
BRANCH="RELEASE-p1"
|
Вот и выяснили, что 11 версия наконец-то зарелизилась!. :)
ОБНОВЛЕНИЕ ПОРТОВ
ВАРИАНТ №1: из CVS репозитория
Через описанный выше файл /root/updatefile.cvs можно обновлять исходные тексты системы и портов одновлременно, достаточно в вышеприведённый вариант файла /root/updatefile.cvs добавить строчки:
Т.к. присвоение соответствующих переменных идёт последовательно, то тэг для обновления системы сменится для обновления портов на ".".
Если файлы для обновления системы и портов разные, то делает копия /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-адрес этой машины.
ВАРИАНТ №3: используя SVN
Идентично обновлению исходных текстов системы:
# Первый раз
$ svnlite checkout svn://svn.FreeBSD.org/ports/head /usr/ports
# Последующие обновления
$ svnlite up /usr/ports
|
Т.е. всё взаимодействие - стандартными командами SVN.
ОБНОВЛЕНИЕ ДОКУМЕНТАЦИИ
Идентично обновлению исходных текстов системы:
# Первый раз
$ svnlite checkout svn://svn.FreeBSD.org/doc/head /usr/doc
# Последующие обновления
$ svnlite up /usr/doc
|
Т.е., опять же, всё взаимодействие - стандартными командами SVN.
ИСПОЛЬЗОВАНИЕ УТИЛИТЫ fastest_cvsup
Задача утилиты fastest_cvsup - поиск оптимального по скорости доступа сервера с CVS репозиторием.
$ cd /usr/ports/sysutils/fastest_cvsup/
$ make install clean & rehash
|
Это скрипт на Perl, который по разным признакакм выбираем наиболее быстрый (на момент тестирования) сервер с CVS репозиторием: по времени отклика на ping, скорости создания соединения.
Применение:
Описание ключей на русском:
-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/updatesys.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
В случае portsnap
При необходимости работы через proxy-сервер необходимо прописать параметры подключения к этому серверу (не забыв 192.168.1.4:8080/8021 заменить на IP-адрес и порт вашего proxy-сервера):
1. для bash в файл ~/.bashrc дописать
export HTTP_PROXY='192.168.1.4:8080'
export FTP_PROXY='192.168.1.4:8021'
export http_proxy='192.168.1.4:8080'
export ftp_proxy='192.168.1.4:8021'
export HTTP_PROXY_AUTH=basic::username:password
|
2. для cshrc в файл ~/.cshrc дописать
setenv HTTP_PROXY http://192.168.1.4:8080
setenv FTP_PROXY http://192.168.1.4:8021
setenv http_proxy http://192.168.1.4:8080
setenv ftp_proxy http://192.168.1.4:8021
setenv HTTP_PROXY_AUTH basic::username:password
|
Команда portsnap "понимает" работу через proxy-сервер. Установка программ из портов так же будет происходить через указанный proxy-сервер.
В случае CVS
Для обновления исходных текстов системы через CVS можно воспользоваться программой 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/updatesys.cvs и /root/updateports.cvs исправить опрашиваемый узел на:
Всё: теперь обычным образом пользуемся csup-ом:
$ csup -L 2 /root/updatesys.cvs
$ csup -L 2 /root/updateports.cvs
|
Можно несколько автоматизировать данный процесс, используя возможности команды make. Для этого в конфигурационный файл /etc/make.conf необходимо добавить:
SUP_UPDATE= yes # разрешить обновление через make
SUP= /usr/bin/csup # путь и имя программы работы с CVS
SUPFLAGS= -g -L 2 # используемые параметры csup
SUPHOST= cvsup6.ru.FreeBSD.org # не обязательно, если прописан в .cvs
SUPFILE= /root/updatesys.cvs # файл обновления src
PORTSSUPFILE= /root/updateports.cvs # файл обновления ports
|
Если ещё возможность обновлять документы, но я сам никогда не делал этого и никто из знакомых этим не пользуется на практике (тоже в /etc/make.conf) - закоментированы у меня:
# DOCSUPFILE= /root/csupfile.doc
# DOC_LANG= en_US.ISO8859-1 ru_RU.KOI8-R
# NO_DOCUPDATE= yes
|
Теперь достаточно войти в соотвествующий каталог и запустить обновление:
$ cd /usr/src/
$ make update
|
Для обновления портов надо переместиться, естественно, в каталог /usr/ports/.
В случае SVN
Создадим в каталоге пользователя подкаталок .subversion и в кём файл конфигурации servers (я делаю это для root-а):
$ mkdir ~/.subversion
$ touch ~/.subversion/servers
|
Это каталог конфигурации Subversion для данного пользователя. Потом, после первого запуска там появятся и другие файлы настроек, в том числе и config.
Содержимое servers в плане работы через proxy:
[groups]
[global]
http-proxy-host = 192.168.1.4 # proxy-сервер
http-proxy-port = 8080 # порт proxy
http-proxy-username = user_name # имя на proxy
http-proxy-password = p@ssw0rd # пароль на proxy
|
Другие параметры для servers и config.
ВОЗМОЖНЫЕ ПРОБЛЕМЫ
В случае, если при использовании svnlite update в выводимой информации есть похожие сообщения:
Updating '.':
Skipped 'contrib' -- Node remains in conflict
Skipped 'UPDATING' -- Node remains in conflic
Skipped 'sys' -- Node remains in conflict
At revision 239171.
Summary of conflicts:
Skipped paths: 3
|
то можно сделать:
$ svnlite revert -R /usr/src
|
эта субкоманда (revert) служит для разрешения конфликтных ситуаций в svn.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
1. Команды svn: коротко по русски;
2. Управление версиями в Subversion (для Subversion 1.3).
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=30680.
размещено: 2011-01-11,
последнее обновление: 2016-09-29,
автор: Fomalhaut
|
|
Комментарии пользователей [19 шт.]