The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: 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 https://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

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, adeep (?), 12:23, 08/07/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    $ 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.

     
  • 1.2, Dragon_Stas (??), 12:41, 08/07/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо :) - буду знать еще одну полезную программу.
     
  • 1.3, Nikita (??), 17:42, 15/10/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Отличная, полезная статья.
    Только есть маленькая ошибка.
    <base_cvsup_server>/sup/ports-all - файл в этом каталоге должен называться "releases", а не "release".
     
  • 1.4, мимо пробегал (?), 19:26, 23/08/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    нашел опечатку

    -if [ ! -d ${www_dir} ]; then
    +if [ ! -d ${www_conf} ]; then
        echo "ERROR!"
        echo "FILE ${www_conf} NOT FOUND"
        exit 1
    fi

    зы: за статью спасибо

     
  • 1.5, Алексей (??), 00:44, 22/09/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    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
    что-то не работает
     
     
  • 2.6, luka (?), 17:33, 22/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >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
    >что-то не работает


    1. Какая ОС
    2. Как ставил сам локальный CVS

     

  • 1.7, variable (??), 17:20, 25/09/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    от жиж блин)))
    releases надо писать, а не release)))

    С уважением)

     
  • 1.8, djdb (?), 15:21, 24/11/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    -if [ ! -d ${www_dir} ]; then
    +if [ ! -f ${www_conf} ]; then
        echo "ERROR!"
        echo "FILE ${www_conf} NOT FOUND"
        exit 1
    fi
     
  • 1.9, djdb (?), 00:10, 05/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    <base_cvsup_server>/sup/www/list.cvs
    -upgrade date
    +upgrade data
     
  • 1.10, andrew (??), 10:49, 17/10/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что-то правда не хочет работать !
    Может что-то не так прописываю ?
    Вот что пишит :
    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
     
  • 1.11, VadeR (?), 01:03, 24/11/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ребятки, копался весь день - чуть не повесился - всё запускается нормально, но не обновляет коллекцию в результате. В и-нете инфы нема. Совершенно случайно наткнулся в разговоре о другом - у КЛИЕНТА *default tag=. - НЕ НУЖЕН!!!

    А за статью большой респект, только вот этот глюк убил.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру