Що таке CVS-сервер і для чого його використовують розказувати не буду, думаю, ви самі це знаєте ;-)
Встановлення та налаштування пакету 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-сервера.
Конфігурація доступу до CVS-сервера
CVS-сервер який не дозволяє працювати на ньому користувачам, ніякого сенсу немає, отже наступний крок — налаштування прав доступу користувачів до вашого CVS-сервера.
Створення користувачів.
Для того щоб надати користувачам доступ до вашого 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.
Як створюються шифровані паролі для файлу 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 потрібно використовувати пустий пароль — це робиться самим скриптом.
Розподілення доступу для користувачів CVS-сервера.
Більшу частину роботи ми вже зробили. Тепер настає черга для розділення прав доступу до вашого CVS-сервера.
Права доступу розділяються на дві категорії:
- лише читання;
- читання і запис.
Для їх реалізації, створюємо два файли:
# : > CVS_PATH/CVSROOT/readers
# : > CVS_PATH/CVSROOT/writers
Думаю, з назви цих файлів більш менш ясно за що вони відповідають.
Вміст мого файлу readers:
anonymous
Тобто користувач anonymous зможе лише читати файли з репозиторію вашого CVS-сервера, але не зможе завантажувати змінені ним файли назад на сервер.
Вміст мого файлу writers:
skydion
test
Ці два користувачі мають повний доступ (читання та запис) в репозиторій мого тестового CVS-сервера, у вас будуть інші логіни для користувачів.
Якщо логін користувача розташований в обох файлах одночасно, то CVS-сервер відносить такого користувача до першої категорії (тобто він має право лише читати дані з вашого CVS-серевера).
Тестування встановленого 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