Включение доступа к Subversion через веб-сервер Apache и DAV в Ubuntu

У меня есть Ubuntu 20, работающая на ПК в моей домашней сети, которую я хочу использовать в качестве сервера Subversion в моем доме в моей локальной сети. У меня установлен веб-сервер Apache, а также установлена ​​Subversion, и теперь я хочу добавить доступ через веб-сервер Apache с использованием протокола HTTP DAV.

Я намерен использовать Visual Studio с подключаемым модулем Ankh на ПК с Windows с Subversion на сервере Ubuntu для хранения моего репозитория исходного кода.

Каков текущий способ изменения конфигурации Apache, чтобы разрешить доступ к Subversion через HTTP? Направления, которые я нашел до сих пор, кажутся немного малоинформативными, представляя собой не более чем серию команд для использования, и по какой-то причине они кажутся устаревшими.

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

  • создать репозиторий Subversion
  • изменить файл dav_svn.conf, расположенный в папке /etc/apache2/mods-enabled
  • перезапустить апач

После выполнения вышеуказанного я должен получить доступ к моему репозиторию Subversion с помощью подключаемого модуля Ankh для Visual Studio, используя URL-адрес, такой как https://192.168.0.4/svn/, при условии, что мой сервер Ubuntu находится по IP-адресу 192.168.0.4 в моей локальной домашней сети.

Где я сейчас:

  • Apache установлен, работает и обслуживает страницы
  • Subversion устанавливается вместе с libapache2-mod-svn
  • Я еще не создал репозиторий Subversion

Версии Apache и Subversion:

rick@rick-MS-7B98:/etc/apache2/mods-enabled$ apache2 -version
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2020-08-12T19:46:17

rick@rick-MS-7B98:/etc/apache2/mods-enabled$ svn --version
svn, version 1.13.0 (r1867053)
   compiled Mar 24 2020, 12:33:36 on x86_64-pc-linux-gnu

Я нашел в папке /etc/apache2/mods-enabled файл dav_svn.conf, который, похоже, является файлом конфигурации для доступа DAV к Subversion через Apache. Этот файл содержит:

rick@rick-MS-7B98:/etc/apache2/mods-enabled$ cat dav_svn.conf
# dav_svn.conf - Example Subversion/Apache configuration
#
# For details and further options see the Apache user manual and
# the Subversion book.
#
# NOTE: for a setup with multiple vhosts, you will want to do this
# configuration in /etc/apache2/sites-available/*, not here.

# <Location URL> ... </Location>
# URL controls how the repository appears to the outside world.
# In this example clients access the repository as http://hostname/svn/
# Note, a literal /svn should NOT exist in your document root.
#<Location /svn>

  # Uncomment this to enable the repository
  #DAV svn

  # Set this to the path to your repository
  #SVNPath /var/lib/svn
  # Alternatively, use SVNParentPath if you have multiple repositories under
  # under a single directory (/var/lib/svn/repo1, /var/lib/svn/repo2, ...).
  # You need either SVNPath or SVNParentPath, but not both.
  #SVNParentPath /var/lib/svn

  # Access control is done at 3 levels: (1) Apache authentication, via
  # any of several methods.  A "Basic Auth" section is commented out
  # below.  (2) Apache <Limit> and <LimitExcept>, also commented out
  # below.  (3) mod_authz_svn is a svn-specific authorization module
  # which offers fine-grained read/write access control for paths
  # within a repository.  (The first two layers are coarse-grained; you
  # can only enable/disable access to an entire repository.)  Note that
  # mod_authz_svn is noticeably slower than the other two layers, so if
  # you don't need the fine-grained control, don't configure it.

  # Basic Authentication is repository-wide.  It is not secure unless
  # you are using https.  See the 'htpasswd' command to create and
  # manage the password file - and the documentation for the
  # 'auth_basic' and 'authn_file' modules, which you will need for this
  # (enable them with 'a2enmod').
  #AuthType Basic
  #AuthName "Subversion Repository"
  #AuthUserFile /etc/apache2/dav_svn.passwd

  # To enable authorization via mod_authz_svn (enable that module separately):
  #<IfModule mod_authz_svn.c>
  #AuthzSVNAccessFile /etc/apache2/dav_svn.authz
  #</IfModule>

  # The following three lines allow anonymous read, but make
  # committers authenticate themselves.  It requires the 'authz_user'
  # module (enable it with 'a2enmod').
  #<LimitExcept GET PROPFIND OPTIONS REPORT>
    #Require valid-user
  #</LimitExcept>

