Статьи по меткам ‘apache2’

Как я поднимал SVN

Март 29th, 2009

Собственно, данный пост я решил написать после ночных бдений с SVN. Да, у меня были проблемы, которые пришлось решить, возможно, нестандартными методами, но зато теперь всё работает так, как я хотел.

Управление репозиторием

Итак, для всего этого нам нужнен сам Apache (я использовал Apache 2) и дополнительные модули: dav и dav_svn.

Помимо этого, я ещё поставил просматривалку репозитория ViewVC, с которой потом долго и провозился.

Для того, чтобы заставить работать subversion через http, достаточно сделать следующее (делал в OpenSUSE 10.3):
Сначала включаем модули при помощи a2enmod:


a2enmod dav
a2enmod dav_svn

Теперь можно перезагрузить конфигу апача (либо через restart, либо через reload):


/etc/init.d/apache2 restart

или


/etc/init.d/apache2 reload

После этого необходимо сконфигурировать виртуальный хост. Лично я хотел, чтобы у меня SVN-репозиторий был как отдельный поддомен в домене xskernel.org — то есть, svn.xskernel.org.

Для этого заводим отдельный виртуальный хост в апаче:


<VirtualHost *:80>
    ServerName svn.xskernel.org
    ErrorLog    /var/log/apache2/svn-error.log
    TransferLog /var/log/apache2/svn-access.log

    <Location /svn >
      DAV svn
      SVNPath /home/svn/repositories/svn.xskernel.org
      SVNListParentPath on
      AuthType Basic
      AuthName "XSystem Kernel Team repository"
      AuthBasicProvider file
      AuthUserFile /home/svn/auth/svn.xskernel.org.htpasswd
      SetOutputFilter DEFLATE

      <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
      </LimitExcept>
    </Location>

</VirtualHost>

Как видно, здесь в конфиге заводится локейшн /svn, который используется для работы DAV. Именно DAV позволяет полноценно работать с репозиторием через http.

Рассмотрим некоторые параметры:
SVNPath задаёт каталог, в котором располагается репозиторий, который будет ассоциирован с данным виртуальным хостом. Естественно, сам SVNRoot я спрятал (не стал использовать SVNRootPath).
AuthUserFile — файл, в котором будут в дальнейшем храниться пользователи и хэши их паролей, которым будет разрешён доступ в SVN.
LimitExcept накладывает ограничения на все команды кроме GET, PROPFIND, OPTIONS и REPORT, требуя авторизации (Require valid-user).

Отлично, теперь нужно завести соответствующий репозиторий. Я решил хранить все репозитории в отдельном каталоге /home/svn/repositories, поэтому создал репозиторий таким образом:


mkdir -p /home/svn/repositories
svnadmin create /home/svn/repositories/svn.xskernel.org

Отлично, теперь репозиторий есть, надо сделать авторизацию. Для этого создаю файл паролей и завожу в нём пользователя:


mkdir -p /home/svn/auth
touch /home/svn/auth/svn.xskernel.org.htpasswd
htpasswd2 /home/svn/auth/svn.xskernel.org.htpasswd username

Теперь апачу нужно дать права на пользование репозиторием и файлами паролей, для чего присваиваю всем файлам пользователя, под которым работает апач:


chown -Rv webserver:web /home/svn

Сохраняем конфигурационный файл виртуальных хостов апача, перезагружаем конфигурацию по reload, и пробуем зайти по адресу http://svn.xskernel.org/svn/. WebDAV работает!

Просматривание репозитория

Вот с просматривалкой у меня и возникло много проблем. Хотелось, чтобы при заходе на http://svn.xskernel.org/ автоматически запускалась просматривалка, при этом она отображала бы только тот репозиторий, который ассоциирован с данным виртуальным хостом. Я перепробовал много различных вариантов и, в конце-концов, остановился на том, что изложу ниже.

WebDAV я поставил штатными средствами OpenSUSE — из репозитория, после чего забрал его из /srv/www и переместил в каталог /home/svn.
Для своего виртуального хоста завёл отдельную конфигу /home/svn/viewvc-svn.xskernel.org.conf, в которой прописал следующие параметры:


