next up previous contents
Next: 14.6 Версии файлов и Up: 14. CVS - система Previous: 14.4 Форма содержания данных

Подраздел


14.5 Удал©нные хранилища

Рабочие копии программ вы можете хранить в рабочем каталоге на вашей личной машине, а само хранилище может располагаться на другой машине в другом конце офиса, в другом здании или на другом континенте. Использование удал©нного хранилища в целом происходит таким же порядком как и использование локального хранилища. Исключение составляет лишь формат имени хранилища, который в удал©нном случае имеет вид
:METHOD:USER@HOSTNAME:/path/to/repository
Детали формата зависят от метода доступа, с помощью которого вы обращаетесь к удал©нному хранилищу.

14.5.1 Метод доступа rsh

Система CVS может использовать протокол rsh (имеется в виду Remote SHell - удал©нная оболочка), чтобы выполнить необходимые операции в удал©нном хранилище. Таким образом, на рабочей станции (сервере), где находится хранилище должен быть соответствующим образом заполнен файл с именем .rhosts.

Предположим, что вы зарегистрированы на вашей машине local.pnpi.spb.ru как пользователь с именем mozart. А ваш сервер находится на машине rsgi01.rhic.bnl.gov. При этом все тексты хранятся под именем пользователя bach. Тогда вам необходимо в файл rsgi01.rhic.bnl.gov:~bach/.rhosts добавить строку:
local.pnpi.spb.ru mozart
После этого на своей локальной машине local.pnpi.spb.ru проверьте, что вс© работает нормально
rsh -l bach rsgi01.rhic.bnl.gov 'echo $PATH'
Вы должны увидеть содержимое переменной окружения $PATH на машине rsgi01.rhic.bnl.gov. Обратите внимание, что переменная должна указывать на имя каталога, в котором находится программный сервер CVS. Вы можете указать другим способом откуда вызывать сервер системы CVS. Для этого вам следует установить на локальной машине local.pnpi.spb.ru переменную окружения CVS_SERVER с именем сервера, который вы хотите использовать, например, /usr/local/bin/cvs-1.6.

Если используется протокол rsh, то нет необходимости устанавливать другие системные файлы, чтобы запускать демон сервера системы CVS.

Имеется два метода доступа, которые вы можете указать в переменной окружения CVSROOT при использовании протокола rsh. Использовав метод :server:, вы определяете внутренний rsh клиент, который поддерживается только некоторыми портами CVS. А метод :ext: определяет внешнюю программу rsh. По умолчанию используется программа rsh, однако вы можете задать имя программы в переменной окружения CVS_RSH. Нетрудно догадаться, что если вы использовали другое имя, например, ssh, то вам следует использовать другие имена файлов, например, .shosts для ssh.

Продолжая наш прежний пример, предположим, что вы хотите получить доступ к файлу foo в хранилище /usr/local/cvsroot/ на машине rsgi01.rhic.bnl.gov. Тогда, чтобы создать рабочую копию файла на вашей локальной машине local.pnpi.spb.ru вам следует написать
cvs -d :ext:bach@rsgi01.rhic.bnl.gov:/usr/local/cvsroot checkout foo
При этом bach@ может быть опущено, если имя пользователя на обеих машинах совпадает.

14.5.2 Прямое соединение с сервером

Клиент CVS может соединиться с сервером непосредственно с использованием одной из схем аутентификации. Такая возможность является крайне необходимой, если сервер находится за защитным сервером (firewall), а система Kerberos тоже недоступна.

Чтобы использовать такой метод следует произвести некоторые настройки на стороне клиента и на стороне сервера.

14.5.2.1 Установки на серверной стороне

На серверной стороне необходимо отредактировать системный конфигурационные файл /etc/inetd.conf таким образом, что программа inetd будет знать, что надо выполнить команду
cvs pserver
когда сервер обнаружит попытку соединения на соответствующий порт. По умолчанию номер порта равен 2401. Номер порта может быть другим, если ваш клиент был скомпилирован с установленной переменной CVS_AUTH_PORT, которая указывала другой порт.

Если ваша inetd допускает в файле /etc/inetd.conf обычные номера портов, то следующих двух строк достаточно:
2401 stream tcp nowait root /usr/local/bin/cvs
cvs -b /usr/local/bin pserver
Параметр -b определяет каталог, в котором содержатся готовые к исполнению программы RCS на вашем сервере. Можно также использовать параметр -T, чтобы определить каталог для временных файлов.

Если ваша inetd предпочитает символические имена сервисов вместо простых номеров портов, то вы можете поместить в файл /etc/services строку
cvspserver 2401/tcp
Тогда вы сможете использовать символическое имя сервиса cvspserver в файле /etc/inetd.conf вместо номера порта.

Естественно, что после изменения файлов вам необходимо заставить inetd заново прочесть конфигурационные файлы или перезапустить программу inetd.

Поскольку клиент содержит и переда©т пароли также как обычный текст, то может быть использован отдельный парольный файл CVS. Этот файл находится в $CVSROOT/CVSROOT/passwd. Его формат такой же как /etc/passwd за исключением того, что он имеет всего два поля: имя пользователя и пароль. Например,
shevel:ULtgRLXo7NRxs
oreshkin:1sOp854gDF3DY
Пароль закодирован в соответствии со стандартом функции crypt(). Следовательно, вы можете скопировать поле пароля из файла /etc/passwd.

