Munin development environment

Getting started

  1. Install perl
  2. Check out the munin repository
  3. Install perl dependencies
  4. Install munin in a sandbox
  5. Start munin in a sandbox
  6. Start hacking

Install perl

You need perl 5.10 or newer for munin development. Check your installed version with perl --version.

If you have an older perl, look at using perlbrew to have perl in a sandbox.

Check out the munin repository

Munin is hosted on github. Clone the git repository, and enter the work directory.

git clone https://github.com/munin-monitoring/munin
cd munin

Install perl dependencies

Munin needs a lot of perl modules. The dependencies needed to develop, test, build and run munin is listed in the Build.PL file.

With the Debian osfamily

This includes Debian, Ubuntu, and many other operating systems.

Dependencies for running Munin from the development environment.

apt install libdbd-sqlite3-perl libdbi-perl \
    libfile-copy-recursive-perl libhtml-template-perl \
    libhtml-template-pro-perl libhttp-server-simple-perl \
    libio-socket-inet6-perl liblist-moreutils-perl \
    liblog-dispatch-perl libmodule-build-perl libnet-server-perl \
    libnet-server-perl libnet-snmp-perl librrds-perl \
    libnet-ssleay-perl libparams-validate-perl liburi-perl \
    libwww-perl libxml-dumper-perl

Dependencies for running the Munin development tests:

apt install libdbd-pg-perl libfile-readbackwards-perl \
    libfile-slurp-perl libio-stringy-perl libnet-dns-perl \
    libnet-ip-perl libtest-deep-perl libtest-differences-perl \
    libtest-longstring-perl libtest-mockmodule-perl \
    libtest-mockobject-perl libtest-perl-critic-perl \
    libxml-libxml-perl libxml-parser-perl

With modules from CPAN

perl Build.PL
./Build installdeps

Install munin in a sandbox

The dev_scripts directory contains scripts to install munin in a sandbox. We also need to disable taint in the perl scripts to enable it to run outside the normal perl installation.

dev_scripts/install node
dev_scripts/disable_taint

Run munin in a sandbox

Each of these can be done in a separate terminal window, to keep the logs apart.

Start a munin node. This will start the node in the background, and tail the log. If you hit Ctrl-C, the log tailing will stop, and the node will still run in the background.

dev_scripts/start_munin-node

The contrib directory contains a daemon used for simulating a lot of munin nodes. This step is optional. First output a number of node definitions to the munin configuration, and then run the daemon in the background.

contrib/munin-node-debug -d  > sandbox/etc/munin-conf.d/nodes.debug
contrib/munin-node-debug &

Start a munin-update loop. Normally, munin-update runs from cron every 5 minutes.

while :; do dev_scripts/run munin-update; sleep 60; done &

The munin httpd listens on http://localhost:4948/ by default.

dev_scripts/run munin-httpd

Run plugins in a sandbox

Very simple plugins can be executed directly. Other plugins may require additional environment settings (e.g. for storing the plugin state or for sourcing the shell helpers). Testing a symlink configuration also requires a bit of manual preparation.

Many non-trivial situations can be simplified with the sandbox plugin wrapper dev_scripts/plugin:

dev_scripts/plugin run ./my_foo_plugin
dev_scripts/plugin run if_ suggest
dev_scripts/plugin run_as if_eth0 if_
MUNIN_CAP_MULTIGRAPH=1 dev_scripts/plugin run diskstats config
MUNIN_CAP_DIRTYCONFIG=1 dev_scripts/plugin run df

Start hacking

Make changes, restart sandboxed services as necessary.

Make a git feature branch, commit changes, publish branch to a public git repository somewhere, submit pull requests, make things happen.