| # Copyright 1999-2015 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Id$ |
| |
| EAPI=5 |
| |
| PATCHSET=1 |
| |
| inherit eutils user java-pkg-opt-2 systemd |
| |
| MY_P=${P/_/-} |
| |
| DESCRIPTION="Munin Server Monitoring Tool" |
| HOMEPAGE="http://munin-monitoring.org/" |
| SRC_URI=" |
| mirror://sourceforge/munin/${MY_P}.tar.gz |
| https://dev.gentoo.org/~jlec/distfiles/${P}-gentoo-${PATCHSET}.tar.xz" |
| |
| LICENSE="GPL-2" |
| SLOT="0" |
| KEYWORDS="~amd64 ~arm ~mips ~ppc ~x86" |
| IUSE="asterisk irc java memcached minimal mysql postgres selinux ssl test cgi ipv6 syslog ipmi http dhcpd doc apache" |
| REQUIRED_USE="cgi? ( !minimal ) apache? ( cgi )" |
| |
| # Upstream's listing of required modules is NOT correct! |
| # Some of the postgres plugins use DBD::Pg, while others call psql directly. |
| # Some of the mysql plugins use DBD::mysql, while others call mysqladmin directly. |
| # We replace the original ipmi plugins with the freeipmi_ plugin which at least works. |
| DEPEND_COM=" |
| dev-lang/perl[berkdb] |
| dev-perl/DBI |
| dev-perl/DateManip |
| dev-perl/File-Copy-Recursive |
| dev-perl/List-MoreUtils |
| dev-perl/Log-Log4perl |
| dev-perl/Net-CIDR |
| dev-perl/Net-DNS |
| dev-perl/Net-Netmask |
| dev-perl/Net-SNMP |
| dev-perl/net-server[ipv6(-)?] |
| virtual/perl-Digest-MD5 |
| virtual/perl-Getopt-Long |
| virtual/perl-MIME-Base64 |
| virtual/perl-Storable |
| virtual/perl-Text-Balanced |
| virtual/perl-Time-HiRes |
| apache? ( www-servers/apache[apache2_modules_cgi,apache2_modules_cgid,apache2_modules_rewrite] ) |
| asterisk? ( dev-perl/Net-Telnet ) |
| cgi? ( |
| dev-perl/FCGI |
| || ( |
| ( dev-perl/CGI-Fast >=dev-lang/perl-5.22 ) |
| <dev-lang/perl-5.22 |
| ) |
| ) |
| dhcpd? ( |
| >=net-misc/dhcp-3[server] |
| dev-perl/Net-IP |
| dev-perl/HTTP-Date |
| ) |
| doc? ( dev-python/sphinx ) |
| http? ( dev-perl/libwww-perl ) |
| irc? ( dev-perl/Net-IRC ) |
| kernel_linux? ( sys-process/procps ) |
| memcached? ( dev-perl/Cache-Memcached ) |
| mysql? ( |
| virtual/mysql |
| dev-perl/Cache-Cache |
| dev-perl/DBD-mysql |
| ) |
| postgres? ( dev-perl/DBD-Pg dev-db/postgresql ) |
| ssl? ( dev-perl/Net-SSLeay ) |
| syslog? ( virtual/perl-Sys-Syslog ) |
| !minimal? ( |
| dev-perl/HTML-Template |
| dev-perl/IO-Socket-INET6 |
| dev-perl/URI |
| >=net-analyzer/rrdtool-1.3[graph,perl] |
| virtual/ssh |
| ) |
| " |
| |
| # Keep this seperate, as previous versions have had other deps here |
| DEPEND="${DEPEND_COM} |
| dev-perl/Module-Build |
| java? ( >=virtual/jdk-1.5 ) |
| test? ( |
| dev-perl/Test-Deep |
| dev-perl/Test-LongString |
| dev-perl/Test-Differences |
| dev-perl/Test-MockModule |
| dev-perl/Test-MockObject |
| dev-perl/File-Slurp |
| dev-perl/IO-stringy |
| dev-perl/IO-Socket-INET6 |
| )" |
| RDEPEND="${DEPEND_COM} |
| virtual/awk |
| ipmi? ( >=sys-libs/freeipmi-1.1.6-r1 ) |
| java? ( |
| >=virtual/jre-1.5 |
| || ( net-analyzer/netcat6 net-analyzer/netcat ) |
| ) |
| !minimal? ( |
| virtual/cron |
| media-fonts/dejavu |
| ) |
| selinux? ( sec-policy/selinux-munin ) |
| !<sys-apps/openrc-0.11.8" |
| |
| S="${WORKDIR}/${MY_P}" |
| |
| pkg_setup() { |
| enewgroup munin |
| enewuser munin 177 -1 /var/lib/munin munin |
| enewuser munin-async -1 /bin/sh /var/spool/munin-async |
| esethome munin-async /var/spool/munin-async |
| java-pkg-opt-2_pkg_setup |
| } |
| |
| src_prepare() { |
| epatch "${WORKDIR}"/patches/*.patch |
| |
| java-pkg-opt-2_src_prepare |
| } |
| |
| src_configure() { |
| local cgidir='$(DESTDIR)/usr/libexec/munin/cgi' |
| use cgi || cgidir="${T}/useless/cgi-bin" |
| |
| local cgiuser=$(usex apache apache munin) |
| |
| cat >> "${S}"/Makefile.config <<- EOF |
| PREFIX=\$(DESTDIR)/usr |
| CONFDIR=\$(DESTDIR)/etc/munin |
| DOCDIR=${T}/useless/doc |
| MANDIR=\$(PREFIX)/share/man |
| LIBDIR=\$(PREFIX)/libexec/munin |
| HTMLDIR=\$(DESTDIR)/var/www/localhost/htdocs/munin |
| CGIDIR=${cgidir} |
| CGITMPDIR=\$(DESTDIR)/var/cache/munin-cgi |
| CGIUSER=${cgiuser} |
| DBDIR=\$(DESTDIR)/var/lib/munin |
| DBDIRNODE=\$(DESTDIR)/var/lib/munin-node |
| SPOOLDIR=\$(DESTDIR)/var/spool/munin-async |
| LOGDIR=\$(DESTDIR)/var/log/munin |
| PERLSITELIB=$(perl -V:vendorlib | cut -d"'" -f2) |
| JCVALID=$(usex java yes no) |
| STATEDIR=\$(DESTDIR)/run/munin |
| EOF |
| } |
| |
| # parallel make and install need to be fixed before, and I haven't |
| # gotten around to do so yet. |
| src_compile() { |
| emake -j1 |
| use doc && emake -C doc html |
| } |
| |
| src_test() { |
| if [[ ${EUID} == 0 ]]; then |
| eerror "You cannot run tests as root." |
| eerror "Please enable FEATURES=userpriv before proceeding." |
| return 1 |
| fi |
| |
| local testtargets="test-common test-node test-plugins" |
| use minimal || testtargets+=" test-master" |
| |
| LC_ALL=C emake -j1 ${testtargets} |
| } |
| |
| src_install() { |
| local dirs=" |
| /var/log/munin |
| /var/lib/munin/plugin-state |
| /etc/munin/plugin-conf.d |
| /etc/munin/plugins" |
| use minimal || dirs+=" /etc/munin/munin-conf.d/" |
| |
| keepdir ${dirs} |
| fowners munin:munin ${dirs} |
| |
| # parallel install doesn't work and it's also pointless to have this |
| # run in parallel for now (because it uses internal loops). |
| emake -j1 DESTDIR="${D}" $(usex minimal "install-minimal install-man" install) |
| |
| # we remove /run from the install, as it's not the package's to deal |
| # with. |
| rm -rf "${D}"/run || die |
| |
| # remove the plugins for non-Gentoo package managers; use -f so that |
| # it doesn't fail when installing on non-Linux platforms. |
| rm -f "${D}"/usr/libexec/munin/plugins/{apt{,_all},yum} || die |
| |
| insinto /etc/munin/plugin-conf.d/ |
| newins "${FILESDIR}"/${PN}-1.3.2-plugins.conf munin-node |
| |
| newinitd "${FILESDIR}"/munin-node_init.d_2.0.19 munin-node |
| newconfd "${FILESDIR}"/munin-node_conf.d_1.4.6-r2 munin-node |
| |
| newinitd "${FILESDIR}"/munin-asyncd.init.2 munin-asyncd |
| |
| dodir /usr/lib/tmpfiles.d |
| cat > "${D}"/usr/lib/tmpfiles.d/${CATEGORY}:${PN}:${SLOT}.conf <<- EOF |
| d /run/munin 0700 munin munin - - |
| EOF |
| |
| systemd_dounit "${FILESDIR}"/munin-async.service |
| systemd_dounit "${FILESDIR}"/munin-graph.{service,socket} |
| systemd_dounit "${FILESDIR}"/munin-html.{service,socket} |
| systemd_dounit "${FILESDIR}"/munin-node.service |
| |
| cat >> "${T}"/munin.env <<- EOF |
| CONFIG_PROTECT=/var/spool/munin-async/.ssh |
| EOF |
| newenvd "${T}"/munin.env 50munin |
| |
| dodoc README ChangeLog INSTALL |
| if use doc; then |
| cd "${S}"/doc/_build/html || die |
| docinto html |
| dodoc -r * |
| cd "${S}" || die |
| fi |
| |
| dodir /etc/logrotate.d/ |
| sed -e "s:@CGIUSER@:$(usex apache apache munin):g" \ |
| "${FILESDIR}"/logrotate.d-munin.3 > "${D}"/etc/logrotate.d/munin |
| |
| dosym ipmi_ /usr/libexec/munin/plugins/ipmi_sensor_ |
| |
| if use syslog; then |
| sed -i -e '/log_file/s| .*| Sys::Syslog|' \ |
| "${D}"/etc/munin/munin-node.conf || die |
| fi |
| |
| # Use a simpler pid file to avoid trouble with /run in tmpfs. The |
| # munin-node service is ran as user root, and only later drops |
| # privileges. |
| sed -i -e 's:/run/munin/munin-node.pid:/run/munin-node.pid:' \ |
| "${D}"/etc/munin/munin-node.conf || die |
| |
| keepdir /var/spool/munin-async/.ssh |
| touch "${D}"/var/spool/munin-async/.ssh/authorized_keys |
| fowners munin-async:munin /var/spool/munin-async{,/.ssh/{,authorized_keys}} |
| fperms 0750 /var/spool/munin-async{,/.ssh} |
| fperms 0600 /var/spool/munin-async/.ssh/authorized_keys |
| |
| if use minimal; then |
| # This requires the presence of munin-update, which is part of |
| # the non-minimal install... |
| rm "${D}"/usr/libexec/munin/plugins/munin_stats |
| else |
| # remove font files so that we don't have to keep them around |
| rm "${D}"/usr/libexec/${PN}/*.ttf || die |
| |
| if use cgi; then |
| sed -i -e '/#graph_strategy cgi/s:^#::' "${D}"/etc/munin/munin.conf || die |
| |
| keepdir /var/cache/munin-cgi |
| touch "${D}"/var/log/munin/munin-cgi-{graph,html}.log |
| fowners $(usex apache apache munin) \ |
| /var/cache/munin-cgi \ |
| /var/log/munin/munin-cgi-{graph,html}.log |
| |
| if use apache; then |
| insinto /etc/apache2/vhosts.d |
| newins "${FILESDIR}"/munin.apache.include munin.include |
| newins "${FILESDIR}"/munin.apache.include-2.4 munin-2.4.include |
| fi |
| else |
| sed \ |
| -e '/#graph_strategy cgi/s:#graph_strategy cgi:graph_strategy cron:' \ |
| -i "${D}"/etc/munin/munin.conf || die |
| fi |
| |
| keepdir /var/lib/munin/.ssh |
| cat >> "${D}"/var/lib/munin/.ssh/config <<- EOF |
| IdentityFile /var/lib/munin/.ssh/id_ecdsa |
| IdentityFile /var/lib/munin/.ssh/id_rsa |
| EOF |
| |
| fowners munin:munin /var/lib/munin/.ssh/{,config} |
| fperms go-rwx /var/lib/munin/.ssh/{,config} |
| |
| dodir /usr/share/${PN} |
| cat >> "${D}"/usr/share/${PN}/crontab <<- EOF |
| # Force the shell to bash |
| SHELL=/bin/bash |
| # Mail reports to root@, not munin@ |
| MAILTO=root |
| |
| # This runs the munin task every 5 minutes. |
| */5 * * * * /usr/bin/munin-cron |
| |
| # Alternatively, this route works differently |
| # Update once a minute (for busy sites) |
| #*/1 * * * * /usr/libexec/munin/munin-update |
| ## Check for limit excess every 2 minutes |
| #*/2 * * * * /usr/libexec/munin/munin-limits |
| ## Update graphs every 5 minutes |
| #*/5 * * * * nice /usr/libexec/munin/munin-graph |
| ## Update HTML pages every 15 minutes |
| #*/15 * * * * nice /usr/libexec/munin/munin-html |
| EOF |
| |
| cat >> "${D}"/usr/share/${PN}/fcrontab <<- EOF |
| # Mail reports to root@, not munin@, only execute one at a time |
| !mailto(root),serial(true) |
| |
| # This runs the munin task every 5 minutes. |
| @ 5 /usr/bin/munin-cron |
| |
| # Alternatively, this route works differently |
| # Update once a minute (for busy sites) |
| #@ 1 /usr/libexec/munin/munin-update |
| ## Check for limit excess every 2 minutes |
| #@ 2 /usr/libexec/munin/munin-limits |
| ## Update graphs every 5 minutes |
| #@ 5 nice /usr/libexec/munin/munin-graph |
| ## Update HTML pages every 15 minutes |
| #@ 15 nice /usr/libexec/munin/munin-html |
| EOF |
| |
| # remove .htaccess file |
| find "${D}" -name .htaccess -delete || die |
| fi |
| } |
| |
| pkg_config() { |
| if use minimal; then |
| einfo "Nothing to do." |
| return 0 |
| fi |
| |
| einfo "Press enter to install the default crontab for the munin master" |
| einfo "installation from /usr/share/${PN}/f?crontab" |
| einfo "If you have a large site, you may wish to customize it." |
| read |
| |
| ebegin "Setting up cron ..." |
| if has_version sys-process/fcron; then |
| fcrontab - -u munin < /usr/share/${PN}/fcrontab |
| else |
| # dcron is very fussy about syntax |
| # the following is the only form that works in BOTH dcron and vixie-cron |
| crontab - -u munin < /usr/share/${PN}/crontab |
| fi |
| eend $? |
| |
| einfo "Press enter to set up the SSH keys used for SSH transport" |
| read |
| |
| # generate one rsa (for legacy) and one ecdsa (for new systems) |
| ssh-keygen -t rsa \ |
| -f /var/lib/munin/.ssh/id_rsa -N '' \ |
| -C "created by portage for ${CATEGORY}/${PN}" || die |
| ssh-keygen -t ecdsa \ |
| -f /var/lib/munin/.ssh/id_ecdsa -N '' \ |
| -C "created by portage for ${CATEGORY}/${PN}" || die |
| chown -R munin:munin /var/lib/munin/.ssh || die |
| chmod 0600 /var/lib/munin/.ssh/id_{rsa,ecdsa} || die |
| |
| einfo "Your public keys are available in " |
| einfo " /var/lib/munin/.ssh/id_rsa.pub" |
| einfo " /var/lib/munin/.ssh/id_ecdsa.pub" |
| einfo "and follows for convenience" |
| echo |
| cat /var/lib/munin/.ssh/id_*.pub |
| } |
| |
| pkg_postinst() { |
| elog "Please follow the munin documentation to set up the plugins you" |
| elog "need, afterwards start munin-node." |
| elog "" |
| elog "To make use of munin-async, make sure to set up the corresponding" |
| elog "SSH key in /var/lib/munin-async/.ssh/authorized_keys" |
| elog "" |
| if ! use minimal; then |
| elog "Please run" |
| elog " emerge --config net-analyzer/munin" |
| elog "to automatically configure munin's cronjobs as well as generate" |
| elog "passwordless SSH keys to be used with munin-async." |
| fi |
| elog "" |
| elog "Further information about setting up Munin in Gentoo can be found" |
| elog "in the Gentoo Wiki: https://wiki.gentoo.org/wiki/Munin" |
| |
| if use cgi; then |
| chown $(usex apache apache munin) \ |
| "${ROOT}"/var/cache/munin-cgi \ |
| "${ROOT}"/var/log/munin/munin-cgi-{graph,html}.log |
| |
| if use apache; then |
| elog "To use Munin with CGI you should include /etc/apache2/vhosts.d/munin.include" |
| elog "or /etc/apache2/vhosts.d/munin-2.4.include (for Apache 2.4) from the virtual" |
| elog "host you want it to be served." |
| elog "If you want to enable CGI-based HTML as well, you have to add to" |
| elog "/etc/conf.d/apache2 the option -D MUNIN_HTML_CGI." |
| else |
| elog "Effective CGI support has just been added in 2.0.7-r6." |
| elog "Documentation on how to use it is still sparse." |
| fi |
| fi |
| |
| # we create this here as we don't want Portage to check /run |
| # symlinks but we still need this to be present before the reboot. |
| if ! use minimal && ! [[ -d "${ROOT}"/run/munin ]]; then |
| mkdir "${ROOT}"/run/munin |
| chown munin:munin "${ROOT}"/run/munin |
| chmod 0700 "${ROOT}"/run/munin |
| fi |
| } |