diff --git a/nixos/doc/manual/configuration/configuration.xml b/nixos/doc/manual/configuration/configuration.xml
index 6eb8f50bacac..2d7d22e3bb5a 100644
--- a/nixos/doc/manual/configuration/configuration.xml
+++ b/nixos/doc/manual/configuration/configuration.xml
@@ -22,6 +22,7 @@
+
diff --git a/nixos/doc/manual/configuration/subversion.xml b/nixos/doc/manual/configuration/subversion.xml
new file mode 100644
index 000000000000..940d63cc4e6d
--- /dev/null
+++ b/nixos/doc/manual/configuration/subversion.xml
@@ -0,0 +1,140 @@
+
+ Subversion
+
+
+ Subversion
+ is a centralized version-control system. It can use a variety
+ of protocols for communication between client and server.
+
+
+ Subversion inside Apache HTTP
+
+
+ This section focuses on configuring a web-based server on top of
+ the Apache HTTP server, which uses
+ WebDAV/DeltaV
+ for communication.
+
+
+ For more information on the general setup, please refer to
+ the the
+ appropriate section of the Subversion book.
+
+
+ To configure, include in
+ /etc/nixos/configuration.nix code to activate
+ Apache HTTP, setting
+ appropriately:
+
+
+
+
+ services.httpd.enable = true;
+ services.httpd.adminAddr = ...;
+ networking.firewall.allowedTCPPorts = [ 80 443 ];
+
+
+
+ For a simple Subversion server with basic authentication,
+ configure the Subversion module for Apache as follows, setting
+ hostName and documentRoot
+ appropriately, and SVNParentPath to the parent
+ directory of the repositories,
+ AuthzSVNAccessFile to the location of the
+ .authz file describing access permission, and
+ AuthUserFile to the password file.
+
+
+
+services.httpd.extraModules = [
+ # note that order is *super* important here
+ { name = "dav_svn"; path = "${pkgs.apacheHttpdPackages.subversion}/modules/mod_dav_svn.so"; }
+ { name = "authz_svn"; path = "${pkgs.apacheHttpdPackages.subversion}/modules/mod_authz_svn.so"; }
+ ];
+ services.httpd.virtualHosts = {
+ "svn" = {
+ hostName = HOSTNAME;
+ documentRoot = DOCUMENTROOT;
+ locations."/svn".extraConfig = ''
+ DAV svn
+ SVNParentPath REPO_PARENT
+ AuthzSVNAccessFile ACCESS_FILE
+ AuthName "SVN Repositories"
+ AuthType Basic
+ AuthUserFile PASSWORD_FILE
+ Require valid-user
+ '';
+ }
+
+
+
+
+ The key "svn" is just a symbolic name identifying the
+ virtual host. The "/svn" in
+ locations."/svn".extraConfig is the path underneath
+ which the repositories will be served.
+
+
+ This
+ page explains how to set up the Subversion configuration
+ itself. This boils down to the following:
+
+
+ Underneath REPO_PARENT repositories can be set up
+ as follows:
+
+
+
+$ svn create REPO_NAME
+
+
+ Repository files need to be accessible by
+ wwwrun:
+
+
+
+$ chown -R wwwrun:wwwrun REPO_PARENT
+
+
+
+ The password file PASSWORD_FILE can be created as follows:
+
+
+
+$ htpasswd -cs PASSWORD_FILE USER_NAME
+
+
+
+ Additional users can be set up similarly, omitting the
+ c flag:
+
+
+
+$ htpasswd -s PASSWORD_FILE USER_NAME
+
+
+
+ The file describing access permissions
+ ACCESS_FILE will look something like
+ the following:
+
+
+
+[/]
+* = r
+
+[REPO_NAME:/]
+USER_NAME = rw
+
+
+ The Subversion repositories will be accessible as http://HOSTNAME/svn/REPO_NAME.
+
+