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) usante root para a parte inicial da configuração.
Crie o(a) usante 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, 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) usante 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) usante 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 sobre
o repositório e adicione um(a) usante desprivilegiado(a) 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_usante>
svntest é o grupo atribuído para
o 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) usante
desprivilegiado, e quaisquer usantes 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, ao usar
qualquer método externo de autenticação (como ssh), o bit sticky é
configurado, de modo que todos os novos arquivos sejam de
propriedade do(a) usante, 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) usantes 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-20251204":
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".