#</Location>

1 517
1

Ответ:

Решено

Список задач, которые необходимо выполнить, чтобы разрешить доступ к репозиторию Subversion через веб-сервер Apache:

  • Модули Subversion для Apache должны быть установлены,
  • файл /etc/apache2/mods-enabled/dav_svn.conf должен быть изменен, чтобы включить модули Subversion в экземпляр Apache,
  • репозиторий Subversion должен быть создан в каталоге, доступном для Apache, и
  • веб-сервер Apache перезапущен.

Прежде всего, убедитесь, что установлены все пакеты, необходимые для включения Subversion через Apache. Необходимые библиотеки и модули находятся в пакете libapache2-mod-svn, который устанавливается вместе с apt install.

Только файлы .conf и .load, перечисленные в /etc/apache2/mods-enabled, будут обрабатываться при запуске Apache. Убедитесь, что необходимые символические ссылки файлов dav* (dav.load, dav_svn.load и dav_svn.conf), расположенных в /etc/apache2/mods-available, находятся в каталоге /etc/apache2/mods-enabled.

Файл dav_svn.conf содержит информацию о репозитории Subversion, которая необходима серверу Apache для поиска правильного каталога и способа аутентификации пользователя. Файлы .load указывают Apache, какие библиотеки необходимо загрузить для программного доступа к репозиторию. Необходимые библиотеки находятся в пакете libapache2-mod-svn, который устанавливается вместе с apt install.

Примечание: во время работы над этим в какой-то момент я столкнулся с проблемой с ошибками apt и dpkg после того, как попытался удалить и очистить установки Subversion и Apache, чтобы переустановить их. См. «Неизвестный поставщик DAV: svn» при запуске веб-сервера Apache с сервером Subversion после переустановки, который представляет собой публикацию в стеке обмена askubuntu, которую я сделал, чтобы попросить о помощи.

Файл dav_svn.conf, который я использую, выглядит следующим образом:

rick@rick-MS-7B98:/etc/apache2/mods-enabled$ cat dav_svn.conf
# dav_svn.conf - Example Subversion/Apache configuration
#
# For details and further options see the Apache user manual and
# the Subversion book.
#
# NOTE: for a setup with multiple vhosts, you will want to do this
# configuration in /etc/apache2/sites-available/*, not here.

# <Location URL> ... </Location>
# URL controls how the repository appears to the outside world.
# In this example clients access the repository as http://hostname/svn/
# Note, a literal /svn should NOT exist in your document root.
<Location /svn>

  # Uncomment this to enable the repository
  DAV svn

  # Set this to the path to your repository
  SVNPath /srv/svn
  # Alternatively, use SVNParentPath if you have multiple repositories under
  # under a single directory (/var/lib/svn/repo1, /var/lib/svn/repo2, ...).
  # You need either SVNPath or SVNParentPath, but not both.
  #SVNParentPath /var/lib/svn

  # Access control is done at 3 levels: (1) Apache authentication, via
  # any of several methods.  A "Basic Auth" section is commented out
  # below.  (2) Apache <Limit> and <LimitExcept>, also commented out
  # below.  (3) mod_authz_svn is a svn-specific authorization module
  # which offers fine-grained read/write access control for paths
  # within a repository.  (The first two layers are coarse-grained; you
  # can only enable/disable access to an entire repository.)  Note that
  # mod_authz_svn is noticeably slower than the other two layers, so if
  # you don't need the fine-grained control, don't configure it.

  # Basic Authentication is repository-wide.  It is not secure unless
  # you are using https.  See the 'htpasswd' command to create and
  # manage the password file - and the documentation for the
  # 'auth_basic' and 'authn_file' modules, which you will need for this
  # (enable them with 'a2enmod').
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
  Require valid-user

  # To enable authorization via mod_authz_svn (enable that module separately):
  #<IfModule mod_authz_svn.c>
  #AuthzSVNAccessFile /etc/apache2/dav_svn.authz
  #</IfModule>

  # The following three lines allow anonymous read, but make
  # committers authenticate themselves.  It requires the 'authz_user'
  # module (enable it with 'a2enmod').
  #<LimitExcept GET PROPFIND OPTIONS REPORT>
    #Require valid-user
  #</LimitExcept>

