Executando um Servidor "Subversion"

Executando um Servidor "Subversion"

Esta seção descreverá como configurar, administrar e proteger um servidor "Subversion".

Dependências do Servidor "Subversion"

Exigidas

Subversion-1.14.2 e OpenSSH-9.2p1

Configurando um Servidor Subversion.

As seguintes instruções instalarão um servidor "Subversion", que será configurado para usar "OpenSSH" como o método de acesso remoto seguro, com "svnserve" disponível para acesso anônimo.

A configuração do servidor "Subversion" consiste nas seguintes etapas:

1. Configurar Usuários(as), Grupos e Permissões

Você precisará ser o(a) usuário(a) "root" para a parte inicial da configuração. Crie o(a) usuário(a) e grupo "svn" com os seguintes comandos:

groupadd -g 56 svn &&
useradd -c "Proprietário(a) do SVN" -d /home/svn -m -g svn -s /bin/false -u 56 svn

Se você planeja ter vários repositórios, [então] deveria ter um grupo dedicado para cada repositório para facilitar a administração. Crie o grupo "svntest" para o repositório de teste e adicione o(a) usuário(a) "svn" a esse grupo com os seguintes comandos:

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

Além disso, você deveria configurar "umask 002" enquanto trabalha com um repositório, de forma que todos os novos arquivos sejam escrevíveis pelo(a) proprietário(a) e pelo grupo. Isso é tornado obrigatório criando-se um "script" envólucro para "svn" e "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}
[Nota]

Nota

Se usar o "Apache" para trabalhar com o repositório via "HTTP", mesmo para acesso anônimo, [então] você deveria agrupar "/usr/sbin/httpd" em um "script" semelhante.

2. Criar um repositório Subversion.

Existem várias maneiras de configurar um repositório "Subversion". Recomenda-se dar uma olhada no capítulo correspondente do Livro SVN. Um repositório básico pode ser configurado com as instruções abaixo.

Crie um novo repositório "Subversion" com os seguintes comandos (como o(a) usuário(a) "root"):

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

Agora que o repositório foi criado, ele deveria ser povoado com algo útil. Você precisará ter um esquema predefinido de diretório configurado exatamente como deseja que seu repositório aparente. Por exemplo, aqui está um exemplo de configuração de esquema do BLFS com uma raiz de "svntest/". Você precisará configurar uma árvore de diretórios semelhante à seguinte:

svntest/            # O nome do repositório
   trunk/           # Contém a árvore existente de fonte
      BOOK/
      bootscripts/
      edguide/
      patches/
      scripts/
   branches/        # Necessário para ramificações adicionais
   tags/            # Necessário para rotular pontos de lançamento

Depois que tiver criado teu esquema do diretório conforme mostrado acima, você estará pronto(a) para fazer a importação inicial:

svn import -m "Importação inicial." \
    </caminho/para/árvore/fonte>      \
    file:///srv/svn/repositories/svntest

Agora mude as informações do(a) proprietário(a) e do grupo no repositório e adicione um(a) usuário(a) sem privilégios aos grupos "svn" e "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 <nome_usuário(a)>

"svntest" é o grupo atribuído ao repositório "svntest". Conforme mencionado anteriormente, isso facilita a administração de repositórios múltiplos ao usar "OpenSSH" para autenticação. A partir de agora, você precisará adicionar teu(ua) usuário(a) sem privilégios, e quaisquer usuários(as) adicionais que desejar ter acesso de escrita ao repositório, aos grupos "svn" e "svntest".

Além disso, você notará que o diretório "db" do novo repositório está configurado o "ID" de grupo. Se o raciocínio não for imediatamente óbvio, [então] ao usar qualquer método externo de autenticação (como "ssh"), o bit "sticky" é configurado, de forma que todos os novos arquivos sejam de propriedade do(a) usuário(a), mas do grupo de "svntest". Qualquer um(a) no grupo "svntest" consegue criar arquivos, mas, ainda assim, conceder ao grupo inteiro acesso de escrita a esses arquivos. Isso evita bloquear outros(as) usuários(as) fora do repositório.

Agora, retorne para uma conta de usuário(a) sem privilégios e dê uma olhada no novo repositório usando "svnlook":

svnlook tree /srv/svn/repositories/svntest/
[Nota]

Nota

Você possivelmente precise sair e entrar novamente para atualizar tuas titularidades de membros(as) de grupo. "su <nome_de_usuário(a)>" também deveria funcionar.

3. Configurar o Servidor

Como mencionado anteriormente, estas instruções configurarão o servidor para usar somente "ssh" para acesso de escrita ao repositório e para fornecer acesso anônimo usando "svnserve". Existem várias outras maneiras de fornecer acesso ao repositório. Essas configurações adicionais estão melhor explicadas em https://svnbook.red-bean.com/.

A configuração de acesso precisa ser feita para cada repositório. Crie o arquivo "svnserve.conf" para o repositório "svntest" usando os seguintes comandos:

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

Não há muito no arquivo de configuração. Você notará que somente a seção geral é exigida. Dê uma olhada no arquivo "svnserve.conf.default" para informações relativas a usar o método de autenticação integrado do "svnserve".

4. Iniciar o Servidor

Para iniciar o servidor durante a inicialização, instale a unidade "svnserve.service" a partir do pacote "blfs-systemd-units-20220720":

make install-svnserve

Além disso, as instruções acima exigem que o servidor "svn" use "umask 002", de forma que todos os novos arquivos serão escrevíveis pelo(a) proprietário(a) e pelo grupo. Isso pode ser conseguido criando-se um arquivo de unidade "systemd" de substituição executando-se o seguinte comando:

mkdir -p /etc/systemd/system/svnserve.service.d
echo "UMask=0002" > /etc/systemd/system/svnserve.service.d/99-user.conf

As opções que são passadas para o processo de segundo plano "svnserve" podem ser mudadas em "/etc/default/svnserve".