how to configure Munin-2.0.x to generate content with CGI (only) on Fedora?

netllama picture netllama · Oct 22, 2012 · Viewed 7.9k times · Source

I've got a 400+ node munin-1.4.x installation, that I'd like to upgrade to munin-2.x, to take advantage of the CGI based content generation (html & graphs) on the munin master server. I've gone through the official dox ( http://munin-monitoring.org/wiki/CgiHowto2 ), and its simply not working. It only covers a VirtualHost ( http://munin.example.com ), which is not my setup, but I tried to use it as a starting point.

Specifically, I want & need http://example.com/munin to be the base URL that dynamically generates the html content listing all the nodes, with links to the individual node pages (which are then dynamically generated/updated when clicked upon). The added catch is that I'm doing this on Fedora(16), and the vast majority of howto's that I've found assume Debian/Ubuntu (or assume non-cgi static content generation via cron).

The official Fedora munin package installs the following:

  • munin base directory is /var/www/html/munin
  • munin static content direcotry is /var/www/html/munin/static
  • munin cgi scripts (munin-cg-graph & munin-cg-html) are in /var/www/html/munin/cgi

What I've done so far: * set "html_strategy cgi" and "cgiurl_graph /munin/cgi/munin-cgi-html" in /etc/munin/munin.conf * Added the following to /etc/httpd/conf/httpd.conf:

# Rewrites
RewriteEngine On
Alias /static /var/www/html/munin/static
Alias /munin /var/www/html/munin
# HTML
RewriteCond %{REQUEST_URI} !^/static
RewriteCond %{REQUEST_URI} .html$ [or]
RewriteCond %{REQUEST_URI} =/
RewriteRule ^/(.*)           /var/www/html/munin/cgi/munin-cgi-html/$1 [L]
# Images
# - remove path to munin-cgi-graph, if present
RewriteRule ^/munin/cgi/munin-cgi-graph/(.*) /$1
RewriteCond %{REQUEST_URI}                 !^/static
RewriteCond %{REQUEST_URI}                 .png$
RewriteRule ^/(.*)  /var/www/html/munin/cgi/munin-cgi-graph/$1 [L]
ScriptAlias /munin/cgi/munin-cgi-graph   /var/www/html/munin/cgi/munin-cgi-graph
<Location /munin/cgi/munin-cgi-graph>
        Options +ExecCGI FollowSymLinks
        <IfModule mod_fcgid.c>
                SetHandler fcgi-script
        </IfModule>
        <IfModule !mod_fcgid.c>
                SetHandler cgi-script
        </IfModule>
</Location>
ScriptAlias /munin/cgi/munin-cgi-html   /var/www/html/munin/cgi/munin-cgi-html
<Location /munin/cgi/munin-cgi-html>
        Options +ExecCGI FollowSymLinks
        <IfModule mod_fcgid.c>
                SetHandler fcgi-script
        </IfModule>
        <IfModule !mod_fcgid.c>
                SetHandler cgi-script
        </IfModule>
</Location>

However, after doing all that (and restarting apache), when I go to http://example.com/munin , I get a 404 error, and in the apache error log I see:

File does not exist: /var/www/html/munin/cgi/munin-cgi-html/munin/index.html

I'm hoping that i'm just missing something obvious, but right now I'm at a complete loss on what else might need to be adjusted to make this work. thanks.

Answer

jhwist picture jhwist · Feb 7, 2013

The problem is that, if you use the configuration in a "location" based setup (rather than in a VirtualHost"), the flag for the RewriteRule is wrong.

As per mod_rewrite docu:

 L  Stop the rewriting process immediately and don't apply any more rules.

However, in your case you want /munin/cgi/munin-cgi-html to be passed on so that the ScriptAlias actually triggers. Thus:

 PT Forces the resulting URI to be passed back to the URL mapping engine for
    processing of other URI-to-filename translators, such as Alias or Redirect

If you change your rules to read

RewriteRule ^/(.*)  /munin/cgi/munin-cgi-html/$1 [PT]  
....  
RewriteRule ^/(.*)  /munin/cgi/munin-cgi-graph/$1 [PT]

Note the relative path, as otherwise the ScriptAlias doesn't work.