Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 890
netllama Avatar asked Oct 22 '12 21:10

netllama


2 Answers

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.

like image 61
jhwist Avatar answered Nov 13 '22 12:11

jhwist


I had exactly the same problem and I struggled for a while, but I eventually came up with the following config which should do exactly what you want.

My system is Ubuntu Server 12.10. For some reasons my static files are located at /var/cache/munin/www, I'm not sure whether this is standard on Ubuntu or it was caused by my recent upgrade from Ubuntu 12.04.

    RewriteEngine On

    # HTML
    RewriteRule ^/munin/(.*\.html)?$ /munin/munin-cgi/munin-cgi-html/$1 [PT]

    # Images
    RewriteRule ^/munin/munin-cgi/munin-cgi-graph/(.*) /munin/$1
    RewriteCond %{REQUEST_URI} !^/static
    RewriteRule ^/munin/(.*.png)$ /munin/munin-cgi/munin-cgi-graph/$1 [L,PT]

    <Directory /var/cache/munin/www/>
            Order deny,allow
            Allow from all
    </Directory>

    # Ensure we can run (fast)cgi scripts
    ScriptAlias /munin/munin-cgi/munin-cgi-graph /usr/lib/cgi-bin/munin-cgi-graph
    <Location /munin/munin-cgi/munin-cgi-graph>
            Options +ExecCGI
            SetHandler fcgid-script
            Allow from all
    </Location>

    ScriptAlias /munin/munin-cgi/munin-cgi-html /usr/lib/cgi-bin/munin-cgi-html
    <Location /munin/munin-cgi/munin-cgi-html>
            Options +ExecCGI
            SetHandler fcgid-script
            Allow from all
    </Location>
like image 1
mwuertinger Avatar answered Nov 13 '22 10:11

mwuertinger