Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Beyond Linux From Scratch. Version 2011-12-30
Назад 11. Системные утилиты Вперед

Запуск сервера Subversion

В этом разделе описывается, как настраивать, администрировать и безопасно использовать сервер Subversion.

Зависимости сервера Subversion

Обязательные

Subversion-1.7.1 и OpenSSH-5.9p1

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

С помощью описываемых ниже инструкций будет установлен сервер Subversion, который будет настроен для использования с OpenSSH для защищенного дистанционного доступа и с командой svnserve - для анонимного доступа.

Конфигурирование сервера Subversion состоит из следующих шагов:

1. Настройка пользователей, групп и прав доступа

Вы должны быть пользователем с правами root для выполнения первой части конфигурирования. Создайте пользователя и группу svn с помощью следующих команд:

groupadd -g 56 svn &&
useradd -c "SVN Owner" -d /home/svn -m -g svn -s /bin/false -u 56 svn

Если вы планируете иметь несколько репозитариев, вы должны для упрощения администрирования использовать для каждого репозитария отдельную группу. Создайте группу svntest для тестового репозитария и добавьте в эту группу пользователя svn с помощью следующих команд:

groupadd -g 57 svntest &&
usermod -G svntest -a svn

Кроме того, когда вы работаете с репозитарием, вам нужно выполнить команду umask 002 с тем того, чтобы все новые файлы были доступны на запись для владельцев файлов и других пользователей этой группы. Это условие будет выполнено всегда в случае обращения к svn и svnserve через скрипт-обертку:

mv /usr/bin/svn /usr/bin/svn.orig &&

mv /usr/bin/svnserve /usr/bin/svnserve.orig &&
cat >> /usr/bin/svn << "EOF"
#!/bin/sh
umask 002
/usr/bin/svn.orig "$@"
EOF
cat >> /usr/bin/svnserve < "EOF"
#!/bin/sh
umask 002
/usr/bin/svnserve.orig "$@"
EOF
chmod 0755 /usr/bin/svn{,serve}

Замечание

Если для работы с репозитарием вы используете Apache поверх HTTP даже для анонимного доступа, вам потребуется обращаться к демону /usr/sbin/httpd с помощью аналогичного скрипта.

2. Создание репозитария Subversion

В версии subversion-1.1.0 и выше предлагается использовать новый способ хранения данных в репозитарии - FSFS. Платой за этот вариант является снижение скорости работы, но теперь репозитарий можно быть поместить в точку сетевого монтирования и в случае возникновения в репозитарии каких-либо ошибок для его восстановления не потребуются прав администратора. За дополнительной информацией и сравнением возможностей способов FSFS и BDB смотрите ссылку http://svnbook.red-bean.com/svnbook-1.1/ch05.html#svn-ch-5-sect-1.2.A.

Создайте новый репозитарий Subversion с помощью следующих команд:

install -v -m 0755 -d /srv &&
install -v -m 0755 -o svn -g svn -d /srv/svn/repositories &&
svnadmin create --fs-type fsfs /srv/svn/repositories/svntest

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

          svntest/            # Имя репозитария
             trunk/           # содержит существующее дерево с исходными кодами
                BOOK/
                bootscripts/
                edguide/
                patches/
                scripts/
             branches/        # Необходим для создания веток проекта
             tags/            # Необходим добавления релизов

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

svn import -m "Initial import." \
    </путь/к/дереву/исходных/кодов> \
    file:///srv/svn/repositories/svntest

Теперь измените в репозитарии информацию о владельце и группе и добавьте в группы svn и svntest непривилегированного пользователя:

chown -R svn:svntest /srv/svn/repositories/svntest &&
chmod -R g+w /srv/svn/repositories/svntest &&

chmod g+s /srv/svn/repositories/svntest/db &&
usermod -G svn,svntest -a <username>

svntest является группой, которая назначается репозитарию svntest. Как уже упоминалось ранее, в результате упрощается администрирование нескольких репозитариев в случае, когда для аутентификации используется OpenSSH. Двигаясь дальше, вы должны добавить в группы svn и svntest своего непривилегированного пользователя, а также всех других пользователей, которым вы хотите разрешить доступ в репозитарий на запись.

Кроме того, вы заметите, что для директория db нового репозитария будет установлено значение, соответствующее идентификатору группы. Если из рассуждения вам это не очевидно, то когда используется какой-либо внешний способ аутентификации (например, ssh), липкий бит устанавливается так, чтобы владельцем всех новых файлов был пользователь, но не группа svntest. Любой, кто принадлежит группе svntest, может создавать файлы, а всем другим пользователям этой группы предоставляется к этим файлам доступ на запись. Это позволяет избежать блокировки файлов другими пользователями репозитария.

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

svnlook tree /srv/svn/repositories/svntest/

Замечание

You may need to log out and back in again to refresh your group memberships. 'su <username>' should work as well. Возможно, для того, чтобы восстановить свою принадлежность к группе, вам придется выйти из системы, а затем снова в нее войти. Также должна хорошо работать команда 'su <имя_пользователя>'.

3. Конфигурирование сервера

Как упоминалось ранее, в этих инструкциях будет описано только конфигурирование сервера для его использования с ssh при доступе на запись в репозитарий и только для реализации анонимного доступ с использованием svnserve. Есть несколько других способов предоставления доступа к репозитарию. Эти дополнительные варианты конфигурирования лучше всего объясняются на http://svnbook.red-bean.com/.

Конфигурирование доступа необходимо выполнить для каждого репозитария. Для репозитария svntest создайте файл svnserve.conf с помощью следующих команд:

cp /srv/svn/repositories/svntest/conf/svnserve.conf \
    /srv/svn/repositories/svntest/conf/svnserve.conf.default &&
cat > /srv/svn/repositories/svntest/conf/svnserve.conf << "EOF"
[general]
anon-access = read
auth-access = write
EOF

Вообще, конфигурационный файл не слишком большой. Заметьте, что нужно сконфигурировать только общий раздел. Информацию об использовании метода аутентификации, встроенного в svnserve, смотрите в файле svnserve.conf.default.

4. Запуск сервера

Есть несколько способов запуска svnserve. Наиболее распространенным является запуск его в виде процесса в inetd или xinetd. Либо для того, чтобы запустить сервис при запуске системы, вы можете воспользоваться скриптом запуска.

Замечание

Если вы не хотите предоставлять анонимный доступ к вашим репозиториям svn или не хотите использовать встроенную в аутентификацию svnserve, вам не нужно запускать svnserve.

Если вы используете inetd, с помощью следующих команд добавьте строку в файл /etc/inetd.conf:

cat >> /etc/inetd.conf << "EOF"
svn stream tcp nowait svn /usr/bin/svnserve svnserve -i
EOF

Если вы используете xinetd, то с помощью следующей команды создайте для сервера Subversion файл /etc/xinetd.d/svn:

cat >> /etc/xinetd.d/svn *lt;< "EOF"
# Начало файла /etc/xinetd.d/svn

service svn
{
        port                    = 3690
        socket_type             = stream
        protocol                = tcp
        wait                    = no
        user                    = svn
        server                  = /usr/bin/svnserve
        server_args             = -i -r /srv/svn/repositories
}

# Конец файла /etc/xinetd.d/svn
EOF

Наконец, если вы хотите просто запускать сервер при запуске системы, установите скрипт запуска svn, который есть в пакете blfs-bootscripts-20111226.


Предыдущий раздел: Оглавление Следующий раздел:
Пакет Subversion-1.7.1   Пакет Пакет S-Lang-2.2.4