[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Dreamweaver, Apache, mod_dav_svn not supporting LOCK, workaround found

From: Jon Brisbin <jon.brisbin_at_npcinternational.com>
Date: 2004-06-25 19:46:18 CEST

I'm posting this mainly for the benefit of those searching the archives
after me. I'd slap this in a wiki or something, but I haven't been
around the svn community long enough yet to know where that's at...

I spent more hours than I wanted to trying to figure out how to get
Dreamweaver MX to use the WebDAV functionality of our Subversion
repository. DW kept puking when I tried to save my edited file.

I couldn't figure out what was causing the error till I read in my
apache logs that the LOCK method DW was trying to use isn't supported by
mod_dav_svn. I confirmed this by googling this problem.

I searched the Macromedia site, trying to figure out if I could just
turn off this LOCK functionality. I even searched my JavaScript files
throughout the Dreamweaver installation, hoping against hope. To no
avail.

I was able to work around this problem by checking out httpd 2.1 from
CVS, per the instructions at http://httpd.apache.org/dev One thing to
note if you're not familiar with using Apache from CVS: the 2.1 version
of Apache you need is actually in the 2.0 branch. Quick survival
commands:

[root@gandalf ~]# cd /usr/local/src

[root@gandalf src]# export
CVSROOT=:pserver:anoncvs@cvs.apache.org:/home/cvspublic

[root@gandalf src]# cvs login
Logging in to :pserver:anoncvs@cvs.apache.org:2401/home/cvspublic
CVS password: [password: "anoncvs"]

[root@gandalf src]# cvs co httpd-2.0

You need httpd 2.1 to get the mod_dav_lock module, which was separated
from mod_dav in the 2.0 -> 2.1 transition. To compile it, I ran this:

./configure --enable-mods-shared=most --enable-dav-lock

For some reason, mod_dav_lock doesn't get built even if mod_dav does.
You have to specify it explicitly. Once it's configured, just do a:

make && make install

to get everything in "/usr/local/apache2" by default, or to wherever you
set "--prefix=/some/path/to/httpd" when you did configure.

Once Apache is up and running, you'll have to compile Subversion against
the httpd 2.1 server you just built. I had to use Subversion 1.0.5
source, as I got compile errors in installing the mod_dav_svn module
using the 1.0.4 source. If you put subversion-1.0.5 right next to
httpd-2.0 in someplace like "/usr/local/src", then go into the
subversion source directory and do something like this:

./configure --with-apxs=/usr/local/apache2/bin/apxs --with-editor=vi

I also added the "--with-jdk=/opt/java/jdk14" flag, but that's up to
you. Compile and install with:

make && make install

Now mod_dav_svn is compiled and linked against the latest version of
Apache and you're almost ready to start using it.

Edit your httpd.conf file (which is probably
"/usr/local/apache2/conf/httpd.conf") in your favorite editor.
<digression>If that favorite editor is vi(m), you get an A, if it's
Emacs, A-, if it's gedit or kwrite: D+ You pass, but only barely ;-)
If it's notepad.exe in Wine, then you have issues...</digression>

You'll have to add some directives to your httpd.conf file to make this
work. First, check to see if the the appropriate modules are getting
loaded. If you're using vi, typing "/dav_svn" should tell you right
away if the make install process got you set up. If not, add these
lines at the end of all the other "LoadModule" directives, which are
usually not far from the top of the file:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

Double check that the dav_lock module is being loaded, too. It will
look like this:

LoadModule dav_lock_module modules/mod_dav_lock.so

If you can't find it, then add it before the svn modules.

If you're using a virtual host, go into the directives for your virtual
host and add the following directives (or something equivalent), if
you're not virtual hosting, then just go to the end of the file:

<Location /svn/myproject>
   DAV svn
   SVNPath /opt/subversion/myproject
   SVNAutoversioning on
   DavGenericLockDB /tmp/webdav.lock
   # Limit write permission to list of valid users.
   #<LimitExcept GET PROPFIND OPTIONS REPORT LOCK>
      # Require SSL connection for password protection.
      # SSLRequireSSL
                                                                                                                                                            
    # AuthType Basic
    # AuthName "Subversion Repository"
    # AuthUserFile /opt/subversion/htaccess
    # Require valid-user
   #</LimitExcept>
</Location>

I explicitly name what projects are accessible via WebDAV, but you might
want to just use the root of all your projects and drop the "myproject"
part. Six of one, half-dozen of the other. I also have authentication
turned off since this machine is internal to our network and I don't
give a rip who updates stuff.

You can also add an authz directive for managing the roles of groups of
users so you can split up who can read and who can write. I found this
information easily using Google, so we'll consider that your homework
assignment.

One other, rather important note: the repository directory must be
readable and writable by the user Apache runs under. I have a user and
group (with no shell privileges) named "apache". I changed these
directives from their default in the httpd.conf file:

User apache
Group apache

If you run Apache as the default user (for source builds, anyway) of
"nobody", then you'll have to chmod your repositories that WebDAV
accesses to "nobody:nobody". i.e.

cd /my/svnrepos
chown -R nobody:nobody myproject/

Now that everything should be kosher, fire up apache with something
like:

/usr/local/apache2/bin/apachectl start

Hopefully, you won't get errors in your config file due to typos, like I
always do. If it doesn't say anything, no news is good news. A quick
"ps ax" should show something like:

13703 ? S 0:00 /usr/local/apache2/bin/httpd -k start
13704 ? S 0:00 /usr/local/apache2/bin/httpd -k start
13705 ? S 0:00 /usr/local/apache2/bin/httpd -k start
13706 ? S 0:00 /usr/local/apache2/bin/httpd -k start

Now you're golden! Jump over to your windows box and fire up
Dreamweaver. Go into the site you've defined (you've already done this,
right, because it hasn't worked, which is why you're reading this ;-)
and set your Remote view settings to "WebDAV" and your url to:

http://mydevelserver/svn/myproject

Username and password in my case are blank, but fill these in if you've
got authentication turned on.

Test it out by double-clicking a file in remote view, editing it, saving
it, then trying to upload. It shouldn't complain about anything and
since the autoversioning is turned on, it will bump up your revision
number every time you save it. I have an FTP setting on my Testing
server view, then when I'm ready to "check in" my changes, I just switch
to remote view and hit upload. Voila! You're finished!

Note: these instructions are obviously for Linux. I use Fedora Core 2
with about 9 GB of software installed, including nearly every
development library available in RPM format ;-) Big 'net pipes rock!
If you're on something else, your mileage may vary.

I hope I've included everything. I just got finished with this install
about an hour ago, so I think most everything you need is here. Please
let me know if something craps out on you. Not sure if I can help, but
I'll sure try...

-- 
Thanks!
Jon Brisbin
=============================
Development Programmer
NPC International
jon.brisbin at npcinternational dot com
620.235.7726
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org
Received on Fri Jun 25 19:56:32 2004

This is an archived mail posted to the Subversion Users mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.