ОБНОВЛЕНИЕ ИСХОДНЫХ ТЕКСТОВ СИСТЕМЫ
ВАРИАНТ №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 :
Некоторые командные процессоры для ускорения поиска выполнимых файлов и команд кэшируют имена программ, доступных для вызова из каталогов, перечисленных в переменной окружения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
В дальнейшем достаточно будет выполнять:
Вместо 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 добавить строчки:
Т.к. присвоение соответствующих переменных идёт последовательно, то тэг для обновления системы сменится для обновления портов на "." . Если файлы для обновления системы и портов разные, то делает копия /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, скорости создания соединения. Применение:
Описание ключей на русском:
-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 исправить опрашиваемый узел на:
Всё: теперь обычным образом пользуемся cvsup -ом:
$ cvsup -L 2 /root/updatefile.cvs
$ cvsup -L 2 /root/updateports.cvs