Subversion apache trac
Установка и настройка 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 ;)