Библиотека сайта rus-linux.net
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 |