RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
ВАРИАНТ №1: из CVS репозитория Для обновления через CVS используются утилиты cvsup и csup. В настоящий момент старая утилита cvsup заменена на обновлённую csup (собственно всё обновление, это переписывание утилиты с Modula-2 на C). Но т.к. cvsup и csup практически идентичны, то вся разница обновления ими будет в использовании разных имён утилиит и всё, а для краткости рассмотрим их обе в виде csup, как более новой. Единственная разница: csup присутствует в системе сразу, а cvsup необходимо установить:
корректируется для указания наиболее удобного (скорости и пр.) сервера обновлений - на странице описания параметров cvsup/csup выбираем CVS сервер, с которого будем брать порты и и вместо cvsup6.ru прописываем его. Так же можно указать до какой версии необходимо обновить исходные тексты системы. Для этого из списка тэгов CVSup выбираем нужный вариант и прописываем его. Например, обновление до релиза 8.1 со всеми исправлениями на момент обновления:
*default release=cvs tag=RELENG_8_1_0_RELEASE
Более детально параметры обновления через 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, т.к. для этих целей в него добавлены специфические патчи. Программа "тяжеловата": после её установки в систему, кроме самой программы, было добавлено существенное число зависимостей:
Первый раз скачивается база исходных текстов - файлов проекта (два варианта):
$ 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 уже есть, то можно загрузить базу портов оттуда, чтобы не скачивать ещё раз с Интернета:
Вданном случае <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 дописать
Команда 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 исправить опрашиваемый узел на: