<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" /> <title></title> <meta name="author" content="James Blackwell <jblack@gnuarch.org>" /> <style type="text/css"> /* :Author: David Goodger (goodger@python.org) :Id: $Id: html4css1.css 5196 2007-06-03 20:25:28Z wiemann $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to customize this style sheet. */ /* used to remove borders from tables and images */ .borderless, table.borderless td, table.borderless th { border: 0 } table.borderless td, table.borderless th { /* Override padding for "table.docutils td" with "! important". The right padding separates the table cells. */ padding: 0 0.5em 0 0 ! important } .first { /* Override more specific margin styles with "! important". */ margin-top: 0 ! important } .last, .with-subtitle { margin-bottom: 0 ! important } .hidden { display: none } a.toc-backref { text-decoration: none ; color: black } blockquote.epigraph { margin: 2em 5em ; } dl.docutils dd { margin-bottom: 0.5em } /* Uncomment (and remove this text!) to get bold-faced definition list terms dl.docutils dt { font-weight: bold } */ div.abstract { margin: 2em 5em } div.abstract p.topic-title { font-weight: bold ; text-align: center } div.admonition, div.attention, div.caution, div.danger, div.error, div.hint, div.important, div.note, div.tip, div.warning { margin: 2em ; border: medium outset ; padding: 1em } div.admonition p.admonition-title, div.hint p.admonition-title, div.important p.admonition-title, div.note p.admonition-title, div.tip p.admonition-title { font-weight: bold ; font-family: sans-serif } div.attention p.admonition-title, div.caution p.admonition-title, div.danger p.admonition-title, div.error p.admonition-title, div.warning p.admonition-title { color: red ; font-weight: bold ; font-family: sans-serif } /* Uncomment (and remove this text!) to get reduced vertical space in compound paragraphs. div.compound .compound-first, div.compound .compound-middle { margin-bottom: 0.5em } div.compound .compound-last, div.compound .compound-middle { margin-top: 0.5em } */ div.dedication { margin: 2em 5em ; text-align: center ; font-style: italic } div.dedication p.topic-title { font-weight: bold ; font-style: normal } div.figure { margin-left: 2em ; margin-right: 2em } div.footer, div.header { clear: both; font-size: smaller } div.line-block { display: block ; margin-top: 1em ; margin-bottom: 1em } div.line-block div.line-block { margin-top: 0 ; margin-bottom: 0 ; margin-left: 1.5em } div.sidebar { margin: 0 0 0.5em 1em ; border: medium outset ; padding: 1em ; background-color: #ffffee ; width: 40% ; float: right ; clear: right } div.sidebar p.rubric { font-family: sans-serif ; font-size: medium } div.system-messages { margin: 5em } div.system-messages h1 { color: red } div.system-message { border: medium outset ; padding: 1em } div.system-message p.system-message-title { color: red ; font-weight: bold } div.topic { margin: 2em } h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { margin-top: 0.4em } h1.title { text-align: center } h2.subtitle { text-align: center } hr.docutils { width: 75% } img.align-left { clear: left } img.align-right { clear: right } ol.simple, ul.simple { margin-bottom: 1em } ol.arabic { list-style: decimal } ol.loweralpha { list-style: lower-alpha } ol.upperalpha { list-style: upper-alpha } ol.lowerroman { list-style: lower-roman } ol.upperroman { list-style: upper-roman } p.attribution { text-align: right ; margin-left: 50% } p.caption { font-style: italic } p.credits { font-style: italic ; font-size: smaller } p.label { white-space: nowrap } p.rubric { font-weight: bold ; font-size: larger ; color: maroon ; text-align: center } p.sidebar-title { font-family: sans-serif ; font-weight: bold ; font-size: larger } p.sidebar-subtitle { font-family: sans-serif ; font-weight: bold } p.topic-title { font-weight: bold } pre.address { margin-bottom: 0 ; margin-top: 0 ; font-family: serif ; font-size: 100% } pre.literal-block, pre.doctest-block { margin-left: 2em ; margin-right: 2em } span.classifier { font-family: sans-serif ; font-style: oblique } span.classifier-delimiter { font-family: sans-serif ; font-weight: bold } span.interpreted { font-family: sans-serif } span.option { white-space: nowrap } span.pre { white-space: pre } span.problematic { color: red } span.section-subtitle { /* font-size relative to parent (h1..h6 element) */ font-size: 80% } table.citation { border-left: solid 1px gray; margin-left: 1px } table.docinfo { margin: 2em 4em } table.docutils { margin-top: 0.5em ; margin-bottom: 0.5em } table.footnote { border-left: solid 1px black; margin-left: 1px } table.docutils td, table.docutils th, table.docinfo td, table.docinfo th { padding-left: 0.5em ; padding-right: 0.5em ; vertical-align: top } table.docutils th.field-name, table.docinfo th.docinfo-name { font-weight: bold ; text-align: left ; white-space: nowrap ; padding-left: 0 } h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { font-size: 100% } ul.auto-toc { list-style-type: none } </style> </head> <body> <div class="document"> <table class="docinfo" frame="void" rules="none"> <col class="docinfo-name" /> <col class="docinfo-content" /> <tbody valign="top"> <tr class="field"><th class="docinfo-name">title:</th><td class="field-body">Serving Archives with WebDAV</td> </tr> <tr class="field"><th class="docinfo-name">license:</th><td class="field-body">General Public License, V2</td> </tr> <tr class="field"><th class="docinfo-name">copyright:</th><td class="field-body"><ol class="first upperalpha simple" start="3"> <li>2004, 2005 Canonical Ltd.</li> </ol> <div class="last system-message"> <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">../../bazaar-docs/src/ServingWithWebDAV.rst</tt>, line 3)</p> Cannot extract compound bibliographic field "copyright".</div> </td> </tr> <tr><th class="docinfo-name">Author:</th> <td>James Blackwell <<a class="reference external" href="mailto:jblack@gnuarch.org">jblack@gnuarch.org</a>></td></tr> <tr class="field"><th class="docinfo-name" colspan="2">original-location:</th></tr> <tr><td> </td><td class="field-body"><a class="reference external" href="mailto:jblack@gnuarch.org--2004/bazaar-docs--initial--1.1">jblack@gnuarch.org--2004/bazaar-docs--initial--1.1</a></td> </tr> </tbody> </table> <p>This article covers serving your archives via WebDAV. After you are finished reading this mini-howto, you will no longer have to worry about using listing files again.</p> <p>Before we get started, what exactly is WebDAV (aka DAV)? Well, one overly simplified explanation is that WebDAV is essentially a filesystem that works over HTTP. Though WebDAV has all sorts of nifty concepts like locking, filesystem properties and namespace manipulation. However, to arch, DAV is really just another filesystem it can talk to.</p> <p>This is pretty close to what HTTP can do for arch, so there must be some good reason to bother with DAV. It so happens that there _is_. HTTP doesn't work very well as a filesystem; in fact, HTTP doesn't even support directory listings (For those of you that are familiar with Apache's autoindex module, no, that is not a directory listing. That is actually a html page that is built on the fly). In order to get around this problem, arch creates ".listing" files that act as a cached directory listing. Though this does work around the problem to some extent, .listing files aren't <em>completely</em> reliable.</p> <p>However, it so happens that DAV does support directory listings. By using DAV, arch doesn't need the listing files workaround. This makes installing read-only DAV support worth doing, especially considering installing read-only DAV support is pretty darn easy for apache.</p> <p>Though DAV and arch support both reading from and writing to archives via DAV, this minihowto is just going to focus on serving archives with read-only DAV. There's a couple reasons for not covering writing with DAV. One reason is that arch (due to limitations of libneon) does not support SSL. The main reason this mini-howto doesn't cover writing archives via DAV is that arch does not currently support SSL. The other, less important, reason is that setting up writable DAV isn't the sort of task that somebody should undertake based on reading a mini-howto. :)</p> <p>In order to use DAV with apache, there's a few things we need to do:</p> <p>1. Make sure your archive is in a location that is served by apache. For the purpose of this tutorial, I'm going to assume your archive's location is in /home/jdoe/public_html/archives/jdoe@isp.com--2004.</p> <p>2. First, make sure that DAV support is installed on the server. If you are using either Debian/GNU or Ubuntu Linux, then as root, run :</p> <pre class="literal-block"> apt-get install libapache-mod-dav </pre> <p>4. Ensure that the mod_dav module is loaded by apache. You should have a line in /etc/apache/modules.conf that includes the line:</p> <pre class="literal-block"> LoadModule dav_module /usr/lib/apache/1.3/libdav.so </pre> <p>5. Edit /etc/apache/httpd.conf, and add the following stanza:</p> <pre class="literal-block"> <Directory /home/jdoe/public_html/archives/jdoe@isp.com--2004/> DAV On </Directory> </pre> <ol class="arabic simple" start="6"> <li>Restart apache.</li> </ol> <p>And that should be it. You can verify that DAV is working by watching your apache logs while arch tries and retrieves from the archive. If DAV is working, you will not see any requests for ".listing" files.</p> <p>Once you are satisfied that DAV is working, you can perform the following commands:</p> <pre class="literal-block"> find /home/jdoe/public_html/archives/jdoe@isp.com--2004 -name .listing \ | xargs -n 1 rm rm /home/jdoe/public_html/archives/jdoe@isp.com--2004/=meta-info/http-blows </pre> </div> </body> </html>