Встановлення CVS сервера

Матеріал з docs.linux.org.ua — збірника документації з Unix/Linux українською мовою.

Перейти до: навігація, пошук

Що таке 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

Особисті інструменти