Configuring the biowikifarm subversion repository

From Biowikifarm Metawiki
Revision as of 00:43, 23 September 2012 by Gregor Hagedorn (Talk | contribs)

Jump to: navigation, search

This topic is about creating and configuring the repository on the server itself. For help with using or managing subversion, see Help: Subversion.

Configuration

Configuring a subversion repository, with svn already installed through apt-get, on Debian 5. The procedure was contributed by an anonymous helper. First: in /etc/apache2/mods-enabled/dav_svn.conf enable several lines:

<Location /svn>
DAV svn
SVNPath /var/lib/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
</Location>

Password file and users

 sudo htpasswd -c /etc/apache2/dav_svn.passwd user ## only for first user
 sudo htpasswd /etc/apache2/dav_svn.passwd user1
 sudo htpasswd /etc/apache2/dav_svn.passwd user2 ## etc.

Create access control file and reload:

 sudo nano /etc/apache2/dav_svn.authz
 # Read/write permission for all SVN users:
 [/]
 * = rw
 sudo /etc/init.d/apache2 reload

SVN-Repository and post-commit-hook

Creating SVN-Repository, access only to Webserver:

 sudo mkdir /var/lib/svn
 sudo svnadmin create /var/lib/svn/
 sudo chown -R www-data.www-data /var/lib/svn/

Now one can check versions directly inside the browser using https://biowikifarm.net/svn/ or check locally out using a svn client:

 svn co https://biowikifarm.net/svn/

To increase comfort we can ensure that committing to the webserver the most recent version is updated also in server’s repositories (i.e. with every commit from a normal subversion user, the webserver-local checkout is updated by a post-commit later on):

 # set password for www-data, use a random password, it will be stored plain text:
 sudo htpasswd /etc/apache2/dav_svn.passwd www-data 
 <PASSWORD>
 sudo -s #  -s (shell) 
 # chown -R www-data.www-data /var/www/v-artenquiz
 # www-data needs a folder to store svn-configuration (esp. a plaintext password needs to be set and then stored):
 sudo mkdir /var/www/.subversion
 sudo chown www-data.www-data /var/www/.subversion/

 sudo mv /var/www/v-artenquiz /var/www/v-artenquiz-DELETE-ME-LATER
 sudo mkdir /var/www/v-artenquiz; cd /var/www/v-artenquiz
 sudo svn checkout file:///var/lib/svn/artenquiz /var/www/v-artenquiz
 sudo chown -R  www-data.www-data /var/www/v-artenquiz

 sudo mv    /usr/share/mediawiki/ext-LOCAL-svn /usr/share/mediawiki/ext-LOCAL-svn-DELETE-ME-LATER
 sudo mkdir /usr/share/mediawiki/ext-LOCAL-svn; cd /usr/share/mediawiki/ext-LOCAL-svn; 
 sudo svn checkout file:///var/lib/svn/LocalSVNextensions /usr/share/mediawiki/ext-LOCAL-svn
 sudo chown -R  www-data.www-data /usr/share/mediawiki/ext-LOCAL-svn

 sudo mv    /usr/share/mediawikistaging/ext-LOCAL-svn /usr/share/mediawikistaging/ext-LOCAL-svn-DELETE-ME-LATER
 sudo mkdir /usr/share/mediawikistaging/ext-LOCAL-svn; cd /usr/share/mediawikistaging/ext-LOCAL-svn; 
 sudo svn checkout file:///var/lib/svn/LocalSVNextensions /usr/share/mediawikistaging/ext-LOCAL-svn
 sudo chown -R  www-data.www-data /usr/share/mediawikistaging/ext-LOCAL-svn

 # new for the 1.20 git version with new folder arrangement (this may be temporary, check later)
 # first check out into separate folder, then change owner, then move to final extensions folder shared with the git-clone
 cd /usr/share/mediawiki20/phase3/
 sudo mkdir ext-LOCAL-svn; cd ext-LOCAL-svn; 
 sudo svn checkout file:///var/lib/svn/LocalSVNextensions /usr/share/mediawiki20/phase3/ext-LOCAL-svn
 sudo chown -R  www-data.www-data /usr/share/mediawiki20/phase3/ext-LOCAL-svn
 sudo mv /usr/share/mediawiki20/phase3/ext-LOCAL-svn/* /usr/share/mediawiki20/phase3/extensions
 sudo mv /usr/share/mediawiki20/phase3/ext-LOCAL-svn/.svn /usr/share/mediawiki20/phase3/extensions
 sudo rm /usr/share/mediawiki20/phase3/ext-LOCAL-svn -r

Continuing as normal user, edit/create file

 sudo nano /var/lib/svn/hooks/post-commit

with:

#!/bin/sh
REPOS="$1"
REV="$2"
HOME=/var/www # define HOME for settings in $HOME/.subversion
cd /var/www/v-artenquiz;                      /usr/bin/svn update
cd /usr/share/mediawiki/ext-LOCAL-svn;        /usr/bin/svn update
cd /usr/share/mediawikistaging/ext-LOCAL-svn; /usr/bin/svn update

… and set this file as executable:

 sudo chmod +x /var/lib/svn/hooks/post-commit

By means of this post-commit-hook, whenever a commit to SVN occurs, www/v-artenquiz is automatically updated as well!

Adding new directories

The easiest way to add new directories or files to the repository is to use a GUI like TortoiseSVN (Windows) or kdesvn (Linux KDE).

  1. Check out the repository
  2. Add or copy the folders you wish to add to the repository and add them to subversion control locally using the local GUI
  3. Commit your changes to the main repository (needs a user account in dav)

An alternative is to use svn import on command line with

 sudo svn import LocalSVNextensions file:///var/lib/svn/LocalSVNextensions -m 'import of mediawiki LocalSVNextensions'

Adding a log-edit feature

cd /var/lib/svn/hooks/
# use templates provided by subversion
sudo cp  pre-revprop-change.tmpl pre-revprop-change 
# make it executable
sudo chmod +x pre-revprop-change

Now you are able to edit/or set log entries from a specific subversion revision number -r by:

1 cd /path/to/versioned/directory/
2 # edit log entry with editor
3 sudo svn propedit -r123 --revprop svn:log
4 # set log entry
5 sudo svn propset -r123 --revprop svn:log "new log message"

See also http://subversion.apache.org/faq.html#change-log-msg.

SVN repo on apache behind nginx

Changes made to dav_svn.conf: add right before "<Location /svn>"

## NECESSARY MODIFICATION FOR APACHE BEHIND NGINX (rev. proxy):
RequestHeader edit Destination ^https http early 

Note: Normal commits would work without this, but renames of folders caused "Server sent unexpected return value (502 Bad Gateway) in response to COPY". Also needs headers enabled:

a2enmod headers


There was nothing about SVN in our sites-available/default anyways. Setting in nginx /etc/nginx/sites-available/default:

 location /svn {
     proxy_set_header X-Real-IP       $remote_addr;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header Host            $host;
     proxy_pass http://127.0.0.1:8880; # = APACHE2 Prefork
 }

Initially there was a problem with the existing checkouts on the server itself, this could be solved by checking out again, using file: instead of https: (e.g. svn checkout file:///var/lib/svn/LocalSVNextensions).