</Location>

После того, как я изменил файл, я использовал команду sudo systemctl restart apache2 для перезапуска веб-сервера Apache2, и все было в порядке.

Мне пришлось создать файл паролей /etc/apache2/dav_svn.passwd, который указан в директиве AuthUserFile файла dav_svn.conf.

Я использую стандартный путь репозитория Subversion /srv/svn, как указано в директиве SVNPath файла dav_svn.conf. Я использовал команду sudo svnadmin create /srv/svn для создания репозитория.

Затем я использовал команду sudo svn mkdir, чтобы создать дерево каталогов существующего репозитория Subversion (trunk, release и branches), которое мне нужно было продублировать, чтобы использовать svnadmin load для загрузки файла дампа Subversion в мой новый репозиторий. См. Как экспортировать (а затем импортировать) репозиторий Subversion?

Установите новый SSD для использования как через samba, так и через webDAV

Я хотел добавить новый твердотельный накопитель Samsung емкостью 500 ГБ на свой ПК с Ubuntu 20.04 для дополнительного места на файловом сервере, чтобы разрешить обмен файлами в моей локальной сети с использованием как самбы, так и сетевого диска Windows, и сервера webDAV, доступ к которому осуществляется через веб-сервер Apache2, работающий на Убунту ПК.

Первое, что я сделал, это установил новый твердотельный накопитель Samsung EVO 860 емкостью 500 ГБ в коробку и включил его.

Затем мне нужно было отформатировать диск для Linux, создать точку mount, а затем убедиться, что он будет автоматически монтироваться при запуске Ubuntu, добавив запись в /etc/fstab.

Я выбрал точку монтирования /srv/ssda, а папка для общего доступа между samba и webDAV была папкой public, поэтому путь к области общего доступа будет /srv/ssda/public. Я также решил использовать ssda в имени общего ресурса samba, Ssda, и пути webDAV, ssdadav.

Я выбрал /srv в качестве корня, а не /mnt, поскольку я уже использовал папку в /srv для общего ресурса samba.

Затем я изменил файл конфигурации samba /etc/samba/smb.conf, чтобы добавить определение новой общей папки под существующую общую папку samba, которую я ранее создал, и перезапустил samba.

[Ssda]
path = /srv/ssda/public
browsable =yes
writable = yes
guest ok = yes
read only = no
create mask = 644

Затем я изменил файл конфигурации Apache2 /etc/apache2/sites-enabled/000-default.conf и добавил под существующую запись webDAV и дополнительную запись webDAV с директивами Alias и Directory, используя тот же путь, который я использовал для общего ресурса samba. Я перезапустил Апач.

    Alias /ssdadav /srv/ssda/public

    <Directory /srv/ssda/public>
        DAV On
    </Directory>

В этот момент я мог сесть за ПК с Windows 10 и Map network drive... на новый SSD и создать там простой текстовый файл. Затем откройте браузер на сервере Apache на ПК с Ubuntu, используя URL-адрес http://192.168.0.4/ssdadav/, просмотрите текстовый файл в списке файлов и откройте его в браузере.