Il peut y avoir des situations où il n'est pas possible d'utiliser Apache comme serveur. Heureusement, Subversion inclut Svnserve - un serveur autonome léger qui utilise un protocole personnalisé sur une connexion TCP/IP ordinaire.
In most cases svnserve is easier to setup and runs faster than the Apache based server. And now that SASL support is included it is easy to secure as well.
Get the latest version of Subversion from http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91. Alternatively get a pre-packaged installer from CollabNet at http://www.collab.net/downloads/subversion. This installer will setup svnserve as a Windows service, and also includes some of the tools you need if you are going to use SASL for security.
Si vous déjà une version de Subversion d'installée, et que svnserve est lancé, vous devrez l'arrêter avant de continuer.
Run the Subversion installer. If you run the installer on your server (recommended) you can skip step 4.
Ouvrez l'explorateur Windows, allez au répertoire d'installation de Subversion (habituellement C:\Program Files\Subversion) et dans le répertoire bin, trouvez les fichiers svnserve.exe, intl3_svn.dll, libapr.dll, libapriconv.dll, libapriutil.dll, libdb*.dll, libeay32.dll et ssleay32.dll - copiez ces fichiers, ou copiez simplement tout le contenu du répertoire bin, dans un répertoire sur votre serveur, par exemple c:\svnserve
Maintenant que svnserve est installé, vous avez besoin qu'il tourne sur votre serveur. L'approche la plus simple est d'exécuter ce qui suit à partir d'un interpréteur de commandes DOS ou de créer un raccourci Windows :
svnserve.exe --daemon
svnserve démarrera maintenant en attendant des requêtes entrantes sur le port 3690. Le commutateur --daemon indique à svnserve de fonctionner comme un processus de démon, donc il existera toujours jusqu'à ce qu'il soit arrêté manuellement.
Si vous n'avez pas encore créé de référentiel, suivez les instructions données avec le paramétrage du serveur Apache la section intitulée « Configuration ».
Pour tester que svnserve fonctionne, utilisez → pour voir un référentiel.
En supposant que votre référentiel est placé dans c:\repos\TestRepo et votre serveur est appelé localhost, entrer :
svn://localhost/repos/TestRepo
quand le navigateur de référentiel le demande.
Vous pouvez aussi augmenter la sécurité et gagner du temps en entrant l'URL avec svnserve en utilisant le commutateur --root pour indiquer l'emplacement racine et limiter l'accès à un répertoire spécifique sur le serveur :
svnserve.exe --daemon --root disque:\chemin\vers\racine\référentiel
En utilisant le test précédent comme guide, svnserve fonctionnerait maintenant comme :
svnserve.exe --daemon --root c:\référentiels
Et dans TortoiseSVN notre URL du navigateur de référentiel est maintenant raccourcie en :
svn://localhost/TestRéférentiel
Notez que le commutateur --root est aussi nécessaire si votre référentiel est placé sur une partition ou un disque différent de l'emplacement de svnserve sur votre serveur.
Svnserve will service any number of repositories. Just locate them somewhere below the root folder you just defined, and access them using a URL relative to that root.
Ne créez pas ou n'accédez pas à un référentiel Berkeley DB sur un partage réseau. Il ne peut pas exister sur un système de fichiers distant. Même si vous faites mapper le disque réseau à une lettre de disque. Si vous essayez d'utiliser Berkeley DB sur un partage réseau, les résultats sont imprévisibles - vous pouvez voir des erreurs mystérieuses tout de suite, ou cela peut s'écouler des mois avant que vous ne découvriez que votre base de données du référentiel est subtilement corrompue.
Exécuter svnserve par un utilisateur n'est généralement pas la meilleure solution. Cela revient à avoir toujours un utilisateur connecté sur votre serveur et vous rappeler de le relancer après un redémarrage. Une meilleure manière consiste à lancer svnserve en tant que service Windows. À partir de Subversion 1.4, svnserve peut être installé comme un service windows natif.
To install svnserve as a native windows service, execute the following command all on one line to create a service which is automatically started when windows starts.
sc create svnserve binpath= "c:\svnserve\svnserve.exe --service
--root c:\repos" displayname= "Subversion" depend= tcpip
start= auto
If any of the paths include spaces, you have to use (escaped) quotes around the path, like this:
sc create svnserve binpath= "
\"C:\Program Files\Subversion\bin\svnserve.exe\"
--service --root c:\repos" displayname= "Subversion"
depend= tcpip start= auto
You can also add a description after creating the service. This will show up in the Windows Services Manager.
sc description svnserve "Subversion server (svnserve)"
Note the rather unusual command line format used by sc. In the key= value pairs there must be no space between the key and the = but there must be a space before the value.
Microsoft recommande maintenant que les services soient exécutés soit par le compte Service Local soit par le compte Service Réseau. Référez-vous The Services and Service Accounts Security Planning Guide. Pour créer le service sous le compte Service Local, ajoutez ce qui suit à l'exemple ci-dessus.
obj= "NT AUTHORITY\LocalService"
Notez que vous devriez donner au compte Service Local les droits appropriés tant pour Subversion et vos référentiels que pour toute application utilisée par les scripts hook. Le groupe intégré pour cela est appelé "SERVICE LOCAL".
Once you have installed the service, you need to go to the services manager to start it (this time only; it will start automatically when the server reboots).
For more detailed information, refer to Windows Service Support for Svnserve.
If you installed an earlier version of svnserve using the SVNService wrapper, and you now want to use the native support instead, you will need to unregister the wrapper as a service (remember to stop the service first!). Simply use the command
svnservice -remove
to remove the service registry entry.
The default svnserve setup provides anonymous read-only access. This means that you can use an svn:// URL to checkout and update, or use the repo-browser in TortoiseSVN to view the repository, but you won't be able to commit any changes.
Pour permettre l'accès en écriture à un référentiel, vous devez éditer le fichier conf/svnserve.conf dans votre répertoire de référentiel. Ce fichier contrôle la configuration du démon svnserve et contient aussi la documentation utile.
Vous pouvez activer l'accès en écriture anonyme en mettant simplement :
[general] anon-access = write
Cependant, vous ne saurez pas qui a fait des changements à un référentiel, puisque la propriété svn:author sera vide. Vous serez aussi incapables de contrôler qui fait des changements à un référentiel. C'est un paramétrage quelque peu risqué !
Une façon de surmonter cela est de créer une base de données de mot de passe :
[general] anon-access = none auth-access = write password-db = fichier_utilisateur
Où fichier_utilisateur est un fichier qui existe dans le même répertoire que svnserve.conf. Ce fichier peut vivre ailleurs dans votre système de fichiers (utile pour quand vous avez plusieurs référentiels qui exigent les mêmes droits d'accès) et peuvent être référencés en utilisant un chemin absolu, ou un chemin relatif au répertoire conf. Si vous incluez un chemin, il doit être écrit de /la/manière/unix. L'utilisation de \ ou des lettres de disque ne marchera pas. Le fichier_utilisateur devrait avoir une structure de :
[users] nom_utilisateur = mot_de_passe ...
Cet exemple interdira tout accès aux utilisateurs non authentifiés (anonymes) et donnera l'accès en lecture-écriture aux utilisateurs inscrits dans fichier_utilisateur.
Si vous entretenez plusieurs référentiels en utilisant la même base de données de mot de passe, l'utilisation d'un royaume d'identification rendre la vie plus facile aux utilisateurs, puisque TortoiseSVN peut mettre en cache vos accréditations pour que vous n'ayez à les saisir qu'une seule fois. Plus d'informations dans le manuel de Subversion, spécifiquement dans les sections Create a 'users' file and realm et Client Credentials Caching
The Cyrus Simple Authentication and Security Layer is open source software written by Carnegie Mellon University. It adds generic authentication and encryption capabilities to any network protocol, and as of Subversion 1.5 and later, both the svnserve server and TortoiseSVN client know how to make use of this library.
For a more complete discussion of the options available, you should look at the Subversion book in the section Using svnserve with SASL. If you are just looking for a simple way to set up secure authentication and encryption on a Windows server, so that your repository can be accessed safely over the big bad Internet, read on.
To activate specific SASL mechanisms on the server, you'll need to do three things. First, create a [sasl] section in your repository's svnserve.conf file, with this key-value pair:
use-sasl = true
Second, create a file called svn.conf in a convenient location - typically in the directory where subversion is installed.
Thirdly, create two new registry entries to tell SASL where to find things. Create a registry key named [HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library] and place two new string values inside it: SearchPath set to the directory path containing the sasl*.dll plug-ins (normally in the Subversion install directory), and ConfFile set to the directory containing the svn.conf file. If you used the CollabNet installer, these registry keys will already have been created for you.
Edit the svn.conf file to contain the following:
pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: DIGEST-MD5 sasldb_path: C:\TortoiseSVN\sasldb
The last line shows the location of the authentication database, which is a file called sasldb. This could go anywhere, but a convenient choice is the repository parent path. Make sure that the svnserve service has read access to this file.
If svnserve was already running, you will need to restart it to ensure it reads the updated configuration.
Now that everything is set up, all you need to do is create some users and passwords. To do this you need the saslpasswd2 program. If you used the CollabNet installer, that program will be in the install directory. Use a command something like this:
saslpasswd2 -c -f C:\TortoiseSVN\sasldb -u realm username
The -f switch gives the database location, realm must be the same as the value you defined in your repository's svnserve.conf file, and username is exactly what you expect it to be. Note that the realm is not allowed to contain space characters.
You can list the usernames stored in the database using the sasldblistusers2 program.
To enable or disable different levels of encryption, you can set two values in your repository's svnserve.conf file:
[sasl] use-sasl = true min-encryption = 128 max-encryption = 256
The min-encryption and max-encryption variables control the level of encryption demanded by the server. To disable encryption completely, set both values to 0. To enable simple checksumming of data (i.e., prevent tampering and guarantee data integrity without encryption), set both values to 1. If you wish to allow (but not require) encryption, set the minimum value to 0, and the maximum value to some bit-length. To require encryption unconditionally, set both values to numbers greater than 1. In our previous example, we require clients to do at least 128-bit encryption, but no more than 256-bit encryption.
Another way to authenticate users with a svnserve based server is to use a secure shell (SSH) to tunnel requests through. It is not as simple to set up as SASL, but it may be useful is some cases.
Avec cette approche, svnserve n'est pas exécuté comme un processus démon, le shell sécurisé démarre svnserve pour vous plutôt, l'exécutant comme l'utilisateur SSH authentifié. Pour activer cela, vous avez besoin d'un démon shell sécurisé sur votre serveur.
A basic method for setting up your server is given in Annexe G, Securing Svnserve using SSH. You can find other SSH topics within the FAQ by searching for « SSH ».
Plus d'informations sur svnserve dans Version Control with Subversion.
En démarrant avec Subversion 1.3, svnserve supporte le même arrangement d'autorisation à base de chemin mod_authz_svn qui est disponible avec le serveur Apache. Vous devez éditer le fichier conf/svnserve.conf dans votre répertoire de référentiel et ajouter une ligne se référant à votre fichier d'autorisation.
[general] authz-db = authz
Ici, authz est un fichier que vous créez pour définir les autorisations d'accès. Vous pouvez utiliser un fichier séparé pour chaque référentiel, ou vous pouvez utiliser le même fichier pour plusieurs référentiels. Lisez la section intitulée « Autorisation basée sur le chemin » pour une description du format du fichier.