В более удобочитаемом варианте заметку можно найти вот здесь
http://s-krylov.hotbox.ru/notes/cvsup/index.html
ПРО ЧТО "СТАТЬЯ"
В этой статье описывается создание внутри локальной сети сервера cvsup,
который для компьютеров этой сети предоставляет cvsup доступ к 3-м
коллекциям FreeBSD, а точнее к коллекциям ports-all,src-all и к
коллекции www. Сам же локальный cvsup сервер ежедневно синхронизирует
эти коллекции с официальным cvsup сервером FreeBSD.
ЗАЧЕМ "СТАТЬЯ"
На самом деле эта статья что-то типа заметки для меня :), но возможно
моя заметка пригодиться кому нибудь еще. Также я надеюсь, что более
опытные коллеги поделятся своими замечаниями и идеями по этой статье,
ведь как сказал кто-то из хороших людей:
"Если у вас есть яблоко и у меня есть яблоко, и если мы обмениваемся
этими яблоками, то у вас и у меня остается по одному яблоку. А если у
вас есть идея и у меня есть идея и мы обмениваемся идеями, то у каждого
из нас будет по две идеи"
Всё, что написано в моей заметке можно найти в "манулах", в handbook-е
просто я это слегка переработал, и получилось что-то похожие на
mini-howto c пояснениями и дополнениями.
ПОСТАНОВКА ЗАДАЧИ:
- Нужно организовать для локальной сети сервер cvsup, который
будет хранить коллекции ports-all/src-all/www файлов FreeBSD.
- Локальный cvsup сервер должен ежедневно в 4 часа утра
синхронизировать обслуживаемые им коллекции с коллекциями
официального cvsup сервера FreeBSD.
- Запуск демона cvsupd должен настраиваться из системного
конфигурационного файла rc.conf.
- Демон cvsupd должен работать с правами обыкновенного
пользователя.
- Должен быть приведен пример настройки cvsup клиента для
пользователей локальной сети по работе с локальным cvsup
сервером.
ОГЛАВЛЕНИЕ
- Список используемых директорий файлов.
- Настройка CVSUP клиента для синхронизации репозитория
локального CVSUPD сервера.
- Создание refuse файлов
- Настройка локального CVSUPD сервера
- "запуск" CVSUPD демона из основного системного конфигурационного
файла FreeBSD из rc.conf.
- Установка разрешений на файлы и директории CVSUPD сервера и CVSUP клиента.
- Запуск CVSUP клиента по CRON-у для синхронизации коллекций www/src-all/ports-all.
- Мини HOWTO - или пошаговая инструкция.
- Что я читал для написания этой заметки
СПИСОК ИСПОЛЬЗУЕМЫХ ДИРЕКТОРИЙ И ФАЙЛОВ.
Так как во всём ниже изложенном я буду использовать свои имена
директорий и их обозначения то перед прочтением остального лучше
просмотреть для чего у меня служит какая директория.
/usr/cvsup/cvsup-client - <base_cvsup_client> базовая директория для cvsup
/usr/cvsup/cvsup-server - <base_cvsup_server> базовая директория для cvsupd
/usr/cvsup/repository - <repository> - из/в неё будут закачиваться (синхронизироваться) файлы
/usr/cvsup/confiles - папка, в которой я буду хранить конфигурационные файлы
(supfiles aka sup-файлы)
<repository>/ports-all - репозиторий дерева портов, сюда будет скачиваться
(синхронизироваться) дерево портов.
<repository>/src-all - репозиторий исходных текстов, сюда будут скачиваться
(синхронизироваться) RCS файлы исходного кода FreeBSD.
<repository>/www - репозиторий WEB сайта, сюда будет скачиваться
(синхронизироваться) WEB сайт FreeBSD.
<base_cvsup_server>/sup - здесь находится информация необходимая cvsupd для работы с коллекциями
<base_cvsup_client>/sup/ports-all - директория, в которую будут складываться
"бухгалтерские" файлы (checkouts) ports-all
<base_cvsup_client>/sup/src-all - директория, в которую будут складываться
"бухгалтерские" файлы (checkouts) src-all
<base_cvsup_client>/sup/www - директория, в которую будут складываться
"бухгалтерские" файлы (checkouts) www
/etc/cron-script/cvsup-cron.sh - скрипт для cron-а запускающий cvsup чтобы
cинхронизировать локальных копий с официальным
cvsupd сервером FreeBSD.
/etc/rc.d/cvsupd - мой стартовый скрипт демона cvsupd
НАСТРОЙКА CVSUP КЛИЕНТА ДЛЯ СИНХРОНИЗАЦИИ РЕПОЗИТОРИЯ ЛОКАЛЬНОГО CVSUPD СЕРВЕРА.
В этом "топике" я описываю, как должны выглядеть sup-файлы для утилиты
cvsup, которая будет выполнять синхронизацию локального cvsup сервера с
официальным cvsup сервером FreeBSD.
Все настройки для утилиты cvsup удобней задавать в конфигурационном
файле (sup-файле). Я для каждой коллекции создал отдельный sup-файл.
Мои конфигурационные файлы cvsup будут синхронизировать дерево портов
FreeBSD, WEB сайт FreeBSD и исходники FreeBSD.
- sup-файл /usr/cvsup/confiles/ports-cvsup.conf для синхронизации дерева портов
- sup-файл /usr/cvsup/confiles/src-cvsup.conf для (*) синхронизации исходных текстов FreeBSD
- sup-файл /usr/cvsup/confiles/www-cvsup.conf для синхронизации WEB сайта FreeBSD
(*) - слова "синхронизация исходных кодов FreeBSD" в моём случае звучат
не совсем верно так, как этот конфигурационный файл будет указывать
синхронизировать не просто исходный код FreeBSD, а синхронизировать
репозиторий исходных кодов FreeBSD то есть в папке src-all будут
находиться не исходники FreeBSD, а так называемые RCS файлы из которых
можно получить любую версию исходных кодов FreeBSD.
Конфигурационный файл cvsup (sup-файл) должен "рассказать" утилите cvsup
о следующем:
- с каким сервером будем синхронизироваться (*default host)
- что будет синхронизироваться с сервера (имя коллекции файлов)
- с какой локальной директорией будем синхронизировать (*default prefix)
- где разместить файлы статуса (checkouts) (*default base)
- (**) какая версия файлов нам нужна (опция tag или date)
(**) - если не указывать опции tag и/или date то cvsup попросит сервер
cvsupd выдать ему RCS файлы заданной коллекции, что я и буду
использовать при получении коллекции исходных кодов FreeBSD.
Имена CVSup серверов FreeBSD можно посмотреть здесь:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html (секция A.5.7)
Имена CVSup коллекций файлов FreeBSD с их описанием и именами release
для них, можно посмотреть здесь:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html (секция A.5.5)
Пример sup-файла "ports-cvsup.conf" для синхронизации дерева портов:
*default host=<X>
DNS имя cvsupd сервера, с которым будет происходить синхронизация.
*default prefix=<X>
путь до локальной директории, с которой будет происходить синхронизация.
*default base=<X>
базовая папка, в которой будет создана папка sup/<имя_коллеции>, а в
этих подпапках будут создаваться файлы отчетов (checkouts) или как
я прозвал их "бухгалтерские".
*default tag=<X>
задает CVS тег (для портов он всегда равен "." также точка означает
"последняя версия"). С Тегами ветвей и релизов FreeBSD можно
ознакомиться здесь http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/cvs-tags.html
ports-all
имя CVSup коллекции дерева портов FreeBSD. Другие доступные имена
FreeBSD коллекций можно посмотреть здесь
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html (A.5.5)
release=cvs
определяет "release" имя файлов внутри заданной коллекции файлов.
"release" имя задается на стороне сервера в его конфигурационных
файлах. Обычно если коллекция файлов получена из CVS репозитория то
принято задавать release=cvs, если коллекция файлов получена не из
CVS то принято задавать release=current.
delete
позволяет утилите cvsup удалять файлы из локальной директории
коллекции файлов, если они были удалены из репозитория cvsupd сервера.
use-rel-suffix
заставляет cvsup добавлять суффикс построенный из имени "release" и
имени тега "tag" к каждому "бухгалтерскому" файлу.
compress
включает сжатие передаваемых по сети данных. Экономит сетевой трафик.
Пример sup-файла "www-cvsup.conf" для синхронизации WEB сайта FreeBSD:
<base_cvsup_client>/sup/<имя_коллекции> (***)
# в моем случае в следующих директориях:
<base_cvsup_client>/sup/ports-all
<base_cvsup_client>/sup/src-all
<base_cvsup_client>/sup/www
можно создать файл с именем "refuse" в котором указывается список
директорий/файлов, которые нужно исключить (не нужно
закачивать/синхронизировать) из закачки/синхронизации утилитой cvsup.
(***) Имя подпапки /sup можно задать с помощью опции [-c имя_подпапки].
По умолчанию это имя sup.
ВНИМАНИЕ!
В файле "refuse" путь до исключаемой директории задается относительный и
"отсчет" относительного пути происходит в зависимости от опции "*default
prefix" которая задается в sup-файле (конфигурационный файл для cvsup).
запуск команды cvsup из консоли можно выполнить следующим образом:
# cvsup <имя_нужного_sup_файла>
или
# cvsup -L x <имя_нужного_sup_файла>
где ключ -L x отвечает за уровень "логов", x - это цифра от 0 до 2
пример:
# cvsup -L 2 /usr/cvsup/confiles/ports-cvsup.conf
НАСТРОЙКА ЛОКАЛЬНОГО CVSUPD СЕРВЕРА
Наш cvsupd сервер будет обслуживать только следующие коллекции файлов:
1.
имя коллекции: ports-all
release имя для ports-all: current (для своего зеркала ports-all я выставил
именно current, а не cvs как на FreeBSD.org)
2.
имя коллекции: src-all
release имя для src-all: cvs
3.
имя коллекции: www
release имя для www: current
Данные коллекции файлов "заливаются" (синхронизируются) утилитой cvsup с
настройками приведенными в конфигурационных файлах cvsup (sup-файлы).
Содержание этих конфигурационных файлов было описано выше.
sup-файл /usr/cvsup/confiles/ports-cvsup.conf для синхронизации дерева портов
sup-файл /usr/cvsup/confiles/src-cvsup.conf для (*) синхронизации исходных текстов FreeBSD
sup-файл /usr/cvsup/confiles/www-cvsup.conf для синхронизации WEB сайта FreeBSD
То, что было получено с помощью утилиты cvsup и моих конфигурационных
файлов (ports-cvsup.conf,src-cvsup.conf,www-cvsup.conf) складируется в
соответствующих директориях "репозиториях":
<repository>/ports-all - репозиторий дерева портов
<repository>/src-all - репозиторий исходных тектов, сюда будут скачиваться
RCS файлы исходного кода FreeBSD.
<repository>/www - репозиторий WEB сайта, сюда будет скачиваться WEB сайт FreeBSD.
Дальше сервер cvsupd нужно "натравить" (настроить) на эти репозитории и
тогда cvsupd будет раздавать cvsup клиентам нашей локальной сети то, что
находиться в этих репозиториях.
Настройка cvsupd для работы с заданными репозиториями, осуществляется
следующим образом:
В директории <base_cvsup_server>/sup нужно создать папки будущих
коллекций в этих папках будут храниться настройки cvsupd для будущих
коллекций, имена папок будущих коллекций будут обозначать имена
коллекций к которым cvsup клиент сможет обращаться. Для конкретного
случая создадим следующие папки:
<base_cvsup_server>/sup/ports-all - папка, в которой будут храниться настроечные файлы
cvsupd для коллекции ports-all
<base_cvsup_server>/sup/src-all - папка, в которой будут храниться настроечные файлы
cvsupd для коллекции src-all
<base_cvsup_server>/sup/www - папка, в которой будут храниться настроечные файлы
cvsupd для коллекции www
В каждую из этих папок нужно поместить два файла с именами "list.cvs" и "release".
Файл "release" содержит одну строчку, которая определяет соответствующий
релиз. Первым словом в этой строке должно стоять имя релиза например
'cvs'. Дальше могут быть указаны специальные выражения, весь список
специальных выражений и описаний к ним можно посмотреть в cvsupd(8).
Для решения нашей задачи потребуются только выражения:
list=[файл]
prefix=[папка]
где:
list=[файл] - определяет имя "list" файла относительно папки коллекции.
prefix=[папка] - определяет месторасположение файлов коллекции (путь до
нужного репозитория). Если задан не абсолютный путь, то интерпретация
пути будет относительно базовой директории (<base_cvsup_server>).
Упомянутый ранее list-файл (list.cvs) отвечает, каким образом cvsup
клиент обновляет свои локальные версии коллекции. Каждая строка этого
файла содержит одну команду. Пустые строки и строки, начинающиеся с
символа '#' игнорируются. Любые имена файлов заданные в "list" файле
определяются относительно "prefix" - папки заданной в файле release.
Большая часть команд "list" файла поддерживает в качестве аргументов
шаблоны принятые в sh(1) и могут содержать "wild card" конструкции такие
как: '*','?','[...]'. Список всех команд и описание к ним для list-файла
можно просмотреть в cvsupd(8). Для решения нашей задачи вполне хватит
только команды 'upgrade':
upgrade [шаблон] [...] - Все файлы и папки соответствующие заданным
шаблонам будут включены в список обновляемых. Если с шаблоном совпадает
имя папки, то все файлы этой папки и её поддиректории будут включены в
список обновляемых.
Итак, создадим следующие "list" и "release" файлы:
<base_cvsup_server>/sup/ports-all/list.cvs
upgrade ports
<base_cvsup_server>/sup/ports-all/release
current list=list.cvs prefix=/usr/cvsup/repository/ports-all
current list=list.cvs prefix=/usr/cvsup/repository/www
"ЗАПУСК" CVSUPD ДЕМОНА ИЗ ОСНОВНОГО СИСТЕМНОГО КОНФИГУРАЦИОННОГО ФАЙЛА FreeBSD из rc.conf.
ИМХО!
Я люблю FreeBSD за то, что в ней все упорядочено и прозрачно для
администратора. Вот поэтому я и решил - будет красиво если демон cvsupd
будет запускаться в зависимости от установок заданных в основном
системном конфигурационном файле rc.conf как и для большинства его
собратьев демонов. Естественно демон cvsupd не должен работать с правами
пользователя root. Что только не делает с людьми стремление к красоте...
В FreeBSD 5.X появилась система rc.d с помощью этой системы я и буду
наводить красоту. rc.d используется для старта системы. Кратко по этой
системе можно почитать здесь
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/configtuning-rcng.html
Для того чтобы навести красоту мне также понадобиться поверхностное
понимание работы утилиты "rc". Утилита "rc" это командный скрипт,
который контролирует автоматическую загрузку процессов вызываемый
init-ом. Этот скрипт "стартует"/"останавливает" демоны. В нескольких
словах его работа выглядит так:
1 - из /etc/rc.subr загружаются разные, нужные shell функции.
2 - затем вызывает rcorder который "упорядочевает" файлы из /etc/rc.d
пропуская файлы, имеющие ключевое слово "nostart" после этого созданный
список файлов записывается в переменную.
3 - затем в порядке созданным с помощью утилиты rcorder из /etc/rc.d
вызывается каждый скрипт используя функцию run_rc_script() с параметром
$1 равным "start".
Итак резюмирую:
1 - каталог /etc/rc.d предназначен для скриптов загрузки основных
сервисов FreeBSD
2 - управление загрузкой криптов из папки /etc/rc.d осуществляется с
помощью основного системного конфигурационного файла "rc.conf", утилиты "rc".
3 - порядок последовательности загрузки "демонов" и их зависимостей
определяет утилита rcorder которая вызывается из "rc" скрипта, далее для
загрузки каждого отдельного скрипта, "rc" использует функцию
run_rc_script() определенную в файле rc.subr.
Каждый скрипт из /etc/rc.d для утилиты rcorder должен содержать
специальные строчки, особенно строчку с словом "PROVIDE:" обязательную
строчку "# KEYWORD: FreeBSD" и если необходимо, то строчки со словами
"REQUIRE:" и "BEFORE:". Строчки должны располагаться в виде блока (одна
за другой). Формат строчек строго заданный. Каждая специальная строчка
должна начинаться с символа '#' за которым следует один символ 'пробел'
далее одно из слов PROVIDE:, REQUIRE:, BEFORE:, KEYWORD:, затем снова
символ 'пробел' и заканчивается все "обстоятельствами" (conditions).
- PROVIDE:
Задает имя сервиса (демона), которое обслуживает этот скрипт.
- REQUIRE:
Список сервисов (демонов|обстоятельств), необходимых этому скрипту
для запуска своего демона (сервиса).
- BEFORE:
Список сервисов (демонов|обстоятельств), зависящих от демона
запускаемого этим скриптом.
- KEYWORD:
FreeBSD или NetBSD, также в этой строчке можно написать волшебное
слово "nostart" тогда rcorder исключит этот скрипт из своего списка.
Обстоятельства (conditions) могут иметь специальные обозначения:
NETWORKING
SERVERS
DAEMON
LOGIN
- NETWORKING:
гарантирует запуск основных сетевых служб, за которые отвечают
скрипты (network1, network2, network3).
- SERVERS:
гарантирует запуск основных сервисов таких как (NETWORKING,
ppp-user, syslogd, and isdnd) которые должны стартовать раньше чем,
например named. Ранний запуск служб SERVERS требуется для тех кто
определен как DAEMON.
- DAEMON:
контрольная точка перед общими демонами, такими как lpd, ntpd.
- LOGIN:
контрольная точка перед "user login" службами (inetd, sshd).
мой скрипт запуска для cvsupd выглядит следующим образом:
пример /etc/rc.d/cvsupd:
# устанавливаю значения для переменных ${name} , ${rcvar}, ${command}
name=cvsupd
rcvar=`set_rcvar`
# откуда запускать демона cvsupd
command=/usr/local/sbin/${name}
# загружаю значения заданные в rc.conf для демона с именем ${name}
load_rc_config ${name}
case ${OSTYPE} in
FreeBSD)
start_cmd="cvsupd_start"
;;
esac
# функция, которая стартует демон cvsupd с флагами задаными в rc.conf в
# строчке cvsupd_flags из под пользователя заданного в rc.conf в строчке
# cvsupd_user.
cvsupd_start()
{ _fullcommand="'$command ${cvsupd_flags}'"
if [ -n "${cvsupd_user}" ] ; then
echo -n "Starting cvsupd as user [${cvsupd_user}]"
su -m ${cvsupd_user} -c "eval ${_fullcommand}"
else
echo -n "Starting cvsupd as user [root]"
eval $command ${cvsupd_flags}
fi
echo '.'
}
# функция из файла функций rc.subr
run_rc_command "$1"
Мой скрипт запуска получился такой большой потому, что я определил свою
собственную функцию запуска (cvsupd_start). Но можно и сократить
количество строчек кода скрипта запуска cvsupd :) - используя только
функции rc.subr. Определять свои собственные функции стоит тогда, когда
у вас есть свое мнение как должен "стартовать|останавливаться|etc" ваш
демон. При написание скрипта мнение, которое меня подвигло написать свою
функцию запуска было такое "ХаЧу чтоб имя узверя под, которым
запускается cvsupd выводилось при загрузки системы рядом с именем
демона" :) ну, а также хотелось показать кусочек гибкости rc.d.
Мой скрипт можно сократить до следующего:
пример "минимального" /etc/rc.d/cvsupd:
name=cvsupd
rcvar=`set_rcvar`
command=/usr/local/sbin/${name}
load_rc_config ${name}
case ${OSTYPE} in
FreeBSD)
run_rc_command "$1"
;;
esac
exit 0
ОТ МЕНЯ!
Очень часто при пояснении я будут упоминать слова 'имя скрипта' и 'имя
демона' в контексте функций rc.subr эти слова означают почти одно и
тоже, так как имена скриптов в /etc/rc.d чаще всего задают в честь имен
демонов, которые будут обслуживаться этими скриптами.
Дополнительный разбор функций и переменных используемых в скрипте:
name = переменная из rc.subr задающая имя скрипта (эту переменную нужно
задавать обязательно).
set_rcvar - функция из rc.subr устанавливает имя переменной необходимой
для запуска демона (скрипта). Обычно запуск демонов в FreeBSD
контролируются переменными заданными в rc.conf, имена таких переменных
имеют вид 'имя_демона' к которому присоединено слово '_enable'. Функции
можно в качестве аргумента передать имя нужного скрипта, если аргумент
не задан то имя скрипта считывается из переменной ${name}.
run_rc_command - функция из rc.subr благодаря этой функции у нас и
появляется возможность в качестве аргументов нашего скрипта использовать
следующие значения {start|stop|reload|restart|status|poll|rcvar}.
Красивее про это написано в
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/configtuning-rcng.html
Вот! вобщем-то и всё со скриптом запуска демона cvsupd. Только нужно не
забыть в rc.conf добавить строчки:
После этого наш демон cvsupd будет стартовать каждый раз при загрузке
системы под именем указанным в cvsupd_user с флагами cvsupd_flags.
Лично я задал следующие флаги:
-Z 5 - уровень сжатия передаваемых данных (значение от 0 до 9)
-C 10 - количество возможных одновременных соединений с сервером
-b /usr/cvsup/cvsup-server - базовая директория сервера <base_cvsup_server>
-l /usr/cvsup/cvsup-log/cvsupd.log - определяет куда будут направляться отчет (лог).
УСТАНОВКА РАЗРЕШЕНИЙ НА ФАЙЛЫ И ДИРЕКТОРИИ CVSUPD СЕРВЕРА И CVSUP КЛИЕНТА.
Для начала нужно создать пользователей с правами которых будут роботать
cvsupd и cvsup.
cvsupd - это имя группы и пользователя с правами, которого будет
работать демон cvsupd
cvsupc - это имя группы и пользователя с правами, которого будет
работать клиент cvsup.
!Пользователей лучше создавать с шеллом /sbin/nologin и домашней
директорией /nonexistent (директорией которой не существует).
!!!WARNING!!!
шелл nologin должен быть прописан в /etc/shells.
владелец, группа, разрешения на папки и файлы у меня получились следующие:
ЗАПУСК CVSUP КЛИЕНТА ПО CRON-у ДЛЯ СИНХРОНИЗАЦИИ КОЛЛЕКЦИЙ www/src-all/ports-all.
Для того чтобы регулярно по cron-у синхронизировать коллекции
www/src-all/ports-all c официального cvsup сервера FreeBSD я написал
простенький скрипт cvsup-cron.sh, который можно поместить в crontab.
Конечно можно было обойтись без него, но видно это не для меня.
Мой скрипт (cvsup-cron.sh) выглядит следующим образом:
#!/bin/sh
# папка для лог-файлов
log_dir=/usr/cvsup/cvsup-log
# путь к программе cvsup
cvsUp=/usr/local/bin/cvsup
# путь к программе su
sU=/usr/bin/su
# имя пользователя с правами, которого будет запускаться cvsup
run_user=cvsupc
# уровень отчета в логах cvsup (cvsup ключ -L)
logLevel=2
# пути к sup-файлам [ports/src/www]
ports_conf=/usr/cvsup/confiles/ports-cvsup.conf
src_conf=/usr/cvsup/confiles/src-cvsup.conf
www_conf=/usr/cvsup/confiles/www-cvsup.conf
Обязательно в этом скрипте нужно задать следующие переменные:
log_dir - папка для лог-файлов и lock-файлов.
cvsUp - путь до программы cvsup
sU - путь до программы su
run_user - имя пользователя с правами которого будет запускаться cvsup
logLevel - уровень отчета в логах cvsup (cvsup ключ -L)
ports_conf - путь до sup-файл для синхронизации портов
src_conf - путь до sup-файл для синхронизации исходников
www_conf - путь до sup-файл для синхронизации WEB
Поместить скрипт в crontab можно следующей командой:
#crontab -e
Просмотреть содержимое crontab можно следующей командой:
#crontab -l
Для того чтобы синхронизация происходила ежедневно в 4 часа утра в
crontab нужно поместить следующею строчку:
0 4 * * * /etc/cron-script/cvsup-cron.sh
где:
1е - поле минуты (0-59)
2е - поле часы (0-23)
3е - поле дни в месяце (1-31)
4е - поле месяца (1-12)
5е - поле дни недели (0-7, 0 или 7 это воскресенье, также можно использовать
имена дней недели)
далее следует команда, которую нужно выполнить.
КОНФИГУРАЦИЯ ЛОКАЛЬНЫХ CVSUP КЛИЕНТОВ ДЛЯ РАБОТЫ С ЛОКАЛЬНЫМ CVSUPD СЕРВЕРОМ.
DNS имя моего cvsupd сервера cvsupd.firma.lan. В соответствии с
описанным выше, сервер cvsupd.firma.lan обслуживает только коллекции:
имя коллекции: ports-all
имя коллекции: src-all
имя коллекции: www
с именами релизов:
release имя для www: current
release имя для ports-all: current (!!! не cvs!!!!)
release имя для src-all: cvs
пример sup-файла для синхронизации с локальным cvsupd сервером:
Для остальных коллекций sup-файлы выглядят почти аналогично.
МИНИ HOWTO - или пошаговая инструкция по всему выше написанному.
Для тех кому лениво читать воду, которую я налил выше написано это
mini-howto, которое описывает что, как, и где нужно сделать чтоб все
работало.
Постановка задачи:
Нужно организовать для локальной сети сервер cvsup, который
будет хранить коллекции ports-all/src-all/www файлов FreeBSD.
Локальный cvsup сервер должен ежедневно в 4 часа утра
синхронизировать обслуживаемые им коллекции с коллекциями
официального cvsup сервера FreeBSD (cvsup5.ru.FreeBSD.org).
Запуск демона cvsupd должен настраиваться из системного
конфигурационного файла rc.conf.
Демон cvsupd должен работать с правами обыкновенного
пользователя.
Должен быть приведен пример настройки cvsup клиента для
пользователей локальной сети по работе с локальным cvsup
сервером.
Дано:
DNS имя локального cvsup сервера - cvsupd.firma.lan.
DNS имя официального cvsup сервера - cvsup5.ru.FreeBSD.org
ОС локального cvsup сервера - FreeBSD 5.2
Решение задачи:
1. установить cvsup:
# cd /usr/ports/net/cvsup
# make install
2. Добавить в файл /etc/shells строчку:
/sbin/nologin
3. создать пользователя с правами которого будет запускаться демон cvsupd
# /stand/sysinstall
- создать пользователя с именем: cvsupd
- шелл для пользователя: /sbin/nologin
- домашняя папка пользователя: /nonexistent (не существующая папка)
создать пользователя с правами которого будет запускаться cvsup (клиентская часть)
# /stand/sysinstall
- создать пользователя с именем: cvsupc
- шелл для пользователя: /sbin/nologin
- домашняя папка пользователя: /nonexistent (не существующая папка)
4. создать рабочие папки для cvsup и для cvsupd и выставить на эти папки
соответствующие разрешения и права:
+-- начало файла --+
#!/bin/sh
#################################################
#### Обязательно установить следующие переменные ####
#### log_dir - папка для лог-файлов
#### cvsUp - путь к программе cvsup
#### sU - путь к программе su
#### run_user - имя пользователя с правами которого будет запускаться cvsup
#### logLevel - уровень отчета в логах cvsup (cvsup ключ -L)
#### ports_conf - пути к sup-файлу ports-all
#### src_conf - пути к sup-файлу src-all
#### www_conf - пути к sup-файлу www
#### ####
#################################################
log_dir=/usr/cvsup/cvsup-log
cvsUp=/usr/local/bin/cvsup
sU=/usr/bin/su
run_user=cvsupc
logLevel=2
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/cvsup.html
http://ozz.pp.ru/cvsup.html
http://www.opennet.ru/openforum/vsluhforumID1/33419.html - здесь есть интересные мысли
а также кусочками просмотрел:
man rc
man rc.subr
man rcorder
man 5 crontab
man cvsup
man cvsupd