Возможно вы искали: 'Cyclemania'

May 15 2025 18:25:30
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Настройка локального cvsup (cvsupd) сервера. (cvsup update freebsd)

Настройка локального cvsup (cvsupd) сервера. (cvsup update freebsd)

Ключевые слова: 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 "nt+-----tt[ports]tt-----+"
>> ${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 "nt+-----tt[src-all]tt-----+"
>> ${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 "nt+-----tt[www]tt-----+"
>> ${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 "nt+-----tt[ports]tt-----+"
>> ${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 "nt+-----tt[src-all]tt-----+"
>> ${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 "nt+-----tt[www]tt-----+"
>> ${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.ru/openforum/vsluhforumID1/33419.html - здесь есть интересные мысли

а также кусочками просмотрел:

man rc
man rc.subr
man rcorder
man 5 crontab
man cvsup
man cvsupd

залез во внутрь /etc/rc.subr и /etc/rc
285 Прочтений •  [Настройка локального cvsup (cvsupd) сервера. (cvsup update freebsd)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Настройка локального cvsup (cvsupd)... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка