Поиск по сайту:

Как настроить сервер SVN на CentOS


В этом руководстве объясняется, как настроить и использовать сервер репозитория SVN в CentOS. Прежде чем я начну, позвольте мне объяснить, что на самом деле представляет собой SVN и для чего она используется. SVN на самом деле является аббревиатурой SubVersion, созданной разработчиком программного обеспечения Apache. Он позволяет вам создавать и поддерживать собственный репозиторий и предоставляет подробные права доступа выделенному пользователю.

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

1. Предварительное примечание

Для этого урока я использую CentOS 6.4 в 32-битной версии. Конечный результат покажет вам, как выделенный клиент может управлять доступом к репозиторию SVN, используя любую платформу операционной системы.

2. Установка SVN

Чтобы начать с нового сервера SVN, нам нужно установить определенные пакеты. Связанные пакеты: apache httpd, mod_dav_svn и subversion. Пакет HTTPD необходим в качестве службы веб-сервера для этого процесса.

Поскольку в этом руководстве используется операционная система CentOS, возьмите пакеты из репозитория yum. Вы можете использовать другие пакеты, такие как nginx, lighttpd или любую знакомую службу веб-сервера, чтобы заменить httpd, если хотите. Ниже приведены шаги:

ifconfig
[ ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
inet addr:192.168.43.101 Bcast:192.168.43.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe61:e488/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4640 errors:0 dropped:0 overruns:0 frame:0
TX packets:6845 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:444461 (434.0 KiB) TX bytes:549473 (536.5 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2125 errors:0 dropped:0 overruns:0 frame:0
TX packets:2125 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:186888 (182.5 KiB) TX bytes:186888 (182.5 KiB)
yum install -y httpd
[ ~]# yum install -y httpd
Loaded plugins: refresh-packagekit, security
Repository 'OEL64' is missing name in configuration, using id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.i686 0:2.2.15-26.0.1.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
httpd i686 2.2.15-26.0.1.el6 OEL64 825 k
Transaction Summary
==============================================================================================================
Install 1 Package(s)
Total download size: 825 k
Installed size: 2.8 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : httpd-2.2.15-26.0.1.el6.i686 1/1
Verifying : httpd-2.2.15-26.0.1.el6.i686 1/1
Installed:
httpd.i686 0:2.2.15-26.0.1.el6
Complete!
yum install -y subversion
[ ~]# yum install -y subversion
Loaded plugins: refresh-packagekit, security
Repository 'OEL64' is missing name in configuration, using id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package subversion.i686 0:1.6.11-7.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
subversion i686 1.6.11-7.el6 OEL64 2.2 M
Transaction Summary
==============================================================================================================
Install 1 Package(s)
Total download size: 2.2 M
Installed size: 11 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : subversion-1.6.11-7.el6.i686 1/1
Verifying : subversion-1.6.11-7.el6.i686 1/1
Installed:
subversion.i686 0:1.6.11-7.el6
Complete!
yum install -y mod_dav_svn
[ ~]# yum install -y mod_dav_svn
Loaded plugins: refresh-packagekit, security
Repository 'OEL64' is missing name in configuration, using id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mod_dav_svn.i686 0:1.6.11-7.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
mod_dav_svn i686 1.6.11-7.el6 OEL64 79 k
Transaction Summary
==============================================================================================================
Install 1 Package(s)
Total download size: 79 k
Installed size: 161 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : mod_dav_svn-1.6.11-7.el6.i686 1/1
Verifying : mod_dav_svn-1.6.11-7.el6.i686 1/1
Installed:
mod_dav_svn.i686 0:1.6.11-7.el6
Complete!

3. Конфигурация SVN

Отлично, теперь часть установки сделана. Далее, хорошо двигаться вперед в части конфигурации. Во-первых, давайте создадим специальный каталог для использования репозитория SVN. Это необязательный процесс, но это хорошая практика при реализации для более масштабной группы. Ниже приведены шаги:

mkdir /data/svn

Теперь мы создадим наш первый каталог репозитория, я назову его repo1. Поскольку позже клиент сможет получить доступ к репозиторию через браузер или клиентские инструменты SVN, мы предоставим право собственности на каталог apache, поскольку он является владельцем службы веб-сервера. Ниже приведены шаги:

svnadmin create /data/svn/repo1
chown -R apache:apache /data/svn/repo1

После этого вы заметите, что несколько связанных папок и файлов будут созданы по умолчанию в нашем новом каталоге репозитория.

cd /data/svn/repo1
ls
[ repo1]# ls
conf db format hooks locks README.txt


Теперь мы редактируем файл конфигурации, чтобы он соответствовал нашим требованиям. Во-первых, мы отредактируем файл конфигурации svnserver.conf, чтобы принять соответствующие привилегии, которые хорошо назначаются предоставленному пользователю. Ниже приведены шаги:

cd conf/
ls
[ conf]# ls
authz passwd svnserve.conf
vi svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

Затем создайте новый файл с именем passwd, который будет содержать список пользователей репозитория SVN. Ниже приведены шаги:

htpasswd -c /data/svn/repo1/conf/passwd jay
[ conf]# htpasswd -c /data/svn/repo1/conf/passwd jay
New password:
Re-type new password:
Adding password for user jay
[ conf]# cat passwd
jay:14hCNCmBZY/qA

Готово, мы успешно создали пользователя для использования репозитория SVN. Давайте создадим еще 2 пользователей для доступа к репозиторию SVN. Ниже приведены шаги:

htpasswd /data/svn/repo1/conf/passwd fikri
[ conf]# htpasswd /data/svn/repo1/conf/passwd fikri
New password:
Re-type new password:
Adding password for user fikri
htpasswd /data/svn/repo1/conf/passwd farid
[ conf]# htpasswd /data/svn/repo1/conf/passwd farid
New password:
Re-type new password:
Adding password for user farid
[ conf]# cat passwd
jay:14hCNCmBZY/qA
fikri:/hlooqJMfYLkw
farid:P7Zvu6B3HyFGo


Готово, теперь есть 3 пользователя, перечисленных для использования репозитория SVN. Для этой практики я хотел бы показать, как мы можем ограничить привилегии пользователя. Давайте назначим привилегию для доступа к репозиторию repo1. Для этого нам нужно отредактировать файл конфигурации authz. Ниже приведены шаги:

vi authz
[repo1:/]
farid = r
fikri = rw
* =

Основываясь на приведенной выше конфигурации, мы установили разные привилегии для трех пользователей, которых мы создали ранее. Мы назначили пользователю FARID права ТОЛЬКО ДЛЯ ЧТЕНИЯ, FIKRI — права READ WRITE, а JAY или другим — отсутствие каких-либо привилегий. Это означает, что позже при тестировании я покажу вам, что пользователь JAY не сможет просматривать какие-либо файлы в репозитории repo1.

Теперь давайте отредактируем файл конфигурации службы HTTPD.

vi /etc/httpd/conf/httpd.conf

Убедитесь, что следующая строка существует для включения внешних файлов конфигурации в файл httpd.conf. Если он не существует, добавьте его в конец файла.

[.....]
Include conf.d/*.conf
[.....]

Затем мы идем в каталог conf.d, чтобы внести некоторые изменения в соответствующие файлы конфигурации. Вы заметите, что файл subversion.conf уже существует. Отредактируйте файл, чтобы сделать репозиторий доступным для просмотра в браузере. Ниже приведены шаги: -

cd /etc/httpd/conf.d/
ls
[ conf.d]# ls
mod_dnssd.conf README subversion.conf welcome.conf
vi subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

<Location /repo1>
DAV svn
SVNPath /data/svn/repo1
Authtype Basic
AuthName "My Repository"
AuthzSVNAccessFile /data/svn/repo1/conf/authz
AuthUserFile /data/svn/repo1/conf/passwd
Require valid-user
</Location>

Первые две строки загружают модуль Apache SVN, следующие строки определяют, что URL-адрес /repo1 указывает на наш созданный репозиторий.

Мы также установили, что определенные пользователи имеют права на чтение/запись определенных элементов в репозитории, используя AuthzSVNAccessFile. Список пользователей будет взят из файла /data/svn/repo1/conf/passwd.

Теперь перезапустите сервер HTTPD, чтобы загрузить сделанные изменения конфигурации.

service httpd restart
[ conf.d]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

4. Этап тестирования SVN

Давайте проверим, соответствует ли сделанная нами конфигурация цели или нет. На этапе тестирования я буду использовать 2 разных клиентских компьютера. Я буду использовать Microsoft Windows и рабочий стол Linux CentOS 6.4.

Сначала я перейду к машине с Linux CentOS 6.4 и извлеку репозиторий в локальную систему. Как клиент Linux, нам нужно установить пакет subversion для подключения к репозиторию SVN.

yum install -y subversion 
[ ~]# yum install -y subversion 
Loaded plugins: refresh-packagekit, security
Repository 'OEL64' is missing name in configuration, using id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package subversion.i686 0:1.6.11-7.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
subversion i686 1.6.11-7.el6 OEL64 2.2 M
Transaction Summary
==============================================================================================================
Install 1 Package(s)
Total download size: 2.2 M
Installed size: 11 M
Downloading Packages:
--------------------------------------------------------------------------------------------------------------
Total 70 MB/s | 2.2 MB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : subversion-1.6.11-7.el6.i686 1/2
Verifying : subversion-1.6.11-7.el6.i686 2/2
Installed:
subversion.i686 0:1.6.11-7.el6
Complete!
mkdir repo_client
svn co http://192.168.43.101/repo1 repo_client
[ ~]# svn co http://192.168.43.101/repo1 repo_client
Authentication realm: <http://192.168.43.101:80> My Repository
Password for 'fikri':
-----------------------------------------------------------------------
ATTENTION! Your password for authentication realm:
<http://192.168.43.101:80> My Repository
can only be stored to disk unencrypted! You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible. See the documentation for details.
You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/root/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes
Checked out revision 0.
[ repo_client]# ls -a
. .. .svn

Отличный! Нам удалось проверить репозиторий с нашего сервера SVN, используя пользователя fikri. Теперь, чтобы проверить, есть ли у этого пользователя привилегии READ и WRITE, создайте папку внутри каталога репозитория.

cd repo_client/
svn mkdir first_dir

А затем зафиксируйте изменение обратно в репозиторий:

svn commit -m "My first folder"

Вы увидите это:

Committed revision 1.

Это означает, что наша фиксация прошла успешно.


Отличная работа! Нам удалось создать папку внутри каталога репозитория и зафиксировать ее.

Теперь давайте проверим это на компьютере с Microsoft Windows. Просмотрите URL-адрес репозитория через браузер Firefox. Вы можете использовать любой из ваших любимых браузеров, чтобы протестировать его. После ввода URL-адреса http://192.168.43.101/repo1 в поле браузера появится всплывающее окно авторизации, подобное приведенному ниже:

Войдите под пользователем JAY. Я предполагаю, что этот пользователь не сможет получить доступ к странице, так как он не является членом привилегированной группы.

Отлично, теперь давайте сделаем последний тест для этого урока. Давайте используем компьютер Microsoft Windows в качестве клиента SVN. Для этого нам нужно установить клиентское программное обеспечение SVN, в этом случае я буду использовать TortoiseSVN. Вы можете скачать его здесь или использовать любой из ваших знакомых клиентов SVN.

После установки создайте новую папку на своем компьютере с Windows и назовите ее testSVN.


Затем щелкните папку правой кнопкой мыши, и вы заметите, что теперь есть ссылки для SVN CheckOut (если вы не видите ссылок, перезапустите Windows). Нажмите \SVN Checkout\, чтобы продолжить.

После нажатия появится всплывающее окно, как показано ниже. Введите репозиторий сервера SVN в поле URL и нажмите OK.

Появится всплывающее окно, в котором вас попросят ввести имя пользователя и пароль для аутентификации. В этом случае мы будем использовать пользователя FARID для продолжения.

После этого всплывающее окно покажет, что проверка репозитория SVN завершена. Отсюда мы можем сделать вывод, что пользователь FARID имеет право ЧТЕНИЕ из репозитория.

Вы заметите, что папка, созданная ранее пользователем FIKRI, существует в вашем каталоге testSVN.

Чтобы закончить тест. Давайте проверим, что пользователь FARID должен иметь доступ ТОЛЬКО ДЛЯ ЧТЕНИЯ. Для этого давайте зайдем в папку FIRST_DIR и создадим другую папку, я назову ее SECOND_DIR.

После создания щелкните правой кнопкой мыши папку и наведите указатель мыши на TortoiseSVN, вы увидите, что там есть несколько вариантов выбора. Чтобы продолжить, нажмите кнопку Добавить. Эта кнопка добавит созданную нами папку в локальный репозиторий svn.

Появится всплывающее окно, подобное приведенному ниже, нажмите «ОК», чтобы продолжить.

После этого появится всплывающее сообщение, как показано ниже. Теперь вы успешно создали папку в своем клиентском репозитории.

Несмотря на то, что папка успешно создана и добавлена локально, она еще не синхронизирована с сервером SVN, поэтому другие пользователи с других компьютеров не смогут увидеть папку, которую мы только что создали. Сохраните и зафиксируйте папку сейчас. Для этого щелкните папку правой кнопкой мыши и выберите SVN Commit, как показано на снимке экрана ниже.


Появится всплывающее окно, как показано ниже, с просьбой подтвердить несколько деталей. Введите любой необязательный комментарий, затем нажмите OK, чтобы продолжить.

Появится окно авторизации для запроса имени пользователя для входа. Введите имя пользователя FARID и продолжайте.

После этого вам будет показано сообщение об ошибке, в котором говорится, что вам запрещено вносить изменения. Это то, что мы ожидали, поскольку пользователь farid имеет только привилегии только для чтения.

Поздравляем! Теперь мы настроили наш первый сервер SVN и успешно настроили соответствующие привилегии для определенных ограничений пользователя.