From: oetiker Date: Sun, 25 Feb 2001 23:18:40 +0000 (+0000) Subject: they do not belong into cvs ad they are autogenerated X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=commitdiff_plain;h=02533c91cee405c74416307317e8f50a41b1757d they do not belong into cvs ad they are autogenerated git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@16 a5681a0c-68f1-0310-ab6d-d61299d08faa --- diff --git a/config/config.h b/config/config.h deleted file mode 100644 index ae0be44..0000000 --- a/config/config.h +++ /dev/null @@ -1,211 +0,0 @@ -/* config/config.h. Generated automatically by configure. */ -/* config/config.h.in. Generated automatically from configure.in by autoheader. */ -#ifndef CONFIG_H -#define CONFIG_H - - -/* Define to empty if the keyword does not work. */ -/* #undef const */ - -/* Define if you don't have vprintf but do have _doprnt. */ -/* #undef HAVE_DOPRNT */ - -/* Define if you have the strftime function. */ -#define HAVE_STRFTIME 1 - -/* Define if you have the vprintf function. */ -#define HAVE_VPRINTF 1 - -/* Define if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define if you can safely include both and . */ -#define TIME_WITH_SYS_TIME 1 - -/* Define if your declares struct tm. */ -/* #undef TM_IN_SYS_TIME */ - -/* IEEE can be prevented from raising signals with fpsetmask(0) */ -/* #undef MUST_DISABLE_FPMASK */ - -/* #undef MUST_DISABLE_SIGFPE */ - -/* realloc does not support NULL as argument */ -/* #undef NO_NULL_REALLOC */ - -/* Define if you have the class function. */ -/* #undef HAVE_CLASS */ - -/* Define if you have the finite function. */ -#define HAVE_FINITE 1 - -/* Define if you have the fp_class function. */ -/* #undef HAVE_FP_CLASS */ - -/* Define if you have the fpclass function. */ -#define HAVE_FPCLASS 1 - -/* Define if you have the fpclassify function. */ -/* #undef HAVE_FPCLASSIFY */ - -/* Define if you have the getrusage function. */ -#define HAVE_GETRUSAGE 1 - -/* Define if you have the gettimeofday function. */ -#define HAVE_GETTIMEOFDAY 1 - -/* Define if you have the isinf function. */ -/* #undef HAVE_ISINF */ - -/* Define if you have the isnan function. */ -#define HAVE_ISNAN 1 - -/* Define if you have the memmove function. */ -#define HAVE_MEMMOVE 1 - -/* Define if you have the mktime function. */ -#define HAVE_MKTIME 1 - -/* Define if you have the snprintf function. */ -#define HAVE_SNPRINTF 1 - -/* Define if you have the strchr function. */ -#define HAVE_STRCHR 1 - -/* Define if you have the strerror function. */ -#define HAVE_STRERROR 1 - -/* Define if you have the vsnprintf function. */ -#define HAVE_VSNPRINTF 1 - -/* Define if you have the header file. */ -#define HAVE_FCNTL_H 1 - -/* Define if you have the header file. */ -#define HAVE_FLOAT_H 1 - -/* Define if you have the header file. */ -/* #undef HAVE_FP_CLASS_H */ - -/* Define if you have the header file. */ -#define HAVE_IEEEFP_H 1 - -/* Define if you have the header file. */ -#define HAVE_MALLOC_H 1 - -/* Define if you have the header file. */ -#define HAVE_MATH_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_PARAM_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_RESOURCE_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_TIME_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_TIMES_H 1 - -/* Define if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define if you have the m library (-lm). */ -#define HAVE_LIBM 1 - -/* Name of package */ -#define PACKAGE "rrdtool" - -/* Version number of package */ -#define VERSION "1.0.33" - - -/* define strrchr, strchr and memcpy, memmove in terms of bsd funcs - make sure you are NOT using bcopy, index or rindex in the code */ - -#if STDC_HEADERS -# include -#else -# ifndef HAVE_STRCHR -# define strchr index -# define strrchr rindex -# endif -char *strchr (), *strrchr (); -# ifndef HAVE_MEMMOVE -# define memcpy(d, s, n) bcopy ((s), (d), (n)) -# define memmove(d, s, n) bcopy ((s), (d), (n)) -# endif -#endif - - -#if NO_NULL_REALLOC -# define rrd_realloc(a,b) ( (a) == NULL ? malloc( (b) ) : realloc( (a) , (b) )) -#else -# define rrd_realloc(a,b) realloc((a), (b)) -#endif - -#if HAVE_MATH_H -# include -#endif - -#if HAVE_FLOAT_H -# include -#endif - -#if HAVE_IEEEFP_H -# include -#endif - -#if HAVE_FP_CLASS_H -# include -#endif - -/* for Solaris */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF) -#endif - -/* for OSF1 Digital Unix */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H)) -# define HAVE_ISINF 1 -# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_INFINITE) -#endif - -/* for AIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF) -#endif - -#if (! defined (HAVE_FINITE) && defined (HAVE_ISFINITE)) -# define HAVE_FINITE 1 -# define finite(a) isfinite(a) -#endif - -#if (! defined(HAVE_FINITE) && defined(HAVE_ISNAN) && defined(HAVE_ISINF)) -# define HAVE_FINITE 1 -# define finite(a) (! isnan(a) && ! isinf(a)) -#endif - -#ifndef HAVE_FINITE -#error "Can't compile without finite function" -#endif - -#ifndef HAVE_ISINF -#error "Can't compile without isinf function" -#endif - -#endif /* CONFIG_H */ - diff --git a/configure b/configure deleted file mode 100755 index bb5b3b6..0000000 --- a/configure +++ /dev/null @@ -1,4209 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: -ac_default_prefix=/usr/local/rrdtool-1.0.33 -ac_help="$ac_help - --with-tcllib=DIR location of the tclConfig.sh" -ac_help="$ac_help - --with-perl-options=[OPTIONS] options to pass on command-line when - generating Makefile from Makefile.PL" -ac_help="$ac_help - --enable-shared[=PKGS] build shared libraries [default=no]" -ac_help="$ac_help - --enable-static[=PKGS] build static libraries [default=yes]" -ac_help="$ac_help - --enable-fast-install[=PKGS] optimize for fast installation [default=yes]" -ac_help="$ac_help - --with-gnu-ld assume the C compiler uses GNU ld [default=no]" -ac_help="$ac_help - --disable-libtool-lock avoid locking (might break parallel builds)" - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.13" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=src/rrd_tool.c - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -ac_exeext= -ac_objext=o -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - - - -ac_aux_dir= -for ac_dir in config $srcdir/config; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in config $srcdir/config" 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - - - -# Do some error checking and defaulting for the host and target type. -# The inputs are: -# configure --host=HOST --target=TARGET --build=BUILD NONOPT -# -# The rules are: -# 1. You are not allowed to specify --host, --target, and nonopt at the -# same time. -# 2. Host defaults to nonopt. -# 3. If nonopt is not specified, then host defaults to the current host, -# as determined by config.guess. -# 4. Target and build default to nonopt. -# 5. If nonopt is not specified, then target and build default to host. - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -case $host---$target---$nonopt in -NONE---*---* | *---NONE---* | *---*---NONE) ;; -*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; -esac - - -# Make sure we can run config.sub. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : -else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } -fi - -echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:590: checking host system type" >&5 - -host_alias=$host -case "$host_alias" in -NONE) - case $nonopt in - NONE) - if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : - else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } - fi ;; - *) host_alias=$nonopt ;; - esac ;; -esac - -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$host" 1>&6 - -echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:611: checking target system type" >&5 - -target_alias=$target -case "$target_alias" in -NONE) - case $nonopt in - NONE) target_alias=$host_alias ;; - *) target_alias=$nonopt ;; - esac ;; -esac - -target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` -target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$target" 1>&6 - -echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:629: checking build system type" >&5 - -build_alias=$build -case "$build_alias" in -NONE) - case $nonopt in - NONE) build_alias=$host_alias ;; - *) build_alias=$nonopt ;; - esac ;; -esac - -build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` -build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$build" 1>&6 - -test "$host_alias" != "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:664: checking for a BSD compatible install" >&5 -if test -z "$INSTALL"; then -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_IFS" - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ac_t""$INSTALL" 1>&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 -echo "configure:717: checking whether build environment is sane" >&5 -# Just in case -sleep 1 -echo timestamp > conftestfile -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftestfile` - fi - if test "$*" != "X $srcdir/configure conftestfile" \ - && test "$*" != "X conftestfile $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - { echo "configure: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" 1>&2; exit 1; } - fi - - test "$2" = conftestfile - ) -then - # Ok. - : -else - { echo "configure: error: newly created file is older than distributed files! -Check your system clock" 1>&2; exit 1; } -fi -rm -f conftest* -echo "$ac_t""yes" 1>&6 -if test "$program_transform_name" = s,x,x,; then - program_transform_name= -else - # Double any \ or $. echo might interpret backslashes. - cat <<\EOF_SED > conftestsed -s,\\,\\\\,g; s,\$,$$,g -EOF_SED - program_transform_name="`echo $program_transform_name|sed -f conftestsed`" - rm -f conftestsed -fi -test "$program_prefix" != NONE && - program_transform_name="s,^,${program_prefix},; $program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" - -# sed with no file args requires a program. -test "$program_transform_name" = "" && program_transform_name="s,x,x," - -echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:774: checking whether ${MAKE-make} sets \${MAKE}" >&5 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftestmake <<\EOF -all: - @echo 'ac_maketemp="${MAKE}"' -EOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi -rm -f conftestmake -fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$ac_t""yes" 1>&6 - SET_MAKE= -else - echo "$ac_t""no" 1>&6 - SET_MAKE="MAKE=${MAKE-make}" -fi - - -PACKAGE=rrdtool - -VERSION=1.0.33 - -if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then - { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } -fi -cat >> confdefs.h <> confdefs.h <&6 -echo "configure:820: checking for working aclocal" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (aclocal --version) < /dev/null > /dev/null 2>&1; then - ACLOCAL=aclocal - echo "$ac_t""found" 1>&6 -else - ACLOCAL="$missing_dir/missing aclocal" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 -echo "configure:833: checking for working autoconf" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (autoconf --version) < /dev/null > /dev/null 2>&1; then - AUTOCONF=autoconf - echo "$ac_t""found" 1>&6 -else - AUTOCONF="$missing_dir/missing autoconf" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working automake""... $ac_c" 1>&6 -echo "configure:846: checking for working automake" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (automake --version) < /dev/null > /dev/null 2>&1; then - AUTOMAKE=automake - echo "$ac_t""found" 1>&6 -else - AUTOMAKE="$missing_dir/missing automake" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 -echo "configure:859: checking for working autoheader" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (autoheader --version) < /dev/null > /dev/null 2>&1; then - AUTOHEADER=autoheader - echo "$ac_t""found" 1>&6 -else - AUTOHEADER="$missing_dir/missing autoheader" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 -echo "configure:872: checking for working makeinfo" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (makeinfo --version) < /dev/null > /dev/null 2>&1; then - MAKEINFO=makeinfo - echo "$ac_t""found" 1>&6 -else - MAKEINFO="$missing_dir/missing makeinfo" - echo "$ac_t""missing" 1>&6 -fi - - - - - - - - - - - - -CGI_LIB_DIR=libraries/cgilib-0.4 -GD_LIB_DIR=libraries/gd1.3 -PNG_LIB_DIR=libraries/libpng-1.0.9 -ZLIB_LIB_DIR=libraries/zlib-1.1.3 - - - - - - - -# Extract the first word of "perl", so it can be a program name with args. -set dummy perl; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:909: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$PERL" in - /*) - ac_cv_path_PERL="$PERL" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_PERL="$PERL" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_PERL="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no" - ;; -esac -fi -PERL="$ac_cv_path_PERL" -if test -n "$PERL"; then - echo "$ac_t""$PERL" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test "x$PERL" = "xno"; then - COMP_PERL= -else - COMP_PERL="perl_piped perl_shared" - echo $ac_n "checking for shared library extension""... $ac_c" 1>&6 -echo "configure:947: checking for shared library extension" >&5 - SO_EXT=`$PERL -e 'use Config; if (defined $Config{so} and $Config{so} ne 'a') {print "$Config{so}\n"} else {print "so\n"};'` - echo "$ac_t""$SO_EXT" 1>&6 -fi - - - -withval="" -# Check whether --with-tcllib or --without-tcllib was given. -if test "${with_tcllib+set}" = set; then - withval="$with_tcllib" - : -fi - -found=0 -echo $ac_n "checking for tclConfig.sh in $withval""... $ac_c" 1>&6 -echo "configure:963: checking for tclConfig.sh in $withval" >&5 -if test -f "$withval/tclConfig.sh" ; then - tcl_config=$withval/tclConfig.sh - found=1 - echo "$ac_t""yes" 1>&6 - break -else - echo "$ac_t""no" 1>&6 -fi - -if test $found -eq 0 ; then - echo "configure: warning: tclConfig.sh not found - Tcl interface won't be built" 1>&2 -else - . $tcl_config -fi - -# Options to pass when configuring perl module -# Check whether --with-perl-options or --without-perl-options was given. -if test "${with_perl_options+set}" = set; then - withval="$with_perl_options" - PERL_MAKE_OPTIONS=$withval -fi - - - - - -if test x$found = x1 ; then - COMP_TCL_TRUE= - COMP_TCL_FALSE='#' -else - COMP_TCL_TRUE='#' - COMP_TCL_FALSE= -fi - - - - - - - - -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1008: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1038: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_prog_rejected=no - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - if test -z "$CC"; then - case "`uname -s`" in - *win32* | *WIN32*) - # Extract the first word of "cl", so it can be a program name with args. -set dummy cl; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1089: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="cl" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - ;; - esac - fi - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1121: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -cat > conftest.$ac_ext << EOF - -#line 1132 "configure" -#include "confdefs.h" - -main(){return(0);} -EOF -if { (eval echo configure:1137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no - else - ac_cv_prog_cc_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no -fi -rm -fr conftest* -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1163: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1168: checking whether we are using GNU C" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 - -if test $ac_cv_prog_gcc = yes; then - GCC=yes -else - GCC= -fi - -ac_test_CFLAGS="${CFLAGS+set}" -ac_save_CFLAGS="$CFLAGS" -CFLAGS= -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1196: checking whether ${CC-cc} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_cc_g=yes -else - ac_cv_prog_cc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 -if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi - -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1228: checking how to run the C preprocessor" >&5 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1249: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1266: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -nologo -E" - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1283: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" -fi - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -echo "$ac_t""$CPP" 1>&6 - - -# Check whether --enable-shared or --disable-shared was given. -if test "${enable_shared+set}" = set; then - enableval="$enable_shared" - p=${PACKAGE-default} -case "$enableval" in -yes) enable_shared=yes ;; -no) enable_shared=no ;; -*) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_shared=no -fi - - -# Check whether --enable-static or --disable-static was given. -if test "${enable_static+set}" = set; then - enableval="$enable_static" - p=${PACKAGE-default} -case "$enableval" in -yes) enable_static=yes ;; -no) enable_static=no ;; -*) - enable_static=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_static=yes -fi - -# Check whether --enable-fast-install or --disable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval="$enable_fast_install" - p=${PACKAGE-default} -case "$enableval" in -yes) enable_fast_install=yes ;; -no) enable_fast_install=no ;; -*) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_fast_install=yes -fi - -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1381: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$ac_cv_prog_gcc" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 -echo "configure:1420: checking for ld used by GCC" >&5 - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in - # Accept absolute paths. - [\\/]* | [A-Za-z]:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 -echo "configure:1444: checking for GNU ld" >&5 -else - echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 -echo "configure:1447: checking for non-GNU ld" >&5 -fi -if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - ac_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" -else - ac_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$ac_cv_path_LD" -if test -n "$LD"; then - echo "$ac_t""$LD" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi -test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } -echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1482: checking if the linker ($LD) is GNU ld" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 &5; then - ac_cv_prog_gnu_ld=yes -else - ac_cv_prog_gnu_ld=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 - - -echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 -echo "configure:1498: checking for BSD-compatible nm" >&5 -if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$NM"; then - # Let the user override the test. - ac_cv_path_NM="$NM" -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" - break - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" - break - else - ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - fi - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm -fi -fi - -NM="$ac_cv_path_NM" -echo "$ac_t""$NM" 1>&6 - -echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1534: checking whether ln -s works" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - rm -f conftestdata -if ln -s X conftestdata 2>/dev/null -then - rm -f conftestdata - ac_cv_prog_LN_S="ln -s" -else - ac_cv_prog_LN_S=ln -fi -fi -LN_S="$ac_cv_prog_LN_S" -if test "$ac_cv_prog_LN_S" = "ln -s"; then - echo "$ac_t""yes" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - -case "$target" in -NONE) lt_target="$host" ;; -*) lt_target="$target" ;; -esac - -# Check for any special flags to pass to ltconfig. -libtool_flags="--cache-file=$cache_file" -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" -test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" - - -# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval="$enable_libtool_lock" - : -fi - -test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" -test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case "$lt_target" in -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 1583 "configure"' > conftest.$ac_ext - if { (eval echo configure:1584: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - case "`/usr/bin/file conftest.o`" in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 -echo "configure:1605: checking whether the C compiler needs -belf" >&5 -if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - lt_cv_cc_needs_belf=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - lt_cv_cc_needs_belf=no -fi -rm -f conftest* -fi - -echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; - - -esac - - -# Save cache, so that ltconfig can load it -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - - -# Actually configure libtool. ac_aux_dir is where install-sh is found. -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ -LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ -DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ -$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ -|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; } - -# Reload cache, that may have been modified by ltconfig -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - -# Redirect the config.log output again, so that the ltconfig log is not -# clobbered by the next message. -exec 5>>./config.log - - -echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1720: checking for ANSI C header files" >&5 -if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -#include -#include -#include -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - ac_cv_header_stdc=yes -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -cat > conftest.$ac_ext < -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -cat > conftest.$ac_ext < -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int main () { int i; for (i = 0; i < 256; i++) -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); -exit (0); } - -EOF -if { (eval echo configure:1800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - : -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_header_stdc=no -fi -rm -fr conftest* -fi - -fi -fi - -echo "$ac_t""$ac_cv_header_stdc" 1>&6 -if test $ac_cv_header_stdc = yes; then - cat >> confdefs.h <<\EOF -#define STDC_HEADERS 1 -EOF - -fi - -for ac_hdr in fcntl.h fp_class.h malloc.h unistd.h ieeefp.h math.h sys/time.h sys/times.h sys/param.h sys/resource.h float.h -do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1827: checking for $ac_hdr" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` - cat >> confdefs.h <&6 -fi -done - - -echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:1865: checking for working const" >&5 -if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <j = 5; -} -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -} - -; return 0; } -EOF -if { (eval echo configure:1919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_const=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_c_const=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_c_const" 1>&6 -if test $ac_cv_c_const = no; then - cat >> confdefs.h <<\EOF -#define const -EOF - -fi - -echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:1940: checking whether time.h and sys/time.h may both be included" >&5 -if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -#include -#include -int main() { -struct tm *tp; -; return 0; } -EOF -if { (eval echo configure:1954: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_header_time=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_time=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_header_time" 1>&6 -if test $ac_cv_header_time = yes; then - cat >> confdefs.h <<\EOF -#define TIME_WITH_SYS_TIME 1 -EOF - -fi - -echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 -echo "configure:1975: checking whether struct tm is in sys/time.h or time.h" >&5 -if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -#include -int main() { -struct tm *tp; tp->tm_sec; -; return 0; } -EOF -if { (eval echo configure:1988: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_struct_tm=time.h -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_struct_tm=sys/time.h -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_struct_tm" 1>&6 -if test $ac_cv_struct_tm = sys/time.h; then - cat >> confdefs.h <<\EOF -#define TM_IN_SYS_TIME 1 -EOF - -fi - - -echo $ac_n "checking for acos""... $ac_c" 1>&6 -echo "configure:2010: checking for acos" >&5 -if eval "test \"`echo '$''{'ac_cv_func_acos'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char acos(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_acos) || defined (__stub___acos) -choke me -#else -acos(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2038: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_acos=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_acos=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'acos`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking for acos in -lm""... $ac_c" 1>&6 -echo "configure:2056: checking for acos in -lm" >&5 -ac_lib_var=`echo m'_'acos | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-lm $LIBS" -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_lib=HAVE_LIB`echo m | sed -e 's/^a-zA-Z0-9_/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - cat >> confdefs.h <&6 -fi - -fi - - -for ac_prog in gnroff nroff -do -# Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2110: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_NROFF'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$NROFF" in - /*) - ac_cv_path_NROFF="$NROFF" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_NROFF="$NROFF" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_NROFF="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -NROFF="$ac_cv_path_NROFF" -if test -n "$NROFF"; then - echo "$ac_t""$NROFF" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -test -n "$NROFF" && break -done - -for ac_prog in groff troff -do -# Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2150: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_TROFF'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$TROFF" in - /*) - ac_cv_path_TROFF="$TROFF" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_TROFF="$TROFF" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_TROFF="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -TROFF="$ac_cv_path_TROFF" -if test -n "$TROFF"; then - echo "$ac_t""$TROFF" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -test -n "$TROFF" && break -done - - -if test "x$GCC" = "xyes"; then - oCFLAGS=$CFLAGS - CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline" - echo $ac_n "checking if we can use GCC-specific compiler options""... $ac_c" 1>&6 -echo "configure:2190: checking if we can use GCC-specific compiler options" >&5 -if eval "test \"`echo '$''{'rd_cv_gcc_opt'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - rd_cv_gcc_opt=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - rd_cv_gcc_opt=no -fi -rm -f conftest* - - -fi - -echo "$ac_t""$rd_cv_gcc_opt" 1>&6 - if test $rd_cv_gcc_opt = no; then - CFLAGS=$oCFLAGS - fi -fi - -CFLAGS="$CFLAGS "`grep pic_flag= libtool | sed -e 's/.*pic_flag=//' -e 's/"//g'` - -case $target_os in -*hpux*) - CLFAGS=`echo $CFLAGS|sed -e 's/-fPIC/-fpic/g'` -;; -esac - -echo $ac_n "checking for strftime""... $ac_c" 1>&6 -echo "configure:2231: checking for strftime" >&5 -if eval "test \"`echo '$''{'ac_cv_func_strftime'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char strftime(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_strftime) || defined (__stub___strftime) -choke me -#else -strftime(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_strftime=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_strftime=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'strftime`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_STRFTIME 1 -EOF - -else - echo "$ac_t""no" 1>&6 -# strftime is in -lintl on SCO UNIX. -echo $ac_n "checking for strftime in -lintl""... $ac_c" 1>&6 -echo "configure:2281: checking for strftime in -lintl" >&5 -ac_lib_var=`echo intl'_'strftime | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-lintl $LIBS" -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_STRFTIME 1 -EOF - -LIBS="-lintl $LIBS" -else - echo "$ac_t""no" 1>&6 -fi - -fi - -echo $ac_n "checking for vprintf""... $ac_c" 1>&6 -echo "configure:2327: checking for vprintf" >&5 -if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char vprintf(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_vprintf) || defined (__stub___vprintf) -choke me -#else -vprintf(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_vprintf=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_vprintf=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_VPRINTF 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi - -if test "$ac_cv_func_vprintf" != yes; then -echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 -echo "configure:2379: checking for _doprnt" >&5 -if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char _doprnt(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub__doprnt) || defined (__stub____doprnt) -choke me -#else -_doprnt(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func__doprnt=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func__doprnt=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_DOPRNT 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi - -fi - - - -for ac_func in strerror snprintf vsnprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2436: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <&6 -fi -done - - -for ac_func in fpclassify -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2492: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <&6 -echo $ac_n "checking for fpclassify with ""... $ac_c" 1>&6 -echo "configure:2542: checking for fpclassify with " >&5 - cat > conftest.$ac_ext < -int main() { -float f = 0.0; fpclassify(f) -; return 0; } -EOF -if { (eval echo configure:2551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_FPCLASSIFY 1 -EOF - -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -fi -done - -for ac_func in finite -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2571: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <&6 -for ac_func in isfinite -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2623: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <&6 -echo $ac_n "checking for isfinite with ""... $ac_c" 1>&6 -echo "configure:2673: checking for isfinite with " >&5 - cat > conftest.$ac_ext < -int main() { -float f = 0.0; isfinite(f) -; return 0; } -EOF -if { (eval echo configure:2682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_ISFINITE 1 -EOF - -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -fi -done - -fi -done - -for ac_func in isinf -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2705: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <&6 -echo $ac_n "checking for isinf with ""... $ac_c" 1>&6 -echo "configure:2755: checking for isinf with " >&5 - cat > conftest.$ac_ext < -int main() { -float f = 0.0; isinf(f) -; return 0; } -EOF -if { (eval echo configure:2764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_ISINF 1 -EOF - -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -fi -done - - - -echo $ac_n "checking if realloc can deal with NULL""... $ac_c" 1>&6 -echo "configure:2784: checking if realloc can deal with NULL" >&5 -if eval "test \"`echo '$''{'rd_cv_null_realloc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < - int main(void){ - char *x = NULL; - x = realloc (x,10); - if (x==NULL) return 1; - return 0; - } -EOF -if { (eval echo configure:2802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - rd_cv_null_realloc=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - rd_cv_null_realloc=nope -fi -rm -fr conftest* -fi - -fi - -echo "$ac_t""$rd_cv_null_realloc" 1>&6 - -if test x"$rd_cv_null_realloc" = xnope; then -cat >> confdefs.h <<\EOF -#define NO_NULL_REALLOC 1 -EOF - -fi - - - - -_cflags=${CFLAGS} -echo $ac_n "checking if IEEE math works out of the box""... $ac_c" 1>&6 -echo "configure:2830: checking if IEEE math works out of the box" >&5 -if eval "test \"`echo '$''{'rd_cv_ieee_works'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < -#endif - -#if HAVE_FLOAT_H -# include -#endif - -#if HAVE_IEEEFP_H -# include -#endif - -#if HAVE_FP_CLASS_H -# include -#endif - -/* Solaris */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF) -#endif - -/* Digital UNIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H)) -# define HAVE_ISINF 1 -# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF) -#endif - -/* AIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_INFINITE) -#endif - -#include -int main(void){ - double nan,inf,c,zero; - ; - /* some math to see if we get a floating point exception */ - zero=sin(0.0); /* don't let the compiler optimize us away */ - nan=0.0/zero; /* especially here */ - inf=1.0/zero; /* and here. I want to know if it can do the magic */ - /* at run time without sig fpe */ - c = inf + nan; - c = inf / nan; - if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;} - if (nan == nan) {printf ("nan == nan ... "); return 1;} - if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;} - if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;} - if (! inf > 0) {printf ("not inf > 0 ... "); return 1;} - if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;} - return 0; - } -EOF -if { (eval echo configure:2906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - rd_cv_ieee_works=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - rd_cv_ieee_works=no -fi -rm -fr conftest* -fi - -fi - -if test x${rd_cv_ieee_works} = "xyes"; then - echo "$ac_t""yes" 1>&6 - -else - echo "$ac_t""no" 1>&6 - CFLAGS="$_cflags -ieee" - echo $ac_n "checking if IEEE math works with the -ieee switch""... $ac_c" 1>&6 -echo "configure:2927: checking if IEEE math works with the -ieee switch" >&5 -if eval "test \"`echo '$''{'rd_cv_ieee_switch'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < -#endif - -#if HAVE_FLOAT_H -# include -#endif - -#if HAVE_IEEEFP_H -# include -#endif - -#if HAVE_FP_CLASS_H -# include -#endif - -/* Solaris */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF) -#endif - -/* Digital UNIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H)) -# define HAVE_ISINF 1 -# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF) -#endif - -/* AIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_INFINITE) -#endif - -#include -int main(void){ - double nan,inf,c,zero; - ; - /* some math to see if we get a floating point exception */ - zero=sin(0.0); /* don't let the compiler optimize us away */ - nan=0.0/zero; /* especially here */ - inf=1.0/zero; /* and here. I want to know if it can do the magic */ - /* at run time without sig fpe */ - c = inf + nan; - c = inf / nan; - if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;} - if (nan == nan) {printf ("nan == nan ... "); return 1;} - if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;} - if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;} - if (! inf > 0) {printf ("not inf > 0 ... "); return 1;} - if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;} - return 0; - } -EOF -if { (eval echo configure:3003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - rd_cv_ieee_switch=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - rd_cv_ieee_switch=no -fi -rm -fr conftest* -fi - -fi - -if test x${rd_cv_ieee_switch} = "xyes"; then - echo "$ac_t""yes" 1>&6 - -else - echo "$ac_t""no" 1>&6 - CFLAGS="$_cflags -qfloat=nofold" - echo $ac_n "checking if IEEE math works with the -qfloat=nofold switch""... $ac_c" 1>&6 -echo "configure:3024: checking if IEEE math works with the -qfloat=nofold switch" >&5 -if eval "test \"`echo '$''{'rd_cv_ieee_nofold'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < -#endif - -#if HAVE_FLOAT_H -# include -#endif - -#if HAVE_IEEEFP_H -# include -#endif - -#if HAVE_FP_CLASS_H -# include -#endif - -/* Solaris */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF) -#endif - -/* Digital UNIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H)) -# define HAVE_ISINF 1 -# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF) -#endif - -/* AIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_INFINITE) -#endif - -#include -int main(void){ - double nan,inf,c,zero; - ; - /* some math to see if we get a floating point exception */ - zero=sin(0.0); /* don't let the compiler optimize us away */ - nan=0.0/zero; /* especially here */ - inf=1.0/zero; /* and here. I want to know if it can do the magic */ - /* at run time without sig fpe */ - c = inf + nan; - c = inf / nan; - if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;} - if (nan == nan) {printf ("nan == nan ... "); return 1;} - if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;} - if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;} - if (! inf > 0) {printf ("not inf > 0 ... "); return 1;} - if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;} - return 0; - } -EOF -if { (eval echo configure:3100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - rd_cv_ieee_nofold=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - rd_cv_ieee_nofold=no -fi -rm -fr conftest* -fi - -fi - -if test x${rd_cv_ieee_nofold} = "xyes"; then - echo "$ac_t""yes" 1>&6 - -else - echo "$ac_t""no" 1>&6 - CFLAGS="$_cflags -w -qflttrap=enable:zerodivide" - echo $ac_n "checking if IEEE math works with the -w -qflttrap=enable:zerodivide""... $ac_c" 1>&6 -echo "configure:3121: checking if IEEE math works with the -w -qflttrap=enable:zerodivide" >&5 -if eval "test \"`echo '$''{'rd_cv_ieee_flttrap'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < -#endif - -#if HAVE_FLOAT_H -# include -#endif - -#if HAVE_IEEEFP_H -# include -#endif - -#if HAVE_FP_CLASS_H -# include -#endif - -/* Solaris */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF) -#endif - -/* Digital UNIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H)) -# define HAVE_ISINF 1 -# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF) -#endif - -/* AIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_INFINITE) -#endif - -#include -int main(void){ - double nan,inf,c,zero; - ; - /* some math to see if we get a floating point exception */ - zero=sin(0.0); /* don't let the compiler optimize us away */ - nan=0.0/zero; /* especially here */ - inf=1.0/zero; /* and here. I want to know if it can do the magic */ - /* at run time without sig fpe */ - c = inf + nan; - c = inf / nan; - if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;} - if (nan == nan) {printf ("nan == nan ... "); return 1;} - if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;} - if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;} - if (! inf > 0) {printf ("not inf > 0 ... "); return 1;} - if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;} - return 0; - } -EOF -if { (eval echo configure:3197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - rd_cv_ieee_flttrap=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - rd_cv_ieee_flttrap=no -fi -rm -fr conftest* -fi - -fi - -if test x${rd_cv_ieee_flttrap} = "xyes"; then - echo "$ac_t""yes" 1>&6 - -else - echo "$ac_t""no" 1>&6 - CFLAGS="$_cflags -mieee" - echo $ac_n "checking if IEEE math works with the -mieee switch""... $ac_c" 1>&6 -echo "configure:3218: checking if IEEE math works with the -mieee switch" >&5 -if eval "test \"`echo '$''{'rd_cv_ieee_mswitch'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < -#endif - -#if HAVE_FLOAT_H -# include -#endif - -#if HAVE_IEEEFP_H -# include -#endif - -#if HAVE_FP_CLASS_H -# include -#endif - -/* Solaris */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF) -#endif - -/* Digital UNIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H)) -# define HAVE_ISINF 1 -# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF) -#endif - -/* AIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_INFINITE) -#endif - -#include -int main(void){ - double nan,inf,c,zero; - ; - /* some math to see if we get a floating point exception */ - zero=sin(0.0); /* don't let the compiler optimize us away */ - nan=0.0/zero; /* especially here */ - inf=1.0/zero; /* and here. I want to know if it can do the magic */ - /* at run time without sig fpe */ - c = inf + nan; - c = inf / nan; - if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;} - if (nan == nan) {printf ("nan == nan ... "); return 1;} - if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;} - if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;} - if (! inf > 0) {printf ("not inf > 0 ... "); return 1;} - if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;} - return 0; - } -EOF -if { (eval echo configure:3294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - rd_cv_ieee_mswitch=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - rd_cv_ieee_mswitch=no -fi -rm -fr conftest* -fi - -fi - -if test x${rd_cv_ieee_mswitch} = "xyes"; then - echo "$ac_t""yes" 1>&6 - -else - echo "$ac_t""no" 1>&6 - CFLAGS="$_cflags -q float=rndsngl" - echo $ac_n "checking if IEEE math works with the -q float=rndsngl switch""... $ac_c" 1>&6 -echo "configure:3315: checking if IEEE math works with the -q float=rndsngl switch" >&5 -if eval "test \"`echo '$''{'rd_cv_ieee_qswitch'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < -#endif - -#if HAVE_FLOAT_H -# include -#endif - -#if HAVE_IEEEFP_H -# include -#endif - -#if HAVE_FP_CLASS_H -# include -#endif - -/* Solaris */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF) -#endif - -/* Digital UNIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H)) -# define HAVE_ISINF 1 -# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF) -#endif - -/* AIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_INFINITE) -#endif - -#include -int main(void){ - double nan,inf,c,zero; - ; - /* some math to see if we get a floating point exception */ - zero=sin(0.0); /* don't let the compiler optimize us away */ - nan=0.0/zero; /* especially here */ - inf=1.0/zero; /* and here. I want to know if it can do the magic */ - /* at run time without sig fpe */ - c = inf + nan; - c = inf / nan; - if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;} - if (nan == nan) {printf ("nan == nan ... "); return 1;} - if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;} - if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;} - if (! inf > 0) {printf ("not inf > 0 ... "); return 1;} - if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;} - return 0; - } -EOF -if { (eval echo configure:3391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - rd_cv_ieee_qswitch=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - rd_cv_ieee_qswitch=no -fi -rm -fr conftest* -fi - -fi - -if test x${rd_cv_ieee_qswitch} = "xyes"; then - echo "$ac_t""yes" 1>&6 - -else - echo "$ac_t""no" 1>&6 - CFLAGS="$_cflags -OPT:IEEE_comparisons=ON" - echo $ac_n "checking if IEEE math works with the -OPT:IEEE_comparisons=ON switch""... $ac_c" 1>&6 -echo "configure:3412: checking if IEEE math works with the -OPT:IEEE_comparisons=ON switch" >&5 -if eval "test \"`echo '$''{'rd_cv_ieee_ieeecmpswitch'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < -#endif - -#if HAVE_FLOAT_H -# include -#endif - -#if HAVE_IEEEFP_H -# include -#endif - -#if HAVE_FP_CLASS_H -# include -#endif - -/* Solaris */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF) -#endif - -/* Digital UNIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H)) -# define HAVE_ISINF 1 -# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF) -#endif - -/* AIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_INFINITE) -#endif - -#include -int main(void){ - double nan,inf,c,zero; - ; - /* some math to see if we get a floating point exception */ - zero=sin(0.0); /* don't let the compiler optimize us away */ - nan=0.0/zero; /* especially here */ - inf=1.0/zero; /* and here. I want to know if it can do the magic */ - /* at run time without sig fpe */ - c = inf + nan; - c = inf / nan; - if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;} - if (nan == nan) {printf ("nan == nan ... "); return 1;} - if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;} - if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;} - if (! inf > 0) {printf ("not inf > 0 ... "); return 1;} - if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;} - return 0; - } -EOF -if { (eval echo configure:3488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - rd_cv_ieee_ieeecmpswitch=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - rd_cv_ieee_ieeecmpswitch=no -fi -rm -fr conftest* -fi - -fi - -if test x${rd_cv_ieee_ieeecmpswitch} = "xyes"; then - echo "$ac_t""yes" 1>&6 - -else - echo "$ac_t""no" 1>&6 - CFLAGS=$_cflags - echo $ac_n "checking if IEEE math works with fpsetmask(0)""... $ac_c" 1>&6 -echo "configure:3509: checking if IEEE math works with fpsetmask(0)" >&5 -if eval "test \"`echo '$''{'rd_cv_ieee_mask'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < - -#if HAVE_MATH_H -# include -#endif - -#if HAVE_FLOAT_H -# include -#endif - -#if HAVE_IEEEFP_H -# include -#endif - -#if HAVE_FP_CLASS_H -# include -#endif - -/* Solaris */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF) -#endif - -/* Digital UNIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H)) -# define HAVE_ISINF 1 -# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF) -#endif - -/* AIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_INFINITE) -#endif - -#include -int main(void){ - double nan,inf,c,zero; - fpsetmask(0); - /* some math to see if we get a floating point exception */ - zero=sin(0.0); /* don't let the compiler optimize us away */ - nan=0.0/zero; /* especially here */ - inf=1.0/zero; /* and here. I want to know if it can do the magic */ - /* at run time without sig fpe */ - c = inf + nan; - c = inf / nan; - if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;} - if (nan == nan) {printf ("nan == nan ... "); return 1;} - if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;} - if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;} - if (! inf > 0) {printf ("not inf > 0 ... "); return 1;} - if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;} - return 0; - } -EOF -if { (eval echo configure:3585: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - rd_cv_ieee_mask=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - rd_cv_ieee_mask=no -fi -rm -fr conftest* -fi - -fi - -if test x${rd_cv_ieee_mask} = "xyes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define MUST_DISABLE_FPMASK 1 -EOF - - PERLFLAGS="CCFLAGS=-DMUST_DISABLE_FPMASK" -else - echo "$ac_t""no" 1>&6 - echo $ac_n "checking if IEEE math works with signal(SIGFPE,SIG_IGN)""... $ac_c" 1>&6 -echo "configure:3609: checking if IEEE math works with signal(SIGFPE,SIG_IGN)" >&5 -if eval "test \"`echo '$''{'rd_cv_ieee_sigfpe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < - -#if HAVE_MATH_H -# include -#endif - -#if HAVE_FLOAT_H -# include -#endif - -#if HAVE_IEEEFP_H -# include -#endif - -#if HAVE_FP_CLASS_H -# include -#endif - -/* Solaris */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF) -#endif - -/* Digital UNIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H)) -# define HAVE_ISINF 1 -# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF) -#endif - -/* AIX */ -#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS)) -# define HAVE_ISINF 1 -# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF) -#endif - -#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE)) -# define HAVE_ISINF 1 -# define isinf(a) (fpclassify(a) == FP_INFINITE) -#endif - -#include -int main(void){ - double nan,inf,c,zero; - signal(SIGFPE,SIG_IGN); - /* some math to see if we get a floating point exception */ - zero=sin(0.0); /* don't let the compiler optimize us away */ - nan=0.0/zero; /* especially here */ - inf=1.0/zero; /* and here. I want to know if it can do the magic */ - /* at run time without sig fpe */ - c = inf + nan; - c = inf / nan; - if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;} - if (nan == nan) {printf ("nan == nan ... "); return 1;} - if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;} - if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;} - if (! inf > 0) {printf ("not inf > 0 ... "); return 1;} - if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;} - return 0; - } -EOF -if { (eval echo configure:3685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - rd_cv_ieee_sigfpe=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - rd_cv_ieee_sigfpe=no -fi -rm -fr conftest* -fi - -fi - -if test x${rd_cv_ieee_sigfpe} = "xyes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define MUST_DISABLE_SIGFPE 1 -EOF - - PERLFLAGS="CCFLAGS=-DMUST_DISABLE_SIGFPE" -else - echo "$ac_t""no" 1>&6 - { echo "configure: error: -Your Compiler does not do propper IEEE math ... Please find out how to -make IEEE math work with your compiler and let me know (oetiker@ee.ethz.ch). -Check config.log to see what went wrong ... -" 1>&2; exit 1; } -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - - - -trap '' 1 2 15 -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -DEFS=-DHAVE_CONFIG_H - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS </dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.13" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir -ac_given_INSTALL="$INSTALL" - -trap 'rm -fr `echo "examples/shared-demo.pl \ - examples/piped-demo.pl \ - examples/stripes.pl \ - examples/bigtops.pl \ - examples/minmax.pl \ - examples/cgi-demo.cgi \ - examples/Makefile \ - doc/Makefile \ - libraries/Makefile \ - libraries/cgilib-0.4/Makefile \ - libraries/gd1.3/Makefile \ - libraries/libpng-1.0.9/Makefile \ - libraries/zlib-1.1.3/Makefile \ - src/Makefile \ - bindings/Makefile \ - bindings/tcl/Makefile \ - Makefile config/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@SHELL@%$SHELL%g -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@FFLAGS@%$FFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@host@%$host%g -s%@host_alias@%$host_alias%g -s%@host_cpu@%$host_cpu%g -s%@host_vendor@%$host_vendor%g -s%@host_os@%$host_os%g -s%@target@%$target%g -s%@target_alias@%$target_alias%g -s%@target_cpu@%$target_cpu%g -s%@target_vendor@%$target_vendor%g -s%@target_os@%$target_os%g -s%@build@%$build%g -s%@build_alias@%$build_alias%g -s%@build_cpu@%$build_cpu%g -s%@build_vendor@%$build_vendor%g -s%@build_os@%$build_os%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@PACKAGE@%$PACKAGE%g -s%@VERSION@%$VERSION%g -s%@ACLOCAL@%$ACLOCAL%g -s%@AUTOCONF@%$AUTOCONF%g -s%@AUTOMAKE@%$AUTOMAKE%g -s%@AUTOHEADER@%$AUTOHEADER%g -s%@MAKEINFO@%$MAKEINFO%g -s%@SET_MAKE@%$SET_MAKE%g -s%@CGI_LIB_DIR@%$CGI_LIB_DIR%g -s%@GD_LIB_DIR@%$GD_LIB_DIR%g -s%@PNG_LIB_DIR@%$PNG_LIB_DIR%g -s%@ZLIB_LIB_DIR@%$ZLIB_LIB_DIR%g -s%@PERLFLAGS@%$PERLFLAGS%g -s%@PERL@%$PERL%g -s%@COMP_PERL@%$COMP_PERL%g -s%@SO_EXT@%$SO_EXT%g -s%@PERL_MAKE_OPTIONS@%$PERL_MAKE_OPTIONS%g -s%@COMP_TCL_TRUE@%$COMP_TCL_TRUE%g -s%@COMP_TCL_FALSE@%$COMP_TCL_FALSE%g -s%@TCL_PREFIX@%$TCL_PREFIX%g -s%@TCL_SHLIB_CFLAGS@%$TCL_SHLIB_CFLAGS%g -s%@TCL_SHLIB_LD@%$TCL_SHLIB_LD%g -s%@TCL_SHLIB_SUFFIX@%$TCL_SHLIB_SUFFIX%g -s%@TCL_PACKAGE_PATH@%$TCL_PACKAGE_PATH%g -s%@TCL_LD_SEARCH_FLAGS@%$TCL_LD_SEARCH_FLAGS%g -s%@CC@%$CC%g -s%@CPP@%$CPP%g -s%@RANLIB@%$RANLIB%g -s%@LN_S@%$LN_S%g -s%@LIBTOOL@%$LIBTOOL%g -s%@NROFF@%$NROFF%g -s%@TROFF@%$TROFF%g - -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file - else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file - fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` - fi -done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - case "$ac_given_INSTALL" in - [/$]*) INSTALL="$ac_given_INSTALL" ;; - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -s%@INSTALL@%$INSTALL%g -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -fi; done -rm -f conftest.s* - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' -ac_dC='\3' -ac_dD='%g' -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='\([ ]\)%\1#\2define\3' -ac_uC=' ' -ac_uD='\4%g' -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_eB='$%\1#\2define\3' -ac_eC=' ' -ac_eD='%g' - -if test "${CONFIG_HEADERS+set}" != set; then -EOF -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -fi -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - echo creating $ac_file - - rm -f conftest.frag conftest.in conftest.out - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - cat $ac_file_inputs > conftest.in - -EOF - -# Transform confdefs.h into a sed script conftest.vals that substitutes -# the proper values into config.h.in to produce config.h. And first: -# Protect against being on the right side of a sed subst in config.status. -# Protect against being in an unquoted here document in config.status. -rm -f conftest.vals -cat > conftest.hdr <<\EOF -s/[\\&%]/\\&/g -s%[\\$`]%\\&%g -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp -s%ac_d%ac_u%gp -s%ac_u%ac_e%gp -EOF -sed -n -f conftest.hdr confdefs.h > conftest.vals -rm -f conftest.hdr - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >> conftest.vals <<\EOF -s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% -EOF - -# Break up conftest.vals because some shells have a limit on -# the size of here documents, and old seds have small limits too. - -rm -f conftest.tail -while : -do - ac_lines=`grep -c . conftest.vals` - # grep -c gives empty output for an empty file on some AIX systems. - if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi - # Write a limited-size here document to conftest.frag. - echo ' cat > conftest.frag <> $CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS - echo 'CEOF - sed -f conftest.frag conftest.in > conftest.out - rm -f conftest.in - mv conftest.out conftest.in -' >> $CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail - rm -f conftest.vals - mv conftest.tail conftest.vals -done -rm -f conftest.vals - -cat >> $CONFIG_STATUS <<\EOF - rm -f conftest.frag conftest.h - echo "/* $ac_file. Generated automatically by configure. */" > conftest.h - cat conftest.in >> conftest.h - rm -f conftest.in - if cmp -s $ac_file conftest.h 2>/dev/null; then - echo "$ac_file is unchanged" - rm -f conftest.h - else - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - fi - rm -f $ac_file - mv conftest.h $ac_file - fi -fi; done - -EOF -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -test -z "$CONFIG_HEADERS" || echo timestamp > config/stamp-h -\ - chmod +x examples/*.cgi examples/*.pl -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - - -echo $ac_n "checking in""... $ac_c" 1>&6 -echo "configure:4181: checking in" >&5 -echo "$ac_t""and out again" 1>&6 - -echo $ac_n "ordering CD from http://ee-staff.ethz.ch/~oetiker/wish $ac_c" 1>&6 -sleep 1 -echo $ac_n ".$ac_c" 1>&6 -sleep 1 -echo $ac_n ".$ac_c" 1>&6 -sleep 1 -echo $ac_n ".$ac_c" 1>&6 -sleep 1 -echo $ac_n ".$ac_c" 1>&6 -sleep 1 -echo "$ac_t"" just kidding ;-)" 1>&6 -echo -echo "----------------------------------------------------------------" -echo "Config is DONE!" -echo -echo "Type 'make' to compile the software and use 'make install' to " -echo "install everything to: $prefix." -echo -echo "If you want to install the perl" -echo "modules in site-perl, try 'make site-perl-install'." -echo -echo " ... that wishlist is NO JOKE. If you find RRDtool useful" -echo "make me happy. Go to http://ee-staff.ethz.ch/~oetiker/wish and" -echo "place an order." -echo -echo " -- Tobi Oetiker " -echo "----------------------------------------------------------------" diff --git a/doc/test1.ps b/doc/test1.ps deleted file mode 100644 index c2299fd..0000000 --- a/doc/test1.ps +++ /dev/null @@ -1,1642 +0,0 @@ -%!PS-Adobe-3.0 -%%Creator: groff version 1.15 -%%CreationDate: Sun Feb 11 13:09:15 2001 -%%DocumentNeededResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier -%%+ font Symbol -%%DocumentSuppliedResources: procset grops 1.15 0 -%%Pages: 17 -%%PageOrder: Ascend -%%Orientation: Portrait -%%EndComments -%%BeginProlog -%%BeginResource: procset grops 1.15 0 -/setpacking where{ -pop -currentpacking -true setpacking -}if -/grops 120 dict dup begin -/SC 32 def -/A/show load def -/B{0 SC 3 -1 roll widthshow}bind def -/C{0 exch ashow}bind def -/D{0 exch 0 SC 5 2 roll awidthshow}bind def -/E{0 rmoveto show}bind def -/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def -/G{0 rmoveto 0 exch ashow}bind def -/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/I{0 exch rmoveto show}bind def -/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def -/K{0 exch rmoveto 0 exch ashow}bind def -/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/M{rmoveto show}bind def -/N{rmoveto 0 SC 3 -1 roll widthshow}bind def -/O{rmoveto 0 exch ashow}bind def -/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/Q{moveto show}bind def -/R{moveto 0 SC 3 -1 roll widthshow}bind def -/S{moveto 0 exch ashow}bind def -/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/SF{ -findfont exch -[exch dup 0 exch 0 exch neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/MF{ -findfont -[5 2 roll -0 3 1 roll -neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/level0 0 def -/RES 0 def -/PL 0 def -/LS 0 def -/MANUAL{ -statusdict begin/manualfeed true store end -}bind def -/PLG{ -gsave newpath clippath pathbbox grestore -exch pop add exch pop -}bind def -/BP{ -/level0 save def -1 setlinecap -1 setlinejoin -72 RES div dup scale -LS{ -90 rotate -}{ -0 PL translate -}ifelse -1 -1 scale -}bind def -/EP{ -level0 restore -showpage -}bind def -/DA{ -newpath arcn stroke -}bind def -/SN{ -transform -.25 sub exch .25 sub exch -round .25 add exch round .25 add exch -itransform -}bind def -/DL{ -SN -moveto -SN -lineto stroke -}bind def -/DC{ -newpath 0 360 arc closepath -}bind def -/TM matrix def -/DE{ -TM currentmatrix pop -translate scale newpath 0 0 .5 0 360 arc closepath -TM setmatrix -}bind def -/RC/rcurveto load def -/RL/rlineto load def -/ST/stroke load def -/MT/moveto load def -/CL/closepath load def -/FL{ -currentgray exch setgray fill setgray -}bind def -/BL/fill load def -/LW/setlinewidth load def -/RE{ -findfont -dup maxlength 1 index/FontName known not{1 add}if dict begin -{ -1 index/FID ne{def}{pop pop}ifelse -}forall -/Encoding exch def -dup/FontName exch def -currentdict end definefont pop -}bind def -/DEFS 0 def -/EBEGIN{ -moveto -DEFS begin -}bind def -/EEND/end load def -/CNT 0 def -/level1 0 def -/PBEGIN{ -/level1 save def -translate -div 3 1 roll div exch scale -neg exch neg exch translate -0 setgray -0 setlinecap -1 setlinewidth -0 setlinejoin -10 setmiterlimit -[]0 setdash -/setstrokeadjust where{ -pop -false setstrokeadjust -}if -/setoverprint where{ -pop -false setoverprint -}if -newpath -/CNT countdictstack def -userdict begin -/showpage{}def -}bind def -/PEND{ -clear -countdictstack CNT sub{end}repeat -level1 restore -}bind def -end def -/setpacking where{ -pop -setpacking -}if -%%EndResource -%%IncludeResource: font Times-Roman -%%IncludeResource: font Times-Bold -%%IncludeResource: font Courier -%%IncludeResource: font Symbol -grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 -def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron -/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent -/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen -/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon -/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O -/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex -/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y -/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft -/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl -/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut -/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash -/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen -/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft -/logicalnot/minus/registered/macron/degree/plusminus/twosuperior -/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior -/ordmasculine/guilsinglright/onequarter/onehalf/threequarters -/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE -/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex -/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis -/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn -/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla -/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis -/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash -/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def -/Courier@0 ENC0/Courier RE/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 -ENC0/Times-Roman RE -%%EndProlog -%%Page: 1 1 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 9/Times-Bold@0 SF 10.562 -6.496(NN AA)72 96 -T -8.494(MM)6.496 G 12.002 -6.001(EE /)8.494 H 2.25(/N)3.501 G(NO)-8.746 -E(OM)-7 E(MB)-8.494 E(BR)-6.001 E(RE)-6.496 E(E)-6.001 E F0 .715 -(rrdtutorial \255 T)108 108 R .715(utorial sobre RRDtool por Ale)-.45 F -3.215(xv)-.15 G .715(an den Bog)-3.465 F .715(aerdt \(T)-.05 F .714 -(raducido al castellano por Jes\372s Couto)-.35 F -.15(Fa)108 120 S -(ndi\361o\)).15 E F1 -6.496(DD)72 136.8 S -6.001(EE)6.496 G -5.002(SS) -6.001 G -6.496(CC)5.002 G -6.496(RR)6.496 G -3.499(II)6.496 G -5.497(PP) -3.499 G -6.001(TT)5.497 G -3.499(II)6.001 G -7(OO)3.499 G 12.992 -6.496 -(NN /)7 H 2.25(/D)3.996 G(DE)-8.746 E(ES)-6.001 E(SC)-5.002 E(CR)-6.496 -E(RI)-6.496 E(IP)-3.499 E(PC)-5.497 E(CI)-6.496 E<49d3>-3.499 E-7 -E(N)-6.496 E F0 1.022(RRDtool es un programa escrito por T)108 148.8 R -1.022(obias Oetik)-.8 F 1.022 -(er con la colaboraci\363n de muchas personas en di)-.1 F -.15(ve)-.25 G -(rsas).15 E .003(partes del mundo. Ale)108 160.8 R 2.503(xv)-.15 G .003 -(an den Bog)-2.753 F .002(aerdt escribi\363 este documento para ayudart\ -e a entender que es RRDtool)-.05 F 2.5(yq)108 172.8 S -(ue es lo que puede hacer por ti.)-2.5 E .854(La documentaci\363n que v\ -iene con RRDtool puede ser demasiado t\351cnica para algunos. Este tuto\ -rial e)108 189.6 R(xiste)-.15 E .429(para ayudarte a entender las funci\ -ones b\341sicas de RRdtool. Debe servirte de preparaci\363n para leer l\ -a docu-)108 201.6 R .518(mentaci\363n, y adem\341s e)108 213.6 R .519(x\ -plica algunas ideas generales sobre estad\355stica, con un enfoque part\ -icular hacia las)-.15 F(redes.)108 225.6 Q F1 -6.001(TT)72 242.4 S --6.496(UU)6.001 G 9.59 -6.001(TT O)6.496 H(OR)-.999 E(RI)-6.496 E(IA) --3.499 E(AL)-6.496 E(L)-6.001 E/F2 10/Times-Bold@0 SF -3.888(II)108 -254.4 S -8.328(mm)3.888 G -5.558(pp)8.328 G -4.998(oo)5.558 G -4.438(rr) -4.998 G -3.328(tt)4.438 G -4.998(aa)3.328 G -5.558(nn)4.998 G -3.328(tt) -5.558 G -4.438(ee)3.328 G F0 1.291(\241Por f)108 271.2 R -.2(avo)-.1 G -2.091 -.4(r, n).2 H 3.791(ot).4 G 3.791(ea)-3.791 G 1.291 -(delantes en la lectura de este documento! Esta primera parte e)-3.791 F -1.29(xplica los fundamentos)-.15 F .077(b\341sicos. Puede ser ab)108 -283.2 R .078 -(urrida, pero si te saltas los fundamentos, los ejemplos no te v)-.2 F -.078(an a tener mucho sentido.)-.25 F F2 -4.998108 306 S -7.778 -(QQ)4.998 G -5.558(uu)7.778 G 8.876 -4.4385.558 H 7.776 --3.888(ss R)4.438 H(RR)-3.33 E(RD)-7.218 E(Dt)-7.218 E(to)-3.328 E(oo) --4.998 E(ol)-4.998 E(l?)-2.778 E(?)-4.998 E F0 1.281 -(RRDtool signi\214ca `)108 322.8 R 1.281 -(`herramienta de bases de datos en round robin')-.74 F 3.781('. `)-.74 F -1.28(`Round robin')-.74 F 3.78('e)-.74 G 3.78(su)-3.78 G 1.28 -(na t\351cnica que)-3.78 F .793(implica un n\372mero \214jo de datos, y\ - un apuntador al elemento m\341s reciente. Piensa en un circulo con uno\ -s)108 334.8 R 1.21(cuantos puntos dib)108 346.8 R 1.209 -(ujados alrededor del borde; estos puntos son los lug)-.2 F 1.209 -(ares donde se pueden guardar los)-.05 F .09(datos. Dib)108 358.8 R .091 -(uja ahora una \215echa desde el centro del c\355rculo a uno de los pun\ -tos; este es el apuntador)-.2 F 5.091(.C)-.55 G(uando)-5.091 E .718 -(se lee o escribe el dato actualmente apuntado, la \215echa se mue)108 -370.8 R 1.017 -.15(ve a)-.25 H 3.217(lp).15 G .717 -(r\363ximo elemento. Como estamos en)-3.217 F 1.456 -(un c\355rculo, no hay ni principio ni \214n; siempre puedes se)108 -382.8 R(guir)-.15 E 3.957(,e)-.4 G 1.457 -(ternamente. Al cabo de un tiempo ya se)-3.957 F .234(habr\341n usado t\ -odas las posiciones disponibles y el proceso empieza a reutilizar las a\ -ntiguas. De esta forma,)108 394.8 R .862 -(la base de datos no crece en tama\361o y)108 406.8 R 3.362(,p)-.65 G -.863(or lo tanto, no requiere ning\372n mantenimiento.)-3.362 F .863 -(RRDtool trabaja)5.863 F(con estas bases de datos en `)108 418.8 Q -(`round-robin')-.74 E(', guardando y recuperando datos de ellas.)-.74 E -F2 -4.998108 441.6 S -7.778(QQ)4.998 G -5.558(uu)7.778 G 8.876 --4.4385.558 H(da)-1.12 E(at)-4.998 E(to)-3.328 E(os)-4.998 E -2.5(sp)-3.888 G(pu)-8.058 E(ue)-5.558 E(ed)-4.438 E(de)-5.558 E(en) --4.438 E 2.5(ng)-5.558 G(gu)-7.498 E(ua)-5.558 E(ar)-4.998 E(rd)-4.438 E -(da)-5.558 E(ar)-4.998 E(rs)-4.438 E(se)-3.888 E 2.5(ee)-4.438 G(en) --6.938 E 2.5(nu)-5.558 G(un)-8.058 E(na)-5.558 E(a)-4.998 E F1 -6.496 -(RR)2.5 G -6.496(RR)6.496 G -6.496(DD)6.496 G F2 -4.998(??)6.496 G F0 -.694(Lo que se te ocurra. Debes poder medir alg\372n v)108 458.4 R .693 -(alor dado en distintos momentos en el tiempo y pro)-.25 F -.15(ve)-.15 -G .693(er a).15 F .663(RRDtool de estos v)108 470.4 R .663 -(alores. Si puedes hacer esto, RRDtool puede guardar los datos. Los v) --.25 F .664(alores tienen que)-.25 F -(ser num\351ricos, pero no necesariamente enteros, como en)108 482.4 Q -/F3 9/Times-Roman@0 SF(MR)2.5 E(TG)-.54 E F0(.)A .105 -(Muchos ejemplos mencionan)108 499.2 R F3(SNMP)2.605 E F0 2.605(,q)C -.105(ue es el acr\363nimo de `)-2.605 F .105(`Simple Netw)-.74 F .105 -(ork Management Protocol')-.1 F 2.604('\()-.74 G(Pro-)-2.604 E .239 -(tocolo Simple de Administraci\363n de Redes\). Lo de `)108 511.2 R -(`simple')-.74 E 2.739('s)-.74 G 2.739(er)-2.739 G .239 -(e\214ere al protocolo \255 no se supone que sea)-2.739 F .083(f\341cil\ - administrar o monitorizar una red. Cuando hayas terminado con este doc\ -umento, deber\341s saber lo su\214-)108 523.2 R .931 -(ciente para entender cuando oig)108 535.2 R .931 -(as a otros hablar sobre)-.05 F F3(SNMP)3.431 E F0 3.431(.P)C .931 -(or ahora, simplemente considera a)-3.431 F F3(SNMP)3.432 E F0 .374 -(como una forma de pre)108 547.2 R .373(guntarle a los dispositi)-.15 F --.2(vo)-.25 G 2.873(sp).2 G .373(or los v)-2.873 F .373 -(alores de ciertos contadores que mantienen. Son)-.25 F(estos v)108 -559.2 Q(alores de estos contadores los que v)-.25 E -(amos a almacenar en la)-.25 E F3(RRD)2.5 E F0(.)A F2 -4.998108 -582 S -7.778(QQ)4.998 G -5.558(uu)7.778 G 8.876 -4.4385.558 H -(pu)-1.12 E(ue)-5.558 E(ed)-4.438 E(do)-5.558 E 2.5(oh)-4.998 G(ha) --8.058 E(ac)-4.998 E(ce)-4.438 E(er)-4.438 E 2.5(rc)-4.438 G(co)-6.938 E -(on)-4.998 E 2.5(ne)-5.558 G(es)-6.938 E(st)-3.888 E(ta)-3.328 E 2.5(ah) --4.998 G(he)-8.058 E(er)-4.438 E(rr)-4.438 E(ra)-4.438 E(am)-4.998 E(mi) --8.328 E(ie)-2.778 E(en)-4.438 E(nt)-5.558 E(ta)-3.328 E(a?)-4.998 E(?) --4.998 E F0 1.299(RRDtool se deri)108 598.8 R 1.799 -.25(va d)-.25 H(e) -.25 E F3(MR)3.799 E(TG)-.54 E F0 1.299(\(Multi Router T)3.799 F(raf)-.35 -E 1.299(\214c Grapher)-.25 F 3.799(,G)-.4 G 1.299(ra\214cador De T) --3.799 F 1.3(r\341\214co de M\372ltiples Enruta-)-.35 F(dores\).)108 -610.8 Q F3(MR)6.021 E(TG)-.54 E F0 1.021(empez\363 como un peque\361o s\ -cript para poder gra\214car el uso de una cone)3.521 F 1.02 -(xi\363n a la Internet.)-.15 F(Lue)108 622.8 Q .461(go e)-.15 F -.2(vo) --.25 G .462(lucion\363, permitiendo gra\214car otras fuentes de datos, \ -como temperatura, v).2 F .462(elocidad, v)-.15 F .462(oltajes, can-)-.2 -F .369(tidad de p\341ginas impresas, etc... Lo m\341s probable es que e\ -mpieces a usar RRDtool para guardar y procesar)108 634.8 R .533 -(datos conse)108 646.8 R .533(guidos a tra)-.15 F .533(v\351s de)-.2 F -F3(SNMP)3.033 E F0 3.033(,yq)C .533(ue los datos sean el n\372mero de b\ -ytes \(o bits\) transferidos desde y)-3.033 F .299 -(hacia una red u ordenador)108 658.8 R 2.799(.R)-.55 G .298(RDtool te p\ -ermite crear una base de datos, guardar los datos en ellas, recuper) --2.799 F(-)-.2 E .604(arlos y crear gr\341\214cos en formato)108 670.8 R -F3(GIF)3.105 E F0(o)3.105 E F3(PNG)3.105 E F0 3.105(,p)C .605 -(ara mostrarlos en un na)-3.105 F -2.25 -.15(veg a)-.2 H .605(dor web) -.15 F 3.105(.E)-.4 G .605(sas im\341genes depen-)-3.105 F .34(den de lo\ -s datos que hayas guardado y pueden, por ejemplo, ser un sumario del pr\ -omedio de uso de la red,)108 682.8 R 4.333(ol)108 694.8 S 1.834 -(os picos de tr\341\214co que ocurrieron.)-4.333 F -.8(Ta)6.834 G 1.834 -(mbi\351n lo puedes usar para mostrar el ni).8 F -.15(ve)-.25 G 4.334 -(ld).15 G 4.334(el)-4.334 G 1.834(as mareas, la)-4.334 F .008 -(radiaci\363n solar)108 706.8 R 2.508(,e)-.4 G 2.508(lc)-2.508 G .008 -(onsumo de electricidad, el n\372mero de visitantes en una e)-2.508 F -.007(xposici\363n en un momento dado,)-.15 F .05(los ni)108 718.8 R -.15 -(ve)-.25 G .05 -(les de ruido cerca del aeropuerto, la temperatura en tu lug).15 F .05 -(ar de v)-.05 F .05(acaciones f)-.25 F -.2(avo)-.1 G .05 -(rito, o en la ne).2 F -.15(ve)-.25 G .05(ra, o).15 F .311 -(cualquier otra cosa que te puedas imaginar)108 730.8 R 2.811(,m)-.4 G -.311(ientras teng)-2.811 F .31 -(as alg\372n sensor con el cual medir los datos y seas)-.05 F 145.68 -(2001-02-11 Last)72 778.8 R(change: 1.0.28)2.5 E(1)189.84 E EP -%%Page: 2 2 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F(capaz de pasarle los n\372meros a RRDtool.)108 -96 Q/F1 10/Times-Bold@0 SF -4.998108 118.8 S 14.436 -7.218(YY s) -4.998 H(si)3.33 E 2.5(ia)-2.778 G<61fa>-7.498 E-5.558 E 2.5(nt) --5.558 G(te)-5.828 E(en)-4.438 E(ng)-5.558 E(go)-4.998 E 2.5(op)-4.998 G -(pr)-8.058 E -.18(ro)-4.438 G(ob)-4.818 E(bl)-5.558 E(le)-2.778 E(em) --4.438 E(ma)-8.328 E(as)-4.998 E 2.5(sd)-3.888 G(de)-8.058 E(es)-4.438 E -(sp)-3.888 E(pu)-5.558 E<75e9>-5.558 E-4.438 E 2.5(sd)-3.888 G(de) --8.058 E 2.5(el)-4.438 G(le)-5.278 E(ee)-4.438 E(er)-4.438 E 2.5(re) --4.438 G(es)-6.938 E(st)-3.888 E(te)-3.328 E 2.5(ed)-4.438 G(do)-8.058 E -(oc)-4.998 E(cu)-4.438 E(um)-5.558 E(me)-8.328 E(en)-4.438 E(nt)-5.558 E -(to)-3.328 E(o?)-4.998 E(?)-4.998 E F0 .22 -(Lo primero, \241l\351elo otra v)108 135.6 R .22 -(ez!. Puede que te hayas perdido de algo.)-.15 F .22 -(Si no puedes compilar el c\363digo fuente y)5.22 F .184 -(usas un sistema operati)108 147.6 R .584 -.2(vo b)-.25 H .184 -(astante com\372n, casi se).2 F .184 -(guro que no es la culpa de RRDtool.)-.15 F .183(Probablemente con-) -5.183 F(sig)108 159.6 Q 1.18(as v)-.05 F 1.18 -(ersiones pre-compiladas por la Internet. Si pro)-.15 F 1.18 -(vienen de una fuente con\214able, \372salas. Si, por otro)-.15 F 1.058 -(lado, el programa funciona, pero no te da los resultados que tu espera\ -bas, puede ser un problema con la)108 171.6 R(con\214guraci\363n; re)108 -183.6 Q(v\355sala y comp\341rala con los ejemplos.)-.25 E .207 -(Hay una lista de correo electr\363nico y una archi)108 200.4 R .607 -.2 -(vo d)-.25 H 2.707(el).2 G 2.707(am)-2.707 G .208 -(isma. Lee la lista durante unas cuantas semanas, y)-2.707 F -.2(bu)108 -212.4 S .344(sca en el archi).2 F -.2(vo)-.25 G 2.844(.E).2 G 2.844(sd) --2.844 G .344(escort\351s hacer una pre)-2.844 F .343 -(gunta sin haber re)-.15 F .343(visado el archi)-.25 F -.2(vo)-.25 G -2.843<3ba1>.2 G .343(puede que tu problema)-2.843 F .424(ya haya sido r\ -esuelto antes! Normalmente ocurre as\355 en todas las listas de correo,\ - no s\363lo esta. Examina la)108 224.4 R -(documentaci\363n que vino con RRDtool para v)108 236.4 Q -(er donde est\341 el archi)-.15 E .4 -.2(vo y c)-.25 H(omo usarlo.).2 E -2.415 -.7(Te s)108 253.2 T 1.014(ugiero que te tomes un momento y te su\ -bscribas a la lista ahora mismo, en).7 F 1.014(viando un mensaje a rrd-) --.4 F .271(users-request@list.ee.ethz.ch con t\355tulo)108 265.2 R/F2 10 -/Courier@0 SF(subscribe)2.771 E F0 2.771(.S)C 2.772(ie)-2.771 G -.15(ve) --3.022 G .272(ntualmente deseas salirte de la lista, en).15 F .272 -(v\355a otro)-.4 F(correo a la misma direcci\363n, con t\355tulo)108 -277.2 Q F2(unsubscribe)2.5 E F0(.)A F1 -4.998108 300 S -7.218(CC) -4.998 G -4.9987.218 G -8.328(mm)4.998 G 9.996 -4.998(oo m)8.328 H -(me)-3.33 E 2.5(ev)-4.438 G -.1(va)-7.498 G(as)-4.898 E 2.5(sa)-3.888 G -2.5(aa)-7.498 G(ay)-7.498 E(yu)-4.998 E(ud)-5.558 E(da)-5.558 E(ar) --4.998 E(r?)-4.438 E(?)-4.998 E F0 .37 -(D\341ndote descripciones y ejemplos detallados. Asumimos que el se)108 -316.8 R .37(guir las instrucciones en el orden en que)-.15 F .574 -(se presentan aqu\355 te dar\341 su\214ciente conocimiento)108 328.8 R -.575(de RRDtool como para que e)5.575 F .575(xperimentes por tu cuenta.) --.15 F 1.265(Si no funciona a la primera, puede que te hallas saltado a\ -lgo; siguiendo los ejemplos obtendr\341s algo de)108 340.8 R -.15(ex)108 -352.8 S .025(periencia pr\341ctica y).15 F 2.525(,l)-.65 G 2.525(oq) --2.525 G .025(ue es m\341s importante, un poco de informaci\363n sobre \ -como funciona el programa.)-2.525 F .16 -(Necesitar\341s saber algo sobre n\372meros he)108 369.6 R .16 -(xadecimales. Si no, empieza por leer `)-.15 F(`bin_dec_he)-.74 E(x') --.15 E 2.66('a)-.74 G .16(ntes de con-)-2.66 F(tinuar)108 381.6 Q(.)-.55 -E F1 9.916 -6.668(TT u)108 404.4 T 2.5(up)1.11 G(pr)-8.058 E(ri)-4.438 E -(im)-2.778 E(me)-8.328 E(er)-4.438 E(ra)-4.438 E 2.5(ab)-4.998 G(ba) --8.058 E(as)-4.998 E(se)-3.888 E 2.5(ed)-4.438 G(de)-8.058 E 2.5(ed) --4.438 G(da)-8.058 E(at)-4.998 E(to)-3.328 E(os)-4.998 E 2.5(se)-3.888 G -(en)-6.938 E 2.5(nr)-5.558 G -.18(ro)-6.938 G(ou)-4.818 E(un)-5.558 E -(nd)-5.558 E(d-)-5.558 E(-r)-3.328 E -.18(ro)-4.438 G(ob)-4.818 E(bi) --5.558 E(in)-2.778 E(n)-5.558 E F0 .333(En mi opini\363n, la mejor form\ -a de aprender algo es haci\351ndolo. \277Por qu\351 no empezamos ya? V) -108 421.2 R .333(amos a crear)-1.11 F .235 -(una base de datos, poner unos cuantos v)108 433.2 R .234 -(alores en ella y e)-.25 F .234 -(xtraerlos despu\351s. La salida que obteng)-.15 F .234(as debe ser)-.05 -F(igual a la que aparece en este documento.)108 445.2 Q .036 -(Empezaremos con algo f\341cil, comparando un coche con un enrutador)108 -462 R 2.536(,op)-.4 G .037(or decirlo de otra forma, compara-)-2.536 F -.106(ndo kil\363metros con bits y bytes. A nosotros nos da lo mismo; so\ -n unos n\372meros obtenidos en un espacio de)108 474 R(tiempo.)108 486 Q -.381(Asumamos que tenemos un dispositi)108 502.8 R .781 -.2(vo q)-.25 H -.381(ue trans\214ere bytes desde y hacia la Internet. Este dispositi).2 -F .782 -.2(vo t)-.25 H(iene).2 E .321(un contador que empieza en 0 al e\ -ncenderse y se incrementa con cada byte transferido. Este contador tien\ -e)108 514.8 R .166(un v)108 526.8 R .166(alor m\341ximo; si ese v)-.25 F -.166(alor se alcanza y se cuenta un byte m\341s, el contador vuelv)-.25 -F 2.666(eae)-.15 G .166(mpezar desde cero.)-2.666 F .834(Esto es e)108 -538.8 R .833(xactamente lo mismo que pasa con muchos contadores, como e\ -l cuentakil\363metros del coche. En)-.15 F .782 -(muchas de las disertaciones sobre redes se habla de bits por se)108 -550.8 R .783(gundo, as\355 que empezaremos por acostum-)-.15 F .117(bra\ -rnos a esto. Asumamos que un byte son 8 bits y empecemos a pensar en bi\ -ts y no en bytes. \241El contador)108 562.8 R(,)-.4 E .503(sin embar)108 -574.8 R .503(go, sigue contando en bytes! En el mundo)-.18 F/F3 9 -/Times-Roman@0 SF(SNMP)3.004 E F0 3.004(,l)C 3.004(am)-3.004 G .504 -(ayor\355a de los contadores tienen una longi-)-3.004 F .577(tud de 32 \ -bits. Esto signi\214ca que pueden contar desde 0 hasta 4294967295. Usar\ -emos estos v)108 586.8 R .576(alores en los)-.25 F 1.317 -(ejemplos. El dispositi)108 598.8 R -.2(vo)-.25 G 3.818(,c).2 G 1.318 -(uando le pre)-3.818 F 1.318(guntamos, retorna el v)-.15 F 1.318 -(alor actual del contador)-.25 F 3.818(.C)-.55 G 1.318(omo sabemos el) --3.818 F 1.697(tiempo transcurrido desde la \372ltima v)108 610.8 R -1.697(ez que le pre)-.15 F 1.697 -(guntamos, sabemos cuantos bytes se han transferido)-.15 F/F4 10/Symbol -SF(***)108 622.8 Q F2 1.46(en promedio)B F4(***)A F0 1.46(por se)3.96 F -1.461 -(gundo. Esto no es muy dif\355cil de calcular; primero en palabras, lue) --.15 F 1.461(go en)-.15 F(operaciones:)108 634.8 Q(1. T)108 651.6 Q -(oma el v)-.8 E(alor actual del contador y r\351stale el v)-.25 E -(alor anterior)-.25 E(2. Haz lo mismo con la fecha)108 668.4 Q -(lo multiplicas por ocho obtienes la cantidad de bits por se)72 685.2 Q -(gundo)-.15 E .348(3. Di)108 697.2 R .347(vide el resultado del paso \(\ -1\) por el resultado del paso \(2\). El resultado es la cantidad de byt\ -es por)-.25 F(se)128 709.2 Q .347(gundo. Si)-.15 F 145.68 -(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(2)189.84 E EP -%%Page: 3 3 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Courier@0 SF(bps = \(contador_actual - c\ -ontador_anterior\) / \(fecha_actual - fecha_anterior\))120 96 Q/F2 10 -/Symbol SF(*)6 E F1(8)6 E F0 -.15(Pa)108 120 S 1.677 -(ra algunos ser\341 de ayuda traducir esto a un ejemplo automotor).15 F -6.677(.N)-.55 G 4.177(op)-6.677 G 1.677(rueben estas v)-4.177 F 1.676 -(elocidades en la)-.15 F -(pr\341ctica, y si lo hacen, no me echen la culpa por los resultados.) -108 132 Q(Usaremos las siguientes abre)108 148.8 Q(viaturas:)-.25 E F1 -18(M: metros)114 165.6 R 12(KM: kil\363metros)114 177.6 R -(\(= 1000 metros\).)6 E 18(H: horas)114 189.6 R 18(S: segundos)114 201.6 -R(KM/H: kil\363metros por hora)114 213.6 Q 6(M/S: metros)114 225.6 R -(por segundo)6 E F0 -1.11(Va)108 249.6 S 2.692(sc)1.11 G .192(onduciend\ -o un coche. A las 12:05, miras el contador en el salpicadero y v)-2.692 -F .192(es que el coche ha recorrido)-.15 F(12345)108 261.6 Q/F3 9 -/Times-Roman@0 SF(KM)2.937 E F0 2.937(.Al)C .437(as 12:10 vuelv)-2.937 F -.437(es a mirar otra v)-.15 F .437(ez, y dice 12357)-.15 F F3(KM)2.937 E -F0 2.936(.Q)C .436(uiere decir)-2.936 F 2.936(,q)-.4 G .436 -(ue has recorrido 12)-2.936 F F3(KM)2.936 E F0 .468 -(en cinco minutos. Un cient\355\214co con)108 273.6 R -.15(ve)-.4 G .468 -(rtir\355a esto en metros por se).15 F .468 -(gundos; esto es bastante parecido al prob-)-.15 F -(lema de pasar de bytes transferidos en 5 minutos a bits por se)108 -285.6 Q(gundo.)-.15 E -.6(Vi)108 302.4 S .564 -(ajamos 12 kil\363metros, que son 12000 metros. T).6 F .564 -(ardamos 5 minutos, o sea 300 se)-.8 F .564(gundos. Nuestra v)-.15 F -(eloci-)-.15 E(dad es 12000M / 300S igual a 40 M/S.)108 314.4 Q -.8(Ta) -108 331.2 S .028(mbi\351n podemos calcular la v).8 F .029(elocidad en) --.15 F F3(KM/H:)2.529 E F0 .029(12 v)2.529 F .029 -(eces 5 minutos es una hora, as\355 que multiplicando los)-.15 F(12)108 -343.2 Q F3(KM)2.5 E F0(por 12 obtenemos 144)2.5 E F3(KM/H)2.5 E F0 2.5 -(.N)C 2.5(oi)-2.5 G(ntentes esto en casa, o por donde vi)-2.5 E .4 -.2 -(vo :)-.25 H.2 E .243(Recuerda que estos n\372meros son tan s\363\ -lo promedios. No hay forma de deducir)108 360 R 2.742(,v)-.4 G .242 -(iendo s\363lo los n\372meros, si)-2.742 F(fuiste a una v)108 372 Q -(elocidad constante.)-.15 E -(Hay un ejemplo m\341s adelante en el tutorial que e)5 E(xplica esto.) --.15 E .425 -(Espero que entiendas que no hay diferencia entre calcular la v)108 -388.8 R .426(elocidad en M/S o bps; s\363lo la forma en que)-.15 F 1.016 -(recogemos los datos es distinta. Inclusi)108 400.8 R -.15(ve)-.25 G -3.515(,l).15 G 3.515(aKd)-3.515 G 3.515(ek)-3.515 G 1.015 -(ilo en este caso es e)-3.515 F 1.015(xactamente la misma, ya que en) --.15 F(redes k es 1000)108 412.8 Q .254(Ahora v)108 429.6 R .254(amos a\ - crear una base de datos en la que guardar todos estos interesantes v) --.25 F .255(alores. El m\351todo a usar)-.25 F .924 -(para arrancar el programa puede v)108 441.6 R .924(ariar de un sistema\ - de operaci\363n a otro, pero asumamos que lo puedes)-.25 F(resolv)108 -453.6 Q .843 -(er tu mismo en caso que se diferente en el sistema que usas.)-.15 F -(Ase)5.843 E .843(g\372rate de no sobreescribir ning\372n)-.15 F(archi) -108 465.6 Q .565 -.2(vo e)-.25 H 2.665(nt).2 G 2.665(us)-2.665 G .165 -(istema al ejecutarlo y escribe todo como una sola l\355nea \(tuv)-2.665 -F 2.665(eq)-.15 G .164(ue partirlo para que fuera le)-2.665 F(gi-)-.15 E -(ble\), salt\341ndote todos los caracteres '\\')108 477.6 Q F1 -(rrdtool create test.rrd)126 494.4 Q(\\)78 E(--start 920804400)180 506.4 -Q(\\)60 E 12(DS:speed:COUNTER:600:U:U \\)180 518.4 R 36 -(RRA:AVERAGE:0.5:1:24 \\)180 530.4 R(RRA:AVERAGE:0.5:6:10)180 542.4 Q F0 -(\(o sea, escribe:)108 566.4 Q F1 -(rrdtool create test.rrd \255\255start 920804400 DS ...)2.5 E F0(\))A/F4 -10/Times-Bold@0 SF -4.998108 589.2 S -7.778(QQ)4.998 G -5.558(uu) -7.778 G 8.876 -4.4385.558 H(he)-1.12 E(em)-4.438 E(mo)-8.328 E -(os)-4.998 E 2.5(sc)-3.888 G(cr)-6.938 E -.18(re)-4.438 G(ea)-4.258 E -(ad)-4.998 E(do)-5.558 E(o?)-4.998 E(?)-4.998 E F0 .466(Hemos creado un\ -a base de datos en round robin llamada test \(test.rrd\), que empieza d\ -esde el mediod\355a del)108 606 R .592(d\355a en que empec\351 a escrib\ -ir este documento \(7 de marzo de 1999\). En ella se guarda una fuente \ -de datos)108 618 R(\()108 630 Q F3(DS)A F0 .717(\), llamada `)B(`speed') --.74 E .718(', que se lee de un contador)-.74 F 3.218(.E)-.55 G 3.218 -(nl)-3.218 G 3.218(am)-3.218 G .718 -(isma base de datos se guardan dos archi)-3.218 F -.2(vo)-.25 G 3.218 -(se).2 G(n)-3.218 E .849 -(round robin \(RRAs\), uno promedia los datos cada v)108 642 R .849 -(ez que se leen \(o sea, no hay nada que promediar\), y)-.15 F .172(man\ -tiene 24 muestras \(24 por 5 minutos = 2 horas de muestras\). El otro p\ -romedia 6 muestras \(media hora\),)108 654 R 2.5(yg)108 666 S(uarda 10 \ -de estos promedios \(o sea, 5 horas\). Las opciones restantes las v)-2.5 -E(eremos m\341s adelante.)-.15 E .151(RRDtool usa un formato de `)108 -682.8 R(`fecha')-.74 E 2.651('e)-.74 G .151 -(special que viene del mundo de)-2.651 F F3(UNIX)2.651 E F0 2.651(.E)C -.151(stas `)-2.651 F(`fechas')-.74 E 2.651('s)-.74 G .151 -(on el n\372mero)-2.651 F .922(de se)108 694.8 R .923 -(gundos que han pasado desde el primero de enero de 1970, zona)-.15 F F3 -(UTC)3.423 E F0 3.423(.E)C .923(ste n\372mero de se)-3.423 F .923 -(gundos se)-.15 F(con)108 706.8 Q(vierte lue)-.4 E -(go en la fecha local, por lo que v)-.15 E(aria se)-.25 E -(g\372n la franja horaria.)-.15 E 145.68(2001-02-11 Last)72 768 R -(change: 1.0.28)2.5 E(3)189.84 E EP -%%Page: 4 4 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F .559(Lo m\341s probable es que tu no vi)108 96 -R -.25(va)-.25 G 3.059(se).25 G 3.059(nl)-3.059 G 3.059(am)-3.059 G .559 -(isma parte del mundo que yo, por lo que tu franja horaria ser\341) --3.059 F .874(diferente. En los ejemplos, cuando mencione horas, puede \ -que no sean las mismas para ti; esto no afecta)108 108 R .718 -(mucho los resultados, s\363lo tienes que corre)108 120 R .717 -(gir las horas mientras lees. Por ejemplo, las 12:05 para m\355 son)-.15 -F(las 11:05 para los amigos en la Gran Breta\361a.)108 132 Q -(Ahora tenemos que llenar nuestra base de datos con v)108 148.8 Q -(alores. V)-.25 E(amos a suponer que le\355mos estos datos:)-1.11 E/F1 -10/Courier@0 SF 6(12:05 12345)114 165.6 R(KM)6 E 6(12:10 12357)114 177.6 -R(KM)6 E 6(12:15 12363)114 189.6 R(KM)6 E 6(12:20 12363)114 201.6 R(KM)6 -E 6(12:25 12363)114 213.6 R(KM)6 E 6(12:30 12373)114 225.6 R(KM)6 E 6 -(12:35 12383)114 237.6 R(KM)6 E 6(12:40 12393)114 249.6 R(KM)6 E 6 -(12:45 12399)114 261.6 R(KM)6 E 6(12:50 12405)114 273.6 R(KM)6 E 6 -(12:55 12411)114 285.6 R(KM)6 E 6(13:00 12415)114 297.6 R(KM)6 E 6 -(13:05 12420)114 309.6 R(KM)6 E 6(13:10 12422)114 321.6 R(KM)6 E 6 -(13:15 12423)114 333.6 R(KM)6 E F0(Llenaremos la base de datos as\355:) -108 357.6 Q F1(rrdtool update test.rrd 920804700:12345 920805000:12357 \ -920805300:12363)114 374.4 Q(rrdtool update test.rrd 920805600:12363 920\ -805900:12363 920806200:12373)114 386.4 Q(rrdtool update test.rrd 920806\ -500:12383 920806800:12393 920807100:12399)114 398.4 Q(rrdtool update te\ -st.rrd 920807400:12405 920807700:12411 920808000:12415)114 410.4 Q(rrdt\ -ool update test.rrd 920808300:12420 920808600:12422 920808900:12423)114 -422.4 Q F0(Lo que signi\214ca: actualiza nuestra base de datos test con\ - los siguientes v)108 446.4 Q(alores:)-.25 E F1 -(fecha 920804700, valor 12345)114 463.2 Q(fecha 920805000, valor 12357) -114 475.2 Q(etc\351tera.)114 499.2 Q F0 1.309(Como v)108 523.2 R 1.309 -(es, pueden introducirse m\341s de un v)-.15 F 1.31 -(alor en la base de datos por ejecuci\363n del comando. Y)-.25 F 3.81 -(ol)-1.1 G(os)-3.81 E(agrupo de tres en tres para hacerlo le)108 535.2 Q -(gible, pero en realidad el m\341ximo depende del sistema de operaci\ -\363n.)-.15 E(Ahora podemos recuperar los datos usando `)108 552 Q -(`rrdtool fetch')-.74 E(':)-.74 E F1 -(rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200)114 -568.8 Q F0(Debes obtener esto como salida:)108 592.8 Q F1(speed)228 -609.6 Q F0 145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(4)189.84 -E EP -%%Page: 5 5 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Courier@0 SF 42(920804400: NaN)114 96 R -42(920804700: NaN)114 108 R(920805000: 4.0000000000e-02)114 120 Q -(920805300: 2.0000000000e-02)114 132 Q(920805600: 0.0000000000e+00)114 -144 Q(920805900: 0.0000000000e+00)114 156 Q(920806200: 3.3333333333e-02) -114 168 Q(920806500: 3.3333333333e-02)114 180 Q -(920806800: 3.3333333333e-02)114 192 Q(920807100: 2.0000000000e-02)114 -204 Q(920807400: 2.0000000000e-02)114 216 Q(920807700: 2.0000000000e-02) -114 228 Q(920808000: 1.3333333333e-02)114 240 Q -(920808300: 1.6666666667e-02)114 252 Q(920808600: 6.6666666667e-03)114 -264 Q(920808900: 3.3333333333e-03)114 276 Q 42(920809200: NaN)114 288 R -F0 1.516(Si no, hay algo mal. Probablemente tu sistema de operaci\363n \ -muestre `)108 312 R(`NaN')-.74 E 4.016('d)-.74 G 4.016(eo)-4.016 G 1.516 -(tra forma; representa)-4.016 F -.74(``)108 324 S .407(Not a Number').74 -F .407(', o sea `)-.74 F .407(`No es un n\372mero')-.74 F .407 -('. Si aparece `)-.74 F(`U')-.74 E -5.406 2.907('o `)-.74 H(`)-3.647 E -/F2 9/Times-Roman@0 SF(UNKN)A F0 1.888 -.74('' o a)D .408 -(lgo parecido, es lo mismo. Si).74 F 1.29 -(hay alguna otra diferencia, probablemente te equi)108 336 R -.2(vo)-.25 -G 1.29(caste al introducir alg\372n P v).2 F 1.29 -(alor \(asumiendo que mi)-.25 F(tutorial est\341 bien, por supuesto :\ -\255\). En ese caso, borra la base de datos y prueba de nue)108 348 Q --.2(vo)-.25 G(.).2 E(Lo que representa e)108 364.8 Q -(xactamente esta salida lo v)-.15 E -(amos m\341s adelante en el tutorial.)-.25 E/F3 10/Times-Bold@0 SF --7.778(HH)108 387.6 S -4.998(oo)7.778 G -4.438(rr)4.998 G 9.996 -4.998 -(aa d)4.438 H(de)-.56 E 2.5(eh)-4.438 G(ha)-8.058 E(ac)-4.998 E(ce) --4.438 E(er)-4.438 E 2.5(ra)-4.438 G(al)-7.498 E(lg)-2.778 E(gu)-4.998 E -(un)-5.558 E(no)-5.558 E(os)-4.998 E 2.5(sg)-3.888 G(gr)-7.498 E<72e1> --4.438 E-4.998 E<8c63>-5.558 E(co)-4.438 E(os)-4.998 E(s)-3.888 E -F0(Prueba este comando:)108 404.4 Q F1(rrdtool graph speed.gif)114 421.2 -Q(\\)198 E(--start 920804400 --end 920808000)162 433.2 Q(\\)90 E 78 -(DEF:myspeed=test.rrd:speed:AVERAGE \\)162 445.2 R(LINE2:myspeed#FF0000) -162 457.2 Q F0 2.403(Este comando crea speed.gif, un gr\341\214co de lo\ -s datos desde las 12:00 hasta las 13:00. Contiene una)108 481.2 R .572 -(de\214nici\363n de la v)108 493.2 R .572(ariable myspeed y de\214ne el\ - color como rojo. Notar\341s que el gr\341\214co no comienza e)-.25 F -(xacta-)-.15 E .489(mente a las 12:00 sino a las 12:05, y es porque no \ -tenemos datos su\214cientes como para calcular el prome-)108 505.2 R -.396(dio de v)108 517.2 R .395(elocidad antes de ese momento. Esto s\ -\363lo ocurre en caso de que se pierdan alg\372n muestreo, lo que)-.15 F -(esperamos que no debe ocurrir muy a menudo.)108 529.2 Q -(Si ha funcionado, \241felicitaciones!. Si no, re)108 546 Q -(visa qu\351 puede estar mal.)-.25 E .074 -(La de\214nici\363n de colores se construye a partir del rojo, v)108 -562.8 R .075(erde y azul. Especi\214cas cuanto de cada uno de estos)-.15 -F 1.438(componentes v)108 574.8 R 1.438(as a usar en he)-.25 F 1.437 -(xadecimal: 00 signi\214ca `)-.15 F 1.437(`nada de este color')-.74 F -3.937('y)-.74 G F2(FF)A F0 1.437(signi\214ca `)3.937 F 1.437 -(`este color a)-.74 F .93(m\341xima intensidad')108 586.8 R .93('. El `) --.74 F(`color')-.74 E 3.43('b)-.74 G .93(lanco es la mezcla del rojo, v) --3.43 F .931(erde y azul a toda intensidad:)-.15 F F2(FFFFFF)3.431 E F0 -3.431(;e)C(l)-3.431 E(ne)108 598.8 Q -(gro es la ausencia de todos los colores: 000000.)-.15 E F1 18 -(rojo #FF0000)126 615.6 R 12(verde #00FF00)126 627.6 R 18(azul #0000FF) -126 639.6 R(violeta #FF00FF)126 651.6 Q(\(mezcla de rojo y azul\))30 E -18(gris #555555)126 663.6 R(\(un tercio de cada uno de los colores\))30 -E F0 2.859(El archi)108 687.6 R -.2(vo)-.25 G F2(GIF)5.559 E F0 2.859 -(que acabas de crear puede v)5.359 F 2.859(erse con tu visor de archi) --.15 F -.2(vo)-.25 G 5.359(sd).2 G 5.359(ei)-5.359 G 2.858(magen f) --5.359 F -.2(avo)-.1 G 2.858(rito. Los).2 F(na)108 699.6 Q -2.25 -.15 -(veg a)-.2 H(dores lo mostrar\341n usando la).15 E F2(URL)2.5 E F0 -.74 -(``)2.5 G -1.95(\214le://el/camino/de/directorios/hasta/speed.gif ').74 -F(')-.74 E 145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(5)189.84 -E EP -%%Page: 6 6 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Times-Bold@0 SF -7.778(GG)108 96 S -4.438 -(rr)7.778 G -4.9984.438 G -5.558<8c8c>4.998 G -4.438(cc)5.558 G --4.998(oo)4.438 G 7.776 -3.888(ss c)4.998 H(co)-.55 E(on)-4.998 E 2.5 -(nu)-5.558 G(un)-8.058 E 2.5(np)-5.558 G(po)-8.058 E(oc)-4.998 E(co) --4.438 E 2.5(od)-4.998 G(de)-8.058 E 2.5(em)-4.438 G(ma)-10.828 E(at) --4.998 E(te)-3.328 E(em)-4.438 E<6de1>-8.328 E-4.998 E(ti)-3.328 E -(ic)-2.778 E(ca)-4.438 E(a)-4.998 E F0 .103(Cuando v)108 112.8 R .104(e\ -as la imagen, notar\341s que el eje horizontal tiene unas etiquetas mar\ -cando las 12:10, 12:20, 12:30,)-.15 F .712(12:40 y 12:50. Los otros dos\ - momentos \(12:00 y 13:00\) no se pueden mostrar bien por f)108 124.8 R -.711(alta de datos, as\355)-.1 F .415 -(que el programa se los salta. El eje v)108 136.8 R .415 -(ertical muestra el rango de los v)-.15 F .415 -(alores que entramos. Introdujimos los)-.25 F 1.218(kil\363metros y lue) -108 148.8 R 1.218(go di)-.15 F 1.218(vidimos entre 300 se)-.25 F 1.217 -(gundos, por lo que obtuvimos v)-.15 F 1.217(alores bastante bajos. P) --.25 F 1.217(ara ser)-.15 F -.15(ex)108 160.8 S 1.422 -(actos, el primer v).15 F(alor)-.25 E 3.922(,1)-.4 G 3.922(2\()-3.922 G -1.423(12357\25512345\), di)-3.922 F 1.423 -(vidido entre 300 da 0.04, lo que RRDtool muestra como)-.25 F -.74(``) -108 172.8 S(40m').74 E .237(', o sea `)-.74 F(`40/1000')-.74 E .237 -('. \241La `)-.74 F(`m')-.74 E 1.717 -.74('' n)-.74 H 2.737(ot).74 G -.237(iene nada que v)-2.737 F .237 -(er con metros, kil\363metros o mil\355metros!.)-.15 F(RRDtool)5.236 E(\ -no sabe nada de unidades, el s\363lo trabaja con n\372meros, no con met\ -ros.)108 184.8 Q 3.665(Donde nos equi)108 201.6 R -.2(vo)-.25 G 3.666(c\ -amos fue en que debimos medir en metros. As\355, \(12357000\25512345000\ -\)/300 =).2 F(12000/300 = 40.)108 213.6 Q -1.11(Va)108 230.4 S 1.755 -(mos a corre)1.11 F 1.754 -(girlo. Podr\355amos recrear la base de datos con los v)-.15 F 1.754 -(alores correctos, pero hay una forma)-.25 F -(mejor: \241haciendo los c\341lculos mientras creamos el archi)108 242.4 -Q .4 -.2(vo g)-.25 H(if!).2 E/F2 10/Courier@0 SF -(rrdtool graph speed2.gif)126 259.2 Q(\\)162 E -(--start 920804400 --end 920808000)144 271.2 Q(\\)90 E -(--vertical-label m/s)144 283.2 Q(\\)168 E 78 -(DEF:myspeed=test.rrd:speed:AVERAGE \\)144 295.2 R -(CDEF:realspeed=myspeed,1000,)144 307.2 Q/F3 10/Symbol SF(*)A F2(\\)114 -E(LINE2:realspeed#FF0000)144 319.2 Q F0 1.471(Cuando v)108 343.2 R 1.471 -(eas esta imagen, notar\341s que la `)-.15 F(`m')-.74 E 3.971('h)-.74 G -3.971(ad)-3.971 G 1.472 -(esaparecido, y ahora tienes los resultados correctos.)-3.971 F(Adem\ -\341s hemos a\361adido una etiqueta a la imagen. Apartando esto, el arc\ -hi)108 355.2 Q -.2(vo)-.25 G/F4 9/Times-Roman@0 SF(GIF)2.7 E F0 -(es el mismo.)2.5 E .628(Las operaciones est\341n en la secci\363n del) -108 372 R F4(CDEF)3.128 E F0 3.128(ye)3.128 G .628 -(st\341n escritas en Notaci\363n Polaca In)-3.128 F -.15(ve)-.4 G .627 -(rsa \(Re).15 F -.15(ve)-.25 G .627(rse Polish).15 F 2.033(Notation o `) -108 384 R(`)-.74 E F4(RPN)A F0 -.74('')C 2.033(\). En palabras, dice: `) -.74 F 2.033(`toma la fuente de datos myspeed y el numero 1000, y mul-) --.74 F(tipl\355calos')108 396 Q .25('. No te molestes en meterte con) --.74 F F4(RPN)2.75 E F0(toda)2.75 E .25(v\355a, la v)-.2 F .249 -(eremos con m\341s detalle m\341s adelante. Adem\341s,)-.15 F .289 -(puede que quieras leer mi tutorial sobre los)108 408 R F4(CDEF)2.789 E -F0 2.79(ye)2.789 G 2.79(lt)-2.79 G .29(utorial de Ste)-2.79 F .59 -.15 -(ve R)-.25 H .29(ader sobre).15 F F4(RPN)2.79 E F0 2.79(,p)C .29 -(ero primero ter)-2.79 F(-)-.2 E(minemos con este.)108 420 Q 2.307 -(\241Un momento! Si podemos multiplicar los v)108 436.8 R 2.306 -(alores por mil, entonces, \241tambi\351n deber\355a ser posible el)-.25 -F(mostrar la v)108 448.8 Q -(elocidad en kil\363metros por hora usando los mismos datos!)-.15 E -.15 -(Pa)108 465.6 S .051(ra cambiar el v).15 F .051 -(alor que medimos en metros por se)-.25 F .052 -(gundo, calculamos los metros por hora \(v)-.15 F(alor)-.25 E F3(*)2.552 -E F0 .052(3600\) y)2.552 F(di)108 477.6 Q .791 -(vidimos entre 1000 para sacar los kil\363metros por hora. T)-.25 F .79 -(odo junto hace v)-.8 F(alor)-.25 E F3(*)3.29 E F0 .79 -(\(3600/1000\) == v)3.29 F(alor)-.25 E F3(*)3.29 E F0(3.6.)108 489.6 Q -.155(Como en nuestra base de datos cometimos un error guardando los v) -108 506.4 R .155(alores en kil\363metros, debemos compen-)-.25 F(sar po\ -r ello, multiplicando por 100, por lo que al aplicar esta correcci\363n\ - nos queda v)108 518.4 Q(alor)-.25 E F3(*)2.5 E F0(3600.)2.5 E(Ahora v) -108 535.2 Q -(amos a crear este gif, agre\341ndole un poco m\341s de magia...)-.25 E -F2(rrdtool graph speed3.gif)126 552 Q(\\)162 E -(--start 920804400 --end 920808000)144 564 Q(\\)90 E -(--vertical-label km/h)144 576 Q(\\)162 E 78 -(DEF:myspeed=test.rrd:speed:AVERAGE \\)144 588 R -("CDEF:kmh=myspeed,3600,)144 600 Q F3(*)A F2 138("\\)C 108 -(CDEF:fast=kmh,100,GT,kmh,0,IF \\)144 612 R 108 -(CDEF:good=kmh,100,GT,0,kmh,IF \\)144 624 R -(HRULE:100#0000FF:"Maximum allowed")144 636 Q(\\)84 E -(AREA:good#00FF00:"Good speed")144 648 Q(\\)114 E -(AREA:fast#FF0000:"Too fast")144 660 Q F0 .634(Esto luce mucho mejor)108 -684 R 3.133(.L)-.55 G 3.133(av)-3.133 G .633(elocidad en)-3.283 F F4 -(KM/H)3.133 E F0 3.133(,ya)C .633(dem\341s tenemos una l\355nea e)-3.133 -F .633(xtra mostrando la v)-.15 F(elocidad)-.15 E .988 -(m\341xima permitida \(en el camino por donde conduzco\). T)108 696 R -.988(ambi\351n le cambie los colores de la v)-.8 F .989(elocidad, y)-.15 -F(ahora paso de ser una l\355nea a un \341rea.)108 708 Q 145.68 -(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(6)189.84 E EP -%%Page: 7 7 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F(Los c\341lculos son m\341s complejos ahora. P) -108 96 Q(ara calcular la v)-.15 E(elocidad `)-.15 E(`aceptable')-.74 E -(':)-.74 E/F1 10/Courier@0 SF -(Verifica si la velocidad en kmh es mayor que 100)126 112.8 Q 6(\(k)30 G -(mh,100 \) GT)-6 E(Si es as\355, retorna 0, si no, retorna la velocidad) -126 124.8 Q(\(\(\( kmh,100 \) GT \), 0, kmh\) IF)24 E F0 -.15(Pa)108 -148.8 S(ra calcular la parte de v).15 E(elocidad `)-.15 E(`e)-.74 E -(xcesi)-.15 E -.25(va)-.25 G -.74('').25 G(:).74 E F1 -(Verifica si la velocidad en kmh es mayor que 100)126 165.6 Q 6(\(k)30 G -(mh,100 \) GT)-6 E(Si es as\355, retorna la velocidad, si no, retorna 0) -126 177.6 Q(\(\(\( kmh,100\) GT \), kmh, 0\) IF)24 E/F2 10/Times-Bold@0 -SF -9.438(MM)108 212.4 S -4.998(aa)9.438 G -4.998(gg)4.998 G -2.778(ii) -4.998 G 9.996 -4.998(aa gg)2.778 H -4.438(rr)4.998 G -4.9984.438 G --5.558<8c8c>4.998 G -4.438(cc)5.558 G -4.998(aa)4.438 G F0 .593(Me gust\ -a creer que virtualmente no hay limites para lo que RRDtool puede hacer\ - con los datos. No v)108 229.2 R .792 -.1(oy a)-.2 H -.15(ex)108 241.2 S -(plicarlo en detalle, pero mira este).15 E/F3 9/Times-Roman@0 SF(GIF:) -2.5 E F1(rrdtool graph speed4.gif)126 258 Q(\\)162 E -(--start 920804400 --end 920808000)144 270 Q(\\)90 E -(--vertical-label km/h)144 282 Q(\\)162 E 78 -(DEF:myspeed=test.rrd:speed:AVERAGE \\)144 294 R -("CDEF:kmh=myspeed,3600,)144 306 Q/F4 10/Symbol SF(*)A F1 138("\\)C 108 -(CDEF:fast=kmh,100,GT,100,0,IF \\)144 318 R 72 -(CDEF:over=kmh,100,GT,kmh,100,-,0,IF \\)144 330 R 108 -(CDEF:good=kmh,100,GT,0,kmh,IF \\)144 342 R -(HRULE:100#0000FF:"Maximum allowed")144 354 Q(\\)84 E -(AREA:good#00FF00:"Good speed")144 366 Q(\\)114 E -(AREA:fast#550000:"Too fast")144 378 Q(\\)126 E -(STACK:over#FF0000:"Over speed")144 390 Q F0 -1.11(Va)108 414 S -(mos a crear una p\341gina)1.11 E F3(HTML)2.5 E F0(simple para v)2.5 E -(er los tres archi)-.15 E -.2(vo)-.25 G(s).2 E F3(GIF:)2.5 E F1 -(Velocidad)126 430.8 Q -(Speed in meters per second)126 442.8 Q -(
)126 454.8 Q -(Speed in kilometers per hour)126 466.8 Q -(
)126 478.8 Q(Traveled too fast?)126 -490.8 Q()126 502.8 Q F0(Gu\341rdalo como `)108 526.8 Q -(`speed.html')-.74 E 2.5('oa)-.74 G(lgo parecido, y e)-2.5 E -(xam\355nalo con un na)-.15 E -2.25 -.15(veg a)-.2 H(dor).15 E(.)-.55 E -.556(Ahora, todo lo que tienes que hacer es medir los datos re)108 543.6 -R .557(gularmente y actualizar la base de datos. Cuando)-.15 F .37 -(quieras v)108 555.6 R .37(erlos, vuelv)-.15 F 2.87(eac)-.15 G .37 -(rear los archi)-2.87 F -.2(vo)-.25 G(s).2 E F3(GIF)2.87 E F0 2.87(ya) -2.87 G(se)-2.87 E .369(g\372rate que se car)-.15 F .369(guen de nue)-.18 -F .769 -.2(vo e)-.25 H 2.869(nt).2 G 2.869(un)-2.869 G -2.25 -.2(av e g) --2.869 H .369(ador \(Nota:).15 F 1.563(presionar el bot\363n de `)108 -567.6 R(`refrescar')-.74 E 4.063('p)-.74 G 1.563 -(uede no ser su\214ciente; en particular)-4.063 F 4.064(,N)-.4 G 1.564 -(etscape tiene un problema al)-4.064 F(respecto, por lo que necesitaras\ - darle al bot\363n mientras presionas la tecla de may\372sculas.)108 -579.6 Q F2 -7.218(AA)108 602.4 S -4.438(cc)7.218 G -3.328(tt)4.438 G --5.558(uu)3.328 G -4.998(aa)5.558 G -2.778(ll)4.998 G -2.778(ii)2.778 G --4.438(zz)2.778 G -4.998(aa)4.438 G -4.438(cc)4.998 G -2.778(ii)4.438 G --4.998(oo)2.778 G -5.558(nn)4.998 G -4.438(ee)5.558 G 7.776 -3.888(ss d) -4.438 H(de)-1.67 E 2.5(ev)-4.438 G -.1(ve)-7.498 G(er)-4.338 E(rd)-4.438 -E(da)-5.558 E(ad)-4.998 E(d)-5.558 E F0 5.434 -1(Ya h)108 619.2 T 3.434 -(emos usado el comando `)1 F(`update')-.74 E 3.433 -('; vimos que recibia uno o m\341s par\341metros en el formato:)-.74 F --.74(``)108 631.2 S(:')-.25 E .912('. P)-.74 F .912 -(ara f)-.15 F .913 -(acilitarte las cosas, puedes obtener la fecha actual colocando `)-.1 F -(`N')-.74 E 3.413('e)-.74 G 3.413(nl)-3.413 G 3.413(af)-3.413 G(echa.) --3.413 E -.8(Ta)108 643.2 S(mbi\351n podr\355as usar la funci\363n `).8 -E(`time')-.74 E 2.5('d)-.74 G 2.5(eP)-2.5 G -(erl para obtenerla. El ejemplo m\341s corto de todo el tutorial :\)) --2.5 E F1(perl -e 'print time, "\\n" ')126 660 Q F0 1.161 -(Ahora, la forma de poner a correr un programa a interv)108 684 R 1.161 -(alos re)-.25 F 1.161(gulares de tiempo depende del sistema de)-.15 F -(operaci\363n. La actualizaci\363n, en pseudo-c\363digo, ser\355a:)108 -696 Q 145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(7)189.84 E EP -%%Page: 8 8 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Courier@0 SF -(Toma el valor, col\363calo en la variable "$speed")126 96 Q -(rrdtool update speed.rrd N:$speed)126 108 Q F0(\(Pero no lo hag)108 132 -Q(as sobre nuestra base de datos de pruebas, que a\372n la v)-.05 E -(amos a usar en otros ejemplos.)-.25 E 1.42(Eso es todo. Ejecutando est\ -e script cada 5 minutos, lo \372nico que tienes que hacer para v)108 -148.8 R 1.42(er los gr\341\214cos)-.15 F .436(actuales es correr los ej\ -emplos anteriores, que tambi\351n puedes poner en un script. Lue)108 -160.8 R .436(go de correrlo, basta)-.15 F(con car)108 172.8 Q -.05(ga) --.18 G 2.5(ri).05 G(nde)-2.5 E(x.html)-.15 E/F2 10/Times-Bold@0 SF --7.218(UU)108 195.6 S -5.558(nn)7.218 G -4.998(aa)5.558 G 7.776 -3.888 -(ss p)4.998 H(pa)-1.67 E(al)-4.998 E(la)-2.778 E(ab)-4.998 E(br)-5.558 E -(ra)-4.438 E(as)-4.998 E 2.5(ss)-3.888 G(so)-6.388 E(ob)-4.998 E(br) --5.558 E -.18(re)-4.438 G(e)-4.258 E/F3 9/Times-Bold@0 SF -5.002(SS)2.5 -G -6.496(NN)5.002 G -8.494(MM)6.496 G -5.497(PP)8.494 G F0 .991(Me imag\ -ino que muy pocas personas ser\341n capaces de obtener en su ordenador \ -datos reales de su coche)108 212.4 R 1.248(cada 5 minutos; los dem\341s\ - nos tendremos que conformar con alg\372n otro contador)108 224.4 R -3.748(.P)-.55 G 1.248(uedes, por ejemplo,)-3.748 F .057(medir la cantid\ -ad de p\341ginas que ha hecho una impresora, cuanto caf\351 has hecho c\ -on la cafetera, el medidor)108 236.4 R .695(del consumo de electricidad\ -, o cualquier otra cosa. Cualquier contador incremental puede monitoriz\ -arse y)108 248.4 R .056 -(gra\214carse con lo que has aprendido hasta ahora. M\341s adelante, v) -108 260.4 R .057(eremos tambi\351n como monitorizar otro tipo)-.15 F -.254(de v)108 272.4 R .254 -(alores, como la temperatura. La mayor\355a usaremos alguna v)-.25 F -.253(ez un contador que lle)-.15 F .553 -.15(ve l)-.25 H 2.753(ac).15 G -.253(uenta de cuan-)-2.753 F .483 -(tos octetos \(bytes\) a transferido un dispositi)108 284.4 R .883 -.2 -(vo d)-.25 H 2.983(er).2 G .483(ed, as\355 que v)-2.983 F .483(amos a v) --.25 F .483(er como hacer esto. Empezaremos)-.15 F .437(describiendo co\ -mo recoger los datos. Hay quien dir\341 que hay herramientas que pueden\ - recoger estos datos)108 296.4 R .811(por ti. \241Es cierto! Pero, creo\ - que es importante darse cuenta de que no son necesarias. Cuando tienes\ - que)108 308.4 R(determinar porqu\351 algo no funciona, necesitas saber\ - c\363mo funciona en primer lug)108 320.4 Q(ar)-.05 E(.)-.55 E .704 -(Una herramienta que mencionamos bre)108 337.2 R -.15(ve)-.25 G .704 -(mente al principio del documento es).15 F/F4 9/Times-Roman@0 SF(SNMP) -3.204 E F0(.)A F4(SNMP)3.204 E F0 .704(es una forma)3.204 F 3.03 -(de comunicarse con tus equipos.)108 349.2 R 3.03 -(La herramienta particular que v)8.03 F 3.23 -.1(oy a u)-.2 H 3.03 -(sar m\341s adelante se llama).1 F -.74(``)108 361.2 S(snmpget').74 E -(', y funciona as\355:)-.74 E F1(snmpget dispositivo clave OID)126 378 Q -F0 .619(En `)108 402 R(`dispositi)-.74 E -.2(vo)-.25 G 2.098 -.74('' c) -.2 H .618(olocas el nombre o direcci\363n).74 F F4(IP)3.118 E F0 .618 -(del equipo a monitorizar)3.118 F 3.118(.E)-.55 G 3.118(nc)-3.118 G(la) --3.118 E -.15(ve)-.2 G 3.118(,c).15 G .618(olocas la `)-3.118 F(`cadena) --.74 E .814(de caracteres de la comunidad de lectura')108 414 R .815 -(', como se le denomina en el mundillo)-.74 F F4(SNMP)3.315 E F0 5.815 -(.M)C .815(uchos disposi-)-5.815 F(ti)108 426 Q -.2(vo)-.25 G 3.32(sa).2 -G .82(ceptar\341n `)-3.32 F(`public')-.74 E 3.32('c)-.74 G .819 -(omo cadena por defecto, pero por razones de pri)-3.32 F -.25(va)-.25 G -.819(cidad y se).25 F .819(guridad esta cla)-.15 F -.15(ve)-.2 G(puede \ -estar deshabilitada. Consulta la documentaci\363n correspondiente al di\ -spositi)108 438 Q .4 -.2(vo o p)-.25 H(rograma.).2 E(Lue)108 454.8 Q -(go esta el tercer par\341metro, llamado)-.15 E F4(OID)2.5 E F0 -(\(Object IDenti\214er)2.5 E 2.5(,i)-.4 G(denti\214cador de objeto\).) --2.5 E 1.672(Al principio, cuando empiezas a aprender sobre)108 471.6 R -F4(SNMP)4.172 E F0 4.172(,p)C 1.672 -(arece muy confuso. No lo es tanto cuando le)-4.172 F .306 -(hechas una ojeada a los `)108 483.6 R(`)-.74 E F4(MIB)A F0 1.785 -.74 -('' \()D .305 -(Manager Information Base, o Base de Informaci\363n Administrati).74 F --.25(va)-.25 G .305(\). Es un).25 F .464(\341rbol in)108 495.6 R -.15 -(ve)-.4 G .465(rtido que describe los datos, empezando en un nodo ra\ -\355z desde el que parten v).15 F .465(arias ramas.)-.25 F(Cada)5.465 E -1.64(rama termina en otro nodo y puede abrir nue)108 507.6 R -.25(va) --.25 G 4.139(ss).25 G 1.639 -(ub-ramas. Cada rama tiene un nombre, y forman un)-4.139 F .238 -(camino que nos lle)108 519.6 R .738 -.25(va h)-.25 H .238 -(asta el fondo del \341rbol. En este ejemplo, las ramas que v).25 F .238 -(amos a tomar se llaman iso,)-.25 F(or)108 531.6 Q 1.105 -(g, dod, internet, mgmt y mib-2. T)-.18 F 1.104 -(ambi\351n pueden accederse por su n\372mero relati)-.8 F -.2(vo)-.25 G -3.604(;e).2 G 3.604(ne)-3.604 G 1.104(ste caso, estos)-3.604 F -(n\372meros son 1, 3, 6, 1, 2 y 1:)108 543.6 Q F1 -(iso.org.dod.internet.mgmt.mib-2 \(1.3.6.1.2.1\))126 560.4 Q F0 .552 -(En algunos programas se usa un punto al iniciar el)108 584.4 R F4(OID) -3.052 E F0 3.053(.E)C .553 -(sto puede ser confuso; no hay ning\372n punto ini-)-3.053 F .791 -(cial en la especi\214caci\363n de los)108 596.4 R F4(OID)3.291 E F0 -.791(... sin embar)B .79 -(go, algunos programas usan por defecto un pre\214jo inicial.)-.18 F --.15(Pa)108 608.4 S 1.144(ra indicar la diferencia entre los).15 F F4 -(OID)3.644 E F0(abre)3.644 E 1.145 -(viados \(o sea, a los que se le pondr\341 el pre\214jo inicial\) y los) --.25 F 1.239(completos, estos programas necesitan que los)108 620.4 R F4 -(OID)3.738 E F0 1.238(completos empiecen por un punto. P)3.738 F 1.238 -(ara empeorar las)-.15 F(cosas, se usan v)108 632.4 Q -(arios pre\214jos distintos...)-.25 E .056(De acuerdo, sig)108 649.2 R -.057(amos con el inicio de nuestro)-.05 F F4(OID:)2.557 E F0 .057 -(ten\355amos 1.3.6.1.2.1 . Ahora, nos interesa la rama `)2.557 F(`inter) --.74 E(-)-.2 E -.1(fa)108 661.2 S(ces').1 E(', que tiene el n\372mero d\ -os \(o sea, 1.3.6.1.2.1.2, o 1.3.6.1.2.1.interf)-.74 E(aces\).)-.1 E -.303(Lo primero es hacernos con un programa)108 678 R F4(SNMP)2.802 E F0 -2.802(.B)C .302 -(usca alg\372n paquete pre-compilado para tu plataforma, si)-2.802 F -1.531(no, puedes b)108 690 R 1.531(uscar el c\363digo fuente y compilar\ -lo tu mismo. En Internet encontrar\341s muchos programas,)-.2 F 1.521 -(b\372scalos con un motor de b\372squeda o como pre\214eras.)108 702 R -1.521(Mi sugerencia es que b)6.521 F 1.52(usques el paquete)-.2 F F4 -(CMU-)4.02 E(SNMP)108 714 Q F0 2.5(,q)C(ue esta bastante difundido.)-2.5 -E 145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(8)189.84 E EP -%%Page: 9 9 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F 1.582(Asumamos que ya tienes el programa. Empe\ -cemos por tomar ciertos datos que est\341n disponibles en la)108 96 R -(mayor\355a de los sistemas. Recuerda: hay un nombre abre)108 108 Q -(viado para la parte del \341rbol que m\341s nos interesa.)-.25 E -.02 --1.29(Vo y)108 124.8 T 3.816(au)5.106 G 1.316(sar la v)-3.816 F 1.316 -(ersi\363n corta, ya que creo que este documento ya es lo bastante lar) --.15 F 1.315(go. Si no te funciona,)-.18 F 1.301 -(a\361\341dele el pre\214jo .1.3.6.1.2.1 y prueba de nue)108 136.8 R -.2 -(vo)-.25 G 3.802(.Op).2 G 1.302(rueba le)-3.802 F 1.302 -(yendo el manual; s\341ltate las partes que no)-.15 F -(entiendas a\372n, y b)108 148.8 Q -(usca las secciones que hablan de como arrancar y usar el programa.)-.2 -E/F1 10/Courier@0 SF(snmpget myrouter public system.sysdescr.0)126 165.6 -Q F0 .773(El dispositi)108 189.6 R 1.173 -.2(vo d)-.25 H .772 -(eber\341 contestarte con una descripci\363n, probablemente v).2 F .772 -(ac\355a, de s\355 mismo. Si no consigues)-.25 F .785 -(una respuesta v\341lida, prueba con otra `)108 201.6 R(`cla)-.74 E -.15 -(ve)-.2 G 2.266 -.74('' u o).15 H .786(tro dispositi).74 F -.2(vo)-.25 G -3.286(;n).2 G 3.286(op)-3.286 G .786(odemos se)-3.286 F .786 -(guir hasta tener un resul-)-.15 F(tado.)108 213.6 Q F1 -(snmpget myrouter public interfaces.ifnumber.0)126 230.4 Q F0 .182(Con \ -suerte, usando este comando obtendr\341s un n\372mero como resultado: e\ -l n\372mero de interf)108 254.4 R .182(aces del dispos-)-.1 F(iti)108 -266.4 Q -.2(vo)-.25 G 2.5(.S).2 G 2.5(ie)-2.5 G 2.5(sa)-2.5 G(s\355, se) --2.5 E(guiremos adelante con otro programa, llamado `)-.15 E(`snmpw)-.74 -E(alk')-.1 E(')-.74 E F1 -(snmpwalk myrouter public interfaces.iftable.ifentry.ifdescr)126 283.2 Q -F0(Si obtienes una lista de interf)108 307.2 Q(aces, ya casi hemos lle) --.1 E -.05(ga)-.15 G(do. Aqu\355 tienes un ejemplo del resultado:).05 E -F1([user@host /home/alex]$ snmpwalk cisco public 2.2.1.2)126 324 Q -(interfaces.ifTable.ifEntry.ifDescr.1 = "BRI0: B-Channel 1")126 336 Q -(interfaces.ifTable.ifEntry.ifDescr.2 = "BRI0: B-Channel 2")126 348 Q -(interfaces.ifTable.ifEntry.ifDescr.3 = "BRI0" Hex: 42 52 49 30)126 360 -Q(interfaces.ifTable.ifEntry.ifDescr.4 = "Ethernet0")126 372 Q -(interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0")126 384 Q F0 -(En este equipo)108 408 Q/F2 9/Times-Roman@0 SF(CISCO)2.5 E F0 2.5(,q)C -(uiero monitorizar la interf)-2.5 E(az `)-.1 E(`Ethernet0')-.74 E 2.5 -('. V)-.74 F(iendo que es la cuarta, pruebo con:)-.6 E F1 -([user@host /home/alex]$ snmpget cisco public 2.2.1.10.4 2.2.1.16.4)126 -424.8 Q(interfaces.ifTable.ifEntry.ifInOctets.4 = 2290729126)126 448.8 Q -(interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519)126 460.8 Q F0 -(Entonces, tengo 2 OIDs que monitorizar)108 484.8 Q 2.5(,ys)-.4 G -(on \(en el formato lar)-2.5 E(go, ahora\):)-.18 E F1 -(1.3.6.1.2.1.2.2.1.10)126 501.6 Q(y)156 525.6 Q(1.3.6.1.2.1.2.2.1.16)126 -549.6 Q F0 2.5(,a)108 573.6 S(mbas con el n\372mero de interf)-2.5 E -(az de 4)-.1 E .183(No te eng)108 590.4 R .183(a\361es, esto no lo logr\ -e yo al primer intento. Me tom\363 un tiempo entender lo que signi\214c\ -aban todos)-.05 F .9 -(estos n\372meros; ayuda cuando se traducen en un te)108 602.4 R .899 -(xto descripti)-.15 F -.2(vo)-.25 G .899(... por lo menos, cuando oig).2 -F .899(as hablar de)-.05 F .527(MIBs y OIDs, ahora sabr\341s de qu\351 \ -se trata. No te olvides del n\372mero de interf)108 614.4 R .527 -(az \(0 si el v)-.1 F .527(alor no depende)-.25 F(de una interf)108 -626.4 Q(az\), y prueba con snmpw)-.1 E -(alk si no obtienes una respuesta clara con snmpget.)-.1 E .468 -(Si entendiste todo esto, y obtienes resultados del dispositi)108 643.2 -R .868 -.2(vo c)-.25 H .468 -(on el que est\341s probando, sigue adelante con).2 F -(el tutorial. Si no, vuelv)108 655.2 Q 2.5(eal)-.15 G -(eer esta secci\363n; es importante)-2.5 E 145.68(2001-02-11 Last)72 768 -R(change: 1.0.28)2.5 E(9)189.84 E EP -%%Page: 10 10 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Times-Bold@0 SF -7.218(UU)108 96 S 11.116 --5.558(nn e)7.218 H(ej)1.12 E(je)-3.328 E(em)-4.438 E(mp)-8.328 E(pl) --5.558 E(lo)-2.778 E 2.5(or)-4.998 G -.18(re)-6.938 G(ea)-4.258 E(al) --4.998 E(l)-2.778 E F0 .445(Ok, empecemos con la di)108 112.8 R -.15(ve) --.25 G .445(rsi\363n. Primero, crea una base de datos nue).15 F -.25(va) --.25 G 2.945(.V).25 G .445(amos a guardar en ella 2 conta-)-4.055 F .029 -(dores, `)108 124.8 R(`input')-.74 E 2.529('y`)-.74 G(`ouput')-3.269 E -.029('. Los datos los v)-.74 F .029(amos a guardar en archi)-.25 F -.2 -(vo)-.25 G 2.529(sq).2 G .028(ue los promediar\341n, tomando grupos) --2.529 F .652(de 1, 6, 24 o 288 muestras. T)108 136.8 R .652 -(ambi\351n archi)-.8 F -.25(va)-.25 G .652(remos los v).25 F .652 -(alores m\341ximos. Lo e)-.25 F .652(xplicaremos con m\341s detalle)-.15 -F(despu\351s. El interv)108 148.8 Q -(alo de tiempo entre las muestras ser\341 de 300 se)-.25 E -(gundos \(5 minutos\).)-.15 E/F2 10/Courier@0 SF 6(1m)114 165.6 S -(uestra "promediada" sigue siendo 1 muestra cada 5 minutos)-6 E 6(6m)114 -177.6 S(uestras promediadas son un promedio de cada 30 minutos)-6 E -(24 muestras promediadas son un promedio de cada 2 horas)114 189.6 Q -(288 muestras promediadas son un promedio de cada d\355a)114 201.6 Q F0 --1.11(Va)108 225.6 S(mos a tratar de ser compatibles con)1.11 E/F3 9 -/Times-Roman@0 SF(MR)2.5 E(TG)-.54 E F0 2.5(,q)C -(ue guarda m\341s o menos esta cantidad de datos:)-2.5 E F2 -(600 muestras de 5 minutos:)114 242.4 Q 6(2d)60 G(\355as y 2 horas)-6 E -(600 promedios de 30 minutos:)114 254.4 Q(12.5 d\355as)48 E -(600 promedios de 2 horas:)114 266.4 Q(50 d\355as)66 E -(600 promedios de 1 d\355a:)114 278.4 Q(732 d\355as)78 E F0 .769(Uniend\ -o todos estos rangos tenemos que en total guardamos datos de unos 797 d\ -\355as. RRDtool guarda los)108 302.4 R .624 -(datos de una forma distinta a)108 314.4 R F3(MR)3.124 E(TG)-.54 E F0 -3.124(;n)C 3.124(oe)-3.124 G .624(mpieza el archi)-3.124 F 1.024 -.2 -(vo `)-.25 H(`semanal')-.54 E 3.124('d)-.74 G .624(onde acaba el `) --3.124 F(`diario')-.74 E .624(', sino que)-.74 F .202(ambos archi)108 -326.4 R -.2(vo)-.25 G 2.702(sc).2 G .201(ontienen la informaci\363n m\ -\341s reciente, \241por lo que con RRDtool archi)-2.702 F -.25(va)-.25 G -.201(mos m\341s datos que).25 F(con)108 338.4 Q F3(MR)2.5 E(TG)-.54 E F0 -(!)A(Necesitaremos:)108 355.2 Q F2(600 muestras de 5 minutos)114 372 Q -(\(2 d\355as y 2 horas\))24 E(700 entradas de 30 minutos)114 384 Q -(\(2 d\355as y 2 horas, m\341s 12.5 d\355as\))18 E -(775 entradas de 2 horas)114 396 Q(\(lo anterior + 50 d\355as\))36 E -(797 entradas de 1 d\355a)114 408 Q -(\(lo anterior + 732 d\355as, redondeando\))48 E -(rrdtool create myrouter.rrd)126 432 Q(\\)54 E 12 -(DS:input:COUNTER:600:U:U \\)180 444 R 6(DS:output:COUNTER:600:U:U \\) -180 456 R 30(RRA:AVERAGE:0.5:1:600 \\)180 468 R 30 -(RRA:AVERAGE:0.5:6:700 \\)180 480 R 24(RRA:AVERAGE:0.5:24:775 \\)180 492 -R 18(RRA:AVERAGE:0.5:288:797 \\)180 504 R 54(RRA:MAX:0.5:1:600 \\)180 -516 R 54(RRA:MAX:0.5:6:700 \\)180 528 R 48(RRA:MAX:0.5:24:775 \\)180 540 -R(RRA:MAX:0.5:288:797)180 552 Q F0 .269(Lo siguiente es recoger los dat\ -os y guardarlos, como en el ejemplo siguiente. Esta parcialmente en pse\ -udo-)108 576 R(c\363digo, por lo que tendr\341s que b)108 588 Q(uscar e) --.2 E(xactamente como hacerlo funcionar en tu sistema operati)-.15 E -.2 -(vo)-.25 G(.).2 E 145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E -(10)184.84 E EP -%%Page: 11 11 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Courier@0 SF -(mientras no sea el fin del universo)126 96 Q(hacer)126 108 Q -(tomar el resultado de)144 120 Q(snmpget router community 2.2.1.10.4)168 -132 Q(en la variable $in)144 144 Q(tomar el resultado de)144 156 Q -(snmpget router community 2.2.1.16.4)168 168 Q(en la variable $out)144 -180 Q(rrdtool update myrouter.rrd N:$in:$out)144 192 Q -(esperar 5 minutos)144 204 Q(hecho)126 216 Q F0(Lue)108 240 Q -(go, tras recoger datos por un d\355a, crea una imagen, usando:)-.15 E -F1(rrdtool graph myrouter-day.gif --start -86400 \\)126 256.8 Q -(DEF:inoctets=myrouter.rrd:input:AVERAGE \\)180 268.8 Q -(DEF:outoctets=myrouter.rrd:output:AVERAGE \\)180 280.8 Q -(AREA:inoctets#00FF00:"In traffic" \\)180 292.8 Q -(LINE1:outoctets#0000FF:"Out traffic")180 304.8 Q F0 .014(Este comando \ -debe producir un gr\341\214co del tr\341\214co del d\355a. Un d\355a so\ -n 24 horas, de 60 minutos, de 60 se)108 328.8 R(gun-)-.15 E .098 -(dos: 24)108 340.8 R/F2 10/Symbol SF(*)A F0(60)A F2(*)A F0 .098 -(60=86400, o sea que empezamos a `)B(`ahora')-.74 E 2.599('m)-.74 G .099 -(enos 86400 se)-2.599 F .099(gundos. De\214nimos \(con los DEFs\))-.15 F --.74(``)108 352.8 S(inoctets').74 E 3.404('y`)-.74 G(`outoctets')-4.144 -E 3.404('c)-.74 G .904(omo los v)-3.404 F .903 -(alores promedio de la base da datos myrouter)-.25 F .903(.rrd, dib)-.55 -F .903(ujando un \341rea)-.2 F(para el tr\341\214co de entrada y una l\ -\355nea para el tr\341\214co de salida.)108 364.8 Q .3(Mira la imagen y\ - sigue recogiendo datos por unos cuantos d\355as. Si lo deseas, puedes \ -probar con los ejemp-)108 381.6 R -(los de la base de datos de pruebas y v)108 393.6 Q -(er si puedes hacer trabajar las di)-.15 E -.15(ve)-.25 G -(rsas opciones y operaciones.).15 E(Sugerencia:)108 410.4 Q .399 -(Haz un gr\341\214co que muestre el tr\341\214co en bytes por se)108 -427.2 R .399(gundo y en bits por se)-.15 F .399 -(gundo. Colorea el tr\341\214co Ether)-.15 F(-)-.2 E -(net rojo si sobrepasa los cuatro me)108 439.2 Q -.05(ga)-.15 G -(bits por se).05 E(gundo.)-.15 E/F3 10/Times-Bold@0 SF -6.108(FF)108 462 -S -5.558(uu)6.108 G -5.558(nn)5.558 G -4.438(cc)5.558 G -2.778(ii)4.438 -G -4.998(oo)2.778 G -5.558(nn)4.998 G -4.438(ee)5.558 G 7.776 -3.888 -(ss d)4.438 H(de)-1.67 E 2.5(ec)-4.438 G(co)-6.938 E(on)-4.998 E(ns) --5.558 E(so)-3.888 E(ol)-4.998 E(li)-2.778 E(id)-2.778 E(da)-5.558 E(ac) --4.998 E(ci)-4.438 E<69f3>-2.778 E-4.998 E(n)-5.558 E F0 .19(Unos\ - cuantos p\341rrafos atr\341s habl\341bamos sobre la posibilidad de gua\ -rdar el v)108 478.8 R .191(alor m\341ximo en v)-.25 F .191 -(ez del prome-)-.15 F(dio. Profundicemos un poco en este tema.)108 490.8 -Q .307(Recordemos lo que habl\341bamos sobre la v)108 507.6 R .307 -(elocidad de un coche.)-.15 F(Supong)5.307 E .306 -(amos que manejamos a 144)-.05 F/F4 9/Times-Roman@0 SF(KM/H)2.806 E F0 -.483(durante 5 minutos y lue)108 519.6 R .484(go nos detiene la polic\ -\355a durante unos 25 minutos. Al \214nalizar el re)-.15 F -.05(ga)-.15 -G .484(\361o, tomamos).05 F .979(nuestro port\341til y creamos una imag\ -en desde nuestra base de datos. Si visualizamos la se)108 531.6 R(gunda) --.15 E F4(RRA)3.478 E F0(que)3.478 E .372 -(creamos, tendremos el promedio de 6 muestreos. Las v)108 543.6 R .372 -(elocidades re)-.15 F .372(gistradas serian 144+0+0+0+0+0=144,)-.15 F -.56(lo que en promedio nos da una v)108 555.6 R .56(elocidad de 24)-.15 -F F4(KM/H)3.06 E F0 .559 -(., con lo que nos igual nos pondr\355an una multa, s\363lo)B -(que no por e)108 567.6 Q(xceso de v)-.15 E(elocidad.)-.15 E(Ob)108 -584.4 Q .571(viamente, en este caso, no deber\355amos tomar en cuenta l\ -os promedios. Estos son \372tiles en v)-.15 F .571(arios casos.)-.25 F -.552(Por ejemplo, si queremos v)108 596.4 R .552(er cuantos)-.15 F F4 -(KM)3.052 E F0 .552(hemos viajado, este ser\355a el gr\341\214co m\341s\ - indicado. Pero por otro)3.052 F(lado, para v)108 608.4 Q(er la v)-.15 E -(elocidad ha la que hemos viajado, los v)-.15 E -(alores m\341ximos son m\341s adecuados.)-.25 E .159(Es lo mismo con lo\ -s datos que recogemos. Si quieres saber la cantidad total, mira los pro\ -medios. Si quieres)108 625.2 R -.15(ve)108 637.2 S 4.087(rl).15 G 4.087 -(av)-4.087 G 1.587(elocidad, mira los m\341ximos. Con el tiempo, ambas \ -cantidades se separan cada v)-4.237 F 1.586(ez m\341s.)-.15 F 1.586 -(En la)6.586 F .536 -(\372ltima base de datos que creamos, hab\355a dos archi)108 649.2 R -.2 -(vo)-.25 G 3.037(sq).2 G .537 -(ue guardaban los datos de cada d\355a. El archi)-3.037 F .937 -.2(vo q) --.25 H(ue).2 E .348(guarda los promedios mostrar\341 v)108 661.2 R .348 -(alores bajos, mientras que el de m\341ximos mostrar\341 v)-.25 F .348 -(alores m\341s altos. P)-.25 F(ara)-.15 E .44(mi coche, mostrar\355a v) -108 673.2 R .44(alores promedio de 96/24=4)-.25 F F4(KM/H)2.94 E F0 .44 -(\(viajo unos 96 kil\363metros por d\355a\), y m\341ximos de)2.94 F -(1220)108 685.2 Q F4(KM/H)2.5 E F0(\(la v)2.5 E -(elocidad m\341xima que alcanzo cada d\355a\))-.15 E 1.285(Como v)108 -702 R 1.285(es, una gran diferencia. No mires el se)-.15 F 1.284 -(gundo gr\341\214co para estimar la distancia que recorro, ni al)-.15 F -.64(primero para estimar la v)108 714 R .64(elocidad a la que v)-.15 F --.1(oy)-.2 G 3.14(.E)-.55 G .64 -(sto s\363lo funciona con muestras muy cercanas, pero no si)-3.14 F -(sacas promedios.)108 726 Q 145.68(2001-02-11 Last)72 774 R -(change: 1.0.28)2.5 E(11)184.84 E EP -%%Page: 12 12 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F .976(Algunas v)108 96 R .976 -(eces, hago un viaje lar)-.15 F .975 -(go. Si hago un recorrido por Europa, conduciendo por unas 12 horas, el) --.18 F .159(primer gr\341\214co subir\341 a unos 60)108 108 R/F1 9 -/Times-Roman@0 SF(KM/H)2.659 E F0 2.659(.E)C 2.659(ls)-2.659 G -.15(eg) --2.659 G .159(undo mostrar\341 unos 180).15 F F1(KM/H)2.659 E F0 2.659 -(.E)C .159(sto signi\214ca que recorr\355 unos)-2.659 F(60)108 120 Q F1 -(KM/H)2.805 E F0 .304(por 24 horas = 1440)2.805 F F1(KM)2.804 E F0 2.804 -(.M)C .304(uestra adem\341s que fui a una v)-2.804 F .304 -(elocidad promedio mayor a la normal y)-.15 F 2.8(au)108 132 S 2.8(nm) --2.8 G .3(\341ximo de 180)-2.8 F F1(KM/H)2.8 E F0 2.8<2ca1>C .3 -(no que fui 8 horas a una v)-2.8 F .3(elocidad \214ja de 180)-.15 F F1 -(KM/H)2.8 E F0 2.8(!E)C .3(ste es un ejemplo real:)-2.8 F 1.877 -(tengo que se)108 144 R 1.877 -(guir la corriente en las autopistas de Alemania, detenerme por g)-.15 F -1.876(asolina y caf\351 de v)-.05 F 1.876(ez en)-.15 F .84(cuando, mane\ -jar m\341s lentamente por Austria y Holanda, e ir con cuidado en las mo\ -nta\361as y las villas. Si)108 156 R 2.666(vi\351ramos los gr\341\214co\ -s de los promedios de cada 5 minutos, la imagen ser\355a completamente \ -distinta;)108 168 R -.15(ve)108 180 S .682(r\355amos los mismos v).15 F -.683(alores de promedio y de m\341xima. \(suponiendo que las mediciones\ - fueran cada 300)-.25 F(se)108 192 Q .403(gundos\). Se podr\355a v)-.15 -F .403(er cuando par\351, cuando iba en primera, cuando iba por las aut\ -opistas, etc. La granu-)-.15 F .595(laridad de los datos es m\341s alta\ -, por lo que se tiene m\341s informaci\363n. Sin embar)108 204 R .595 -(go, esto nos lle)-.18 F 1.095 -.25(va u)-.25 H .595(nas 12).25 F .121(\ -muestras por hora, o 288 al d\355a, lo cual es mucho para guardar por u\ -n periodo de tiempo lar)108 216 R .12(go. Por lo tanto,)-.18 F .798 -(sacamos el promedio, guardando e)108 228 R -.15(ve)-.25 G .798 -(ntualmente un solo v).15 F .798(alor por d\355a.)-.25 F .798 -(Con este \372nico v)5.798 F(alor)-.25 E 3.298(,n)-.4 G 3.298(op)-3.298 -G(odemos)-3.298 E -.15(ve)108 240 S 2.5(rm).15 G(ucho.)-2.5 E 1.145 -(Es importante comprender lo que e)108 256.8 R 1.145 -(xpuesto en estos \372ltimos p\341rrafos.)-.15 F 1.145 -(Unos ejes y unas l\355neas no tienen)6.145 F 2.962(ning\372n v)108 -268.8 R 2.963(alor por si mismos; hay que saber que representan e inter\ -pretar correctamente los v)-.25 F(alores)-.25 E -(obtenidos. Sean cuales sean los datos, esto siempre ser\341 cierto.)108 -280.8 Q .002(El mayor error que puedes cometer es usar los datos recogi\ -dos para algo para lo cual no sirv)108 297.6 R .002(en. En ese caso,) --.15 F(seria hasta mejor no tener gr\341\214co alguno.)108 309.6 Q/F2 10 -/Times-Bold@0 SF -7.218(RR)108 332.4 S -4.438(ee)7.218 G -5.558(pp)4.438 -G -4.998(aa)5.558 G -3.888(ss)4.998 G -4.438(ee)3.888 G -8.328(mm)4.438 -G -4.998(oo)8.328 G 7.776 -3.888(ss l)4.998 H(lo)1.11 E 2.5(oq)-4.998 G -(qu)-8.058 E(ue)-5.558 E 2.5(es)-4.438 G(sa)-6.388 E(ab)-4.998 E(be) --5.558 E(em)-4.438 E(mo)-8.328 E(os)-4.998 E(s)-3.888 E F0 .051 -(Ahora ya sabes como crear una base de datos. Puedes guardar v)108 349.2 -R .051(alores en ella, e)-.25 F .052(xtraerlos creando un gr\341\214co,) --.15 F .606(hacer operaciones matem\341ticas con ellos desde la base de\ - datos y visualizar los resultados de estas en v)108 361.2 R(ez)-.15 E -.025(de los datos originales. V)108 373.2 R .026(imos la diferencia ent\ -re los promedios y los m\341ximos y cuando debemos usar cada)-.6 F -(uno \(o al menos una idea de ello\))108 385.2 Q .718(RRDtool puede hac\ -er m\341s de lo que hemos visto hasta ahora. Pero antes de continuar)108 -402 R 3.217(,t)-.4 G 3.217(er)-3.217 G .717(ecomiendo que)-3.217 F .496 -(releas el te)108 414 R .497(xto desde el principio y pruebes a hacerle\ - algunas modi\214caciones a los ejemplos.)-.15 F(Ase)5.497 E .497 -(g\372rate de)-.15 F .117(entenderlo todo. El esfuerzo v)108 426 R .117 -(aldr\341 la pena, y te ayudar\341, no s\363lo con el resto del documen\ -to, sino en tu tra-)-.25 F(bajo diario de monitorizaci\363n, mucho desp\ -u\351s de terminar con esta introducci\363n.)108 438 Q F2 10.656 -6.668 -(TT i)108 460.8 T(ip)3.89 E(po)-5.558 E(os)-4.998 E 2.5(sd)-3.888 G(de) --8.058 E 2.5(ef)-4.438 G(fu)-5.828 E(ue)-5.558 E(en)-4.438 E(nt)-5.558 E -(te)-3.328 E(es)-4.438 E 2.5(sd)-3.888 G(de)-8.058 E 2.5(ed)-4.438 G(da) --8.058 E(at)-4.998 E(to)-3.328 E(os)-4.998 E(s)-3.888 E F0 .172 -(De acuerdo, quieres continuar)108 477.6 R 2.672(.B)-.55 G(ien)-2.672 E --.15(ve)-.4 G .172(nido de vuelta otra v).15 F .172 -(ez y prep\341rate; v)-.15 F .372 -.1(oy a i)-.2 H 2.672(rm).1 G .173 -(\341s r\341pido con los ejem-)-2.672 F(plos y e)108 489.6 Q -(xplicaciones.)-.15 E 2.476 -1(Ya v)108 506.4 T .476(imos que, para v)1 -F .476(er el cambio de un contador a lo lar)-.15 F .475 -(go del tiempo, tenemos que tomar dos n\372meros y)-.18 F(di)108 518.4 Q -.137(vidir la diferencia entre el tiempo transcurrido entre las medicio\ -nes. P)-.25 F .137(ara los ejemplos que hemos visto es)-.15 F .946(lo l\ -\363gico, pero hay otras posibilidades. Por ejemplo, mi enrutador me pu\ -ede dar la temperatura actual en)108 530.4 R .069 -(tres puntos distintos, la entrada de aire, el llamado `)108 542.4 R -.069(`punto caliente')-.74 F 2.569('yl)-.74 G 2.569(as)-2.569 G .069 -(alida de v)-2.569 F .069(entilaci\363n. Estos v)-.15 F(alores)-.25 E -.073(no son contadores; si tomo los v)108 554.4 R .072 -(alores de dos muestreos y lo di)-.25 F .072(vido entre 300 se)-.25 F -.072(gundos, obtendr\351 el cambio)-.15 F 1.599(de temperatura por se) -108 566.4 R 1.599(gundo. \241Esperemos que sea cero, o tendr\355amos un\ - incendio en el cuarto de orde-)-.15 F(nadores! :\))108 578.4 Q .71 -(Entonces, \277que hacemos? Podemos decirle a RRDtool que guarde los v) -108 595.2 R .709(alores tal como los medimos \(esto)-.25 F 1.407 -(no es e)108 607.2 R 1.407 -(xactamente as\355, pero se aproxima bastante a la v)-.15 F 1.408 -(erdad\). As\355, los gr\341\214cos se v)-.15 F 1.408 -(er\341n mucho mejor)-.15 F(.)-.55 E .577(Puedo v)108 619.2 R .577(er c\ -uando el enrutador est\341 trabajando m\341s \(en serio, funciona; como\ - usa m\341s electricidad, genera)-.15 F .381(m\341s calor y sube la tem\ -peratura\), puedo saber cuando me he dejado las puertas abiertas \(el c\ -uarto de orde-)108 631.2 R .108(nadores tiene aire acondicionado; con l\ -as puertas abiertas el aire caliente del resto del edi\214cion entra y \ -sube)108 643.2 R .031(la temperatura en la entrada de aire del enrutado\ -r\), etc. Antes usamos un tipo de datos de `)108 655.2 R(`contador')-.74 -E .031(', ahora)-.74 F -(usaremos un tipo de datos diferente, con un nombre diferente,)108 667.2 -Q F1(GA)2.5 E(UGE)-.495 E F0 5(.T)C(enemos otros tipos:)-5.7 E/F3 10 -/Courier@0 SF 6(-C)114 684 S(OUNTER este ya lo conocemos)-6 E 6(-G)114 -696 S 12(AUGE este)-6 F(acabamos de verlo)6 E 6(-D)114 708 S(ERIVE)-6 E -6(-A)114 720 S(BSOLUTE)-6 E F0 145.68(2001-02-11 Last)72 768 R -(change: 1.0.28)2.5 E(12)184.84 E EP -%%Page: 13 13 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F 1.373(Los otros dos tipos son)108 96 R/F1 9 -/Times-Roman@0 SF(DERIVE)3.873 E F0(y)3.873 E F1(ABSOLUTE)3.873 E F0(.)A -F1(ABSOLUTE)3.873 E F0 1.373(puede usarse igual que)3.873 F F1(COUNTER) -3.872 E F0 3.872(,c)C 1.372(on una)-3.872 F 1.098 -(diferencia; RRDtool asume que el contador se reinicia cada v)108 108 R -1.098(ez que se lee. O en otras palabras; el delta)-.15 F .53 -(entre los v)108 120 R .53 -(alores no hay que calcularlo, mientras que con)-.25 F F1(COUNTER)3.029 -E F0 .529(RRDtool tiene que sacar \351l la cuenta.)3.029 F .797(Por eje\ -mplo, nuestro primer ejemplo, \(12345, 12357, 12363, 12363\), ser\355a \ -\(unkno)108 132 R .798(wn, 12, 6, 0\) en)-.25 F F1(ABSO-)3.298 E(LUTE) -108 144 Q F0 5.152(.E)C 2.652(lo)-5.152 G .152(tro tipo,)-2.652 F F1 -(DERIVE)2.652 E F0 2.652(,e)C 2.652(sc)-2.652 G(omo)-2.652 E F1(COUNTER) -2.652 E F0 2.652(,p)C .151(ero al contrario de)-2.652 F F1(COUNTER)2.651 -E F0 2.651(,e)C .151(ste v)-2.651 F .151(alor tambi\351n puede)-.25 F -(decrecer)108 156 Q 2.5(,p)-.4 G(or lo que puede tenerse un delta ne) --2.5 E -.05(ga)-.15 G(ti).05 E -.2(vo)-.25 G(.).2 E -1.11(Va)108 172.8 S -(mos a probarlos todos:)1.11 E/F2 10/Courier@0 SF -(rrdtool create all.rrd --start 978300900 \\)126 189.6 Q -(DS:a:COUNTER:600:U:U \\)180 201.6 Q(DS:b:GAUGE:600:U:U \\)180 213.6 Q -(DS:c:DERIVE:600:U:U \\)180 225.6 Q(DS:d:ABSOLUTE:600:U:U \\)180 237.6 Q -(RRA:AVERAGE:0.5:1:10)180 249.6 Q(rrdtool update all.rrd \\)126 261.6 Q -18(978301200:300:1:600:300 \\)180 273.6 R 12 -(978301500:600:3:1200:600 \\)180 285.6 R 12(978301800:900:5:1800:900 \\) -180 297.6 R(978302100:1200:3:2400:1200 \\)180 309.6 Q -(978302400:1500:1:2400:1500 \\)180 321.6 Q -(978302700:1800:2:1800:1800 \\)180 333.6 Q 18 -(978303000:2100:4:0:2100 \\)180 345.6 R 6(978303300:2400:6:600:2400 \\) -180 357.6 R 6(978303600:2700:4:600:2700 \\)180 369.6 R -(978303900:3000:2:1200:3000)180 381.6 Q -(rrdtool graph all1.gif -s 978300600 -e 978304200 -h 400 \\)126 393.6 Q -(DEF:linea=all.rrd:a:AVERAGE LINE3:linea#FF0000:"Line A" \\)180 405.6 Q -(DEF:lineb=all.rrd:b:AVERAGE LINE3:lineb#00FF00:"Line B" \\)180 417.6 Q -(DEF:linec=all.rrd:c:AVERAGE LINE3:linec#0000FF:"Line C" \\)180 429.6 Q -(DEF:lined=all.rrd:d:AVERAGE LINE3:lined#000000:"Line D")180 441.6 Q/F3 -10/Times-Bold@0 SF -7.218(RR)108 476.4 S -7.218(RR)7.218 G -7.218(DD) -7.218 G -3.328(tt)7.218 G -4.998(oo)3.328 G -4.998(oo)4.998 G 5.556 --2.778(ll b)4.998 H(ba)-2.78 E(aj)-4.998 E(jo)-3.328 E 2.5(oe)-4.998 G -(el)-6.938 E 2.5(lm)-2.778 G(mi)-10.828 E(ic)-2.778 E(cr)-4.438 E -.18 -(ro)-4.438 G(os)-4.818 E(sc)-3.888 E(co)-4.438 E(op)-4.998 E(pi)-5.558 E -(io)-2.778 E(o)-4.998 E F0 16.5<834c>108 493.2 S 2.707(al)-16.5 G .207 -(\355nea A es un contador)-2.707 F 2.707(,p)-.4 G .208(or lo que debe i\ -ncrementarse continuamente y RRDtool tiene que calcular)-2.707 F 1.696 -(las diferencias. Adem\341s RRDtool tiene que di)128 505.2 R 1.695 -(vidir la diferencia entre el tiempo transcurrido. Esto)-.25 F(deber\ -\355a terminar con una l\355nea recta en 1 \(los deltas son 300, y los \ -interv)128 517.2 Q(alos son de 300\))-.25 E 16.5<834c>108 534 S 2.632 -(al)-16.5 G .132(\355nea B es de tipo)-2.632 F F1(GA)2.632 E(UGE)-.495 E -F0 2.632(.E)C .132(stos son los v)-2.632 F .132(alores `)-.25 F -(`reales')-.74 E .133 -(', as\355 que el gr\341\214co debe mostrar lo mismo)-.74 F(que los v) -128 546 Q(alores que introducimos: una especie de onda)-.25 E 16.5<834c> -108 562.8 S 3.362(al)-16.5 G .862(\355nea C es de tipo)-3.362 F F1 -(DERIVE)3.362 E F0 3.362(.E)C 3.362(su)-3.362 G 3.362(nc)-3.362 G -(ontador)-3.362 E 3.362(,yp)-.4 G .862(uede decrecer)-3.362 F 3.362(.V) --.55 G 3.362(ae)-4.472 G .861(ntre 2400 y 0, con 1800 en el)-3.362 F -(medio.)128 574.8 Q 16.5<834c>108 591.6 S 2.592(al)-16.5 G .092 -(\355nea D es de tipo)-2.592 F F1(ABSOLUTE)2.592 E F0 2.592(.E)C .092 -(sto es, es un contador pero no hay que calcular las diferencias. Los) --2.592 F(n\372meros son iguales a la l\355nea A, y espero que puedas v) -128 603.6 Q(er la diferencia en los gr\341\214cos.)-.15 E 1.048 -(Esto equi)108 620.4 R -.25(va)-.25 G 1.047(le a los v).25 F 1.047(alor\ -es siguientes, empezando a las 23:10 y terminando a las 00:10 \(las U s\ -igni\214can)-.25 F(desconocido\).)108 632.4 Q F2 6(-L)114 649.2 S 6 -(\355nea A: u u 1 1 1 1 1 1 1 1 1 u)-6 F 6(-L)114 661.2 S 6 -(\355nea B: u 1 3 5 3 1 2 4 6 4 2 u)-6 F 6(-L)114 673.2 S 6 -(\355nea C: u u 2 2 2 0)-6 F(-2 -6)6 E 12(202u)12 G 6(-L)114 685.2 S 6 -(\355nea D: u 1 2 3 4 5 6 7 8 9)-6 F 6(10 u)6 F F0 .118(Si tu archi)108 -709.2 R -.2(vo)-.25 G F1(GIF)2.818 E F0 .119(muestra todo esto, has ent\ -rado los datos correctamente, tu programa RRDtool est\341 funcio-)2.619 -F .259(nando bien, el visor de gr\341\214cos no te eng)108 721.2 R .259 -(a\361a y hemos entrado en el 2000 sin problemas :\) Puedes probar el) --.05 F 145.68(2001-02-11 Last)72 769.2 R(change: 1.0.28)2.5 E(13)184.84 -E EP -%%Page: 14 14 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F(mismo ejemplo cuatro v)108 96 Q -(eces, una por cada l\355nea.)-.15 E(Re)108 112.8 Q -(visemos los datos otra v)-.25 E(ez:)-.15 E 16.5<834c>108 129.6 S 1.302 -(\355nea A: 300, 600, 900 , etc.)-16.5 F 1.302 -(La diferencia del contador es siempre 300, igual que el interv)6.302 F -1.303(alo de)-.25 F .233(tiempo transcurrido entre mediciones. Por lo t\ -anto, el promedio siempre es 1. Pero, \277por qu\351 el primer)128 141.6 -R .811(punto tiene un v)128 153.6 R .811(alor de `)-.25 F(`desconocido') --.74 E .812('? \277Acaso no era conocido el v)-.74 F .812 -(alor que pusimos en la base de)-.25 F .694 -(datos? \241Si! Pero no ten\355amos un v)128 165.6 R .693(alor inicial \ -para calcular la diferencia. Ser\355a un error asumir que el)-.25 F -(contador empezaba en 0, as\355 que no conocemos el v)128 177.6 Q -(alor de la diferencia)-.25 E 16.5<834c>108 194.4 S .099 -(\355nea B: No hay nada que calcular)-16.5 F 2.599(,l)-.4 G .099(os v) --2.599 F .099 -(alores son los mismos que se introdujeron en la base de datos.)-.25 F -16.5<834c>108 211.2 S .895(\355nea C: De nue)-16.5 F -.2(vo)-.25 G 3.395 -(,n).2 G 3.395(oc)-3.395 G .895(onocemos el v)-3.395 F .895 -(alor inicial antes de la primera medici\363n, as\355 que se aplica el) --.25 F 1.152(mismo razonamiento que para la l\355nea A. En este caso la\ -s diferencias no son constantes, as\355 que la)128 223.2 R .033 -(l\355nea no es recta. Si hubi\351semos puesto los mismos v)128 235.2 R -.033(alores que en la l\355nea A, el gr\341\214co ser\355a el mismo.) --.25 F .391(Al contrario que)128 247.2 R/F1 9/Times-Roman@0 SF(COUNTER) -2.891 E F0 2.891(,e)C 2.891(lv)-2.891 G .391(alor puede decrecer)-3.141 -F 2.891(,ye)-.4 G .392(spero mostrarte m\341s adelante el por que de la) --2.891 F(diferencia entre ambos tipos.)128 259.2 Q 16.5<834c>108 276 S -.679(\355nea D: En este caso, el dispositi)-16.5 F 1.078 -.2(vo n)-.25 H -.678(os da las diferencias por s\355 mismo. Por lo tanto, conocemos la) -.2 F .032(diferencia inicial, y podemos gra\214carla. T)128 288 R .032 -(enemos los mismos v)-.7 F .032 -(alores que en la l\355nea A, pero su signi\214-)-.25 F .933(cado es di\ -stinto, por lo que el gr\341\214co tambi\351n lo es. En este caso, las \ -diferencias se incrementan en)128 300 R .204(300 cada v)128 312 R .204 -(ez, mientras que el interv)-.15 F .204 -(alo de tiempo permanece constante en 300 se)-.25 F .204 -(gundos, por lo que la)-.15 F(di)128 324 Q -(visi\363n nos da resultados cada v)-.25 E(ez mayores.)-.15 E/F2 10 -/Times-Bold@0 SF -7.218(RR)108 346.8 S -4.438(ee)7.218 G -2.778(ii)4.438 -G -5.558(nn)2.778 G -2.778(ii)5.558 G -4.438(cc)2.778 G -2.778(ii)4.438 -G -4.998(aa)2.778 G -2.778(ll)4.998 G -2.778(ii)2.778 G -4.438(zz)2.778 -G -4.998(aa)4.438 G -4.438(cc)4.998 G -2.778(ii)4.438 G -4.998 -2.778 G 11.116 -5.558(nn dd)4.998 H 8.876 -4.438(ee l)5.558 H(lo)1.66 E -(os)-4.998 E 2.5(sc)-3.888 G(co)-6.938 E(on)-4.998 E(nt)-5.558 E(ta) --3.328 E(ad)-4.998 E(do)-5.558 E(or)-4.998 E -.18(re)-4.438 G(es)-4.258 -E(s)-3.888 E F0 -.8(To)108 363.6 S(da).8 E .643 -(v\355a nos quedan algunas cosas por v)-.2 F(er)-.15 E 3.143(.N)-.55 G -.643(os quedan algunas opciones importantes por cubrir)-3.143 F 3.143 -(,ya)-.4 G .643(un no)-3.143 F .279(hemos hablado de la reinicializaci\ -\363n de contadores. Empecemos por ah\355: Estamos en nuestro coche, v) -108 375.6 R(emos)-.15 E .152 -(el contador y muestra 999987. Andamos unos 20)108 387.6 R F1(KM)2.651 E -F0 2.651(,a)C .151 -(s\355 que el contador debe subir a 1000007. Desafortu-)-2.651 F 1.951(\ -nadamente, el contador s\363lo tiene 6 d\355gitos, as\355 que en realid\ -ad nos muestra 000007. Si estuvi\351ramos)108 399.6 R .093 -(guardando los v)108 411.6 R .093(alores en un tipo)-.25 F F1(DERIVE) -2.592 E F0 2.592(,e)C .092 -(sto signi\214car\355a que el contador retrocedi\363 unos 999980)-2.592 -F F1(KM)2.592 E F0 2.592(.P)C(or)-2.592 E 1.194(supuesto esto no es cie\ -rto, por lo que necesitamos alguna protecci\363n contra estos casos. Es\ -ta protecci\363n)108 423.6 R .68(s\363lo la tenemos para el tipo)108 -435.6 R F1(COUNTER)3.18 E F0 3.18(,e)C 3.18(lc)-3.18 G .68 -(ual de todas formas era el que ten\355amos que haber usado para)-3.18 F -.718(este tipo de contador)108 447.6 R 3.219<2ebf>-.55 G .719 -(C\363mo funciona? Los v)-3.219 F .719(alores tipo)-.25 F F1(COUNTER) -3.219 E F0 .719(no deben decrecer nunca, \241por lo que)3.219 F .48(RRD\ -tool asume en ese caso que el contador se ha reinicializado! Si la dife\ -rencia es ne)108 459.6 R -.05(ga)-.15 G(ti).05 E -.25(va)-.25 G 2.979 -(,e).25 G .479(sto se com-)-2.979 F(pensa sumando el v)108 471.6 Q -(alor m\341ximo del contador + 1. P)-.25 E -(ara nuestro coche, tendr\355amos:)-.15 E/F3 10/Courier@0 SF -(Delta = 7 - 999987 = -999980)114 488.4 Q -(\(en vez de 1000007-999987=20\))24 E -(Delta real= -999980 + 999999 + 1 = 20)114 512.4 Q F0 .104(Al momento d\ -e escribir este documento, RRDtool maneja contadores de 32 o 64 bits de\ - tama\361o. Estos con-)108 536.4 R -(tadores pueden manejar los siguientes v)108 548.4 Q(alores:)-.25 E F3 6 -(-3)114 565.2 S 6(2b)-6 G(its: 0 ..)-6 E(4294967295)66 E 6(-6)114 577.2 -S 6(4b)-6 G(its: 0 .. 18446744073709551615)-6 E F0(Si estos v)108 601.2 -Q(alores te parecen raros, podemos v)-.25 E(erlos en formato he)-.15 E -(xadecimal:)-.15 E F3 6(-3)114 618 S 6(2b)-6 G(its: 0 ..)-6 E(FFFFFFFF) -54 E 6(-6)114 630 S 6(4b)-6 G(its: 0 .. FFFFFFFFFFFFFFFF)-6 E F0 1.101(\ -RRDtool maneja ambos contadores de la misma manera. Si ocurre un desbor\ -damiento y la diferencia es)108 654 R(ne)108 666 Q -.05(ga)-.15 G(ti).05 -E -.25(va)-.25 G 3.163(,R).25 G .663 -(RDtool le suma primero el m\341ximo del contador `)-3.163 F(`menor') --.74 E 3.163('\()-.74 G .664(32 bits\) + 1 a la diferencia. Si a\372n) --3.163 F .527(as\355 la diferencia es ne)108 678 R -.05(ga)-.15 G(ti).05 -E -.25(va)-.25 G 3.026(,e).25 G .526(ntonces el contador reinicializado\ - era mayor \(64 bits\), por lo que se le suma)-3.026 F .67(el v)108 690 -R .67(alor m\341ximo del contador `)-.25 F(`lar)-.74 E(go')-.18 E 3.17 -('+1ys)-.74 G 3.17(el)-3.17 G 3.17(er)-3.17 G .67 -(esta el m\341ximo del contador `)-3.17 F(`peque\361o')-.74 E 3.17('q) --.74 G .67(ue sumamos)-3.17 F 2.368 -(err\363neamente. Hay un problema con esto: supong)108 702 R 2.368 -(amos que un contador lar)-.05 F 2.368(go se ha reinicializado al)-.18 F -1.73(sum\341rsele una diferencia muy grande; entonces es posible que al\ - a\361adir el v)108 714 R 1.73(alor m\341ximo del contador)-.25 F 2.5 -(peque\361o la diferencia nos d\351 positi)108 726 R -.2(vo)-.25 G 5(.E) -.2 G 5(ne)-5 G 2.5(ste caso poco probable, los v)-5 F 2.5 -(alores resultantes no serian)-.25 F 145.68(2001-02-11 Last)72 774 R -(change: 1.0.28)2.5 E(14)184.84 E EP -%%Page: 15 15 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F .355(correctos. P)108 96 R .355(ara que ocurra\ - esto, el incremento tiene que ser casi tan grande como el v)-.15 F .356 -(alor m\341ximo del con-)-.25 F(tador)108 108 Q 4.087(,p)-.4 G 1.587 -(or lo que de ocurrir es muy probable que halla v)-4.087 F 1.586 -(arios problemas m\341s en la con\214guraci\363n y no)-.25 F .184(merez\ -ca la pena preocuparse s\363lo por este. A\372n as\355, he incluido un \ -ejemplo de este caso para que lo puedas)108 120 R(juzg)108 132 Q -(ar por ti mismo.)-.05 E 3.694(Ac)108 148.8 S 1.194(ontinuaci\363n, uno\ -s ejemplos de reinicializaci\363n de los contadores. Prueba de hacer lo\ -s c\341lculos por ti)-3.694 F(mismo, o acepta mis resultados si tu calc\ -uladora no puede con los n\372meros :\))108 160.8 Q -(N\372meros de correcci\363n:)108 177.6 Q/F1 10/Courier@0 SF 6(-3)114 -194.4 S 6(2b)-6 G(its: \(4294967295+1\) =)-6 E(4294967296)198 E 6(-6)114 -206.4 S 6(4b)-6 G -(its: \(18446744073709551615+1\)-correction1 = 18446744069414584320)-6 E -54(Antes: 4294967200)114 230.4 R 66(Incremento: 100)114 242.4 R -(Deber\355a ser:)114 254.4 Q(4294967300)24 E(Pero es:)114 266.4 Q(4)102 -E 18(Diferencia: -4294967196)114 278.4 R -(Correcci\363n #1: -4294967196 + 4294967296 = 100)114 290.4 Q 54 -(Antes: 18446744073709551000)114 314.4 R 126(Incremento: 800)114 326.4 R -(Deber\355a ser:)114 338.4 Q(18446744073709551800)24 E(Pero es:)114 -350.4 Q(184)150 E 18(Diferencia: -18446744073709550816)114 362.4 R(Corr\ -ecci\363n #1: -18446744073709550816 +4294967296 = -18446744069414583520) -114 374.4 Q -(Correcci\363n #2: -18446744069414583520 +18446744069414584320 = 800)114 -386.4 Q 54(Antes: 18446744073709551615)114 410.4 R 6(\(v)6 G -(alor m\341ximo \))-6 E 24(Incremento: 18446744069414584320)114 422.4 R -6(\(i)6 G(ncremento absurdo,)-6 E(Deber\355a ser:)114 434.4 Q 12 -(36893488143124135935 m\355nimo)24 F(para que)6 E(Pero es:)114 446.4 Q -12(18446744069414584319 funcione)48 F(el ejemplo\))6 E 78 -(Diferencia: -4294967296)114 458.4 R(Correcci\363n #1:)114 470.4 Q -(-4294967296 + 4294967296 = 0 \(positivo,)12 E(por tanto no se hace)390 -482.4 Q(la segunda correcci\363n\))390 494.4 Q 54 -(Antes: 18446744073709551615)114 518.4 R 6(\(v)6 G(alor m\341ximo \))-6 -E 24(Incremento: 18446744069414584319)114 530.4 R(Deber\355a ser:)114 -542.4 Q(36893488143124135934)24 E(Pero es:)114 554.4 Q -(18446744069414584318)48 E 78(Diferencia: -4294967297)114 566.4 R -(Correcci\363n #1:)114 578.4 Q(-4294967297 +4294967296 = -1)12 E -(Correcci\363n #2:)114 590.4 Q -(-1 +18446744069414584320 = 18446744069414584319)12 E F0 .545 -(Como puede v)108 614.4 R .545 -(erse en los \372ltimos ejemplos, necesitas unos v)-.15 F .545 -(alores bastante e)-.25 F .546(xtra\361os para hacer que RRD-)-.15 F .23 -(tool f)108 626.4 R .23(alle \(asumiendo que no teng)-.1 F 2.73(an)-.05 -G .229(ing\372n error el programa, por supuesto\), as\355 que esto no d\ -eber\355a ocurrir)-2.73 F(.)-.55 E .779(Sin embar)108 638.4 R(go,)-.18 E -/F2 9/Times-Roman@0 SF(SNMP)3.279 E F0 3.279(oc)3.279 G .78(ualquier ot\ -ro m\351todo que uses de recogida de datos puede tambi\351n reportar al\ -g\372n)-3.279 F -.25(va)108 650.4 S .616 -(lor err\363neo ocasionalmente. No podemos pre).25 F -.15(ve)-.25 G .616 -(nir todos los errores, pero podemos tomar algunas medi-).15 F .718 -(das. El comando `)108 662.4 R(`create')-.74 E 3.218('d)-.74 G 3.218(eR) --3.218 G .718(RDtool tiene dos par\341metros especialmente para esto, q\ -ue de\214nen los v)-3.218 F(al-)-.25 E .02 -(ores m\355nimo y m\341ximo permitidos. Hasta ahora hemos usado `)108 -674.4 R(`U')-.74 E .019(', `)-.74 F(`desconocido')-.74 E .019 -('. Si le pasas v)-.74 F .019(alores para)-.25 F .259 -(uno o ambos par\341metros y RRDtool recibe un v)108 686.4 R .26 -(alor fuera de esos l\355mites, los ignorar\341. P)-.25 F .26 -(ara un term\363metro)-.15 F .213 -(en grados Celsius, el m\355nimo absoluto es \255273. P)108 698.4 R .212 -(ara mi enrutador)-.15 F 2.712(,p)-.4 G .212 -(uedo asumir que ese m\355nimo es mucho)-2.712 F(mayor)108 710.4 Q 3.457 -(,d)-.4 G(ig)-3.457 E .957(amos que 10.)-.05 F .958(La temperatura m\ -\341xima la pondr\355a en unos 80 grados; m\341s alto y el aparato no) -5.957 F .05(funcionar\355a. P)108 722.4 R .05 -(ara mi coche, nunca esperar\355a obtener v)-.15 F .05(alores ne)-.25 F --.05(ga)-.15 G(ti).05 E -.2(vo)-.25 G .05(s, y tampoco esperar\355a v).2 -F .05(alores mayores)-.25 F 145.68(2001-02-11 Last)72 770.4 R -(change: 1.0.28)2.5 E(15)184.84 E EP -%%Page: 16 16 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F 2.96(a2)108 96 S 2.96(30. Cualquier)-2.96 F .46 -(otra cosa ser\355a un error)2.96 F 2.96(.P)-.55 G .46 -(ero recuerda, lo contrario no es cierto: si los v)-2.96 F .46 -(alores pasan este)-.25 F -.15(ex)108 108 S 1.607 -(amen no quiere decir que sean los correctos. Siempre e).15 F 1.607 -(xamina bien el gr\341\214co si los v)-.15 F 1.606(alores parecen)-.25 F --.15(ex)108 120 S(tra\361os.).15 E/F1 10/Times-Bold@0 SF -7.218(RR)108 -142.8 S -4.438(ee)7.218 G -8.328(mm)4.438 G -5.558(uu)8.328 G -4.438(ee) -5.558 G -3.888(ss)4.438 G -3.328(tt)3.888 G 6.196 -4.438(rr ee)3.328 H -9.996 -4.998(oo d)4.438 H(de)-.56 E 2.5(el)-4.438 G(lo)-5.278 E(os) --4.998 E 2.5(sd)-3.888 G(da)-8.058 E(at)-4.998 E(to)-3.328 E(os)-4.998 E -(s)-3.888 E F0 .376 -(Hay una funcionalidad importante de RRDtool que no hemos e)108 159.6 R -.376(xplicado toda)-.15 F .377(v\355a: es virtualmente imposible)-.2 F -.604(recoger los datos y pasarselos a RRDtool a interv)108 171.6 R .604 -(alos e)-.25 F .603(xactos de tiempo. Por tanto, RRDtool interpola los) --.15 F .068(datos a los interv)108 183.6 R .068(alos e)-.25 F .068(xact\ -os. Si no sabes que signi\214ca esto o como se hace, he aqu\355 la ayud\ -a que necesitas:)-.15 F(Supong)108 200.4 Q 1.833 -(amos un contador se incremente e)-.05 F 1.833(xactamente en 1 cada se) --.15 F 4.333(gundo. Queremos)-.15 F 1.833(medirlo cada 300)4.333 F(se) -108 212.4 Q .478(gundos, por lo que deber\355amos tener v)-.15 F .478 -(alores separados e)-.25 F .478(xactamente en 300. Sin embar)-.15 F .478 -(go, por v)-.18 F .478(arias cir)-.25 F(-)-.2 E .976(cunstancias lle)108 -224.4 R -.05(ga)-.15 G .976(mos unos se).05 F .976 -(gundos tarde y el interv)-.15 F .975 -(alo es 303. La diferencia ser\341 por tanto 303. Ob)-.25 F(via-)-.15 E -.205(mente, RRDtool no debe colocar 303 en la base de datos y dar as\ -\355 la impresi\363n de que el contador se incre-)108 236.4 R .907 -(ment\363 303 en 300 se)108 248.4 R .906 -(gundos. Aqu\355 es donde RRDtool interpola: alter\341 el v)-.15 F .906 -(alor 303 al v)-.25 F .906(alor que tendr\355a 3)-.25 F(se)108 260.4 Q -.717(gundos antes y guarda 300 en 300 se)-.15 F .717(gundos. Dig)-.15 F -.717(amos que la pr\363xima v)-.05 F .717(ez lle)-.15 F -.05(ga)-.15 G -.717(mos justo a tiempo; por).05 F .132(tanto, el interv)108 272.4 R -.132(alo actual es 297 se)-.25 F .132 -(gundos, por lo que el contador deber\355a ser 297. De nue)-.15 F -.2 -(vo)-.25 G 2.631(,R).2 G .131(RDtool altera)-2.631 F(el v)108 284.4 Q -(alor y guarda 300, como debe ser)-.25 E(.)-.55 E/F2 10/Courier@0 SF -(en RRD)162 301.2 Q(en realidad)126 E 12(tiempo+000: 0)114 313.2 R 18 -(delta="U" tiempo+000:)6 F 6(0d)18 G(elta="U")-6 E -(tiempo+300: 300 delta=300)114 325.2 Q(tiempo+300: 300 delta=300)24 E -(tiempo+600: 600 delta=300)114 337.2 Q(tiempo+603: 603 delta=303)24 E -(tiempo+900: 900 delta=300)114 349.2 Q(tiempo+900: 900 delta=297)24 E F0 -(Creemos dos bases de datos id\351nticas. He escogido el rango de tiemp\ -o entre 920805000 y 920805900.)108 373.2 Q F2 -(rrdtool create seconds1.rrd)126 390 Q(\\)18 E(--start 920804700)144 402 -Q(\\)60 E(DS:seconds:COUNTER:600:U:U \\)144 414 Q(RRA:AVERAGE:0.5:1:24) -144 426 Q(para Unix: cp seconds1.rrd seconds2.rrd)126 450 Q -(para DOS: copy seconds1.rrd seconds2.rrd)126 462 Q(para VMS:)126 474 Q -6(yy)12 G 6(oq)-6 G(ue s\351 :\))-6 E(rrdtool update seconds1.rrd \\)126 -498 Q(920805000:000 920805300:300 920805600:600 920805900:900)144 510 Q -(rrdtool update seconds2.rrd \\)126 522 Q -(920805000:000 920805300:300 920805603:603 920805900:900)144 534 Q F0 -145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(16)184.84 E EP -%%Page: 17 17 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Courier@0 SF(rrdtool graph seconds1.gif) -126 96 Q(\\)138 E(--start 920804700 --end 920806200)144 108 Q(\\)78 E -(--height 200)144 120 Q(\\)204 E -(--upper-limit 1.05 --lower-limit 0.95 --rigid \\)144 132 Q 30 -(DEF:seconds=seconds1.rrd:seconds:AVERAGE \\)144 144 R 132 -(CDEF:unknown=seconds,UN \\)144 156 R 150(LINE2:seconds#0000FF \\)144 -168 R(AREA:unknown#FF0000)144 180 Q(rrdtool graph seconds2.gif)126 192 Q -(\\)138 E(--start 920804700 --end 920806200)144 204 Q(\\)78 E -(--height 200)144 216 Q(\\)204 E -(--upper-limit 1.05 --lower-limit 0.95 --rigid \\)144 228 Q 30 -(DEF:seconds=seconds2.rrd:seconds:AVERAGE \\)144 240 R 132 -(CDEF:unknown=seconds,UN \\)144 252 R 150(LINE2:seconds#0000FF \\)144 -264 R(AREA:unknown#FF0000)144 276 Q F0 -(Los dos gr\341\214cos debe ser iguales.)108 300 Q/F2 9/Times-Bold@0 SF --6.496(RR)72 316.8 S -6.001(EE)6.496 G -5.002(SS)6.001 G -6.496(UU)5.002 -G -8.494(MM)6.496 G -6.001(EE)8.494 G -6.496(NN)6.001 G F0 .222(Es hora\ - de concluir este documento. Ahora debes conocer lo b\341sico como para\ - trabajar con RRDtool y leer)108 328.8 R .204(la documentaci\363n. A\ -\372n hay mucho m\341s por descubrir acerca de RRDtool, y le encontrar\ -\341s; m\341s y m\341s usos)108 340.8 R .725(para la herramienta. Con l\ -os ejemplos y la herramienta puedes crear f\341cilmente muchos gr\341\ -\214cos; tambi\351n)108 352.8 R(puedes usar las interf)108 364.8 Q -(aces disponibles.)-.1 E F2 -6.001(LL)72 381.6 S -3.499(II)6.001 G --5.002(SS)3.499 G 8.942 -6.001(TT A)5.002 H 2.25(AD)-.495 G(DE)-8.746 E -2.25(EC)-6.001 G(CO)-8.746 E(OR)-7 E(RR)-6.496 E(RE)-6.496 E(EO)-6.001 E -(O)-7 E F0 .534(Recuerda subscribirte a la lista de correo. Aunque no c\ -ontestes los correos que aparecen en ella, te servir\341)108 393.6 R -.514(de ayuda a ti y a los dem\341s.)108 405.6 R .514 -(Mucho de lo que se sobre)5.514 F/F3 9/Times-Roman@0 SF(MR)3.015 E(TG) --.54 E F0 .515(\(y por tanto sobre RRDtool\), lo aprend\355 tan)3.015 F -.009(s\363lo con leer la lista, sin escribir)108 417.6 R 2.509(.N)-.55 G -2.509(oh)-2.509 G .008(ay por que pre)-2.509 F .008(guntar las pre)-.15 -F .008(guntas b\341sicas, que ya tienen su respuesta)-.15 F 1.543(en la) -108 429.6 R F3 -1.413 -.666(FA Q)4.043 H F0 1.543 -(\(\241l\351ela!\). Con miles de usuarios a lo lar)4.709 F 1.544 -(go del mundo, siempre hay pre)-.18 F 1.544(guntas que tu puedes)-.15 F -(responder con lo aprendido en este y otros documentos.)108 441.6 Q F2 --6.496(VV)72 458.4 S -6.001(EE)6.496 G 12.992 -6.496(RR T)6.001 H -.81 -(TA).495 G(AM)-5.686 E(MB)-8.494 E(BI)-6.001 E<49c9>-3.499 E-6.001 -E(N)-6.496 E F0(Las p\341ginas del manual de RRDtool)108 470.4 Q F2 -10.292 -6.496(AA UU)72 487.2 T 9.59 -6.001(TT O)6.496 H(OR)-.999 E(R) --6.496 E F0 .743 -(Espero que hayas disfrutado con los ejemplos y las descripciones.)108 -499.2 R .742(Si es as\355, ayuda a otros re\214ri\351ndolos a)5.742 F -1.116(este documento cuando te hag)108 511.2 R 1.116(an pre)-.05 F 1.117 -(guntas b\341sicas. No s\363lo obtendr\341n la respuesta, sino que apre\ -nder\341n)-.15 F(muchas otras cosas.)108 523.2 Q(Ale)108 540 Q 2.5(xv) --.15 G(an den Bog)-2.75 E(aerdt )-.18 E 145.68(2001-02-11 Last)72 768 R(change: 1.0.28) -2.5 E(17)184.84 E EP -%%Trailer -end -%%EOF diff --git a/doc/test2.ps b/doc/test2.ps deleted file mode 100644 index 1533f69..0000000 --- a/doc/test2.ps +++ /dev/null @@ -1,1637 +0,0 @@ -%!PS-Adobe-3.0 -%%Creator: groff version 1.15 -%%CreationDate: Sun Feb 11 13:10:21 2001 -%%DocumentNeededResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier -%%+ font Symbol -%%DocumentSuppliedResources: procset grops 1.15 0 -%%Pages: 17 -%%PageOrder: Ascend -%%Orientation: Portrait -%%EndComments -%%BeginProlog -%%BeginResource: procset grops 1.15 0 -/setpacking where{ -pop -currentpacking -true setpacking -}if -/grops 120 dict dup begin -/SC 32 def -/A/show load def -/B{0 SC 3 -1 roll widthshow}bind def -/C{0 exch ashow}bind def -/D{0 exch 0 SC 5 2 roll awidthshow}bind def -/E{0 rmoveto show}bind def -/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def -/G{0 rmoveto 0 exch ashow}bind def -/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/I{0 exch rmoveto show}bind def -/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def -/K{0 exch rmoveto 0 exch ashow}bind def -/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/M{rmoveto show}bind def -/N{rmoveto 0 SC 3 -1 roll widthshow}bind def -/O{rmoveto 0 exch ashow}bind def -/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/Q{moveto show}bind def -/R{moveto 0 SC 3 -1 roll widthshow}bind def -/S{moveto 0 exch ashow}bind def -/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/SF{ -findfont exch -[exch dup 0 exch 0 exch neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/MF{ -findfont -[5 2 roll -0 3 1 roll -neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/level0 0 def -/RES 0 def -/PL 0 def -/LS 0 def -/MANUAL{ -statusdict begin/manualfeed true store end -}bind def -/PLG{ -gsave newpath clippath pathbbox grestore -exch pop add exch pop -}bind def -/BP{ -/level0 save def -1 setlinecap -1 setlinejoin -72 RES div dup scale -LS{ -90 rotate -}{ -0 PL translate -}ifelse -1 -1 scale -}bind def -/EP{ -level0 restore -showpage -}bind def -/DA{ -newpath arcn stroke -}bind def -/SN{ -transform -.25 sub exch .25 sub exch -round .25 add exch round .25 add exch -itransform -}bind def -/DL{ -SN -moveto -SN -lineto stroke -}bind def -/DC{ -newpath 0 360 arc closepath -}bind def -/TM matrix def -/DE{ -TM currentmatrix pop -translate scale newpath 0 0 .5 0 360 arc closepath -TM setmatrix -}bind def -/RC/rcurveto load def -/RL/rlineto load def -/ST/stroke load def -/MT/moveto load def -/CL/closepath load def -/FL{ -currentgray exch setgray fill setgray -}bind def -/BL/fill load def -/LW/setlinewidth load def -/RE{ -findfont -dup maxlength 1 index/FontName known not{1 add}if dict begin -{ -1 index/FID ne{def}{pop pop}ifelse -}forall -/Encoding exch def -dup/FontName exch def -currentdict end definefont pop -}bind def -/DEFS 0 def -/EBEGIN{ -moveto -DEFS begin -}bind def -/EEND/end load def -/CNT 0 def -/level1 0 def -/PBEGIN{ -/level1 save def -translate -div 3 1 roll div exch scale -neg exch neg exch translate -0 setgray -0 setlinecap -1 setlinewidth -0 setlinejoin -10 setmiterlimit -[]0 setdash -/setstrokeadjust where{ -pop -false setstrokeadjust -}if -/setoverprint where{ -pop -false setoverprint -}if -newpath -/CNT countdictstack def -userdict begin -/showpage{}def -}bind def -/PEND{ -clear -countdictstack CNT sub{end}repeat -level1 restore -}bind def -end def -/setpacking where{ -pop -setpacking -}if -%%EndResource -%%IncludeResource: font Times-Roman -%%IncludeResource: font Times-Bold -%%IncludeResource: font Courier -%%IncludeResource: font Symbol -grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 -def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron -/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent -/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen -/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon -/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O -/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex -/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y -/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft -/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl -/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut -/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash -/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen -/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft -/logicalnot/minus/registered/macron/degree/plusminus/twosuperior -/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior -/ordmasculine/guilsinglright/onequarter/onehalf/threequarters -/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE -/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex -/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis -/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn -/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla -/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis -/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash -/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def -/Courier@0 ENC0/Courier RE/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 -ENC0/Times-Roman RE -%%EndProlog -%%Page: 1 1 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 9/Times-Bold@0 SF 10.562 -6.496(NN AA)72 96 -T -8.494(MM)6.496 G 12.002 -6.001(EE /)8.494 H 2.25(/N)3.501 G(NO)-8.746 -E(OM)-7 E(MB)-8.494 E(BR)-6.001 E(RE)-6.496 E(E)-6.001 E F0 .715 -(rrdtutorial \255 T)108 108 R .715(utorial sobre RRDtool por Ale)-.45 F -3.215(xv)-.15 G .715(an den Bog)-3.465 F .715(aerdt \(T)-.05 F .714 -(raducido al castellano por Jes\372s Couto)-.35 F -.15(Fa)108 120 S -(ndi\361o\)).15 E F1 -6.496(DD)72 136.8 S -6.001(EE)6.496 G -5.002(SS) -6.001 G -6.496(CC)5.002 G -6.496(RR)6.496 G -3.499(II)6.496 G -5.497(PP) -3.499 G -6.001(TT)5.497 G -3.499(II)6.001 G -7(OO)3.499 G 12.992 -6.496 -(NN /)7 H 2.25(/D)3.996 G(DE)-8.746 E(ES)-6.001 E(SC)-5.002 E(CR)-6.496 -E(RI)-6.496 E(IP)-3.499 E(PC)-5.497 E(CI)-6.496 E<49d3>-3.499 E-7 -E(N)-6.496 E F0 1.022(RRDtool es un programa escrito por T)108 148.8 R -1.022(obias Oetik)-.8 F 1.022 -(er con la colaboraci\363n de muchas personas en di)-.1 F -.15(ve)-.25 G -(rsas).15 E .003(partes del mundo. Ale)108 160.8 R 2.503(xv)-.15 G .003 -(an den Bog)-2.753 F .002(aerdt escribi\363 este documento para ayudart\ -e a entender que es RRDtool)-.05 F 2.5(yq)108 172.8 S -(ue es lo que puede hacer por ti.)-2.5 E .854(La documentaci\363n que v\ -iene con RRDtool puede ser demasiado t\351cnica para algunos. Este tuto\ -rial e)108 189.6 R(xiste)-.15 E 2.142(para ayudarte a entender las func\ -iones b\341sicas de RRdtool. Debe servirte de preparaci\363n para leer \ -la)108 201.6 R .11(documentaci\363n, y adem\341s e)108 213.6 R .11(xpli\ -ca algunas ideas generales sobre estad\355stica, con un enfoque particu\ -lar hacia)-.15 F(las redes.)108 225.6 Q F1 -6.001(TT)72 242.4 S -6.496 -(UU)6.001 G 9.59 -6.001(TT O)6.496 H(OR)-.999 E(RI)-6.496 E(IA)-3.499 E -(AL)-6.496 E(L)-6.001 E/F2 10/Times-Bold@0 SF -3.888(II)108 254.4 S --8.328(mm)3.888 G -5.558(pp)8.328 G -4.998(oo)5.558 G -4.438(rr)4.998 G --3.328(tt)4.438 G -4.998(aa)3.328 G -5.558(nn)4.998 G -3.328(tt)5.558 G --4.438(ee)3.328 G F0 1.291(\241Por f)108 271.2 R -.2(avo)-.1 G 2.091 -.4 -(r, n).2 H 3.791(ot).4 G 3.791(ea)-3.791 G 1.291 -(delantes en la lectura de este documento! Esta primera parte e)-3.791 F -1.29(xplica los fundamentos)-.15 F .077(b\341sicos. Puede ser ab)108 -283.2 R .078 -(urrida, pero si te saltas los fundamentos, los ejemplos no te v)-.2 F -.078(an a tener mucho sentido.)-.25 F F2 -4.998108 306 S -7.778 -(QQ)4.998 G -5.558(uu)7.778 G 8.876 -4.4385.558 H 7.776 --3.888(ss R)4.438 H(RR)-3.33 E(RD)-7.218 E(Dt)-7.218 E(to)-3.328 E(oo) --4.998 E(ol)-4.998 E(l?)-2.778 E(?)-4.998 E F0 1.281 -(RRDtool signi\214ca `)108 322.8 R 1.281 -(`herramienta de bases de datos en round robin')-.74 F 3.781('. `)-.74 F -1.28(`Round robin')-.74 F 3.78('e)-.74 G 3.78(su)-3.78 G 1.28 -(na t\351cnica que)-3.78 F .793(implica un n\372mero \214jo de datos, y\ - un apuntador al elemento m\341s reciente. Piensa en un circulo con uno\ -s)108 334.8 R 1.21(cuantos puntos dib)108 346.8 R 1.209 -(ujados alrededor del borde; estos puntos son los lug)-.2 F 1.209 -(ares donde se pueden guardar los)-.05 F .09(datos. Dib)108 358.8 R .091 -(uja ahora una \215echa desde el centro del c\355rculo a uno de los pun\ -tos; este es el apuntador)-.2 F 5.091(.C)-.55 G(uando)-5.091 E .718 -(se lee o escribe el dato actualmente apuntado, la \215echa se mue)108 -370.8 R 1.017 -.15(ve a)-.25 H 3.217(lp).15 G .717 -(r\363ximo elemento. Como estamos en)-3.217 F 1.456 -(un c\355rculo, no hay ni principio ni \214n; siempre puedes se)108 -382.8 R(guir)-.15 E 3.957(,e)-.4 G 1.457 -(ternamente. Al cabo de un tiempo ya se)-3.957 F .234(habr\341n usado t\ -odas las posiciones disponibles y el proceso empieza a reutilizar las a\ -ntiguas. De esta forma,)108 394.8 R .862 -(la base de datos no crece en tama\361o y)108 406.8 R 3.362(,p)-.65 G -.863(or lo tanto, no requiere ning\372n mantenimiento.)-3.362 F .863 -(RRDtool trabaja)5.863 F(con estas bases de datos en `)108 418.8 Q -(`round-robin')-.74 E(', guardando y recuperando datos de ellas.)-.74 E -F2 -4.998108 441.6 S -7.778(QQ)4.998 G -5.558(uu)7.778 G 8.876 --4.4385.558 H(da)-1.12 E(at)-4.998 E(to)-3.328 E(os)-4.998 E -2.5(sp)-3.888 G(pu)-8.058 E(ue)-5.558 E(ed)-4.438 E(de)-5.558 E(en) --4.438 E 2.5(ng)-5.558 G(gu)-7.498 E(ua)-5.558 E(ar)-4.998 E(rd)-4.438 E -(da)-5.558 E(ar)-4.998 E(rs)-4.438 E(se)-3.888 E 2.5(ee)-4.438 G(en) --6.938 E 2.5(nu)-5.558 G(un)-8.058 E(na)-5.558 E(a)-4.998 E F1 -6.496 -(RR)2.5 G -6.496(RR)6.496 G -6.496(DD)6.496 G F2 -4.998(??)6.496 G F0 -.694(Lo que se te ocurra. Debes poder medir alg\372n v)108 458.4 R .693 -(alor dado en distintos momentos en el tiempo y pro)-.25 F -.15(ve)-.15 -G .693(er a).15 F .663(RRDtool de estos v)108 470.4 R .663 -(alores. Si puedes hacer esto, RRDtool puede guardar los datos. Los v) --.25 F .664(alores tienen que)-.25 F -(ser num\351ricos, pero no necesariamente enteros, como en)108 482.4 Q -/F3 9/Times-Roman@0 SF(MR)2.5 E(TG)-.54 E F0(.)A 2.035 -(Muchos ejemplos mencionan)108 499.2 R F3(SNMP)4.535 E F0 4.535(,q)C -2.034(ue es el acr\363nimo de `)-4.535 F 2.034(`Simple Netw)-.74 F 2.034 -(ork Management Protocol')-.1 F(')-.74 E .138 -(\(Protocolo Simple de Administraci\363n de Redes\). Lo de `)108 511.2 R -(`simple')-.74 E 2.638('s)-.74 G 2.638(er)-2.638 G .139 -(e\214ere al protocolo \255 no se supone que)-2.638 F .417(sea f\341cil\ - administrar o monitorizar una red. Cuando hayas terminado con este doc\ -umento, deber\341s saber lo)108 523.2 R 1.894 -(su\214ciente para entender cuando oig)108 535.2 R 1.894 -(as a otros hablar sobre)-.05 F F3(SNMP)4.395 E F0 4.395(.P)C 1.895 -(or ahora, simplemente considera a)-4.395 F F3(SNMP)108 547.2 Q F0 2.913 -(como una forma de pre)5.413 F 2.912(guntarle a los dispositi)-.15 F -.2 -(vo)-.25 G 5.412(sp).2 G 2.912(or los v)-5.412 F 2.912 -(alores de ciertos contadores que)-.25 F(mantienen. Son estos v)108 -559.2 Q(alores de estos contadores los que v)-.25 E -(amos a almacenar en la)-.25 E F3(RRD)2.5 E F0(.)A F2 -4.998108 -582 S -7.778(QQ)4.998 G -5.558(uu)7.778 G 8.876 -4.4385.558 H -(pu)-1.12 E(ue)-5.558 E(ed)-4.438 E(do)-5.558 E 2.5(oh)-4.998 G(ha) --8.058 E(ac)-4.998 E(ce)-4.438 E(er)-4.438 E 2.5(rc)-4.438 G(co)-6.938 E -(on)-4.998 E 2.5(ne)-5.558 G(es)-6.938 E(st)-3.888 E(ta)-3.328 E 2.5(ah) --4.998 G(he)-8.058 E(er)-4.438 E(rr)-4.438 E(ra)-4.438 E(am)-4.998 E(mi) --8.328 E(ie)-2.778 E(en)-4.438 E(nt)-5.558 E(ta)-3.328 E(a?)-4.998 E(?) --4.998 E F0 3.898(RRDtool se deri)108 598.8 R 4.398 -.25(va d)-.25 H(e) -.25 E F3(MR)6.398 E(TG)-.54 E F0 3.898(\(Multi Router T)6.398 F(raf)-.35 -E 3.898(\214c Grapher)-.25 F 6.399(,G)-.4 G 3.899(ra\214cador De T) --6.399 F 3.899(r\341\214co de M\372ltiples)-.35 F(Enrutadores\).)108 -610.8 Q F3(MR)6.675 E(TG)-.54 E F0 1.674(empez\363 como un peque\361o s\ -cript para poder gra\214car el uso de una cone)4.175 F 1.674 -(xi\363n a la)-.15 F 2.278(Internet. Lue)108 622.8 R 2.278(go e)-.15 F --.2(vo)-.25 G 2.278(lucion\363, permitiendo gra\214car otras fuentes de\ - datos, como temperatura, v).2 F(elocidad,)-.15 E -.2(vo)108 634.8 S -.022(ltajes, cantidad de p\341ginas impresas, etc... Lo m\341s probable\ - es que empieces a usar RRDtool para guardar).2 F 5.207(yp)108 646.8 S -2.708(rocesar datos conse)-5.207 F 2.708(guidos a tra)-.15 F 2.708 -(v\351s de)-.2 F F3(SNMP)5.208 E F0 5.208(,yq)C 2.708 -(ue los datos sean el n\372mero de bytes \(o bits\))-5.208 F 1.023 -(transferidos desde y hacia una red u ordenador)108 658.8 R 3.522(.R) --.55 G 1.022(RDtool te permite crear una base de datos, guardar los) --3.522 F .719 -(datos en ellas, recuperarlos y crear gr\341\214cos en formato)108 670.8 -R F3(GIF)3.219 E F0(o)3.22 E F3(PNG)3.22 E F0 3.22(,p)C .72 -(ara mostrarlos en un na)-3.22 F -2.25 -.15(veg a)-.2 H .72(dor web).15 -F(.)-.4 E 1.901(Esas im\341genes dependen de los datos que hayas guarda\ -do y pueden, por ejemplo, ser un sumario del)108 682.8 R .795 -(promedio de uso de la red, o los picos de tr\341\214co que ocurrieron.) -108 694.8 R -.8(Ta)5.795 G .796(mbi\351n lo puedes usar para mostrar el) -.8 F(ni)108 706.8 Q -.15(ve)-.25 G 5.267(ld).15 G 5.267(el)-5.267 G -2.767(as mareas, la radiaci\363n solar)-5.267 F 5.267(,e)-.4 G 5.267(lc) --5.267 G 2.767 -(onsumo de electricidad, el n\372mero de visitantes en una)-5.267 F -.15 -(ex)108 718.8 S .958(posici\363n en un momento dado, los ni).15 F -.15 -(ve)-.25 G .959 -(les de ruido cerca del aeropuerto, la temperatura en tu lug).15 F .959 -(ar de)-.05 F -.25(va)108 730.8 S 1.222(caciones f).25 F -.2(avo)-.1 G -1.222(rito, o en la ne).2 F -.15(ve)-.25 G 1.221 -(ra, o cualquier otra cosa que te puedas imaginar).15 F 3.721(,m)-.4 G -1.221(ientras teng)-3.721 F 1.221(as alg\372n)-.05 F 145.68 -(2001-02-11 Last)72 778.8 R(change: 1.0.28)2.5 E(1)189.84 E EP -%%Page: 2 2 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F(sensor con el cual medir los datos y seas capa\ -z de pasarle los n\372meros a RRDtool.)108 96 Q/F1 10/Times-Bold@0 SF --4.998108 118.8 S 14.436 -7.218(YY s)4.998 H(si)3.33 E 2.5(ia) --2.778 G<61fa>-7.498 E-5.558 E 2.5(nt)-5.558 G(te)-5.828 E(en) --4.438 E(ng)-5.558 E(go)-4.998 E 2.5(op)-4.998 G(pr)-8.058 E -.18(ro) --4.438 G(ob)-4.818 E(bl)-5.558 E(le)-2.778 E(em)-4.438 E(ma)-8.328 E(as) --4.998 E 2.5(sd)-3.888 G(de)-8.058 E(es)-4.438 E(sp)-3.888 E(pu)-5.558 E -<75e9>-5.558 E-4.438 E 2.5(sd)-3.888 G(de)-8.058 E 2.5(el)-4.438 G -(le)-5.278 E(ee)-4.438 E(er)-4.438 E 2.5(re)-4.438 G(es)-6.938 E(st) --3.888 E(te)-3.328 E 2.5(ed)-4.438 G(do)-8.058 E(oc)-4.998 E(cu)-4.438 E -(um)-5.558 E(me)-8.328 E(en)-4.438 E(nt)-5.558 E(to)-3.328 E(o?)-4.998 E -(?)-4.998 E F0 .22(Lo primero, \241l\351elo otra v)108 135.6 R .22 -(ez!. Puede que te hayas perdido de algo.)-.15 F .22 -(Si no puedes compilar el c\363digo fuente y)5.22 F 1.548 -(usas un sistema operati)108 147.6 R 1.948 -.2(vo b)-.25 H 1.547 -(astante com\372n, casi se).2 F 1.547 -(guro que no es la culpa de RRDtool.)-.15 F(Probablemente)6.547 E -(consig)108 159.6 Q .217(as v)-.05 F .217 -(ersiones pre-compiladas por la Internet. Si pro)-.15 F .218 -(vienen de una fuente con\214able, \372salas. Si, por otro)-.15 F 1.058 -(lado, el programa funciona, pero no te da los resultados que tu espera\ -bas, puede ser un problema con la)108 171.6 R(con\214guraci\363n; re)108 -183.6 Q(v\355sala y comp\341rala con los ejemplos.)-.25 E .207 -(Hay una lista de correo electr\363nico y una archi)108 200.4 R .607 -.2 -(vo d)-.25 H 2.707(el).2 G 2.707(am)-2.707 G .208 -(isma. Lee la lista durante unas cuantas semanas, y)-2.707 F -.2(bu)108 -212.4 S .344(sca en el archi).2 F -.2(vo)-.25 G 2.844(.E).2 G 2.844(sd) --2.844 G .344(escort\351s hacer una pre)-2.844 F .343 -(gunta sin haber re)-.15 F .343(visado el archi)-.25 F -.2(vo)-.25 G -2.843<3ba1>.2 G .343(puede que tu problema)-2.843 F .424(ya haya sido r\ -esuelto antes! Normalmente ocurre as\355 en todas las listas de correo,\ - no s\363lo esta. Examina la)108 224.4 R -(documentaci\363n que vino con RRDtool para v)108 236.4 Q -(er donde est\341 el archi)-.15 E .4 -.2(vo y c)-.25 H(omo usarlo.).2 E -2.415 -.7(Te s)108 253.2 T 1.014(ugiero que te tomes un momento y te su\ -bscribas a la lista ahora mismo, en).7 F 1.014(viando un mensaje a rrd-) --.4 F .271(users-request@list.ee.ethz.ch con t\355tulo)108 265.2 R/F2 10 -/Courier@0 SF(subscribe)2.771 E F0 2.771(.S)C 2.772(ie)-2.771 G -.15(ve) --3.022 G .272(ntualmente deseas salirte de la lista, en).15 F .272 -(v\355a otro)-.4 F(correo a la misma direcci\363n, con t\355tulo)108 -277.2 Q F2(unsubscribe)2.5 E F0(.)A F1 -4.998108 300 S -7.218(CC) -4.998 G -4.9987.218 G -8.328(mm)4.998 G 9.996 -4.998(oo m)8.328 H -(me)-3.33 E 2.5(ev)-4.438 G -.1(va)-7.498 G(as)-4.898 E 2.5(sa)-3.888 G -2.5(aa)-7.498 G(ay)-7.498 E(yu)-4.998 E(ud)-5.558 E(da)-5.558 E(ar) --4.998 E(r?)-4.438 E(?)-4.998 E F0 .37 -(D\341ndote descripciones y ejemplos detallados. Asumimos que el se)108 -316.8 R .37(guir las instrucciones en el orden en que)-.15 F .574 -(se presentan aqu\355 te dar\341 su\214ciente conocimiento)108 328.8 R -.575(de RRDtool como para que e)5.575 F .575(xperimentes por tu cuenta.) --.15 F 1.265(Si no funciona a la primera, puede que te hallas saltado a\ -lgo; siguiendo los ejemplos obtendr\341s algo de)108 340.8 R -.15(ex)108 -352.8 S .025(periencia pr\341ctica y).15 F 2.525(,l)-.65 G 2.525(oq) --2.525 G .025(ue es m\341s importante, un poco de informaci\363n sobre \ -como funciona el programa.)-2.525 F 1.732 -(Necesitar\341s saber algo sobre n\372meros he)108 369.6 R 1.731 -(xadecimales. Si no, empieza por leer `)-.15 F(`bin_dec_he)-.74 E(x') --.15 E 4.231('a)-.74 G 1.731(ntes de)-4.231 F(continuar)108 381.6 Q(.) --.55 E F1 9.916 -6.668(TT u)108 404.4 T 2.5(up)1.11 G(pr)-8.058 E(ri) --4.438 E(im)-2.778 E(me)-8.328 E(er)-4.438 E(ra)-4.438 E 2.5(ab)-4.998 G -(ba)-8.058 E(as)-4.998 E(se)-3.888 E 2.5(ed)-4.438 G(de)-8.058 E 2.5(ed) --4.438 G(da)-8.058 E(at)-4.998 E(to)-3.328 E(os)-4.998 E 2.5(se)-3.888 G -(en)-6.938 E 2.5(nr)-5.558 G -.18(ro)-6.938 G(ou)-4.818 E(un)-5.558 E -(nd)-5.558 E(d-)-5.558 E(-r)-3.328 E -.18(ro)-4.438 G(ob)-4.818 E(bi) --5.558 E(in)-2.778 E(n)-5.558 E F0 .333(En mi opini\363n, la mejor form\ -a de aprender algo es haci\351ndolo. \277Por qu\351 no empezamos ya? V) -108 421.2 R .333(amos a crear)-1.11 F .235 -(una base de datos, poner unos cuantos v)108 433.2 R .234 -(alores en ella y e)-.25 F .234 -(xtraerlos despu\351s. La salida que obteng)-.15 F .234(as debe ser)-.05 -F(igual a la que aparece en este documento.)108 445.2 Q 2.722 -(Empezaremos con algo f\341cil, comparando un coche con un enrutador)108 -462 R 5.223(,op)-.4 G 2.723(or decirlo de otra forma,)-5.223 F .706(com\ -parando kil\363metros con bits y bytes. A nosotros nos da lo mismo; son\ - unos n\372meros obtenidos en un)108 474 R(espacio de tiempo.)108 486 Q -.381(Asumamos que tenemos un dispositi)108 502.8 R .781 -.2(vo q)-.25 H -.381(ue trans\214ere bytes desde y hacia la Internet. Este dispositi).2 -F .782 -.2(vo t)-.25 H(iene).2 E .321(un contador que empieza en 0 al e\ -ncenderse y se incrementa con cada byte transferido. Este contador tien\ -e)108 514.8 R .166(un v)108 526.8 R .166(alor m\341ximo; si ese v)-.25 F -.166(alor se alcanza y se cuenta un byte m\341s, el contador vuelv)-.25 -F 2.666(eae)-.15 G .166(mpezar desde cero.)-2.666 F .834(Esto es e)108 -538.8 R .833(xactamente lo mismo que pasa con muchos contadores, como e\ -l cuentakil\363metros del coche. En)-.15 F 3.445 -(muchas de las disertaciones sobre redes se habla de bits por se)108 -550.8 R 3.446(gundo, as\355 que empezaremos por)-.15 F .436(acostumbrar\ -nos a esto. Asumamos que un byte son 8 bits y empecemos a pensar en bit\ -s y no en bytes. \241El)108 562.8 R(contador)108 574.8 Q 3.268(,s)-.4 G -.769(in embar)-3.268 F .769(go, sigue contando en bytes! En el mundo) --.18 F/F3 9/Times-Roman@0 SF(SNMP)3.269 E F0 3.269(,l)C 3.269(am)-3.269 -G .769(ayor\355a de los contadores tienen)-3.269 F 1.969(una longitud d\ -e 32 bits. Esto signi\214ca que pueden contar desde 0 hasta 4294967295.\ - Usaremos estos)108 586.8 R -.25(va)108 598.8 S .524 -(lores en los ejemplos. El dispositi).25 F -.2(vo)-.25 G 3.025(,c).2 G -.525(uando le pre)-3.025 F .525(guntamos, retorna el v)-.15 F .525 -(alor actual del contador)-.25 F 3.025(.C)-.55 G(omo)-3.025 E 1.528 -(sabemos el tiempo transcurrido desde la \372ltima v)108 610.8 R 1.528 -(ez que le pre)-.15 F 1.528(guntamos, sabemos cuantos bytes se han)-.15 -F(transferido)108 622.8 Q/F4 10/Symbol SF(***)3.4 E F2 .9(en promedio)B -F4(***)A F0 .9(por se)3.4 F .9 -(gundo. Esto no es muy dif\355cil de calcular; primero en palabras,)-.15 -F(lue)108 634.8 Q(go en operaciones:)-.15 E(1. T)108 651.6 Q(oma el v) --.8 E(alor actual del contador y r\351stale el v)-.25 E(alor anterior) --.25 E(2. Haz lo mismo con la fecha)108 668.4 Q -(lo multiplicas por ocho obtienes la cantidad de bits por se)72 685.2 Q -(gundo)-.15 E .348(3. Di)108 697.2 R .347(vide el resultado del paso \(\ -1\) por el resultado del paso \(2\). El resultado es la cantidad de byt\ -es por)-.25 F(se)128 709.2 Q .347(gundo. Si)-.15 F 145.68 -(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(2)189.84 E EP -%%Page: 3 3 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Courier@0 SF(bps = \(contador_actual - c\ -ontador_anterior\) / \(fecha_actual - fecha_anterior\))120 96 Q/F2 10 -/Symbol SF(*)6 E F1(8)6 E F0 -.15(Pa)108 120 S 1.677 -(ra algunos ser\341 de ayuda traducir esto a un ejemplo automotor).15 F -6.677(.N)-.55 G 4.177(op)-6.677 G 1.677(rueben estas v)-4.177 F 1.676 -(elocidades en la)-.15 F -(pr\341ctica, y si lo hacen, no me echen la culpa por los resultados.) -108 132 Q(Usaremos las siguientes abre)108 148.8 Q(viaturas:)-.25 E F1 -18(M: metros)114 165.6 R 12(KM: kil\363metros)114 177.6 R -(\(= 1000 metros\).)6 E 18(H: horas)114 189.6 R 18(S: segundos)114 201.6 -R(KM/H: kil\363metros por hora)114 213.6 Q 6(M/S: metros)114 225.6 R -(por segundo)6 E F0 -1.11(Va)108 249.6 S 2.692(sc)1.11 G .192(onduciend\ -o un coche. A las 12:05, miras el contador en el salpicadero y v)-2.692 -F .192(es que el coche ha recorrido)-.15 F(12345)108 261.6 Q/F3 9 -/Times-Roman@0 SF(KM)2.937 E F0 2.937(.Al)C .437(as 12:10 vuelv)-2.937 F -.437(es a mirar otra v)-.15 F .437(ez, y dice 12357)-.15 F F3(KM)2.937 E -F0 2.936(.Q)C .436(uiere decir)-2.936 F 2.936(,q)-.4 G .436 -(ue has recorrido 12)-2.936 F F3(KM)2.936 E F0 2.11 -(en cinco minutos. Un cient\355\214co con)108 273.6 R -.15(ve)-.4 G 2.11 -(rtir\355a esto en metros por se).15 F 2.11 -(gundos; esto es bastante parecido al)-.15 F -(problema de pasar de bytes transferidos en 5 minutos a bits por se)108 -285.6 Q(gundo.)-.15 E -.6(Vi)108 302.4 S 2.756 -(ajamos 12 kil\363metros, que son 12000 metros. T).6 F 2.756 -(ardamos 5 minutos, o sea 300 se)-.8 F 2.755(gundos. Nuestra)-.15 F -.15 -(ve)108 314.4 S(locidad es 12000M / 300S igual a 40 M/S.).15 E -.8(Ta) -108 331.2 S .028(mbi\351n podemos calcular la v).8 F .029(elocidad en) --.15 F F3(KM/H:)2.529 E F0 .029(12 v)2.529 F .029 -(eces 5 minutos es una hora, as\355 que multiplicando los)-.15 F(12)108 -343.2 Q F3(KM)2.5 E F0(por 12 obtenemos 144)2.5 E F3(KM/H)2.5 E F0 2.5 -(.N)C 2.5(oi)-2.5 G(ntentes esto en casa, o por donde vi)-2.5 E .4 -.2 -(vo :)-.25 H.2 E .243(Recuerda que estos n\372meros son tan s\363\ -lo promedios. No hay forma de deducir)108 360 R 2.742(,v)-.4 G .242 -(iendo s\363lo los n\372meros, si)-2.742 F(fuiste a una v)108 372 Q -(elocidad constante.)-.15 E -(Hay un ejemplo m\341s adelante en el tutorial que e)5 E(xplica esto.) --.15 E .425 -(Espero que entiendas que no hay diferencia entre calcular la v)108 -388.8 R .426(elocidad en M/S o bps; s\363lo la forma en que)-.15 F 1.016 -(recogemos los datos es distinta. Inclusi)108 400.8 R -.15(ve)-.25 G -3.515(,l).15 G 3.515(aKd)-3.515 G 3.515(ek)-3.515 G 1.015 -(ilo en este caso es e)-3.515 F 1.015(xactamente la misma, ya que en) --.15 F(redes k es 1000)108 412.8 Q .254(Ahora v)108 429.6 R .254(amos a\ - crear una base de datos en la que guardar todos estos interesantes v) --.25 F .255(alores. El m\351todo a usar)-.25 F .924 -(para arrancar el programa puede v)108 441.6 R .924(ariar de un sistema\ - de operaci\363n a otro, pero asumamos que lo puedes)-.25 F(resolv)108 -453.6 Q .843 -(er tu mismo en caso que se diferente en el sistema que usas.)-.15 F -(Ase)5.843 E .843(g\372rate de no sobreescribir ning\372n)-.15 F(archi) -108 465.6 Q 1.723 -.2(vo e)-.25 H 3.823(nt).2 G 3.823(us)-3.823 G 1.323 -(istema al ejecutarlo y escribe todo como una sola l\355nea \(tuv)-3.823 -F 3.823(eq)-.15 G 1.322(ue partirlo para que fuera)-3.823 F(le)108 477.6 -Q(gible\), salt\341ndote todos los caracteres '\\')-.15 E F1 -(rrdtool create test.rrd)126 494.4 Q(\\)78 E(--start 920804400)180 506.4 -Q(\\)60 E 12(DS:speed:COUNTER:600:U:U \\)180 518.4 R 36 -(RRA:AVERAGE:0.5:1:24 \\)180 530.4 R(RRA:AVERAGE:0.5:6:10)180 542.4 Q F0 -(\(o sea, escribe:)108 566.4 Q F1 -(rrdtool create test.rrd \255\255start 920804400 DS ...)2.5 E F0(\))A/F4 -10/Times-Bold@0 SF -4.998108 589.2 S -7.778(QQ)4.998 G -5.558(uu) -7.778 G 8.876 -4.4385.558 H(he)-1.12 E(em)-4.438 E(mo)-8.328 E -(os)-4.998 E 2.5(sc)-3.888 G(cr)-6.938 E -.18(re)-4.438 G(ea)-4.258 E -(ad)-4.998 E(do)-5.558 E(o?)-4.998 E(?)-4.998 E F0 .466(Hemos creado un\ -a base de datos en round robin llamada test \(test.rrd\), que empieza d\ -esde el mediod\355a del)108 606 R .592(d\355a en que empec\351 a escrib\ -ir este documento \(7 de marzo de 1999\). En ella se guarda una fuente \ -de datos)108 618 R(\()108 630 Q F3(DS)A F0 .717(\), llamada `)B(`speed') --.74 E .718(', que se lee de un contador)-.74 F 3.218(.E)-.55 G 3.218 -(nl)-3.218 G 3.218(am)-3.218 G .718 -(isma base de datos se guardan dos archi)-3.218 F -.2(vo)-.25 G 3.218 -(se).2 G(n)-3.218 E .849 -(round robin \(RRAs\), uno promedia los datos cada v)108 642 R .849 -(ez que se leen \(o sea, no hay nada que promediar\), y)-.15 F .172(man\ -tiene 24 muestras \(24 por 5 minutos = 2 horas de muestras\). El otro p\ -romedia 6 muestras \(media hora\),)108 654 R 2.5(yg)108 666 S(uarda 10 \ -de estos promedios \(o sea, 5 horas\). Las opciones restantes las v)-2.5 -E(eremos m\341s adelante.)-.15 E .151(RRDtool usa un formato de `)108 -682.8 R(`fecha')-.74 E 2.651('e)-.74 G .151 -(special que viene del mundo de)-2.651 F F3(UNIX)2.651 E F0 2.651(.E)C -.151(stas `)-2.651 F(`fechas')-.74 E 2.651('s)-.74 G .151 -(on el n\372mero)-2.651 F .922(de se)108 694.8 R .923 -(gundos que han pasado desde el primero de enero de 1970, zona)-.15 F F3 -(UTC)3.423 E F0 3.423(.E)C .923(ste n\372mero de se)-3.423 F .923 -(gundos se)-.15 F(con)108 706.8 Q(vierte lue)-.4 E -(go en la fecha local, por lo que v)-.15 E(aria se)-.25 E -(g\372n la franja horaria.)-.15 E 145.68(2001-02-11 Last)72 768 R -(change: 1.0.28)2.5 E(3)189.84 E EP -%%Page: 4 4 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F .559(Lo m\341s probable es que tu no vi)108 96 -R -.25(va)-.25 G 3.059(se).25 G 3.059(nl)-3.059 G 3.059(am)-3.059 G .559 -(isma parte del mundo que yo, por lo que tu franja horaria ser\341) --3.059 F .874(diferente. En los ejemplos, cuando mencione horas, puede \ -que no sean las mismas para ti; esto no afecta)108 108 R .718 -(mucho los resultados, s\363lo tienes que corre)108 120 R .717 -(gir las horas mientras lees. Por ejemplo, las 12:05 para m\355 son)-.15 -F(las 11:05 para los amigos en la Gran Breta\361a.)108 132 Q -(Ahora tenemos que llenar nuestra base de datos con v)108 148.8 Q -(alores. V)-.25 E(amos a suponer que le\355mos estos datos:)-1.11 E/F1 -10/Courier@0 SF 6(12:05 12345)114 165.6 R(KM)6 E 6(12:10 12357)114 177.6 -R(KM)6 E 6(12:15 12363)114 189.6 R(KM)6 E 6(12:20 12363)114 201.6 R(KM)6 -E 6(12:25 12363)114 213.6 R(KM)6 E 6(12:30 12373)114 225.6 R(KM)6 E 6 -(12:35 12383)114 237.6 R(KM)6 E 6(12:40 12393)114 249.6 R(KM)6 E 6 -(12:45 12399)114 261.6 R(KM)6 E 6(12:50 12405)114 273.6 R(KM)6 E 6 -(12:55 12411)114 285.6 R(KM)6 E 6(13:00 12415)114 297.6 R(KM)6 E 6 -(13:05 12420)114 309.6 R(KM)6 E 6(13:10 12422)114 321.6 R(KM)6 E 6 -(13:15 12423)114 333.6 R(KM)6 E F0(Llenaremos la base de datos as\355:) -108 357.6 Q F1(rrdtool update test.rrd 920804700:12345 920805000:12357 \ -920805300:12363)114 374.4 Q(rrdtool update test.rrd 920805600:12363 920\ -805900:12363 920806200:12373)114 386.4 Q(rrdtool update test.rrd 920806\ -500:12383 920806800:12393 920807100:12399)114 398.4 Q(rrdtool update te\ -st.rrd 920807400:12405 920807700:12411 920808000:12415)114 410.4 Q(rrdt\ -ool update test.rrd 920808300:12420 920808600:12422 920808900:12423)114 -422.4 Q F0(Lo que signi\214ca: actualiza nuestra base de datos test con\ - los siguientes v)108 446.4 Q(alores:)-.25 E F1 -(fecha 920804700, valor 12345)114 463.2 Q(fecha 920805000, valor 12357) -114 475.2 Q(etc\351tera.)114 499.2 Q F0 1.309(Como v)108 523.2 R 1.309 -(es, pueden introducirse m\341s de un v)-.15 F 1.31 -(alor en la base de datos por ejecuci\363n del comando. Y)-.25 F 3.81 -(ol)-1.1 G(os)-3.81 E(agrupo de tres en tres para hacerlo le)108 535.2 Q -(gible, pero en realidad el m\341ximo depende del sistema de operaci\ -\363n.)-.15 E(Ahora podemos recuperar los datos usando `)108 552 Q -(`rrdtool fetch')-.74 E(':)-.74 E F1 -(rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200)114 -568.8 Q F0(Debes obtener esto como salida:)108 592.8 Q F1(speed)228 -609.6 Q F0 145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(4)189.84 -E EP -%%Page: 5 5 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Courier@0 SF 42(920804400: NaN)114 96 R -42(920804700: NaN)114 108 R(920805000: 4.0000000000e-02)114 120 Q -(920805300: 2.0000000000e-02)114 132 Q(920805600: 0.0000000000e+00)114 -144 Q(920805900: 0.0000000000e+00)114 156 Q(920806200: 3.3333333333e-02) -114 168 Q(920806500: 3.3333333333e-02)114 180 Q -(920806800: 3.3333333333e-02)114 192 Q(920807100: 2.0000000000e-02)114 -204 Q(920807400: 2.0000000000e-02)114 216 Q(920807700: 2.0000000000e-02) -114 228 Q(920808000: 1.3333333333e-02)114 240 Q -(920808300: 1.6666666667e-02)114 252 Q(920808600: 6.6666666667e-03)114 -264 Q(920808900: 3.3333333333e-03)114 276 Q 42(920809200: NaN)114 288 R -F0 1.516(Si no, hay algo mal. Probablemente tu sistema de operaci\363n \ -muestre `)108 312 R(`NaN')-.74 E 4.016('d)-.74 G 4.016(eo)-4.016 G 1.516 -(tra forma; representa)-4.016 F -.74(``)108 324 S .407(Not a Number').74 -F .407(', o sea `)-.74 F .407(`No es un n\372mero')-.74 F .407 -('. Si aparece `)-.74 F(`U')-.74 E -5.406 2.907('o `)-.74 H(`)-3.647 E -/F2 9/Times-Roman@0 SF(UNKN)A F0 1.888 -.74('' o a)D .408 -(lgo parecido, es lo mismo. Si).74 F 1.29 -(hay alguna otra diferencia, probablemente te equi)108 336 R -.2(vo)-.25 -G 1.29(caste al introducir alg\372n P v).2 F 1.29 -(alor \(asumiendo que mi)-.25 F(tutorial est\341 bien, por supuesto :\ -\255\). En ese caso, borra la base de datos y prueba de nue)108 348 Q --.2(vo)-.25 G(.).2 E(Lo que representa e)108 364.8 Q -(xactamente esta salida lo v)-.15 E -(amos m\341s adelante en el tutorial.)-.25 E/F3 10/Times-Bold@0 SF --7.778(HH)108 387.6 S -4.998(oo)7.778 G -4.438(rr)4.998 G 9.996 -4.998 -(aa d)4.438 H(de)-.56 E 2.5(eh)-4.438 G(ha)-8.058 E(ac)-4.998 E(ce) --4.438 E(er)-4.438 E 2.5(ra)-4.438 G(al)-7.498 E(lg)-2.778 E(gu)-4.998 E -(un)-5.558 E(no)-5.558 E(os)-4.998 E 2.5(sg)-3.888 G(gr)-7.498 E<72e1> --4.438 E-4.998 E<8c63>-5.558 E(co)-4.438 E(os)-4.998 E(s)-3.888 E -F0(Prueba este comando:)108 404.4 Q F1(rrdtool graph speed.gif)114 421.2 -Q(\\)198 E(--start 920804400 --end 920808000)162 433.2 Q(\\)90 E 78 -(DEF:myspeed=test.rrd:speed:AVERAGE \\)162 445.2 R(LINE2:myspeed#FF0000) -162 457.2 Q F0 2.403(Este comando crea speed.gif, un gr\341\214co de lo\ -s datos desde las 12:00 hasta las 13:00. Contiene una)108 481.2 R 2.559 -(de\214nici\363n de la v)108 493.2 R 2.559(ariable myspeed y de\214ne e\ -l color como rojo. Notar\341s que el gr\341\214co no comienza)-.25 F --.15(ex)108 505.2 S .849(actamente a las 12:00 sino a las 12:05, y es p\ -orque no tenemos datos su\214cientes como para calcular el).15 F .54 -(promedio de v)108 517.2 R .54(elocidad antes de ese momento. Esto s\ -\363lo ocurre en caso de que se pierdan alg\372n muestreo,)-.15 F -(lo que esperamos que no debe ocurrir muy a menudo.)108 529.2 Q -(Si ha funcionado, \241felicitaciones!. Si no, re)108 546 Q -(visa qu\351 puede estar mal.)-.25 E .074 -(La de\214nici\363n de colores se construye a partir del rojo, v)108 -562.8 R .075(erde y azul. Especi\214cas cuanto de cada uno de estos)-.15 -F 1.438(componentes v)108 574.8 R 1.438(as a usar en he)-.25 F 1.437 -(xadecimal: 00 signi\214ca `)-.15 F 1.437(`nada de este color')-.74 F -3.937('y)-.74 G F2(FF)A F0 1.437(signi\214ca `)3.937 F 1.437 -(`este color a)-.74 F .93(m\341xima intensidad')108 586.8 R .93('. El `) --.74 F(`color')-.74 E 3.43('b)-.74 G .93(lanco es la mezcla del rojo, v) --3.43 F .931(erde y azul a toda intensidad:)-.15 F F2(FFFFFF)3.431 E F0 -3.431(;e)C(l)-3.431 E(ne)108 598.8 Q -(gro es la ausencia de todos los colores: 000000.)-.15 E F1 18 -(rojo #FF0000)126 615.6 R 12(verde #00FF00)126 627.6 R 18(azul #0000FF) -126 639.6 R(violeta #FF00FF)126 651.6 Q(\(mezcla de rojo y azul\))30 E -18(gris #555555)126 663.6 R(\(un tercio de cada uno de los colores\))30 -E F0 2.859(El archi)108 687.6 R -.2(vo)-.25 G F2(GIF)5.559 E F0 2.859 -(que acabas de crear puede v)5.359 F 2.859(erse con tu visor de archi) --.15 F -.2(vo)-.25 G 5.359(sd).2 G 5.359(ei)-5.359 G 2.858(magen f) --5.359 F -.2(avo)-.1 G 2.858(rito. Los).2 F(na)108 699.6 Q -2.25 -.15 -(veg a)-.2 H(dores lo mostrar\341n usando la).15 E F2(URL)2.5 E F0 -.74 -(``)2.5 G -1.95(\214le://el/camino/de/directorios/hasta/speed.gif ').74 -F(')-.74 E 145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(5)189.84 -E EP -%%Page: 6 6 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Times-Bold@0 SF -7.778(GG)108 96 S -4.438 -(rr)7.778 G -4.9984.438 G -5.558<8c8c>4.998 G -4.438(cc)5.558 G --4.998(oo)4.438 G 7.776 -3.888(ss c)4.998 H(co)-.55 E(on)-4.998 E 2.5 -(nu)-5.558 G(un)-8.058 E 2.5(np)-5.558 G(po)-8.058 E(oc)-4.998 E(co) --4.438 E 2.5(od)-4.998 G(de)-8.058 E 2.5(em)-4.438 G(ma)-10.828 E(at) --4.998 E(te)-3.328 E(em)-4.438 E<6de1>-8.328 E-4.998 E(ti)-3.328 E -(ic)-2.778 E(ca)-4.438 E(a)-4.998 E F0 .103(Cuando v)108 112.8 R .104(e\ -as la imagen, notar\341s que el eje horizontal tiene unas etiquetas mar\ -cando las 12:10, 12:20, 12:30,)-.15 F .712(12:40 y 12:50. Los otros dos\ - momentos \(12:00 y 13:00\) no se pueden mostrar bien por f)108 124.8 R -.711(alta de datos, as\355)-.1 F .415 -(que el programa se los salta. El eje v)108 136.8 R .415 -(ertical muestra el rango de los v)-.15 F .415 -(alores que entramos. Introdujimos los)-.25 F 1.218(kil\363metros y lue) -108 148.8 R 1.218(go di)-.15 F 1.218(vidimos entre 300 se)-.25 F 1.217 -(gundos, por lo que obtuvimos v)-.15 F 1.217(alores bastante bajos. P) --.25 F 1.217(ara ser)-.15 F -.15(ex)108 160.8 S 1.422 -(actos, el primer v).15 F(alor)-.25 E 3.922(,1)-.4 G 3.922(2\()-3.922 G -1.423(12357\25512345\), di)-3.922 F 1.423 -(vidido entre 300 da 0.04, lo que RRDtool muestra como)-.25 F -.74(``) -108 172.8 S(40m').74 E .237(', o sea `)-.74 F(`40/1000')-.74 E .237 -('. \241La `)-.74 F(`m')-.74 E 1.717 -.74('' n)-.74 H 2.737(ot).74 G -.237(iene nada que v)-2.737 F .237 -(er con metros, kil\363metros o mil\355metros!.)-.15 F(RRDtool)5.236 E(\ -no sabe nada de unidades, el s\363lo trabaja con n\372meros, no con met\ -ros.)108 184.8 Q 3.665(Donde nos equi)108 201.6 R -.2(vo)-.25 G 3.666(c\ -amos fue en que debimos medir en metros. As\355, \(12357000\25512345000\ -\)/300 =).2 F(12000/300 = 40.)108 213.6 Q -1.11(Va)108 230.4 S 1.755 -(mos a corre)1.11 F 1.754 -(girlo. Podr\355amos recrear la base de datos con los v)-.15 F 1.754 -(alores correctos, pero hay una forma)-.25 F -(mejor: \241haciendo los c\341lculos mientras creamos el archi)108 242.4 -Q .4 -.2(vo g)-.25 H(if!).2 E/F2 10/Courier@0 SF -(rrdtool graph speed2.gif)126 259.2 Q(\\)162 E -(--start 920804400 --end 920808000)144 271.2 Q(\\)90 E -(--vertical-label m/s)144 283.2 Q(\\)168 E 78 -(DEF:myspeed=test.rrd:speed:AVERAGE \\)144 295.2 R -(CDEF:realspeed=myspeed,1000,)144 307.2 Q/F3 10/Symbol SF(*)A F2(\\)114 -E(LINE2:realspeed#FF0000)144 319.2 Q F0 1.471(Cuando v)108 343.2 R 1.471 -(eas esta imagen, notar\341s que la `)-.15 F(`m')-.74 E 3.971('h)-.74 G -3.971(ad)-3.971 G 1.472 -(esaparecido, y ahora tienes los resultados correctos.)-3.971 F(Adem\ -\341s hemos a\361adido una etiqueta a la imagen. Apartando esto, el arc\ -hi)108 355.2 Q -.2(vo)-.25 G/F4 9/Times-Roman@0 SF(GIF)2.7 E F0 -(es el mismo.)2.5 E .628(Las operaciones est\341n en la secci\363n del) -108 372 R F4(CDEF)3.128 E F0 3.128(ye)3.128 G .628 -(st\341n escritas en Notaci\363n Polaca In)-3.128 F -.15(ve)-.4 G .627 -(rsa \(Re).15 F -.15(ve)-.25 G .627(rse Polish).15 F 3.497(Notation o `) -108 384 R(`)-.74 E F4(RPN)A F0 -.74('')C 3.497(\). En palabras, dice: `) -.74 F 3.497(`toma la fuente de datos myspeed y el numero 1000, y)-.74 F -(multipl\355calos')108 396 Q 1.747('. No te molestes en meterte con)-.74 -F F4(RPN)4.247 E F0(toda)4.247 E 1.747(v\355a, la v)-.2 F 1.747 -(eremos con m\341s detalle m\341s adelante.)-.15 F 1.004 -(Adem\341s, puede que quieras leer mi tutorial sobre los)108 408 R F4 -(CDEF)3.504 E F0 3.504(ye)3.504 G 3.504(lt)-3.504 G 1.004 -(utorial de Ste)-3.504 F 1.304 -.15(ve R)-.25 H 1.004(ader sobre).15 F -F4(RPN)3.504 E F0 3.504(,p)C(ero)-3.504 E(primero terminemos con este.) -108 420 Q 2.307(\241Un momento! Si podemos multiplicar los v)108 436.8 R -2.306 -(alores por mil, entonces, \241tambi\351n deber\355a ser posible el)-.25 -F(mostrar la v)108 448.8 Q -(elocidad en kil\363metros por hora usando los mismos datos!)-.15 E -.15 -(Pa)108 465.6 S .051(ra cambiar el v).15 F .051 -(alor que medimos en metros por se)-.25 F .052 -(gundo, calculamos los metros por hora \(v)-.15 F(alor)-.25 E F3(*)2.552 -E F0 .052(3600\) y)2.552 F(di)108 477.6 Q .791 -(vidimos entre 1000 para sacar los kil\363metros por hora. T)-.25 F .79 -(odo junto hace v)-.8 F(alor)-.25 E F3(*)3.29 E F0 .79 -(\(3600/1000\) == v)3.29 F(alor)-.25 E F3(*)3.29 E F0(3.6.)108 489.6 Q -2.843(Como en nuestra base de datos cometimos un error guardando los v) -108 506.4 R 2.844(alores en kil\363metros, debemos)-.25 F(compensar por\ - ello, multiplicando por 100, por lo que al aplicar esta correcci\363n \ -nos queda v)108 518.4 Q(alor)-.25 E F3(*)2.5 E F0(3600.)2.5 E(Ahora v) -108 535.2 Q -(amos a crear este gif, agre\341ndole un poco m\341s de magia...)-.25 E -F2(rrdtool graph speed3.gif)126 552 Q(\\)162 E -(--start 920804400 --end 920808000)144 564 Q(\\)90 E -(--vertical-label km/h)144 576 Q(\\)162 E 78 -(DEF:myspeed=test.rrd:speed:AVERAGE \\)144 588 R -("CDEF:kmh=myspeed,3600,)144 600 Q F3(*)A F2 138("\\)C 108 -(CDEF:fast=kmh,100,GT,kmh,0,IF \\)144 612 R 108 -(CDEF:good=kmh,100,GT,0,kmh,IF \\)144 624 R -(HRULE:100#0000FF:"Maximum allowed")144 636 Q(\\)84 E -(AREA:good#00FF00:"Good speed")144 648 Q(\\)114 E -(AREA:fast#FF0000:"Too fast")144 660 Q F0 .634(Esto luce mucho mejor)108 -684 R 3.133(.L)-.55 G 3.133(av)-3.133 G .633(elocidad en)-3.283 F F4 -(KM/H)3.133 E F0 3.133(,ya)C .633(dem\341s tenemos una l\355nea e)-3.133 -F .633(xtra mostrando la v)-.15 F(elocidad)-.15 E .988 -(m\341xima permitida \(en el camino por donde conduzco\). T)108 696 R -.988(ambi\351n le cambie los colores de la v)-.8 F .989(elocidad, y)-.15 -F(ahora paso de ser una l\355nea a un \341rea.)108 708 Q 145.68 -(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(6)189.84 E EP -%%Page: 7 7 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F(Los c\341lculos son m\341s complejos ahora. P) -108 96 Q(ara calcular la v)-.15 E(elocidad `)-.15 E(`aceptable')-.74 E -(':)-.74 E/F1 10/Courier@0 SF -(Verifica si la velocidad en kmh es mayor que 100)126 112.8 Q 6(\(k)30 G -(mh,100 \) GT)-6 E(Si es as\355, retorna 0, si no, retorna la velocidad) -126 124.8 Q(\(\(\( kmh,100 \) GT \), 0, kmh\) IF)24 E F0 -.15(Pa)108 -148.8 S(ra calcular la parte de v).15 E(elocidad `)-.15 E(`e)-.74 E -(xcesi)-.15 E -.25(va)-.25 G -.74('').25 G(:).74 E F1 -(Verifica si la velocidad en kmh es mayor que 100)126 165.6 Q 6(\(k)30 G -(mh,100 \) GT)-6 E(Si es as\355, retorna la velocidad, si no, retorna 0) -126 177.6 Q(\(\(\( kmh,100\) GT \), kmh, 0\) IF)24 E/F2 10/Times-Bold@0 -SF -9.438(MM)108 212.4 S -4.998(aa)9.438 G -4.998(gg)4.998 G -2.778(ii) -4.998 G 9.996 -4.998(aa gg)2.778 H -4.438(rr)4.998 G -4.9984.438 G --5.558<8c8c>4.998 G -4.438(cc)5.558 G -4.998(aa)4.438 G F0 .593(Me gust\ -a creer que virtualmente no hay limites para lo que RRDtool puede hacer\ - con los datos. No v)108 229.2 R .792 -.1(oy a)-.2 H -.15(ex)108 241.2 S -(plicarlo en detalle, pero mira este).15 E/F3 9/Times-Roman@0 SF(GIF:) -2.5 E F1(rrdtool graph speed4.gif)126 258 Q(\\)162 E -(--start 920804400 --end 920808000)144 270 Q(\\)90 E -(--vertical-label km/h)144 282 Q(\\)162 E 78 -(DEF:myspeed=test.rrd:speed:AVERAGE \\)144 294 R -("CDEF:kmh=myspeed,3600,)144 306 Q/F4 10/Symbol SF(*)A F1 138("\\)C 108 -(CDEF:fast=kmh,100,GT,100,0,IF \\)144 318 R 72 -(CDEF:over=kmh,100,GT,kmh,100,-,0,IF \\)144 330 R 108 -(CDEF:good=kmh,100,GT,0,kmh,IF \\)144 342 R -(HRULE:100#0000FF:"Maximum allowed")144 354 Q(\\)84 E -(AREA:good#00FF00:"Good speed")144 366 Q(\\)114 E -(AREA:fast#550000:"Too fast")144 378 Q(\\)126 E -(STACK:over#FF0000:"Over speed")144 390 Q F0 -1.11(Va)108 414 S -(mos a crear una p\341gina)1.11 E F3(HTML)2.5 E F0(simple para v)2.5 E -(er los tres archi)-.15 E -.2(vo)-.25 G(s).2 E F3(GIF:)2.5 E F1 -(Velocidad)126 430.8 Q -(Speed in meters per second)126 442.8 Q -(
)126 454.8 Q -(Speed in kilometers per hour)126 466.8 Q -(
)126 478.8 Q(Traveled too fast?)126 -490.8 Q()126 502.8 Q F0(Gu\341rdalo como `)108 526.8 Q -(`speed.html')-.74 E 2.5('oa)-.74 G(lgo parecido, y e)-2.5 E -(xam\355nalo con un na)-.15 E -2.25 -.15(veg a)-.2 H(dor).15 E(.)-.55 E -.556(Ahora, todo lo que tienes que hacer es medir los datos re)108 543.6 -R .557(gularmente y actualizar la base de datos. Cuando)-.15 F .37 -(quieras v)108 555.6 R .37(erlos, vuelv)-.15 F 2.87(eac)-.15 G .37 -(rear los archi)-2.87 F -.2(vo)-.25 G(s).2 E F3(GIF)2.87 E F0 2.87(ya) -2.87 G(se)-2.87 E .369(g\372rate que se car)-.15 F .369(guen de nue)-.18 -F .769 -.2(vo e)-.25 H 2.869(nt).2 G 2.869(un)-2.869 G -2.25 -.2(av e g) --2.869 H .369(ador \(Nota:).15 F 1.563(presionar el bot\363n de `)108 -567.6 R(`refrescar')-.74 E 4.063('p)-.74 G 1.563 -(uede no ser su\214ciente; en particular)-4.063 F 4.064(,N)-.4 G 1.564 -(etscape tiene un problema al)-4.064 F(respecto, por lo que necesitaras\ - darle al bot\363n mientras presionas la tecla de may\372sculas.)108 -579.6 Q F2 -7.218(AA)108 602.4 S -4.438(cc)7.218 G -3.328(tt)4.438 G --5.558(uu)3.328 G -4.998(aa)5.558 G -2.778(ll)4.998 G -2.778(ii)2.778 G --4.438(zz)2.778 G -4.998(aa)4.438 G -4.438(cc)4.998 G -2.778(ii)4.438 G --4.998(oo)2.778 G -5.558(nn)4.998 G -4.438(ee)5.558 G 7.776 -3.888(ss d) -4.438 H(de)-1.67 E 2.5(ev)-4.438 G -.1(ve)-7.498 G(er)-4.338 E(rd)-4.438 -E(da)-5.558 E(ad)-4.998 E(d)-5.558 E F0 5.434 -1(Ya h)108 619.2 T 3.434 -(emos usado el comando `)1 F(`update')-.74 E 3.433 -('; vimos que recibia uno o m\341s par\341metros en el formato:)-.74 F --.74(``)108 631.2 S(:')-.25 E .912('. P)-.74 F .912 -(ara f)-.15 F .913 -(acilitarte las cosas, puedes obtener la fecha actual colocando `)-.1 F -(`N')-.74 E 3.413('e)-.74 G 3.413(nl)-3.413 G 3.413(af)-3.413 G(echa.) --3.413 E -.8(Ta)108 643.2 S(mbi\351n podr\355as usar la funci\363n `).8 -E(`time')-.74 E 2.5('d)-.74 G 2.5(eP)-2.5 G -(erl para obtenerla. El ejemplo m\341s corto de todo el tutorial :\)) --2.5 E F1(perl -e 'print time, "\\n" ')126 660 Q F0 1.161 -(Ahora, la forma de poner a correr un programa a interv)108 684 R 1.161 -(alos re)-.25 F 1.161(gulares de tiempo depende del sistema de)-.15 F -(operaci\363n. La actualizaci\363n, en pseudo-c\363digo, ser\355a:)108 -696 Q 145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(7)189.84 E EP -%%Page: 8 8 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Courier@0 SF -(Toma el valor, col\363calo en la variable "$speed")126 96 Q -(rrdtool update speed.rrd N:$speed)126 108 Q F0(\(Pero no lo hag)108 132 -Q(as sobre nuestra base de datos de pruebas, que a\372n la v)-.05 E -(amos a usar en otros ejemplos.)-.25 E 1.42(Eso es todo. Ejecutando est\ -e script cada 5 minutos, lo \372nico que tienes que hacer para v)108 -148.8 R 1.42(er los gr\341\214cos)-.15 F .436(actuales es correr los ej\ -emplos anteriores, que tambi\351n puedes poner en un script. Lue)108 -160.8 R .436(go de correrlo, basta)-.15 F(con car)108 172.8 Q -.05(ga) --.18 G 2.5(ri).05 G(nde)-2.5 E(x.html)-.15 E/F2 10/Times-Bold@0 SF --7.218(UU)108 195.6 S -5.558(nn)7.218 G -4.998(aa)5.558 G 7.776 -3.888 -(ss p)4.998 H(pa)-1.67 E(al)-4.998 E(la)-2.778 E(ab)-4.998 E(br)-5.558 E -(ra)-4.438 E(as)-4.998 E 2.5(ss)-3.888 G(so)-6.388 E(ob)-4.998 E(br) --5.558 E -.18(re)-4.438 G(e)-4.258 E/F3 9/Times-Bold@0 SF -5.002(SS)2.5 -G -6.496(NN)5.002 G -8.494(MM)6.496 G -5.497(PP)8.494 G F0 .991(Me imag\ -ino que muy pocas personas ser\341n capaces de obtener en su ordenador \ -datos reales de su coche)108 212.4 R 1.248(cada 5 minutos; los dem\341s\ - nos tendremos que conformar con alg\372n otro contador)108 224.4 R -3.748(.P)-.55 G 1.248(uedes, por ejemplo,)-3.748 F .057(medir la cantid\ -ad de p\341ginas que ha hecho una impresora, cuanto caf\351 has hecho c\ -on la cafetera, el medidor)108 236.4 R .695(del consumo de electricidad\ -, o cualquier otra cosa. Cualquier contador incremental puede monitoriz\ -arse y)108 248.4 R .056 -(gra\214carse con lo que has aprendido hasta ahora. M\341s adelante, v) -108 260.4 R .057(eremos tambi\351n como monitorizar otro tipo)-.15 F -1.814(de v)108 272.4 R 1.814 -(alores, como la temperatura. La mayor\355a usaremos alguna v)-.25 F -1.814(ez un contador que lle)-.15 F 2.113 -.15(ve l)-.25 H 4.313(ac).15 -G 1.813(uenta de)-4.313 F 3.03 -(cuantos octetos \(bytes\) a transferido un dispositi)108 284.4 R 3.43 --.2(vo d)-.25 H 5.53(er).2 G 3.03(ed, as\355 que v)-5.53 F 3.03 -(amos a v)-.25 F 3.03(er como hacer esto.)-.15 F 1.999(Empezaremos desc\ -ribiendo como recoger los datos. Hay quien dir\341 que hay herramientas\ - que pueden)108 296.4 R .688(recoger estos datos por ti. \241Es cierto!\ - Pero, creo que es importante darse cuenta de que no son necesarias.)108 -308.4 R(Cuando tienes que determinar porqu\351 algo no funciona, necesi\ -tas saber c\363mo funciona en primer lug)108 320.4 Q(ar)-.05 E(.)-.55 E -.704(Una herramienta que mencionamos bre)108 337.2 R -.15(ve)-.25 G .704 -(mente al principio del documento es).15 F/F4 9/Times-Roman@0 SF(SNMP) -3.204 E F0(.)A F4(SNMP)3.204 E F0 .704(es una forma)3.204 F 3.03 -(de comunicarse con tus equipos.)108 349.2 R 3.03 -(La herramienta particular que v)8.03 F 3.23 -.1(oy a u)-.2 H 3.03 -(sar m\341s adelante se llama).1 F -.74(``)108 361.2 S(snmpget').74 E -(', y funciona as\355:)-.74 E F1(snmpget dispositivo clave OID)126 378 Q -F0 .619(En `)108 402 R(`dispositi)-.74 E -.2(vo)-.25 G 2.098 -.74('' c) -.2 H .618(olocas el nombre o direcci\363n).74 F F4(IP)3.118 E F0 .618 -(del equipo a monitorizar)3.118 F 3.118(.E)-.55 G 3.118(nc)-3.118 G(la) --3.118 E -.15(ve)-.2 G 3.118(,c).15 G .618(olocas la `)-3.118 F(`cadena) --.74 E 3.147(de caracteres de la comunidad de lectura')108 414 R 3.147 -(', como se le denomina en el mundillo)-.74 F F4(SNMP)5.647 E F0 8.147 -(.M)C(uchos)-8.147 E(dispositi)108 426 Q -.2(vo)-.25 G 3.015(sa).2 G -.515(ceptar\341n `)-3.015 F(`public')-.74 E 3.015('c)-.74 G .514 -(omo cadena por defecto, pero por razones de pri)-3.015 F -.25(va)-.25 G -.514(cidad y se).25 F .514(guridad esta)-.15 F(cla)108 438 Q .3 -.15 -(ve p)-.2 H(uede estar deshabilitada. Consulta la documentaci\363n corr\ -espondiente al dispositi).15 E .4 -.2(vo o p)-.25 H(rograma.).2 E(Lue) -108 454.8 Q(go esta el tercer par\341metro, llamado)-.15 E F4(OID)2.5 E -F0(\(Object IDenti\214er)2.5 E 2.5(,i)-.4 G(denti\214cador de objeto\).) --2.5 E 1.672(Al principio, cuando empiezas a aprender sobre)108 471.6 R -F4(SNMP)4.172 E F0 4.172(,p)C 1.672 -(arece muy confuso. No lo es tanto cuando le)-4.172 F .306 -(hechas una ojeada a los `)108 483.6 R(`)-.74 E F4(MIB)A F0 1.785 -.74 -('' \()D .305 -(Manager Information Base, o Base de Informaci\363n Administrati).74 F --.25(va)-.25 G .305(\). Es un).25 F .464(\341rbol in)108 495.6 R -.15 -(ve)-.4 G .465(rtido que describe los datos, empezando en un nodo ra\ -\355z desde el que parten v).15 F .465(arias ramas.)-.25 F(Cada)5.465 E -1.64(rama termina en otro nodo y puede abrir nue)108 507.6 R -.25(va) --.25 G 4.139(ss).25 G 1.639 -(ub-ramas. Cada rama tiene un nombre, y forman un)-4.139 F .238 -(camino que nos lle)108 519.6 R .738 -.25(va h)-.25 H .238 -(asta el fondo del \341rbol. En este ejemplo, las ramas que v).25 F .238 -(amos a tomar se llaman iso,)-.25 F(or)108 531.6 Q 1.105 -(g, dod, internet, mgmt y mib-2. T)-.18 F 1.104 -(ambi\351n pueden accederse por su n\372mero relati)-.8 F -.2(vo)-.25 G -3.604(;e).2 G 3.604(ne)-3.604 G 1.104(ste caso, estos)-3.604 F -(n\372meros son 1, 3, 6, 1, 2 y 1:)108 543.6 Q F1 -(iso.org.dod.internet.mgmt.mib-2 \(1.3.6.1.2.1\))126 560.4 Q F0 1.493 -(En algunos programas se usa un punto al iniciar el)108 584.4 R F4(OID) -3.994 E F0 3.994(.E)C 1.494 -(sto puede ser confuso; no hay ning\372n punto)-3.994 F .131 -(inicial en la especi\214caci\363n de los)108 596.4 R F4(OID)2.631 E F0 -.131(... sin embar)B .13 -(go, algunos programas usan por defecto un pre\214jo inicial.)-.18 F --.15(Pa)108 608.4 S 1.144(ra indicar la diferencia entre los).15 F F4 -(OID)3.644 E F0(abre)3.644 E 1.145 -(viados \(o sea, a los que se le pondr\341 el pre\214jo inicial\) y los) --.25 F 1.239(completos, estos programas necesitan que los)108 620.4 R F4 -(OID)3.738 E F0 1.238(completos empiecen por un punto. P)3.738 F 1.238 -(ara empeorar las)-.15 F(cosas, se usan v)108 632.4 Q -(arios pre\214jos distintos...)-.25 E 1.927(De acuerdo, sig)108 649.2 R -1.928(amos con el inicio de nuestro)-.05 F F4(OID:)4.428 E F0 1.928 -(ten\355amos 1.3.6.1.2.1 . Ahora, nos interesa la rama)4.428 F -.74(``) -108 661.2 S(interf).74 E(aces')-.1 E(', que tiene el n\372mero dos \(o \ -sea, 1.3.6.1.2.1.2, o 1.3.6.1.2.1.interf)-.74 E(aces\).)-.1 E .303 -(Lo primero es hacernos con un programa)108 678 R F4(SNMP)2.802 E F0 -2.802(.B)C .302 -(usca alg\372n paquete pre-compilado para tu plataforma, si)-2.802 F -1.531(no, puedes b)108 690 R 1.531(uscar el c\363digo fuente y compilar\ -lo tu mismo. En Internet encontrar\341s muchos programas,)-.2 F 1.521 -(b\372scalos con un motor de b\372squeda o como pre\214eras.)108 702 R -1.521(Mi sugerencia es que b)6.521 F 1.52(usques el paquete)-.2 F F4 -(CMU-)4.02 E(SNMP)108 714 Q F0 2.5(,q)C(ue esta bastante difundido.)-2.5 -E 145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(8)189.84 E EP -%%Page: 9 9 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F 1.582(Asumamos que ya tienes el programa. Empe\ -cemos por tomar ciertos datos que est\341n disponibles en la)108 96 R -(mayor\355a de los sistemas. Recuerda: hay un nombre abre)108 108 Q -(viado para la parte del \341rbol que m\341s nos interesa.)-.25 E -.02 --1.29(Vo y)108 124.8 T 3.816(au)5.106 G 1.316(sar la v)-3.816 F 1.316 -(ersi\363n corta, ya que creo que este documento ya es lo bastante lar) --.15 F 1.315(go. Si no te funciona,)-.18 F 1.301 -(a\361\341dele el pre\214jo .1.3.6.1.2.1 y prueba de nue)108 136.8 R -.2 -(vo)-.25 G 3.802(.Op).2 G 1.302(rueba le)-3.802 F 1.302 -(yendo el manual; s\341ltate las partes que no)-.15 F -(entiendas a\372n, y b)108 148.8 Q -(usca las secciones que hablan de como arrancar y usar el programa.)-.2 -E/F1 10/Courier@0 SF(snmpget myrouter public system.sysdescr.0)126 165.6 -Q F0 .773(El dispositi)108 189.6 R 1.173 -.2(vo d)-.25 H .772 -(eber\341 contestarte con una descripci\363n, probablemente v).2 F .772 -(ac\355a, de s\355 mismo. Si no consigues)-.25 F 2.522 -(una respuesta v\341lida, prueba con otra `)108 201.6 R(`cla)-.74 E -.15 -(ve)-.2 G 4.003 -.74('' u o).15 H 2.523(tro dispositi).74 F -.2(vo)-.25 -G 5.023(;n).2 G 5.023(op)-5.023 G 2.523(odemos se)-5.023 F 2.523 -(guir hasta tener un)-.15 F(resultado.)108 213.6 Q F1 -(snmpget myrouter public interfaces.ifnumber.0)126 230.4 Q F0 2.437(Con\ - suerte, usando este comando obtendr\341s un n\372mero como resultado: \ -el n\372mero de interf)108 254.4 R 2.437(aces del)-.1 F(dispositi)108 -266.4 Q -.2(vo)-.25 G 2.5(.S).2 G 2.5(ie)-2.5 G 2.5(sa)-2.5 G(s\355, se) --2.5 E(guiremos adelante con otro programa, llamado `)-.15 E(`snmpw)-.74 -E(alk')-.1 E(')-.74 E F1 -(snmpwalk myrouter public interfaces.iftable.ifentry.ifdescr)126 283.2 Q -F0(Si obtienes una lista de interf)108 307.2 Q(aces, ya casi hemos lle) --.1 E -.05(ga)-.15 G(do. Aqu\355 tienes un ejemplo del resultado:).05 E -F1([user@host /home/alex]$ snmpwalk cisco public 2.2.1.2)126 324 Q -(interfaces.ifTable.ifEntry.ifDescr.1 = "BRI0: B-Channel 1")126 336 Q -(interfaces.ifTable.ifEntry.ifDescr.2 = "BRI0: B-Channel 2")126 348 Q -(interfaces.ifTable.ifEntry.ifDescr.3 = "BRI0" Hex: 42 52 49 30)126 360 -Q(interfaces.ifTable.ifEntry.ifDescr.4 = "Ethernet0")126 372 Q -(interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0")126 384 Q F0 -(En este equipo)108 408 Q/F2 9/Times-Roman@0 SF(CISCO)2.5 E F0 2.5(,q)C -(uiero monitorizar la interf)-2.5 E(az `)-.1 E(`Ethernet0')-.74 E 2.5 -('. V)-.74 F(iendo que es la cuarta, pruebo con:)-.6 E F1 -([user@host /home/alex]$ snmpget cisco public 2.2.1.10.4 2.2.1.16.4)126 -424.8 Q(interfaces.ifTable.ifEntry.ifInOctets.4 = 2290729126)126 448.8 Q -(interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519)126 460.8 Q F0 -(Entonces, tengo 2 OIDs que monitorizar)108 484.8 Q 2.5(,ys)-.4 G -(on \(en el formato lar)-2.5 E(go, ahora\):)-.18 E F1 -(1.3.6.1.2.1.2.2.1.10)126 501.6 Q(y)156 525.6 Q(1.3.6.1.2.1.2.2.1.16)126 -549.6 Q F0 2.5(,a)108 573.6 S(mbas con el n\372mero de interf)-2.5 E -(az de 4)-.1 E .183(No te eng)108 590.4 R .183(a\361es, esto no lo logr\ -e yo al primer intento. Me tom\363 un tiempo entender lo que signi\214c\ -aban todos)-.05 F .9 -(estos n\372meros; ayuda cuando se traducen en un te)108 602.4 R .899 -(xto descripti)-.15 F -.2(vo)-.25 G .899(... por lo menos, cuando oig).2 -F .899(as hablar de)-.05 F .527(MIBs y OIDs, ahora sabr\341s de qu\351 \ -se trata. No te olvides del n\372mero de interf)108 614.4 R .527 -(az \(0 si el v)-.1 F .527(alor no depende)-.25 F(de una interf)108 -626.4 Q(az\), y prueba con snmpw)-.1 E -(alk si no obtienes una respuesta clara con snmpget.)-.1 E .468 -(Si entendiste todo esto, y obtienes resultados del dispositi)108 643.2 -R .868 -.2(vo c)-.25 H .468 -(on el que est\341s probando, sigue adelante con).2 F -(el tutorial. Si no, vuelv)108 655.2 Q 2.5(eal)-.15 G -(eer esta secci\363n; es importante)-2.5 E 145.68(2001-02-11 Last)72 768 -R(change: 1.0.28)2.5 E(9)189.84 E EP -%%Page: 10 10 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Times-Bold@0 SF -7.218(UU)108 96 S 11.116 --5.558(nn e)7.218 H(ej)1.12 E(je)-3.328 E(em)-4.438 E(mp)-8.328 E(pl) --5.558 E(lo)-2.778 E 2.5(or)-4.998 G -.18(re)-6.938 G(ea)-4.258 E(al) --4.998 E(l)-2.778 E F0 2.088(Ok, empecemos con la di)108 112.8 R -.15 -(ve)-.25 G 2.088(rsi\363n. Primero, crea una base de datos nue).15 F --.25(va)-.25 G 4.588(.V).25 G 2.089(amos a guardar en ella 2)-5.698 F -.568(contadores, `)108 124.8 R(`input')-.74 E 3.068('y`)-.74 G(`ouput') --3.808 E .568('. Los datos los v)-.74 F .568(amos a guardar en archi) --.25 F -.2(vo)-.25 G 3.068(sq).2 G .568(ue los promediar\341n, tomando) --3.068 F .617(grupos de 1, 6, 24 o 288 muestras. T)108 136.8 R .617 -(ambi\351n archi)-.8 F -.25(va)-.25 G .617(remos los v).25 F .617 -(alores m\341ximos. Lo e)-.25 F .617(xplicaremos con m\341s)-.15 F -(detalle despu\351s. El interv)108 148.8 Q -(alo de tiempo entre las muestras ser\341 de 300 se)-.25 E -(gundos \(5 minutos\).)-.15 E/F2 10/Courier@0 SF 6(1m)114 165.6 S -(uestra "promediada" sigue siendo 1 muestra cada 5 minutos)-6 E 6(6m)114 -177.6 S(uestras promediadas son un promedio de cada 30 minutos)-6 E -(24 muestras promediadas son un promedio de cada 2 horas)114 189.6 Q -(288 muestras promediadas son un promedio de cada d\355a)114 201.6 Q F0 --1.11(Va)108 225.6 S(mos a tratar de ser compatibles con)1.11 E/F3 9 -/Times-Roman@0 SF(MR)2.5 E(TG)-.54 E F0 2.5(,q)C -(ue guarda m\341s o menos esta cantidad de datos:)-2.5 E F2 -(600 muestras de 5 minutos:)114 242.4 Q 6(2d)60 G(\355as y 2 horas)-6 E -(600 promedios de 30 minutos:)114 254.4 Q(12.5 d\355as)48 E -(600 promedios de 2 horas:)114 266.4 Q(50 d\355as)66 E -(600 promedios de 1 d\355a:)114 278.4 Q(732 d\355as)78 E F0 .769(Uniend\ -o todos estos rangos tenemos que en total guardamos datos de unos 797 d\ -\355as. RRDtool guarda los)108 302.4 R .624 -(datos de una forma distinta a)108 314.4 R F3(MR)3.124 E(TG)-.54 E F0 -3.124(;n)C 3.124(oe)-3.124 G .624(mpieza el archi)-3.124 F 1.024 -.2 -(vo `)-.25 H(`semanal')-.54 E 3.124('d)-.74 G .624(onde acaba el `) --3.124 F(`diario')-.74 E .624(', sino que)-.74 F .202(ambos archi)108 -326.4 R -.2(vo)-.25 G 2.702(sc).2 G .201(ontienen la informaci\363n m\ -\341s reciente, \241por lo que con RRDtool archi)-2.702 F -.25(va)-.25 G -.201(mos m\341s datos que).25 F(con)108 338.4 Q F3(MR)2.5 E(TG)-.54 E F0 -(!)A(Necesitaremos:)108 355.2 Q F2(600 muestras de 5 minutos)114 372 Q -(\(2 d\355as y 2 horas\))24 E(700 entradas de 30 minutos)114 384 Q -(\(2 d\355as y 2 horas, m\341s 12.5 d\355as\))18 E -(775 entradas de 2 horas)114 396 Q(\(lo anterior + 50 d\355as\))36 E -(797 entradas de 1 d\355a)114 408 Q -(\(lo anterior + 732 d\355as, redondeando\))48 E -(rrdtool create myrouter.rrd)126 432 Q(\\)54 E 12 -(DS:input:COUNTER:600:U:U \\)180 444 R 6(DS:output:COUNTER:600:U:U \\) -180 456 R 30(RRA:AVERAGE:0.5:1:600 \\)180 468 R 30 -(RRA:AVERAGE:0.5:6:700 \\)180 480 R 24(RRA:AVERAGE:0.5:24:775 \\)180 492 -R 18(RRA:AVERAGE:0.5:288:797 \\)180 504 R 54(RRA:MAX:0.5:1:600 \\)180 -516 R 54(RRA:MAX:0.5:6:700 \\)180 528 R 48(RRA:MAX:0.5:24:775 \\)180 540 -R(RRA:MAX:0.5:288:797)180 552 Q F0 .269(Lo siguiente es recoger los dat\ -os y guardarlos, como en el ejemplo siguiente. Esta parcialmente en pse\ -udo-)108 576 R(c\363digo, por lo que tendr\341s que b)108 588 Q(uscar e) --.2 E(xactamente como hacerlo funcionar en tu sistema operati)-.15 E -.2 -(vo)-.25 G(.).2 E 145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E -(10)184.84 E EP -%%Page: 11 11 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Courier@0 SF -(mientras no sea el fin del universo)126 96 Q(hacer)126 108 Q -(tomar el resultado de)144 120 Q(snmpget router community 2.2.1.10.4)168 -132 Q(en la variable $in)144 144 Q(tomar el resultado de)144 156 Q -(snmpget router community 2.2.1.16.4)168 168 Q(en la variable $out)144 -180 Q(rrdtool update myrouter.rrd N:$in:$out)144 192 Q -(esperar 5 minutos)144 204 Q(hecho)126 216 Q F0(Lue)108 240 Q -(go, tras recoger datos por un d\355a, crea una imagen, usando:)-.15 E -F1(rrdtool graph myrouter-day.gif --start -86400 \\)126 256.8 Q -(DEF:inoctets=myrouter.rrd:input:AVERAGE \\)180 268.8 Q -(DEF:outoctets=myrouter.rrd:output:AVERAGE \\)180 280.8 Q -(AREA:inoctets#00FF00:"In traffic" \\)180 292.8 Q -(LINE1:outoctets#0000FF:"Out traffic")180 304.8 Q F0 1.541(Este comando\ - debe producir un gr\341\214co del tr\341\214co del d\355a. Un d\355a s\ -on 24 horas, de 60 minutos, de 60)108 328.8 R(se)108 340.8 Q .523 -(gundos: 24)-.15 F/F2 10/Symbol SF(*)A F0(60)A F2(*)A F0 .524 -(60=86400, o sea que empezamos a `)B(`ahora')-.74 E 3.024('m)-.74 G .524 -(enos 86400 se)-3.024 F .524(gundos. De\214nimos \(con los)-.15 F .273 -(DEFs\) `)108 352.8 R(`inoctets')-.74 E 2.773('y`)-.74 G(`outoctets') --3.513 E 2.773('c)-.74 G .273(omo los v)-2.773 F .273 -(alores promedio de la base da datos myrouter)-.25 F .272(.rrd, dib)-.55 -F .272(ujando un)-.2 F(\341rea para el tr\341\214co de entrada y una l\ -\355nea para el tr\341\214co de salida.)108 364.8 Q 2.098(Mira la image\ -n y sigue recogiendo datos por unos cuantos d\355as. Si lo deseas, pued\ -es probar con los)108 381.6 R -(ejemplos de la base de datos de pruebas y v)108 393.6 Q -(er si puedes hacer trabajar las di)-.15 E -.15(ve)-.25 G -(rsas opciones y operaciones.).15 E(Sugerencia:)108 410.4 Q 1.937 -(Haz un gr\341\214co que muestre el tr\341\214co en bytes por se)108 -427.2 R 1.937(gundo y en bits por se)-.15 F 1.937 -(gundo. Colorea el tr\341\214co)-.15 F -(Ethernet rojo si sobrepasa los cuatro me)108 439.2 Q -.05(ga)-.15 G -(bits por se).05 E(gundo.)-.15 E/F3 10/Times-Bold@0 SF -6.108(FF)108 462 -S -5.558(uu)6.108 G -5.558(nn)5.558 G -4.438(cc)5.558 G -2.778(ii)4.438 -G -4.998(oo)2.778 G -5.558(nn)4.998 G -4.438(ee)5.558 G 7.776 -3.888 -(ss d)4.438 H(de)-1.67 E 2.5(ec)-4.438 G(co)-6.938 E(on)-4.998 E(ns) --5.558 E(so)-3.888 E(ol)-4.998 E(li)-2.778 E(id)-2.778 E(da)-5.558 E(ac) --4.998 E(ci)-4.438 E<69f3>-2.778 E-4.998 E(n)-5.558 E F0 2.295(Un\ -os cuantos p\341rrafos atr\341s habl\341bamos sobre la posibilidad de g\ -uardar el v)108 478.8 R 2.296(alor m\341ximo en v)-.25 F 2.296(ez del) --.15 F(promedio. Profundicemos un poco en este tema.)108 490.8 Q .307 -(Recordemos lo que habl\341bamos sobre la v)108 507.6 R .307 -(elocidad de un coche.)-.15 F(Supong)5.307 E .306 -(amos que manejamos a 144)-.05 F/F4 9/Times-Roman@0 SF(KM/H)2.806 E F0 -.483(durante 5 minutos y lue)108 519.6 R .484(go nos detiene la polic\ -\355a durante unos 25 minutos. Al \214nalizar el re)-.15 F -.05(ga)-.15 -G .484(\361o, tomamos).05 F .979(nuestro port\341til y creamos una imag\ -en desde nuestra base de datos. Si visualizamos la se)108 531.6 R(gunda) --.15 E F4(RRA)3.478 E F0(que)3.478 E .372 -(creamos, tendremos el promedio de 6 muestreos. Las v)108 543.6 R .372 -(elocidades re)-.15 F .372(gistradas serian 144+0+0+0+0+0=144,)-.15 F -.56(lo que en promedio nos da una v)108 555.6 R .56(elocidad de 24)-.15 -F F4(KM/H)3.06 E F0 .559 -(., con lo que nos igual nos pondr\355an una multa, s\363lo)B -(que no por e)108 567.6 Q(xceso de v)-.15 E(elocidad.)-.15 E(Ob)108 -584.4 Q .571(viamente, en este caso, no deber\355amos tomar en cuenta l\ -os promedios. Estos son \372tiles en v)-.15 F .571(arios casos.)-.25 F -.552(Por ejemplo, si queremos v)108 596.4 R .552(er cuantos)-.15 F F4 -(KM)3.052 E F0 .552(hemos viajado, este ser\355a el gr\341\214co m\341s\ - indicado. Pero por otro)3.052 F(lado, para v)108 608.4 Q(er la v)-.15 E -(elocidad ha la que hemos viajado, los v)-.15 E -(alores m\341ximos son m\341s adecuados.)-.25 E .159(Es lo mismo con lo\ -s datos que recogemos. Si quieres saber la cantidad total, mira los pro\ -medios. Si quieres)108 625.2 R -.15(ve)108 637.2 S 4.087(rl).15 G 4.087 -(av)-4.087 G 1.587(elocidad, mira los m\341ximos. Con el tiempo, ambas \ -cantidades se separan cada v)-4.237 F 1.586(ez m\341s.)-.15 F 1.586 -(En la)6.586 F .536 -(\372ltima base de datos que creamos, hab\355a dos archi)108 649.2 R -.2 -(vo)-.25 G 3.037(sq).2 G .537 -(ue guardaban los datos de cada d\355a. El archi)-3.037 F .937 -.2(vo q) --.25 H(ue).2 E .348(guarda los promedios mostrar\341 v)108 661.2 R .348 -(alores bajos, mientras que el de m\341ximos mostrar\341 v)-.25 F .348 -(alores m\341s altos. P)-.25 F(ara)-.15 E .44(mi coche, mostrar\355a v) -108 673.2 R .44(alores promedio de 96/24=4)-.25 F F4(KM/H)2.94 E F0 .44 -(\(viajo unos 96 kil\363metros por d\355a\), y m\341ximos de)2.94 F -(1220)108 685.2 Q F4(KM/H)2.5 E F0(\(la v)2.5 E -(elocidad m\341xima que alcanzo cada d\355a\))-.15 E 1.285(Como v)108 -702 R 1.285(es, una gran diferencia. No mires el se)-.15 F 1.284 -(gundo gr\341\214co para estimar la distancia que recorro, ni al)-.15 F -.64(primero para estimar la v)108 714 R .64(elocidad a la que v)-.15 F --.1(oy)-.2 G 3.14(.E)-.55 G .64 -(sto s\363lo funciona con muestras muy cercanas, pero no si)-3.14 F -(sacas promedios.)108 726 Q 145.68(2001-02-11 Last)72 774 R -(change: 1.0.28)2.5 E(11)184.84 E EP -%%Page: 12 12 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F .976(Algunas v)108 96 R .976 -(eces, hago un viaje lar)-.15 F .975 -(go. Si hago un recorrido por Europa, conduciendo por unas 12 horas, el) --.18 F .159(primer gr\341\214co subir\341 a unos 60)108 108 R/F1 9 -/Times-Roman@0 SF(KM/H)2.659 E F0 2.659(.E)C 2.659(ls)-2.659 G -.15(eg) --2.659 G .159(undo mostrar\341 unos 180).15 F F1(KM/H)2.659 E F0 2.659 -(.E)C .159(sto signi\214ca que recorr\355 unos)-2.659 F(60)108 120 Q F1 -(KM/H)2.805 E F0 .304(por 24 horas = 1440)2.805 F F1(KM)2.804 E F0 2.804 -(.M)C .304(uestra adem\341s que fui a una v)-2.804 F .304 -(elocidad promedio mayor a la normal y)-.15 F 2.8(au)108 132 S 2.8(nm) --2.8 G .3(\341ximo de 180)-2.8 F F1(KM/H)2.8 E F0 2.8<2ca1>C .3 -(no que fui 8 horas a una v)-2.8 F .3(elocidad \214ja de 180)-.15 F F1 -(KM/H)2.8 E F0 2.8(!E)C .3(ste es un ejemplo real:)-2.8 F 1.877 -(tengo que se)108 144 R 1.877 -(guir la corriente en las autopistas de Alemania, detenerme por g)-.15 F -1.876(asolina y caf\351 de v)-.05 F 1.876(ez en)-.15 F .84(cuando, mane\ -jar m\341s lentamente por Austria y Holanda, e ir con cuidado en las mo\ -nta\361as y las villas. Si)108 156 R 2.666(vi\351ramos los gr\341\214co\ -s de los promedios de cada 5 minutos, la imagen ser\355a completamente \ -distinta;)108 168 R -.15(ve)108 180 S .682(r\355amos los mismos v).15 F -.683(alores de promedio y de m\341xima. \(suponiendo que las mediciones\ - fueran cada 300)-.25 F(se)108 192 Q 2.216(gundos\). Se podr\355a v)-.15 -F 2.216(er cuando par\351, cuando iba en primera, cuando iba por las au\ -topistas, etc. La)-.15 F .086(granularidad de los datos es m\341s alta,\ - por lo que se tiene m\341s informaci\363n. Sin embar)108 204 R .086 -(go, esto nos lle)-.18 F .586 -.25(va u)-.25 H(nas).25 E .716(12 muestr\ -as por hora, o 288 al d\355a, lo cual es mucho para guardar por un peri\ -odo de tiempo lar)108 216 R .715(go. Por lo)-.18 F 1.705 -(tanto, sacamos el promedio, guardando e)108 228 R -.15(ve)-.25 G 1.705 -(ntualmente un solo v).15 F 1.705(alor por d\355a.)-.25 F 1.706 -(Con este \372nico v)6.706 F(alor)-.25 E 4.206(,n)-.4 G(o)-4.206 E -(podemos v)108 240 Q(er mucho.)-.15 E 1.145 -(Es importante comprender lo que e)108 256.8 R 1.145 -(xpuesto en estos \372ltimos p\341rrafos.)-.15 F 1.145 -(Unos ejes y unas l\355neas no tienen)6.145 F 2.962(ning\372n v)108 -268.8 R 2.963(alor por si mismos; hay que saber que representan e inter\ -pretar correctamente los v)-.25 F(alores)-.25 E -(obtenidos. Sean cuales sean los datos, esto siempre ser\341 cierto.)108 -280.8 Q .002(El mayor error que puedes cometer es usar los datos recogi\ -dos para algo para lo cual no sirv)108 297.6 R .002(en. En ese caso,) --.15 F(seria hasta mejor no tener gr\341\214co alguno.)108 309.6 Q/F2 10 -/Times-Bold@0 SF -7.218(RR)108 332.4 S -4.438(ee)7.218 G -5.558(pp)4.438 -G -4.998(aa)5.558 G -3.888(ss)4.998 G -4.438(ee)3.888 G -8.328(mm)4.438 -G -4.998(oo)8.328 G 7.776 -3.888(ss l)4.998 H(lo)1.11 E 2.5(oq)-4.998 G -(qu)-8.058 E(ue)-5.558 E 2.5(es)-4.438 G(sa)-6.388 E(ab)-4.998 E(be) --5.558 E(em)-4.438 E(mo)-8.328 E(os)-4.998 E(s)-3.888 E F0 .051 -(Ahora ya sabes como crear una base de datos. Puedes guardar v)108 349.2 -R .051(alores en ella, e)-.25 F .052(xtraerlos creando un gr\341\214co,) --.15 F .606(hacer operaciones matem\341ticas con ellos desde la base de\ - datos y visualizar los resultados de estas en v)108 361.2 R(ez)-.15 E -.025(de los datos originales. V)108 373.2 R .026(imos la diferencia ent\ -re los promedios y los m\341ximos y cuando debemos usar cada)-.6 F -(uno \(o al menos una idea de ello\))108 385.2 Q .718(RRDtool puede hac\ -er m\341s de lo que hemos visto hasta ahora. Pero antes de continuar)108 -402 R 3.217(,t)-.4 G 3.217(er)-3.217 G .717(ecomiendo que)-3.217 F .496 -(releas el te)108 414 R .497(xto desde el principio y pruebes a hacerle\ - algunas modi\214caciones a los ejemplos.)-.15 F(Ase)5.497 E .497 -(g\372rate de)-.15 F .986(entenderlo todo. El esfuerzo v)108 426 R .985 -(aldr\341 la pena, y te ayudar\341, no s\363lo con el resto del documen\ -to, sino en tu)-.25 F(trabajo diario de monitorizaci\363n, mucho despu\ -\351s de terminar con esta introducci\363n.)108 438 Q F2 10.656 -6.668 -(TT i)108 460.8 T(ip)3.89 E(po)-5.558 E(os)-4.998 E 2.5(sd)-3.888 G(de) --8.058 E 2.5(ef)-4.438 G(fu)-5.828 E(ue)-5.558 E(en)-4.438 E(nt)-5.558 E -(te)-3.328 E(es)-4.438 E 2.5(sd)-3.888 G(de)-8.058 E 2.5(ed)-4.438 G(da) --8.058 E(at)-4.998 E(to)-3.328 E(os)-4.998 E(s)-3.888 E F0 1.668 -(De acuerdo, quieres continuar)108 477.6 R 4.169(.B)-.55 G(ien)-4.169 E --.15(ve)-.4 G 1.669(nido de vuelta otra v).15 F 1.669 -(ez y prep\341rate; v)-.15 F 1.869 -.1(oy a i)-.2 H 4.169(rm).1 G 1.669 -(\341s r\341pido con los)-4.169 F(ejemplos y e)108 489.6 Q -(xplicaciones.)-.15 E 2.476 -1(Ya v)108 506.4 T .476(imos que, para v)1 -F .476(er el cambio de un contador a lo lar)-.15 F .475 -(go del tiempo, tenemos que tomar dos n\372meros y)-.18 F(di)108 518.4 Q -.137(vidir la diferencia entre el tiempo transcurrido entre las medicio\ -nes. P)-.25 F .137(ara los ejemplos que hemos visto es)-.15 F .946(lo l\ -\363gico, pero hay otras posibilidades. Por ejemplo, mi enrutador me pu\ -ede dar la temperatura actual en)108 530.4 R .069 -(tres puntos distintos, la entrada de aire, el llamado `)108 542.4 R -.069(`punto caliente')-.74 F 2.569('yl)-.74 G 2.569(as)-2.569 G .069 -(alida de v)-2.569 F .069(entilaci\363n. Estos v)-.15 F(alores)-.25 E -.073(no son contadores; si tomo los v)108 554.4 R .072 -(alores de dos muestreos y lo di)-.25 F .072(vido entre 300 se)-.25 F -.072(gundos, obtendr\351 el cambio)-.15 F 3.279(de temperatura por se) -108 566.4 R 3.279(gundo. \241Esperemos que sea cero, o tendr\355amos un\ - incendio en el cuarto de)-.15 F(ordenadores! :\))108 578.4 Q .71 -(Entonces, \277que hacemos? Podemos decirle a RRDtool que guarde los v) -108 595.2 R .709(alores tal como los medimos \(esto)-.25 F 1.407 -(no es e)108 607.2 R 1.407 -(xactamente as\355, pero se aproxima bastante a la v)-.15 F 1.408 -(erdad\). As\355, los gr\341\214cos se v)-.15 F 1.408 -(er\341n mucho mejor)-.15 F(.)-.55 E .577(Puedo v)108 619.2 R .577(er c\ -uando el enrutador est\341 trabajando m\341s \(en serio, funciona; como\ - usa m\341s electricidad, genera)-.15 F 1.791(m\341s calor y sube la te\ -mperatura\), puedo saber cuando me he dejado las puertas abiertas \(el \ -cuarto de)108 631.2 R .306(ordenadores tiene aire acondicionado; con la\ -s puertas abiertas el aire caliente del resto del edi\214cion entra y) -108 643.2 R .246(sube la temperatura en la entrada de aire del enrutado\ -r\), etc. Antes usamos un tipo de datos de `)108 655.2 R(`contador')-.74 -E(',)-.74 E -(ahora usaremos un tipo de datos diferente, con un nombre diferente,)108 -667.2 Q F1(GA)2.5 E(UGE)-.495 E F0 5(.T)C(enemos otros tipos:)-5.7 E/F3 -10/Courier@0 SF 6(-C)114 684 S(OUNTER este ya lo conocemos)-6 E 6(-G)114 -696 S 12(AUGE este)-6 F(acabamos de verlo)6 E 6(-D)114 708 S(ERIVE)-6 E -6(-A)114 720 S(BSOLUTE)-6 E F0 145.68(2001-02-11 Last)72 768 R -(change: 1.0.28)2.5 E(12)184.84 E EP -%%Page: 13 13 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F 1.373(Los otros dos tipos son)108 96 R/F1 9 -/Times-Roman@0 SF(DERIVE)3.873 E F0(y)3.873 E F1(ABSOLUTE)3.873 E F0(.)A -F1(ABSOLUTE)3.873 E F0 1.373(puede usarse igual que)3.873 F F1(COUNTER) -3.872 E F0 3.872(,c)C 1.372(on una)-3.872 F 1.098 -(diferencia; RRDtool asume que el contador se reinicia cada v)108 108 R -1.098(ez que se lee. O en otras palabras; el delta)-.15 F .53 -(entre los v)108 120 R .53 -(alores no hay que calcularlo, mientras que con)-.25 F F1(COUNTER)3.029 -E F0 .529(RRDtool tiene que sacar \351l la cuenta.)3.029 F 2.961(Por ej\ -emplo, nuestro primer ejemplo, \(12345, 12357, 12363, 12363\), ser\355a\ - \(unkno)108 132 R 2.962(wn, 12, 6, 0\) en)-.25 F F1(ABSOLUTE)108 144 Q -F0 5.321(.E)C 2.821(lo)-5.321 G .32(tro tipo,)-2.821 F F1(DERIVE)2.82 E -F0 2.82(,e)C 2.82(sc)-2.82 G(omo)-2.82 E F1(COUNTER)2.82 E F0 2.82(,p)C -.32(ero al contrario de)-2.82 F F1(COUNTER)2.82 E F0 2.82(,e)C .32 -(ste v)-2.82 F .32(alor tambi\351n)-.25 F(puede decrecer)108 156 Q 2.5 -(,p)-.4 G(or lo que puede tenerse un delta ne)-2.5 E -.05(ga)-.15 G(ti) -.05 E -.2(vo)-.25 G(.).2 E -1.11(Va)108 172.8 S(mos a probarlos todos:) -1.11 E/F2 10/Courier@0 SF(rrdtool create all.rrd --start 978300900 \\) -126 189.6 Q(DS:a:COUNTER:600:U:U \\)180 201.6 Q(DS:b:GAUGE:600:U:U \\) -180 213.6 Q(DS:c:DERIVE:600:U:U \\)180 225.6 Q(DS:d:ABSOLUTE:600:U:U \\) -180 237.6 Q(RRA:AVERAGE:0.5:1:10)180 249.6 Q(rrdtool update all.rrd \\) -126 261.6 Q 18(978301200:300:1:600:300 \\)180 273.6 R 12 -(978301500:600:3:1200:600 \\)180 285.6 R 12(978301800:900:5:1800:900 \\) -180 297.6 R(978302100:1200:3:2400:1200 \\)180 309.6 Q -(978302400:1500:1:2400:1500 \\)180 321.6 Q -(978302700:1800:2:1800:1800 \\)180 333.6 Q 18 -(978303000:2100:4:0:2100 \\)180 345.6 R 6(978303300:2400:6:600:2400 \\) -180 357.6 R 6(978303600:2700:4:600:2700 \\)180 369.6 R -(978303900:3000:2:1200:3000)180 381.6 Q -(rrdtool graph all1.gif -s 978300600 -e 978304200 -h 400 \\)126 393.6 Q -(DEF:linea=all.rrd:a:AVERAGE LINE3:linea#FF0000:"Line A" \\)180 405.6 Q -(DEF:lineb=all.rrd:b:AVERAGE LINE3:lineb#00FF00:"Line B" \\)180 417.6 Q -(DEF:linec=all.rrd:c:AVERAGE LINE3:linec#0000FF:"Line C" \\)180 429.6 Q -(DEF:lined=all.rrd:d:AVERAGE LINE3:lined#000000:"Line D")180 441.6 Q/F3 -10/Times-Bold@0 SF -7.218(RR)108 476.4 S -7.218(RR)7.218 G -7.218(DD) -7.218 G -3.328(tt)7.218 G -4.998(oo)3.328 G -4.998(oo)4.998 G 5.556 --2.778(ll b)4.998 H(ba)-2.78 E(aj)-4.998 E(jo)-3.328 E 2.5(oe)-4.998 G -(el)-6.938 E 2.5(lm)-2.778 G(mi)-10.828 E(ic)-2.778 E(cr)-4.438 E -.18 -(ro)-4.438 G(os)-4.818 E(sc)-3.888 E(co)-4.438 E(op)-4.998 E(pi)-5.558 E -(io)-2.778 E(o)-4.998 E F0 16.5<834c>108 493.2 S 2.707(al)-16.5 G .207 -(\355nea A es un contador)-2.707 F 2.707(,p)-.4 G .208(or lo que debe i\ -ncrementarse continuamente y RRDtool tiene que calcular)-2.707 F 1.696 -(las diferencias. Adem\341s RRDtool tiene que di)128 505.2 R 1.695 -(vidir la diferencia entre el tiempo transcurrido. Esto)-.25 F(deber\ -\355a terminar con una l\355nea recta en 1 \(los deltas son 300, y los \ -interv)128 517.2 Q(alos son de 300\))-.25 E 16.5<834c>108 534 S 2.632 -(al)-16.5 G .132(\355nea B es de tipo)-2.632 F F1(GA)2.632 E(UGE)-.495 E -F0 2.632(.E)C .132(stos son los v)-2.632 F .132(alores `)-.25 F -(`reales')-.74 E .133 -(', as\355 que el gr\341\214co debe mostrar lo mismo)-.74 F(que los v) -128 546 Q(alores que introducimos: una especie de onda)-.25 E 16.5<834c> -108 562.8 S 3.362(al)-16.5 G .862(\355nea C es de tipo)-3.362 F F1 -(DERIVE)3.362 E F0 3.362(.E)C 3.362(su)-3.362 G 3.362(nc)-3.362 G -(ontador)-3.362 E 3.362(,yp)-.4 G .862(uede decrecer)-3.362 F 3.362(.V) --.55 G 3.362(ae)-4.472 G .861(ntre 2400 y 0, con 1800 en el)-3.362 F -(medio.)128 574.8 Q 16.5<834c>108 591.6 S 2.592(al)-16.5 G .092 -(\355nea D es de tipo)-2.592 F F1(ABSOLUTE)2.592 E F0 2.592(.E)C .092 -(sto es, es un contador pero no hay que calcular las diferencias. Los) --2.592 F(n\372meros son iguales a la l\355nea A, y espero que puedas v) -128 603.6 Q(er la diferencia en los gr\341\214cos.)-.15 E 1.048 -(Esto equi)108 620.4 R -.25(va)-.25 G 1.047(le a los v).25 F 1.047(alor\ -es siguientes, empezando a las 23:10 y terminando a las 00:10 \(las U s\ -igni\214can)-.25 F(desconocido\).)108 632.4 Q F2 6(-L)114 649.2 S 6 -(\355nea A: u u 1 1 1 1 1 1 1 1 1 u)-6 F 6(-L)114 661.2 S 6 -(\355nea B: u 1 3 5 3 1 2 4 6 4 2 u)-6 F 6(-L)114 673.2 S 6 -(\355nea C: u u 2 2 2 0)-6 F(-2 -6)6 E 12(202u)12 G 6(-L)114 685.2 S 6 -(\355nea D: u 1 2 3 4 5 6 7 8 9)-6 F 6(10 u)6 F F0 2.218(Si tu archi)108 -709.2 R -.2(vo)-.25 G F1(GIF)4.918 E F0 2.219(muestra todo esto, has en\ -trado los datos correctamente, tu programa RRDtool est\341)4.718 F .998 -(funcionando bien, el visor de gr\341\214cos no te eng)108 721.2 R .997 -(a\361a y hemos entrado en el 2000 sin problemas :\) Puedes)-.05 F -145.68(2001-02-11 Last)72 769.2 R(change: 1.0.28)2.5 E(13)184.84 E EP -%%Page: 14 14 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F(probar el mismo ejemplo cuatro v)108 96 Q -(eces, una por cada l\355nea.)-.15 E(Re)108 112.8 Q -(visemos los datos otra v)-.25 E(ez:)-.15 E 16.5<834c>108 129.6 S 1.302 -(\355nea A: 300, 600, 900 , etc.)-16.5 F 1.302 -(La diferencia del contador es siempre 300, igual que el interv)6.302 F -1.303(alo de)-.25 F .233(tiempo transcurrido entre mediciones. Por lo t\ -anto, el promedio siempre es 1. Pero, \277por qu\351 el primer)128 141.6 -R .811(punto tiene un v)128 153.6 R .811(alor de `)-.25 F(`desconocido') --.74 E .812('? \277Acaso no era conocido el v)-.74 F .812 -(alor que pusimos en la base de)-.25 F .694 -(datos? \241Si! Pero no ten\355amos un v)128 165.6 R .693(alor inicial \ -para calcular la diferencia. Ser\355a un error asumir que el)-.25 F -(contador empezaba en 0, as\355 que no conocemos el v)128 177.6 Q -(alor de la diferencia)-.25 E 16.5<834c>108 194.4 S .099 -(\355nea B: No hay nada que calcular)-16.5 F 2.599(,l)-.4 G .099(os v) --2.599 F .099 -(alores son los mismos que se introdujeron en la base de datos.)-.25 F -16.5<834c>108 211.2 S .895(\355nea C: De nue)-16.5 F -.2(vo)-.25 G 3.395 -(,n).2 G 3.395(oc)-3.395 G .895(onocemos el v)-3.395 F .895 -(alor inicial antes de la primera medici\363n, as\355 que se aplica el) --.25 F 1.152(mismo razonamiento que para la l\355nea A. En este caso la\ -s diferencias no son constantes, as\355 que la)128 223.2 R .033 -(l\355nea no es recta. Si hubi\351semos puesto los mismos v)128 235.2 R -.033(alores que en la l\355nea A, el gr\341\214co ser\355a el mismo.) --.25 F .391(Al contrario que)128 247.2 R/F1 9/Times-Roman@0 SF(COUNTER) -2.891 E F0 2.891(,e)C 2.891(lv)-2.891 G .391(alor puede decrecer)-3.141 -F 2.891(,ye)-.4 G .392(spero mostrarte m\341s adelante el por que de la) --2.891 F(diferencia entre ambos tipos.)128 259.2 Q 16.5<834c>108 276 S -.679(\355nea D: En este caso, el dispositi)-16.5 F 1.078 -.2(vo n)-.25 H -.678(os da las diferencias por s\355 mismo. Por lo tanto, conocemos la) -.2 F 2.09(diferencia inicial, y podemos gra\214carla. T)128 288 R 2.09 -(enemos los mismos v)-.7 F 2.09(alores que en la l\355nea A, pero su) --.25 F .219(signi\214cado es distinto, por lo que el gr\341\214co tambi\ -\351n lo es. En este caso, las diferencias se incrementan)128 300 R .073 -(en 300 cada v)128 312 R .073(ez, mientras que el interv)-.15 F .074 -(alo de tiempo permanece constante en 300 se)-.25 F .074 -(gundos, por lo que)-.15 F(la di)128 324 Q -(visi\363n nos da resultados cada v)-.25 E(ez mayores.)-.15 E/F2 10 -/Times-Bold@0 SF -7.218(RR)108 346.8 S -4.438(ee)7.218 G -2.778(ii)4.438 -G -5.558(nn)2.778 G -2.778(ii)5.558 G -4.438(cc)2.778 G -2.778(ii)4.438 -G -4.998(aa)2.778 G -2.778(ll)4.998 G -2.778(ii)2.778 G -4.438(zz)2.778 -G -4.998(aa)4.438 G -4.438(cc)4.998 G -2.778(ii)4.438 G -4.998 -2.778 G 11.116 -5.558(nn dd)4.998 H 8.876 -4.438(ee l)5.558 H(lo)1.66 E -(os)-4.998 E 2.5(sc)-3.888 G(co)-6.938 E(on)-4.998 E(nt)-5.558 E(ta) --3.328 E(ad)-4.998 E(do)-5.558 E(or)-4.998 E -.18(re)-4.438 G(es)-4.258 -E(s)-3.888 E F0 -.8(To)108 363.6 S(da).8 E .643 -(v\355a nos quedan algunas cosas por v)-.2 F(er)-.15 E 3.143(.N)-.55 G -.643(os quedan algunas opciones importantes por cubrir)-3.143 F 3.143 -(,ya)-.4 G .643(un no)-3.143 F .279(hemos hablado de la reinicializaci\ -\363n de contadores. Empecemos por ah\355: Estamos en nuestro coche, v) -108 375.6 R(emos)-.15 E 2.99 -(el contador y muestra 999987. Andamos unos 20)108 387.6 R F1(KM)5.489 E -F0 5.489(,a)C 2.989(s\355 que el contador debe subir a 1000007.)-5.489 F -3.222(Desafortunadamente, el contador s\363lo tiene 6 d\355gitos, as\ -\355 que en realidad nos muestra 000007. Si)108 399.6 R 1.043 -(estuvi\351ramos guardando los v)108 411.6 R 1.043(alores en un tipo) --.25 F F1(DERIVE)3.543 E F0 3.543(,e)C 1.042 -(sto signi\214car\355a que el contador retrocedi\363 unos)-3.543 F -(999980)108 423.6 Q F1(KM)3.371 E F0 3.372(.P)C .872(or supuesto esto n\ -o es cierto, por lo que necesitamos alguna protecci\363n contra estos c\ -asos.)-3.372 F 1.042(Esta protecci\363n s\363lo la tenemos para el tipo) -108 435.6 R F1(COUNTER)3.541 E F0 3.541(,e)C 3.541(lc)-3.541 G 1.041 -(ual de todas formas era el que ten\355amos que)-3.541 F 1.1 -(haber usado para este tipo de contador)108 447.6 R 3.601<2ebf>-.55 G -1.101(C\363mo funciona? Los v)-3.601 F 1.101(alores tipo)-.25 F F1 -(COUNTER)3.601 E F0 1.101(no deben decrecer)3.601 F 1.336(nunca, \241po\ -r lo que RRDtool asume en ese caso que el contador se ha reinicializado\ -! Si la diferencia es)108 459.6 R(ne)108 471.6 Q -.05(ga)-.15 G(ti).05 E --.25(va)-.25 G 2.5(,e).25 G(sto se compensa sumando el v)-2.5 E -(alor m\341ximo del contador + 1. P)-.25 E -(ara nuestro coche, tendr\355amos:)-.15 E/F3 10/Courier@0 SF -(Delta = 7 - 999987 = -999980)114 488.4 Q -(\(en vez de 1000007-999987=20\))24 E -(Delta real= -999980 + 999999 + 1 = 20)114 512.4 Q F0 1.377(Al momento \ -de escribir este documento, RRDtool maneja contadores de 32 o 64 bits d\ -e tama\361o. Estos)108 536.4 R -(contadores pueden manejar los siguientes v)108 548.4 Q(alores:)-.25 E -F3 6(-3)114 565.2 S 6(2b)-6 G(its: 0 ..)-6 E(4294967295)66 E 6(-6)114 -577.2 S 6(4b)-6 G(its: 0 .. 18446744073709551615)-6 E F0(Si estos v)108 -601.2 Q(alores te parecen raros, podemos v)-.25 E(erlos en formato he) --.15 E(xadecimal:)-.15 E F3 6(-3)114 618 S 6(2b)-6 G(its: 0 ..)-6 E -(FFFFFFFF)54 E 6(-6)114 630 S 6(4b)-6 G(its: 0 .. FFFFFFFFFFFFFFFF)-6 E -F0 1.101(RRDtool maneja ambos contadores de la misma manera. Si ocurre \ -un desbordamiento y la diferencia es)108 654 R(ne)108 666 Q -.05(ga)-.15 -G(ti).05 E -.25(va)-.25 G 3.163(,R).25 G .663 -(RDtool le suma primero el m\341ximo del contador `)-3.163 F(`menor') --.74 E 3.163('\()-.74 G .664(32 bits\) + 1 a la diferencia. Si a\372n) --3.163 F .527(as\355 la diferencia es ne)108 678 R -.05(ga)-.15 G(ti).05 -E -.25(va)-.25 G 3.026(,e).25 G .526(ntonces el contador reinicializado\ - era mayor \(64 bits\), por lo que se le suma)-3.026 F .67(el v)108 690 -R .67(alor m\341ximo del contador `)-.25 F(`lar)-.74 E(go')-.18 E 3.17 -('+1ys)-.74 G 3.17(el)-3.17 G 3.17(er)-3.17 G .67 -(esta el m\341ximo del contador `)-3.17 F(`peque\361o')-.74 E 3.17('q) --.74 G .67(ue sumamos)-3.17 F 2.368 -(err\363neamente. Hay un problema con esto: supong)108 702 R 2.368 -(amos que un contador lar)-.05 F 2.368(go se ha reinicializado al)-.18 F -1.73(sum\341rsele una diferencia muy grande; entonces es posible que al\ - a\361adir el v)108 714 R 1.73(alor m\341ximo del contador)-.25 F 2.5 -(peque\361o la diferencia nos d\351 positi)108 726 R -.2(vo)-.25 G 5(.E) -.2 G 5(ne)-5 G 2.5(ste caso poco probable, los v)-5 F 2.5 -(alores resultantes no serian)-.25 F 145.68(2001-02-11 Last)72 774 R -(change: 1.0.28)2.5 E(14)184.84 E EP -%%Page: 15 15 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F 1.568(correctos. P)108 96 R 1.569(ara que ocur\ -ra esto, el incremento tiene que ser casi tan grande como el v)-.15 F -1.569(alor m\341ximo del)-.25 F(contador)108 108 Q 3.285(,p)-.4 G .785 -(or lo que de ocurrir es muy probable que halla v)-3.285 F .784 -(arios problemas m\341s en la con\214guraci\363n y no)-.25 F .184(merez\ -ca la pena preocuparse s\363lo por este. A\372n as\355, he incluido un \ -ejemplo de este caso para que lo puedas)108 120 R(juzg)108 132 Q -(ar por ti mismo.)-.05 E 3.694(Ac)108 148.8 S 1.194(ontinuaci\363n, uno\ -s ejemplos de reinicializaci\363n de los contadores. Prueba de hacer lo\ -s c\341lculos por ti)-3.694 F(mismo, o acepta mis resultados si tu calc\ -uladora no puede con los n\372meros :\))108 160.8 Q -(N\372meros de correcci\363n:)108 177.6 Q/F1 10/Courier@0 SF 6(-3)114 -194.4 S 6(2b)-6 G(its: \(4294967295+1\) =)-6 E(4294967296)198 E 6(-6)114 -206.4 S 6(4b)-6 G -(its: \(18446744073709551615+1\)-correction1 = 18446744069414584320)-6 E -54(Antes: 4294967200)114 230.4 R 66(Incremento: 100)114 242.4 R -(Deber\355a ser:)114 254.4 Q(4294967300)24 E(Pero es:)114 266.4 Q(4)102 -E 18(Diferencia: -4294967196)114 278.4 R -(Correcci\363n #1: -4294967196 + 4294967296 = 100)114 290.4 Q 54 -(Antes: 18446744073709551000)114 314.4 R 126(Incremento: 800)114 326.4 R -(Deber\355a ser:)114 338.4 Q(18446744073709551800)24 E(Pero es:)114 -350.4 Q(184)150 E 18(Diferencia: -18446744073709550816)114 362.4 R(Corr\ -ecci\363n #1: -18446744073709550816 +4294967296 = -18446744069414583520) -114 374.4 Q -(Correcci\363n #2: -18446744069414583520 +18446744069414584320 = 800)114 -386.4 Q 54(Antes: 18446744073709551615)114 410.4 R 6(\(v)6 G -(alor m\341ximo \))-6 E 24(Incremento: 18446744069414584320)114 422.4 R -6(\(i)6 G(ncremento absurdo,)-6 E(Deber\355a ser:)114 434.4 Q 12 -(36893488143124135935 m\355nimo)24 F(para que)6 E(Pero es:)114 446.4 Q -12(18446744069414584319 funcione)48 F(el ejemplo\))6 E 78 -(Diferencia: -4294967296)114 458.4 R(Correcci\363n #1:)114 470.4 Q -(-4294967296 + 4294967296 = 0 \(positivo,)12 E(por tanto no se hace)390 -482.4 Q(la segunda correcci\363n\))390 494.4 Q 54 -(Antes: 18446744073709551615)114 518.4 R 6(\(v)6 G(alor m\341ximo \))-6 -E 24(Incremento: 18446744069414584319)114 530.4 R(Deber\355a ser:)114 -542.4 Q(36893488143124135934)24 E(Pero es:)114 554.4 Q -(18446744069414584318)48 E 78(Diferencia: -4294967297)114 566.4 R -(Correcci\363n #1:)114 578.4 Q(-4294967297 +4294967296 = -1)12 E -(Correcci\363n #2:)114 590.4 Q -(-1 +18446744069414584320 = 18446744069414584319)12 E F0 2.469 -(Como puede v)108 614.4 R 2.469 -(erse en los \372ltimos ejemplos, necesitas unos v)-.15 F 2.469 -(alores bastante e)-.25 F 2.47(xtra\361os para hacer que)-.15 F .938 -(RRDtool f)108 626.4 R .938(alle \(asumiendo que no teng)-.1 F 3.438(an) --.05 G .937(ing\372n error el programa, por supuesto\), as\355 que esto\ - no deber\355a)-3.438 F(ocurrir)108 638.4 Q 2.845(.S)-.55 G .345 -(in embar)-2.845 F(go,)-.18 E/F2 9/Times-Roman@0 SF(SNMP)2.845 E F0 -2.846(oc)2.846 G .346(ualquier otro m\351todo que uses de recogida de d\ -atos puede tambi\351n reportar)-2.846 F .702(alg\372n v)108 650.4 R .702 -(alor err\363neo ocasionalmente. No podemos pre)-.25 F -.15(ve)-.25 G -.701(nir todos los errores, pero podemos tomar algunas).15 F .612 -(medidas. El comando `)108 662.4 R(`create')-.74 E 3.112('d)-.74 G 3.112 -(eR)-3.112 G .612(RDtool tiene dos par\341metros especialmente para est\ -o, que de\214nen los)-3.112 F -.25(va)108 674.4 S .574 -(lores m\355nimo y m\341ximo permitidos. Hasta ahora hemos usado `).25 F -(`U')-.74 E .573(', `)-.74 F(`desconocido')-.74 E .573('. Si le pasas v) --.74 F(alores)-.25 E 1.992 -(para uno o ambos par\341metros y RRDtool recibe un v)108 686.4 R 1.992 -(alor fuera de esos l\355mites, los ignorar\341. P)-.25 F 1.992(ara un) --.15 F 1.908 -(term\363metro en grados Celsius, el m\355nimo absoluto es \255273. P) -108 698.4 R 1.908(ara mi enrutador)-.15 F 4.408(,p)-.4 G 1.908 -(uedo asumir que ese)-4.408 F .277(m\355nimo es mucho mayor)108 710.4 R -2.777(,d)-.4 G(ig)-2.777 E .277(amos que 10.)-.05 F .278 -(La temperatura m\341xima la pondr\355a en unos 80 grados; m\341s alto) -5.278 F 2.934(ye)108 722.4 S 2.934(la)-2.934 G .434 -(parato no funcionar\355a. P)-2.934 F .434 -(ara mi coche, nunca esperar\355a obtener v)-.15 F .434(alores ne)-.25 F --.05(ga)-.15 G(ti).05 E -.2(vo)-.25 G .434(s, y tampoco esperar\355a).2 -F 145.68(2001-02-11 Last)72 770.4 R(change: 1.0.28)2.5 E(15)184.84 E EP -%%Page: 16 16 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F -.25(va)108 96 S .871(lores mayores a 230.).25 -F .871(Cualquier otra cosa ser\355a un error)5.871 F 3.371(.P)-.55 G -.871(ero recuerda, lo contrario no es cierto: si los)-3.371 F -.25(va) -108 108 S .94(lores pasan este e).25 F .94 -(xamen no quiere decir que sean los correctos. Siempre e)-.15 F .94 -(xamina bien el gr\341\214co si los)-.15 F -.25(va)108 120 S -(lores parecen e).25 E(xtra\361os.)-.15 E/F1 10/Times-Bold@0 SF -7.218 -(RR)108 142.8 S -4.438(ee)7.218 G -8.328(mm)4.438 G -5.558(uu)8.328 G --4.438(ee)5.558 G -3.888(ss)4.438 G -3.328(tt)3.888 G 6.196 -4.438 -(rr ee)3.328 H 9.996 -4.998(oo d)4.438 H(de)-.56 E 2.5(el)-4.438 G(lo) --5.278 E(os)-4.998 E 2.5(sd)-3.888 G(da)-8.058 E(at)-4.998 E(to)-3.328 E -(os)-4.998 E(s)-3.888 E F0 .376 -(Hay una funcionalidad importante de RRDtool que no hemos e)108 159.6 R -.376(xplicado toda)-.15 F .377(v\355a: es virtualmente imposible)-.2 F -.604(recoger los datos y pasarselos a RRDtool a interv)108 171.6 R .604 -(alos e)-.25 F .603(xactos de tiempo. Por tanto, RRDtool interpola los) --.15 F .068(datos a los interv)108 183.6 R .068(alos e)-.25 F .068(xact\ -os. Si no sabes que signi\214ca esto o como se hace, he aqu\355 la ayud\ -a que necesitas:)-.15 F(Supong)108 200.4 Q 1.833 -(amos un contador se incremente e)-.05 F 1.833(xactamente en 1 cada se) --.15 F 4.333(gundo. Queremos)-.15 F 1.833(medirlo cada 300)4.333 F(se) -108 212.4 Q 1.668(gundos, por lo que deber\355amos tener v)-.15 F 1.668 -(alores separados e)-.25 F 1.668(xactamente en 300. Sin embar)-.15 F -1.668(go, por v)-.18 F(arias)-.25 E 2.346(circunstancias lle)108 224.4 R --.05(ga)-.15 G 2.346(mos unos se).05 F 2.346(gundos tarde y el interv) --.15 F 2.345(alo es 303. La diferencia ser\341 por tanto 303.)-.25 F(Ob) -108 236.4 Q .292(viamente, RRDtool no debe colocar 303 en la base de da\ -tos y dar as\355 la impresi\363n de que el contador se)-.15 F .225 -(increment\363 303 en 300 se)108 248.4 R .225 -(gundos. Aqu\355 es donde RRDtool interpola: alter\341 el v)-.15 F .224 -(alor 303 al v)-.25 F .224(alor que tendr\355a)-.25 F 2.76(3s)108 260.4 -S -.15(eg)-2.76 G .26(undos antes y guarda 300 en 300 se).15 F .261 -(gundos. Dig)-.15 F .261(amos que la pr\363xima v)-.05 F .261(ez lle) --.15 F -.05(ga)-.15 G .261(mos justo a tiempo; por).05 F .132 -(tanto, el interv)108 272.4 R .132(alo actual es 297 se)-.25 F .132 -(gundos, por lo que el contador deber\355a ser 297. De nue)-.15 F -.2 -(vo)-.25 G 2.631(,R).2 G .131(RDtool altera)-2.631 F(el v)108 284.4 Q -(alor y guarda 300, como debe ser)-.25 E(.)-.55 E/F2 10/Courier@0 SF -(en RRD)162 301.2 Q(en realidad)126 E 12(tiempo+000: 0)114 313.2 R 18 -(delta="U" tiempo+000:)6 F 6(0d)18 G(elta="U")-6 E -(tiempo+300: 300 delta=300)114 325.2 Q(tiempo+300: 300 delta=300)24 E -(tiempo+600: 600 delta=300)114 337.2 Q(tiempo+603: 603 delta=303)24 E -(tiempo+900: 900 delta=300)114 349.2 Q(tiempo+900: 900 delta=297)24 E F0 -(Creemos dos bases de datos id\351nticas. He escogido el rango de tiemp\ -o entre 920805000 y 920805900.)108 373.2 Q F2 -(rrdtool create seconds1.rrd)126 390 Q(\\)18 E(--start 920804700)144 402 -Q(\\)60 E(DS:seconds:COUNTER:600:U:U \\)144 414 Q(RRA:AVERAGE:0.5:1:24) -144 426 Q(para Unix: cp seconds1.rrd seconds2.rrd)126 450 Q -(para DOS: copy seconds1.rrd seconds2.rrd)126 462 Q(para VMS:)126 474 Q -6(yy)12 G 6(oq)-6 G(ue s\351 :\))-6 E(rrdtool update seconds1.rrd \\)126 -498 Q(920805000:000 920805300:300 920805600:600 920805900:900)144 510 Q -(rrdtool update seconds2.rrd \\)126 522 Q -(920805000:000 920805300:300 920805603:603 920805900:900)144 534 Q F0 -145.68(2001-02-11 Last)72 768 R(change: 1.0.28)2.5 E(16)184.84 E EP -%%Page: 17 17 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 337.082(rrdtool RRDTUT)72 48 R -.834 -(ORIAL.ES \( 1 \))-.18 F/F1 10/Courier@0 SF(rrdtool graph seconds1.gif) -126 96 Q(\\)138 E(--start 920804700 --end 920806200)144 108 Q(\\)78 E -(--height 200)144 120 Q(\\)204 E -(--upper-limit 1.05 --lower-limit 0.95 --rigid \\)144 132 Q 30 -(DEF:seconds=seconds1.rrd:seconds:AVERAGE \\)144 144 R 132 -(CDEF:unknown=seconds,UN \\)144 156 R 150(LINE2:seconds#0000FF \\)144 -168 R(AREA:unknown#FF0000)144 180 Q(rrdtool graph seconds2.gif)126 192 Q -(\\)138 E(--start 920804700 --end 920806200)144 204 Q(\\)78 E -(--height 200)144 216 Q(\\)204 E -(--upper-limit 1.05 --lower-limit 0.95 --rigid \\)144 228 Q 30 -(DEF:seconds=seconds2.rrd:seconds:AVERAGE \\)144 240 R 132 -(CDEF:unknown=seconds,UN \\)144 252 R 150(LINE2:seconds#0000FF \\)144 -264 R(AREA:unknown#FF0000)144 276 Q F0 -(Los dos gr\341\214cos debe ser iguales.)108 300 Q/F2 9/Times-Bold@0 SF --6.496(RR)72 316.8 S -6.001(EE)6.496 G -5.002(SS)6.001 G -6.496(UU)5.002 -G -8.494(MM)6.496 G -6.001(EE)8.494 G -6.496(NN)6.001 G F0 .222(Es hora\ - de concluir este documento. Ahora debes conocer lo b\341sico como para\ - trabajar con RRDtool y leer)108 328.8 R .204(la documentaci\363n. A\ -\372n hay mucho m\341s por descubrir acerca de RRDtool, y le encontrar\ -\341s; m\341s y m\341s usos)108 340.8 R .725(para la herramienta. Con l\ -os ejemplos y la herramienta puedes crear f\341cilmente muchos gr\341\ -\214cos; tambi\351n)108 352.8 R(puedes usar las interf)108 364.8 Q -(aces disponibles.)-.1 E F2 -6.001(LL)72 381.6 S -3.499(II)6.001 G --5.002(SS)3.499 G 8.942 -6.001(TT A)5.002 H 2.25(AD)-.495 G(DE)-8.746 E -2.25(EC)-6.001 G(CO)-8.746 E(OR)-7 E(RR)-6.496 E(RE)-6.496 E(EO)-6.001 E -(O)-7 E F0 .534(Recuerda subscribirte a la lista de correo. Aunque no c\ -ontestes los correos que aparecen en ella, te servir\341)108 393.6 R -.514(de ayuda a ti y a los dem\341s.)108 405.6 R .514 -(Mucho de lo que se sobre)5.514 F/F3 9/Times-Roman@0 SF(MR)3.015 E(TG) --.54 E F0 .515(\(y por tanto sobre RRDtool\), lo aprend\355 tan)3.015 F -.009(s\363lo con leer la lista, sin escribir)108 417.6 R 2.509(.N)-.55 G -2.509(oh)-2.509 G .008(ay por que pre)-2.509 F .008(guntar las pre)-.15 -F .008(guntas b\341sicas, que ya tienen su respuesta)-.15 F 1.543(en la) -108 429.6 R F3 -1.413 -.666(FA Q)4.043 H F0 1.543 -(\(\241l\351ela!\). Con miles de usuarios a lo lar)4.709 F 1.544 -(go del mundo, siempre hay pre)-.18 F 1.544(guntas que tu puedes)-.15 F -(responder con lo aprendido en este y otros documentos.)108 441.6 Q F2 --6.496(VV)72 458.4 S -6.001(EE)6.496 G 12.992 -6.496(RR T)6.001 H -.81 -(TA).495 G(AM)-5.686 E(MB)-8.494 E(BI)-6.001 E<49c9>-3.499 E-6.001 -E(N)-6.496 E F0(Las p\341ginas del manual de RRDtool)108 470.4 Q F2 -10.292 -6.496(AA UU)72 487.2 T 9.59 -6.001(TT O)6.496 H(OR)-.999 E(R) --6.496 E F0 .743 -(Espero que hayas disfrutado con los ejemplos y las descripciones.)108 -499.2 R .742(Si es as\355, ayuda a otros re\214ri\351ndolos a)5.742 F -1.116(este documento cuando te hag)108 511.2 R 1.116(an pre)-.05 F 1.117 -(guntas b\341sicas. No s\363lo obtendr\341n la respuesta, sino que apre\ -nder\341n)-.15 F(muchas otras cosas.)108 523.2 Q(Ale)108 540 Q 2.5(xv) --.15 G(an den Bog)-2.75 E(aerdt )-.18 E 145.68(2001-02-11 Last)72 768 R(change: 1.0.28) -2.5 E(17)184.84 E EP -%%Trailer -end -%%EOF