Когда проверяется пароль, то CVS сначала проверяет есть ли пользователь в файле $CVSROOT/CVSROOT/passwd. Если пользователь найден, то сверяется пароль. Если пользователя нет в этом файле или сам файл $CVSROOT/CVSROOT/passwd отсутствует, то сервер CVS пытается найти пользователя среди зарегистрированных пользователей сервера.

В то время когда CVS выполняет процедуру аутентификации, она работает при той же сумме привилегий, что и обычный пользователь с тем же именем.

Пока единственный способ записать пароль является копирование его из какого-то другого места. Быть может скоро появится команда cvs passwd.

14.5.2.2 Установки на стороне клиента

До того как соединиться с сервером, клиент должен логироваться с помощью команды
cvs login
Логирование заключается в проверке пароля на стороне сервера, а также в записывании пароля для более позднего взаимодействия с сервером CVS, иначе, для последующих транзакций. Команда cvs login должна получить имя пользователя, имя сервера и абсолютное имя каталога, где находится хранилище CVS. Она бер©т эту информацию из переменной окружения CVSROOT. Команда cvs login запросит интерактивно пароль пользователя. Например,
cvs -d :pserver:bach@rsgi01.rhic.bnl.gov:/usr/local/cvsroot login
CVS password:
Если пароль проверен успешно, то вс© нормально, если нет - будет диагностика, что пароль неверен. Раз вы уже логированы, то можете выполнять и другие команды
cvs -d :pserver:bach@rsgi01.rhic.bnl.gov:/usr/local/cvsroot checkout foo
В обоих предыдущих командах используется метод :pserver:. Если он не был бы указан, то система CVS предполагала бы, что надо использовать rsh.

После того как файл из предыдущего примера foo переписан в ваш рабочий каталог, то при выполнении команд системы в этом каталоге нет необходимости каждый раз указывать в явном виде где расположено хранилище, поскольку оно было записано в вашем рабочем каталоге (подкаталог с именем CVS).

По умолчанию, пароль записывается в файл $HOME/.cvspass в специальном формате. Вы может сменить умолчание посредством установки переменной окружения CVS_PASSFILE. Если вы планируете использовать данную переменную, то установите е© новое значение ДО выполнения логирования на удал©нный сервер.

Другая переменная окружения - CVS_PASSWORD сменит все запомненные пароли. Если она установлена, то CVS будет использовать это значение для всех процедур аутентификации при соединении с любыми серверами.

14.5.2.3 Прямое соединение с использованием Kerberos

Основной недостаток использования протокола rsh состоит в том, что все данные должны пройти через дополнительные программы, что, естественно, замедляет передачу. Если вы используете систему Kerberos, вы можете соединятся и передавать файлы посредством прямого соединения TCP, поскольку аутентификацию выполняет Kerberos.

Чтобы реализовать такой способ требуется заново скомпилировать систему CVS с поддержкой Kerberos; когда конфигурируется CVS, она пытается определить имеется ли Kerberos или вы можете использовать флаг -with-krb4, чтобы явно указать использование Kerberos в конфигурации.

По умолчанию, передаваемые данные не шифруются. Возможность шифрования должна быть указана во время трансляции как клиентской части, так и серверной. Следует использовать параметр -enable-encryption, чтобы включить шифрование. Вы должны также использовать глобальный параметр -x, чтобы запросить шифрование.

Для использования Kerberos вам необходимо добавить в файл inetd.conf на серверной стороне строку
cvs kserver
Клиент использует по умолчанию порт номер 1999. Если вы хотите использовать другой порт его следует определить в переменной окружения CVS_CLIENT_PORT на стороне клиента.

Когда вы хотите использовать CVS, вам обычно надо получить разрешение (ticket), которое позволит вам логироваться на сервер. Таким образом, вы может использовать команду
cvs -d :kserver:rsgi01.rhic.bnl.gov:/user/local/cvsroot checkout foo
Предыдущие версии CVS пытались бы использовать протокол rsh в случае не успеха обращения к Kerberos. Данная версия CVS не станет этого делать.

14.5.3 Несколько хранилищ

В некоторых ситуациях полезно иметь более, чем одно хранилище. Особенно это полезно, если вы имеете несколько групп разработчиков и/или несколько проектов, которые не имеют общих программ или частей программ. Если вы имеете несколько хранилищ, то, чтобы использовать нужное хранилище, вы должны задать его имя в переменной окружения $CVSROOT или указать в качестве аргумента в параметре -d при вызове программы cvs.

Большое преимущество использования нескольких хранилищ состоит в том, что хранилища могут находиться на разных серверах. Но, с другой стороны, вы не можете с помощью одной команды системы CVS обработать сразу несколько хранилищ (репозитариев).

Наконец, если вы планируете вести несколько проектов и планируете иметь несколько логически раздельных хранилищ, то технически проще завести одно хранилище с несколькими деревьями каталогов, каждое из которых соответствовало бы отдельному проекту.


next up previous contents
Next: 14.6 Версии файлов и Up: 14. CVS - система Previous: 14.4 Форма содержания данных
Andrei Chevel
Andrei.Chevel@pnpi.spb.ru


Banner.Novgorod.Ru