This commit is contained in:
root
2025-11-07 11:31:06 +00:00
commit 2859f93882
407 changed files with 99769 additions and 0 deletions

668
doc/Makefile Normal file
View File

@@ -0,0 +1,668 @@
# Makefile.in generated by automake 1.17 from Makefile.am.
# doc/Makefile. Generated from Makefile.in by configure.
# Copyright (C) 1994-2024 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
# Copyright (C) 2011 Tobias Oetiker
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/smokeping
pkgincludedir = $(includedir)/smokeping
pkglibdir = $(libdir)/smokeping
pkglibexecdir = $(libexecdir)/smokeping
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = doc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_$(V))
am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
{ test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
}
am__installdirs = "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(iman1dir)" \
"$(DESTDIR)$(iman3dir)" "$(DESTDIR)$(iman5dir)" \
"$(DESTDIR)$(iman7dir)"
DATA = $(etc_DATA) $(iman1_DATA) $(iman3_DATA) $(iman5_DATA) \
$(iman7_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = ${SHELL} '/root/smoke/smokeping-2.9.0/conftools/missing' aclocal-1.17
AMTAR = $${TAR-tar}
AM_DEFAULT_VERBOSITY = 1
AUTOCONF = ${SHELL} '/root/smoke/smokeping-2.9.0/conftools/missing' autoconf
AUTOHEADER = ${SHELL} '/root/smoke/smokeping-2.9.0/conftools/missing' autoheader
AUTOMAKE = ${SHELL} '/root/smoke/smokeping-2.9.0/conftools/missing' automake-1.17
AWK = mawk
CP = /usr/bin/cp
CSCOPE = cscope
CTAGS = ctags
CURL = /usr/bin/curl
CYGPATH_W = echo
DEFS = -DPACKAGE_NAME=\"smokeping\" -DPACKAGE_TARNAME=\"smokeping\" -DPACKAGE_VERSION=\"2.9.0\" -DPACKAGE_STRING=\"smokeping\ 2.9.0\" -DPACKAGE_BUGREPORT=\"tobi@oetiker.ch\" -DPACKAGE_URL=\"\" -DPACKAGE=\"smokeping\" -DVERSION=\"2.9.0\"
ECHO = /usr/bin/echo
ECHO_C =
ECHO_N = -n
ECHO_T =
ETAGS = etags
FIND = /usr/bin/find
GMAKE = /usr/bin/gmake
GREP = /usr/bin/grep
HTDOCSDIR = /usr/share/smokeping/www
INSTALL = /usr/bin/install -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LIBOBJS =
LIBS =
LN = /usr/bin/ln
LTLIBOBJS =
MAKEINFO = ${SHELL} '/root/smoke/smokeping-2.9.0/conftools/missing' makeinfo
MKDIR = /usr/bin/mkdir
MKDIR_P = /usr/bin/mkdir -p
NROFF = /usr/bin/nroff
PACKAGE = smokeping
PACKAGE_BUGREPORT = tobi@oetiker.ch
PACKAGE_NAME = smokeping
PACKAGE_STRING = smokeping 2.9.0
PACKAGE_TARNAME = smokeping
PACKAGE_URL =
PACKAGE_VERSION = 2.9.0
PATH_SEPARATOR = :
PERL = /usr/bin/perl
PERL5LIB =
RM = /usr/bin/rm
RMDIR = /usr/bin/rmdir
SED = /usr/bin/sed
SENDMAIL = /usr/sbin/sendmail
SET_MAKE =
SHELL = /bin/bash
STRIP =
URL_CAT = /usr/bin/curl --location
VERSION = 2.9.0
WGET = /usr/bin/wget
abs_builddir = /root/smoke/smokeping-2.9.0/doc
abs_srcdir = /root/smoke/smokeping-2.9.0/doc
abs_top_builddir = /root/smoke/smokeping-2.9.0
abs_top_srcdir = /root/smoke/smokeping-2.9.0
am__leading_dot = .
am__rm_f_notfound =
am__tar = tar --format=ustar -chf - "$$tardir"
am__untar = tar -xf -
am__xargs_n = xargs -n
bindir = /usr/sbin
build_alias = x86_64-linux-gnu
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
enable_pkgonly =
exec_prefix = ${prefix}
host_alias =
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${prefix}/share/info
install_sh = ${SHELL} /root/smoke/smokeping-2.9.0/conftools/install-sh
libdir = /usr/share/perl5
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = /var
mandir = ${prefix}/share/man
mkdir_p = $(MKDIR_P)
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr
program_transform_name = s,x,x,
psdir = ${docdir}
runstatedir = /run
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = /usr/share/doc/smokeping
target_alias =
top_build_prefix = ../
top_builddir = ..
top_srcdir = ..
AUTOMAKE_OPTIONS = foreign
# section 7
DOCS = smokeping_extend.pod smokeping_install.pod smokeping_master_slave.pod smokeping_upgrade.pod
# section 5
DOCSCONFIG = smokeping_config.pod smokeping_examples.pod
#PM := ../lib/Smokeping.pm ../lib/Smokeping/Examples.pm ../lib/Smokeping/RRDtools.pm
EXTRA_DIST = $(DOCS) smokeping_install.txt
PODPROBE := $(wildcard ../lib/Smokeping/probes/*.pm)
PODMATCH := $(wildcard ../lib/Smokeping/matchers/*.pm)
PODSORT := $(wildcard ../lib/Smokeping/sorters/*.pm)
DOCSBASE = $(subst .pod,,$(DOCS))
MODBASE = $(subst .pm,,$(subst ../lib/Smokeping/probes/,Smokeping_probes_,$(PODPROBE))) \
$(subst .pm,,$(subst ../lib/Smokeping/matchers/,Smokeping_matchers_,$(PODMATCH))) \
$(subst .pm,,$(subst ../lib/Smokeping/sorters/,Smokeping_sorters_,$(PODSORT)))
PROGBASE = smokeping smokeping_cgi tSmoke smokeinfo
DOCSCONFIGBASE = smokeping_config smokeping_examples
MAN3 = $(addsuffix .3,$(MODBASE))
MAN5 = $(addsuffix .5,$(DOCSCONFIGBASE))
MAN7 = $(addsuffix .7,$(DOCSBASE))
MAN1 = $(addsuffix .1,$(PROGBASE))
POD2MAN = pod2man --release=$(VERSION) --center=SmokePing $<
# we go to this trouble to ensure that MAKEPOD only uses modules in the installation directory
MAKEPOD = PERL5LIB=$(PERL5LIB) $(PERL) -I../thirdparty/lib/perl5 -I../lib -mSmokeping -e 'Smokeping::main()' -- --makepod
GENEX = PERL5LIB=$(PERL5LIB) $(PERL) -I../thirdparty/lib/perl5 -I../lib -mSmokeping -e 'Smokeping::main()' -- --gen-examples
CLEANFILES = *.[1357] smokeping_examples.pod smokeping_config.pod examples/*
iman1dir = $(mandir)/man1
iman1_DATA = $(MAN1)
iman3dir = $(mandir)/man3
iman3_DATA = $(MAN3)
iman5dir = $(mandir)/man5
iman5_DATA = $(MAN5)
iman7dir = $(mandir)/man7
iman7_DATA = $(MAN7)
EXAMPLES := $(wildcard examples/config.*)
etcdir = $(sysconfdir)/examples
etc_DATA = $(EXAMPLES)
all: all-am
.SUFFIXES:
.SUFFIXES: .1 .3 .5 .7 .txt
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign doc/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-etcDATA: $(etc_DATA)
@$(NORMAL_INSTALL)
@list='$(etc_DATA)'; test -n "$(etcdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(etcdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(etcdir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(etcdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(etcdir)" || exit $$?; \
done
uninstall-etcDATA:
@$(NORMAL_UNINSTALL)
@list='$(etc_DATA)'; test -n "$(etcdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(etcdir)'; $(am__uninstall_files_from_dir)
install-iman1DATA: $(iman1_DATA)
@$(NORMAL_INSTALL)
@list='$(iman1_DATA)'; test -n "$(iman1dir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(iman1dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(iman1dir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iman1dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(iman1dir)" || exit $$?; \
done
uninstall-iman1DATA:
@$(NORMAL_UNINSTALL)
@list='$(iman1_DATA)'; test -n "$(iman1dir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(iman1dir)'; $(am__uninstall_files_from_dir)
install-iman3DATA: $(iman3_DATA)
@$(NORMAL_INSTALL)
@list='$(iman3_DATA)'; test -n "$(iman3dir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(iman3dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(iman3dir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iman3dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(iman3dir)" || exit $$?; \
done
uninstall-iman3DATA:
@$(NORMAL_UNINSTALL)
@list='$(iman3_DATA)'; test -n "$(iman3dir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(iman3dir)'; $(am__uninstall_files_from_dir)
install-iman5DATA: $(iman5_DATA)
@$(NORMAL_INSTALL)
@list='$(iman5_DATA)'; test -n "$(iman5dir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(iman5dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(iman5dir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iman5dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(iman5dir)" || exit $$?; \
done
uninstall-iman5DATA:
@$(NORMAL_UNINSTALL)
@list='$(iman5_DATA)'; test -n "$(iman5dir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(iman5dir)'; $(am__uninstall_files_from_dir)
install-iman7DATA: $(iman7_DATA)
@$(NORMAL_INSTALL)
@list='$(iman7_DATA)'; test -n "$(iman7dir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(iman7dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(iman7dir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iman7dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(iman7dir)" || exit $$?; \
done
uninstall-iman7DATA:
@$(NORMAL_UNINSTALL)
@list='$(iman7_DATA)'; test -n "$(iman7dir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(iman7dir)'; $(am__uninstall_files_from_dir)
tags TAGS:
ctags CTAGS:
cscope cscopelist:
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
for dir in "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(iman1dir)" "$(DESTDIR)$(iman3dir)" "$(DESTDIR)$(iman5dir)" "$(DESTDIR)$(iman7dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
-$(am__rm_f) $(CLEANFILES)
distclean-generic:
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-etcDATA install-iman1DATA install-iman3DATA \
install-iman5DATA install-iman7DATA
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-etcDATA uninstall-iman1DATA \
uninstall-iman3DATA uninstall-iman5DATA uninstall-iman7DATA
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic cscopelist-am \
ctags-am distclean distclean-generic distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-etcDATA \
install-exec install-exec-am install-html install-html-am \
install-iman1DATA install-iman3DATA install-iman5DATA \
install-iman7DATA install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \
uninstall-am uninstall-etcDATA uninstall-iman1DATA \
uninstall-iman3DATA uninstall-iman5DATA uninstall-iman7DATA
.PRECIOUS: Makefile
%.7: %.pod
$(AM_V_GEN)$(POD2MAN) --section 7 > $@
%.5: %.pod
$(AM_V_GEN)$(POD2MAN) --section 5 > $@
Smokeping.3: ../lib/Smokeping.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_Examples.3: ../lib/Smokeping/Examples.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_RRDtools.3: ../lib/Smokeping/RRDtools.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_probes_%.pod: ../lib/Smokeping/probes/%.pm
$(AM_V_GEN)$(MAKEPOD) Smokeping::probes::$* > $@
Smokeping_probes_%.3: Smokeping_probes_%.pod
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_matchers_%.3: ../lib/Smokeping/matchers/%.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_sorters_%.3: ../lib/Smokeping/sorters/%.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
smokeping.1: ../bin/smokeping
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
smokeping_cgi.1: ../bin/smokeping_cgi
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
tSmoke.1: ../bin/tSmoke
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
smokeinfo.1: ../bin/smokeinfo
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
smokeping_config.pod: ../lib/Smokeping.pm
$(AM_V_GEN)$(MAKEPOD) > $@
smokeping_examples.pod: ../lib/Smokeping/Examples.pm ../etc/config.dist
$(AM_V_GEN)$(MKDIR) -p examples
$(AM_V_GEN)$(GENEX)
.1.txt .3.txt .5.txt .7.txt:
$(AM_V_GEN)GROFF_NO_SGR=1 /usr/bin/nroff -man -Tlp $< > $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

124
doc/Makefile.am Normal file
View File

@@ -0,0 +1,124 @@
# Copyright (C) 2011 Tobias Oetiker
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
AUTOMAKE_OPTIONS = foreign
# section 7
DOCS = smokeping_extend.pod smokeping_install.pod smokeping_master_slave.pod smokeping_upgrade.pod
# section 5
DOCSCONFIG = smokeping_config.pod smokeping_examples.pod
#PM := ../lib/Smokeping.pm ../lib/Smokeping/Examples.pm ../lib/Smokeping/RRDtools.pm
EXTRA_DIST = $(DOCS) smokeping_install.txt
PODPROBE := $(wildcard ../lib/Smokeping/probes/*.pm)
PODMATCH := $(wildcard ../lib/Smokeping/matchers/*.pm)
PODSORT := $(wildcard ../lib/Smokeping/sorters/*.pm)
DOCSBASE = $(subst .pod,,$(DOCS))
MODBASE = $(subst .pm,,$(subst ../lib/Smokeping/probes/,Smokeping_probes_,$(PODPROBE))) \
$(subst .pm,,$(subst ../lib/Smokeping/matchers/,Smokeping_matchers_,$(PODMATCH))) \
$(subst .pm,,$(subst ../lib/Smokeping/sorters/,Smokeping_sorters_,$(PODSORT)))
PROGBASE = smokeping smokeping_cgi tSmoke smokeinfo
DOCSCONFIGBASE = smokeping_config smokeping_examples
MAN3 = $(addsuffix .3,$(MODBASE))
MAN5 = $(addsuffix .5,$(DOCSCONFIGBASE))
MAN7 = $(addsuffix .7,$(DOCSBASE))
MAN1 = $(addsuffix .1,$(PROGBASE))
POD2MAN = pod2man --release=$(VERSION) --center=SmokePing $<
# we go to this trouble to ensure that MAKEPOD only uses modules in the installation directory
MAKEPOD= PERL5LIB=$(PERL5LIB) $(PERL) -I../thirdparty/lib/perl5 -I../lib -mSmokeping -e 'Smokeping::main()' -- --makepod
GENEX= PERL5LIB=$(PERL5LIB) $(PERL) -I../thirdparty/lib/perl5 -I../lib -mSmokeping -e 'Smokeping::main()' -- --gen-examples
%.7: %.pod
$(AM_V_GEN)$(POD2MAN) --section 7 > $@
%.5: %.pod
$(AM_V_GEN)$(POD2MAN) --section 5 > $@
Smokeping.3: ../lib/Smokeping.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_Examples.3: ../lib/Smokeping/Examples.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_RRDtools.3: ../lib/Smokeping/RRDtools.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_probes_%.pod: ../lib/Smokeping/probes/%.pm
$(AM_V_GEN)$(MAKEPOD) Smokeping::probes::$* > $@
Smokeping_probes_%.3: Smokeping_probes_%.pod
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_matchers_%.3: ../lib/Smokeping/matchers/%.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_sorters_%.3: ../lib/Smokeping/sorters/%.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
smokeping.1: ../bin/smokeping
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
smokeping_cgi.1: ../bin/smokeping_cgi
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
tSmoke.1: ../bin/tSmoke
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
smokeinfo.1: ../bin/smokeinfo
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
smokeping_config.pod: ../lib/Smokeping.pm
$(AM_V_GEN)$(MAKEPOD) > $@
smokeping_examples.pod: ../lib/Smokeping/Examples.pm ../etc/config.dist
$(AM_V_GEN)$(MKDIR) -p examples
$(AM_V_GEN)$(GENEX)
.1.txt .3.txt .5.txt .7.txt:
$(AM_V_GEN)GROFF_NO_SGR=1 @NROFF@ -man -Tlp $< > $@
CLEANFILES = *.[1357] smokeping_examples.pod smokeping_config.pod examples/*
iman1dir = $(mandir)/man1
iman1_DATA = $(MAN1)
iman3dir = $(mandir)/man3
iman3_DATA = $(MAN3)
iman5dir = $(mandir)/man5
iman5_DATA = $(MAN5)
iman7dir = $(mandir)/man7
iman7_DATA = $(MAN7)
EXAMPLES := $(wildcard examples/config.*)
etcdir = $(sysconfdir)/examples
etc_DATA = $(EXAMPLES)

668
doc/Makefile.in Normal file
View File

@@ -0,0 +1,668 @@
# Makefile.in generated by automake 1.17 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2024 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Copyright (C) 2011 Tobias Oetiker
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = doc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
{ test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
}
am__installdirs = "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(iman1dir)" \
"$(DESTDIR)$(iman3dir)" "$(DESTDIR)$(iman5dir)" \
"$(DESTDIR)$(iman7dir)"
DATA = $(etc_DATA) $(iman1_DATA) $(iman3_DATA) $(iman5_DATA) \
$(iman7_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CP = @CP@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CURL = @CURL@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ETAGS = @ETAGS@
FIND = @FIND@
GMAKE = @GMAKE@
GREP = @GREP@
HTDOCSDIR = @HTDOCSDIR@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN = @LN@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MKDIR_P = @MKDIR_P@
NROFF = @NROFF@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PERL5LIB = @PERL5LIB@
RM = @RM@
RMDIR = @RMDIR@
SED = @SED@
SENDMAIL = @SENDMAIL@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
URL_CAT = @URL_CAT@
VERSION = @VERSION@
WGET = @WGET@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
am__leading_dot = @am__leading_dot@
am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@
am__untar = @am__untar@
am__xargs_n = @am__xargs_n@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
enable_pkgonly = @enable_pkgonly@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign
# section 7
DOCS = smokeping_extend.pod smokeping_install.pod smokeping_master_slave.pod smokeping_upgrade.pod
# section 5
DOCSCONFIG = smokeping_config.pod smokeping_examples.pod
#PM := ../lib/Smokeping.pm ../lib/Smokeping/Examples.pm ../lib/Smokeping/RRDtools.pm
EXTRA_DIST = $(DOCS) smokeping_install.txt
PODPROBE := $(wildcard ../lib/Smokeping/probes/*.pm)
PODMATCH := $(wildcard ../lib/Smokeping/matchers/*.pm)
PODSORT := $(wildcard ../lib/Smokeping/sorters/*.pm)
DOCSBASE = $(subst .pod,,$(DOCS))
MODBASE = $(subst .pm,,$(subst ../lib/Smokeping/probes/,Smokeping_probes_,$(PODPROBE))) \
$(subst .pm,,$(subst ../lib/Smokeping/matchers/,Smokeping_matchers_,$(PODMATCH))) \
$(subst .pm,,$(subst ../lib/Smokeping/sorters/,Smokeping_sorters_,$(PODSORT)))
PROGBASE = smokeping smokeping_cgi tSmoke smokeinfo
DOCSCONFIGBASE = smokeping_config smokeping_examples
MAN3 = $(addsuffix .3,$(MODBASE))
MAN5 = $(addsuffix .5,$(DOCSCONFIGBASE))
MAN7 = $(addsuffix .7,$(DOCSBASE))
MAN1 = $(addsuffix .1,$(PROGBASE))
POD2MAN = pod2man --release=$(VERSION) --center=SmokePing $<
# we go to this trouble to ensure that MAKEPOD only uses modules in the installation directory
MAKEPOD = PERL5LIB=$(PERL5LIB) $(PERL) -I../thirdparty/lib/perl5 -I../lib -mSmokeping -e 'Smokeping::main()' -- --makepod
GENEX = PERL5LIB=$(PERL5LIB) $(PERL) -I../thirdparty/lib/perl5 -I../lib -mSmokeping -e 'Smokeping::main()' -- --gen-examples
CLEANFILES = *.[1357] smokeping_examples.pod smokeping_config.pod examples/*
iman1dir = $(mandir)/man1
iman1_DATA = $(MAN1)
iman3dir = $(mandir)/man3
iman3_DATA = $(MAN3)
iman5dir = $(mandir)/man5
iman5_DATA = $(MAN5)
iman7dir = $(mandir)/man7
iman7_DATA = $(MAN7)
EXAMPLES := $(wildcard examples/config.*)
etcdir = $(sysconfdir)/examples
etc_DATA = $(EXAMPLES)
all: all-am
.SUFFIXES:
.SUFFIXES: .1 .3 .5 .7 .txt
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign doc/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-etcDATA: $(etc_DATA)
@$(NORMAL_INSTALL)
@list='$(etc_DATA)'; test -n "$(etcdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(etcdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(etcdir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(etcdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(etcdir)" || exit $$?; \
done
uninstall-etcDATA:
@$(NORMAL_UNINSTALL)
@list='$(etc_DATA)'; test -n "$(etcdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(etcdir)'; $(am__uninstall_files_from_dir)
install-iman1DATA: $(iman1_DATA)
@$(NORMAL_INSTALL)
@list='$(iman1_DATA)'; test -n "$(iman1dir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(iman1dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(iman1dir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iman1dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(iman1dir)" || exit $$?; \
done
uninstall-iman1DATA:
@$(NORMAL_UNINSTALL)
@list='$(iman1_DATA)'; test -n "$(iman1dir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(iman1dir)'; $(am__uninstall_files_from_dir)
install-iman3DATA: $(iman3_DATA)
@$(NORMAL_INSTALL)
@list='$(iman3_DATA)'; test -n "$(iman3dir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(iman3dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(iman3dir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iman3dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(iman3dir)" || exit $$?; \
done
uninstall-iman3DATA:
@$(NORMAL_UNINSTALL)
@list='$(iman3_DATA)'; test -n "$(iman3dir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(iman3dir)'; $(am__uninstall_files_from_dir)
install-iman5DATA: $(iman5_DATA)
@$(NORMAL_INSTALL)
@list='$(iman5_DATA)'; test -n "$(iman5dir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(iman5dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(iman5dir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iman5dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(iman5dir)" || exit $$?; \
done
uninstall-iman5DATA:
@$(NORMAL_UNINSTALL)
@list='$(iman5_DATA)'; test -n "$(iman5dir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(iman5dir)'; $(am__uninstall_files_from_dir)
install-iman7DATA: $(iman7_DATA)
@$(NORMAL_INSTALL)
@list='$(iman7_DATA)'; test -n "$(iman7dir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(iman7dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(iman7dir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iman7dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(iman7dir)" || exit $$?; \
done
uninstall-iman7DATA:
@$(NORMAL_UNINSTALL)
@list='$(iman7_DATA)'; test -n "$(iman7dir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(iman7dir)'; $(am__uninstall_files_from_dir)
tags TAGS:
ctags CTAGS:
cscope cscopelist:
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
for dir in "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(iman1dir)" "$(DESTDIR)$(iman3dir)" "$(DESTDIR)$(iman5dir)" "$(DESTDIR)$(iman7dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
-$(am__rm_f) $(CLEANFILES)
distclean-generic:
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-etcDATA install-iman1DATA install-iman3DATA \
install-iman5DATA install-iman7DATA
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-etcDATA uninstall-iman1DATA \
uninstall-iman3DATA uninstall-iman5DATA uninstall-iman7DATA
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic cscopelist-am \
ctags-am distclean distclean-generic distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-etcDATA \
install-exec install-exec-am install-html install-html-am \
install-iman1DATA install-iman3DATA install-iman5DATA \
install-iman7DATA install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \
uninstall-am uninstall-etcDATA uninstall-iman1DATA \
uninstall-iman3DATA uninstall-iman5DATA uninstall-iman7DATA
.PRECIOUS: Makefile
%.7: %.pod
$(AM_V_GEN)$(POD2MAN) --section 7 > $@
%.5: %.pod
$(AM_V_GEN)$(POD2MAN) --section 5 > $@
Smokeping.3: ../lib/Smokeping.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_Examples.3: ../lib/Smokeping/Examples.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_RRDtools.3: ../lib/Smokeping/RRDtools.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_probes_%.pod: ../lib/Smokeping/probes/%.pm
$(AM_V_GEN)$(MAKEPOD) Smokeping::probes::$* > $@
Smokeping_probes_%.3: Smokeping_probes_%.pod
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_matchers_%.3: ../lib/Smokeping/matchers/%.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
Smokeping_sorters_%.3: ../lib/Smokeping/sorters/%.pm
$(AM_V_GEN)$(POD2MAN) --section 3 > $@
smokeping.1: ../bin/smokeping
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
smokeping_cgi.1: ../bin/smokeping_cgi
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
tSmoke.1: ../bin/tSmoke
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
smokeinfo.1: ../bin/smokeinfo
$(AM_V_GEN)$(POD2MAN) --section 1 > $@
smokeping_config.pod: ../lib/Smokeping.pm
$(AM_V_GEN)$(MAKEPOD) > $@
smokeping_examples.pod: ../lib/Smokeping/Examples.pm ../etc/config.dist
$(AM_V_GEN)$(MKDIR) -p examples
$(AM_V_GEN)$(GENEX)
.1.txt .3.txt .5.txt .7.txt:
$(AM_V_GEN)GROFF_NO_SGR=1 @NROFF@ -man -Tlp $< > $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

263
doc/smokeping_extend.pod Normal file
View File

@@ -0,0 +1,263 @@
=head1 NAME
smokeping_extend - Notes on extending Smokeping
=head1 OVERVIEW
This document is intended to guide prospective authors in writing new
Smokeping probes. It mostly describes the interface between Smokeping
and its probe modules. If it seems too complicated to understand, look
at the existing modules for examples.
Comments and proposed changes or additions are welcome. Please send
them to the smokeping-users mailing list. Patches against the POD
source of this document are most appreciated.
=head1 CHOOSING A BASE CLASS
The first thing you should decide is which base class you should use for
your probe. For most (if not all) uses it's a choice between
L<Smokeping::probes::base|Smokeping::probes::base> and
L<Smokeping::probes::basefork|Smokeping::probes::basefork>. The former is
intended for probes that can measure their targets all in one go, while the
latter is for probing them one at a time, possibly in several concurrent
subprocesses.
At the moment, the only probes that use C<Smokeping::probes::base> are the FPing
derivatives. All the others use C<Smokeping::probes::basefork>, and chances are
you should too. This document will thus concentrate on the latter case.
=head1 SKELETON FILE
The L<Smokeping::probes::skel|Smokeping::probes::skel> module is a non-functional probe that is intended
to make a good basis for a new probe module. Copy the file,
C<lib/probes/skel.pm>, to a new name and just fill out the blanks :)
Note that the names of real probe modules must start with a capital letter.
=head1 PROBE DOCUMENTATION
The probe documentation is generated from the source code with the
L<smokeping|smokeping> arguments C<--man> or C<--makepod>. The embedded
POD documentation should point to this real documentation, so
that curious users of the C<perldoc> command see what's going on.
All the current probes do this.
You should provide the method C<pod_hash> that returns a reference to
a hash with keys corresponding to the section names you want in the
manpage. The supported section names are
C<name>, C<overview>, C<description>, C<authors>, C<notes>, C<bugs>, and
C<see_also>. If you don't need a particular section, just leave it out.
The special sections C<synopsis> and C<variables> are automatically
generated from the description of your variables. See below.
Note that if you use 'here documents' ('<<') that have POD markup inside,
you should escape the markup so that it doesn't show up in the embedded
POD documentation. Most probes do it like this:
my $e = "=";
my $doc = <<DOC;
${e}head1 SECTION TITLE
DOC
=head1 PROBE DESCRIPTION
The probe should offer the C<ProbeDesc> method that returns a short
description of what it does. This will be used in the graphs produced
by the web frontend.
=head1 VARIABLES
All Smokeping probes must define their variables by implementing a
C<probevars> method for probe-specific variables and a C<targetvars>
method for target-specific variables. If you don't know the difference
between these yet, see L<smokeping_examples>.
(The probes that are derived from C<Smokeping::probes::base> don't support
target-specific variables, so they only use the C<probevars> method.)
The base classes offer these methods too to provide the variables that
are common to all the probes (eg. the probe-specific C<step> variable
and the target-specific C<pings> variable. If you don't want to add
anything to the base class variables (perhaps because all your variables
are of a target-specific nature, so you don't need new probe-specific
variables at all), you can leave the corresponding method out and it
will be inherited from the base class.
When you do supply your own C<probevars> or C<targetvars> method, you should
combine your variables with those coming from the superclass. There is a
convenience method called C<_makevars> that does this, and the common idiom is
sub probevars {
my $class = shift;
return $class->_makevars($class->SUPER::probevars, {
# your variables go here
}
}
The variables are declared in a syntax that comes from the module used
for parsing the configuration file, C<Config::Grammar>. Each variable
should be a hash that uses the "special variable keys" documented in
L<Config::Grammar>. See C<Smokeping::probes::skel> and the other
probes for examples.
For reference, here are the keys the hash should have. Much of this
is taken straight from the C<Config::Grammar> manual.
=over
=item Keys you B<must> provide
=over
=item _doc
Description of the variable.
=item _example
An example value. This will be used in the SYNOPSIS section in the
probe manual.
=back
=item Optional keys
=over
=item _default
A default value that will be assigned to the variable if none is specified or inherited.
=item _re
Regular expression upon which the value will be checked.
=item _re_error
String containing the returned error in case the regular expression
doesn't match (if not specified, a generic 'syntax error' message will
be returned).
=item _sub
A function pointer. It is called for every value, with the value passed
as its first argument. If the function returns a defined value it is
assumed that the test was not successful and an error is generated with
the returned string as content.
=back
=back
The C<probevars> and C<targetvars> methods should return hash references
that contain the variable names as keys and the hashes described above
as values. In addition the C<Config::Grammar> special section key
C<_mandatory> is supported and should contain a reference to a list of
mandatory variables. The C<_makevars> method is aware of this special
key and merges the mandatory lists in its arguments. Note that no other
C<Config::Grammar> special section keys are supported.
=head1 INITIALIZATION
If you must do something at probe initialization time, like check that
the external program you're going to use behaves as you expect, you should
do it in the C<new> method. You should probably also take care that
you don't run the tests needlessly while in CGI mode. The usual way to
do this is to test for $ENV{SERVER_SOFTWARE}. See the C<Smokeping::probes::skel>
module for an example.
=head1 PINGING
All the real action happens in the C<pingone> method (or, for
C<Smokeping::probes::base>-derived probes, in the C<ping> method.) The arguments
for C<pingone> are C<$self>, the module instance (since this is a method)
and C<$target>, the target to be probed.
You can access the probe-specific variables here via the
C<$self-E<gt>{properties}> hash and the target-specific ones via the
C<$target-E<gt>{vars}> hash. You get the number of pings needed for
the target via the C<pings> method: C<my $count = $self-E<gt>pings($target)>.
You should return a sorted array of the latency times measured. If a ping
fails, don't put anything in the array.
That's it, you're done!
=head1 EXAMPLE CONFIGURATIONS
If you would like to provide a documented example configuration for your
probe (in addition to the automatically generated SYNOPSIS section in
the probe manual), you can do so by adding it to the L<Smokeping::Examples|Smokeping::Examples>
module. Look for the 'examples' subroutine and add your example there.
Future versions of Smokeping might provide a way to embed examples in
the probe modules too. The author's motivation for implementing this
would be greatly increased by even a single demand for it, so please
speak up if you think you'd use it.
=head1 TIMEOUT HANDLING
If you deal with timeouts (for example because your program offers a parameter
for specifying the timeout for the pings), you should know a few things.
First, there's timeout logic in C<Smokeping::probes::basefork> that kills the probe
when the timeout is reached. By default the timeout is (# of pings *
5 seconds) + 1 second. If you expect that your pings can take longer,
you should modify the default value of the probe-specific variable C<timeout>.
This would be done like this:
sub probevars {
my $class = shift;
my $h = $class->SUPER::probevars;
$h->{timeout}{_default} = 10; # override the superclass default
return $class->_makevars($h, {
# your variables go here
}
}
If you want to provide a target-specific C<timeout> setting, you should
delete the probe-specific variable and be sure to provide a default for
your target-specific one. See eg. C<Smokeping::probes::AnotherDNS> for an example of
how this is done.
Providing a target-specific C<timeout> will make the timeout in
C<Smokeping::probes::basefork> be (# of pings * the maximum timeout of all targets)
+ 1 second. The 1 second is added so that the own timeout logic of the
probe has time to kick in even in the worst case (ie. all pings are lost)
before C<Smokeping::probes::basefork> starts killing the processes.
=head1 COPYRIGHT
Copyright 2005 by Niko Tyni.
=head1 LICENSE
This program is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
02139, USA.
=head1 AUTHOR
Niko Tyni <ntyni@iki.fi>
=head1 BUGS
This document makes writing new probes look much harder than it really is.
=head1 SEE ALSO
The other Smokeping documents, especially L<smokeping_config>.

188
doc/smokeping_install.pod Normal file
View File

@@ -0,0 +1,188 @@
=head1 NAME
smokeping_install - How to install SmokePing
=head1 OVERVIEW
This document explains how to setup SmokePing at your site.
=head1 DESCRIPTION
=head2 Prerequisites
SmokePing does not stand alone. It relies on various other tools and
services being present. Apart from a Unix OS and a working Perl installation
you need the following components:
=over
=item RRDtool 1.2.x or later
Smokeping uses RRDtool for logging and graphing. If your linux distro provides
an rrdtool package with perl support, use this. If you want to get the latest
and greatest version, compile your own: L<http://oss.oetiker.ch/rrdtool/>
Ubuntu:
sudo apt install rrdtool librrds-perl libssl-dev
RedHat:
sudo yum install rrdtool perl-rrdtool openssl-devel
=item FPing (optional)
Go to L<http://www.fping.org/> to grab a copy.
Note that fping must be installed setuid root. It seems that older versions
of fping report round trip times in 0.1 milliseconds instead of 1 milliseconds
as advertised ... SmokePing tries to figure this out. It tells
you when it starts ... let me know if it gets it wrong.
=item EchoPing (Optional)
L<https://github.com/bortzmeyer/echoping/>
You need this to run the EchoPing probes
=item Curl (Optional)
L<http://curl.haxx.se/>
You need this for the Curl probe.
=item dig (Optional)
L<http://www.isc.org/sw/bind/>
You need this for the DNS probe.
=item SSH (Optional)
L<http://www.openssh.org/>
You need this for the SSH probe.
=item Webserver
L<http://httpd.apache.org/>
Well I won't get much into this. The important thing is, to have a webserver
which allows you to run CGI and preferably FastCGI scripts. If you are using
Apache I strongly recommend using the F<suexec> system for running CGI
scripts as a particular user.
See L<http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html> and
L<http://httpd.apache.org/docs/2.2/mod/mod_suexec.html> for more information
on this.
=item Perl 5.10.1 or later.
If you still have an older version, maybe have a look at perlbrew.
Ubuntu:
sudo apt install perl
RedHat:
sudo yum install perl-core
=back
=head2 Installation
Once the tools listed above are in place, you can start setting up SmokePing
itself. Unpack the tar archive and run the included configure script:
./configure --prefix=/opt/smokeping
Configure will verify that all the required perl modules are available.
If some are missing it will tell you to run the module build script.
Just follow the instructions on screen and then run configure again.
Once it completes, you can run
make install
to finish your setup.
=head2 Configuration
Use the F<etc/config.dist> file as a template to create your own smokeping configuration file.
See L<smokeping_config> for details.
=over
=item Installing the webinterface
Copy the content of the F<PREFIX/htdocs> directory to the place where your webserver
expects its data. Maybe to F</var/www/smokeping>.
Edit the F<smokeping.fcgi> script to point to your smokeping_cgi script.
If you have no FastCGI support in your webserver, you may want to use the
F<smokeping.cgi> script.
=item F<etc/basepage.html>
Edit the html template to your liking. Please do not remove the link to the
SmokePing counter and my name from the template. The content of the
template will be rendered by smokeping.cgi. This means that all embedded
links must be relative to smokeping.cgi.
If you are using HTTP authentication, then the template variable C<authuser> will be populated
from the C<$ENV{REMOTE_USER}> environment variable.
=item F<etc/smokemail>
If you are going to use the B<DYNAMIC> IP support, customize the contents of this file.
=back
=head2 Starting the Smokeping Daemon
With all the scaffolding in place, you can now launch the smokeping daemon and
have it gather data for you. First you may want to run it in debug mode to see what
it is doing
./bin/smokeping --config=/opt/smokeping/etc/config --debug
once all is well, start it up as a daemon. I would recommend you enable the
logfile option so that you can see if it runs into trouble.
./bin/smokeping --config=/opt/smokeping/etc/config --logfile=smoke.log
Once the system works, you may want to put a SmokePing startup script into
your F</etc/init.d> tree. Check out L<smokeping> for further information.
You can now open the smokeping.cgi webpage to look at your data.
See the L<smokeping_cgi> documentation on how to setup the smokeping web interface.
=head1 COPYRIGHT
Copyright (c) 2001, 2011 by Tobias Oetiker. All right reserved.
=head1 LICENSE
This program is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
02139, USA.
=head1 AUTHOR
Tobias Oetiker E<lt>tobi@oetiker.chE<gt>
=cut

166
doc/smokeping_install.txt Normal file
View File

@@ -0,0 +1,166 @@
_S_M_O_K_E_P_I_N_G___I_N_S_T_A_L_L(7) SmokePing _S_M_O_K_E_P_I_N_G___I_N_S_T_A_L_L(7)
NNAAMMEE
smokeping_install - How to install SmokePing
OOVVEERRVVIIEEWW
This document explains how to setup SmokePing at your site.
DDEESSCCRRIIPPTTIIOONN
PPrreerreeqquuiissiitteess
SmokePing does not stand alone. It relies on various other tools and
services being present. Apart from a Unix OS and a working Perl
installation you need the following components:
RRDtool 1.2.x or later
Smokeping uses RRDtool for logging and graphing. If your linux
distro provides an rrdtool package with perl support, use this. If
you want to get the latest and greatest version, compile your own:
<http://oss.oetiker.ch/rrdtool/>
Ubuntu:
sudo apt install rrdtool librrds-perl libssl-dev
RedHat:
sudo yum install rrdtool perl-rrdtool openssl-devel
FPing (optional)
Go to <http://www.fping.org/> to grab a copy.
Note that fping must be installed setuid root. It seems that older
versions of fping report round trip times in 0.1 milliseconds
instead of 1 milliseconds as advertised ... SmokePing tries to
figure this out. It tells you when it starts ... let me know if it
gets it wrong.
EchoPing (Optional)
<https://github.com/bortzmeyer/echoping/>
You need this to run the EchoPing probes
Curl (Optional)
<http://curl.haxx.se/>
You need this for the Curl probe.
dig (Optional)
<http://www.isc.org/sw/bind/>
You need this for the DNS probe.
SSH (Optional)
<http://www.openssh.org/>
You need this for the SSH probe.
Webserver
<http://httpd.apache.org/>
Well I won't get much into this. The important thing is, to have a
webserver which allows you to run CGI and preferably FastCGI
scripts. If you are using Apache I strongly recommend using the
_s_u_e_x_e_c system for running CGI scripts as a particular user.
See <http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html> and
<http://httpd.apache.org/docs/2.2/mod/mod_suexec.html> for more
information on this.
Perl 5.10.1 or later.
If you still have an older version, maybe have a look at perlbrew.
Ubuntu:
sudo apt install perl
RedHat:
sudo yum install perl-core
IInnssttaallllaattiioonn
Once the tools listed above are in place, you can start setting up
SmokePing itself. Unpack the tar archive and run the included configure
script:
./configure --prefix=/opt/smokeping
Configure will verify that all the required perl modules are available.
If some are missing it will tell you to run the module build script.
Just follow the instructions on screen and then run configure again.
Once it completes, you can run
make install
to finish your setup.
CCoonnffiigguurraattiioonn
Use the _e_t_c_/_c_o_n_f_i_g_._d_i_s_t file as a template to create your own smokeping
configuration file. See smokeping_config for details.
Installing the webinterface
Copy the content of the _P_R_E_F_I_X_/_h_t_d_o_c_s directory to the place where
your webserver expects its data. Maybe to _/_v_a_r_/_w_w_w_/_s_m_o_k_e_p_i_n_g.
Edit the _s_m_o_k_e_p_i_n_g_._f_c_g_i script to point to your smokeping_cgi
script.
If you have no FastCGI support in your webserver, you may want to
use the _s_m_o_k_e_p_i_n_g_._c_g_i script.
_e_t_c_/_b_a_s_e_p_a_g_e_._h_t_m_l
Edit the html template to your liking. Please do not remove the
link to the SmokePing counter and my name from the template. The
content of the template will be rendered by smokeping.cgi. This
means that all embedded links must be relative to smokeping.cgi.
If you are using HTTP authentication, then the template variable
"authuser" will be populated from the $ENV{REMOTE_USER} environment
variable.
_e_t_c_/_s_m_o_k_e_m_a_i_l
If you are going to use the DDYYNNAAMMIICC IP support, customize the
contents of this file.
SSttaarrttiinngg tthhee SSmmookkeeppiinngg DDaaeemmoonn
With all the scaffolding in place, you can now launch the smokeping
daemon and have it gather data for you. First you may want to run it in
debug mode to see what it is doing
./bin/smokeping --config=/opt/smokeping/etc/config --debug
once all is well, start it up as a daemon. I would recommend you enable
the logfile option so that you can see if it runs into trouble.
./bin/smokeping --config=/opt/smokeping/etc/config --logfile=smoke.log
Once the system works, you may want to put a SmokePing startup script
into your _/_e_t_c_/_i_n_i_t_._d tree. Check out smokeping for further
information.
You can now open the smokeping.cgi webpage to look at your data.
See the smokeping_cgi documentation on how to setup the smokeping web
interface.
CCOOPPYYRRIIGGHHTT
Copyright (c) 2001, 2011 by Tobias Oetiker. All right reserved.
LLIICCEENNSSEE
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
675 Mass Ave, Cambridge, MA 02139, USA.
AAUUTTHHOORR
Tobias Oetiker <tobi@oetiker.ch>
2.9.0 2025-02-19 _S_M_O_K_E_P_I_N_G___I_N_S_T_A_L_L(7)

View File

@@ -0,0 +1,171 @@
=head1 NAME
smokeping_master_slave - How to run multiple distributed instances of SmokePing
=head1 OVERVIEW
Normally smokeping probes run their tests from the host where smokeping runs
to some target host and monitor the latency of the connection between the
two.
The Master/Slave concept enables all smokeping probes to run remotely. The
use case for this is to measure the overall connectivity in a network. If
you are interested in checking that your central DNS server or your file
server works for everyone, you could setup several smokeping instances
checking up on on the two servers from multiple locations within your
network. With the Master/Slave smokeping configuration this process becomes
much simpler, as one smokeping master server can control multiple slaves.
All monitoring data is stored and presented on the server, but collected by
the slaves. The slaves will also get their configuration information from
the master, so that you just have to maintain the master server
configuration file and the rest is taken care of automatically.
=head1 DESCRIPTION
=head2 Architecture
The slaves communicate with the master smokeping server via the normal
smokeping web interface. On initial startup each slave connects to the
master server and asks for its assignments. When the slave has done a round
of probing it connects to the master again to deliver the results.
If the assignment for a slave changes, the master will tell the slave after
the slave has delivered its results.
The master and the slaves sign their messages by supplying an HMAC-MD5
code (RFC 2104) of the message and a shared secret. Optionally the whole
communication can run over ssl.
[slave 1] [slave 2] [slave 3]
| | |
+-------+ | +--------+
| | |
v v v
+---------------+
| master |
+---------------+
The slave is a normal smokeping instance setup where the configuration comes
from the master instead of a local configuration file. The slave tries to
contact the master server after every round of probing, supplying its
results. If the master server can not be reached, the results will be sent
to the server together with the next round of results. Results will be
stored in a file in Perl storable form so that they survive a restart of the
smokeping instance.
=head2 Master Configuration
To configure a master/slave setup, add a slaves section to your smokeping
configuration file. Each slave has a section in the slaves part of the
master configuration file. The section name must match the hostname of the
slave. If some configuration parameter must be set to a special value for
the slave, use an override section to configure this.
The slave names must be the names the hosts think they have, not their
outside hostnames or ip addresses or anything like that. When the slave
calls the master to get its config or report its measurements it will tell
the master its 'hostname'. This together with the shared secret is used to
authenticate and identify who is who.
*** Slaves ***
secrets=/etc/smokeping/slavesecrets.conf
+slave1
display_name=erul22
location=India
color=ff0000
++override
Probes.FPing.binary = /usr/bin/fping
...
Then in the targets section you can define slaves at every level. Again the
settings get inherited by lower order targets and can be overwritten
anywhere in the tree.
A slave will then get the appropriate configuration assigned by the server.
*** Targets ***
slaves = slave1 slave2
...
+dest1
slaves =
...
+dest2
slaves = slave1
...
+dest3
...
The data from the slaves will be stored in F<TargetName~SlaveName.rrd>. So
the example above would create the following files:
dest1.rrd
dest2.rrd
dest2~slave1.rrd
dest3.rrd
dest3~slave1.rrd
dest3~slave2.rrd
The F<slavesecrets.conf> file contains a colon separated list of hostnames
and secrets.
host1:secret1
host2:secret2
=head2 Slave Configuration
A smokeping slave setup has no configuration file. It just needs to know
that it runs in slave-mode and its secret. The secret is stored in a file for
optimal protection. By default the persistent data cache will be located in
F</tmp/smokeping.$USER.cache>.
./smokeping --master-url=http://smokeping/smokeping.cgi \
--cache-dir=/var/smokeping/ \
--shared-secret=/var/smokeping/secret.txt
The F<secret.txt> file contains a single word, the secret of this slave. It
is NOT the same as the F<slavesecrets.conf> file the master uses.
=head1 SECURITY CONSIDERATIONS
The master effectively has full access to slave hosts as the user running
the slave smokeping instance. The configuration is transferred as Perl code
that is evaluated on the slave. While this is done inside a restricted
C<Safe> compartment, there are various ways that a malicious master could
embed arbitrary commands in the configuration and get them to run when the
slave probes its targets.
The strength of the shared secret is thus of paramount importance. Brute
forcing the secret would enable a man-in-the-middle to inject a malicious
new configuration and compromise the slave.
=head1 COPYRIGHT
Copyright (c) 2007 by Tobias Oetiker, OETIKER+PARTNER AG. All right reserved.
=head1 LICENSE
This program is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
02139, USA.
=head1 AUTHOR
Tobias Oetiker E<lt>tobi@oetiker.chE<gt>
=cut

419
doc/smokeping_upgrade.pod Normal file
View File

@@ -0,0 +1,419 @@
=head1 NAME
smokeping_upgrade - Notes on upgrading Smokeping
=head1 OVERVIEW
This document tries to list incompatible or otherwise user-visible changes
in Smokeping versions, with instructions on how to fix any possible
problems. It also sporadically mentions new features and the like.
The document currently starts with changes from 1.34 to 1.37. If you
run into problems with upgrading from earlier versions, please send
a description of the problems, preferably with notes on how to fix
them, to the C<smokeping-users> mailing list, so they can be added to
this document. The same applies to any problems you find with current
versions that are not documented here, of course. Patch submissions
against the POD source of this file are most appreciated.
If a version is not listed, there are no known problems in upgrading
to it from the previous release.
An official list of changes with each release can be found in the CHANGES
file in the Smokeping distribution. This document tries to complement
that with upgrading instructions etc.
=head1 2.4.2 to 2.4.3
To fix zooming for FF3.5 I prototype and scriptaculous have been updated. To
complete the fix you have to update your basepage.html too and include
effects in the scriptaculous load line
cropper/lib/scriptaculous.js?load=builder,effects,dragdrop
=head1 2.3.6 to 2.4.0
The new SmokeTrace tool was added to SmokePing. For setup instructions
read the L<smoketrace> manual page.
=head1 2.3.3 to 2.3.4
The communication protocol between master and slave has been made more
secure. This requires that BOTH master and slave are upgraded to continue
working.
=head1 2.2.x to 2.3.x
2.3.0 is mainly about new features. Check out the reference documentation on
F<hierarchies> and the target properties F<parents>, F<hidden> and
F<nomasterpoll>.
The only thing you have to take a look at, is the file F<basepage.html.dist>
which got some new css properties. Without them the results of the new
filter function will look quite bad.
=head1 2.1.x to 2.2.0
=head2 LWP Dependency
The new master/slave functionality needs the LWP::UserAgent module from
CPAN. Currently the dependency is not optional; you'll need the module
even if you are only running one Smokeping instance.
=head1 2.0.9 to 2.1.0
=head2 Echoping 6 support
This is the first Smokeping version that fully supports echoping 6. Earlier
versions of the EchoPingHttp probes don't work with echoping 6 because
of a command line incompatibility. (Echoping 5 is still supported, of course.)
This version also introduces three new probes using the new echoping plugin
interface introduced in version 6:
=over
=item *
L<EchoPingDNS|Smokeping::probes::EchoPingDNS>
=item *
L<EchoPingLDAP|Smokeping::probes::EchoPingLDAP>
=item *
L<EchoPingWhois|Smokeping::probes::EchoPingWhois>
=back
See the L<smokeping_examples> document for simple examples of using
these probes.
=head2 New method in base.pm (if you write your own probes)
The F<base.pm> module defines the method ProbeUnit. Override this if your
Probe does not return 'Seconds'. See the F<FTPtransfer.pm> for inspiration.
=head1 2.0.8 to 2.0.9
=head2 L<FPing|Smokeping::probes::FPing>
The 'timeout' variable removed in 2.0.5 has been brought back.
It is used to give the C<fping> command the C<-t> parameter,
which apparently affects the timeout of the last ping in the
counting (C<-C>) mode used by Smokeping.
=head1 2.0.5 to 2.0.6
=head2 CGI self-referring links (again)
The way Smokeping creates the self-referring links was changed once more.
See the section under '2.0.4 to 2.0.5' for a description of the previous
change.
The behaviour is now customizable via the C<linkstyle> variable in the
C<General> section of the configuration file. The default is now C<relative>,
creating links like S<<a href="?foo=bar">>. I hope this works for everybody,
but if it doesn't, see L<smokeping_config> for the alternatives.
=head1 2.0.4 to 2.0.5
=head2 L<FPing|Smokeping::probes::FPing>
The 'timeout' variable has been removed.
It was used to give the C<fping> command the C<-t> parameter,
but as this parameter is only effective in C<fping>'s I<default> mode,
while Smokeping uses the I<counting> mode (C<-c>), it never actually
did anything.
=head2 CGI self-referring links
The way Smokeping creates the self-referring links was changed. The old
behaviour used the script name but not the host part, resulting in links
like S<<a href="/path/smokeping.cgi?foo=bar">>. The new behaviour uses the
C<cgiurl> variable: the links are always absolute like
S<<a href="http://some.host/path/smokeping.cgi?foo=bar">>.
=head1 2.0.1 to 2.0.2
=head2 Edge-triggered alerts
The alert notifications can now optionally be sent only when the state of
the alert changes. This means that only the first match of the alert
generates a notification, subsequent matches don't. When the alert is
cleared, ie. there's no match anymore, another notification is sent.
This behaviour is enabled by the C<edgetrigger> variable in the C<Alerts>
section. The old behaviour (which sends a notification on each match)
is the default.
=head1 1.40 to 2.0
The biggest change with the 2.0 release is that the configuration file
is now parsed much more strictly. This should result in (hopefully
understandable) error messages making the configuration less of the
trial-and-error variety than it used to be. It also automates the
generation of the configuration documentation from the source code,
so the docs are now more accurate.
A smaller change worth mentioning is the inclusion of the tSmoke script
(contributed by Dan McGinn-Combs) for sending summary emails on daily
and weekly system status. Note that it needs the new 'tmail' variable
to be defined in the config file.
=head2 CONFIGURATION
The configuration syntax has stayed mostly the same, except for the
issues below.
=over
=item PROBE_CONF
The PROBE_CONF subsections have been deprecated. All the target-specific
variables are now configured in the same section as the target is. Just
deleting the
++ PROBE_CONF
lines should fix this (for any number of '+', obviously.)
The existence of a PROBE_CONF section makes smokeping exit with an error
message at parse time.
Note for distributors: these lines could easily be removed automatically
during upgrade.
=item Variable order
The C<probe> variable must now be set before any variables that depend on
the selected probe. This is because setting C<probe> modifies the grammar
of the rest of the section dynamically at parse time.
Additionally, C<probe> must now precede C<host>, for reasons that have
to do with the current implementation of mandatory variable checking.
Both of these errors are recognized at parse time and produce error messages
accordingly.
Note for distributors: the C<smokeping> command now has a new '--check'
option that can be used to verify the syntax of the configuration
file. It might be a good idea to do this on upgrade and give the user
an explanatory note if the verification fails.
=item Target-specific variables in the Probes section
This is not an incompatible change, but it is mentioned here nevertheless.
Target-specific variables can now be specified in the Probes section as well,
and the values given become defaults for all the targets.
=item Timeouts
The C<timeout> variable in the Probes section is now the maximum time
expected for B<one> ping to take. Previously it was the maximum time
allowed for all the pings to one target. This is an incompatible change,
but the code now works in the way it was documented to work even in 1.38.
Those probes offering a target-specific C<timeout> variable will get a
default for it from the Probes section, as noted in the previous item.
This should ensure that probes that enforce the ping timeout themselves
(most do) will not get killed due to timeout before they have a chance
to do it.
=item Matchers
The matcher modules have been renamed to start with a capital letter,
to differentiate the actual modules from the base classes. You have to
capitalize the matcher name in the pattern definition accordingly.
=item Minimum number of pings
The C<pings> variable now has an enforced minimum value of 3, as the
whole design of Smokeping is based on the idea of sending several probes
and measuring and visualizing the variation between them.
=item RRD parameter checking
Smokeping now checks at startup that the parameters of any existing RRD files
match those specified in the configuration file. If there is a discrepancy,
it will try to fix the situation and refuse to start if it can't.
This situation is most likely to happen if you have modified the
C<pings> variable in your configuration file. You'll then have to
delete the old RRD file or somehow convert it to use the new parameters.
The C<rrdtune> command might be helpful here.
=item Configurable location for DYNAMIC-related files
There is now a new configuration variable, C<dyndir>, that can be used
to specify the location of the DYNAMIC-related files (.adr and .snmp).
These files used to be kept under C<datadir> along with the RRD files,
but since they need to be writable by the web server, it may be useful
to separate these.
If C<dyndir> is not specified, Smokeping will use the C<datadir> value
as the default. This should ensure that no existing setups will break.
=back
In addition to this, some probes have had minor incompatible changes to
their configuration.
=over
=item L<RemoteFPing|Smokeping::probes::RemoteFPing>
The C<rbinary> variable is now mandatory. This is a side effect from a bigger change:
the probe is now derived from the FPing probe and supports all the variables
FPing does.
=item L<FPing6|Smokeping::probes::FPing6>
This probe is also now derived from FPing and supports all the variables FPing does.
=item L<Curl|Smokeping::probes::Curl>
The URL that will be used is now specified with the variable C<urlformat> instead
of C<url>. The new variable can (and usually should) include a placeholder
for the C<host> variable of each target as C<%host%>, eg. C<urlformat = http://%host%/>.
The new variable is mandatory.
The change was made to fix the confusing situation where the C<host> variable
was required for each actual target, but it didn't actually have any effect
(as the server to be probed came from the C<url> variable.)
Timeouts are now recognized properly by looking at the curl exit code.
The default timeout of this probe has been raised to 10 seconds.
The command line is now executed without an intervening /bin/sh, and so
quotes are not needed anymore around the User-Agent string (the C<agent>
parameter). Smokeping will complain if it notices quotes around the
string.
Any extra arguments for C<curl> can now be specified in the C<extraargs> variable.
=item L<EchoPingHttp|Smokeping::probes::EchoPingHttp>
The default timeout of this probe has been raised to 10 seconds.
=item L<EchoPingHttps|Smokeping::probes::EchoPingHttps>
The default timeout of this probe has been raised to 10 seconds.
=item L<EchoPingIcp|Smokeping::probes::EchoPingIcp>
The C<url> variable is now mandatory, as the old default "/" didn't make
sense because it's relative rather than absolute.
=item L<LDAP|Smokeping::probes::LDAP>
The C<filter> variable is now mandatory, as Net::LDAP bails out without it.
The C<sleeptime> variable was changed to C<mininterval> and its semantics
were changed accordingly (it's now the minimum time between two queries
rather than the time slept between the end of one and the start of the
another.)
=item L<Radius|Smokeping::probes::Radius>
The C<sleeptime> variable was changed to C<mininterval> and its semantics
were changed accordingly. See the LDAP explanation above.
=item L<AnotherDNS|Smokeping::probes::AnotherDNS>
The C<sleeptime> variable was changed to C<mininterval> and its semantics
were changed accordingly. See the LDAP explanation above. Additionally,
the time is now specified in seconds rather than microseconds.
=item L<AnotherSSH|Smokeping::probes::AnotherSSH>
The C<sleeptime> variable was changed to C<mininterval> and its semantics
were changed accordingly. See the LDAP explanation above. Additionally,
the time is now specified in seconds rather than microseconds.
=item L<TelnetIOSPing|Smokeping::probes::TelnetIOSPing>
The name of this probe was changed: it now starts with a capital letter
like all the others do.
The C<target> variable was removed. The target should now be specified
in the C<host> variable, like it is with all the other probes.
=back
=head2 CGI::Carp module version
The recommended version for CGI::Carp is now at least 1.24, included in
CGI.pm-2.82 and the Perl standard distribution starting from 5.8.1.
See L<the smokeping_install document|smokeping_install>.
=head1 1.38 to 1.40
=over
=item The new navigation feature
The big visible difference between 1.38 and 1.40 is the new browser navigation
feature: when clicking on the graphs in detail view you can select
different time ranges for the graph. The creation of this
feature has been sponsored by BeverlyCorp.com.
=back
=head1 1.34 to 1.37
=over
=item The L<RemoteFPing|Smokeping::probes::RemoteFPing> probe
The configuration of this probe was moved from the Targets section to the
Probes section, as all the variables are really probe-specific. The moved
variables were C<rhost>, C<rbinary> and C<rhost>.
=item Logging changes
The C<smokeping> daemon now warns at startup if syslog support is not turned on
in the config file. This is because many diagnostic messages will otherwise
get lost.
=item Concurrent probes
Each probe now runs in its own process, instead of them all running
sequentially in one process. This makes it possible to specify different
step lengths for different probes. You can get the old behaviour back
by setting 'concurrentprobes = no'.
=back
=head1 COPYRIGHT
Copyright 2005 by Niko Tyni.
=head1 LICENSE
This program is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
02139, USA.
=head1 AUTHOR
Niko Tyni <ntyni@iki.fi>
=head1 SEE ALSO
The other Smokeping documents, especially L<smokeping_config>.