Встановлення CVS сервера.
Тарас Бродович aka skydion, 2004


Що таке CVS-сервер ╕ для чого його використовують розказувати не буду, думаю, ви сам╕ це зна╓те ;-)

1. Встановлення та налаштування пакету CVS.

Сама процедура встановлення пакету в систему ма╓ певн╕ в╕дм╕нност╕ в залежност╕ в╕д дистрибутиву який ви використову╓те. Тому цю частину пройдете сам╕ в╕домим вам методом та засобами :-)

Я використовую дистрибутив Gentoo тому для мене встановлення пакету cvs вигляда╓ наступним чином:

# emerge cvs

п╕сля чого, кл╕╓нт для роботи з CVS серверами готовий, але зовс╕м не готовий для роботи ваш власний CVS-сервер, який ви вир╕шили розташувати у сво╖й мереж╕.

Наступна ╕нформац╕я буде майже ╕дентичною для вс╕х ╕снуючих дистрибутив╕в, за винятком розташування вашого репозитор╕ю, тому дал╕ в текст╕ будемо вказувати шлях до CVS репозитор╕ю зм╕нною CVS_PATH яка в мо╓му випадку вказу╓ на каталог /var/cvsroot

Вс╕ входження зм╕нно╖ CVS_PATH в текст╕ зам╕н╕ть на реальний шлях до каталога в якому буде розташовано ваш репозитор╕й.

Перев╕ря╓мо чи ╓ в файл╕ /etc/passwd радок под╕бний на цей:

cvs:x:102:408:added by portage for cvs:CVS_PATH:/bin/false

це користувач в╕д ╕мен╕ якого будуть працювати користувач╕ CVS-сервера з репозитор╕╓м, та сам CVS-сервер. Також прев╕ря╓мо присутн╕сть в╕дпов╕дно╖ група в файл╕ /etc/group:

cvs:x:408

Якщо под╕бн╕ рядки присутн╕ в цих файлах, то ваш дистрибутив дба╓ про вас :-) якщо н╕ то "подякуйте" розробникам ╕ приступайте до створення в╕дпов╕дного користувача та групи сам╕ :-(

Права доступу до каталогу CVS_PATH повинн╕ бути:drwxr-xr-x, як╕ встановлюються командою:

chmod 755 CVS_PATH

також можете спробувати атрибути:drwxr-x---, як╕ встановлюються командою:

chmod 750 CVS_PATH

,це забезпечить кращу локальну захищен╕сть репозитор╕ю :-)

Власника репозитор╕ю встановлю╓мо командою: chown cvs:csv CVS_PATH

Для запуску CVS-серевера будемо використовувати xinetd який так само потр╕бно встановити в систему в╕домим вам шляхом.

Дал╕ в директор╕╖ /etc/xinetd.d перев╕ря╓мо (створю╓мо) наявн╕сть файлу cvspserver вм╕ст якого подано нижче:

service cvspserver
{
disable = no
socket_type = stream
wait = no
user = cvs
group = cvs
log_type = FILE /var/log/cvspserver
protocol = tcp
env = HOME=CVS_PATH
log_on_failure += USERID
port = 2401
server = /usr/bin/cvs
server_args = -f --allow-root=CVS_PATH pserver
}


Тепер зроб╕ть так, щоб сервер xinetd запускався при старт╕ системи. Також перев╕рте основний конф╕гурац╕йний файл /etc/xinetd.conf, чи сервер xinetd "слуха╓" зовн╕шн╕ адреси, а не прив"язаний до внутр╕шн╕х адрес вашо╖ мереж╕. В╕дкорегуйте налаштування iptables на предмет в╕дкриття доступу до вашого CVS-сервера який повинен "слухати" порт - 2401.

П╕сля вс╕х цих д╕й ви можете ╕н╕ц╕ал╕зувати репозитор╕й вашого майбутнього CVS-сервера в якому будуть збер╕гатися вс╕ ваш╕ проекти, командою:

# cvs -d CVS_PATH init

п╕сля чого в каталоз╕ CVS_PATH буде створено новий каталог CVSROOT, який буде м╕стити системн╕ файли для роботи вашого CVS-сервера.

2. Конф╕гурац╕я доступу до CVS-сервера.

CVS-сервер який не дозволя╓ працювати на ньому користувачам, н╕якого сенсу нема╓, отже наступний крок - налаштування прав доступу користувач╕в до вашого CVS-сервера.

2.1. Створення користувач╕в.

Для того щоб надати користувачам доступ до вашого CVS-сервер потр╕бно ╖х заре╓струвати в файл╕ CVS_PATH/CVSROOT/passwd

формат цього файлу такий:
USERNAME:ENCRYPTED_PASSWORD:SYSTEM_USERNAME

, де

