Archives / Search ›

Busy; Evening at Adler

Yes, I’m still alive. Between research (paper #2 got accepted, and I’m presenting it at HPCA in February; currently revising paper for publication, and incredibly excited about getting back to my current project), the class I’m TAing this semester (advanced introduction to operating systems, being offered for the first time with Linux kernel programming assignments), and other miscellaneous duties, I haven’t had a lot of free time. I did finally get to see Serenity at the Lorraine last weekend, and have been watching some anime (Honey and Clover is phenomenal), but that’s been about it for fun.

I’ll be in rhe Chicago area this Friday, Saturday and most of Sunday, ostensibly for a cool-sounding Mac event but also to meet a bunch of friends and acquaintances who are flying in for the occasion. Despite my proximity to Chicago I’ve only been there about once a year since moving to Illinois.

Some of that time I’ll be working, but if anyone wants to get together for a meal or just to hang out, let me know (leave a comment or email me).

TextDrive moved; OpenVPN script revised

gilford.textdrive.com, the server hosting this weblog, is now in San Diego. I’m looking forward to less downtime now TextDrive has physical access to their servers; I couldn’t really have asked for a much smoother transition.

I revised my OpenVPN DNS script and the associated weblog entry earlier today; it’s now generic and should work unmodified as long as you’ve set up your server to send the right DHCP options. I’ve been getting a steady stream of requests for it, so I hope it helps some people…

Configuring Trac with FastCGI and lighttpd

I initially tried getting tracd to work, but couldn’t get it to generate URLs that made sense. So, I decided to investigate all the fuss about using lighttpd and FastCGI. It works, better than tracd likely, and is certainly more flexible.

Here’s my lighttpd.conf for dev.sabi.net. It essentially implements the “Global authentication” example from the TracMultipleProjects page on the Trac wiki. You need a trunk version of Trac for this to work; 0.8.x don’t have FastCGI support.

server.port         = 9013
server.document-root= "/home/nriley/web/public/"
server.indexfiles   = ( "index.html" )
server.pid-file     = "/home/nriley/var/run/lighttpd.pid"
server.errorlog     = "/home/nriley/logs/lighttpd.error.log"
accesslog.filename  = "/home/nriley/logs/lighttpd.access.log"
url.access-deny     = ( "~", ".inc" )
compress.cache-dir  = "/home/nriley/var/cache/lighttpd/compress/"
compress.filetype   = ( "text/plain", "text/html" )
fastcgi.server      = ( "/trac" =>
                       ( "trac" =>
                        ( "socket" => "/home/nriley/var/run/trac-fastcgi.sock",
                          "bin-path" => "/home/nriley/cgi-bin/trac.fcgi",
                          "bin-environment" =>
                           ( "TRAC_ENV_PARENT_DIR" => "/home/nriley/trac" )
                        )
                       )
                      )
alias.url           = ( "/media/" => "/home/nriley/share/trac/htdocs/" )
auth.backend        = "htdigest"
auth.backend.htdigest.userfile= "/home/nriley/etc/trac.digest.passwd"
$HTTP["url"] =~ "^/trac/[^/]+/login" {
    auth.require    = ( "/" =>
                       ( "method" => "digest",
                         "realm" => "sabi.net Subversion repository",
                         "require" => "user=nicholas"
                       )
                      )
}

In order for the above FastCGI association to work, I must create a file named trac in the server’s document root, so lighttpd has something to pass along to the FastCGI script. (I got this tidbit from this article on using Django with lighttpd).

I needed to use /media instead of /trac or something like /trac-common or /trac/common because I couldn’t get lighttpd to give up the FastCGI assocation with /trac.

It appears there’s nothing equivalent to “Require valid-user” in lighttpd, and the “require” statement isn’t parsed until a request is received, so you’ll need to add a bunch of users to a group and require a group, likely. The parsing error is very poorly identified, too: (http_auth.c.345) = is missing. I had to dig through the lighttpd source to see what it was referring to.

So, everything seemingly works; the only problem I’m having is my log file getting polluted with these messages:

2005-08-01 03:08:38: (mod_fastcgi.c.2110) FastCGI-stderr:  

which I’ve filed as a bug in Trac.

I also had to do some digging to figure out how to enable anonymous access to Subversion via WebDAV. The Subversion repository’s DAV interface was created as private to begin with, a sensible precaution. However, I couldn’t use <LimitExcept> to apply permissions, so instead I have a AuthzSVNAccessFile svn-access.conf that looks like this:

[dev:/]
nicholas = rw
* = r

Then I open up Apache access with Satisfy Any. Some more discussion of this technique is here.

svn.sabi.net → dev.sabi.net

svn.sabi.net is now dev.sabi.net (svn.sabi.net still works, too). I have by necessity removed some of the gimmicks such as the XML repository browser and ViewCVS, since my new web host doesn’t support the former, and Trac is much better than the latter. However, it’s no longer run from my desktop Mac and cable modem, and Trac is now using FastCGI/lighttpd instead of plain CGI/Apache, so the response time and throughput should be significantly improved.

For anyone who’s using one of the Subversion repositories, you will need to run svn switch on your working copies, as follows:

% svn switch --relocate http://svn.sabi.net/repos http://dev.sabi.net/svn

Unfortunately, Subversion does not understand HTTP redirection, and even the awesome power of mod_rewrite is not enough to save me. RewriteRule ^repos/(.+) /svn/$1 [R] gives me svn: PROPFIND of '/repos/dev/trunk/StreamVision': 301 Moved Permanently (http://svn.sabi.net), making the redirection a permanent one doesn’t help, and simply rewriting gives me:

% svn up
svn: REPORT request failed on '/svn/dev/!svn/vcc/default'
svn: 
Unusable URI: it does not refer to this repository

If you’re just using a Web browser to browse the repository, then you will be correctly redirected.

I’ve got some Apache/Trac/lighttpd configuration advice to share, but first I need to eat dinner…

Feeds fixed

WP-Cache 2.0, which caches the output of WordPress pages, broke the MIME types of my feeds, setting them to text/html; it’s still enabled for the non-XML pages I’m serving. This appears to be actually an Apache or PHP bug, but the workaround stands. And yes, I know this page doesn’t validate as XHTML at the moment; it will. I’ve temporarily changed the GUID/permalink format to include numbers, since otherwise there were many duplicate GUIDs for the ex-Radio entries that had no post titles.

Unlike it did last night, NetNewsWire appears to now correctly process the RSS 2.0 and Atom feeds. It may be because the Radio posts aged off the feed since I added the PyCS feeds in; regardless, I’m happy, and this is now my official weblog.

‹ Newer Posts  •  Older Posts ›