package Mogstored::HTTPServer::Apache; use strict; use base 'Mogstored::HTTPServer'; use File::Temp (); sub start { my $self = shift; my $exe = $self->{bin}; if ($exe && ! -x $exe) { die "Provided apache path $exe not valid.\n"; } unless ($exe) { # TODO: not sure where else common locations are... just guessing my @loc = qw(/usr/sbin/apache /usr/sbin/httpd ); foreach my $loc (@loc) { $exe = $loc; last if -x $exe; } unless (-x $exe) { die "Can't find apache in @loc\n"; } } my $pid = fork(); die "Can't fork: $!" unless defined $pid; if ($pid) { $self->{pid} = $pid; Mogstored->on_pid_death($pid => sub { die "apache died"; }); return; } my ($fh, $filename) = File::Temp::tempfile(); $self->{temp_conf_file} = $filename; my $portnum = $self->listen_port; my $bind_ip = $self->bind_ip; print $fh qq{ ServerType standalone ErrorLog /dev/null LoadModule dav_module /usr/lib/apache/1.3/libdav.so Listen 7500 DocumentRoot $self->{docroot} {docroot}> Options +Indexes +FollowSymLinks DAV On }; exec $exe, "-F", "-f", $filename; } sub DESTROY { my $self = shift; unlink $self->{temp_conf_file} if $self->{temp_conf_file}; } 1;