I am using this container on my Synology NAS to have access to old code - recently DSM 7.0 dropped svn support and I am to lazy to move old code to git.
Normally I run it in read only mode, viewer is fully functional and you could use svn:// protocol to list things:
sudo docker run -d --name svn -p 4000:80 -p 3690:3690 \
-e SRV_HOST_PORT=192.168.50.10:4000 \
-v /volume/docker/svn/data:/home/svn:ro \
rupor/serve-svn
Since svnadmin
does not care about access control lists you could always add more repositories:
sudo docker exec -t svn svnadmin create /home/svn/<another repo>
sudo docker exec -t svn svnadmin load /home/svn/<another repo> < dump
It is easy however to get a full access:
sudo docker run -d --name svn -p 4000:80 -p 3690:3690 \
-e SRV_HOST_PORT=192.168.50.10:4000 \
-v /volume4/docker/svn/data:/home/svn \
-v /volume4/docker/svn/svn/subversion-access-control:/etc/subversion/subversion-access-control \
-v /volume4/docker/svn/svn/passwd:/etc/subversion/passwd \
rupor/serve-svn
In this case you may want to change SVN access control lists and add users:
sudo docker exec -t svn htpasswd -b /etc/subversion/passwd <username> <password>
For some reason Alpine's build of subversion does not have svntools and without svnauthz
WebSVN refuses to work. So I had to build my own.
Setting up build environment is very simple. I used this to install Alpine 3.14 under WSL2 in Windows 10 (you could use Hyper-V or VirtualBox too)
and then followed the official guide. Takes about 3 minutes to complete.
Building Subversion with svnauthz
requires a simple patch:
diff --git a/main/subversion/APKBUILD b/main/subversion/APKBUILD
index 6eb16766a2..3c20964d76 100644
--- a/main/subversion/APKBUILD
+++ b/main/subversion/APKBUILD
@@ -85,10 +85,10 @@ check() {
package() {
local _pydir=$(python3 -c "import sysconfig;print(sysconfig.get_path('stdlib'))")
- make -j1 DESTDIR="$pkgdir" \
+ make -j1 DESTDIR="$pkgdir" toolsdir=/usr/bin \
swig_pydir="$_pydir/libsvn"\
swig_pydir_extra="$_pydir/svn" \
- install install-swig-pl-lib install-swig-py
+ install install-swig-pl-lib install-swig-py install-tools
make pure_vendor_install -C subversion/bindings/swig/perl/native \
PERL_INSTALL_ROOT="$pkgdir"
find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
- Thanks to Luca Florio with his elleFlorio/svn-docker for inspiration.