Ключевые слова:cvsup, update, freebsd, (найти похожие документы)
From: Krylov Stanislav aka Dragon <Stas_Dragon@aport2000.ru.>
Newsgroups: email
Date: Mon, 08 Jul 2005 14:31:37 +0000 (UTC)
Subject: Настройка локального cvsup (cvsupd) сервера.
В более удобочитаемом варианте заметку можно найти вот здесь
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=cvsup5.ru.FreeBSD.org
*default prefix=/usr/cvsup/repository/ports-all
*default base=/usr/cvsup/cvsup-client
*default release=cvs delete use-rel-suffix compress
*default tag=.
ports-all
Где:
*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:
*default host=cvsup5.ru.FreeBSD.org
*default prefix=/usr/cvsup/repository/www
*default base=/usr/cvsup/cvsup-client
*default release=current delete use-rel-suffix compress
www
Пример sup-файл /usr/cvsup/confiles/src-cvsup.conf для (**)
синхронизации исходных текстов FreeBSD:
*default host=cvsup5.ru.FreeBSD.org
*default prefix=/usr/cvsup/repository/src-all
*default base=/usr/cvsup/cvsup-client
*default release=cvs delete use-rel-suffix compress
src-all
СОЗДАНИЕ REFUSE ФАЙЛОВ
В директориях:
<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).
Пример файла "refuse" для ports-all:
ports/arabic
ports/chinese
ports/french
ports/german
ports/hebrew
ports/japanese
ports/korean
ports/polish
ports/ukrainian
ports/vietnamese
ports/games
Пример файла "refuse" для www:
data/da
data/de
data/fr
data/es
data/it
data/ja
data/nl
data/pt_BR
data/tr
data/zh
data/nl
data/doc/da_*
data/doc/de_*
data/doc/fr_*
data/doc/es_*
data/doc/it_*
data/doc/ja_*
data/doc/nl_*
data/doc/pt_BR_*
data/doc/tr_*
data/doc/zh_*
data/doc/nl_*
запуск команды 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
<base_cvsup_server>/sup/src-all/list.cvs
upgrade src
<base_cvsup_server>/sup/src-all/release
cvs list=list.cvs prefix=/usr/cvsup/repository/src-all
<base_cvsup_server>/sup/www/list.cvs
upgrade date
<base_cvsup_server>/sup/www/release
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:
#!/bin/sh
# Writed by Krylov Stanislav aka Dragon
# PROVIDE: cvsupd
# REQUIRE: DAEMON
# KEYWORD: FreeBSD
# загружаю файл функций rc.subr
. /etc/rc.subr
# устанавливаю значения для переменных ${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:
#!/bin/sh
# PROVIDE: cvsupd
# REQUIRE: DAEMON
# KEYWORD: FreeBSD
. /etc/rc.subr
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_enable="YES"
cvsupd_flags="указать_нужные_флаги_cvsupd"
cvsupd_user="имя_пользователя_из_под_имени_которого_будет_работать_cvsupd"
После этого наш демон 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.
владелец, группа, разрешения на папки и файлы у меня получились следующие:
#ls -lF /usr/cvsup/confiles/
drwxr-x--- 2 root cvsupc 512 4 июн 18:35 confiles/
drwxr-x--- 3 cvsupc cvsupc 512 30 май 17:07 cvsup-client/
drwxrwx--- 2 cvsupd cvsupc 512 4 июн 18:28 cvsup-log/
drwxr-x--- 3 root сvsupd 512 30 май 17:44 cvsup-server/
drwxr-x--- 5 cvsupc cvsupd 512 1 июн 19:34 repository/
# ls -lF /usr/cvsup/confiles/
-rw-r----- 1 root cvsupc 198 14 июн 22:11 ports-cvsup.conf
-rw-r----- 1 root cvsupc 179 31 май 17:46 src-cvsup.conf
-rw-r----- 1 root cvsupc 175 3 июн 23:18 www-cvsup.conf
# ls -lFR /usr/cvsup/cvsup-client/
drwxr-x--- 5 cvsupc cvsupc 512 1 июн 19:32 sup/
/usr/cvsup/cvsup-client/sup:
drwxr-x--- 2 cvsupc cvsupc 512 14 июн 22:27 ports-all/
drwxr-x--- 2 cvsupc cvsupc 512 14 июн 22:28 src-all/
drwxr-x--- 2 cvsupc cvsupc 512 14 июн 22:28 www/
/usr/cvsup/cvsup-client/sup/ports-all:
-rw-r----- 1 cvsupc cvsupc 152 3 июн 19:35 refuse
/usr/cvsup/cvsup-client/sup/www:
-rw-r----- 1 cvsupc cvsupc 90 3 июн 19:44 refuse
# ls -lFR /usr/cvsup/cvsup-server/
drwxr-x--- 5 root cvsupd 512 4 июн 18:33 sup/
/usr/cvsup/cvsup-server/sup:
drwxr-x--- 2 root cvsupd 512 4 июн 18:32 ports-all/
drwxr-x--- 2 root cvsupd 512 31 май 17:10 src-all/
drwxr-x--- 2 root cvsupd 512 4 июн 18:33 www/
/usr/cvsup/cvsup-server/sup/ports-all:
-rw-r----- 1 root cvsupd 13 30 май 16:05 list.cvs
-rw-r----- 1 root cvsupd 60 4 июн 18:37 releases
/usr/cvsup/cvsup-server/sup/src-all:
-rw-r----- 1 root cvsupd 11 30 май 17:47 list.cvs
-rw-r----- 1 root cvsupd 54 31 май 17:40 releases
/usr/cvsup/cvsup-server/sup/www:
-rw-r----- 1 root cvsupd 12 4 июн 18:33 list.cvs
-rw-r----- 1 root cvsupd 54 4 июн 18:38 releases
# ls -lF /usr/cvsup/repository/
drwxr-x--- 3 cvsupc cvsupd 512 30 май 17:10 ports-all/
drwxr-x--- 3 cvsupc cvsupd 512 31 май 17:48 src-all/
drwxr-x--- 3 cvsupc cvsupd 512 1 июн 19:35 www/
ЗАПУСК 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
#####################################
###### простенькие проверки #########
#####################################
if [ ! -f ${cvsUp} ]; then
echo "ERROR!"
echo "FILE ${cvsUp} NOT FOUND"
exit 1
fi
if [ ! -f ${sU} ]; then
echo "ERROR!"
echo "FILE ${sU} NOT FOUND"
exit 1
fi
if [ ! -f ${ports_conf} ]; then
echo "ERROR!"
echo "FILE ${ports_conf} NOT FOUND"
exit 1
fi
if [ ! -f ${src_conf} ]; then
echo "ERROR!"
echo "FILE ${src_conf} NOT FOUND"
exit 1
fi
if [ ! -d ${www_dir} ]; then
echo "ERROR!"
echo "FILE ${www_conf} NOT FOUND"
exit 1
fi
if [ ! -d ${log_dir} ]; then
echo "ERROR!"
echo "DIRECTORY ${log_dir} NOT FOUND"
exit 1
fi
log_date=`date "+%Y-%m-%d"`
log_time=`date "+%H:%M:%S"`
##################################################
############ запус cvsup для ports ###############
##################################################
if [ -f ${log_dir}/ports.lock ]; then
echo "${log_date} ${log_time} - [PORTS] lock file exist!" >> ${log_dir}/p${log_date}.log
else
echo -e "\n\t+-----\t\t[ports]\t\t-----+" \
>> ${log_dir}/p${log_date}.log 2>&1
echo -e "\t+-----\t[${log_date} ${log_time}]\t-----+\n" \
>> ${log_dir}/p${log_date}.log 2>&1
${sU} -m ${run_user} -c "${cvsUp} -l ${log_dir}/ports.lock -L ${logLevel} ${ports_conf}" \
>> ${log_dir}/p${log_date}.log 2>&1
fi
log_date=`date "+%Y-%m-%d"`
log_time=`date "+%H:%M:%S"`
##################################################
############ запус cvsup для src-all #############
##################################################
if [ -f ${log_dir}/src.lock ]; then
echo "${log_date} ${log_time} - [SRC-ALL] lock file exist!" >> ${log_dir}/s${log_date}.log
else
echo -e "\n\t+-----\t\t[src-all]\t\t-----+" \
>> ${log_dir}/s${log_date}.log 2>&1
echo -e "\t+-----\t[${log_date} ${log_time}]\t-----+\n" \
>> ${log_dir}/s${log_date}.log 2>&1
${sU} -m ${run_user} -c "${cvsUp} -l ${log_dir}/src.lock -L ${logLevel} ${src_conf}" \
>> ${log_dir}/s${log_date}.log 2>&1
fi
log_date=`date "+%Y-%m-%d"`
log_time=`date "+%H:%M:%S"`
##################################################
############ запус cvsup для www #################
##################################################
if [ -f ${log_dir}/www.lock ]; then
echo "${log_date} ${log_time} - [WWW-ALL] lock file exist!" >> ${log_dir}/w${log_date}.log
else
echo -e "\n\t+-----\t\t[www]\t\t-----+" \
>> ${log_dir}/w${log_date}.log 2>&1
echo -e "\t+-----\t[${log_date} ${log_time}]\t-----+\n" \
>> ${log_dir}/w${log_date}.log 2>&1
${sU} -m ${run_user} -c "${cvsUp} -l ${log_dir}/www.lock -L ${logLevel} ${www_conf}" \
>> ${log_dir}/w${log_date}.log 2>&1
fi
exit 0%
Обязательно в этом скрипте нужно задать следующие переменные:
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 сервером:
*default host=cvsupd.firma.lan.
*default prefix=/usr
*default base=/var/cvsup
*default release=current delete use-rel-suffix compress
*default tag=.
ports-all
Для остальных коллекций 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 и выставить на эти папки
соответствующие разрешения и права:
#mkdir -p /usr/cvsup/confiles/
#chown root:cvsupc /usr/cvsup/confiles
#chmod 750 /usr/cvsup/confiles
#mkdir -p /usr/cvsup/cvsup-client/sup/ports-all
#mkdir -p /usr/cvsup/cvsup-client/sup/src-all
#mkdir -p /usr/cvsup/cvsup-client/sup/www
#chown -R cvsupc:cvsupc /usr/cvsup/cvsup-client
#chmod -R 750 /usr/cvsup/cvsup-client
#mkdir -p /usr/cvsup/cvsup-server/sup/ports-all
#mkdir -p /usr/cvsup/cvsup-server/sup/src-all
#mkdir -p /usr/cvsup/cvsup-server/sup/www
#chown -R root:cvsupd /usr/cvsup/cvsup-server
#chmod -R 750 /usr/cvsup/cvsup-server
#mkdir -p /usr/cvsup/repository/ports-all
#mkdir -p /usr/cvsup/repository/src-all
#mkdir -p /usr/cvsup/repository/www
#chown -R cvsupc:cvsupd /usr/cvsup/repository
#chmod -R 750 /usr/cvsup/repository
#mkdir -p /usr/cvsup/cvsup-log
#chown -R cvsupc:cvsupd /usr/cvsup/cvsup-log
#chmod -R 770 /usr/cvsup/cvsup-log
5. создать конфигурационные файлы для cvsupd
5.1. конфигурационные файлы cvsupd для коллекции ports-all
# touch /usr/cvsup/cvsup-server/sup/ports-all/list.cvs
# chown root:cvsupd /usr/cvsup/cvsup-server/sup/ports-all/list.cvs
# chmod 640 /usr/cvsup/cvsup-server/sup/ports-all/list.cvs
содержимое файла /usr/cvsup/cvsup-server/sup/ports-all/list.cvs:
+-- начало файла --+
upgrade ports
+-- конец файла --+
# touch /usr/cvsup/cvsup-server/sup/ports-all/release
# chown root:cvsupd /usr/cvsup/cvsup-server/sup/ports-all/release
# chmod 640 /usr/cvsup/cvsup-server/sup/ports-all/release
содержимое файла /usr/cvsup/cvsup-server/sup/ports-all/release:
+-- начало файла --+
current list=list.cvs prefix=/usr/cvsup/repository/ports-all
+-- конец файла --+
5.2. конфигурационные файлы cvsupd для коллекции src-all
# touch /usr/cvsup/cvsup-server/sup/src-all/list.cvs
# chown root:cvsupd /usr/cvsup/cvsup-server/sup/src-all/list.cvs
# chmod 640 /usr/cvsup/cvsup-server/sup/src-all/list.cvs
содержимое файла /usr/cvsup/cvsup-server/sup/src-all/list.cvs:
+-- начало файла --+
upgrade src
+-- конец файла --+
# touch /usr/cvsup/cvsup-server/sup/src-all/release
# chown root:cvsupd /usr/cvsup/cvsup-server/sup/src-all/release
# chmod 640 /usr/cvsup/cvsup-server/sup/src-all/release
содержимое файла /usr/cvsup/cvsup-server/sup/src-all/release:
+-- начало файла --+
cvs list=list.cvs prefix=/usr/cvsup/repository/src-all
+-- конец файла --+
5.3. конфигурационные файлы cvsupd для коллекции www
# touch /usr/cvsup/cvsup-server/sup/www/list.cvs
# chown root:cvsupd /usr/cvsup/cvsup-server/sup/www/list.cvs
# chmod 640 /usr/cvsup/cvsup-server/sup/www/list.cvs
содержимое файла /usr/cvsup/cvsup-server/sup/www/list.cvs:
+-- начало файла --+
upgrade date
+-- конец файла --+
# touch /usr/cvsup/cvsup-server/sup/www/release
# chown root:cvsupd /usr/cvsup/cvsup-server/sup/www/release
# chmod 640 /usr/cvsup/cvsup-server/sup/www/release
содержимое файла /usr/cvsup/cvsup-server/sup/www/release:
+-- начало файла --+
current list=list.cvs prefix=/usr/cvsup/repository/www
+-- конец файла --+
6. добавить в /etc/rc.conf следующие строчки
cvsupd_enable="YES"
cvsupd_flags="-Z 5 -C 10 -b /usr/cvsup/cvsup-server -l /usr/cvsup/cvsup-log/cvsupd.log"
cvsupd_user="cvsupd"
7. в папке /etc/rc.d создать файл cvsupd
# touch /etc/rc.d/cvsupd
# chown root:wheel /etc/rc.d/cvsupd
# chmod 755 /etc/rc.d/cvsupd
содержимое файла /etc/rc.d/cvsupd:
+-- начало файла --+
#!/bin/sh
# PROVIDE: cvsupd
# REQUIRE: DAEMON
# KEYWORD: FreeBSD
. /etc/rc.subr
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
+-- конец файла --+
8. запуск демона cvsupd без перезагрузки системы
# /etc/rc.d/cvsupd start
9. настройка cvsup клиента для синхронизации локального сервера cvsupd с
официальным cvsup сервером FreeBSD.
9.1. создание sup-файлов для cvsup клиента
9.1.1. создание sup-файла для синхронизации коллекции ports-all
# touch /usr/cvsup/confiles/ports-cvsup.conf
# chown root:cvsupc /usr/cvsup/confiles/ports-cvsup.conf
# chmod 640 /usr/cvsup/confiles/ports-cvsup.conf
содержимое файла /usr/cvsup/confiles/ports-cvsup.conf
+-- начало файла --+
*default host=cvsup5.ru.FreeBSD.org
*default prefix=/usr/cvsup/repository/ports-all
*default base=/usr/cvsup/cvsup-client
*default release=cvs delete use-rel-suffix compress
*default tag=.
ports-all
+-- конец файла --+
9.1.2. создание sup-файла для синхронизации коллекции src-all
# touch /usr/cvsup/confiles/src-cvsup.conf
# chown root:cvsupc /usr/cvsup/confiles/src-cvsup.conf
# chmod 640 /usr/cvsup/confiles/src-cvsup.conf
содержимое файла /usr/cvsup/confiles/src-cvsup.conf
+-- начало файла --+
*default host=cvsup5.ru.FreeBSD.org
*default prefix=/usr/cvsup/repository/src-all
*default base=/usr/cvsup/cvsup-client
*default release=cvs delete use-rel-suffix compress
src-all
+-- конец файла --+
9.1.3. создание sup-файла для синхронизации коллекции www
# touch /usr/cvsup/confiles/www-cvsup.conf
# chown root:cvsupc /usr/cvsup/confiles/www-cvsup.conf
# chmod 640 /usr/cvsup/confiles/www-cvsup.conf
содержимое файла /usr/cvsup/confiles/www-cvsup.conf
+-- начало файла --+
*default host=cvsup5.ru.FreeBSD.org
*default prefix=/usr/cvsup/repository/www
*default base=/usr/cvsup/cvsup-client
*default release=current delete use-rel-suffix compress
www
+-- конец файла --+
9.2. создание refuse-файлов для cvsup клиента
9.2.1 - создание refuse файла для коллекции ports-all
# touch /usr/cvsup/cvsup-client/sup/ports-all/refuse
# chown cvsupc:cvsupc /usr/cvsup/cvsup-client/sup/ports-all/refuse
# chmod 640 /usr/cvsup/cvsup-client/sup/ports-all/refuse
+-- начало файла --+
ports/arabic
ports/chinese
ports/french
ports/german
ports/hebrew
ports/japanese
ports/korean
ports/polish
ports/ukrainian
ports/vietnamese
ports/games
+-- конец файла --+
9.2.2. создание refuse файла для коллекции www
# touch /usr/cvsup/cvsup-client/sup/www/refuse
# chown cvsupc:cvsupc /usr/cvsup/cvsup-client/sup/www/refuse
# chmod 640 /usr/cvsup/cvsup-client/sup/www/refuse
+-- начало файла --+
data/da
data/de
data/fr
data/es
data/it
data/ja
data/nl
data/pt_BR
data/tr
data/zh
data/nl
data/doc/da
data/doc/da_*
data/doc/de
data/doc/de_*
data/doc/es
data/doc/es_*
data/doc/fr
data/doc/fr_*
data/doc/it
data/doc/it_*
data/doc/ja
data/doc/ja_*
data/doc/nl
data/doc/nl_*
data/doc/pt_*
data/doc/tr
data/doc/tr_*
+-- конец файла --+
9.3. создание скрипта, который будет вызываться из crontab для запуска
cvsup клиента с указанными выше sup-файлами
#mkdir /etc/cron-script
#touch /etc/cron-script/cvsup-cron.sh
#chown root:wheel /etc/cron-script/cvsup-cron.sh
#chmod 750 /etc/cron-script/cvsup-cron.sh
содержимое файла /etc/cron-script/cvsup-cron.sh
+-- начало файла --+
#!/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
ports_conf=/usr/cvsup/confiles/ports-cvsup.conf
src_conf=/usr/cvsup/confiles/src-cvsup.conf
www_conf=/usr/cvsup/confiles/www-cvsup.conf
#####################################
###### простенькие проверки #########
#####################################
if [ ! -f ${cvsUp} ]; then
echo "ERROR!"
echo "FILE ${cvsUp} NOT FOUND"
exit 1
fi
if [ ! -f ${sU} ]; then
echo "ERROR!"
echo "FILE ${sU} NOT FOUND"
exit 1
fi
if [ ! -f ${ports_conf} ]; then
echo "ERROR!"
echo "FILE ${ports_conf} NOT FOUND"
exit 1
fi
if [ ! -f ${src_conf} ]; then
echo "ERROR!"
echo "FILE ${src_conf} NOT FOUND"
exit 1
fi
if [ ! -d ${www_dir} ]; then
echo "ERROR!"
echo "FILE ${www_conf} NOT FOUND"
exit 1
fi
if [ ! -d ${log_dir} ]; then
echo "ERROR!"
echo "DIRECTORY ${log_dir} NOT FOUND"
exit 1
fi
log_date=`date "+%Y-%m-%d"`
log_time=`date "+%H:%M:%S"`
#################################################
#### запус cvsup для ports-all ####
#################################################
if [ -f ${log_dir}/ports.lock ]; then
echo "${log_date} ${log_time} - [PORTS] lock file exist!" >> ${log_dir}/p${log_date}.log
else
echo -e "\n\t+-----\t\t[ports]\t\t-----+" \
>> ${log_dir}/p${log_date}.log 2>&1
echo -e "\t+-----\t[${log_date} ${log_time}]\t-----+\n" \
>> ${log_dir}/p${log_date}.log 2>&1
${sU} -m ${run_user} -c "${cvsUp} -l ${log_dir}/ports.lock -L ${logLevel} ${ports_conf}" \
>> ${log_dir}/p${log_date}.log 2>&1
fi
log_date=`date "+%Y-%m-%d"`
log_time=`date "+%H:%M:%S"`
#################################################
#### запус cvsup для src-all ####
#################################################
if [ -f ${log_dir}/src.lock ]; then
echo "${log_date} ${log_time} - [SRC-ALL] lock file exist!" >> ${log_dir}/s${log_date}.log
else
echo -e "\n\t+-----\t\t[src-all]\t\t-----+" \
>> ${log_dir}/s${log_date}.log 2>&1
echo -e "\t+-----\t[${log_date} ${log_time}]\t-----+\n" \
>> ${log_dir}/s${log_date}.log 2>&1
${sU} -m ${run_user} -c "${cvsUp} -l ${log_dir}/src.lock -L ${logLevel} ${src_conf}" \
>> ${log_dir}/s${log_date}.log 2>&1
fi
log_date=`date "+%Y-%m-%d"`
log_time=`date "+%H:%M:%S"`
#################################################
#### запус cvsup для www ####
#################################################
if [ -f ${log_dir}/www.lock ]; then
echo "${log_date} ${log_time} - [WWW-ALL] lock file exist!" >> ${log_dir}/w${log_date}.log
else
echo -e "\n\t+-----\t\t[www]\t\t-----+" \
>> ${log_dir}/w${log_date}.log 2>&1
echo -e "\t+-----\t[${log_date} ${log_time}]\t-----+\n" \
>> ${log_dir}/w${log_date}.log 2>&1
${sU} -m ${run_user} -c "${cvsUp} -l ${log_dir}/www.lock -L ${logLevel} ${www_conf}" \
>> ${log_dir}/w${log_date}.log 2>&1
fi
exit 0
+-- конец файла --+
9.4. Установка расписания запуска скрипта /etc/cron-script/cvsup-cron.sh в crontab
# crontab -e
добавить строчку:
0 4 * * * /etc/cron-script/cvsup-cron.sh
проверить, что выше указанная строчка написана правильно
# crontab -l
10. примеры sup-файлов для cvsup клиентов находящихся в локальной сети
для работы с локальным cvsup сервером.
# mkdir -p /var/cvsup
10.1. sup-файл для коллекции ports-all
+-- начало файла --+
*default host=cvsupd.firma.lan.
*default prefix=/usr
*default base=/var/cvsup
*default release=current delete use-rel-suffix compress
*default tag=.
ports-all
+-- конец файла --+
запуск cvsup клиента командой:
#cvsup -L 2 <путь_до_нужного_sup_файла>
10.2. sup-файл для коллекции src-all
+-- начало файла --+
*default host=cvsupd.firma.lan.
*default prefix=/usr
*default base=/var/cvsup
*default release=cvs delete use-rel-suffix compress
*default tag=<УКАЗАТЬ_НУЖНЫЙ_ТЕГ>
src-all
+-- конец файла --
запуск cvsup клиента командой:
#cvsup -L 2 <путь_до_нужного_sup_файла>
10.3. sup-файл для коллекции www
# mkdir -p /usr/local/freebsd-www
+-- начало файла --+
*default host=cvsupd.firma.lan.
*default prefix=/usr/local/freebsd-www
*default base=/var/cvsup
*default release=current delete use-rel-suffix compress
www
+-- конец файла --
запуск cvsup клиента командой:
#cvsup -L 2 <путь_до_нужного_sup_файла>
ЧТО Я ЧИТАЛ ДЛЯ НАПИСАНИЯ ЭТОЙ ЗАМЕТКИ
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/cvsup.html
http://ozz.pp.ru/cvsup.html
http://www.opennet.me/openforum/vsluhforumID1/33419.html - здесь есть интересные мысли
а также кусочками просмотрел:
man rc
man rc.subr
man rcorder
man 5 crontab
man cvsup
man cvsupd
залез во внутрь /etc/rc.subr и /etc/rc
$ cat /usr/ports/net/cvsup-mirror/pkg-descr
This is the CVSup Mirror Kit, an easy way to set up a FreeBSD mirror
site. When you type "make", it asks you a few questions about
which files you want to mirror, where you want to put them on your
disks, where you want to update them from, etc. After a "make
install" your system will then be running as a nearly self-maintaining
FreeBSD mirror site. It will even update its own configuration
files from the master site automatically.
This kit is not for people who just want to keep their own files
up to date with CVSup. It is for people who wish to run servers
that distribute the FreeBSD sources to others.
Отличная, полезная статья.
Только есть маленькая ошибка.
<base_cvsup_server>/sup/ports-all - файл в этом каталоге должен называться "releases", а не "release".
test2# cvsup -g -L 2 /root/supfile
Parsing supfile "/root/supfile"
Connecting to 10.11.12.5
Connected to 10.11.12.5
Server software version: SNAP_16_1h
Negotiating file attribute support
Exchanging collection information
Server message: Unknown collection "src-all"
Establishing multiplexed-mode data connection
Running
Skipping collection src-all/cvs
Shutting down connection to server
Finished successfully
что-то не работает
>test2# cvsup -g -L 2 /root/supfile
>Parsing supfile "/root/supfile"
>Connecting to 10.11.12.5
>Connected to 10.11.12.5
>Server software version: SNAP_16_1h
>Negotiating file attribute support
>Exchanging collection information
>Server message: Unknown collection "src-all"
>Establishing multiplexed-mode data connection
>Running
>Skipping collection src-all/cvs
>Shutting down connection to server
>Finished successfully
>что-то не работает
Что-то правда не хочет работать !
Может что-то не так прописываю ?
Вот что пишит :
Parsing supfile "supfile.conf"
Connecting to 192.168.175.253
Connected to 192.168.175.253
Server software version: SNAP_16_1h
Negotiating file attribute support
Exchanging collection information
Server message: Unknown collection "ports-all"
Establishing multiplexed-mode data connection
Skipping collection ports-all/current
Running
Shutting down connection to server
Finished successfully
Ребятки, копался весь день - чуть не повесился - всё запускается нормально, но не обновляет коллекцию в результате. В и-нете инфы нема. Совершенно случайно наткнулся в разговоре о другом - у КЛИЕНТА *default tag=. - НЕ НУЖЕН!!!
А за статью большой респект, только вот этот глюк убил.