Настоящата публикация е свързана единствено с инсталирането и конфигурирането на Subversion. Няма да навлизам в подробности относно Subversion, какво представлява, как се използва и работи с тази, бих казал широко разпространена система за контрол на версиите. Повече за Subversion може да научите от „Version Control with Subversion“. Книгата е публикувана под Creative Commons лиценз, можете да изберете да я изтеглите заедно със Subversion, по време на инсталацията от ports.
С това всъщност трябва да започнем – инсталирането на subversion от ports системата на FreeBSD.
[root@myserver /usr/ports]# cd /usr/ports/devel/subversion
[root@myserver /usr/ports/devel/subversion]# make install clean
Тук всичко би трябвало да мине безпроблемо. Ще ми се да отбележа, че Subversion зависи от sqlite3, а той „отказва“ да се компилира с -ffast-math. За инсталирането на sqlite, временно махнах тази опция от /etc/make.conf и след това отново я върнах обратно. След като приключим с инсталацията, създаваме svn потребител и група.
[root@myserver /var]# adduser
Username: svn
Full name: SVN Repository
Uid (Leave empty for default):
Login group [svn]:
Login group is svn. Invite svn into other groups? []:
Login class [default]:
Shell (sh csh tcsh bash rbash nologin) [sh]: bash
Home directory [/home/svn]: /var/svn
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
adduser: INFO: Successfully added (svn) to the user database.
Home директорията, на този потребител всъщност е директорията, в която ще съхраняваме хранилищата. Аз избрах това да е /var/svn. Трябва да променим правата за достъп до тази директорията, така че всички от svn групата да имат пълен достъп до нея. Идеята е, всеки който принадлежи към svn групата, да има достъп до хранилищата.
[root@myserver /var]# chmod g+rwx svn
[root@myserver /var]# chmod o-rwx svn
drwxrwx— 2 svn svn 512 Nov 27 17:18 svn
Последно, трябва да променим и umask на svn потребителя. По подразбиране, той е 022. Ще го направим 007, така че групата да има пълен достъп до файловете. Понеже за shell избрахме bash, файлът в който трябва да направим това, ще бъде .bashrc. За целта, като svn потребител създаваме .bashrc и добавяме вътре „umask 0007″.
[root@myserver /var]# su svn
[svn@myserver /var]$ cd
[svn@myserver ~]$ touch .bashrc
Ето как би трябвало да изглежда .bashrc след тази промяна.
[svn@myserver ~]$ cat .bashrc
# Change umask
umask 0007
Трябва да добавим всички потребители, които искаме да достъпват хранилищата към svn групата, за целта редактираме /etc/group. Аз добавих само себе си към тази група. Ето как изглежда при мен реда със svn групата.
svn:*:1003:saiman
За да достъпвам по-лесно svn хранилищата, направих връзка от /svn към /var/svn.
[root@myserver /var]# ln -s /var/svn/ /svn
Последно, отново като svn потребител, създаваме хранилище.
[svn@myserver /svn]$ svnadmin create repo
За да се уверя, че всичко работи реших да се свържа към сървъра посредством ssh, изтегля хранилището и добавя един тестов файл.
saiman@mylaptop:/media/sda2/home/saiman/svnroot$ svn co svn+ssh://myserver.com/svn/repo
Checked out revision 0.
saiman@mylaptop:~/svnroot/repo$ svn add test.txt
A test.txt
saiman@mylaptop:~/svnroot/repo$ svn ci
Adding test.txt
Transmitting file data .svn: Commit failed (details follow):
svn: attempt to write a readonly database
svn: attempt to write a readonly database
svn: Your commit message was left in a temporary file:
svn: ‘/media/sda2/home/saiman/svnroot/repo/svn-commit.tmp’
Явно не работеше, така както очаквах. Оказа се, че repo/db/rep-cache.db, който се създава от svnadmin е без права за писане на групата. За да заработят нешата, трябва да променим правата на групата за този файл.
[svn@myserver /svn]$ chmod g+rwx repo/db/rep-cache.db
След тази последна намеса от наша страна, всичко би трябвало да заработи нормално.