From aaad9fd0daadffa53a65cdeff3a060f0c59db417 Mon Sep 17 00:00:00 2001 From: Mike Sperber Date: Sat, 2 May 2020 16:18:29 +0200 Subject: nixos/doc: Rudimentary documentation for Subversion-inside-Apache HTTP. Content thanks to: Aaron Andersen --- nixos/doc/manual/configuration/configuration.xml | 1 + nixos/doc/manual/configuration/subversion.xml | 140 +++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 nixos/doc/manual/configuration/subversion.xml diff --git a/nixos/doc/manual/configuration/configuration.xml b/nixos/doc/manual/configuration/configuration.xml index 6eb8f50baca..2d7d22e3bb5 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 00000000000..940d63cc4e6 --- /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. +
+
-- cgit 1.4.1