Subversion apache trac

Материал из wiki.lissyara.su
Перейти к: навигация, поиск

Установка и настройка SVN сервера с доступом к репозиториям по http протоколу.

Оригинал статьи тут: http://www.lissyara.su/?id=1669

Понадобился мне как-то svn сервер,
да ещё и с возможностью просматривать содержимое репозиториев
в самом обыкновенном браузере,
Без каких-то там ssl и прочей приблуды.
"Прогуглив" тонну статей таки поставил сервер...
После 2х дней колупаний, решил накатать статью, может кому пригодится :)

Итак, имеем:

$ uname -r
7.0-RELEASE-p6


Задачи:
Система контроля версий ( Subversion )
Доступ к репозиториям по http протоколу ( Apache )
Красивая "web морда" для репозиториев.
( Я использую Trac, о чём и тут напишу, а так "морд" полно :) )

Установка:

Ставим mysql
Для хранения правил, груп, и логов Trac`a будем использовать базы mysql.
Всё-таки рекомендую устанавливать mysql самым первым из списка, по разного рода соображениям :)

Очень не плохую статью по mysql`у написал Lissyara,
рекомендую с ней ознакомиться http://www.lissyara.su/?id=1189

Для тех, кому лень читать - краткий курс молодого бойца:
Всё это делать не обязательно и, если mysql уже есть в системе, вполне можно использовать имеющуюся версию.

$ pkg_info | grep mysql

и если есть, то данный шаг пропускаем, иначе:

$ cd /usr/ports/databases/mysql50-server
$ make WITH_CHARSET=cp1251 WITH_COLLATION=cp1251_bin \
BUILD_OPTIMIZED=yes BUILD_STATIC=yes \
&& make install clean


Ставим apache httpd server
Я ставил индейца 2.2, но думаю что это не принципиально :)
на момент установки, в портах была версия 2.2.9

$ cd /usr/ports/www/apache22
$ make config


[X] THREADS               Enable threads support in APR 
[X] BDB                   Enable BerkeleyDB dbm
[X] SVN                   Enable Subversion support
[X] DAV                   Enable mod_dav
[X] DAV_FS                Enable mod_dav_fs


$ make install clean


Собираем python
Python нужен для работы Trac системы.
Проверяем, установлен ли уже питон:

$ pkg_info | grep python

Если ответ положительный, что более чем вероятно (в списке появится что-то типа: pythonХХ-х.х.х),
То просто пропускаем этот шаг, если же питон не установлен, то:

$ cd /usr/ports/lang/python25
$ make config


Убираем пункты:

[ ] IPV6             Enable IPv6 support


$ make install clean


Ставим subversion
Для версии 1.5.4_2

$ cd /usr/ports/devel/subversion
$ make config


[X] MOD_DAV_SVN       mod_dav_svn module for Apache 2.X
[X] NEON              WebDAV/Delta-V repo access module (neon)
[X] BDB               db4 repository backend


$ cd ../py-subversion
$ make install clean


Установка trac
На момент установки в портах была версия 0.11.2

$ cd /usr/ports/www/trac

(все опции оставил по дефолту)

$ 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


Конфигурируем начальные параметры:

# e-mail администратора :)
ServerAdmin admin@domain.com
# Адрес вашего сервера
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
# Несколько стандартных опций, которые не указаны в httpd.conf,
# но нужны для нормальной работы апача :)
Include etc/apache22/extra/httpd-default.conf


Теперь самое главное - создаём свои "хосты" :)
Вообще - просто мне так удобнее,
когда репозиторий доступен не по domain.com/svn, а по svn.domain.com...
Поэтому я пошёл путём разбивки на виртуальные хосты.
Да и может позже пригодиться,
когда понадобиться прикрутить на одну машину более одного сайта :)

Итак:

$ edit /usr/local/etc/apache22/extra/httpd-vhosts.conf

Удаляем все приведённые там примеры хостов и создаём свои:

<VirtualHost *:80>
    # e-mail админа сервера.
    ServerAdmin admin@domain.com
    # корень хоста.
    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
    # это связано с тем, что svn сервер будет искать корень репозитория
    # по пути от корня, указанного в этой дерективе.
    # и дабы в последствии избежать ошибок её можно убрать)
    # если же svn сервер будет не корнем хоста,
    # то корень svn`а должен располагаться на уровень ниже от DocumentRoot пути.
    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
        # корень SVN сервера, где будут храниться репозитории.
        SVNParentPath /usr/local/www/apache22/svn
        # тип авторизации. basic - использовать авторизацию по htpasswd
        AuthType Basic
        # сообщение в окне авторизации :)
        AuthName "My SVN Server"
        # фаил содержащий пароли для авторизации.
        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 и перечень пользователей в неё входящих.
devel = FenX, Admin, Tartos
# группа занимающаяся переводами.
trans = Jarek
# корень нашего SVN сервера
[/]
# доступ для анонимов на чтение.
* = r
# директория проекта myproject
[myproject:/]
# группе devel глобально разрешено чтение\запись
@devel = rw
# директория translate в репозитероии myproject
[myproject:/translate]
# группе trans разрешено чтение\запись.
@trans = rw
# директория разработчиков.
[myproject:/development]
# запрет для всех пользователей.
* = 
# разрешён доступ на чтение\запись только группе девелоперов.
@devel = rw


Ну с этим думаю всё :)

Создаём trac проект

$ trac-admin /usr/local/www/apache22/trac/proj initenv

!!! Комментариями указаны опции, которые необходимо указывать !!!

# указываем имя проекта. ex.: My SVN Project
Project Name [My Project]>
# mysql://trac:ваш_пароль@localhost/trac
Database connection string [sqlite:db/trac.db]>
# оставить как есть, т.е. просто тыкаем enter :)
Repository type [svn]>
# путь до корня репозитория. ex.: /usr/local/www/apache22/svn/myproject
Path to repository [/path/to/repos]>


Добавляем нашего админа:

$ 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.

Ну вот в принципе и всё.
Проект полностью настроен.

Теперь запускаем:

$ echo 'apache22_enable="YES"' >> /etc/rc.conf
$ /usr/local/etc/rc.d/apache22 start

Если всё ок, то проверяем работает ли :)

$ ps axw | grep httpd
  580  ??  Ss     0:02,64 /usr/local/sbin/httpd -DNOHTTPACCEPT
 3489  ??  I      0:00,03 /usr/local/sbin/httpd -DNOHTTPACCEPT
.....
 3534  ??  I      0:00,02 /usr/local/sbin/httpd -DNOHTTPACCEPT


Если и у вас так же, то заходим по ссылке:
http://svn.domain.com/myproject
Сверху должно быть что-то типа

Revision 0: /


А внизу

Powered by Subversion version 1.5.1 (r32289).


если это так, то всё гут :)

теперь проверяем трак:
http://proj.domain.com
Если открылся трак и даже без мата, то значит всё вообще гут :)

Enjoy ;)