SVN под FreeBSD

September 29th, 2008 Leave a comment Go to comments

Ползата от version-control е ясна и няма да говоря за нея тук. Целта на това how-to е как за 5-10 минути да setup-нем SVN под FreeBSD.

Да спомена преди стъпките на каква система ще го правя. OS: FreeBSD 7.1 Prerelease с ъпдейтнати до current портове.

1. Къде се намира директорията в порт-дървото, която ни трябва: /usr/ports/devel/subversion. В момента версията на svn-а е 1.5.2

2. Как да се инсталира. Тук има различни подходи, избрах да не използвам Berckley DB, ами да разчитам на файловата система. Просто BDB в случая не ми трябва, файловата система има доста по-oпростена структура, дори и в този случай е с по-голямо бързодействие (поне такива са статистиките). Още един от параметрите, който ще използвам е за wrap-ване на SVN user-a. Става въпрос за променя стандартният umask на изпълнимите файлове от 022 на 002. Крайният резултат е make -DWITH_SVNSERVE_WRAPPER -DWITHOUT_BDB install clean.

3. До тук добре – инсталирано е, сега трябва да се сетнат малко променливи. Отваряме /etc/rc.conf и вътре слагаме:

  1. svnserve_enable=”YES”
  2. svnserve_flags=”-d –listen-port=3690″
  3. svnserve_data=”/reps”
  4. svnserve_user=”svn”
  5. svnserve_group=”svn”

Ето и кой параметър какво представлява:

  1. Да се стартира при стартиране на системата
  2. Да запали в deamon-mode и да слуша на порт 3690 (това е стандартния порт за svn)
  3. Къде е хранилището (при мен svn-ът е пуснат във jail, който използва mount-ната от хост-системата директория. По-важното е да се знае как да се направи директория за repository-тата – mkdir /reps; chown svn:svn /reps)
  4. и 5. Потребител и парола под които да се стартира subversion и да се достъпват съхранените файлове по файлвата система.

4. Стартирането на SVN-a се състои в две стъпки – първо трябва да копираме един бинарен файл: cp /usr/local/bin/svnserve.bin /usr/local/bin/svnserve – без тази стъпка потребителите няма да могат да достъпват хранилищата. И после – самото стартиране: /usr/local/etc/rc.d/svnserve start.

5. Следва създаването на първото хранилище – логваме се като svn user: su – svn. Отиваме в /reps и използваме svnadmin за създаване на първото хранилище: svnadmin create <rep-name>, където <rep_name> е произволно име на хранилище. Нека кажем, че ще използваме за име test-rep.

6. Конфигуриране на хранилището – единственото което трябва да се направи е да забием на ръка потребител и парола. В току-що създаденото хранилище ни интересува съдържанието на директорията conf: authz, passwd и svnserve.conf. Започвам с authz – тук се описва кой потребител какви права има. Най-елементарното е да дадем на измислен от нас потребител пълни права. Нужни са два реда. Първият е “[/]” – главната директория на repository-то, а вторият – “test-rep-admin = rw“, където test-rep-admin е името на потребителя, а rw са read/write права (без кавичките и на първия, и на втория ред). Следва passwd файла – също 2 реда. Първи: “[users]“, a вторият – “test-rep-admin = mega-secret” (без кавичките отново). Тук първият ред означава, че даваме права за потребители, а не за групи, а вторият – кой потребител каква парола има (в plain-text). Третият файл – svnserve.conf. Тук редовете са малко повече, но също така елементарна конфигурация (без кавички). Първи ред: “[general]“, втори ред: “anon-access = none“, трети: “passwd-db = passwd“, четвърти: “authz-db = authz“, пети: “realm = This is just a test repository“. Тук само последният ред е интересен – става въпрос за разпознаване на хранилищата. Всяко хранилище (нормално) има раличен realm. Благодарение на това име хранилищата могат да разпознават кои auths и passwd файлове да използват, svn-клиентът кешира правилно и т.н. Още нещо – при искане на User/password обикновено се изписва това име и по този начин потребителят може да е сигурен къде се логва.

6. Тестване дали хранилището работи (в моя случай от windows-ка машина, извън вътрешната мрежа, като за целта ще използвам tortoise svn за клиент) – създаваме една нова директория някъде (не говоря в момента как се използва клиента) и стигаме до момента, в който трябва да въведем URL. Взимаме домейна (или IP-то) на FreeBSD машината и адресът се образува по следня начин svn://<domain/ip>/test-rep. Например в моя случай трябва да въведа svn://adilov.net/test-rep. Потребител/парола взимам от горе-споменатите (test-rep-admin:mega-secret)

7. Вече можем да си sync-ваме :)

Нещо интересно, което пропуснах да спомена. Да вземем за пример пак test-rep хранлището. Ако в /reps създам директория examples, в нея друга – tmp и чак тогава изпълня стъпките за създаване на repository, URL-ът се променя спрямо пътя във файловата система и ще стане svn://<domain/ip>/examples/tmp/test-rep. По този начин много лесно могат да бъде създадена един вид йерархия.

  1. Ventsi
    March 29th, 2009 at 17:21 | #1

    Супер, много ми помогна, само една поправка:
    svnserve_enabled=”YES” трябва да е svnserve_enable=”YES” без d-то ;) Иначе по това How-to подкарах Svn-a :)

  2. March 29th, 2009 at 17:29 | #2

    Мерси, значи все пак понякога копи-пейст трябва да се използва :P

  1. No trackbacks yet.