USERNAME - лог╕н користувача п╕д яким в╕н буде заходити на ваш CVS-сервер
ENCRYPTED_PASSWORD - зашифрований пароль користувача (як його створити читайте дал╕)
SYSTEM_USERNAME - системний лог╕н п╕д яким в╕ртуальний користувач CVS-сервера буде працювати з репозитор╕╓м вашого CVS-сервера

Приклад мого файлу CVS_PATH/CVSROOT/passwd:

anonymous:ptzicv7OO99kc:cvs
skydion:kKd8LrgIO16hk:cvs

Як бачите вс╕ користувач╕ вашого CVS-сервера будуть працювати в╕д ╕мен╕ реального користувача - cvs якого ми створили (чи дистрибутив створив за нас) на самому початку встановлення пакету cvs.

2.2. Як створюються шифрован╕ парол╕ для файлу CVS_PATH/CVSROOT/passwd?

Вс╕ парол╕ шифруються методом DES з допомогою системно╖ функц╕╖ crypt(). Для полегшення створення таких парол╕в використа╓мо наступний perl-скрипт cvs_passwd

#!/usr/bin/perl

srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $login = shift;

if ($login ne "anonymous") {
  my $plaintext = shift;
} else {
  my $plaintext = "";
}

my $crypttext = crypt ($plaintext, $salt);

print STDOUT "   login: ${login}\n";
print STDOUT "password: ${plaintext}\n";

print STDERR "${login}:${crypttext}:cvs\n"

Використову╓мо для вс╕х користувач╕в кр╕м anonymous таким чином:
# cvs_passwd skydion passwd_for_skydion 2 >> CVS_PATH/CVSROOT/passwd

для користувача anonymous використову╓мо так:
# cvs_passwd anonymous 2 >> CVS_PATH/CVSROOT/passwd

параметри для скрипта:
skydion - лог╕н який використову╓ться для заходження на ваш CVS-сервер
passwd_for_skydion - пароль який повинен вводити користувач при входженн╕ на ваш CVS-сервер

результат роботи скрипа:
Лог╕н та пароль в текстовому формат╕ виводяться в stdout, цю ╕нформац╕ю ви повинн╕ передати заре╓строваним користувачам вашого CVS-сервера.

В пот╕к stderr виводиться ╕нформац╕я в формат╕ файлу CVS_PATH/CVSROOT/passwd Цей пот╕к можна перенаправити в╕дразу в файл passwd - це зроблено в приклад╕.

Для користувача anonymous по замовчуванню потр╕бно використовувати пустий пароль - це зроблено самим скриптом :-)

2.3. Розпод╕лення доступу для користувач╕в CVS-сервера.

Б╕льшу частину роботи ми вже зробили. Тепер наста╓ черга для розд╕лення прав доступу до Вашого CVS-сервера.

Права доступу розд╕ляються на дв╕ категор╕╖:
* т╕льки для читання
* читання ╕ запис

Для реал╕зац╕╖ таких можливостей створю╓мо два файли:
# > CVS_PATH/CVSROOT/readers
# > CVS_PATH/CVSROOT/writers

Думаю з назви цих файл╕в б╕льш менш ясно за що вони в╕дпов╕дають :-)

Вм╕ст мого файлу readers:
anonymous

тобто користувач anonymous зможе лише читати файли з репозитор╕ю вашого CVS-сервера, але не зможе завантажувати зм╕нен╕ ним файли назад на сервер.

Вм╕ст мого файлу writers:
skydion
test

ц╕ два користувач╕ мають повний доступ (читання та запис) в репозитор╕й мого тестового CVS-сервера, у вас будуть ╕нш╕ лог╕ни для користувач╕в.

Якщо лог╕н користувача розташований в обох файлах одночасно, то CVS-сервер в╕дносить такого користувача до першо╖ категор╕╖ (тобто в╕н ма╓ право лише читати дан╕ з вашого CVS-серевера)

3. Тестування встановленого CVS-сервера.

Для тестування вашого нового CVS-сервера створ╕ть якусь директор╕ю для прикладу qcad ╕ в н╕й теж створ╕ть пару п╕ддиректор╕й та к╕лька р╕зних файл╕в. Перев╕рте чи запущений сервер xinetd, п╕сля чого виконайте команди:

# cd ~/qcad
# cvs -d :pserver:skydion@localhost:CVS_PATH login
Password: введ╕ть пароль для лог╕на skydion -> passwd_for_skydion
# cvs import -m "import new source code" qcad skydion start

п╕сля цих команд в директор╕╖ CVS_PATH буде створена нова директор╕я з назвою qcad.

Тепер можете стерти тестову директор╕ю ~/qcad ╕ виконати наступну команду:
# cvs checkout qcad

Ця команда створить в активн╕й директор╕ю коп╕ю проекту розташованого на вашому CVS-сервер╕.

Якщо вс╕ ц╕ команди в╕дпрацювали на ура, то можу вас прив╕тати з власним CVS-сервером ;-)

Ну от, н╕би ╕ все :-)
Пиш╕ть сво╖ зауваження за адресою: skydion.at.ukr.net