Понадобился мне как-то svn сервер, да ещё и с возможностью просматривать содержимое репозиториев в самом обыкновенном браузере, Без каких-то там ssl и прочей приблуды. "Прогуглив" тонну статей таки поставил сервер... После 2х дней колупаний, решил накатать статью, может кому пригодится :) Итак, имеем: FreeBSD 6.3-RELEASEЗадачи: Система контроля версий ( Subversion ) Доступ к репозиториям по http протоколу ( Apache ) Красивая "web морда" для репозиториев. ( Я использую Trac , о чём и тут напишу, а так "морд" полно :) )Установка: Ставим mysql Для хранения правил, груп, и логов Trac `a будем использовать базы mysql. Всё-таки рекомендую устанавливать mysql самым первым из списка, ибо он есть в зависимостях у Апача, А моло ли что вам захочется установить из опций у индейца :))) Очень не плохую статью по mysql`у написал Lissyara, ознакомиться с ней можно тут: http://www.lissyara.su/?id=1189 Единственное отличее - я юзаю старенькую 4.1 )) Ну не люблю я 5ю версию :) Посему мои 5 копеек:Всё это делать не обязательно и, если mysql уже есть в системе, вполне можно использовать имеющуюся версию. Проверяем, есть ли mysql в системе,$ pkg_info | grep mysql и если есть, то сносим его$ cd /usr/ports/databases/mysqlXX -client && make deinstall $ cd /usr/ports/databases/mysqlXX -server && make deinstall $ cd /usr/ports/databases/mysql41-server (Т.к. я не помню, с чем ставил mysql (давно было), я взял все параметры из статьи Лиса) $ make WITH_CHARSET=cp1251 WITH_COLLATION=cp1251_bin \ WITH_LINUXTHREADS=yes BUILD_OPTIMIZED=yes \ BUILD_STATIC=yes WITHOUT_INNODB=yes \ && make install clean Ставим Apache 2.2.8 Я ставил индейца 2.2, но думаю что это не принципиально :) на момент установки, в портах была версия 2.2.8$ cd /usr/ports/www/apache22 $ make config
[X] BDB Enable BerkeleyDB dbm
[X] DAV Enable mod_dav
[X] DAV_FS Enable mod_dav_fs
$ make install clean Собираем python 2.5 Python нужен для работы Trac системы. Проверяем, установлен ли уже питон:$ pkg_info | grep python Если ответ положительный, что более чем вероятно (в списке появится что-то типа: python ХХ-х.х.х), То просто пропускаем этот шаг, если же питон не установлен, то:$ cd /usr/ports/lang/python25 $ make config
Убираем пункты:
[ ] THREADS Enable thread support
[ ] IPV6 Enable IPv6 support
$ make install clean Ставим Subversion 1.4.6 Ставилась версия 1.4.6_1$ cd /usr/ports/devel/subversion $ make config
[X] PYTHON Python bindings
[X] MOD_DAV_SVN mod_dav_svn module for Apache 2 .X
$ make install clean Установка Trac 0.10 На момент установки в портах была версия 0.10.4_1$ cd /usr/ports/www/trac $ make config
[X] SUBVERSION Support for subversion RCS
$ make install clean Ставим mod_python Для корректной работы Trac, нужна поддержка индейцем языка python.$ cd /usr/ports/www/mod_python3 $ make install clean Ставим mysql-python Нужен для того, чтобы mysql научился понимать то, что толкает ему питон, а в нашем случае это делает Trac :)$ cd /usr/ports/databases/py-MySQLdb $ make install clean Итак, с установкой закончили. Я не стал расписывать какая опция для каких целей указывалась, Но ничего лишнего здесь нет, все они необходимы для нормальной функциональности :) Если будет интересно что и для чего - можно поискать в гугле, или спросить в этой теме :) Ну а пока - продолжим-с :) Теперь всю эту громадину необходимо отконфигурировать...Конфигурирование: Конфигурируем Apache 2.2 $ edit /usr/local/etc/apache22/httpd.conf Обычно, при сборке Subversion модули в конфиг добавляются сами, если вдруг этого не произошло, то добавляем:
LoadModule dav_svn_module libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache22/mod_authz_svn.so
Добавляем подгрузку python_module:
LoadModule python_module libexec/apache22/mod_python.so
Конфигурируем начальные параметры:
ServerAdmin admin@domain.com # e-mail администратора :)
ServerName http://www.domain.com:80 # Адрес вашего сервера
DocumentRoot "/usr/local/www" # стартовая директория.
Находим первоначальный блок
<Directory />
AllowOverride None
Order deny ,allow
Deny from all
</Directory>
и заменяем его на
<Directory />
Options Includes Indexes FollowSymLinks
AllowOverride All
Allow from all
</Directory>
Удаляем первоначальный блок управления сайтом, который без коментов выглядит так:
<Directory "/usr/local/www/apache22/data">
Options Indexes FollowSymLinks
AllowOverride None
Order allow ,deny
Allow from all
</Directory>
Он нам не понадобится. ну и наконец убираем комментарии со следующих строк:
Include etc/apache22/extra/httpd-autoindex.conf
# Нужен для подгрузки некоторых стандартных директорий и алиасов.
Include etc/apache22/extra/httpd-vhosts.conf
# Управление виртуальными хостами :)
Include etc/apache22/extra/httpd-manual.conf
# Подгружает мануал по апачу, может пригодиться.
Include etc/apache22/extra/httpd-default.conf
# Несколько стандартных опций, которые не указаны в httpd.conf,
# но нужны для нормальной работы апача :)
Теперь самое главное - создаём свои "хосты" :) Вообще - просто мне так удобнее, когда репозиторий доступен не по domain.com/svn, а по svn.domain.com... Поэтому я пошёл путём разбивки на виртуальные хосты. Да и может позже пригодиться, когда понадобиться прикрутить на одну машину более одного сайта :) Итак:$ edit /usr/local/etc/apache22/extra/httpd-vhosts.conf Удаляем все приведённые там примеры хостов и создаём свои:
<VirtualHost *:80 >
ServerAdmin admin@domain.com
# e-mail админа сервера.
DocumentRoot "/usr/local/www/apache22/domain.com"
# Директория под страничку :)
ServerName domain.com
# имя адреса, к которому привязан данный хост.
ServerAlias www.domain.com
# Дополнительное имя, по которому будут на этот хост попадать.
ErrorLog "/usr/local/www/apache22/domain.com/error.log"
# Лог ошибок для данного хоста
CustomLog "/usr/local/www/apache22/domain.com/access.log" common
# Лог передаваемой информации для данного хоста.
</VirtualHost>
Создаём хост для нашего SVN`a
<VirtualHost *:80 >
DocumentRoot "/usr/local/www/apache22/"
ServerName svn.domain.com
ErrorLog "/usr/local/www/apache22/svn-error.log"
CustomLog "/usr/local/www/apache22/svn-access.log" common
#
# Это всё как и раньше, а вот тут сам блок для работы с SVN`ом.
#
<Location />
DAV svn
# говорит апачу какой модуль использовать для обработки информации.
SVNListParentPath on
# Разрешить просматривать корневой коталог
# В принципе - бессмысленная опция, т.к. не работает при включении
# анонимного доступа :)
SVNParentPath /usr/local/www/apache22/svn
# Корень SVN сервера, где будут храниться репозитории.
AuthType Basic
# Тип авторизации. basic - использовать авторизацию по htpasswd
AuthName "My SVN Server"
# Имя SVN сервера :) Будет отображаться в окне авторизации.
AuthUserFile /usr/local/www/apache22/svn/svn-passwd
# Фаил содержащий пароли для авторизации.
AuthzSVNAccessFile /usr/local/www/apache22/svn/svn-access
# Фаил с настройками прав доступа к репозиторию.
#
# Ниже приведён блок, с доступом на чтение для всех
# Для чтения авторизация не нужна, для записи
# - будет требоваться авторизация.
# Если нужно чтобы и для чтения проходили авторизацию,
# То заменить ВЕСЬ ниже следующий блок на Require valid-user
#
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
</VirtualHost>
Теперь создаём блок для нашей "web морды" к SVN`у
<VirtualHost *:80 >
DocumentRoot "/usr/local/www/apache22/trac/proj"
# Как и раньше - директория, где будет храниться трак :)
ServerName proj.domain.com
# Не забыли ещё, для чего это?)))
ErrorLog "/usr/local/www/apache22/trac/proj-error.log"
CustomLog "/usr/local/www/apache22/trac/proj-access.log" common
# Ничего нового :)
#
# А вот собственно настройка самого проекта :)
#
<Location />
SetHandler mod_python
# подключаемый модуль, для обработки информации.
PythonInterpreter main_interpreter
# Использовать основной питоновский интерпретатор.
PythonHandler trac.web.modpython_frontend
# Думаю из названия модуля понятно,
# что подрубить трак как веб страницу :)
PythonOption TracEnv /usr/local/www/apache22/trac/proj
# Путь к корню нашей мордашки :)
#
# Корневая директория
# Т.е. по запросу какой ссылки будет выдаваться морда трака.
# В нашем случае это proj.domain.com.
# Если вместо / дописать что-то типа /trac
# То трак откроется только по ссылке proj.domain.com/trac
#
PythonOption TracUriRoot /
</Location>
#
# Блок утпарвелия логинами для трака.
# В приведённом здесь примере trac будет использовать тот же фаил-базу,
# что и subversion
#
<Location /login>
AuthType Basic
# тип авторизации
AuthName "eA Rus Auth"
# заголовок окна авторизации
AuthUserFile /usr/local/www/free-source.org/svn/svn-passwd
# фаил-база, содержащий логины и пароли.
Require valid-user
# выдаёт вывод окна ввода логина и пароля.
</Location>
</VirtualHost>
Ну, думаю что Apache мы настроили :) Запускать его пока рановато, ибо будет много мата :) Но зато уже отконфигурен и можно про него на время забыть :)Конфигурируем mysql Ну думаю, что конфигурацию mysql`а можно взять как-раз таки из статьи Лиса, едиснтвенное - нам нужно создать свою базу и юзера для неё.$ mysql -uroot -p mysql> CREATE DATABASE trac DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; mysql> GRANT ALL PRIVILEGES ON trac.* TO trac@localhost IDENTIFIED BY 'указать_пароль'; Ну и всё собстно :)Создаём все необходимые директории. Ну для начала полистаем чуть выше и посмотрим, какие пути мы использовали. Вот их все необходимо создать :) А то ваш сервер вас такими словами обзывать будет :) И так:$ mkdir -p /usr/local/www/apache22/domain.com $ mkdir -p /usr/local/www/apache22/svn $ mkdir -p /usr/local/www/apache22/trac/proj $ cd /usr/local/www/apache22/svn $ mkdir myproject Теперь выдаём права на директории:$ chown -R www:www /usr/local/www С правами всё)Создаём репозиторий $ svnadmin create /usr/local/www/apache22/svn/myproject Теперь создаём фаил-базу с паролями для нашего репозитория.$ htpasswd -cm /usr/local/www/apache22/svn/svn-passwd admin
Здесь:
htpasswd - утилита Apache`a, для генерации нужных нам паролей.
-cm - ключи
ключ c - создать новый фаил, если уже есть - перезаписать.
ключ m - использовать md5.
admin - имя пользователя, для которого будет добавлена запись.
Для добавления новых пользователей используйте команду:$ htpasswd -m /usr/local/www/apache22/svn/svn-passwd user-name Создаём фаил с привелегиями пользователей для репозитория.$ edit /usr/local/www/apache22/svn/svn-access
[groups]
# Блок, содержащий группы.
devel = FenX, Admin, Tartos
# Группа devel и перечень пользователей в неё входящих.
trans = Jarek
# Группа занимающаяся переводами.
[/]
# Корень нашего SVN сервера
* = r
# Доступ для анонимов на чтение.
[myproject:/]
# директория проекта myproject
@devel = rw
# группе devel глобально разрешено чтение\запись
[myproject:/translate]
# директория translate в репозитероии myproject
@trans = rw
# группе trans разрешено чтение\запись.
[myproject:/development]
# директория разработчиков.
* =
# запрет для всех пользователей.
@devel = rw
#разрешён доступ на чтение\запись только группе девелоперов.
Ну с этим думаю всё :)Создаём trac проект $ trac-admin /usr/local/www/apache22/trac/proj initenv !!! Комментариями указаны опции, которые необходимо указывать !!!
Project Name [My Project]> # Указываем имя проекта.
# mysql://trac:ваш_пароль@localhost/trac
Database connection string [sqlite:db/trac.db]>
Repository type [svn]> # Оставить как есть :)
Path to repository [/path/to/repos]> # /usr/local/www/apache22/svn/myproject
Добавляем нашего админа:$ trac-admin /usr/local/www/apache22/trac/proj permission add admin TRAC_ADMIN После того, как репозиторий будет создан, можно отредактировать его фаил конфигов.$ edit /usr/local/www/apache22/trac/proj/conf/trac.ini редактировать можно по своему вкусу :) Там в основном мелочные настройки, основные мы уже сделали при создании проекта trac`a. Ну вот в принципе и всё. Проект полностью настроен. Теперь запускаем:$ /usr/local/etc/rc.d/apache22 start Если всё ок, то проверяем работает ли :) Заходим по ссылкам:_http://svn.domain.com/myproject Сверху должно быть что-то типа
А внизу
Powered by Subversion version 1 .4 .6 (r28521).
если это так, то всё гут :) теперь проверяем трак:_http://proj.domain.com Если открылся трак и даже без мата, то значит всё вообще гут :) Надеюсь что ничего не забыл. Ну и конечно комментарии приветствуются :)