Subversion из исходников + apache и начало работы

Скорее шпаргалка для себя, но если будут вопросы - спрашивайте, попытаюсь ответить. Написана потому, что есть масса инструкций, как начать работу с svn, т.е. для пользователей-программеров, а вот как это выглядит с точки зрения админа - толстезные мануалы, в которых далеко не всегда то, что надо.
Итак, установка SVN в связке с httpd под linux

  • Убедитесь, что httpd собран с поддержкой dav:
    /usr/local/apache2/bin/httpd -l |grep dav
    У меня это
    mod_dav.c
    mod_dav_fs.c

    Если нет - –enable-dav-fs –enable-dav вам в помощь. Почему именно fs - не знаю, но работает. Если не компилируется - гляньте сюда

  • обновляем библиотеку neon. Если хотите - попробуйте пропустить этот шаг, но для меня оказалось обязательным.
    http://www.webdav.org/neon/neon-**.tar.gz
    ./configure --with-ssl=openssl
    make & make install

  • скачиваем http://subversion.tigris.org/downloads/subversion-**.tar.bz2, распаковываем, собираем:
    mkdir /etc/svn
    ./configure --sysconfdir=/etc/svn
    make & make install

    В процессе сборки в httpd.conf добавляются строки
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so

    если в результате ругается на
    Cannot load /etc/httpd/modules/mod_dav_svn.so into server:
    /etc/httpd/modules/mod_dav_svn.so: undefined symbol: dav_xml_get_cdata
    Это значит, что httpd у вас все-таки без dav.

  • groupadd svn
    usermod -a -G svn apache #apache в группу svn

    Поскольку мне изначально нужно несколько репозиториев - проще сконфигурировать apache так, чтоб делать это 1 раз.
    По некоторой аналогии с виртуальными хостами, клиенты будут обращаться к
    http://хост/svn/репозиторий/, где svn - общий для всех родитель.

    mkdir /путь/к/svn
    svnadmin create /путь/к/svn/репозиторий1
    chown -R apache:svn /путь/к/svn
    chmod -R g+ws /путь/к/svn
    htpasswd -c -m /etc/httpd/svn.htpasswd username # пароль на вход в svn

    В самый конец httpd.conf добавляем
    <Location /svn> # собственно, тот самый родитель
    DAV svn
    SVNParentPath /путь/к/svn
    AuthType Basic
    AuthName "SVN Repo"
    AuthUserFile /etc/httpd/svn.htpasswd
    Require valid-user
    </Location>

    дальше:
    service httpd configtest
    service httpd graceful

    пробуем http://хост/svn/репозиторий1
    У меня получилось
    репозиторий1 - Revision 0: /

  • первоначальная заливка:
    svn import /path/to/workdir/ http://хост/svn/репозиторий1 -m причина_импорта –username username
    пробуем http://хост/svn/репозиторий1 - должно все появиться.

  • Клиент:
    В качестве клиента взял TortoiseSVN, после установки не забудьте перезагрузиться, это действительно нужно для отображения иконок типа “обновлено/устарело”.
    мануал тут
    В удобном месте создаем папку, на ней из контекстного меню выбираем “Checkout” - все зальется к вам

  • Изменения:
    Если теперь изменить какой-то файл, то отправляем их в тот же репозиторий той же командой “Checkout”, но вот в рабочую копию изменения не перейдут.

  • теперь надо сделать так, чтоб из репозитория это все попало в “живой” каталог. Проще всего так:
    svn co http://хост/svn/репозиторий1 /srv/www/egw.kristar.ua/exim/ –username user –password pass
    Но каждый раз такое делать руками неудобно. Для автоматизации этого svn имеет так называемые “хуки”, которые по сути скрипты, запускаемые по неким событиям.

    cd /путь/к/svn/репозиторий1/hooks
    cp post-commit.tmpl post-commit
    chmod u+x post-commit
    chown apache post-commit # от имени того, кто обрабатывает этот репозиторий

    после чего в post-commit пишем ту самую сторчку, которую запускали руками, !только с полными путями!
    Если что-то не работает - запускаем скрипт от имени гордого индейца, то есть апача.
    Успехов!:)

    » » » » »

Оставить комментарий - Feel free to ask me in English

Он появится после того, как будет одобрен. - All comments are pre-moderated.

Внимание! Пожалуйста, не пишите в комментарии [url=... или [url]... - это будет считаться спамом. Если хотите дать ссылку - пишите просто адрес, до 2х на один коммент.
Attention! Please don't use "[url=..." or "[url]..." in comment's body or it will be deleted as spam
If you want to send me a link just type url, up to 2 urls in one comment.

Спасибо за отзыв! Thank you for a comment!