Esta seção descreverá como configurar, administrar e proteger 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:
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}
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.
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/
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.
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".
Para iniciar o servidor durante a inicialização, instale a
unidade "svnserve.service
" a partir
do pacote "blfs-systemd-units-20240801":
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
".