понедельник, 30 марта 2009 г.

Использование WebDAV для доступа к Bazaar-серверу

При совместной работе группы разработчиков над проектом с использованием Bazaar практически всегда необходимо организовывать некоторое центральное хранилище (центральный сервер) для рабочих веток. Имеется несколько вариантов организации такого сервера, поскольку сам Bazaar поддерживает несколько транспортных протоколов для удаленной работы. Кратко рассмотрим имеющиеся варианты.

Варианты доступа к удаленному серверу

  • bzr:// — "умный" (smart) протокол Bazaar. Это наиболее функциональный и производительный протокол удаленного доступа, использующий встроенный в Bazaar сервер. К сожалению, на данный момент, не имеет возможности аутентифицировать пользователей и управлять доступом. По этим причинам не рекомендуется использовать его самостоятельно, а только в связке с SSH или HTTP/HTTPS:
    • bzr+ssh:// — использует bzr:// протокол через SSH-туннель. Совмещает функциональность и производительность протокола bzr:// с безопасностью протокола SSH. Наиболее часто используемый в среде Unix/Linux и наиболее часто рекомендуемый протокол удаленного доступа.
    • bzr+http:// — использует bzr:// протокол совместно с web-сервером Apache и модулем FastCGI или mod_python. Для авторизации пользователей используются механизмы, встроенные в Apache.
  • sftp:// — для доступа используется протокол SFTP, поддерживаемый большинством SSH серверов. Может быть хорошей альтернативой bzr+ssh://, например, в случае отсутствия на сервере Bazaar.
  • ftp://, aftp:// — доступ с использованием пассивного (и соотв. активного) режимов FTP. Позволяет давать доступ на запись, но имеет проблемы с безопасностью.
  • http://, https:// — доступ только для чтения с использованием протоколов HTTP и HTTPS. Хороший вариант если нужен только доступ на чтение.
Из всех рассмотренных выше протоколов только bzr:// (bzr+ssh:// bzr+http://) поддерживают работу с подключаемыми модулями или плагинами (plugins) Bazaar на сервере, т.к. используют встроенный в Bazaar сервер. Остальные же протоколы только предоставляют доступ локальному клиенту Bazaar к данным на удаленном сервере.

Зачем нужен доступ по протоколу WebDAV?

Достаточно часто встречается ситуация, когда для обеспечения политики безопасности, или по другим причинам, нет возможности использовать ни один из перечисленных выше протоколов. Такая ситуация может возникать в случае если нужен удаленный доступ на запись, но нельзя использовать SSH/SFTP, потому что необходимо создавать системные учетные записи. При этом FTP тоже отпадает, поскольку он считается недостаточно безопасным.
Именно для таких случаев был создан плагин для bzr, который позволяет организовать удаленный доступ по протоколу WebDAV.
WebDAV — это набор расширений для протокола HTTP, позволяющий пользователям совместное редактирование и управление файлами на удаленных WEB-серверах. Таким образом, он, как и HTTP/HTTPS, обеспечивает для Bazaar доступ к данным на удаленном сервере, но предоставляет при этом также и возможность их изменения. Одно из основных преимуществ использования WebDAV — это возможность использования стандартных средств HTTP-сервера для управления аутентификацией и доступом пользователей.
Для работы через WebDAV нам понадобится установить плагин на стороне клиента (на локальной машине) и настроить HTTP сервер (в нашем примере Apache) для работы с WebDAV.

Установка плагина WebDAV

Плагин WebDAV для Bazaar можно найти на сайте Launchpad: https://launchpad.net/bzr.webdav. Для получения плагина сделаем копию ветки с Launchpad и затем установим плагин.

Установка только для текущего пользователя

Наиболее просто установить плагин для текущего пользователя. На Unix/Linux системах плагины устанавливаются в каталог ~/.bazaar/plugins/ (на Windows используется каталог C:\Documents and Settings\USERNAME\Application Data\2.0\bazaar\plugins). Перейдите в каталог plugins и выполните команду branch:
$ cd ~/.bazaar/plugins/ $ bzr branch lp:bzr.webdav webdav Плагин будет установлен в подкаталог webdav.

Установка для всех пользователей

В данном случае модуль устанавливается в системной директории для поиска модулей bzrlib/plugins (на Unix системах это может быть /usr/lib/python2.5/site-packages/bzrlib/plugins/).
$ bzr branch lp:bzr.webdav $ cd bzr.webdav/ $ sudo python setup.py install

Проверка наличия плагина WebDAV

Для проверки наличия плагина необходимо использовать команду plugins. Эта команда выведет список всех установленных плагинов, их версий, и краткое описание каждого плагина. В этом списке должен присутствовать плагин webdav:
$ bzr plugins
...
webdav 1.12
  An http transport, using webdav to allow pushing.
...

Настройка сервера Apache

Теперь рассмотрим настройки HTTP сервера Apache. Прежде всего для Apache должен быть установлен модуль mod_dav. Конфигурация для этого модуля будет выглядеть приблизительно следующим образом:
<IfModule mod_dav.c>

  Alias /bzr /var/www/bzr

  <Directory /var/www/bzr>
    Dav On
    DirectorySlash Off
    DavDepthInfinity On

    AuthType Basic
    AuthName "Bazaar server"
    AuthUserFile /etc/apache2/dav.users
    Require valid-user
  </Directory>
</IfModule>
Рассмотрим настройки подробнее:
  • директива Alias устанавливает связь между путем в URL (/bzr) и каталогом /var/www/bzr, где будут хранится ветки;
  • опция Dav On включает WebDAV для /var/www/bzr;
  • опция DirectorySlash Off выключает перенаправление в случае если в конце URL для каталогов не указан '/'. (Такие перенаправления не очень хорошо работают с Bazaar);
  • опция DavDepthInfinity On включает обработку PROPFIND запросов с заголовком Depth: Infinity;
  • оставшиеся опции настраивают простую HTTP авторизацию;

Работа с сервером

После перезагрузки Apache вы сможете работать с удаленными ветками с помощью протокола http+webdav:// следующим образом: $ bzr branch http+webdav://user@a.site/bzr/branch Кроме использования HTTP можно настроить работу WebDAV и по протоколу HTTPS.

Сохранение пароля

Если вы используете на сервере авторизацию и не хотите каждый раз набирать пароль, то можно воспользоваться клиентским файлом конфигурации authentication.conf. Этот файл должен находится в каталоге с файлами конфигурации Bazaar (по умолчанию на Unix - ~/.bazaar). В файле для WebDAV должна быть следующая информация:
[myprojects] scheme = http host = host.com user = ivan password = secret Обратите внимание, что значение параметра scheme должно быть http для http+webdav:// и https для https+webdav://.
Один из минусов использования файла authentication.conf в том, что (на данный момент) пароли хранятся в виде простого текста.

Резюме

Подытоживая, можно сказать, что WebDAV может быть хорошей альтернативой для bzr+ssh://, в случае если вы не хотите создавать системные учетные записи для каждого пользователя и в то же время предоставлять более безопасный доступ (при использовании HTTPS) чем ftp://.

Комментариев нет:

Отправить комментарий