# Доступные репозитории для просмотра
svn_roots:
        svn.xskernel.org : /home/svn/repositories/svn.xskernel.org
# Репозиторий, который следует просматривать по умолчанию
default_root = svn.xskernel.org
# Адрес обратной связи
address = team@xskernel.org
# Не использовать корень как компонент URL (то есть, не отображаются остальные репозитории в корне)
root_as_url_component = 0
# Путь к файлам с шаблонами отображения веб-страницы
template_dir = /home/svn/viewvc/svn.xskernel.org/templates
# компонент URL, по которому будут располагаться ресурсы для просматривалки (картинки и пр.)
docroot = /viewvc-docroot

Теперь заводим скрипт, который цепляет эту конфигу, копируя стандартный:


cp /home/svn/bin/cgi/viewvc.cgi /home/svn/bin/cgi/viewvc-svn.xskernel.org.cgi

И редактируем строки, прописывая:


LIBRARY_DIR = r"/home/svn/lib"
CONF_PATHNAME = r"/home/svn/viewvc-svn.xskernel.org.conf"

Теперь скрипт /home/svn/bin/cgi/viewvc-svn.xskernel.org.cgi хватает конфигу /home/svn/viewvc-svn.xskernel.org.conf.
После всего этого заводим свои темплейты для ViewVC:


mkdir -p /home/svn/viewvc/svn.xskernel.org
cp -R /home/svn/templates /home/svn/viewvc/svn.xskernel.org
cp -R /home/svn/templates/docroot /home/svn/viewvc/svn.xskernel.org/viewvc-docroot

Прикручивание ViewVC к апачу

Теперь надо в каталоге /home/svn/viewvc/svn.xskernel.org завести файл index.html, который редиректит на подкаталог "/viewvc":



<pre>
<html><head><META HTTP-EQUIV="Refresh" CONTENT="0; URL=/viewvc"><head>
<body></body>
</html>
</pre>

Сделано это так потому, что если сам Апач осуществит редирект, SVN-клиент начнёт ругаться, что не может выполнить PROPFIND при импорте репозитория (проверено уже часовыми бдениями над mod_rewrie).

Прописываем ViewVC в конфиге виртуального хоста:


<VirtualHost *:80>
    #...
    ScriptAlias /viewvc "/home/svn/bin/cgi/viewvc-svn.xskernel.org.cgi"
    Alias / /home/svn/viewvc/svn.xskernel.org/

    <Directory /home/svn/viewvc/svn.xskernel.org/ >
        Order allow,deny
        Allow from all
        DirectoryIndex index.html
    </Directory>
</VirtualHost>

Параметр ScriptAlias указывает, какой скрипт следует запускать, когда URL содержит "/viewvc".

Перезагружаем конфигу апача, пробуем: http://svn.xskernel.org/.
Грузится страничка index.html, которая автоматом нас редиректит на http://svn.xskernel.org/viewvc/ и запускается скрипт /home/svn/bin/cgi/viewvc-svn.xskernel.org.cgi .

Заключение

Как видно, не всё так красиво в моей настройке, как хотелось бы. Если есть соображения/советы, как сделать лучше, то я их внимательно выслушаю.

Тем не менее, репозиторий ОС XSystem переехал с SourceForge.net ко мне на домашний сервер. Работает на порядок быстрее, чем тормозной сервис от SourceForge.net. Однако, от SF.net я не стал отказываться, а сделал его зеркалом моего репозитория. Как — в следующем посте.

Статистика.

Январь 11th, 2009

Стремление товарища mar1ner  наблюдать за поисковыми запросами также сподвигло меня на идею написания скрипта, который составлял бы суточную статистику переходов по поисковым запросам на мой сервер. Скрипт запускается в час ночи по локальному времени (cron) и собирает информацию за прошедшие сутки. Запуск в час ночи сделал с поправкой на переход с летнего времени на зимнее и обратно ;) , на всякий пожарный.

Собственно, сам скрипт выглядит так:
Пара страничек кода…