From 31a319d73100c50a6d77825a27730997042c7060 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Wed, 24 Feb 2010 22:58:53 +0100 Subject: [PATCH 001/291] Imported Debian patch 2.4.3-1 --- debian/Makefile.am | 8 + debian/Makefile.in | 381 +++++++++ debian/changelog | 1307 +++++++++++++++++++++++++++++ debian/compat | 1 + debian/control | 130 +++ debian/copyright | 69 ++ debian/description.subst | 1 + debian/hotplug | 24 + debian/libupsclient1-dev.dirs | 1 + debian/libupsclient1-dev.install | 5 + debian/libupsclient1-dev.links | 1 + debian/libupsclient1-dev.manpages | 1 + debian/libupsclient1.install | 1 + debian/libupsclient1.postinst | 29 + debian/libupsclient1.postrm | 41 + debian/nut-cgi.README.Debian | 39 + debian/nut-cgi.docs | 1 + debian/nut-cgi.install | 6 + debian/nut-cgi.manpages | 6 + debian/nut-cgi.postinst | 55 ++ debian/nut-cgi.postrm | 46 + debian/nut-hal-drivers.docs | 1 + debian/nut-hal-drivers.install | 3 + debian/nut-hal-drivers.postinst | 24 + debian/nut-hal-drivers.preinst | 18 + debian/nut-powerman-pdu.install | 1 + debian/nut-powerman-pdu.manpages | 1 + debian/nut-snmp.install | 1 + debian/nut-snmp.lintian-overrides | 6 + debian/nut-snmp.manpages | 1 + debian/nut-xml.install | 1 + debian/nut-xml.manpages | 1 + debian/nut.README.Debian | 155 ++++ debian/nut.TODO.Debian | 11 + debian/nut.dirs | 4 + debian/nut.docs | 5 + debian/nut.init | 204 +++++ debian/nut.install | 56 ++ debian/nut.link | 2 + debian/nut.lintian-overrides | 2 + debian/nut.manpages | 51 ++ debian/nut.postinst | 136 +++ debian/nut.postrm | 53 ++ debian/nut.preinst | 26 + debian/nut.prerm | 42 + debian/rules | 138 +++ debian/watch | 2 + 47 files changed, 3098 insertions(+) create mode 100644 debian/Makefile.am create mode 100644 debian/Makefile.in create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/description.subst create mode 100644 debian/hotplug create mode 100644 debian/libupsclient1-dev.dirs create mode 100644 debian/libupsclient1-dev.install create mode 100644 debian/libupsclient1-dev.links create mode 100644 debian/libupsclient1-dev.manpages create mode 100644 debian/libupsclient1.install create mode 100644 debian/libupsclient1.postinst create mode 100644 debian/libupsclient1.postrm create mode 100644 debian/nut-cgi.README.Debian create mode 100644 debian/nut-cgi.docs create mode 100644 debian/nut-cgi.install create mode 100644 debian/nut-cgi.manpages create mode 100644 debian/nut-cgi.postinst create mode 100644 debian/nut-cgi.postrm create mode 100644 debian/nut-hal-drivers.docs create mode 100644 debian/nut-hal-drivers.install create mode 100644 debian/nut-hal-drivers.postinst create mode 100644 debian/nut-hal-drivers.preinst create mode 100644 debian/nut-powerman-pdu.install create mode 100644 debian/nut-powerman-pdu.manpages create mode 100644 debian/nut-snmp.install create mode 100644 debian/nut-snmp.lintian-overrides create mode 100644 debian/nut-snmp.manpages create mode 100644 debian/nut-xml.install create mode 100644 debian/nut-xml.manpages create mode 100644 debian/nut.README.Debian create mode 100644 debian/nut.TODO.Debian create mode 100644 debian/nut.dirs create mode 100644 debian/nut.docs create mode 100644 debian/nut.init create mode 100644 debian/nut.install create mode 100644 debian/nut.link create mode 100644 debian/nut.lintian-overrides create mode 100644 debian/nut.manpages create mode 100644 debian/nut.postinst create mode 100644 debian/nut.postrm create mode 100644 debian/nut.preinst create mode 100644 debian/nut.prerm create mode 100755 debian/rules create mode 100644 debian/watch diff --git a/debian/Makefile.am b/debian/Makefile.am new file mode 100644 index 0000000..031e44b --- /dev/null +++ b/debian/Makefile.am @@ -0,0 +1,8 @@ +EXTRA_DIST = changelog control copyright description.subst hotplug \ + nut-cgi.config nut-cgi.docs nut-cgi.examples nut-cgi.postinst nut-cgi.postrm \ + nut-cgi.preinst nut-cgi.README.Debian nut-cgi.templates nut.config \ + nut.default nut.dirs nut.docs nut.examples nut-hal-drivers.docs \ + nut.init nut.links nut.postinst nut.postrm nut.preinst nut.prerm \ + nut.README.Debian nut.templates nut.TODO.Debian \ + rules watch po/ca.po po/cs.po po/de.po po/fr.po po/POTFILES.in \ + po/pt.po po/pt_BR.po po/templates.pot po/vi.po diff --git a/debian/Makefile.in b/debian/Makefile.in new file mode 100644 index 0000000..aca9924 --- /dev/null +++ b/debian/Makefile.in @@ -0,0 +1,381 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = packaging/debian +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_create_stdint_h.m4 \ + $(top_srcdir)/m4/nut_arg_with.m4 \ + $(top_srcdir)/m4/nut_check_hiddev.m4 \ + $(top_srcdir)/m4/nut_check_ipv6.m4 \ + $(top_srcdir)/m4/nut_check_libgd.m4 \ + $(top_srcdir)/m4/nut_check_libhal.m4 \ + $(top_srcdir)/m4/nut_check_libneon.m4 \ + $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ + $(top_srcdir)/m4/nut_check_libssl.m4 \ + $(top_srcdir)/m4/nut_check_libusb.m4 \ + $(top_srcdir)/m4/nut_report_feature.m4 \ + $(top_srcdir)/m4/nut_type_socklen_t.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFPATH = @CONFPATH@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRIVER_BUILD_LIST = @DRIVER_BUILD_LIST@ +DRIVER_INSTALL_TARGET = @DRIVER_INSTALL_TARGET@ +DRIVER_MAN_LIST = @DRIVER_MAN_LIST@ +DSYMUTIL = @DSYMUTIL@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ +HAL_FDI_PATH = @HAL_FDI_PATH@ +HAL_USER = @HAL_USER@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBGD_CFLAGS = @LIBGD_CFLAGS@ +LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ +LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ +LIBHAL_LDFLAGS = @LIBHAL_LDFLAGS@ +LIBNEON_CFLAGS = @LIBNEON_CFLAGS@ +LIBNEON_LDFLAGS = @LIBNEON_LDFLAGS@ +LIBNETSNMP_CFLAGS = @LIBNETSNMP_CFLAGS@ +LIBNETSNMP_LDFLAGS = @LIBNETSNMP_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSSL_CFLAGS = @LIBSSL_CFLAGS@ +LIBSSL_LDFLAGS = @LIBSSL_LDFLAGS@ +LIBTOOL = @LIBTOOL@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LDFLAGS = @LIBUSB_LDFLAGS@ +LINUX_HIDDEV = @LINUX_HIDDEV@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NETLIBS = @NETLIBS@ +NMEDIT = @NMEDIT@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RUN_AS_GROUP = @RUN_AS_GROUP@ +RUN_AS_USER = @RUN_AS_USER@ +SED = @SED@ +SERLIBS = @SERLIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATEPATH = @STATEPATH@ +STRIP = @STRIP@ +SUN_LIBUSB = @SUN_LIBUSB@ +VERSION = @VERSION@ +WORDS_BIGENDIAN = @WORDS_BIGENDIAN@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cgiexecdir = @cgiexecdir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +driverexecdir = @driverexecdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +hotplugdir = @hotplugdir@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfigdir = @pkgconfigdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +EXTRA_DIST = changelog control copyright description.subst hotplug \ + nut-cgi.config nut-cgi.docs nut-cgi.examples nut-cgi.postinst nut-cgi.postrm \ + nut-cgi.preinst nut-cgi.README.Debian nut-cgi.templates nut.config \ + nut.default nut.dirs nut.docs nut.examples nut-hal-drivers.docs \ + nut.init nut.links nut.postinst nut.postrm nut.preinst nut.prerm \ + nut.README.Debian nut.templates nut.TODO.Debian \ + rules watch po/ca.po po/cs.po po/de.po po/fr.po po/POTFILES.in \ + po/pt.po po/pt_BR.po po/templates.pot po/vi.po + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packaging/debian/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu packaging/debian/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..914c006 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,1307 @@ +nut (2.4.3-1) unstable; urgency=low + + * New upstream release (Closes: #544390, #528222, #539747, #526811, + #562064) + * debian/nut.install, debian/nut.manpages: + - remove cyberpower driver and manpage + - add bestfortress, clone and ivtscd drivers and manpages + * debian/rules: + - change udev dir to /lib/udev (Closes: #522327) + - replace deprecated calls to 'dh_clean -k' by dh_prep (Closes: #536599) + * debian/rules, debian/nut.install, debian/nut.install, + debian/nut.README.Debian: install configuration files, without the + sample suffix (Closes: #528641) + * debian/nut.links: restored (Closes: #522506) + * debian/nut.init: + - source nut.conf instead of default/nut for POWEROFF_WAIT(Closes: + #538173) + - fix status checking (Closes: #538785) + - improve detection of non configured system and beautify related + output (Closes: #563112) + - use 'invoke-rc.d' instead of calling the reboot script directly + - add $remote_fs to Required-Start and Required-Stop + * debian/nut.postrm: remove udev files and simplify cleanup (Closes: + #541629) + * debian/control: + - remove Luca Filipozzi from the Uploaders list (Closes: #568987) + - update Standards-Version to 3.8.4 + - remove the debconf dependency + - bump debhelper version to (>= 7) in Build-Depends, for dh_prep + - add Breaks on nut-hal-drivers to ensure we have correct udev version + * Remove debconf support since it was related to really old nut + version (Closes: #518056): + - remove nut-cgi.config, nut.config, nut-cgi.templates, nut.templates, + and po/ directory + - update nut-cgi.postinst + * debian/nut.dirs: remove /var/run/nut to conform to Debian Policy + * debian/nut.postint: + - create /var/run/nut if needed + - improve security checks + * debian/nut.README.Debian: add a security note for ups.conf + * debian/watch: URL update + + -- Arnaud Quette Wed, 24 Feb 2010 22:58:53 +0100 + +nut (2.4.1-3.2) unstable; urgency=low + + * Non-maintainer upload. + * nut.postinst: fix post-processing of nut.conf to avoid overriding + user settings (Closes: #531220) + + -- Stefano Zacchiroli Thu, 26 Nov 2009 09:30:45 +0100 + +nut (2.4.1-3.1) unstable; urgency=low + + * Non-maintainer upload. + * Fix length of extended descriptions of packages + in debian/control + * Fix pending l10n issues. Debconf translations: + - Galician (marce villarino). Closes: #524263 + - Spanish (Noel David Torres Taño). Closes: #525125 + - Vietnamese (Clytie Siddall). Closes: #548170 + + -- Christian Perrier Tue, 20 Oct 2009 21:45:21 +0200 + +nut (2.4.1-3) unstable; urgency=low + + * Debconf templates and debian/control reviewed by the debian-l10n- + english team as part of the Smith review project. Closes: #520591 + * [Debconf translation updates] + - Japanese. Closes: #521350, #518602 + - Czech. Closes: #521662 + - German. Closes: #518005 + - Basque. Closes: #522390 + - French. Closes: #522677 + - Finnish. Closes: #522837 + - Swedish. Closes: #522973 + - Italian. Closes: #522987 + - Russian. Closes: #523122 + - Portuguese. Closes: #523600 + + -- Christian Perrier Sat, 21 Mar 2009 08:08:59 +0100 + +nut (2.4.1-2) unstable; urgency=low + + * debian/control: + - add Build-Depends libwrap0-dev to enable TCP wrappers support, + - remove again dpatch from Build-Depends, + - move back debconf to Depends since we don't use it anymore in the preinst, + - add udev to nut-hal-drivers Depends so that it can use udevadm. + * debian/rules: + - pre merge the needed changes for Ubuntu (udev path and version), + - deactivate again dpatch rules + - move the nut-cgi HTML files off /var/www to /usr/share/nut/www + - set dh_installdocs to ignore Makefile + - remove dh_installexamples + * debian/patches/*: removed since it doesn't address the issue + * debian/nut-snmp.lintian-overrides: added to address NetSNMP overlinking + * debian/nut.install: + - add an precise list of the configuration files (Closes: #254355), + - use a wildcard to specify the udev rules installation path + * debian/nut-hal-drivers.install: use a wildcard to specify the udev rules + installation path (either /etc or /lib) + * debian/nut-cgi.install: add an precise list of the configuration files + * debian/nut.preinst: + - remove previous udev rule if unchanged, otherwise move to new filename (ie + with a dash), + - don't call adduser or addgroup *at all*, since these operations should be + handled in the postinst, + - migrate /etc/default/nut content to /etc/nut/nut.conf (part #1) + * debian/nut-cgi.preinst: removed since its content is addressed by postinst. + * debian/nut-hal-drivers.preinst: + - remove previous udev rule if unchanged, otherwise move to new filename (ie + with a dash), + * debian/nut-hal-drivers.postinst: + - reinstate since it was lost in the 2.2.2-10 merge, + - use the safe way to install udev rules (udevadm trigger --action=change). + * debian/nut.postinst: + - use the safe way to install udev rules, as for nut-hal-drivers.postinst + (udevadm trigger --action=change) + - rework the user/group creation, and a commented add to the dialout group, + - migrate /etc/default/nut content to /etc/nut/nut.conf (part #2) + * debian/nut-cgi.postinst: rework the user/group creation, and a commented add + to the dialout group. + * debian/nut.postinst: reactivate the nut user removal upon purge + * debian/nut.init: + - use nut.conf instead of /etc/default/nut to start the right component(s) + - enforce the configuration checking + - add basic support for the status option (as required per LSB) + * debian/nut.default: removed since its content has been incorporated into + nut.conf + * debian/{nut-cgi,nut}.examples: removed since the sample configuration files + are now installed. + * debian/nut.README.Debian: reworked with a lot of update and completion. + * debian/nut-cgi.README.Debian: reworked with a lot of update and completion. + + -- Arnaud Quette Fri, 20 Feb 2009 10:09:52 +0100 + +nut (2.4.1-1) unstable; urgency=low + + * New upstream release + * Acknowledge the use of debhelpers (Closes: #506583) + * debian/copyright: authors and licensing (GPL2+ and GPL3+) completion + * debian/control: + - add a Pre-Depends on debconf for nut and nut-cgi, and remove the according + Depends + - add ${misc:Depends} to all Depends + - add libpowerman0-dev to the Build-Depends + - add a new nut-powerman-pdu package + - add a Recommends on bash-completion for nut + - remove Shaul Karl from the Uploaders as per his request + * debian/nut-powerman-pdu.install, debian/nut-powerman-pdu.manpages: added for + the nut-powerman-pdu package + * debian/nut.install: + - also list the bash_completion entry + - list update due to upstream changes + * debian/nut.manpages: list update due to upstream changes + * debian/rules: + - comment the patching rules + - install the nut.bash_completion script + * debian/patches/*: removed the previous patches since fixed upstream + * debian/patches/01_snmp_ups_no_lcrypto.dpatch: add a patch to fix snmp-ups + overlinking with lcrypto (lintian possible-gpl-code-linked-with-openssl) + * debian/po/es.po: added Spanish debconf template translation (Closes: + 512494) + * debian/po/ja.po: added Japanese debconf template translation (Closes: + 512865) + * debian/watch: updated for the new 2.4 tree + * debian/nut.prerm: replace the direct call to the init script by invoke-rc.d + + -- Arnaud Quette Tue, 17 Feb 2009 14:15:24 +0100 + +nut (2.2.2-10) unstable; urgency=low + + * Merge from Ubuntu (Morten Kjeldgaard): + * debian/compat: changed to 6 + * debian/control: + - bump Build-Depends on debhelper to (>= 6.0.7~) since we are now using + dh_lintian. + - add hal to Build-Depends since configure attempts to locate /usr/lib/hal + in order to define callouts path and device information path + * debian/rules: --prefix is back to /usr, --exec-prefix=/ and --libdir=/lib + instead, which has the desired effect of moving the libraries to /lib. + The many shell commands in debian/rules, for moving files from the + install directory to the package directories have all been replaced by + dh_* calls and matching .* files. + * debian/{libupsclient1-dev.install, libupsclient1-dev.manpages, + libupsclient1.install, nut-cgi.install, nut-cgi.manpages, + nut-hal-drivers.install, nut-snmp.install, nut-snmp.manpages, + nut-xml.install, nut-xml.manpages, nut.install, nut.lintian-overrides, + nut.manpages}: added debhelper files. + * debian/nut.dirs: modified debhelper files + * debian/libupsclient1-dev.links: added to provide a link from + /usr/lib/libupsclient.so -> /lib/libupsclient.so.1.0.0 + This is a transitional measure, to salvage packages that have not yet + been updated to the new library location. Can be removed sometime in the + future. + * debian/patches/03-configure.in.dpatch: patch to configure.in adding + AC_CONFIG_MACRO_DIR([m4]) + + -- Arnaud Quette Thu, 27 Nov 2008 21:43:59 +0100 + +nut (2.2.2-9) unstable; urgency=low + + * debian/rules: also move libupsclient.so to /lib, otherwise the link is + broken (Closes: #505101) + * debian/nut-cgi.postinst: test if /etc/nut exists before chmod'ing (Closes: + #502757) + * debian/nut.TODO.Debian: some update and completion + + -- Arnaud Quette Wed, 15 Oct 2008 17:20:29 +0200 + +nut (2.2.2-8) unstable; urgency=high + + * debian/nut.links: restored since it's now handled by insserv (Closes: + #500190) + * debian/changelog: fix a typo error + * debian/rules: move libupsclient.so.1 from /usr/lib to /lib (Closes: + #491591) + * debian/nut-cgi.README.Debian: fix the permissions on /etc/nut (Closes: + #492277) + * debian/control: add Vcs-Browser and Vcs-Svn fields + + -- Arnaud Quette Tue, 30 Sep 2008 21:37:59 +0200 + +nut (2.2.2-7) unstable; urgency=high + + * debian/nut.links: removed to satisfy insserv (Closes: #492734) + * debian/po/it.po: add Italian debconf template translation (Closes: + #495781) + * debian/nut.preinst: force the nut user to be part of the extra group nut + (Closes: #493159) + + -- Arnaud Quette Mon, 15 Sep 2008 17:18:28 +0200 + +nut (2.2.2-6) unstable; urgency=low + + * tag this bug as closed by the 2.2.2 release (Closes: #490048) + * debian/nut.README.Debian: + - fix the serial udev advice (Closes: #490182) + - mention the UPS compatibility list (Closes: #447187) + * debian/po/de.po: update German debconf template translation (Closes: + #490128) + * debian/changelog: fix a typo on 2.2.2-2 release urgency + + -- Arnaud Quette Fri, 11 Jul 2008 11:30:55 +0200 + +nut (2.2.2-5) unstable; urgency=low + + * debian/po/eu.po: add Basque debconf template translation (Closes: + #489580) + * debian/control: + - add a Build-Depends on autoconfi, automake, libtool for the below patch + - bump Depends on udev to 0.124-1 to complete the fix of #489831 + * debian/rules: call autoreconf after patches application + * debian/patches/02_g_timeout_add_seconds_patch.dpatch: fix compilation + issue in the nut-hal-drivers code, when using a Glib older than 2.14 + (Closes: #489742) + * debian/nut.postint: replace the call to udevtrigger by udevadm trigger + (Closes: #489831) + + -- Arnaud Quette Mon, 07 Jul 2008 11:04:52 +0200 + +nut (2.2.2-4) unstabl e; urgency=low + + * debian/rules: fix a Lintian warning + (debian-rules-calls-debhelper-in-odd-order) + * debian/po/fi.po: add Finnish debconf template translation (Closes: + #489123) + * debian/po/ru.po: add Russian debconf template translation (Closes: + #489285) + * debian/po/vi.po: update Vietnamese debconf template translation (Closes: + #489393) + * debian/nut.templates: remove nut/change_system_user since it is not used + anymore (Closes: #486783) + + -- Arnaud Quette Sat, 05 Jul 2008 22:56:35 +0200 + +nut (2.2.2-3) unstable; urgency=low + + * debian/rules: reactivate dpatch support + * debian/control: add dpatch back to Build-Depends + * debian/patches/00list: fix the matching of the NUT HAL .fdi file (Closes: + #471828) + * debian/po/fr.po: update French debconf template translation (Closes: + #486740) + * debian.po/de.po: update the German debconf template translation (Closes: + #487187) + * debian/po/sv.po: add Swedish debconf template translation (Closes: #488217) + * debian.po/cs.po: update the Czech debconf template translation (Closes: + #488355) + * debian/po/pt.po: update the Portuguese debconf template translation (Closes: + #488403) + * debian/po/sv.po: add Galician debconf template translation (Closes: #488380) + * debian/nut.config: fix a typo in comment + + -- Arnaud Quette Fri, 27 Jun 2008 16:18:29 +0200 + +nut (2.2.2-2) unstable; urgency=low + + * debian/rules: fix HAL files installation paths (Closes: #486362) + * debian/control: + - fix conflicts (Closes: #486704, #486705) + - update Standards-Version to 3.8.0 + + -- Arnaud Quette Fri, 20 Jun 2008 21:29:31 +0200 + +nut (2.2.2-1) unstable; urgency=low + + * New upstream release (Closes: #471828, #462468, #334105, #463150) + * acknowledges NMUs (Closes: #469855) + * debian/control: + - add the new nut-xml package and its libneon dependency + - add the new libupsclient1 and libupsclient1-dev packages, with the latter + replacing nut-dev (Closes: #419684) + - remove dpatch dependency + * debian/rules: update according to upstream changes + - replace --with-lib by --with-dev + - update HAL integration + - update for the nut-xml package + - distribute the shared version of libupsclient + - comment dpatch calls + * debian/nut.postinst, debian/nut-hal-drivers.postinst: use udevtrigger to + refresh the devices permissions (Closes: #469601, #475262) + * debian/changelog: fix a typo + * debian/nut.templates: fix the short and long descriptions + * debian/libupsclient1.postinst, debian/libupsclient1.postrm: added to + handle the calls to ldconfig + * debian/nut.init: fix the call to /etc/init.d/reboot by adding the missing + "stop" parameter (Closes: 482022) + * debian/*.template: minor rework of the Debconf templates (Closes: 444151) + + -- Arnaud Quette Wed, 04 Jun 2008 13:35:41 +0200 + +nut (2.2.1-2.1) unstable; urgency=low + + * Non-maintainer upload. + * Skip udev restart logic within chroots, closes: #469855. + + -- Joe Nahmias Sun, 09 Mar 2008 13:12:12 -0400 + +nut (2.2.1-2) unstable; urgency=low + + * debian/po/de.po: update the German po-debconf translation (Closes: + #464466) + * nut-hal-drivers.preinst: created to add to HAL user to the NUT group + (Closes: #460392) + * debian/nut-hal-drivers.postinst: created to complete the above by + restarting udev after the rules file installation + * debian/changelog: Fix some Lintian reports (syntax and spelling errors) + * debian/nut.README.Debian: completed a bit more for #334105 + + -- Arnaud Quette Fri, 8 Feb 2008 13:48:23 +0100 + +nut (2.2.1-1) unstable; urgency=low + + * New upstream release (Closes: #439986) + * acknowledges NMUs (Closes: #447961, #445000) + * debian/watch: update the URL to point the 2.2 tree + * debian/rules: + - force --udev-dir to remove udev from Build-Depends while + keeping the feature (complete #447961 fix) + - limit the above fix to linux systems not to break build on + bsd and hurd these architectures (Closes: #460732) + - fix lintian debian-rules-ignores-make-clean-error and do some more + cleanup + - remove the empty directories /usr/{include,lib} from the nut package + * debian/nut.postinst: call invoke-rc.d instead of the udev init script + (Closes: #442331) + * debian/control: + - remove udev from Build-Depends + - update Standards-Version to 3.7.3 + - remove Homepage from description and add it as a tag + - add libsnmp-dev as an alternate Build-Depends to libsnmp9-dev + * debian/po/nl.po: update the Dutch po-debconf translation (Closes: #447720) + * debian/po/fr.po: update the French po-debconf translation (Closes: #442102) + * debian/patches/*: removed since these have been applied upstream + * debian/patches/00list: emptied but kept for future use + + -- Arnaud Quette Wed, 23 Jan 2008 17:13:13 +0100 + +nut (2.2.0-2.1) unstable; urgency=low + + * Non-maintainer upload with Arnaud's permission. + * debian/nut.postinst: restart udev only if it is running already + (Closes: #447961). + * debian/nut.preinst: ignore db_get errors for nut/remove_debian_conf, + thanks to Alexander Gerasiov for the patch (Closes: #445000). + * Fixed typo in the date of the 2.2.0-2 changelog entry (Augl -> Aug). + + -- Sebastian Harl Tue, 8 Jan 2008 13:50:11 +0100 + +nut (2.2.0-2) unstable; urgency=low + + * debian/control: list udev as Build-Depends to allow the udev rules + inclusion (Closes: #437811) + * debian/nut.default: fix a typo error on UPSMON options comment (Closes: + #439407) + * debian/po/: + - add Brazilian Portuguese debconf templates translation (Closes: + #439793) + - update Portuguese debconf templates translation (Closes: 440369) + - update French debconf templates translation (Closes: 440524) + * debian/Makefile.am: update with the missing files + * debian/patches/03_libupsclient-config.dpatch: patch for the missing FLAGS + (Closes: #439985) + + -- Arnaud Quette Wed, 29 Aug 2007 16:14:11 +0200 + +nut (2.2.0-1) unstable; urgency=low + + * New upstream release (Closes: #432909, #420016, #426033) + * debian/control: + - merge the nut-usb package into nut, and update the various needed + fields (Depends, Provides, Conflicts, Suggests and Description) + - requires at least libhal-dev 0.5.8 + - complete the nut-hal-drivers Description (Homepage) + - update to policy 3.7.2 + - add po-debconf to Build-Depends + * debian/rules: + - general rewrite since the upstream now use automake + - force the evaluation of DEB_HOST_ARCH_OS for dh_gencontrol + - force udev to empty on non Linux system, for dh_gencontrol + - remove the DH_COMPAT export + - update the nut-usb specifics, not needed anymore + - nut-hal-drivers also needs the udev rules + - call debconf-updatepo to clean debconf translations + * debian/compat: creation + * debian/nut-usb.*: remove these files, and put the content in the + matching nut.* files + * debian/nut.preinst: remove the old udev rule file (025_nut...) which + was manually installed, and now addressed upstream and called 52_nut. + * debian/nut.postinst: restart udev to apply the USB rules to the + already plugged devices + * debian/nut-hal-drivers.preinst: created to add the HAL user to + the nut group + * debian/po/nl.po: added Dutch po-debconf translation (Closes: #414756) + * debian/po/pt.po: added Portuguese po-debconf translation (Closes: #415189) + * debian/patches/01_udev_rules_subsystem_usb.dpatch: update the patch + * debian/patches/02_libupsclient.dpatch: patch for the missing FLAGS + * debian/nut.templates: rewrite and simplification + * debian/nut.config: rewrite and simplification + * debian/rules: call dh_installinit with the priority set to 50 to (Closes: + #385694) + * debian/nut.default, debian/nut.init: allow to specify options for upsd and + upsmon (Closes: #420020, #434503) + + -- Arnaud Quette Tue, 17 Jul 2007 09:14:11 +0200 + +nut (2.0.5-3) unstable; urgency=low + + * debian/patches/01_udev_rules_subsystem_usb.dpatch: rework that + patch to be more generic + + -- Arnaud Quette Fri, 02 Feb 2007 15:38:59 +0100 + +nut (2.0.5-2) unstable; urgency=low + + * debian/patches/*: add a patch to fix the udev rule SUBSYSTEM from + usb_device to usb (thanks to Joey Hess) (Closes: #409080) + * debian/control: + - replace the udev substvar by udev + - nut Conflicts with nut-{usb,snmps} <= 2.0.4 and nut-{usb,snmp} + Depends upon 2.0.5 (Closes: #407882) + * debian/rules: dh_gencontrol no more calls -V for udev + + -- Arnaud Quette Thu, 01 Feb 2007 14:50:49 +0100 + +nut (2.0.5-1) unstable; urgency=low + + * New upstream release (Closes: #406045, #380304, #399741) + * debian/rules: + - replaces CHANGES by ChangeLog + - replace the dummycons installation by dummy-ups + - integrate the --with-htmlpath option + * debian/nut-cgi.docs: created to install data/html/README + * debian/nut.init: LSB compliance update + * debian/control: add lsb-base (>= 3.0-6) to Depends for LSB compliance + + -- Arnaud Quette Tue, 16 Jan 2007 10:42:36 +0100 + +nut (2.0.4-3) unstable; urgency=high + + * acknowledges NMUs (Closes: #396704, #389350) + * debian/nut-usb.postinst: remove the symlinking of the udev file since it's + not useful anymore (Closes: #400215) + * native udev rules are now used (Closes: #359802, #380304) + * debian/po/de.po: add German po-debconf template translation (Closes: + #400285) + * debian/nut.config: change the medium priorities to high (Closes: #388945) + * debian/nut.init: improve drivers startup report + + -- Arnaud Quette Wed, 20 Dec 2006 11:07:30 +0100 + +nut (2.0.4-2.3) unstable; urgency=high + + * Non-maintainer upload. + * Some polish on top of the previous NMU. + * Remove the hotplug alternative; we no longer support it, so it's no + longer acceptable in place of udev. Correspondingly, rename the + substvar to ${udev}. (Closes: #396704) + * Drop debian/nut-usbups.rules and use upstream's rules instead. Modify + debian/rules correspondigly, patch from Arnaud Quette. + + -- Steinar H. Gunderson Fri, 17 Nov 2006 01:12:54 +0100 + +nut (2.0.4-2.2) unstable; urgency=high + + * Non-maintainer upload. + * In the udev script, replace the RUN actions by MODE and GROUP actions, as + per suggestion from the maintainer; should fix permission issues. + (Closes: #396704) + + -- Steinar H. Gunderson Thu, 16 Nov 2006 15:38:43 +0100 + +nut (2.0.4-2.1) unstable; urgency=low + + * NMU + * not removing nut user on purge (Closes: #389350) + + -- Florian M. Weps Thu, 12 Oct 2006 11:19:37 +0200 + +nut (2.0.4-2) unstable; urgency=low + + * debian/rules: replace $PWD by CURDIR to satisfy buildd + * debian/nut.default, debian/nut.init: make the bug 358696 workaround + optional as it might be dangerous under some circumstances (closes: + #358696) + + -- Arnaud Quette Tue, 01 Aug 2006 08:50:26 +0200 + +nut (2.0.4-1) unstable; urgency=low + + * New upstream release + - driver do not use /var anymore when called for shutdown/poweroff + (closes: #332846) + - fixes the newhidups crash upon device reconnexion (closes: #354305, + #359769) + * debian/nut.preinst: syntax enhancement to avoid issue when the nut user + already exists (closes: #378970) + * debian/nut-cgi.postinst: fix wrong permissions (closes: #378818) + * debian/po/cs.po: update Czech translation of nut debconf messages (closes: + #366738) + * debian/nut.default, debian/nut.init: "poweroff" workaround to deal with + BIOS default of "On/Off state: Last state" and system halting itself + before the UPS cuts power (closes: #358696) + * debian/nut-usbups.rules: fix the broken udev rules (closes: #359801) + + -- Arnaud Quette Thu, 27 Jul 2006 15:20:46 +0200 + +nut (2.0.3-4) unstable; urgency=low + + * debian/nut-usb.postinst: generate the /etc/udev/rules/ file + * debian/rules: + - install the right udev rule file (not the upstream one) + - install the debian/hotplug file as libhidups, as it's compatible + with hotplug and udev styles + + -- Arnaud Quette Mon, 13 Mar 2006 08:52:25 +0100 + +nut (2.0.3-3) unstable; urgency=low + + * debian/rules: + - fix a wrong symlink for the udev rule files (closes: #354262) + - add a temporary workaround to clean drivers/tripplite_usb + + -- Arnaud Quette Mon, 27 Feb 2006 15:35:32 +0100 + +nut (2.0.3-2) unstable; urgency=low + + * debian/nut.init: fix the creation of the PID directory, as /var is now volative. + This bug has been identified in Ubuntu (Launchpad #6679) + * debian/nut-cgi.postrm: suppress the deletion of the nut user as it's not + needed (closes: #319395) + * debian/nut-cgi.preinst: suppress that file as we do not need to check and create + the nut user and group for nut-cgi + * debian/nut-cgi.postinst: enhanced to ensure the /etc/nut directory and nut-cgi + configuration files are readable by others + * debian/nut-cgi.README.Debian: improve the documentation about configuration + files permissions + + -- Arnaud Quette Fri, 24 Feb 2006 10:05:25 +0100 + +nut (2.0.3-1) unstable; urgency=low + + * New upstream release + - include the improved USB driver (closes: #300115) + - fix mge-utalk regression (closes: #315431) + - fix USB device claiming and logging (closes: #322901) + * debian/nut-cgi.config: complete the typo fixes from 2.0.2-1 and remove exit + calls (closes: #308215) + * debian/nut.config: remove exit calls + * debian/hotplug: add this file to manage hotplug and udev style permissions settings + * debian/nut-usbups.rules: embed a modified version of the upstream file + * debian/control: + - make hotplug | udev Depends conditionnal, from rules + - remove libusb-0.1-4 Depends as it is already listed with shlibs:Depends + * debian/rules: + - generate debian/control Depends for hotplug | udev + - also install udev files (closes: #338738, #332939) + - call the clean rule before distclean + * debian/nut.README.Debian: + - update the Installation §2 to reflect udev changes on serial port permissions. + Users need to manually add the nut group to the dialout group (closes: #325878, + #334105) + - some other minor update + + -- Arnaud Quette Tue, 21 Feb 2006 13:57:35 +0100 + +nut (2.0.2-2) unstable; urgency=low + + * debian/nut-cgi.postinst: load confmodule + * debian/nut-hidups/*: remove this unneeded directory + * debian/control: + - Update build dependency from libsnmp5-dev to libsnmp9-dev (closes: + #326410) + - Changes nut-usb wrong dependency from libusb-dev to libusb-0.1-4 (closes: + #320315) + - add debconf (>= 0.5.00) and adduser to nut/nut-cgi Depends + * debian/copyright: update the FSF address and the Authors + * debian/po/vi.po: add the Vietnamese translation for debconf, from Clytie + Siddall ((closes: #316327) + + -- Arnaud Quette Fri, 07 Oct 2005 23:35:55 +0200 + +nut (2.0.2-1) unstable; urgency=low + + * New upstream release: + - build respect LDFLAGS (closes: #265439) + - fix etapro brokeness (closes: #305730) + - fix shutdown/restart problems with mge-shut (closes: #302190) + - fix mge-utalk support for older units (closes: #315431) + * debian/po/fr.po: update the French debconf templates, thanks to Michel + Grentzinger (closes: #306541) + * debian/rules: + - install hotplug files for the newhidups USB driver + - suppress the snmp-ups.8 manpage workaround + * debian/nut-usb.prerm: created to remove hotplug files + * debian/control: + - add hotplug Depends for nut-usb + - upgrade Debian Policy to 3.6.2 + * debian/patches/*: remove all patch and empty 00list as all has + been fixed upstream + * debian/nut-cgi.config: integrate the typo fixes that was blocking + upgrade from woody to sarge + * debian/nut-cgi.preinst: remove an unneeded blank line + * acknowledge NMU from Craig Small (closes: #302189) + + -- Arnaud Quette Mon, 27 Jun 2005 11:29:52 +0200 + +nut (2.0.1-3) unstable; urgency=low + + * debian/patches/01_cleanSourceFromlibupsclient.dpatch: removed as it + has been fixed upstream in 2.0.1 + * debian/patches/00list: re enabled for the below patch + * debian/patches/01_upsstatsCgiNoHostCrash.dpatch: added while waiting + for the upstream fix (closes: #302902) + * debian/nut-cgi.templates: added nut-cgi/major_template_changes + * debian/nut-cgi.config: use nut-cgi/major_template_changes (closes: + #301184) + * debian/nut-cgi.README.Debian: reworked, and mention upgrade and + installation. + * debian/nut.README.Debian: mention the missing UPGRADING file, and complete + the upsmon.conf lines with the mandatory POWERDOWNFLAG and SHUTDOWNCMD + (closes: #302182) + * debian/nut.templates: add nut/2_0_upstream_changes to deal with the new + changes + * debian/nut.config: use the above nut/2_0_upstream_changes (closes: + #301060) + + -- Arnaud Quette Fri, 15 Apr 2005 13:52:32 +0100 + +nut (2.0.1-2.1) unstable; urgency=low + + * Non-maintainer upload + * NUT nows powersdown Closes: #302189 + + -- Craig Small Thu, 7 Apr 2005 11:47:58 +1000 + +nut (2.0.1-2) unstable; urgency=low + + * debian/control: add missing Build-Depends for dpatch, thanks to Kurt + Roeckx (closes: #298218) + + -- Arnaud Quette Mon, 07 Mar 2005 16:29:32 +0100 + +nut (2.0.1-1) unstable; urgency=low + + * New upstream release (closes: #247671, #283539) + * debian/watch: update URL to match the current 2.0 stable tree + * debian/rules: + - change install-misc target to install-lib following the upstream rule + name change + - error reporting enhancements, thanks to Karl Shaul (inserted a set -e at + the start of every for loop ; from Debian Policy §4.5). + - workaround to include dummycons test driver and its manpage in nut-dev + while waiting for an upstream rule + - workaround to remove snmp-ups manpage from the nut package, to avoid a + file conflict with nut-snmp, while waiting for an upstream rule + - remove the workaround from 1.4.2-2 to suppress libupsclient.a and + newhidups upon make clean + - comment the "conf files workaround" as it's no more needed + * debian/control: + - add nut-dev to nut Suggests + - complete nut-dev to include dummycons testing driver + - add libusb (>= 0.1.8) nut-usb Depends to benefit of the kernel driver + unbind feature (needed for USB models other than MGE UPSs) + - suppress libgd1 from Build-Depends to fix a DebCheck warning, as it + is listed in Section oldlibs + * debian/nut.README.Debian: add a section "(3) /etc/nut/upsd.conf" + and add references to sample config files and UPGRADING information + (closes: #269485) + * debian/nut.TODO.Debian: add this file to track planned and unfinished + tasks + * debian/nut-cgi.README.Debian: improve a bit the text + * debian/nut.init: test powerdown flag (upsmon -K) and use the new + upsdrvctl exit codes (thanks to Karl Shaul) + * debian/po/cs.po: add Czech translation of debconf templates (patch from + Miroslav Kure) (closes: #283225) + * debian/patches: add basic infrastructure for dpatch + + -- Arnaud Quette Fri, 04 Mar 2005 11:40:13 +0100 + +nut (1.4.3-2) unstable; urgency=low + + * debian/control: add nut-dev package with NUT lib and headers (closes: + #263937) + * debian/rules: change install-misc for the above nut-dev. + * debian/control: invert apache and httpd in nut-cgi Recommends to solve a + lintian warning + + -- Arnaud Quette Sun, 08 Aug 2004 16:07:04 +0200 + +nut (1.4.3-1) unstable; urgency=low + + * New upstream release + * debian/control: change Homepage URL to "www" instead of "random" and + remove trailing slash / dot (closes: #254084) + * debian/control: add apache to nut-cgi Recommends to have a non-virtual + package alternative + + -- Arnaud Quette Thu, 29 Jul 2004 22:58:03 +0200 + +nut (1.4.2-3) unstable; urgency=low + + * debian/control: add libusb-dev version in Build-Depends (closes: #248952) + * debian/copyright: update upstream URL and copyright owners (closes: + #242422) + * debian/po/ca.po: add Catalan translation of debconf templates (patch from + Aleix Badia i Bosch) (closes: #248741) + * debian/nut-cgi.README.Debian: added to describe nut-cgi configuration + (thanks to Marius Gedminas) (closes: #249825) + * debian/nut.README.Debian: minor change + + -- Arnaud Quette Fri, 28 May 2004 13:10:01 +0200 + +nut (1.4.2-2) unstable; urgency=low + + * debian/control: add libusb-dev to Build-Depends (closes: #240586) + * debian/rules: workaround to clean libupsclient.a and newhidups (complete + the above) + + -- Arnaud Quette Sun, 28 Mar 2004 18:30:01 +0100 + +nut (1.4.2-1) unstable; urgency=low + + * New upstream release + * Fixes mge-shut settings and shutdown problems (closes: #232402, #234037) + * debian/nut.init: fixes powerdown rule to prevent from forced UPS shutoff + upon normal shutdown, and add a warning when POWERDOWN flags isn't + defined, thanks to Loic Le Loarer (closes: #236092) + * debian/control: update nut-usb Description to reflect the add of newhidups + and energizerups drivers. + * debian/rules: update nut-usb build and install rules to match the new ones + + -- Arnaud Quette Thu, 25 Mar 2004 16:30:01 +0100 + +nut (1.4.1-release-2) unstable; urgency=low + + * recall previously malformed closed bug (closes: #227965, #227964) + * debian/control: Build-Depends to allow libgd*-noxpm (closes: #231153) + * debian/control: update Homepage address + * debian/watch: update target address + + -- Arnaud Quette Thu, 05 Feb 2004 19:19:56 +0100 + +nut (1.4.1-release-1) unstable; urgency=low + + * New upstream release + * debian/po/*: add gettext support for debconf templates (patch from Michel + Grentzinger) (Close: #227965) + * debian/po/fr.po: add French translation of debconf templates (patch from + Michel Grentzinger) (Close: #227964) + + -- Arnaud Quette Sun, 18 Jan 2004 21:19:56 +0100 + +nut (1.4.1-pre3-5) unstable; urgency=low + + * debian/nut.postrm: fix inverted test with -z (fix a purge error) + * debian/nut.postrm: same as above + * debian/nut.postrm: suppress check_and_delete_group() as it is not useful + * debian/nut-cgi.postrm: same as above + * debian/nut.postinst: test if /etc/nut exists before chmod'ing (fix an + install error) + + -- Arnaud Quette Sat, 15 Nov 2003 22:10:23 +0100 + +nut (1.4.1-pre3-4) unstable; urgency=low + + * debian/nut.preinst: wider check for user/group creation (closes: #217980) + * debian/nut.postrm: rework purge rule for user/group deletion (2nd part of + the above fix) + * debian/nut-cgi.postrm: rework purge rule for user/group deletion (2nd part of + the above fix) + * debian/nut-cgi.preinst: wider check for user/group creation (same as + above) + * debian/rules: suppress {nut,nut-cgi}/etc/nut/*.sample that were wrongly + installed (linked to #172217) + * debian/nut.examples: created to complete above fix + * debian/nut-cgi.examples: created to complete above fix + * debian/nut.postrm: suppress /etc/nut/*.sample file (to correct above + problem) + * debian/nut-cgi.postrm: suppress /etc/nut/*.sample file (same as above) + * Maintainer upload (forgotten previously), closes: #200182, #203061 + + -- Arnaud Quette Sat, 15 Nov 2003 10:10:23 +0100 + +nut (1.4.1-pre3-3) unstable; urgency=low + + * clients/Makefile.in: install parseconf.h to fix compilation error with wmnut + * man/Makefile.in: fix a broken upstream rule (hidups manpages installed two + times) that prevent from installing nut-usb package. This will be fixed in + the next upstream + + -- Arnaud Quette Mon, 10 Nov 2003 17:10:23 +0100 + +nut (1.4.1-pre3-2) unstable; urgency=low + + * man/Makefile.in: fix a broken upstream rule (powernet and snmp-ups + manpages installed two times) that prevent from installing nut-snmp package + + -- Arnaud Quette Mon, 10 Nov 2003 12:59:23 +0100 + +nut (1.4.1-pre3-1) unstable; urgency=low + + * New upstream release + * clients/Makefile.in: suppress the one line patch to install parseconf.o + (from 1.4.1-pre2-1). This is now cleanly addressed by the upstream source + by installing libupsclient.a (closes: #216496) + * debian/rules: change dh_shlibdeps's exclude from upsfetch.o to libupsclient.a + * debian/nut.preinst: fix install rule to catch all cases of nut user and group + needed creation. Previously, post purge install case was not (closes: #217980) + * debian/rules: suppress the work-around for nut-usb package following + the upstream correction (from 1.4.1-pre1-2) + * debian/control: Final package take over ; switch Luca Filipozzi as + co maintainer, and Arnaud Quette as new maintainer. + * debian/watch: point the authoritative download server (penguin.harrison) + and stable releases ("nut/release/1.4/" directory ; it won't work for + final 1.4.1, but for 1.4.2) + * debian/nut.postrm: rework purge rule to suppress a warning + + -- Arnaud Quette Sat, 8 Nov 2003 12:15:23 +0100 + +nut (1.4.1-pre2-1) unstable; urgency=low + + * New upstream release + * debian/control: created package nut-usb for finer deps management + * debian/rules: added rules for nut-usb package, and a work-around + for install directories creation while waiting for upstream correction. + * drivers/Makefile.in: suppressed hidups from PROGS, thanks to the above + * debian/control: repeat Homepage for every sub-package + * debian/control: completed nut Suggests + * debian/control: changed Arnaud Quette address to the good Debian one + * debian/rules: suppress the work-around for nut-snmp package following + the upstream correction(from 1.4.1-pre1-1) + * debian/nut-cgi.preinst: always test if nut user exist as nut-cgi + can be installed without nut, so not having nut user created (closes: + Bug#213730) + * debian/nut-cgi.postinst: chown root:nut to address a potential security + issue (see 1.2.1-2) + * clients/Makefile.in: one line patch to install parseconf.o. This solve + a problem with wmnut package (can't build anymore due to unresolved + symbols). This point will be more cleanly address in next upstream + + -- Arnaud Quette Sat, 18 Oct 2003 09:05:01 +0200 + +nut (1.4.1-pre1-2) unstable; urgency=low + + * debian/control: rewrotte descriptions to follow Debian Policy. A + further enhancement will be to use debian/nut.substvars (thanks + to Shaul Karl) (closes: Bug#209569) + * drivers/Makefile.in: added back hidups to PROGS (closes: Bug#208248) + * debian/control: added libgd2-* to Build-Depends to allow more choices + * debian/control: added Shaul Karl as co-maintainer + * debian/control: changed Arnaud Quette address to Debian's one + + -- Arnaud Quette Sun, 14 Sep 2003 12:11:45 +0200 + +nut (1.4.1-pre1-1) unstable; urgency=low + + * New upstream release (closes: Bug#203856) + * recall ignored 1.4.0-2 changes (closes: Bug#204193, Bug#199895) + * debian/nut.preinst: already solved bug in 1.4.0-3 (closes:Bug#206229) + * debian/control: created package nut-snmp (closes: Bug#195645) + * debian/rules: added rules for nut-snmp package, and a work-around + for install directories creation while waiting for upstream correction. + * debian/control: change Build-Depends to "libgd-xpm-dev | libgd-dev" to + allow easy woody backport (thanks to Martin Maney) + * debian/nut.prerm: wait for upsd stop before calling the remove tempo + + -- Arnaud Quette Sat, 23 Aug 2003 13:55:32 +0200 + +nut (1.4.0-3) unstable; urgency=low + + * debian/nut.prerm: fix a post removal warning by adding a tempo + (1 sec) before removing /var/run/nut + * debian/nut.preinst: reworked install rule (thanks Shaul) (closes:Bug#204153) + + -- Arnaud Quette Fri, 8 Aug 2003 23:14:26 +0200 + +nut (1.4.0-2) unstable; urgency=low + + * debian/watch: update URL to point NUT 1.4 (thanks to Shaul Karl) + * debian/nut.dirs: add /var/run/nut (thanks Shaul) (closes: Bug#204193) + * debian/nut-cgi.preinst: created for allowing separate installation + (without nut) (closes: Bug#199895) + * debian/rules: remove the "--with-group=nut" call to configure as it + is obsolete (thanks Shaul) + * debian/control: add Arnaud Quette as co-maintainer + + -- Arnaud Quette Thu, 7 Aug 2003 20:14:26 +0200 + +nut (1.4.0-1) unstable; urgency=low + + * New upstream release (closes: Bug#203061) + * debian/nut.init: change Init-script ordering (start_stop_server) to + address data stale warning (closes: Bug#200182) + + -- Arnaud Quette Fri, 1 Aug 2003 18:42:22 +0200 + +nut (1.2.2-1) unstable; urgency=low + + * New upstream release + * debian/rules: gidNumber of group 'nobody' is 65534 not 65535 + (thanks Shaul) (closes: Bug#180532) + + -- Luca Filipozzi Fri, 18 Apr 2003 20:12:17 -0700 + +nut (1.2.1-2) unstable; urgency=low + + * debian/nut.README.Debian: s/smartapc/apcsmart/ (closes: Bug#177713) + * debian/nut.postinst: chown root:nut instead of chown nut:nut for files + in /etc/nut/* and for the dirs /etc/nut, /var/run/nut, /var/lib/nut; + this addresses a potential security issue as described in the comments + contained in /etc/nut/upsmon.conf (closes: Bug#180059) + * debian/nut.init: sysadmins might modify POWERDOWNFLAG in + /etc/nut/upsmon.conf without realizing that it is hard coded in the + /etc/init.d/nut init script; fix the init script to parse the + configuration file for the value of POWERDOWNFLAG (closes: Bug#179686) + * debian/nut.init: print a message prior to shutdown (closes: Bug#180242) + + -- Luca Filipozzi Sat, 8 Feb 2003 18:12:11 -0800 + +nut (1.2.1-1) unstable; urgency=low + + * New upstream release + * debian/control: nut provides/conflicts ups-monitor (closes: Bug#170655) + * debian/nut.postinst and debian/nut-cgi.postinst: + test -f file before chown/chmod (closes: Bug#170553) + * debian/nut.postinst: fix permissions on /var/lib/nut (closes: Bug#173318) + * debian/nut.preinst: change how the 'nut' user/group are detected and + created (closes: Bug#173321) + * between 1.1.11-1 incorrectly installed conffiles into /etc/nut + with the extension .sample; fortunately, this release of the package + did not migrate to testing and since 1.1.11-2 the .sample extension + has not been used (closes: Bug#172217) + * debian/nut.preinst: change the way the nut user/group are detected + before adduser is called (closes: Bug#170653) + * debian/nut.README.Debian: fixed minor doc error (Closes: Bug#173673) + + -- Luca Filipozzi Wed, 11 Dec 2002 19:39:02 -0800 + +nut (1.2.0-1) unstable; urgency=low + + * New upstream release + * debian/nut-cgi.postinst: fix permissions on /etc/nut/hosts.conf and + /etc/nut/upsset.conf so that they are world readable (Closes: Bug#167332) + * debian/nut.init: added sleep 5 to allow for an orderly restart (thanks + to Shaul Karl for pointing this out) + + -- Luca Filipozzi Tue, 19 Nov 2002 09:44:25 -0800 + +nut (1.1.12-1) unstable; urgency=high + + * New upstream release (urgency high due to SECURITY FIX) + * SECURITY FIX: a file permission problem potentially exposes + non-system usernames/passwords in /etc/nut/upsd.users that can be used + to DoS a machine running nut by contacting the nut daemon and instructing + it to power off the machine; fixed. + * debian/nut.postinst: change permissions of /etc/nut/upsd.users and + other conffiles to 640 (Closes: Bug#165445) + * debian/nut.config: use db_fset to reset the boolean question that prompts + users to accept whether to continue with the installation of this version + of nut should they answer no (Closes: Bug#165376) + * debian/control: make nut-cgi Replace nut so that conflicting files + can be installed (Closes: Bug#165049) + * drivers/Makefile.in: restored original version that doesn't build + hidups, snmp-ups or powernet; hidups doesn't build on m68k; snmp-ups + and powernet require libsnmp5-dev but libsnmp5-dev requires OpenSSL; + unfortunately, upstream's license doesn't have the OpenSSL exclusion + clause... work is proceeding on porting to gnutls + * drivers/Makefile.in + debian/rules: figured out a mechanism to build + hidups on those architectures that have /usr/include/linux/hiddev.h + * debian/control: build-depend on libgd-xpm-dev (really closes Bug#164832) + + -- Luca Filipozzi Sat, 19 Oct 2002 16:47:35 -0700 + +nut (1.1.11-2) unstable; urgency=low + + * changed build dependencies to avoid depending on a pure-virtual package + without providing a default (thanks Junichi Uekawa) (Closes: Bug#164832) + * debian/rules calls $(MAKE) install-misc so that the header and the .o file + are released with the nut package (too small for a nut-dev package?) + + -- Luca Filipozzi Tue, 15 Oct 2002 08:50:18 -0700 + +nut (1.1.11-1) unstable; urgency=low + + * New upstream release + (Closes: Bug#151047, Bug#155943, Bug#153174, Bug#160178, Bug#164024) + * the "Hey Dorothy, you aren't in Kansas anymore" release + * warning: significant changes since nut 0.45.5; specifically: + - upsd listens on a different port (was 3305; now 3493 (IANA-assigned)) + - configuration file formats have changed + - ups driver internals haved changed: 'common main.c' + upsdrvctl + - some ups drivers that were not ported to the new common model have + been dropped by the upstream author (submit a patch to rectify) + - the init script is significantly simpler + - the daemons will NOT restart on upgrade from from 0.45.5 or earlier + - there is an /etc/default/nut file that defines whether the daemons + will be started + - removed nut-doc package... far too small to merit being on its own + + -- Luca Filipozzi Mon, 14 Oct 2002 13:33:58 -0700 + +nut (0.45.5-rel-3) unstable; urgency=low + + * "unlink .sock file before starting up; this was keeping the drivers down + after a system crash where the .sock files remained" -- upstream + (Closes: Bug#149150, Bug#139859) + + -- Luca Filipozzi Fri, 7 Jun 2002 22:34:53 -0700 + +nut (0.45.5-rel-2) unstable; urgency=low + + * debian/control: nut and nut-cgi suggest rather than recommend + the documentation package, nut-doc (Closes: Bug#144763) + * debian/nut-cgi.dirs: change absolute paths to relative (Closes: Bug#144746) + * debian/rules: remove upsdrvctl.8 from package (Closes: Bug#143099) + + -- Luca Filipozzi Sun, 2 Jun 2002 21:39:14 -0700 + +nut (0.45.5-rel-1) unstable; urgency=low + + * New upstream release + * debian/rules: moved model daemons to /lib/nut to reduce chance of + namespace conflicts (Closes: Bug#141209) + * debian/rules: moved sample configuration files to + /usr/share/doc/nut/examples (Closes: Bug#140472) + # debian/postinst: change mode and ownership of files in /etc/nut/ on + configure to allow ready by nut/nut (Closes: Bug#142116) + + -- Luca Filipozzi Sun, 14 Apr 2002 13:37:13 -0700 + +nut (0.45.4-rel-3) unstable; urgency=low + + * added runtime dependency on adduser (Closes: Bug#137887) + + -- Luca Filipozzi Sat, 16 Mar 2002 21:41:53 -0800 + +nut (0.45.4-rel-2) unstable; urgency=low + + * Changed debian/rules to call install-misc which installs the development + files upsfetch.[oh]. There are too few development files to merit a + nut-dev package. + + -- Luca Filipozzi Sun, 24 Feb 2002 15:47:56 -0800 + +nut (0.45.4-rel-1) unstable; urgency=low + + * New upstream release + + -- Luca Filipozzi Sun, 24 Feb 2002 11:56:46 -0800 + +nut (0.45.4-pre5-1) unstable; urgency=low + + * New upstream release (Closes: Bug#131673) + + -- Luca Filipozzi Sun, 17 Feb 2002 17:31:32 -0800 + +nut (0.45.1-release-2) unstable; urgency=low + + * applied POWERDOWNFLAG upstream-patch (Closes: Bug#111979) + * applied apcsmart calibration user-patch (Closes: Bug#111978) + * modified models/main.c so that it does a forceshutdown *before* + attempting to chdir into /var/lib/nut (Closes: Bug#112540) + + -- Luca Filipozzi Tue, 23 Oct 2001 16:22:57 -0700 + +nut (0.45.1-release-1) unstable; urgency=low + + * New upstream release + * Fixed conffile problem with nut-cgi package (Closes: #108687) + + -- Luca Filipozzi Sat, 18 Aug 2001 11:58:57 -0700 + +nut (0.45.1-pre4-1) unstable; urgency=low + + * New upstream release (Closes: #101105) + + -- Luca Filipozzi Sun, 5 Aug 2001 13:59:12 -0700 + +nut (0.44.3-pre6-3) unstable; urgency=low + + * Init script now poweroffs the UPS' correctly. (Closes: #96790) + * Changed section of nut-doc to 'doc' (Closes: #94842) + * Not upgrading to new upstream source (0.45.0) until it is released. + * Not upgrading to upstream source (0.44.3) since (0.45.0) is coming soon. + + -- Luca Filipozzi Sun, 3 Jun 2001 16:05:01 -0700 + +nut (0.44.3-pre6-2) unstable; urgency=low + + * init script follows policy (Closes: #90346) + + -- Luca Filipozzi Mon, 19 Mar 2001 15:21:44 -0800 + +nut (0.44.3-pre6-1) unstable; urgency=low + + * New upstream release + * modified configure.in so that it doesn't produce an error when it tests + for the existance of group "nut" (Closes: #88126) + + -- Luca Filipozzi Sun, 11 Mar 2001 11:48:54 -0800 + +nut (0.44.3-pre4-1) unstable; urgency=low + + * New upstream release + * create pidfile modifications reworked to use upstream's writepid() function + * modified init script to support these changes... note that users MUST + follow the convention for the UPS directives in the sample upsd.conf; + a warning has been placed in said file + + -- Luca Filipozzi Sun, 25 Feb 2001 19:19:29 -0800 + +nut (0.44.2-6) unstable; urgency=low + + * modified prerm and postinst so that the daemon(s) is restarted only in the + postinst rather than stopped in prerm and started later in postinst thereby + stopping the daemon(s) shortest possible time (Closes: #83614) + * modified all the daemon(s)' source code so that they create pidfiles + * modified the init script so that it uses the pidfiles + + -- Luca Filipozzi Sun, 11 Feb 2001 18:23:44 -0800 + +nut (0.44.2-5) unstable; urgency=low + + * removed "function" keyword from init script (Closes: #83569) + * modified the pre and post scripts so that #DEBHELPER# is at the bottom + * modified debian/rules so that nut-doc is created (Closes: #85059) + * added support for MGE UPS (thanks to Ryan Murray) (Closes: #83743) + + -- Luca Filipozzi Sat, 10 Feb 2001 20:09:35 -0800 + +nut (0.44.2-4) unstable; urgency=low + + * control file changed such that arch=any for nut-doc (Closes: #83323) + + -- Luca Filipozzi Tue, 23 Jan 2001 17:49:25 -0800 + +nut (0.44.2-3) unstable; urgency=low + + * Added a build conflict against libgd-gif1-dev because it provides + libgd-dev but does not have PNG support. (Closes: #82607) + * Fixed a path problem in debian/rules that had manpages installing + in /share/man/man8 instead of /usr/share/man/man8. + + -- Luca Filipozzi Wed, 17 Jan 2001 19:11:56 -0800 + +nut (0.44.2-2) unstable; urgency=low + + * Modified README.Debian to address bad doc path (Closes: #82460) + * Slight improvements to README.Debian, as well. + + -- Luca Filipozzi Mon, 15 Jan 2001 21:11:39 -0800 + +nut (0.44.2-1) unstable; urgency=low + + * New upstream release + + -- Luca Filipozzi Tue, 9 Jan 2001 08:33:56 -0800 + +nut (0.44.1-4) unstable; urgency=low + + * fixed path problem with cgi files; they *are* in /usr/lib/cgi-bin/nut now + + -- Luca Filipozzi Wed, 22 Nov 2000 08:47:54 -0800 + +nut (0.44.1-3) unstable; urgency=low + + * the following changes suggested by Patrik Rak (Closes: #77144, #77195) + * added better preinst(install) checks for group membership + * modified upstream upsd.conf to use correct paths in the UPS directives + * modified upstream upsd.conf to have better ACCESS directive examples + * modified upstream upsmon.conf to have better MONITOR directive examples + * modified upstream upsmon.conf to use a different POWERDOWNFLAG location + (location must be on the root filesystem... otherwise powerdownflag is + not found!) + * modified init script to parse upsmon.conf for the POWERDOWNFLAG location + * modified init script's poweroff section so that all args are recognized + * improved the documentation, primarily README.Debian + * installation scripts modified so that the dependency on adduser >= 3.14 + can be removed; this allows for the creation of potato packages + * the nut user is no longer part of the dialout group; users will have to + manually change the permissions on the serial port devices; + a nut group is created at the same time as the nut user; users should use + the nut group for the serial port permissions: chown root.nut /dev/ttyS0 + (suggested by Shaul Karl and Patrik Rak) + * the cgi scripts are moved to /usr/lib/cgi-bin/nut/* + (suggested by Shaul Karl) + * init script changed significantly to address argument passing problems + (reported by Shaul Karl) + + -- Luca Filipozzi Thu, 16 Nov 2000 11:42:42 -0800 + +nut (0.44.1-2) unstable; urgency=low + + * removed else clause on detection of existing "nut" user (Closes: #76721) + "install" creates the user nut; "remove" doesn't remove it, "purge" does; + a re-"install" would find an existing "nut" user and exit on error; fixed + * fixed a possible bashism (Closes: #72711) + + -- Luca Filipozzi Fri, 10 Nov 2000 10:06:05 -0800 + +nut (0.44.1-1) unstable; urgency=low + + * New upstream release + * serious repurcussion to existing users of nut... the configuration files + have changed somewhat... a critical debconf warning informs the user of + this fact + * binaries are to remains in /sbin (Closes: #69525) + * init script no longer relies on /usr being mounted (Closes: #70033) + * + + -- Luca Filipozzi Fri, 10 Nov 2000 10:05:55 -0800 + +nut (0.44.0-4) unstable; urgency=low + + * Moved man pages from section 1 to section 8. (Closes: #68819) + * nut-doc suggest rather than recommends nut and nut-cgi. (Closes: #69400) + + -- Luca Filipozzi Fri, 18 Aug 2000 23:15:18 -0700 + +nut (0.44.0-3) unstable; urgency=low + + * Minor fixes to packaging scripts (Closes: #67649). + * Created new doc package: nut-doc. + + -- Luca Filipozzi Mon, 24 Jul 2000 10:18:19 -0700 + +nut (0.44.0-2) unstable; urgency=low + + * Minor fixes to init script and to list of undocumented binaries. + + -- Luca Filipozzi Sat, 22 Jul 2000 19:11:42 -0700 + +nut (0.44.0-1) unstable; urgency=low + + * New upstream release + + -- Luca Filipozzi Thu, 20 Jul 2000 09:26:04 -0700 + +nut (0.43.2-2) unstable; urgency=low + + * fixes: Bug#67316: nut: default permissions could reveal passwords + Files in /etc/nut are now 600 by default. + * fixes: Bug#67314: nut: uses old FHS directory /var/state + Now uses /var/lib as per FHS guidelines. + * fixes: Bug#66988: nut_0.43.2-1(unstable): Missing build dependencies + Added debhelper to the build dependencies. + + -- Luca Filipozzi Tue, 18 Jul 2000 14:55:03 -0700 + +nut (0.43.2-1) unstable; urgency=low + + * Initial Release. + * Modification to upstream source: configure.in, common/common.c, + and models/upscommon.c changed to support different configuration + options... --with-user and --with-group which accept a username + and a groupname (rather than a uid/gid as before). + * Modification to upstream source: /var/state/nut is used instead + of /var/state/ups in conf/upsd.conf. + + -- Luca Filipozzi Wed, 3 May 2000 20:50:30 -0700 + +Local variables: +mode: debian-changelog +End: diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..1e8b314 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +6 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..2af1da2 --- /dev/null +++ b/debian/control @@ -0,0 +1,130 @@ +Source: nut +Section: admin +Priority: optional +Maintainer: Arnaud Quette +Build-Depends: debhelper (>= 7), autoconf, automake, libtool, libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), libhal-dev (>= 0.5.8), hal, libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, libneon27-gnutls-dev | libneon26-gnutls-dev | libneon-dev | libneon27-dev | libneon26-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6) +Standards-Version: 3.8.4 +Homepage: http://www.networkupstools.org +Vcs-Browser: http://svn.debian.org/wsvn/nut +Vcs-Svn: svn://svn.debian.org/nut/trunk + +Package: nut +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6), ${udev} +Recommends: bash-completion +Suggests: nut-cgi, nut-snmp, nut-dev, nut-xml +Provides: ups-monitor, nut-doc, nut-usb +Conflicts: ups-monitor, nut-doc, nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) +Replaces: nut-doc +Description: network UPS tools - core system + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides NUT's core system, and the serial and USB UPS + drivers. In most cases it is sufficient for a basic UPS monitoring + system. + +Package: nut-cgi +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, adduser +Recommends: apache | httpd +Suggests: nut +Replaces: nut (<< 1.1.11) +Description: network UPS tools - web interface + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides an HTTP interface for Network UPS Tools which makes + it possible to monitor the core NUT system with a web browser. + +Package: nut-snmp +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 1.4.1-pre1) +Conflicts: nut (<= 1.4.0) +Description: network UPS tools - SNMP driver + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides snmp-ups, the SNMP multi-MIB driver for UPS, which + supports various MIBs including IETF, MGE, and APC. It adds an SNMP + Manager interface to the core NUT system. + +Package: nut-hal-drivers +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, ${udev} +Conflicts: nut +Provides: hal-ups-support +Breaks: udev (<< 124-1) +Description: network UPS tools - HAL interface + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides add-ons for the hardware abstraction layer (HAL) that + allow desktop environments to monitor locally-connected UPS equipment. The + HAL drivers cannot be used at the same time as the normal NUT upsd. + +Package: nut-xml +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 2.2.2) +Description: network UPS tools - XML/HTTP driver + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides netxml-ups, which supports UPS models from + Eaton or MGE that use an XML/HTTP-based Network Management Card or + Proxy. + +Package: nut-powerman-pdu +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 2.4.0), powerman (>= 2.3.3) +Description: network UPS tools - PowerMan PDU driver + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides powerman-pdu, which allows NUT clients to communicate + with the PowerMan daemon to support PDUs. + +Package: libupsclient1 +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: network UPS tools - client library + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides the shared client library. + +Package: libupsclient1-dev +Section: libdevel +Architecture: any +Depends: libupsclient1 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Provides: nut-dev +Conflicts: nut-dev (<< 2.2.2) +Description: network UPS tools - development files + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides the development files. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..418b4ae --- /dev/null +++ b/debian/copyright @@ -0,0 +1,69 @@ +This package was debianized by Luca Filipozzi on +Wed Jun 28 19:48:05 PDT 2000 + +It was downloaded from http://www.networkupstools.org/ + +Upstream Authors: + + Russell Kroll + Arnaud Quette + Arjen de Korte + Charles Lepple + Kjell Claesson + David Goncalves + and the NUT Team + +Copyright: + + Copyright (C) 2000-2008 Russell Kroll, Arnaud Quette and the NUT Team + +Licenses: + + Most files are licensed under the GNU General Public License (GPL) version 2, + or (at your option) any later version. + + The files in the scripts/python/ directory are released under GNU General + Public License (GPL) version 3, or (at your option) any later version. + + GPL-2 + ----- + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + On Debian systems, the full text of the GNU General Public License v2 + may be found in /usr/share/common-licenses/GPL-2. + + GPL-3 + ----- + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + On Debian systems, the full text of the GNU General Public License v3 + may be found in /usr/share/common-licenses/GPL-3. + + +The Debian packaging is (C) 2008, Arnaud Quette and +is licensed under the GPL, see `/usr/share/common-licenses/GPL'. diff --git a/debian/description.subst b/debian/description.subst new file mode 100644 index 0000000..1ba1c3d --- /dev/null +++ b/debian/description.subst @@ -0,0 +1 @@ +description=nut is a client/server uninterruptible power supply (UPS) monitoring system${Newline}${Space}that permits the sharing of one (or more) UPS between several machines. The${Newline}${Space}'server' monitors the UPS and notifies the 'clients' when the UPS is on${Newline}${Space}battery or has a low battery. diff --git a/debian/hotplug b/debian/hotplug new file mode 100644 index 0000000..36069fe --- /dev/null +++ b/debian/hotplug @@ -0,0 +1,24 @@ +#!/bin/bash +# taken from libgphoto2 + +GROUP=nut + +# for previous udev versions +if [ "$ACTION" = "add" ] && [ -f "$DEVICE" ] +then + # check if $GROUP really exists + if getent group $GROUP > /dev/null; then + chmod 660 "$DEVICE" + chown root:$GROUP "$DEVICE" + fi +fi + +# for recent udev versions +if [ "$ACTION" = "add" ] && [ -r "$DEVNAME" ] +then + # check if $GROUP really exists + if getent group $GROUP > /dev/null; then + chmod 660 "$DEVNAME" + chown root:$GROUP "$DEVNAME" + fi +fi diff --git a/debian/libupsclient1-dev.dirs b/debian/libupsclient1-dev.dirs new file mode 100644 index 0000000..502167f --- /dev/null +++ b/debian/libupsclient1-dev.dirs @@ -0,0 +1 @@ +/lib diff --git a/debian/libupsclient1-dev.install b/debian/libupsclient1-dev.install new file mode 100644 index 0000000..2eabfc9 --- /dev/null +++ b/debian/libupsclient1-dev.install @@ -0,0 +1,5 @@ +debian/tmp/lib/libupsclient.so +debian/tmp/lib/libupsclient.a +debian/tmp/lib/libupsclient.la +debian/tmp/usr/lib/pkgconfig/ +debian/tmp/usr/include diff --git a/debian/libupsclient1-dev.links b/debian/libupsclient1-dev.links new file mode 100644 index 0000000..107c217 --- /dev/null +++ b/debian/libupsclient1-dev.links @@ -0,0 +1 @@ +/lib/libupsclient.so.1.0.0 /usr/lib/libupsclient.so diff --git a/debian/libupsclient1-dev.manpages b/debian/libupsclient1-dev.manpages new file mode 100644 index 0000000..242943a --- /dev/null +++ b/debian/libupsclient1-dev.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man3/*.3 diff --git a/debian/libupsclient1.install b/debian/libupsclient1.install new file mode 100644 index 0000000..7ba3ff0 --- /dev/null +++ b/debian/libupsclient1.install @@ -0,0 +1 @@ +debian/tmp/lib/libupsclient.so.* diff --git a/debian/libupsclient1.postinst b/debian/libupsclient1.postinst new file mode 100644 index 0000000..b86f95b --- /dev/null +++ b/debian/libupsclient1.postinst @@ -0,0 +1,29 @@ +#!/bin/sh -e + +case "$1" in + + configure) + ldconfig + ;; + + abort-upgrade) + # do nothing + ;; + + abort-remove) + # do nothing + ;; + + abort-deconfigure) + # do nothing + ;; + + *) + echo "$0: incorrect arguments: $*" >&2 + exit 1 + ;; + +esac + +#DEBHELPER# + diff --git a/debian/libupsclient1.postrm b/debian/libupsclient1.postrm new file mode 100644 index 0000000..53a6b2d --- /dev/null +++ b/debian/libupsclient1.postrm @@ -0,0 +1,41 @@ +#!/bin/sh -e + +case "$1" in + + remove) + ldconfig + ;; + + purge) + # do nothing + ;; + + upgrade) + # do nothing + ;; + + failed-upgrade) + # do nothing + ;; + + abort-install) + # do nothing + ;; + + abort-upgrade) + # do nothing + ;; + + disappear) + # do nothing + ;; + + *) + echo "$0: incorrect arguments: $*" >&2 + exit 1 + ;; + +esac + +#DEBHELPER# + diff --git a/debian/nut-cgi.README.Debian b/debian/nut-cgi.README.Debian new file mode 100644 index 0000000..0327717 --- /dev/null +++ b/debian/nut-cgi.README.Debian @@ -0,0 +1,39 @@ +Network UPS Tools - CGI Interface - Quick Start for Debian +---------------------------------------------------------- + +(I) Installation +================= + +1) Sample configuration files are provided in /etc/nut/ +Rename without the ".sample" suffix the files hosts.conf, upsstats.html, +upsstats-single.html and optionaly upsset.conf. +Then edit these to match your configuration. + +2) Ensure these configuration files are readable by others + + chmod 755 /etc/nut + chmod 644 /etc/nut/upsset.conf + chmod 644 /etc/nut/hosts.conf + chmod 644 /etc/nut/upsstats.html + chmod 644 /etc/nut/upsstats-single.html + +3) You will then be able to access NUT CGI through a Web browser. +The URL, which depends on your httpd configuration, is: + + http://localhost/cgi-bin/nut/upsstats.cgi + +4) NUT also provides a set of HTML files to wrap the CGIs. +To use it, create a new virtual host with your preferred webserver, and point the +Document Root to: /usr/share/nut/www/ + + You can also add an alias to an existing site, if it is supported: + Alias /nut/ "/usr/share/nut/www/" + + Also ensure that the files in this directory have the suitable permissions. + +For more information on nut-cgi configuration, have a look at the following +manual pages: +- upsstats.html (5) +- hosts.conf (5) +- upsset.conf (5) + diff --git a/debian/nut-cgi.docs b/debian/nut-cgi.docs new file mode 100644 index 0000000..80796c9 --- /dev/null +++ b/debian/nut-cgi.docs @@ -0,0 +1 @@ +data/html/README diff --git a/debian/nut-cgi.install b/debian/nut-cgi.install new file mode 100644 index 0000000..3dc88cc --- /dev/null +++ b/debian/nut-cgi.install @@ -0,0 +1,6 @@ +debian/tmp/etc/nut/hosts.conf +debian/tmp/etc/nut/upsset.conf +debian/tmp/etc/nut/upsstats.html +debian/tmp/etc/nut/upsstats-single.html +debian/tmp/usr/lib/cgi-bin/ +debian/tmp/usr/share/nut/www diff --git a/debian/nut-cgi.manpages b/debian/nut-cgi.manpages new file mode 100644 index 0000000..36a1449 --- /dev/null +++ b/debian/nut-cgi.manpages @@ -0,0 +1,6 @@ +debian/tmp/usr/share/man/man5/hosts.conf.5 +debian/tmp/usr/share/man/man5/upsset.conf.5 +debian/tmp/usr/share/man/man5/upsstats.html.5 +debian/tmp/usr/share/man/man8/upsimage.cgi.8 +debian/tmp/usr/share/man/man8/upsset.cgi.8 +debian/tmp/usr/share/man/man8/upsstats.cgi.8 diff --git a/debian/nut-cgi.postinst b/debian/nut-cgi.postinst new file mode 100644 index 0000000..e082532 --- /dev/null +++ b/debian/nut-cgi.postinst @@ -0,0 +1,55 @@ +#!/bin/sh -e + +case "$1" in + + configure) + + # make sure the nut user exists and has correct memberships + if ! getent group nut >/dev/null; then + addgroup --quiet --system nut + fi + if ! getent passwd nut >/dev/null; then + adduser --quiet --system --ingroup nut --home /var/lib/nut --no-create-home nut + elif ! groups nut | grep -qw nut; then + adduser nut nut + fi +# for Ubuntu, while waiting for a proper debconf +# if ! groups nut | grep -qw dialout; then +# adduser nut dialout +# fi + + # Ensure /etc/nut is readable/crossable for others + if [ -d /etc/nut/ ] ; then + chmod 755 /etc/nut + fi + + # Ensure nut-cgi configuration files are readable by others + for file in upsset.conf hosts.conf upsstats.html upsstats-single.html ; do + if [ -f /etc/nut/$file ] ; then + chmod 644 /etc/nut/$file + fi + done + ;; + + abort-upgrade) + # do nothing + ;; + + abort-remove) + # do nothing + ;; + + abort-deconfigure) + # do nothing + ;; + + *) + echo "$0: incorrect arguments: $*" >&2 + exit 1 + ;; + +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/nut-cgi.postrm b/debian/nut-cgi.postrm new file mode 100644 index 0000000..bdfecf0 --- /dev/null +++ b/debian/nut-cgi.postrm @@ -0,0 +1,46 @@ +#!/bin/sh -e + +case "$1" in + + remove) + # remove sample file if those were previously (wrongly) installed + for file in upsset.conf hosts.conf upsstats.html upsstats-single.html ; do + if [ -f /etc/nut/${file}.sample ] ; then + rm -f /etc/nut/${file}.sample + fi + done + ;; + + purge) + # do nothing + ;; + + upgrade) + # do nothing + ;; + + failed-upgrade) + # do nothing + ;; + + abort-install) + # do nothing + ;; + + abort-upgrade) + # do nothing + ;; + + disappear) + # do nothing + ;; + + *) + echo "$0: incorrect arguments: $*" >&2 + exit 1 + ;; + +esac + +#DEBHELPER# + diff --git a/debian/nut-hal-drivers.docs b/debian/nut-hal-drivers.docs new file mode 100644 index 0000000..78279fb --- /dev/null +++ b/debian/nut-hal-drivers.docs @@ -0,0 +1 @@ +docs/nut-hal.txt diff --git a/debian/nut-hal-drivers.install b/debian/nut-hal-drivers.install new file mode 100644 index 0000000..1ef47a2 --- /dev/null +++ b/debian/nut-hal-drivers.install @@ -0,0 +1,3 @@ +debian/tmp/lib/hal/ /usr/lib/ +debian/tmp/usr/share/hal +debian/tmp/*/udev/ diff --git a/debian/nut-hal-drivers.postinst b/debian/nut-hal-drivers.postinst new file mode 100644 index 0000000..414d5f3 --- /dev/null +++ b/debian/nut-hal-drivers.postinst @@ -0,0 +1,24 @@ +#!/bin/sh + +set -e + +case "$1" in + + configure) + # ask udev to check for new udev rules + [ -x /etc/init.d/udev ] && pidof udevd > /dev/null \ + && udevadm trigger --action=change + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + # do nothing + ;; + + *) + echo "$0: incorrect arguments: $*" >&2 + exit 1 + ;; + +esac + +#DEBHELPER# diff --git a/debian/nut-hal-drivers.preinst b/debian/nut-hal-drivers.preinst new file mode 100644 index 0000000..2de4425 --- /dev/null +++ b/debian/nut-hal-drivers.preinst @@ -0,0 +1,18 @@ +#!/bin/sh + +set -e + +if [ "$1" = install ] || [ "$1" = upgrade ]; then + # Remove previous rules if unchanged, otherwise move to new filename. + if [ -e "/etc/udev/rules.d/52_nut-usbups.rules" ]; then + if [ "`md5sum \"/etc/udev/rules.d/52_nut-usbups.rules\" | sed -e \"s/ .*//\"`" = \ + "`dpkg-query -W -f='${Conffiles}' nut-hal-drivers | sed -n -e \"\\\\' /etc/udev/rules.d/52_nut-usbups.rules's/.* //p\"`" ] + then + rm -f "/etc/udev/rules.d/52_nut-usbups.rules" + else + mv "/etc/udev/rules.d/52_nut-usbups.rules" "/etc/udev/rules.d/52-nut-usbups.rules" + fi + fi +fi + +#DEBHELPER# diff --git a/debian/nut-powerman-pdu.install b/debian/nut-powerman-pdu.install new file mode 100644 index 0000000..f0acaa4 --- /dev/null +++ b/debian/nut-powerman-pdu.install @@ -0,0 +1 @@ +debian/tmp/lib/nut/powerman-pdu diff --git a/debian/nut-powerman-pdu.manpages b/debian/nut-powerman-pdu.manpages new file mode 100644 index 0000000..43bbc81 --- /dev/null +++ b/debian/nut-powerman-pdu.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man8/powerman-pdu.8 diff --git a/debian/nut-snmp.install b/debian/nut-snmp.install new file mode 100644 index 0000000..02dee18 --- /dev/null +++ b/debian/nut-snmp.install @@ -0,0 +1 @@ +debian/tmp/lib/nut/snmp-ups diff --git a/debian/nut-snmp.lintian-overrides b/debian/nut-snmp.lintian-overrides new file mode 100644 index 0000000..24e3f05 --- /dev/null +++ b/debian/nut-snmp.lintian-overrides @@ -0,0 +1,6 @@ +# due to libnetsnmp.la overlinking on dependency_libs +# dpkg-shlibdeps: warning: dependency on libcrypto.so.0.9.8 could be avoided if +# "debian/nut-snmp/lib/nut/snmp-ups" were not uselessly linked against it (they +# use none of its symbols).. +# This will be cleanly solved upstream... +nut-snmp: possible-gpl-code-linked-with-openssl diff --git a/debian/nut-snmp.manpages b/debian/nut-snmp.manpages new file mode 100644 index 0000000..3c9644e --- /dev/null +++ b/debian/nut-snmp.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man8/snmp-ups.8 diff --git a/debian/nut-xml.install b/debian/nut-xml.install new file mode 100644 index 0000000..9c6d56d --- /dev/null +++ b/debian/nut-xml.install @@ -0,0 +1 @@ +debian/tmp/lib/nut/netxml-ups diff --git a/debian/nut-xml.manpages b/debian/nut-xml.manpages new file mode 100644 index 0000000..91a537e --- /dev/null +++ b/debian/nut-xml.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man8/netxml-ups.8 diff --git a/debian/nut.README.Debian b/debian/nut.README.Debian new file mode 100644 index 0000000..7ca7e60 --- /dev/null +++ b/debian/nut.README.Debian @@ -0,0 +1,155 @@ +Network UPS Tools - Quick Start for Debian +------------------------------------------ + +Anyway, here are the quick start instructions for using nut: + +These Quick Start instructions are useful for a UPS connected to a single +machine. For a UPS connected to multiple machines, additional steps must be +taken, as outlined at the end of this file, including the notice regarding +SECURITY CONSIDERATIONS. + +(I) Upgrading +============= + +In case of upgrading, follow instructions given in: +/usr/share/doc/nut/UPGRADING + +Note that service(s) (driver(s), upsd, upsmon) are not restarted upon +upgrade, to avoid service disruption. You have to manually do it. + +(II) Installation +================= + +Configuration files are located in /etc/nut/ +In order to tune NUT configuration according to your needs, follow the below +information, along with the one provided inside these files. + +(1) /etc/nut/nut.conf (see 'man 5 nut.conf' for more information) + Edit /etc/nut/nut.conf and modify the "MODE" variable according to your + configuration. + + You can also fine tune the daemons options through UPSD_OPTIONS and + UPSMON_OPTIONS. + +The steps 2 to 5 are only required if you use a "standalone" or "netserver" +MODE. If you are running in "netclient" MODE, jump directly to section 6. + +(2) /etc/nut/ups.conf (see 'man 5 ups.conf' for more information) + + Edit /etc/nut/ups.conf and add something like: + [myups] + driver = usbhid-ups + port = auto + Use the appropriate driver for your UPS and select the correct port. + To select the driver, take a look at the UPS compatibility list: + /usr/share/nut/driver.list + + If you have more than one UPS, add as many entries as needed. + + If you wish to test manually whether your configuration of ups.conf is + correct, you may invoke upsdrvctl by hand (as root): + /sbin/upsdrvctl start [myups] + /sbin/upsdrvctl stop [myups] + + Ensure that the permissions of ups.conf do not permit the world to + read it. It should already be thus, but the following command + accomplishes this: + chown root:nut /etc/nut/ups.conf + chmod 640 /etc/nut/ups.conf + +(3) device port permissions + The nut user need to be able to access the device port both for reading and + writing. + + For serial devices, there are two possibilities: + + a) You can add the nut user to the dialout group. + The following command accomplishes this: + addgroup nut dialout + + This is not done by default for security reason on Debian, but is applied + on Ubuntu. + + b) Another solution, for system supporting udev, is to create a file + (for example /etc/udev/rules.d/52_nut-serialups.rules), placed + after 020_permissions.rules and to add something like: + KERNEL=="ttyS1", GROUP="nut" + + where 'ttyS1' has to be replaced by the exact name of your serial port. + + For USB devices, permissions are automatically set by the + 52-nut-usbups.rules udev rules file. + +(4) /etc/nut/upsd.conf (see 'man 5 upsd.conf' for more information) + the default /etc/nut/upsd.conf is fine for a "standalone" configuration. + If you are in "netserver" MODE, you will have to modify the LISTEN option + to something suitable. + + Ensure that the permissions of upsd.conf do not permit the world to + read it. It should already be thus, but the following command + accomplishes this: + chown root:nut /etc/nut/upsd.conf + chmod 640 /etc/nut/upsd.conf + +(5) /etc/nut/upsd.users (see 'man 5 upsd.users' for more information) + Edit /etc/nut/upsd.users and add something like the following, + without the comments, in order to define a user: + [monmaster] + password = blah + upsmon master + Please use *different* usernames and passwords than you use on your + system; see the note regarding SECURITY CONSIDERATIONS at the end + of this file. + + Ensure that the permissions of upsd.users do not permit the world to + read it. It should already be thus, but the following command + accomplishes this: + chown root:nut /etc/nut/upsd.users + chmod 640 /etc/nut/upsd.users + +(6) /etc/nut/upsmon.conf (see 'man 5 upsmon.conf' for more information) + Edit /etc/nut/upsmon.conf and add something like the following: + MONITOR myups@localhost 1 monmaster blah master + POWERDOWNFLAG /etc/killpower + SHUTDOWNCMD "/sbin/shutdown -h +0" + + Ensure that the permissions of upsmon.conf do not permit the world to + read it. It should already be thus, but the following commands + accomplishes this: + chown root:nut /etc/nut/upsmon.conf + chmod 640 /etc/nut/upsmon.conf + +(7) /etc/default/nut + This file is not used anymore. + nut.conf provides all the needed features to replace this file. + +(8) start the daemon + Invoke '/etc/init.d/nut start' to start the daemon(s). Check + /var/log/syslog to ensure that upsd, appropriate drivers, and upsmon + started up correctly. + + +Additional Notes for Sharing a UPS +---------------------------------- +If you have multiple machines connected to the same UPS, you will need to +(a) modify the access control lists in upsd.conf on the server; +(b) add additional users to upsd.users on the server; and +(c) configure upsmon.conf on the clients. + +Please note that upsmon on a client machine and upsd on a server machine need +to communicate via your network. This means that you need to ensure that all +the networking equipment (hub, switch, router, etc.) between the client and the +server is powered by the UPS. Otherwise, when the power goes down, the network +connection between the client machine will be broken and the client will not +be told to shut down. + +SECURITY CONSIDERATIONS +----------------------- +Finally, please be aware of the following SECURITY CONSIDERATIONS: the TCP +communications between the client daemon, upsmon, and the server daemon, upsd, +send the username and passwords defined in upsd.users and used in upsmon.conf +over the wire UNENCRYPTED. This means that somebody could sniff the username +and password. A version that encrypts the connection using SSL should be +available someday. + +Please see the documentation in /usr/share/doc/nut/docs for more information. diff --git a/debian/nut.TODO.Debian b/debian/nut.TODO.Debian new file mode 100644 index 0000000..3a35bbc --- /dev/null +++ b/debian/nut.TODO.Debian @@ -0,0 +1,11 @@ +- address the /var/www issue with upstream +- rewrite and enhance the init script (log output, LSB, ...) +- audit and solve the lintian reports... +- factorise install rules (possibly use CDBS) +- consider an SSL/TLS set of packages (ie nut-ssl, ...) + or help the port to NSS +- apply when available the NUT Packaging Standard (NPS) + ie create a nut-client package +- install the device-recorder.sh script (with nut-client or nut-dev?) +- consider joining the powermgt effort: + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=55123 diff --git a/debian/nut.dirs b/debian/nut.dirs new file mode 100644 index 0000000..0082856 --- /dev/null +++ b/debian/nut.dirs @@ -0,0 +1,4 @@ +/etc/nut +/bin +/sbin +/var/lib/nut diff --git a/debian/nut.docs b/debian/nut.docs new file mode 100644 index 0000000..90f2328 --- /dev/null +++ b/debian/nut.docs @@ -0,0 +1,5 @@ +AUTHORS +MAINTAINERS +README +UPGRADING +docs diff --git a/debian/nut.init b/debian/nut.init new file mode 100644 index 0000000..50706ed --- /dev/null +++ b/debian/nut.init @@ -0,0 +1,204 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: nut +# Required-Start: $local_fs $syslog $network $remote_fs +# Required-Stop: $local_fs $syslog $network $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Network UPS Tools initscript +# Description: This script take care of starting and stopping the +# Network UPS Tools components. When needed, it also +# handle the UPS hardware shutdown. +### END INIT INFO + +# Author: Arnaud Quette + +PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin + +NAME=nut +DESC="Network UPS Tools" +DEFAULT=/etc/default/nut +CONFIG=/etc/nut/nut.conf + +. /lib/lsb/init-functions + +# set upsd specific options. use "man upsd" for more info +UPSD_OPTIONS="" + +# set upsmon specific options. use "man upsmon" for more info +UPSMON_OPTIONS="" + +# Include defaults if available (transition period) +if [ -f $DEFAULT ] ; then + . $DEFAULT +fi + +# Include NUT nut.conf +if [ -f $CONFIG ] ; then + . $CONFIG +fi + +# Explicitly require the configuration to be done in /etc/nut/nut.conf +if [ "x$MODE" = "xnone" -o -z "$MODE" ] ; then + log_action_msg "$NAME disabled, please adjust the configuration to your needs" + log_action_msg "Then set MODE to a suitable value in $CONFIG to enable it" + # exit success to avoid breaking the install process! + exit 0 +fi + +pid_dir=/var/run/nut +upsmon_pid=${pid_dir}/upsmon.pid +upsd_pid=${pid_dir}/upsd.pid +upsd=/sbin/upsd +upsdrvctl=/sbin/upsdrvctl +upsmon=/sbin/upsmon +log=">/dev/null 2>/dev/null" + +# Check if /var/run/nut exists and has the correct perms +check_var_directory() { + [ ! -d ${pid_dir} ] && mkdir -p ${pid_dir} \ + && chown root:nut ${pid_dir} \ + && chmod 770 ${pid_dir} +} + +# check if the right components are running +check_status() { + case "$MODE" in + standalone|netserver) + status_of_proc -p $upsd_pid $upsd upsd + status_of_proc -p $upsmon_pid $upsmon upsmon + ;; + netclient) + status_of_proc -p $upsmon_pid $upsmon upsmon + ;; + none|*) + ;; + esac +} + +start_stop_server () { + case "$MODE" in + standalone|netserver) + case "$1" in + start) + ! $upsdrvctl start >/dev/null 2>&1 && \ + log_progress_msg "(driver(s) failed)" || log_progress_msg "driver(s)" + start-stop-daemon -S -q -p $upsd_pid -x $upsd \ + -- $UPSD_OPTIONS >/dev/null 2>&1 + ;; + stop) + start-stop-daemon -K -o -q -p $upsd_pid -n upsd >/dev/null 2>&1 + ! /sbin/upsdrvctl stop >/dev/null 2>&1 && \ + log_progress_msg "(driver(s) failed)" || log_progress_msg "driver(s)" + ;; + esac + ;; + none|netclient|*) + return 1 + ;; + esac +} + +start_stop_client () { + case "$MODE" in + standalone|netserver|netclient) + case "$1" in + start) + start-stop-daemon -S -q -p $upsmon_pid -x $upsmon \ + -- $UPSMON_OPTIONS >/dev/null 2>&1 + ;; + stop) + start-stop-daemon -K -o -q -p $upsmon_pid -n upsmon >/dev/null 2>&1 + ;; + esac + ;; + none|*) + return 1 + ;; + esac +} + +case "$1" in + + start) + log_daemon_msg "Starting $DESC" + check_var_directory + start_stop_server start && log_progress_msg "upsd" + start_stop_client start && log_progress_msg "upsmon" + log_end_msg 0 + ;; + + stop) + log_daemon_msg "Stopping $DESC" + start_stop_server stop && log_progress_msg "upsd" + start_stop_client stop && log_progress_msg "upsmon" + log_end_msg 0 + ;; + + reload) + $upsd -c reload >/dev/null 2>&1 + $upsmon -c reload >/dev/null 2>&1 + ;; + + restart|force-reload) + log_daemon_msg "Restarting $DESC" + start_stop_client stop + start_stop_server stop + sleep 5 + check_var_directory + start_stop_server start && log_progress_msg "upsd" + start_stop_client start && log_progress_msg "upsmon" + log_end_msg 0 + ;; + + status) + #log_daemon_msg "Checking status of $DESC" + echo "Checking status of $DESC" + check_status + exit $? + ;; + + poweroff) + flag=`sed -ne 's#^ *POWERDOWNFLAG *\(.*\)$#\1#p' /etc/nut/upsmon.conf` + wait_delay=`sed -ne 's#^ *POWEROFF_WAIT= *\(.*\)$#\1#p' /etc/nut/nut.conf` + if [ -f "$flag" ] ; then + if $upsmon -K >/dev/null 2>&1 ; then + log_daemon_msg "Shutting down the UPS ..." + sleep 1 + if $upsdrvctl shutdown ; then + sleep 5 + log_progress_msg "Waiting for UPS to cut the power" + log_end_msg 0 + else + log_progress_msg "Shutdown failed." + log_progress_msg "Waiting for UPS batteries to run down" + log_end_msg 0 + fi + if [ "$wait_delay" ] ; then + log_daemon_msg " (will reboot after $wait_delay) ..." + sleep "$wait_delay" + invoke-rc.d reboot stop + fi + else + log_daemon_msg "Power down flag is not set (UPS shutdown not needed)" + fi + else + if [ -z "$flag" ] ; then + log_daemon_msg "##########################################################" + log_progress_msg "## POWERDOWNFLAG is not defined in /etc/nut/upsmon.conf ##" + log_progress_msg "## ##" + log_progress_msg "## Please read the Manual page upsmon.conf(5) ##" + log_progress_msg "##########################################################" + log_end_msg 0 + fi + fi + ;; + + *) + N=/etc/init.d/$NAME + echo "Usage: $N {start|stop|reload|restart|force-reload|status|poweroff}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/debian/nut.install b/debian/nut.install new file mode 100644 index 0000000..ad72c3c --- /dev/null +++ b/debian/nut.install @@ -0,0 +1,56 @@ +debian/tmp/bin/upslog +debian/tmp/bin/upsc +debian/tmp/bin/upsrw +debian/tmp/bin/upscmd +debian/tmp/sbin/ +debian/tmp/usr/share/nut/cmdvartab +debian/tmp/usr/share/nut/driver.list +debian/tmp/*/udev/ +debian/tmp/etc/nut/nut.conf +debian/tmp/etc/nut/ups.conf +debian/tmp/etc/nut/upsd.conf +debian/tmp/etc/nut/upsd.users +debian/tmp/etc/nut/upsmon.conf +debian/tmp/etc/nut/upssched.conf +debian/tmp/etc/bash_completion.d/nut +debian/tmp/lib/nut/genericups +debian/tmp/lib/nut/mge-shut +debian/tmp/lib/nut/rhino +debian/tmp/lib/nut/bestups +debian/tmp/lib/nut/bestfortress +debian/tmp/lib/nut/usbhid-ups +debian/tmp/lib/nut/apcsmart +debian/tmp/lib/nut/belkin +debian/tmp/lib/nut/blazer_ser +debian/tmp/lib/nut/blazer_usb +debian/tmp/lib/nut/clone +debian/tmp/lib/nut/ivtscd +debian/tmp/lib/nut/metasys +debian/tmp/lib/nut/etapro +debian/tmp/lib/nut/tripplite_usb +debian/tmp/lib/nut/bcmxcp +debian/tmp/lib/nut/bestuferrups +debian/tmp/lib/nut/gamatronic +debian/tmp/lib/nut/newmge-shut +debian/tmp/lib/nut/safenet +debian/tmp/lib/nut/isbmex +debian/tmp/lib/nut/masterguard +debian/tmp/lib/nut/belkinunv +debian/tmp/lib/nut/tripplite +debian/tmp/lib/nut/upscode2 +debian/tmp/lib/nut/solis +debian/tmp/lib/nut/oneac +debian/tmp/lib/nut/mge-utalk +debian/tmp/lib/nut/powerpanel +debian/tmp/lib/nut/bestfcom +debian/tmp/lib/nut/liebert +debian/tmp/lib/nut/powercom +debian/tmp/lib/nut/bcmxcp_usb +debian/tmp/lib/nut/victronups +debian/tmp/lib/nut/tripplitesu +debian/tmp/lib/nut/optiups +debian/tmp/lib/nut/megatec_usb +debian/tmp/lib/nut/upsdrvctl /sbin +debian/tmp/lib/nut/megatec +debian/tmp/lib/nut/everups +debian/tmp/lib/nut/dummy-ups diff --git a/debian/nut.link b/debian/nut.link new file mode 100644 index 0000000..8453f4f --- /dev/null +++ b/debian/nut.link @@ -0,0 +1,2 @@ +etc/init.d/nut etc/init.d/ups-monitor + diff --git a/debian/nut.lintian-overrides b/debian/nut.lintian-overrides new file mode 100644 index 0000000..432491d --- /dev/null +++ b/debian/nut.lintian-overrides @@ -0,0 +1,2 @@ +nut: script-in-etc-init.d-not-registered-via-update-rc.d + diff --git a/debian/nut.manpages b/debian/nut.manpages new file mode 100644 index 0000000..a377aa9 --- /dev/null +++ b/debian/nut.manpages @@ -0,0 +1,51 @@ +debian/tmp/usr/share/man/man5/ups.conf.5 +debian/tmp/usr/share/man/man5/upsd.conf.5 +debian/tmp/usr/share/man/man5/upsd.users.5 +debian/tmp/usr/share/man/man5/upsmon.conf.5 +debian/tmp/usr/share/man/man5/upssched.conf.5 +debian/tmp/usr/share/man/man8/apcsmart.8 +debian/tmp/usr/share/man/man8/bcmxcp.8 +debian/tmp/usr/share/man/man8/bcmxcp_usb.8 +debian/tmp/usr/share/man/man8/belkin.8 +debian/tmp/usr/share/man/man8/belkinunv.8 +debian/tmp/usr/share/man/man8/bestfcom.8 +debian/tmp/usr/share/man/man8/bestuferrups.8 +debian/tmp/usr/share/man/man8/bestups.8 +debian/tmp/usr/share/man/man8/bestfortress.8 +debian/tmp/usr/share/man/man8/blazer.8 +debian/tmp/usr/share/man/man8/clone.8 +debian/tmp/usr/share/man/man8/dummy-ups.8 +debian/tmp/usr/share/man/man8/etapro.8 +debian/tmp/usr/share/man/man8/everups.8 +debian/tmp/usr/share/man/man8/gamatronic.8 +debian/tmp/usr/share/man/man8/genericups.8 +debian/tmp/usr/share/man/man8/isbmex.8 +debian/tmp/usr/share/man/man8/liebert.8 +debian/tmp/usr/share/man/man8/masterguard.8 +debian/tmp/usr/share/man/man8/megatec.8 +debian/tmp/usr/share/man/man8/megatec_usb.8 +debian/tmp/usr/share/man/man8/metasys.8 +debian/tmp/usr/share/man/man8/mge-shut.8 +debian/tmp/usr/share/man/man8/mge-utalk.8 +debian/tmp/usr/share/man/man8/nutupsdrv.8 +debian/tmp/usr/share/man/man8/oneac.8 +debian/tmp/usr/share/man/man8/optiups.8 +debian/tmp/usr/share/man/man8/powercom.8 +debian/tmp/usr/share/man/man8/powerpanel.8 +debian/tmp/usr/share/man/man8/rhino.8 +debian/tmp/usr/share/man/man8/safenet.8 +debian/tmp/usr/share/man/man8/solis.8 +debian/tmp/usr/share/man/man8/tripplite.8 +debian/tmp/usr/share/man/man8/tripplitesu.8 +debian/tmp/usr/share/man/man8/tripplite_usb.8 +debian/tmp/usr/share/man/man8/upsc.8 +debian/tmp/usr/share/man/man8/upscmd.8 +debian/tmp/usr/share/man/man8/upscode2.8 +debian/tmp/usr/share/man/man8/upsd.8 +debian/tmp/usr/share/man/man8/upsdrvctl.8 +debian/tmp/usr/share/man/man8/upslog.8 +debian/tmp/usr/share/man/man8/upsmon.8 +debian/tmp/usr/share/man/man8/upsrw.8 +debian/tmp/usr/share/man/man8/upssched.8 +debian/tmp/usr/share/man/man8/usbhid-ups.8 +debian/tmp/usr/share/man/man8/victronups.8 diff --git a/debian/nut.postinst b/debian/nut.postinst new file mode 100644 index 0000000..55d88cb --- /dev/null +++ b/debian/nut.postinst @@ -0,0 +1,136 @@ +#!/bin/sh -e + +case "$1" in + + configure) + + # make sure the nut user exists and has correct memberships + if ! getent group nut >/dev/null; then + addgroup --quiet --system nut + fi + if ! getent passwd nut >/dev/null; then + adduser --quiet --system --ingroup nut --home /var/lib/nut --no-create-home nut + elif ! groups nut | grep -qw nut; then + adduser nut nut + fi +# for Ubuntu, while waiting for a proper debconf +# if ! groups nut | grep -qw dialout; then +# adduser nut dialout +# fi + + # make sure that conffiles are secured and have the correct ownerships + if [ -d /etc/nut/ ] ; then + chown root:nut /etc/nut/ + fi + for file in nut.conf ups.conf upsd.conf upsmon.conf upsd.users upssched.conf ; do + if [ -f /etc/nut/$file ] ; then + chown root:nut /etc/nut/$file + chmod 640 /etc/nut/$file + fi + done + + # make sure that /var/run/nut exists and has the correct ownerships + if [ ! -d /var/run/nut ] ; then + mkdir -p /var/run/nut + fi + if [ -d /var/run/nut ] ; then + chown root:nut /var/run/nut + chmod 770 /var/run/nut + fi + + # make sure that /var/lib/nut has the correct permissions and ownerships + if [ -d /var/lib/nut ] ; then + chown root:nut /var/lib/nut + chmod 770 /var/lib/nut + fi + + # ask udev to check for new udev rules + [ -x /etc/init.d/udev ] && pidof udevd > /dev/null \ + && udevadm trigger --action=change + + # 557178 udevadm trigger --subsystem-match=usb + + # migrate /etc/default/nut to /etc/nut/nut.conf (part #2) + if dpkg --compare-versions "$2" lt-nl "2.4.1-2" ; then + # source the temporary /etc/default/nut.bak file + if [ -f /etc/default/nut.bak ] ; then + . /etc/default/nut.bak + + # FIXME: use a template (and debconf to output?) + echo "migrating /etc/default/nut to /etc/nut/nut.conf" + + # pre process the config + case "$START_UPSD" in + y|Y|yes|YES|Yes) + START_UPSD=yes + ;; + *) + START_UPSD=no + ;; + esac + case "$START_UPSMON" in + y|Y|yes|YES|Yes) + START_UPSMON=yes + ;; + *) + START_UPSMON=no + ;; + esac + + # now process the result + if [ "x$START_UPSD" = "xyes" ] ; then + if [ "x$START_UPSMON" = "xyes" ] ; then + # can also be netserver + NUT_MODE=standalone + #else not processed since it should be an error! + fi + else + if [ "x$START_UPSMON" = "xyes" ] ; then + NUT_MODE=netclient + else + NUT_MODE=none + fi + fi + + # output back the MODE to nut.conf + sed "s/^MODE\(.*\)/MODE=$NUT_MODE/" /etc/nut/nut.conf > /etc/nut/nut.conf.new + + # append the content of default, removing START_* / start... + grep -iv 'START' /etc/default/nut.bak >> /etc/nut/nut.conf.new + # move back to nut.conf + mv /etc/nut/nut.conf.new /etc/nut/nut.conf + # and to init.d/nut + #if [ -f /etc/init.d/nut ] ; then + # sed "s/^UPSD_OPTIONS\(.*\)/UPSD_OPTIONS=\"$UPSD_OPTIONS\"/" /etc/init.d/nut > /etc/init.d/nut.new + # sed "s/^UPSMON_OPTIONS\(.*\)/UPSMON_OPTIONS=\"$UPSMON_OPTIONS\"/" /etc/init.d/nut.new > /etc/init.d/nut + #fi + rm -f /etc/default/nut.bak /etc/default/nut + fi + else + # re process nut.conf MODE so that it can be sourced + NUT_MODE=`grep -e '^ *MODE' /etc/nut/nut.conf | tr -d " "` + sed "s/^ *MODE.*/$NUT_MODE/" /etc/nut/nut.conf > /etc/nut/nut.conf.new + mv /etc/nut/nut.conf.new /etc/nut/nut.conf + fi + ;; + + abort-upgrade) + # do nothing + ;; + + abort-remove) + # do nothing + ;; + + abort-deconfigure) + # do nothing + ;; + + *) + echo "$0: incorrect arguments: $*" >&2 + exit 1 + ;; + +esac + +#DEBHELPER# diff --git a/debian/nut.postrm b/debian/nut.postrm new file mode 100644 index 0000000..385c39f --- /dev/null +++ b/debian/nut.postrm @@ -0,0 +1,53 @@ +#!/bin/sh -e + +case "$1" in + + remove) + # remove sample file if those were previously (wrongly) installed + for file in ups.conf upsd.conf upsmon.conf upsd.users upssched.conf ; do + rm -f /etc/nut/${file}.sample + done + ;; + + purge) + # remove udev rules files + rm -f /etc/udev/rules.d/025_nut-usbups.rules + rm -f /etc/udev/rules.d/52_nut-usbups.rules + rm -f /etc/udev/rules.d/52-nut-usbups.rules + # remove the nut user + if getent passwd nut >/dev/null; then + deluser --quiet nut + fi + # handle a dpkg bug + [ -d /etc/nut ] && rmdir --ignore-fail-on-non-empty /etc/nut >/dev/null 2>&1 + ;; + + upgrade) + # do nothing + ;; + + failed-upgrade) + # do nothing + ;; + + abort-install) + # do nothing + ;; + + abort-upgrade) + # do nothing + ;; + + disappear) + # do nothing + ;; + + *) + echo "$0: incorrect arguments: $*" >&2 + exit 1 + ;; + +esac + +#DEBHELPER# + diff --git a/debian/nut.preinst b/debian/nut.preinst new file mode 100644 index 0000000..9999abe --- /dev/null +++ b/debian/nut.preinst @@ -0,0 +1,26 @@ +#!/bin/sh -e + +if [ "$1" = upgrade ]; then + # remove the obsolete udev file + [ -f /etc/udev/rules.d/025_nut-usbups.rules ] && rm -f /etc/udev/rules.d/025_nut-usbups.rules + + # Remove previous rules if unchanged, otherwise move to new filename. + if [ -e "/etc/udev/rules.d/52_nut-usbups.rules" ]; then + if [ "`md5sum \"/etc/udev/rules.d/52_nut-usbups.rules\" | sed -e \"s/ .*//\"`" = \ + "`dpkg-query -W -f='${Conffiles}' nut | sed -n -e \"\\\\' /etc/udev/rules.d/52_nut-usbups.rules's/.* //p\"`" ] + then + rm -f "/etc/udev/rules.d/52_nut-usbups.rules" + else + mv "/etc/udev/rules.d/52_nut-usbups.rules" "/etc/udev/rules.d/52-nut-usbups.rules" + fi + fi + + # migrate /etc/default/nut to /etc/nut/nut.conf (part #1) + # we need to do this before default gets trashed + if [ -f /etc/default/nut ] ; then + # backup /etc/default/nut + cp /etc/default/nut /etc/default/nut.bak + fi +fi + +#DEBHELPER# diff --git a/debian/nut.prerm b/debian/nut.prerm new file mode 100644 index 0000000..2c9c2e1 --- /dev/null +++ b/debian/nut.prerm @@ -0,0 +1,42 @@ +#!/bin/sh -e + +# the DEBHELPER token is purposely not used +# because we don't want the daemon to be +# stopped during an upgrade + +case "$1" in + + remove) + # nut-usb specifics + [ -f /etc/hotplug/usb/libhid.usermap ] && rm -f /etc/hotplug/usb/libhid.usermap + [ -f /etc/hotplug/usb/libhidups ] && rm -f /etc/hotplug/usb/libhidups + + [ -L /usr/doc/nut ] && rm -f /usr/doc/nut + # do stop the daemon on remove + invoke-rc.d nut stop && sleep 1 + [ -d /var/run/nut ] && rm -f /var/run/nut/*.pid + ;; + + upgrade) + [ -L /usr/doc/nut ] && rm -f /usr/doc/nut + # do not stop the daemon on upgrade + ;; + + failed-upgrade) + # do nothing + ;; + + deconfigure) + # do nothing + ;; + + *) + echo "$0: incorrect arguments: $*" >&2 + exit 1 + ;; + +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..f7373d6 --- /dev/null +++ b/debian/rules @@ -0,0 +1,138 @@ +#!/usr/bin/make -f + +#export DH_VERBOSE=1 +export DH_OPTIONS= + +DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null) +CFLAGS+=$(if $(findstring debug,$(DEB_BUILD_OPTIONS)),-g) +CFLAGS+=$(if $(findstring noopt,$(DEB_BUILD_OPTIONS)),-O0,-O2) +CONFIGUREFLAGS+=$(if $(findstring nostrip,$(DEB_BUILD_OPTIONS)),,--enable-strip) +CONFIGUREFLAGS+=--build=$(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +CONFIGUREFLAGS+=--host=$(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +CONFIGUREFLAGS+=$(if $(wildcard /usr/include/linux/hiddev.h),--with-linux-hiddev=/usr/include/linux/hiddev.h,--without-linux-hiddev) +ifeq (linux,$(DEB_HOST_ARCH_OS)) + CONFIGUREFLAGS+=--with-udev-dir=/lib/udev +endif + +configure: patch configure-stamp +configure-stamp: + dh_testdir + CFLAGS='$(CFLAGS)' ./configure $(CONFIGUREFLAGS) \ + --prefix=/usr \ + --exec-prefix=/ \ + --sysconfdir=/etc/nut \ + --mandir=/usr/share/man \ + --libdir=/lib \ + --includedir=/usr/include \ + --without-ssl \ + --with-hal \ + --with-cgi \ + --with-dev \ + --enable-static \ + --with-statepath=/var/run/nut \ + --with-altpidpath=/var/run/nut \ + --with-drvpath=/lib/nut \ + --with-cgipath=/usr/lib/cgi-bin/nut \ + --with-htmlpath=/usr/share/nut/www \ + --with-pidpath=/var/run/nut \ + --datadir=/usr/share/nut \ + --with-pkgconfig-dir=/usr/lib/pkgconfig \ + --with-user=nut --with-group=nut + touch $@ + +build: configure +build: build-stamp +build-stamp: + dh_testdir + $(MAKE) + touch $@ + +clean: clean-patched unpatch +clean-patched: + dh_testdir + dh_testroot + rm -f configure-stamp build-stamp install-stamp + [ ! -f Makefile ] || $(MAKE) distclean + dh_clean +# debconf-updatepo +# -test -r /usr/share/misc/config.sub && \ +# cp -f /usr/share/misc/config.sub config.sub +# -test -r /usr/share/misc/config.guess && \ +# cp -f /usr/share/misc/config.guess config.guess + +patch: patch-stamp +patch-stamp: +# dpatch apply-all +# touch $@ + # run autoreconf for dpatch +# autoreconf + +unpatch: +# dpatch deapply-all +# rm -rf patch-stamp debian/patched + +uninstall: + dh_testdir + dh_testroot + rm -f install-stamp + dh_prep + +install: build +install: install-stamp +install-stamp: DH_OPTIONS= +install-stamp: + dh_testdir + dh_testroot + dh_prep + dh_installdirs + + $(MAKE) install \ + DESTDIR=$(CURDIR)/debian/tmp RUNUID=65534 RUNGID=65534 + + # install the bash completion script + mkdir -p $(CURDIR)/debian/tmp/etc/bash_completion.d + cp $(CURDIR)/scripts/misc/nut.bash_completion \ + $(CURDIR)/debian/tmp/etc/bash_completion.d/nut + + # install the default configuration + for f in $(CURDIR)/debian/tmp/etc/nut/*; do \ + nf=`basename $${f} | sed 's/\(.*\).sample/\1/'`; \ + mv $${f} $(CURDIR)/debian/tmp/etc/nut/$${nf}; \ + done + + dh_installchangelogs ChangeLog + dh_installinit -- start 50 2 3 4 5 . stop 50 0 1 6 . + dh_install + dh_installman + dh_installdocs -XMakefile + dh_link + touch $@ + +binary-indep: DH_OPTIONS=-i +binary-indep: install + +binary-arch: DH_OPTIONS=-a +binary-arch: install + dh_testdir + dh_testroot +# dh_installdebconf + dh_strip + dh_compress + dh_fixperms + dh_makeshlibs + dh_lintian -pnut + dh_installdeb + dh_shlibdeps +# dh_shlibdeps -Xlibupsclient.a +ifeq (linux,$(DEB_HOST_ARCH_OS)) + dh_gencontrol -- -Vudev="udev (>= 0.124-1)" +# for Ubuntu +# dh_gencontrol -- -Vudev="udev (>= 136-1)" +else + dh_gencontrol -- -Vudev="" +endif + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary configure install uninstall patch unpatch diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..68b0632 --- /dev/null +++ b/debian/watch @@ -0,0 +1,2 @@ +version=2 +http://www.networkupstools.org/source/2.4/nut-(.*)\.tar\.gz debian uupdate From 69151f849c3e8f7a4564ce7e16abe90348e69010 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 21 Dec 2010 14:11:23 +0100 Subject: [PATCH 002/291] Commit NMU changes from Tim Retout --- debian/changelog | 8 ++++++++ drivers/libhid.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 914c006..e8982c6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +nut (2.4.3-1.1) unstable; urgency=low + + * Non-maintainer upload. + * drivers/libhid.c: Apply r2407 from upstream to fix bug with some + low speed UPS devices. (Closes: #583371) + + -- Tim Retout Fri, 15 Oct 2010 19:31:39 +0100 + nut (2.4.3-1) unstable; urgency=low * New upstream release (Closes: #544390, #528222, #539747, #526811, diff --git a/drivers/libhid.c b/drivers/libhid.c index 9387657..f2e8fbb 100644 --- a/drivers/libhid.c +++ b/drivers/libhid.c @@ -141,7 +141,7 @@ static int refresh_report_buffer(reportbuf_t *rbuf, hid_dev_handle_t udev, HIDDa { int id = pData->ReportID; int r; - unsigned char buf[SMALLBUF]; + unsigned char buf[8]; if (rbuf->ts[id] + age > time(NULL)) { /* buffered report is still good; nothing to do */ @@ -469,7 +469,7 @@ bool_t HIDSetItemValue(hid_dev_handle_t udev, const char *hidpath, double Value, */ int HIDGetEvents(hid_dev_handle_t udev, HIDData_t **event, int eventsize) { - unsigned char buf[SMALLBUF]; + unsigned char buf[8]; int itemCount = 0; int buflen, r, i; HIDData_t *pData; From 5bc443a878f83661def30275292dd98c4be6805d Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 21 Dec 2010 14:30:25 +0100 Subject: [PATCH 003/291] Bump Standards-Version to 3.9.1 --- debian/changelog | 6 ++++++ debian/control | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index e8982c6..8cd6ddf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +nut (2.4.3-2) UNRELEASED; urgency=low + + * Bump Standards-Version to 3.9.1 + + -- Laurent Bigonville Tue, 21 Dec 2010 14:29:47 +0100 + nut (2.4.3-1.1) unstable; urgency=low * Non-maintainer upload. diff --git a/debian/control b/debian/control index 2af1da2..e495ceb 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: admin Priority: optional Maintainer: Arnaud Quette Build-Depends: debhelper (>= 7), autoconf, automake, libtool, libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), libhal-dev (>= 0.5.8), hal, libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, libneon27-gnutls-dev | libneon26-gnutls-dev | libneon-dev | libneon27-dev | libneon26-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6) -Standards-Version: 3.8.4 +Standards-Version: 3.9.1 Homepage: http://www.networkupstools.org Vcs-Browser: http://svn.debian.org/wsvn/nut Vcs-Svn: svn://svn.debian.org/nut/trunk From f3d62f13024619d83386c94664fa4138cad18647 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 21 Dec 2010 14:32:39 +0100 Subject: [PATCH 004/291] Update Vcs-* fields to new GIT repository --- debian/changelog | 6 ++++-- debian/control | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 8cd6ddf..f25c33d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,10 @@ nut (2.4.3-2) UNRELEASED; urgency=low - * Bump Standards-Version to 3.9.1 + * debian/control: + - Bump Standards-Version to 3.9.1 + - Update Vcs-* fields to new GIT repository - -- Laurent Bigonville Tue, 21 Dec 2010 14:29:47 +0100 + -- Laurent Bigonville Tue, 21 Dec 2010 14:31:24 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/control b/debian/control index e495ceb..4ad3aba 100644 --- a/debian/control +++ b/debian/control @@ -5,8 +5,8 @@ Maintainer: Arnaud Quette Build-Depends: debhelper (>= 7), autoconf, automake, libtool, libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), libhal-dev (>= 0.5.8), hal, libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, libneon27-gnutls-dev | libneon26-gnutls-dev | libneon-dev | libneon27-dev | libneon26-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6) Standards-Version: 3.9.1 Homepage: http://www.networkupstools.org -Vcs-Browser: http://svn.debian.org/wsvn/nut -Vcs-Svn: svn://svn.debian.org/nut/trunk +Vcs-Browser: http://git.debian.org/?p=collab-maint/nut.git;a=summary +Vcs-Git: git://git.debian.org/git/collab-maint/nut.git Package: nut Architecture: any From d71a946e5635808e5f653f14caf779feaef09160 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 21 Dec 2010 14:49:53 +0100 Subject: [PATCH 005/291] Switch to dpkg-source 3.0 (quilt) format (Closes: #573601) --- debian/changelog | 3 ++- debian/source/format | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 debian/source/format diff --git a/debian/changelog b/debian/changelog index f25c33d..5ab4bb2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,8 +3,9 @@ nut (2.4.3-2) UNRELEASED; urgency=low * debian/control: - Bump Standards-Version to 3.9.1 - Update Vcs-* fields to new GIT repository + * Switch to dpkg-source 3.0 (quilt) format (Closes: #573601) - -- Laurent Bigonville Tue, 21 Dec 2010 14:31:24 +0100 + -- Laurent Bigonville Tue, 21 Dec 2010 14:42:34 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) From 2f40c02cd5f91bd49c68ea76bcacee586f1bf3df Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 21 Dec 2010 14:50:30 +0100 Subject: [PATCH 006/291] debian/patches/0001-low_speed_usb_ups.patch: Use patch system for changes that were applied directly in the source --- debian/changelog | 4 +++- debian/patches/0001-low_speed_usb_ups.patch | 22 +++++++++++++++++++++ debian/patches/series | 1 + drivers/libhid.c | 4 ++-- 4 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 debian/patches/0001-low_speed_usb_ups.patch create mode 100644 debian/patches/series diff --git a/debian/changelog b/debian/changelog index 5ab4bb2..09b8a70 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,8 +4,10 @@ nut (2.4.3-2) UNRELEASED; urgency=low - Bump Standards-Version to 3.9.1 - Update Vcs-* fields to new GIT repository * Switch to dpkg-source 3.0 (quilt) format (Closes: #573601) + * debian/patches/0001-low_speed_usb_ups.patch: Use patch system for changes + that were applied directly in the source - -- Laurent Bigonville Tue, 21 Dec 2010 14:42:34 +0100 + -- Laurent Bigonville Tue, 21 Dec 2010 14:50:09 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/patches/0001-low_speed_usb_ups.patch b/debian/patches/0001-low_speed_usb_ups.patch new file mode 100644 index 0000000..f16f5ab --- /dev/null +++ b/debian/patches/0001-low_speed_usb_ups.patch @@ -0,0 +1,22 @@ +diff --git a/drivers/libhid.c b/drivers/libhid.c +index 9387657..f2e8fbb 100644 +--- a/drivers/libhid.c ++++ b/drivers/libhid.c +@@ -141,7 +141,7 @@ static int refresh_report_buffer(reportbuf_t *rbuf, hid_dev_handle_t udev, HIDDa + { + int id = pData->ReportID; + int r; +- unsigned char buf[SMALLBUF]; ++ unsigned char buf[8]; + + if (rbuf->ts[id] + age > time(NULL)) { + /* buffered report is still good; nothing to do */ +@@ -469,7 +469,7 @@ bool_t HIDSetItemValue(hid_dev_handle_t udev, const char *hidpath, double Value, + */ + int HIDGetEvents(hid_dev_handle_t udev, HIDData_t **event, int eventsize) + { +- unsigned char buf[SMALLBUF]; ++ unsigned char buf[8]; + int itemCount = 0; + int buflen, r, i; + HIDData_t *pData; diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..167a520 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +0001-low_speed_usb_ups.patch diff --git a/drivers/libhid.c b/drivers/libhid.c index f2e8fbb..9387657 100644 --- a/drivers/libhid.c +++ b/drivers/libhid.c @@ -141,7 +141,7 @@ static int refresh_report_buffer(reportbuf_t *rbuf, hid_dev_handle_t udev, HIDDa { int id = pData->ReportID; int r; - unsigned char buf[8]; + unsigned char buf[SMALLBUF]; if (rbuf->ts[id] + age > time(NULL)) { /* buffered report is still good; nothing to do */ @@ -469,7 +469,7 @@ bool_t HIDSetItemValue(hid_dev_handle_t udev, const char *hidpath, double Value, */ int HIDGetEvents(hid_dev_handle_t udev, HIDData_t **event, int eventsize) { - unsigned char buf[8]; + unsigned char buf[SMALLBUF]; int itemCount = 0; int buflen, r, i; HIDData_t *pData; From fbab08eae5d5e79121472c84d87ecd023c440eff Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 21 Dec 2010 15:35:43 +0100 Subject: [PATCH 007/291] Add debian/gbp.conf file --- debian/changelog | 3 ++- debian/gbp.conf | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 debian/gbp.conf diff --git a/debian/changelog b/debian/changelog index 09b8a70..7476967 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,8 +6,9 @@ nut (2.4.3-2) UNRELEASED; urgency=low * Switch to dpkg-source 3.0 (quilt) format (Closes: #573601) * debian/patches/0001-low_speed_usb_ups.patch: Use patch system for changes that were applied directly in the source + * Add debian/gbp.conf file - -- Laurent Bigonville Tue, 21 Dec 2010 14:50:09 +0100 + -- Laurent Bigonville Tue, 21 Dec 2010 15:35:05 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 0000000..6837223 --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,8 @@ +[DEFAULT] +debian-branch = debian +upstream-branch = upstream +pristine-tar = True + +[git-buildpackage] +tarball-dir = ../tarballs/ +export-dir = ../build-area/ From 00b3b334a9b175c39876be6394940e9d844d43cf Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 21 Dec 2010 15:36:05 +0100 Subject: [PATCH 008/291] debian/watch: Bump version to 3 --- debian/changelog | 3 ++- debian/watch | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7476967..545b908 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,8 +7,9 @@ nut (2.4.3-2) UNRELEASED; urgency=low * debian/patches/0001-low_speed_usb_ups.patch: Use patch system for changes that were applied directly in the source * Add debian/gbp.conf file + * debian/watch: Bump version to 3 - -- Laurent Bigonville Tue, 21 Dec 2010 15:35:05 +0100 + -- Laurent Bigonville Tue, 21 Dec 2010 15:35:52 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/watch b/debian/watch index 68b0632..cfb143e 100644 --- a/debian/watch +++ b/debian/watch @@ -1,2 +1,2 @@ -version=2 +version=3 http://www.networkupstools.org/source/2.4/nut-(.*)\.tar\.gz debian uupdate From 58a98cfddc65b35f3cea31a7532a456cf7c4e2cc Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Wed, 22 Dec 2010 18:29:42 +0100 Subject: [PATCH 009/291] Add debian/patches/0002-fix_udev_action.patch: Also set permission for "change" udev ACTION (Closes: #557178) --- debian/changelog | 4 +++- debian/patches/0002-fix_udev_action.patch | 10 ++++++++++ debian/patches/series | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 debian/patches/0002-fix_udev_action.patch diff --git a/debian/changelog b/debian/changelog index 545b908..d95568b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,8 +8,10 @@ nut (2.4.3-2) UNRELEASED; urgency=low that were applied directly in the source * Add debian/gbp.conf file * debian/watch: Bump version to 3 + * Add debian/patches/0002-fix_udev_action.patch: Also set permission for + "change" udev ACTION (Closes: #557178) - -- Laurent Bigonville Tue, 21 Dec 2010 15:35:52 +0100 + -- Laurent Bigonville Wed, 22 Dec 2010 18:28:42 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/patches/0002-fix_udev_action.patch b/debian/patches/0002-fix_udev_action.patch new file mode 100644 index 0000000..b83a601 --- /dev/null +++ b/debian/patches/0002-fix_udev_action.patch @@ -0,0 +1,10 @@ +--- nut-2.4.3.orig/scripts/udev/nut-usbups.rules.in ++++ nut-2.4.3/scripts/udev/nut-usbups.rules.in +@@ -1,6 +1,6 @@ + # This file is generated and installed by the Network UPS Tools package. + +-ACTION!="add", GOTO="nut-usbups_rules_end" ++ACTION!="add|change", GOTO="nut-usbups_rules_end" + SUBSYSTEM=="usb_device", GOTO="nut-usbups_rules_real" + SUBSYSTEM=="usb", GOTO="nut-usbups_rules_real" + BUS!="usb", GOTO="nut-usbups_rules_end" diff --git a/debian/patches/series b/debian/patches/series index 167a520..e0cdd37 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ 0001-low_speed_usb_ups.patch +0002-fix_udev_action.patch From 9a6e44c40be3268e54d53399312ffe797e078503 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Wed, 22 Dec 2010 18:55:46 +0100 Subject: [PATCH 010/291] debian/nut.postrm: Do not try to remove nut user is deluser is not installed anymore --- debian/changelog | 4 +++- debian/nut.postrm | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index d95568b..6afa8ff 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,8 +10,10 @@ nut (2.4.3-2) UNRELEASED; urgency=low * debian/watch: Bump version to 3 * Add debian/patches/0002-fix_udev_action.patch: Also set permission for "change" udev ACTION (Closes: #557178) + * debian/nut.postrm: Do not try to remove nut user is deluser is not + installed anymore - -- Laurent Bigonville Wed, 22 Dec 2010 18:28:42 +0100 + -- Laurent Bigonville Wed, 22 Dec 2010 18:53:16 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/nut.postrm b/debian/nut.postrm index 385c39f..38b8d52 100644 --- a/debian/nut.postrm +++ b/debian/nut.postrm @@ -15,9 +15,11 @@ case "$1" in rm -f /etc/udev/rules.d/52_nut-usbups.rules rm -f /etc/udev/rules.d/52-nut-usbups.rules # remove the nut user - if getent passwd nut >/dev/null; then - deluser --quiet nut - fi + if [ -x "$(command -v deluser)" ]; then + deluser --quiet --system nut > /dev/null || true + else + echo >&2 "not removing nut system account because deluser command was not found" + fi # handle a dpkg bug [ -d /etc/nut ] && rmdir --ignore-fail-on-non-empty /etc/nut >/dev/null 2>&1 ;; From 582ac2bbfd56ad41e6d3d1529655733487bbdf32 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Wed, 22 Dec 2010 18:58:51 +0100 Subject: [PATCH 011/291] debian/nut.manpages: Install manpage nut.conf.5 (Closes: #528222) --- debian/changelog | 3 ++- debian/nut.manpages | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 6afa8ff..cd00a1d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,8 +12,9 @@ nut (2.4.3-2) UNRELEASED; urgency=low "change" udev ACTION (Closes: #557178) * debian/nut.postrm: Do not try to remove nut user is deluser is not installed anymore + * debian/nut.manpages: Install manpage nut.conf.5 (Closes: #528222) - -- Laurent Bigonville Wed, 22 Dec 2010 18:53:16 +0100 + -- Laurent Bigonville Wed, 22 Dec 2010 18:57:20 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/nut.manpages b/debian/nut.manpages index a377aa9..68c624a 100644 --- a/debian/nut.manpages +++ b/debian/nut.manpages @@ -1,3 +1,4 @@ +debian/tmp/usr/share/man/man5/nut.conf.5 debian/tmp/usr/share/man/man5/ups.conf.5 debian/tmp/usr/share/man/man5/upsd.conf.5 debian/tmp/usr/share/man/man5/upsd.users.5 From 9675a8feb9b3b4c6efdc256054330a9f7fc109b9 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 23 Dec 2010 22:45:05 +0100 Subject: [PATCH 012/291] Add myself as Uploaders --- debian/changelog | 3 ++- debian/control | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index cd00a1d..8968a0c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,7 @@ nut (2.4.3-2) UNRELEASED; urgency=low * debian/control: - Bump Standards-Version to 3.9.1 - Update Vcs-* fields to new GIT repository + - Add myself as Uploaders * Switch to dpkg-source 3.0 (quilt) format (Closes: #573601) * debian/patches/0001-low_speed_usb_ups.patch: Use patch system for changes that were applied directly in the source @@ -14,7 +15,7 @@ nut (2.4.3-2) UNRELEASED; urgency=low installed anymore * debian/nut.manpages: Install manpage nut.conf.5 (Closes: #528222) - -- Laurent Bigonville Wed, 22 Dec 2010 18:57:20 +0100 + -- Laurent Bigonville Thu, 23 Dec 2010 22:43:01 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/control b/debian/control index 4ad3aba..8aea926 100644 --- a/debian/control +++ b/debian/control @@ -2,6 +2,7 @@ Source: nut Section: admin Priority: optional Maintainer: Arnaud Quette +Uploaders: Laurent Bigonville Build-Depends: debhelper (>= 7), autoconf, automake, libtool, libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), libhal-dev (>= 0.5.8), hal, libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, libneon27-gnutls-dev | libneon26-gnutls-dev | libneon-dev | libneon27-dev | libneon26-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6) Standards-Version: 3.9.1 Homepage: http://www.networkupstools.org From 45abd239cf1e5a5c1bd0e3bdef42d39de6417a21 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 23 Dec 2010 23:00:11 +0100 Subject: [PATCH 013/291] debian/copyright: Fix copyright-with-old-dh-make-debian-copyright --- debian/changelog | 3 ++- debian/copyright | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 8968a0c..d29f846 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,8 +14,9 @@ nut (2.4.3-2) UNRELEASED; urgency=low * debian/nut.postrm: Do not try to remove nut user is deluser is not installed anymore * debian/nut.manpages: Install manpage nut.conf.5 (Closes: #528222) + * debian/copyright: Fix copyright-with-old-dh-make-debian-copyright - -- Laurent Bigonville Thu, 23 Dec 2010 22:43:01 +0100 + -- Laurent Bigonville Thu, 23 Dec 2010 22:59:39 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/copyright b/debian/copyright index 418b4ae..01fea18 100644 --- a/debian/copyright +++ b/debian/copyright @@ -65,5 +65,5 @@ Licenses: may be found in /usr/share/common-licenses/GPL-3. -The Debian packaging is (C) 2008, Arnaud Quette and -is licensed under the GPL, see `/usr/share/common-licenses/GPL'. +The Debian packaging is Copyright (C) 2008, Arnaud Quette +and is licensed under the GPL, see `/usr/share/common-licenses/GPL'. From 0b9baae4e9564f0e8dced693e9126c00251112ed Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 23 Dec 2010 23:03:05 +0100 Subject: [PATCH 014/291] Remove nut-snmp.lintian-overrides, not needed anymore --- debian/changelog | 3 ++- debian/nut-snmp.lintian-overrides | 6 ------ 2 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 debian/nut-snmp.lintian-overrides diff --git a/debian/changelog b/debian/changelog index d29f846..a8f9ee6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -15,8 +15,9 @@ nut (2.4.3-2) UNRELEASED; urgency=low installed anymore * debian/nut.manpages: Install manpage nut.conf.5 (Closes: #528222) * debian/copyright: Fix copyright-with-old-dh-make-debian-copyright + * Remove nut-snmp.lintian-overrides, not needed anymore - -- Laurent Bigonville Thu, 23 Dec 2010 22:59:39 +0100 + -- Laurent Bigonville Thu, 23 Dec 2010 23:02:40 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/nut-snmp.lintian-overrides b/debian/nut-snmp.lintian-overrides deleted file mode 100644 index 24e3f05..0000000 --- a/debian/nut-snmp.lintian-overrides +++ /dev/null @@ -1,6 +0,0 @@ -# due to libnetsnmp.la overlinking on dependency_libs -# dpkg-shlibdeps: warning: dependency on libcrypto.so.0.9.8 could be avoided if -# "debian/nut-snmp/lib/nut/snmp-ups" were not uselessly linked against it (they -# use none of its symbols).. -# This will be cleanly solved upstream... -nut-snmp: possible-gpl-code-linked-with-openssl From 44b38c4ff644578ae14f0b5a4355c27ef264c5f1 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 23 Dec 2010 23:18:44 +0100 Subject: [PATCH 015/291] debian/patches/0003-fix_spelling_and_typo.patch: Fix some spelling errors --- debian/changelog | 3 +- .../patches/0003-fix_spelling_and_typo.patch | 275 ++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 278 insertions(+), 1 deletion(-) create mode 100644 debian/patches/0003-fix_spelling_and_typo.patch diff --git a/debian/changelog b/debian/changelog index a8f9ee6..35fc75c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,8 +16,9 @@ nut (2.4.3-2) UNRELEASED; urgency=low * debian/nut.manpages: Install manpage nut.conf.5 (Closes: #528222) * debian/copyright: Fix copyright-with-old-dh-make-debian-copyright * Remove nut-snmp.lintian-overrides, not needed anymore + * debian/patches/0003-fix_spelling_and_typo.patch: Fix some spelling errors - -- Laurent Bigonville Thu, 23 Dec 2010 23:02:40 +0100 + -- Laurent Bigonville Thu, 23 Dec 2010 23:18:27 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/patches/0003-fix_spelling_and_typo.patch b/debian/patches/0003-fix_spelling_and_typo.patch new file mode 100644 index 0000000..f46093b --- /dev/null +++ b/debian/patches/0003-fix_spelling_and_typo.patch @@ -0,0 +1,275 @@ +--- a/man/powercom.8 ++++ b/man/powercom.8 +@@ -46,53 +46,53 @@ + loadPercentage and validationSequence. + + .IP "numOfBytesFromUPS=\fIvalue\fR" +-The number of bytes in a UPS frame. The default is type dependant and ++The number of bytes in a UPS frame. The default is type dependent and + is given below. + + .IP "methodOfFlowControl=\fIname\fR" + The method of serial communication flow control that is engaged by the +-UPS. The default is type dependant and is given below. Acceptable names ++UPS. The default is type dependent and is given below. Acceptable names + are dtr0rts1, dtr1 or no_flow_control. + + .IP "shutdownArguments=\fI{{minutes,seconds},whether_minutes_should_be_used}\fR" + The minutes and seconds that the UPS should wait between receiving the + shutdown command and actually shutting off. The other argument should + be set to the character \fIn\fR only when the minutes value should be +-skipped and not sent to the UPS. The default is type dependant and is ++skipped and not sent to the UPS. The default is type dependent and is + given below. The braces and commas are mandatory. Note that there should + be no white space characters. + + .IP "voltage=\fI{coefficient1,coefficient2,coefficient3,coefficient4}\fR" + Only for KP625AP, Trust, Egys, BNT-other + A quad that is used convert the raw data to human readable voltage +-reading. The default is type dependant and is given below. Do note that ++reading. The default is type dependent and is given below. Do note that + the braces and commas are mandatory, as well as the lack of white space + characters. + + .IP "frequency=\fI{coefficient1,coefficient2}\fR" + Only for KP625AP, Trust, Egys + A pair to convert the raw data to human readable frequency reading. The +-default is type dependant and is given below. Do note that the braces ++default is type dependent and is given below. Do note that the braces + and commas are mandatory as well, as the lack of white space characters. + + .IP "batteryPercentage=\fI{coefficient1,coefficient2,coefficient3,coefficient4,coefficient5}\fR" + Only for KP625AP, Trust, Egys, BNT-other + A 5 tuple to convert the raw data to human readable battery percentage +-reading. The default is type dependant and is given below. Do note that ++reading. The default is type dependent and is given below. Do note that + the braces and commas are mandatory, as the lack of white space + characters. + + .IP "loadPercentage=\fI{coefficient1,coefficient2,coefficient3,coefficient4}\fR" + Only for KP625AP, Trust, Egys, BNT-other + A quad to convert the raw data to human readable load percentage +-reading. The default is type dependant and is given below. Do note that ++reading. The default is type dependent and is given below. Do note that + the braces and commas are mandatory, as the lack of white space + characters. + + .IP "validationSequence=\fI{{index1,value1},{index2,value2},{index3,value3}}\fR" + Only for KP625AP, Trust, Egys, BNT-other + 3 pairs to be used for validating the UPS by comparing bytes of the raw +-data with constant values. The default is type dependant and is given ++data with constant values. The default is type dependent and is given + below. The braces and commas are mandatory, as the lack of white space + characters. + +@@ -105,7 +105,7 @@ + + .P + The rest of the default values for the extra arguments are type +-dependant: ++dependent: + + .IP "Trust" + .RS +--- a/man/upsc.8 ++++ b/man/upsc.8 +@@ -50,7 +50,7 @@ + To list the UPSes configured on this system, along with their descriptions: + + .nf +- $ upsc -L ++ $ upsc \-L + apc: Back-UPS 500 + ppro2: Patriot Pro II + .fi +@@ -59,7 +59,7 @@ + syntax: + + .nf +- $ for UPS in `upsc -l mybox:1234`; do ++ $ for UPS in `upsc \-l mybox:1234`; do + upsc $UPS ups.status + done + .fi +--- a/drivers/dummy-ups.c ++++ b/drivers/dummy-ups.c +@@ -337,7 +337,7 @@ + /* FIXME: we need to have the full data set before + * enforcing controls! */ + +- upsdebugx(1, "Unknown data. Commiting anyway..."); ++ upsdebugx(1, "Unknown data. Committing anyway..."); + return 1; + /* return 0;*/ + } +@@ -355,7 +355,7 @@ + /* FIXME: we need to have the full data set before + * enforcing controls! */ + +- upsdebugx(1, "Unknown data. Commiting value anyway..."); ++ upsdebugx(1, "Unknown data. Committing value anyway..."); + return 1; + /* return 0;*/ + } +--- a/drivers/genericups.c ++++ b/drivers/genericups.c +@@ -142,12 +142,12 @@ + */ + if ((v = getval("OL")) != NULL) { + parse_input_signals(v, &upstab[upstype].line_ol, &upstab[upstype].val_ol); +- upsdebugx(2, "parse_input_signals: OL overriden with %s\n", v); ++ upsdebugx(2, "parse_input_signals: OL overridden with %s\n", v); + } + + if ((v = getval("LB")) != NULL) { + parse_input_signals(v, &upstab[upstype].line_bl, &upstab[upstype].val_bl); +- upsdebugx(2, "parse_input_signals: LB overriden with %s\n", v); ++ upsdebugx(2, "parse_input_signals: LB overridden with %s\n", v); + } + } + +@@ -318,12 +318,12 @@ + */ + if ((v = getval("CP")) != NULL) { + parse_output_signals(v, &upstab[upstype].line_norm); +- upsdebugx(2, "parse_output_signals: CP overriden with %s\n", v); ++ upsdebugx(2, "parse_output_signals: CP overridden with %s\n", v); + } + + if ((v = getval("SD")) != NULL) { + parse_output_signals(v, &upstab[upstype].line_sd); +- upsdebugx(2, "parse_output_signals: SD overriden with %s\n", v); ++ upsdebugx(2, "parse_output_signals: SD overridden with %s\n", v); + } + + if (ioctl(upsfd, TIOCMSET, &upstab[upstype].line_norm)) { +--- a/man/upscode2.8 ++++ b/man/upscode2.8 +@@ -49,7 +49,7 @@ + + The driver supports the following commands for those UPSen that support them. + The available commands are autodetected during initialization, +-so you should check availability with \fIupscmd -l\fR. ++so you should check availability with \fIupscmd \-l\fR. + + test.panel.start \(hy Start UPS self test + +--- a/man/usbhid-ups.8 ++++ b/man/usbhid-ups.8 +@@ -59,7 +59,7 @@ + than offdelay, but the driver will \fBnot\fR warn you upon startup if it + isn't. Some UPS'es will restart no matter what, even if the power is + (still) out at the moment this timer elapses. In that case, you could try +-if setting 'ondelay = -1' in \fBups.conf\fR helps. ++if setting 'ondelay = \-1' in \fBups.conf\fR helps. + + .IP "pollfreq=\fInum\fR" + Set polling frequency, in seconds, to reduce the USB data flow. +@@ -148,7 +148,7 @@ + .nf + usb 2-1: control timeout on ep0in + usb 2-1: usbfs: USBDEVFS_CONTROL failed cmd usbhid-ups rqt 128 rq 6 len 256 +- ret -110 ++ ret \-110 + .fi + + In this case, simply modify the general parameter "pollinterval" to a higher +@@ -170,7 +170,7 @@ + + If you rely on the UPS to shutdown your systems in case of mains failure + and to restart them when the power returns, you \fBmust\fR test this. You +-can do so by running 'upsmon -c fsd'. With the mains present, this should ++can do so by running 'upsmon \-c fsd'. With the mains present, this should + bring your systems down and then cycle the power to restart them again. + If you do the same without mains present, it should do the same, but in + this case, the outputs shall remain off until mains power is applied +--- a/drivers/metasys.c ++++ b/drivers/metasys.c +@@ -179,12 +179,12 @@ + /* Read data lenght byte */ + res = ser_get_char(upsfd, my_buf, 1, 0); + if (res < 1) { +- ser_comm_fail("Receive error (lenght): %d!!!\n", res); ++ ser_comm_fail("Receive error (length): %d!!!\n", res); + return -1; + } + packet_lenght = my_buf[0]; + if (packet_lenght < 2) { +- ser_comm_fail("Receive error (lenght): packet lenght %d!!!\n", packet_lenght); ++ ser_comm_fail("Receive error (length): packet length %d!!!\n", packet_lenght); + return -1; + } + /* Try to read all the remainig bytes (packet_lenght) */ +--- a/drivers/snmp-ups.c ++++ b/drivers/snmp-ups.c +@@ -380,7 +380,7 @@ + len = snprintf(buf, buf_len, "%ld", *pdu->variables->val.integer / 100); + break; + default: +- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", ++ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", + upsname?upsname:device_name, pdu->variables->type, OID); + return FALSE; + break; +@@ -420,7 +420,7 @@ + value = *pdu->variables->val.integer / 100; + break; + default: +- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", ++ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", + upsname?upsname:device_name, pdu->variables->type, OID); + return FALSE; + break; +@@ -1319,7 +1319,7 @@ + if (ret == FALSE) + upslogx(LOG_ERR, "su_setvar: cannot set value %s for %s", arg[4], arg[3]); + else +- upsdebugx(1, "su_setvar: sucessfully set %s to \"%s\"", arg[0], arg[4]); ++ upsdebugx(1, "su_setvar: successfully set %s to \"%s\"", arg[0], arg[4]); + + return 1; + } +--- a/man/dummy-ups.8 ++++ b/man/dummy-ups.8 +@@ -38,7 +38,7 @@ + + This file is generally named something.dev. It contains a list of all + valid data and associated values, and has the same format as an upsc +-dump (: ). So you can easilly create definition ++dump (: ). So you can easily create definition + files from an existing UPS using "upsc > file.dev". + It can also be empty, in which case only a basic set of data is available: + device.*, driver.*, ups.mfr, ups.model, ups.status +--- a/man/genericups.8 ++++ b/man/genericups.8 +@@ -235,7 +235,7 @@ + + Alternatively, you can run genericups in debug mode \(hy + +- genericups -DDDDD \-x upstype=n /dev/port ++ genericups \-DDDDD \-x upstype=n /dev/port + + In this mode it will be running in the foreground and continuously + display the line and battery status of the UPS. +--- a/man/metasys.8 ++++ b/man/metasys.8 +@@ -30,7 +30,7 @@ + .SH BUGS + This driver has been tested on Meta System HF Millennium 820 and + ally HF 1000 only. +-Any informations about the use of the driver with the other listed ++Any information about the use of the driver with the other listed + ups are really welcome. + + .SH AUTHOR +--- a/drivers/apcsmart.c ++++ b/drivers/apcsmart.c +@@ -323,7 +323,7 @@ + /* This should never happen since we only call + this if the REQ_CAPABILITIES command is supported + */ +- upslogx(LOG_ERR, "ERROR: APC cannot do capabilites but said it could!"); ++ upslogx(LOG_ERR, "ERROR: APC cannot do capabilities but said it could!"); + return; + } + diff --git a/debian/patches/series b/debian/patches/series index e0cdd37..c1939ab 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1,3 @@ 0001-low_speed_usb_ups.patch 0002-fix_udev_action.patch +0003-fix_spelling_and_typo.patch From 996a34e6b6fa8a9de1e3d2ac5b3151f5841a1200 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 23 Dec 2010 23:47:24 +0100 Subject: [PATCH 016/291] Add debian/libupsclient1.symbols file --- debian/changelog | 3 ++- debian/libupsclient1.symbols | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 debian/libupsclient1.symbols diff --git a/debian/changelog b/debian/changelog index 35fc75c..624ac9e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,8 +17,9 @@ nut (2.4.3-2) UNRELEASED; urgency=low * debian/copyright: Fix copyright-with-old-dh-make-debian-copyright * Remove nut-snmp.lintian-overrides, not needed anymore * debian/patches/0003-fix_spelling_and_typo.patch: Fix some spelling errors + * Add debian/libupsclient1.symbols file - -- Laurent Bigonville Thu, 23 Dec 2010 23:18:27 +0100 + -- Laurent Bigonville Thu, 23 Dec 2010 23:47:13 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/libupsclient1.symbols b/debian/libupsclient1.symbols new file mode 100644 index 0000000..f9cd39a --- /dev/null +++ b/debian/libupsclient1.symbols @@ -0,0 +1,24 @@ +libupsclient.so.1 libupsclient1 #MINVER# + pconf_char@Base 2.4.1 + pconf_encode@Base 2.4.1 + pconf_file_begin@Base 2.4.1 + pconf_file_next@Base 2.4.1 + pconf_finish@Base 2.4.1 + pconf_init@Base 2.4.1 + pconf_line@Base 2.4.1 + pconf_parse_error@Base 2.4.1 + upscli_connect@Base 2.4.1 + upscli_disconnect@Base 2.4.1 + upscli_errlist@Base 2.4.1 + upscli_fd@Base 2.4.1 + upscli_get@Base 2.4.1 + upscli_list_next@Base 2.4.1 + upscli_list_start@Base 2.4.1 + upscli_readline@Base 2.4.1 + upscli_sendline@Base 2.4.1 + upscli_splitaddr@Base 2.4.1 + upscli_splitname@Base 2.4.1 + upscli_ssl@Base 2.4.1 + upscli_sslcert@Base 2.4.1 + upscli_strerror@Base 2.4.1 + upscli_upserror@Base 2.4.1 From 5b1840b8ff6a161884e04bd05bd9e6d61318fbff Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 23 Dec 2010 23:48:40 +0100 Subject: [PATCH 017/291] Add debian/nut.links: Re-add /etc/init.d/ups-monitor that was lost for some reasons --- debian/changelog | 4 +++- debian/nut.links | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 debian/nut.links diff --git a/debian/changelog b/debian/changelog index 624ac9e..75af2bd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,8 +18,10 @@ nut (2.4.3-2) UNRELEASED; urgency=low * Remove nut-snmp.lintian-overrides, not needed anymore * debian/patches/0003-fix_spelling_and_typo.patch: Fix some spelling errors * Add debian/libupsclient1.symbols file + * Add debian/nut.links: Re-add /etc/init.d/ups-monitor that was lost for + some reasons (Closes: #592351) - -- Laurent Bigonville Thu, 23 Dec 2010 23:47:13 +0100 + -- Laurent Bigonville Thu, 23 Dec 2010 23:47:54 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/nut.links b/debian/nut.links new file mode 100644 index 0000000..a86f46f --- /dev/null +++ b/debian/nut.links @@ -0,0 +1 @@ +etc/init.d/nut etc/init.d/ups-monitor From 7320befdae8a7ec875c4f410197ba906a4c495e6 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 23 Dec 2010 23:58:54 +0100 Subject: [PATCH 018/291] debian/nut.lintian-overrides: Add override for init.d-script-does-not-provide-itself /etc/init.d/ups-monitor --- debian/changelog | 4 +++- debian/nut.lintian-overrides | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 75af2bd..349f411 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,8 +20,10 @@ nut (2.4.3-2) UNRELEASED; urgency=low * Add debian/libupsclient1.symbols file * Add debian/nut.links: Re-add /etc/init.d/ups-monitor that was lost for some reasons (Closes: #592351) + * debian/nut.lintian-overrides: Add override for + init.d-script-does-not-provide-itself /etc/init.d/ups-monitor - -- Laurent Bigonville Thu, 23 Dec 2010 23:47:54 +0100 + -- Laurent Bigonville Thu, 23 Dec 2010 23:58:11 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/nut.lintian-overrides b/debian/nut.lintian-overrides index 432491d..79b0fbd 100644 --- a/debian/nut.lintian-overrides +++ b/debian/nut.lintian-overrides @@ -1,2 +1,2 @@ nut: script-in-etc-init.d-not-registered-via-update-rc.d - +nut: init.d-script-does-not-provide-itself /etc/init.d/ups-monitor From a180d2ab554431e2fb8807600493b6dea6a97c1b Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 24 Dec 2010 00:08:32 +0100 Subject: [PATCH 019/291] Drop libupsclient1.post{inst,rm}: ldconfig call is added automatically by debhelper --- debian/changelog | 4 +++- debian/libupsclient1.postinst | 29 ------------------------- debian/libupsclient1.postrm | 41 ----------------------------------- 3 files changed, 3 insertions(+), 71 deletions(-) delete mode 100644 debian/libupsclient1.postinst delete mode 100644 debian/libupsclient1.postrm diff --git a/debian/changelog b/debian/changelog index 349f411..fb0ed4b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -22,8 +22,10 @@ nut (2.4.3-2) UNRELEASED; urgency=low some reasons (Closes: #592351) * debian/nut.lintian-overrides: Add override for init.d-script-does-not-provide-itself /etc/init.d/ups-monitor + * Drop libupsclient1.post{inst,rm}: ldconfig call is added automatically by + debhelper - -- Laurent Bigonville Thu, 23 Dec 2010 23:58:11 +0100 + -- Laurent Bigonville Fri, 24 Dec 2010 00:07:24 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/libupsclient1.postinst b/debian/libupsclient1.postinst deleted file mode 100644 index b86f95b..0000000 --- a/debian/libupsclient1.postinst +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -e - -case "$1" in - - configure) - ldconfig - ;; - - abort-upgrade) - # do nothing - ;; - - abort-remove) - # do nothing - ;; - - abort-deconfigure) - # do nothing - ;; - - *) - echo "$0: incorrect arguments: $*" >&2 - exit 1 - ;; - -esac - -#DEBHELPER# - diff --git a/debian/libupsclient1.postrm b/debian/libupsclient1.postrm deleted file mode 100644 index 53a6b2d..0000000 --- a/debian/libupsclient1.postrm +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh -e - -case "$1" in - - remove) - ldconfig - ;; - - purge) - # do nothing - ;; - - upgrade) - # do nothing - ;; - - failed-upgrade) - # do nothing - ;; - - abort-install) - # do nothing - ;; - - abort-upgrade) - # do nothing - ;; - - disappear) - # do nothing - ;; - - *) - echo "$0: incorrect arguments: $*" >&2 - exit 1 - ;; - -esac - -#DEBHELPER# - From c38582d5c25dc8f63c579a9bd59fbc6d3d585d27 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 24 Dec 2010 00:41:38 +0100 Subject: [PATCH 020/291] debian/libupsclient1-dev.install: Do not ship /lib/libupsclient.la anymore --- debian/changelog | 3 ++- debian/libupsclient1-dev.install | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index fb0ed4b..35dbad9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -24,8 +24,9 @@ nut (2.4.3-2) UNRELEASED; urgency=low init.d-script-does-not-provide-itself /etc/init.d/ups-monitor * Drop libupsclient1.post{inst,rm}: ldconfig call is added automatically by debhelper + * debian/libupsclient1-dev.install: Do not ship /lib/libupsclient.la anymore - -- Laurent Bigonville Fri, 24 Dec 2010 00:07:24 +0100 + -- Laurent Bigonville Fri, 24 Dec 2010 00:41:12 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/libupsclient1-dev.install b/debian/libupsclient1-dev.install index 2eabfc9..3d6b952 100644 --- a/debian/libupsclient1-dev.install +++ b/debian/libupsclient1-dev.install @@ -1,5 +1,4 @@ debian/tmp/lib/libupsclient.so debian/tmp/lib/libupsclient.a -debian/tmp/lib/libupsclient.la debian/tmp/usr/lib/pkgconfig/ debian/tmp/usr/include From c3894a175298691407703a91b0a99266a35876b8 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 24 Dec 2010 01:09:04 +0100 Subject: [PATCH 021/291] debian/rules: Remove dpatch logic as we are using package source version '3.0 (quilt)' --- debian/changelog | 4 +++- debian/rules | 18 +++--------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/debian/changelog b/debian/changelog index 35dbad9..73f640e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -25,8 +25,10 @@ nut (2.4.3-2) UNRELEASED; urgency=low * Drop libupsclient1.post{inst,rm}: ldconfig call is added automatically by debhelper * debian/libupsclient1-dev.install: Do not ship /lib/libupsclient.la anymore + * debian/rules: Remove dpatch logic as we are using package source version + '3.0 (quilt)' - -- Laurent Bigonville Fri, 24 Dec 2010 00:41:12 +0100 + -- Laurent Bigonville Fri, 24 Dec 2010 01:07:36 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/rules b/debian/rules index f7373d6..cad0fad 100755 --- a/debian/rules +++ b/debian/rules @@ -14,7 +14,7 @@ ifeq (linux,$(DEB_HOST_ARCH_OS)) CONFIGUREFLAGS+=--with-udev-dir=/lib/udev endif -configure: patch configure-stamp +configure: configure-stamp configure-stamp: dh_testdir CFLAGS='$(CFLAGS)' ./configure $(CONFIGUREFLAGS) \ @@ -47,8 +47,7 @@ build-stamp: $(MAKE) touch $@ -clean: clean-patched unpatch -clean-patched: +clean: dh_testdir dh_testroot rm -f configure-stamp build-stamp install-stamp @@ -60,17 +59,6 @@ clean-patched: # -test -r /usr/share/misc/config.guess && \ # cp -f /usr/share/misc/config.guess config.guess -patch: patch-stamp -patch-stamp: -# dpatch apply-all -# touch $@ - # run autoreconf for dpatch -# autoreconf - -unpatch: -# dpatch deapply-all -# rm -rf patch-stamp debian/patched - uninstall: dh_testdir dh_testroot @@ -135,4 +123,4 @@ endif dh_builddeb binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary configure install uninstall patch unpatch +.PHONY: build clean binary-indep binary-arch binary configure install uninstall From 4670a72fca2a3048c637ff304615c7ed246a5645 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 24 Dec 2010 01:51:12 +0100 Subject: [PATCH 022/291] Remove nut.link (nut.link != nut.links) --- debian/nut.link | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 debian/nut.link diff --git a/debian/nut.link b/debian/nut.link deleted file mode 100644 index 8453f4f..0000000 --- a/debian/nut.link +++ /dev/null @@ -1,2 +0,0 @@ -etc/init.d/nut etc/init.d/ups-monitor - From 7bcbb632865b469b2b8366e0ae0520956c3c8e68 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 24 Dec 2010 01:53:35 +0100 Subject: [PATCH 023/291] debian/compat: Bump debhelper compatibility to 8 --- debian/changelog | 3 ++- debian/compat | 2 +- debian/control | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 73f640e..1e584e1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -27,8 +27,9 @@ nut (2.4.3-2) UNRELEASED; urgency=low * debian/libupsclient1-dev.install: Do not ship /lib/libupsclient.la anymore * debian/rules: Remove dpatch logic as we are using package source version '3.0 (quilt)' + * debian/compat: Bump debhelper compatibility to 8 - -- Laurent Bigonville Fri, 24 Dec 2010 01:07:36 +0100 + -- Laurent Bigonville Fri, 24 Dec 2010 01:52:23 +0100 nut (2.4.3-1.1) unstable; urgency=low diff --git a/debian/compat b/debian/compat index 1e8b314..45a4fb7 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -6 +8 diff --git a/debian/control b/debian/control index 8aea926..27cfa8b 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: admin Priority: optional Maintainer: Arnaud Quette Uploaders: Laurent Bigonville -Build-Depends: debhelper (>= 7), autoconf, automake, libtool, libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), libhal-dev (>= 0.5.8), hal, libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, libneon27-gnutls-dev | libneon26-gnutls-dev | libneon-dev | libneon27-dev | libneon26-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6) +Build-Depends: debhelper (>= 8), autoconf, automake, libtool, libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), libhal-dev (>= 0.5.8), hal, libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, libneon27-gnutls-dev | libneon26-gnutls-dev | libneon-dev | libneon27-dev | libneon26-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6) Standards-Version: 3.9.1 Homepage: http://www.networkupstools.org Vcs-Browser: http://git.debian.org/?p=collab-maint/nut.git;a=summary From 0e20f2aa14bd3f12ec3acd5c1bde812d574a049d Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 24 Dec 2010 11:46:41 +0100 Subject: [PATCH 024/291] Release to unstable and set urgency to medium --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 1e584e1..8e55e79 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.4.3-2) UNRELEASED; urgency=low +nut (2.4.3-2) unstable; urgency=medium * debian/control: - Bump Standards-Version to 3.9.1 @@ -29,7 +29,7 @@ nut (2.4.3-2) UNRELEASED; urgency=low '3.0 (quilt)' * debian/compat: Bump debhelper compatibility to 8 - -- Laurent Bigonville Fri, 24 Dec 2010 01:52:23 +0100 + -- Laurent Bigonville Fri, 24 Dec 2010 11:46:22 +0100 nut (2.4.3-1.1) unstable; urgency=low From 89058c95d8163193a75391300caed012c07e3abc Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Wed, 29 Dec 2010 15:46:36 +0100 Subject: [PATCH 025/291] debian/control: Wrap build-dependencies --- debian/changelog | 7 +++++++ debian/control | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 8e55e79..4c5c22d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +nut (2.4.3-3) UNRELEASED; urgency=low + + * debian/control: + - Wrap build-dependencies + + -- Laurent Bigonville Wed, 29 Dec 2010 15:40:34 +0100 + nut (2.4.3-2) unstable; urgency=medium * debian/control: diff --git a/debian/control b/debian/control index 27cfa8b..9e8e0ea 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,21 @@ Section: admin Priority: optional Maintainer: Arnaud Quette Uploaders: Laurent Bigonville -Build-Depends: debhelper (>= 8), autoconf, automake, libtool, libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), libhal-dev (>= 0.5.8), hal, libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, libneon27-gnutls-dev | libneon26-gnutls-dev | libneon-dev | libneon27-dev | libneon26-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6) +Build-Depends: debhelper (>= 8), + autoconf, + automake, + libtool, + libgd2-xpm-dev | libgd2-noxpm-dev, + libsnmp-dev | libsnmp9-dev, + libusb-dev (>= 0.1.8), + libhal-dev (>= 0.5.8), + hal, + libdbus-1-dev, + libdbus-glib-1-dev, + libglib2.0-dev, + libneon27-gnutls-dev | libneon26-gnutls-dev | libneon-dev | libneon27-dev | libneon26-dev, + libpowerman0-dev (>= 2.3.3), + libwrap0-dev (>= 7.6) Standards-Version: 3.9.1 Homepage: http://www.networkupstools.org Vcs-Browser: http://git.debian.org/?p=collab-maint/nut.git;a=summary From eed8994e1e8d172ff055cd4ec62347cffd6b8f8f Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 11 Jan 2011 01:26:47 +0100 Subject: [PATCH 026/291] debian/nut.postinst: Only trigger USB subsystem, should Closes: #574769 --- debian/changelog | 3 ++- debian/nut.postinst | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 4c5c22d..0b2153a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,8 +2,9 @@ nut (2.4.3-3) UNRELEASED; urgency=low * debian/control: - Wrap build-dependencies + * debian/nut.postinst: Only trigger USB subsystem, should Closes: #574769 - -- Laurent Bigonville Wed, 29 Dec 2010 15:40:34 +0100 + -- Laurent Bigonville Tue, 11 Jan 2011 01:26:37 +0100 nut (2.4.3-2) unstable; urgency=medium diff --git a/debian/nut.postinst b/debian/nut.postinst index 55d88cb..a91caab 100644 --- a/debian/nut.postinst +++ b/debian/nut.postinst @@ -46,7 +46,7 @@ case "$1" in # ask udev to check for new udev rules [ -x /etc/init.d/udev ] && pidof udevd > /dev/null \ - && udevadm trigger --action=change + && udevadm trigger --subsystem-match=usb --action=change # 557178 udevadm trigger --subsystem-match=usb From 4d1040666fe37d9c40d00ef9f02f051b7cbbb0df Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 11 Jan 2011 01:32:45 +0100 Subject: [PATCH 027/291] debian/patches/0002-fix_udev_action.patch: Use SUBSYSTEM instead of BUS --- debian/changelog | 3 ++- debian/patches/0002-fix_udev_action.patch | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index 0b2153a..675975a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,8 +3,9 @@ nut (2.4.3-3) UNRELEASED; urgency=low * debian/control: - Wrap build-dependencies * debian/nut.postinst: Only trigger USB subsystem, should Closes: #574769 + * debian/patches/0002-fix_udev_action.patch: Use SUBSYSTEM instead of BUS - -- Laurent Bigonville Tue, 11 Jan 2011 01:26:37 +0100 + -- Laurent Bigonville Tue, 11 Jan 2011 01:32:06 +0100 nut (2.4.3-2) unstable; urgency=medium diff --git a/debian/patches/0002-fix_udev_action.patch b/debian/patches/0002-fix_udev_action.patch index b83a601..9b69945 100644 --- a/debian/patches/0002-fix_udev_action.patch +++ b/debian/patches/0002-fix_udev_action.patch @@ -1,10 +1,14 @@ ---- nut-2.4.3.orig/scripts/udev/nut-usbups.rules.in -+++ nut-2.4.3/scripts/udev/nut-usbups.rules.in -@@ -1,6 +1,6 @@ +--- a/scripts/udev/nut-usbups.rules.in ++++ b/scripts/udev/nut-usbups.rules.in +@@ -1,9 +1,9 @@ # This file is generated and installed by the Network UPS Tools package. -ACTION!="add", GOTO="nut-usbups_rules_end" +ACTION!="add|change", GOTO="nut-usbups_rules_end" SUBSYSTEM=="usb_device", GOTO="nut-usbups_rules_real" SUBSYSTEM=="usb", GOTO="nut-usbups_rules_real" - BUS!="usb", GOTO="nut-usbups_rules_end" +-BUS!="usb", GOTO="nut-usbups_rules_end" ++SUBSYSTEM!="usb", GOTO="nut-usbups_rules_end" + + LABEL="nut-usbups_rules_real" + # Krauler UP-M500VA - blazer_usb From 6d0c7e7b3069ca83e567dbb63b7e0781040a808e Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 11 Jan 2011 22:24:32 +0100 Subject: [PATCH 028/291] Change nut-cgi Recommends to apache2 | httpd-cgi --- debian/changelog | 3 ++- debian/control | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 675975a..9e4d8b8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,10 +2,11 @@ nut (2.4.3-3) UNRELEASED; urgency=low * debian/control: - Wrap build-dependencies + - Change nut-cgi Recommends to apache2 | httpd-cgi * debian/nut.postinst: Only trigger USB subsystem, should Closes: #574769 * debian/patches/0002-fix_udev_action.patch: Use SUBSYSTEM instead of BUS - -- Laurent Bigonville Tue, 11 Jan 2011 01:32:06 +0100 + -- Laurent Bigonville Tue, 11 Jan 2011 22:24:07 +0100 nut (2.4.3-2) unstable; urgency=medium diff --git a/debian/control b/debian/control index 9e8e0ea..e44d674 100644 --- a/debian/control +++ b/debian/control @@ -45,7 +45,7 @@ Description: network UPS tools - core system Package: nut-cgi Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, adduser -Recommends: apache | httpd +Recommends: apache2 | httpd-cgi Suggests: nut Replaces: nut (<< 1.1.11) Description: network UPS tools - web interface From 9584e8dd52a002ef3a5848d3ab7baaf200ffdb0c Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Wed, 2 Feb 2011 17:51:42 +0100 Subject: [PATCH 029/291] New upstream release (Closes: #575176, #609597) * New upstream release (Closes: #575176, #609597) * debian/patches/*.patch: removed since these are now fixed upstream * debian/patches/0001-fix_spelling_and_typo.patch, debian/patches/series: reworked to match the new upstream release * debian/nut.install, debian/nut.manpages: remove obsolete reference to megatec and megatec_usb, now repectively replaced by blazer_ser and blazer_usb --- debian/changelog | 11 + debian/nut.install | 2 - debian/nut.manpages | 2 - .../patches/0001-fix_spelling_and_typo.patch | 250 ++++++++++++++++ debian/patches/0001-low_speed_usb_ups.patch | 22 -- debian/patches/0002-fix_udev_action.patch | 14 - .../patches/0003-fix_spelling_and_typo.patch | 275 ------------------ debian/patches/series | 4 +- 8 files changed, 262 insertions(+), 318 deletions(-) create mode 100644 debian/patches/0001-fix_spelling_and_typo.patch delete mode 100644 debian/patches/0001-low_speed_usb_ups.patch delete mode 100644 debian/patches/0002-fix_udev_action.patch delete mode 100644 debian/patches/0003-fix_spelling_and_typo.patch diff --git a/debian/changelog b/debian/changelog index 9e4d8b8..38c8229 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,14 @@ +nut (2.6.0-1) UNRELEASED; urgency=low + + * New upstream release (Closes: #575176, #609597) + * debian/patches/*.patch, debian/patches/series: removed since these + are now fixed upstream + * debian/nut.install, debian/nut.manpages: remove obsolete reference to + megatec and megatec_usb, now repectively replaced by blazer_ser and + blazer_usb + + -- Arnaud Quette Fri, 28 Jan 2011 11:08:10 +0100 + nut (2.4.3-3) UNRELEASED; urgency=low * debian/control: diff --git a/debian/nut.install b/debian/nut.install index ad72c3c..b535cd0 100644 --- a/debian/nut.install +++ b/debian/nut.install @@ -49,8 +49,6 @@ debian/tmp/lib/nut/bcmxcp_usb debian/tmp/lib/nut/victronups debian/tmp/lib/nut/tripplitesu debian/tmp/lib/nut/optiups -debian/tmp/lib/nut/megatec_usb debian/tmp/lib/nut/upsdrvctl /sbin -debian/tmp/lib/nut/megatec debian/tmp/lib/nut/everups debian/tmp/lib/nut/dummy-ups diff --git a/debian/nut.manpages b/debian/nut.manpages index 68c624a..ff02b6e 100644 --- a/debian/nut.manpages +++ b/debian/nut.manpages @@ -23,8 +23,6 @@ debian/tmp/usr/share/man/man8/genericups.8 debian/tmp/usr/share/man/man8/isbmex.8 debian/tmp/usr/share/man/man8/liebert.8 debian/tmp/usr/share/man/man8/masterguard.8 -debian/tmp/usr/share/man/man8/megatec.8 -debian/tmp/usr/share/man/man8/megatec_usb.8 debian/tmp/usr/share/man/man8/metasys.8 debian/tmp/usr/share/man/man8/mge-shut.8 debian/tmp/usr/share/man/man8/mge-utalk.8 diff --git a/debian/patches/0001-fix_spelling_and_typo.patch b/debian/patches/0001-fix_spelling_and_typo.patch new file mode 100644 index 0000000..d7a8096 --- /dev/null +++ b/debian/patches/0001-fix_spelling_and_typo.patch @@ -0,0 +1,250 @@ +--- a/docs/man/dummy-ups.txt (revision 2722) ++++ b/docs/man/dummy-ups.txt (revision 2882) +@@ -56,5 +56,5 @@ + This file is generally named "something.dev". It contains a list of all + valid data and associated values, and has the same format as an linkman:upsc[8] +-dump (: ). So you can easilly create definition ++dump (: ). So you can easily create definition + files from an existing UPS using "upsc > file.dev". + It can also be empty, in which case only a basic set of data is available: +--- a/docs/man/metasys.txt (revision 2722) ++++ b/docs/man/metasys.txt (revision 2882) +@@ -45,5 +45,5 @@ + ally HF 1000 only. + +-Any informations about the use of the driver with the other listed ++Any information about the use of the driver with the other listed + UPS are really welcome. + +--- a/drivers/apcsmart.c (revision 2596) ++++ b/drivers/apcsmart.c (revision 2882) +@@ -325,5 +325,5 @@ + this if the REQ_CAPABILITIES command is supported + */ +- upslogx(LOG_ERR, "ERROR: APC cannot do capabilites but said it could!"); ++ upslogx(LOG_ERR, "ERROR: APC cannot do capabilities but said it could!"); + return; + } +--- a/drivers/dummy-ups.c (revision 2699) ++++ b/drivers/dummy-ups.c (revision 2882) +@@ -376,5 +376,5 @@ + * the update / sync process (with cmdvartab?!) */ + +- upsdebugx(1, "Unknown data. Commiting anyway..."); ++ upsdebugx(1, "Unknown data. Committing anyway..."); + return 1; + /* return 0;*/ +@@ -396,5 +396,5 @@ + * the update / sync process (with cmdvartab?) */ + +- upsdebugx(1, "Unknown data. Commiting value anyway..."); ++ upsdebugx(1, "Unknown data. Committing value anyway..."); + return 1; + /* return 0;*/ +--- a/drivers/snmp-ups.c (revision 2757) ++++ b/drivers/snmp-ups.c (revision 2882) +@@ -485,5 +485,5 @@ + break; + default: +- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", ++ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", + upsname?upsname:device_name, pdu->variables->type, OID); + return FALSE; +@@ -525,5 +525,5 @@ + break; + default: +- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", ++ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", + upsname?upsname:device_name, pdu->variables->type, OID); + return FALSE; +@@ -1460,5 +1460,5 @@ + upslogx(LOG_ERR, "su_setvar: cannot set value %s for %s", arg[4], arg[3]); + else +- upsdebugx(1, "su_setvar: sucessfully set %s to \"%s\"", arg[0], arg[4]); ++ upsdebugx(1, "su_setvar: successfully set %s to \"%s\"", arg[0], arg[4]); + + return 1; +--- a/drivers/genericups.c (revision 2336) ++++ b/drivers/genericups.c (revision 2882) +@@ -143,10 +143,10 @@ + if ((v = getval("OL")) != NULL) { + parse_input_signals(v, &upstab[upstype].line_ol, &upstab[upstype].val_ol); +- upsdebugx(2, "parse_input_signals: OL overriden with %s\n", v); ++ upsdebugx(2, "parse_input_signals: OL overridden with %s\n", v); + } + + if ((v = getval("LB")) != NULL) { + parse_input_signals(v, &upstab[upstype].line_bl, &upstab[upstype].val_bl); +- upsdebugx(2, "parse_input_signals: LB overriden with %s\n", v); ++ upsdebugx(2, "parse_input_signals: LB overridden with %s\n", v); + } + } +@@ -319,10 +319,10 @@ + if ((v = getval("CP")) != NULL) { + parse_output_signals(v, &upstab[upstype].line_norm); +- upsdebugx(2, "parse_output_signals: CP overriden with %s\n", v); ++ upsdebugx(2, "parse_output_signals: CP overridden with %s\n", v); + } + + if ((v = getval("SD")) != NULL) { + parse_output_signals(v, &upstab[upstype].line_sd); +- upsdebugx(2, "parse_output_signals: SD overriden with %s\n", v); ++ upsdebugx(2, "parse_output_signals: SD overridden with %s\n", v); + } + +--- a/drivers/metasys.c (revision 2601) ++++ b/drivers/metasys.c (revision 2882) +@@ -63,10 +63,10 @@ + /* + Metasystem UPS data transfer are made with packet of the format: +- STX DATA_LENGHT DATA CHECKSUM ++ STX DATA_LENGTH DATA CHECKSUM + where: + STX is 0x02 and is the start of transmission byte +- DATA_LENGHT is number of data bytes + the checksum byte ++ DATA_LENGTH is number of data bytes + the checksum byte + DATA ...... +- CHECKSUM is the sum modulus 256 of all DATA bytes + DATA_LENGHT ++ CHECKSUM is the sum modulus 256 of all DATA bytes + DATA_LENGTH + + The answer from the UPS have the same packet format and the first +@@ -115,5 +115,5 @@ + + /* send a read command to the UPS, it retries 5 times before give up +- it's a 4 byte request (STX, LENGHT, COMMAND and CHECKSUM) */ ++ it's a 4 byte request (STX, LENGTH, COMMAND and CHECKSUM) */ + void send_read_command(char command) { + int retry, sent; +@@ -123,7 +123,7 @@ + while ((sent != 4) && (retry < 5)) { + buf[0]=0x02; /* STX Start of Transmission */ +- buf[1]=0x02; /* data lenght(data + checksum byte) */ ++ buf[1]=0x02; /* data length(data + checksum byte) */ + buf[2]=command; /* command to send */ +- buf[3]=buf[1] + buf[2]; /* checksum (sum modulus 256 of data bytes + lenght) */ ++ buf[3]=buf[1] + buf[2]; /* checksum (sum modulus 256 of data bytes + length) */ + if (retry == 4) send_zeros(); /* last retry is preceded by a serial reset...*/ + sent = ser_send_buf(upsfd, buf, 4); +@@ -135,5 +135,5 @@ + with a char* buffer + it retries 5 times before give up */ +-void send_write_command(unsigned char *command, int command_lenght) { ++void send_write_command(unsigned char *command, int command_length) { + int i, retry, sent, checksum; + unsigned char raw_buf[255]; +@@ -141,21 +141,21 @@ + /* prepares the raw data */ + raw_buf[0] = 0x02; /* STX byte */ +- raw_buf[1] = (unsigned char)(command_lenght + 1); /* data lenght + checksum */ +- memcpy(raw_buf+2, command, command_lenght); +- command_lenght += 2; ++ raw_buf[1] = (unsigned char)(command_length + 1); /* data length + checksum */ ++ memcpy(raw_buf+2, command, command_length); ++ command_length += 2; + + /* calculate checksum */ + checksum = 0; +- for (i = 1; i < command_lenght; i++) checksum += raw_buf[i]; ++ for (i = 1; i < command_length; i++) checksum += raw_buf[i]; + checksum = checksum % 256; +- raw_buf[command_lenght] = (unsigned char)checksum; +- command_lenght +=1; ++ raw_buf[command_length] = (unsigned char)checksum; ++ command_length +=1; + + retry = 0; + sent = 0; +- while ((sent != (command_lenght)) && (retry < 5)) { ++ while ((sent != (command_length)) && (retry < 5)) { + if (retry == 4) send_zeros(); /* last retry is preceded by a serial reset... */ +- sent = ser_send_buf(upsfd, raw_buf, (command_lenght)); +- if (sent != (command_lenght)) printf("Error sending command %d\n", raw_buf[2]); ++ sent = ser_send_buf(upsfd, raw_buf, (command_length)); ++ if (sent != (command_length)) printf("Error sending command %d\n", raw_buf[2]); + retry += 1; + } +@@ -165,6 +165,6 @@ + /* get the answer of a command from the ups */ + int get_answer(unsigned char *data) { +- unsigned char my_buf[255]; /* packet has a maximum lenght of 256 bytes */ +- int packet_lenght, checksum, i, res; ++ unsigned char my_buf[255]; /* packet has a maximum length of 256 bytes */ ++ int packet_length, checksum, i, res; + /* Read STX byte */ + res = ser_get_char(upsfd, my_buf, 1, 0); +@@ -177,41 +177,41 @@ + return -1; + } +- /* Read data lenght byte */ ++ /* Read data length byte */ + res = ser_get_char(upsfd, my_buf, 1, 0); + if (res < 1) { +- ser_comm_fail("Receive error (lenght): %d!!!\n", res); ++ ser_comm_fail("Receive error (length): %d!!!\n", res); + return -1; + } +- packet_lenght = my_buf[0]; +- if (packet_lenght < 2) { +- ser_comm_fail("Receive error (lenght): packet lenght %d!!!\n", packet_lenght); ++ packet_length = my_buf[0]; ++ if (packet_length < 2) { ++ ser_comm_fail("Receive error (length): packet length %d!!!\n", packet_length); + return -1; + } +- /* Try to read all the remainig bytes (packet_lenght) */ +- res = ser_get_buf_len(upsfd, my_buf, packet_lenght, 1, 0); +- if (res != packet_lenght) { +- ser_comm_fail("Receive error (data): got %d bytes instead of %d!!!\n", res, packet_lenght); ++ /* Try to read all the remainig bytes (packet_length) */ ++ res = ser_get_buf_len(upsfd, my_buf, packet_length, 1, 0); ++ if (res != packet_length) { ++ ser_comm_fail("Receive error (data): got %d bytes instead of %d!!!\n", res, packet_length); + return -1; + } + + /* now we have the whole answer from the ups, we can checksum it +- checksum byte is equal to the sum modulus 256 of all the data bytes + packet_lenght ++ checksum byte is equal to the sum modulus 256 of all the data bytes + packet_length + (no STX no checksum byte itself) */ +- checksum = packet_lenght; +- for (i = 0; i < (packet_lenght - 1); i++) checksum += my_buf[i]; ++ checksum = packet_length; ++ for (i = 0; i < (packet_length - 1); i++) checksum += my_buf[i]; + checksum = checksum % 256; +- if (my_buf[packet_lenght-1] != checksum) { +- ser_comm_fail("checksum error! got %x instad of %x, received %d bytes \n", my_buf[packet_lenght - 1], checksum, packet_lenght); +- dump_buffer(my_buf, packet_lenght); ++ if (my_buf[packet_length-1] != checksum) { ++ ser_comm_fail("checksum error! got %x instad of %x, received %d bytes \n", my_buf[packet_length - 1], checksum, packet_length); ++ dump_buffer(my_buf, packet_length); + return -1; + } +- packet_lenght-=1; /* get rid of the checksum byte */ +- memcpy(data, my_buf, packet_lenght); +- return packet_lenght; ++ packet_length-=1; /* get rid of the checksum byte */ ++ memcpy(data, my_buf, packet_length); ++ return packet_length; + } + + /* send a read command and try get the answer, if something fails, it retries (5 times max) + if it is on the 4th or 5th retry, it will flush the serial before sending commands +- it returns the lenght of the received answer or -1 in case of failure */ ++ it returns the length of the received answer or -1 in case of failure */ + int command_read_sequence(unsigned char command, unsigned char *data) { + int bytes_read = 0; +@@ -235,11 +235,11 @@ + /* send a write command and try get the answer, if something fails, it retries (5 times max) + if it is on the 4th or 5th retry, it will flush the serial before sending commands +- it returns the lenght of the received answer or -1 in case of failure */ +-int command_write_sequence(unsigned char *command, int command_lenght, unsigned char *answer) { ++ it returns the length of the received answer or -1 in case of failure */ ++int command_write_sequence(unsigned char *command, int command_length, unsigned char *answer) { + int bytes_read = 0; + int retry = 0; + + while ((bytes_read < 1) && (retry < 5)) { +- send_write_command(command, command_lenght); ++ send_write_command(command, command_length); + bytes_read = get_answer(answer); + if (retry > 2) ser_flush_in(upsfd, "", 0); diff --git a/debian/patches/0001-low_speed_usb_ups.patch b/debian/patches/0001-low_speed_usb_ups.patch deleted file mode 100644 index f16f5ab..0000000 --- a/debian/patches/0001-low_speed_usb_ups.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/drivers/libhid.c b/drivers/libhid.c -index 9387657..f2e8fbb 100644 ---- a/drivers/libhid.c -+++ b/drivers/libhid.c -@@ -141,7 +141,7 @@ static int refresh_report_buffer(reportbuf_t *rbuf, hid_dev_handle_t udev, HIDDa - { - int id = pData->ReportID; - int r; -- unsigned char buf[SMALLBUF]; -+ unsigned char buf[8]; - - if (rbuf->ts[id] + age > time(NULL)) { - /* buffered report is still good; nothing to do */ -@@ -469,7 +469,7 @@ bool_t HIDSetItemValue(hid_dev_handle_t udev, const char *hidpath, double Value, - */ - int HIDGetEvents(hid_dev_handle_t udev, HIDData_t **event, int eventsize) - { -- unsigned char buf[SMALLBUF]; -+ unsigned char buf[8]; - int itemCount = 0; - int buflen, r, i; - HIDData_t *pData; diff --git a/debian/patches/0002-fix_udev_action.patch b/debian/patches/0002-fix_udev_action.patch deleted file mode 100644 index 9b69945..0000000 --- a/debian/patches/0002-fix_udev_action.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/scripts/udev/nut-usbups.rules.in -+++ b/scripts/udev/nut-usbups.rules.in -@@ -1,9 +1,9 @@ - # This file is generated and installed by the Network UPS Tools package. - --ACTION!="add", GOTO="nut-usbups_rules_end" -+ACTION!="add|change", GOTO="nut-usbups_rules_end" - SUBSYSTEM=="usb_device", GOTO="nut-usbups_rules_real" - SUBSYSTEM=="usb", GOTO="nut-usbups_rules_real" --BUS!="usb", GOTO="nut-usbups_rules_end" -+SUBSYSTEM!="usb", GOTO="nut-usbups_rules_end" - - LABEL="nut-usbups_rules_real" - # Krauler UP-M500VA - blazer_usb diff --git a/debian/patches/0003-fix_spelling_and_typo.patch b/debian/patches/0003-fix_spelling_and_typo.patch deleted file mode 100644 index f46093b..0000000 --- a/debian/patches/0003-fix_spelling_and_typo.patch +++ /dev/null @@ -1,275 +0,0 @@ ---- a/man/powercom.8 -+++ b/man/powercom.8 -@@ -46,53 +46,53 @@ - loadPercentage and validationSequence. - - .IP "numOfBytesFromUPS=\fIvalue\fR" --The number of bytes in a UPS frame. The default is type dependant and -+The number of bytes in a UPS frame. The default is type dependent and - is given below. - - .IP "methodOfFlowControl=\fIname\fR" - The method of serial communication flow control that is engaged by the --UPS. The default is type dependant and is given below. Acceptable names -+UPS. The default is type dependent and is given below. Acceptable names - are dtr0rts1, dtr1 or no_flow_control. - - .IP "shutdownArguments=\fI{{minutes,seconds},whether_minutes_should_be_used}\fR" - The minutes and seconds that the UPS should wait between receiving the - shutdown command and actually shutting off. The other argument should - be set to the character \fIn\fR only when the minutes value should be --skipped and not sent to the UPS. The default is type dependant and is -+skipped and not sent to the UPS. The default is type dependent and is - given below. The braces and commas are mandatory. Note that there should - be no white space characters. - - .IP "voltage=\fI{coefficient1,coefficient2,coefficient3,coefficient4}\fR" - Only for KP625AP, Trust, Egys, BNT-other - A quad that is used convert the raw data to human readable voltage --reading. The default is type dependant and is given below. Do note that -+reading. The default is type dependent and is given below. Do note that - the braces and commas are mandatory, as well as the lack of white space - characters. - - .IP "frequency=\fI{coefficient1,coefficient2}\fR" - Only for KP625AP, Trust, Egys - A pair to convert the raw data to human readable frequency reading. The --default is type dependant and is given below. Do note that the braces -+default is type dependent and is given below. Do note that the braces - and commas are mandatory as well, as the lack of white space characters. - - .IP "batteryPercentage=\fI{coefficient1,coefficient2,coefficient3,coefficient4,coefficient5}\fR" - Only for KP625AP, Trust, Egys, BNT-other - A 5 tuple to convert the raw data to human readable battery percentage --reading. The default is type dependant and is given below. Do note that -+reading. The default is type dependent and is given below. Do note that - the braces and commas are mandatory, as the lack of white space - characters. - - .IP "loadPercentage=\fI{coefficient1,coefficient2,coefficient3,coefficient4}\fR" - Only for KP625AP, Trust, Egys, BNT-other - A quad to convert the raw data to human readable load percentage --reading. The default is type dependant and is given below. Do note that -+reading. The default is type dependent and is given below. Do note that - the braces and commas are mandatory, as the lack of white space - characters. - - .IP "validationSequence=\fI{{index1,value1},{index2,value2},{index3,value3}}\fR" - Only for KP625AP, Trust, Egys, BNT-other - 3 pairs to be used for validating the UPS by comparing bytes of the raw --data with constant values. The default is type dependant and is given -+data with constant values. The default is type dependent and is given - below. The braces and commas are mandatory, as the lack of white space - characters. - -@@ -105,7 +105,7 @@ - - .P - The rest of the default values for the extra arguments are type --dependant: -+dependent: - - .IP "Trust" - .RS ---- a/man/upsc.8 -+++ b/man/upsc.8 -@@ -50,7 +50,7 @@ - To list the UPSes configured on this system, along with their descriptions: - - .nf -- $ upsc -L -+ $ upsc \-L - apc: Back-UPS 500 - ppro2: Patriot Pro II - .fi -@@ -59,7 +59,7 @@ - syntax: - - .nf -- $ for UPS in `upsc -l mybox:1234`; do -+ $ for UPS in `upsc \-l mybox:1234`; do - upsc $UPS ups.status - done - .fi ---- a/drivers/dummy-ups.c -+++ b/drivers/dummy-ups.c -@@ -337,7 +337,7 @@ - /* FIXME: we need to have the full data set before - * enforcing controls! */ - -- upsdebugx(1, "Unknown data. Commiting anyway..."); -+ upsdebugx(1, "Unknown data. Committing anyway..."); - return 1; - /* return 0;*/ - } -@@ -355,7 +355,7 @@ - /* FIXME: we need to have the full data set before - * enforcing controls! */ - -- upsdebugx(1, "Unknown data. Commiting value anyway..."); -+ upsdebugx(1, "Unknown data. Committing value anyway..."); - return 1; - /* return 0;*/ - } ---- a/drivers/genericups.c -+++ b/drivers/genericups.c -@@ -142,12 +142,12 @@ - */ - if ((v = getval("OL")) != NULL) { - parse_input_signals(v, &upstab[upstype].line_ol, &upstab[upstype].val_ol); -- upsdebugx(2, "parse_input_signals: OL overriden with %s\n", v); -+ upsdebugx(2, "parse_input_signals: OL overridden with %s\n", v); - } - - if ((v = getval("LB")) != NULL) { - parse_input_signals(v, &upstab[upstype].line_bl, &upstab[upstype].val_bl); -- upsdebugx(2, "parse_input_signals: LB overriden with %s\n", v); -+ upsdebugx(2, "parse_input_signals: LB overridden with %s\n", v); - } - } - -@@ -318,12 +318,12 @@ - */ - if ((v = getval("CP")) != NULL) { - parse_output_signals(v, &upstab[upstype].line_norm); -- upsdebugx(2, "parse_output_signals: CP overriden with %s\n", v); -+ upsdebugx(2, "parse_output_signals: CP overridden with %s\n", v); - } - - if ((v = getval("SD")) != NULL) { - parse_output_signals(v, &upstab[upstype].line_sd); -- upsdebugx(2, "parse_output_signals: SD overriden with %s\n", v); -+ upsdebugx(2, "parse_output_signals: SD overridden with %s\n", v); - } - - if (ioctl(upsfd, TIOCMSET, &upstab[upstype].line_norm)) { ---- a/man/upscode2.8 -+++ b/man/upscode2.8 -@@ -49,7 +49,7 @@ - - The driver supports the following commands for those UPSen that support them. - The available commands are autodetected during initialization, --so you should check availability with \fIupscmd -l\fR. -+so you should check availability with \fIupscmd \-l\fR. - - test.panel.start \(hy Start UPS self test - ---- a/man/usbhid-ups.8 -+++ b/man/usbhid-ups.8 -@@ -59,7 +59,7 @@ - than offdelay, but the driver will \fBnot\fR warn you upon startup if it - isn't. Some UPS'es will restart no matter what, even if the power is - (still) out at the moment this timer elapses. In that case, you could try --if setting 'ondelay = -1' in \fBups.conf\fR helps. -+if setting 'ondelay = \-1' in \fBups.conf\fR helps. - - .IP "pollfreq=\fInum\fR" - Set polling frequency, in seconds, to reduce the USB data flow. -@@ -148,7 +148,7 @@ - .nf - usb 2-1: control timeout on ep0in - usb 2-1: usbfs: USBDEVFS_CONTROL failed cmd usbhid-ups rqt 128 rq 6 len 256 -- ret -110 -+ ret \-110 - .fi - - In this case, simply modify the general parameter "pollinterval" to a higher -@@ -170,7 +170,7 @@ - - If you rely on the UPS to shutdown your systems in case of mains failure - and to restart them when the power returns, you \fBmust\fR test this. You --can do so by running 'upsmon -c fsd'. With the mains present, this should -+can do so by running 'upsmon \-c fsd'. With the mains present, this should - bring your systems down and then cycle the power to restart them again. - If you do the same without mains present, it should do the same, but in - this case, the outputs shall remain off until mains power is applied ---- a/drivers/metasys.c -+++ b/drivers/metasys.c -@@ -179,12 +179,12 @@ - /* Read data lenght byte */ - res = ser_get_char(upsfd, my_buf, 1, 0); - if (res < 1) { -- ser_comm_fail("Receive error (lenght): %d!!!\n", res); -+ ser_comm_fail("Receive error (length): %d!!!\n", res); - return -1; - } - packet_lenght = my_buf[0]; - if (packet_lenght < 2) { -- ser_comm_fail("Receive error (lenght): packet lenght %d!!!\n", packet_lenght); -+ ser_comm_fail("Receive error (length): packet length %d!!!\n", packet_lenght); - return -1; - } - /* Try to read all the remainig bytes (packet_lenght) */ ---- a/drivers/snmp-ups.c -+++ b/drivers/snmp-ups.c -@@ -380,7 +380,7 @@ - len = snprintf(buf, buf_len, "%ld", *pdu->variables->val.integer / 100); - break; - default: -- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", -+ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", - upsname?upsname:device_name, pdu->variables->type, OID); - return FALSE; - break; -@@ -420,7 +420,7 @@ - value = *pdu->variables->val.integer / 100; - break; - default: -- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", -+ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", - upsname?upsname:device_name, pdu->variables->type, OID); - return FALSE; - break; -@@ -1319,7 +1319,7 @@ - if (ret == FALSE) - upslogx(LOG_ERR, "su_setvar: cannot set value %s for %s", arg[4], arg[3]); - else -- upsdebugx(1, "su_setvar: sucessfully set %s to \"%s\"", arg[0], arg[4]); -+ upsdebugx(1, "su_setvar: successfully set %s to \"%s\"", arg[0], arg[4]); - - return 1; - } ---- a/man/dummy-ups.8 -+++ b/man/dummy-ups.8 -@@ -38,7 +38,7 @@ - - This file is generally named something.dev. It contains a list of all - valid data and associated values, and has the same format as an upsc --dump (: ). So you can easilly create definition -+dump (: ). So you can easily create definition - files from an existing UPS using "upsc > file.dev". - It can also be empty, in which case only a basic set of data is available: - device.*, driver.*, ups.mfr, ups.model, ups.status ---- a/man/genericups.8 -+++ b/man/genericups.8 -@@ -235,7 +235,7 @@ - - Alternatively, you can run genericups in debug mode \(hy - -- genericups -DDDDD \-x upstype=n /dev/port -+ genericups \-DDDDD \-x upstype=n /dev/port - - In this mode it will be running in the foreground and continuously - display the line and battery status of the UPS. ---- a/man/metasys.8 -+++ b/man/metasys.8 -@@ -30,7 +30,7 @@ - .SH BUGS - This driver has been tested on Meta System HF Millennium 820 and - ally HF 1000 only. --Any informations about the use of the driver with the other listed -+Any information about the use of the driver with the other listed - ups are really welcome. - - .SH AUTHOR ---- a/drivers/apcsmart.c -+++ b/drivers/apcsmart.c -@@ -323,7 +323,7 @@ - /* This should never happen since we only call - this if the REQ_CAPABILITIES command is supported - */ -- upslogx(LOG_ERR, "ERROR: APC cannot do capabilites but said it could!"); -+ upslogx(LOG_ERR, "ERROR: APC cannot do capabilities but said it could!"); - return; - } - diff --git a/debian/patches/series b/debian/patches/series index c1939ab..52e301b 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1 @@ -0001-low_speed_usb_ups.patch -0002-fix_udev_action.patch -0003-fix_spelling_and_typo.patch +0001-fix_spelling_and_typo.patch From 6e28b57f5118b4184114af88981f5c967accae9f Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Wed, 16 Feb 2011 13:34:39 +0100 Subject: [PATCH 030/291] Complete the list of closed bugs with this new upstream release --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 38c8229..3e3fac9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,6 @@ nut (2.6.0-1) UNRELEASED; urgency=low - * New upstream release (Closes: #575176, #609597) + * New upstream release (Closes: #575176, #588648, #609597, #687985) * debian/patches/*.patch, debian/patches/series: removed since these are now fixed upstream * debian/nut.install, debian/nut.manpages: remove obsolete reference to From a876e1ab6d1ebba5cf530a4285a8687502188db9 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Wed, 16 Feb 2011 13:40:19 +0100 Subject: [PATCH 031/291] Update debian/changelog to fit reality --- debian/changelog | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 3e3fac9..d53424b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,11 @@ nut (2.6.0-1) UNRELEASED; urgency=low * New upstream release (Closes: #575176, #588648, #609597, #687985) - * debian/patches/*.patch, debian/patches/series: removed since these - are now fixed upstream + * debian/patches/*.patch: removed since these are now fixed upstream + * debian/patches/0001-fix_spelling_and_typo.patch, + debian/patches/series: reworked to match the new upstream release * debian/nut.install, debian/nut.manpages: remove obsolete reference to - megatec and megatec_usb, now repectively replaced by blazer_ser and + megatec and megatec_usb, now respectively replaced by blazer_ser and blazer_usb -- Arnaud Quette Fri, 28 Jan 2011 11:08:10 +0100 From db7ab48e759fd2b82ea8421baaa4358b555dbb15 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Wed, 16 Feb 2011 22:57:29 +0100 Subject: [PATCH 032/291] debian/nut.docs: limit distributed documentation --- debian/changelog | 3 ++- debian/nut.docs | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index d53424b..847db6c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,8 +7,9 @@ nut (2.6.0-1) UNRELEASED; urgency=low * debian/nut.install, debian/nut.manpages: remove obsolete reference to megatec and megatec_usb, now respectively replaced by blazer_ser and blazer_usb + * debian/nut.docs: limit distributed documentation - -- Arnaud Quette Fri, 28 Jan 2011 11:08:10 +0100 + -- Arnaud Quette Wed, 16 Feb 2011 22:55:26 +0100 nut (2.4.3-3) UNRELEASED; urgency=low diff --git a/debian/nut.docs b/debian/nut.docs index 90f2328..8f9c4d4 100644 --- a/debian/nut.docs +++ b/debian/nut.docs @@ -2,4 +2,18 @@ AUTHORS MAINTAINERS README UPGRADING -docs +docs/acknowledgements.txt +docs/config-notes.txt +docs/documentation.txt +docs/download.txt +docs/FAQ.txt +docs/features.txt +docs/history.txt +docs/nut-hal.txt +docs/nut-names.txt +docs/outlets.txt +docs/packager-guide.txt +docs/scheduling.txt +docs/security.txt +docs/support.txt +docs/user-manual.txt From 92977d203dc0befb936a918a89f0bded8ddb3251 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Wed, 16 Feb 2011 23:32:15 +0100 Subject: [PATCH 033/291] Release to unstable --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 847db6c..111138a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.6.0-1) UNRELEASED; urgency=low +nut (2.6.0-1) unstable; urgency=low * New upstream release (Closes: #575176, #588648, #609597, #687985) * debian/patches/*.patch: removed since these are now fixed upstream From 8aa07bb6f964554f66c19ab62287f587aaa34bd8 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Wed, 2 Mar 2011 14:52:18 +0100 Subject: [PATCH 034/291] debian/nut-snmp.docs: Distribute snmp.txt doc file (Closes: #548295) --- debian/changelog | 6 ++++++ debian/nut-snmp.docs | 1 + 2 files changed, 7 insertions(+) create mode 100644 debian/nut-snmp.docs diff --git a/debian/changelog b/debian/changelog index 111138a..4be8435 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +nut (2.6.0-2) UNRELEASED; urgency=low + + * debian/nut-snmp.docs: Distribute snmp.txt doc file (Closes: #548295) + + -- Laurent Bigonville Wed, 02 Mar 2011 14:51:38 +0100 + nut (2.6.0-1) unstable; urgency=low * New upstream release (Closes: #575176, #588648, #609597, #687985) diff --git a/debian/nut-snmp.docs b/debian/nut-snmp.docs new file mode 100644 index 0000000..9611f52 --- /dev/null +++ b/debian/nut-snmp.docs @@ -0,0 +1 @@ +docs/snmp.txt From facb36783176e1094d88ddde66018ca22150a018 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Wed, 2 Mar 2011 15:24:22 +0100 Subject: [PATCH 035/291] d/p/0001-fix_spelling_and_typo.patch: Update and refresh --- debian/changelog | 3 +- .../patches/0001-fix_spelling_and_typo.patch | 567 ++++++++++-------- 2 files changed, 319 insertions(+), 251 deletions(-) diff --git a/debian/changelog b/debian/changelog index 4be8435..a66b49d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,9 @@ nut (2.6.0-2) UNRELEASED; urgency=low * debian/nut-snmp.docs: Distribute snmp.txt doc file (Closes: #548295) + * d/p/0001-fix_spelling_and_typo.patch: Update and refresh - -- Laurent Bigonville Wed, 02 Mar 2011 14:51:38 +0100 + -- Laurent Bigonville Wed, 02 Mar 2011 15:23:18 +0100 nut (2.6.0-1) unstable; urgency=low diff --git a/debian/patches/0001-fix_spelling_and_typo.patch b/debian/patches/0001-fix_spelling_and_typo.patch index d7a8096..44cc905 100644 --- a/debian/patches/0001-fix_spelling_and_typo.patch +++ b/debian/patches/0001-fix_spelling_and_typo.patch @@ -1,250 +1,317 @@ ---- a/docs/man/dummy-ups.txt (revision 2722) -+++ b/docs/man/dummy-ups.txt (revision 2882) -@@ -56,5 +56,5 @@ - This file is generally named "something.dev". It contains a list of all - valid data and associated values, and has the same format as an linkman:upsc[8] --dump (: ). So you can easilly create definition -+dump (: ). So you can easily create definition - files from an existing UPS using "upsc > file.dev". - It can also be empty, in which case only a basic set of data is available: ---- a/docs/man/metasys.txt (revision 2722) -+++ b/docs/man/metasys.txt (revision 2882) -@@ -45,5 +45,5 @@ - ally HF 1000 only. - --Any informations about the use of the driver with the other listed -+Any information about the use of the driver with the other listed - UPS are really welcome. - ---- a/drivers/apcsmart.c (revision 2596) -+++ b/drivers/apcsmart.c (revision 2882) -@@ -325,5 +325,5 @@ - this if the REQ_CAPABILITIES command is supported - */ -- upslogx(LOG_ERR, "ERROR: APC cannot do capabilites but said it could!"); -+ upslogx(LOG_ERR, "ERROR: APC cannot do capabilities but said it could!"); - return; - } ---- a/drivers/dummy-ups.c (revision 2699) -+++ b/drivers/dummy-ups.c (revision 2882) -@@ -376,5 +376,5 @@ - * the update / sync process (with cmdvartab?!) */ - -- upsdebugx(1, "Unknown data. Commiting anyway..."); -+ upsdebugx(1, "Unknown data. Committing anyway..."); - return 1; - /* return 0;*/ -@@ -396,5 +396,5 @@ - * the update / sync process (with cmdvartab?) */ - -- upsdebugx(1, "Unknown data. Commiting value anyway..."); -+ upsdebugx(1, "Unknown data. Committing value anyway..."); - return 1; - /* return 0;*/ ---- a/drivers/snmp-ups.c (revision 2757) -+++ b/drivers/snmp-ups.c (revision 2882) -@@ -485,5 +485,5 @@ - break; - default: -- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", -+ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", - upsname?upsname:device_name, pdu->variables->type, OID); - return FALSE; -@@ -525,5 +525,5 @@ - break; - default: -- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", -+ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", - upsname?upsname:device_name, pdu->variables->type, OID); - return FALSE; -@@ -1460,5 +1460,5 @@ - upslogx(LOG_ERR, "su_setvar: cannot set value %s for %s", arg[4], arg[3]); - else -- upsdebugx(1, "su_setvar: sucessfully set %s to \"%s\"", arg[0], arg[4]); -+ upsdebugx(1, "su_setvar: successfully set %s to \"%s\"", arg[0], arg[4]); - - return 1; ---- a/drivers/genericups.c (revision 2336) -+++ b/drivers/genericups.c (revision 2882) -@@ -143,10 +143,10 @@ - if ((v = getval("OL")) != NULL) { - parse_input_signals(v, &upstab[upstype].line_ol, &upstab[upstype].val_ol); -- upsdebugx(2, "parse_input_signals: OL overriden with %s\n", v); -+ upsdebugx(2, "parse_input_signals: OL overridden with %s\n", v); - } - - if ((v = getval("LB")) != NULL) { - parse_input_signals(v, &upstab[upstype].line_bl, &upstab[upstype].val_bl); -- upsdebugx(2, "parse_input_signals: LB overriden with %s\n", v); -+ upsdebugx(2, "parse_input_signals: LB overridden with %s\n", v); - } - } -@@ -319,10 +319,10 @@ - if ((v = getval("CP")) != NULL) { - parse_output_signals(v, &upstab[upstype].line_norm); -- upsdebugx(2, "parse_output_signals: CP overriden with %s\n", v); -+ upsdebugx(2, "parse_output_signals: CP overridden with %s\n", v); - } - - if ((v = getval("SD")) != NULL) { - parse_output_signals(v, &upstab[upstype].line_sd); -- upsdebugx(2, "parse_output_signals: SD overriden with %s\n", v); -+ upsdebugx(2, "parse_output_signals: SD overridden with %s\n", v); - } - ---- a/drivers/metasys.c (revision 2601) -+++ b/drivers/metasys.c (revision 2882) -@@ -63,10 +63,10 @@ - /* - Metasystem UPS data transfer are made with packet of the format: -- STX DATA_LENGHT DATA CHECKSUM -+ STX DATA_LENGTH DATA CHECKSUM - where: - STX is 0x02 and is the start of transmission byte -- DATA_LENGHT is number of data bytes + the checksum byte -+ DATA_LENGTH is number of data bytes + the checksum byte - DATA ...... -- CHECKSUM is the sum modulus 256 of all DATA bytes + DATA_LENGHT -+ CHECKSUM is the sum modulus 256 of all DATA bytes + DATA_LENGTH - - The answer from the UPS have the same packet format and the first -@@ -115,5 +115,5 @@ - - /* send a read command to the UPS, it retries 5 times before give up -- it's a 4 byte request (STX, LENGHT, COMMAND and CHECKSUM) */ -+ it's a 4 byte request (STX, LENGTH, COMMAND and CHECKSUM) */ - void send_read_command(char command) { - int retry, sent; -@@ -123,7 +123,7 @@ - while ((sent != 4) && (retry < 5)) { - buf[0]=0x02; /* STX Start of Transmission */ -- buf[1]=0x02; /* data lenght(data + checksum byte) */ -+ buf[1]=0x02; /* data length(data + checksum byte) */ - buf[2]=command; /* command to send */ -- buf[3]=buf[1] + buf[2]; /* checksum (sum modulus 256 of data bytes + lenght) */ -+ buf[3]=buf[1] + buf[2]; /* checksum (sum modulus 256 of data bytes + length) */ - if (retry == 4) send_zeros(); /* last retry is preceded by a serial reset...*/ - sent = ser_send_buf(upsfd, buf, 4); -@@ -135,5 +135,5 @@ - with a char* buffer - it retries 5 times before give up */ --void send_write_command(unsigned char *command, int command_lenght) { -+void send_write_command(unsigned char *command, int command_length) { - int i, retry, sent, checksum; - unsigned char raw_buf[255]; -@@ -141,21 +141,21 @@ - /* prepares the raw data */ - raw_buf[0] = 0x02; /* STX byte */ -- raw_buf[1] = (unsigned char)(command_lenght + 1); /* data lenght + checksum */ -- memcpy(raw_buf+2, command, command_lenght); -- command_lenght += 2; -+ raw_buf[1] = (unsigned char)(command_length + 1); /* data length + checksum */ -+ memcpy(raw_buf+2, command, command_length); -+ command_length += 2; - - /* calculate checksum */ - checksum = 0; -- for (i = 1; i < command_lenght; i++) checksum += raw_buf[i]; -+ for (i = 1; i < command_length; i++) checksum += raw_buf[i]; - checksum = checksum % 256; -- raw_buf[command_lenght] = (unsigned char)checksum; -- command_lenght +=1; -+ raw_buf[command_length] = (unsigned char)checksum; -+ command_length +=1; - - retry = 0; - sent = 0; -- while ((sent != (command_lenght)) && (retry < 5)) { -+ while ((sent != (command_length)) && (retry < 5)) { - if (retry == 4) send_zeros(); /* last retry is preceded by a serial reset... */ -- sent = ser_send_buf(upsfd, raw_buf, (command_lenght)); -- if (sent != (command_lenght)) printf("Error sending command %d\n", raw_buf[2]); -+ sent = ser_send_buf(upsfd, raw_buf, (command_length)); -+ if (sent != (command_length)) printf("Error sending command %d\n", raw_buf[2]); - retry += 1; - } -@@ -165,6 +165,6 @@ - /* get the answer of a command from the ups */ - int get_answer(unsigned char *data) { -- unsigned char my_buf[255]; /* packet has a maximum lenght of 256 bytes */ -- int packet_lenght, checksum, i, res; -+ unsigned char my_buf[255]; /* packet has a maximum length of 256 bytes */ -+ int packet_length, checksum, i, res; - /* Read STX byte */ - res = ser_get_char(upsfd, my_buf, 1, 0); -@@ -177,41 +177,41 @@ - return -1; - } -- /* Read data lenght byte */ -+ /* Read data length byte */ - res = ser_get_char(upsfd, my_buf, 1, 0); - if (res < 1) { -- ser_comm_fail("Receive error (lenght): %d!!!\n", res); -+ ser_comm_fail("Receive error (length): %d!!!\n", res); - return -1; - } -- packet_lenght = my_buf[0]; -- if (packet_lenght < 2) { -- ser_comm_fail("Receive error (lenght): packet lenght %d!!!\n", packet_lenght); -+ packet_length = my_buf[0]; -+ if (packet_length < 2) { -+ ser_comm_fail("Receive error (length): packet length %d!!!\n", packet_length); - return -1; - } -- /* Try to read all the remainig bytes (packet_lenght) */ -- res = ser_get_buf_len(upsfd, my_buf, packet_lenght, 1, 0); -- if (res != packet_lenght) { -- ser_comm_fail("Receive error (data): got %d bytes instead of %d!!!\n", res, packet_lenght); -+ /* Try to read all the remainig bytes (packet_length) */ -+ res = ser_get_buf_len(upsfd, my_buf, packet_length, 1, 0); -+ if (res != packet_length) { -+ ser_comm_fail("Receive error (data): got %d bytes instead of %d!!!\n", res, packet_length); - return -1; - } - - /* now we have the whole answer from the ups, we can checksum it -- checksum byte is equal to the sum modulus 256 of all the data bytes + packet_lenght -+ checksum byte is equal to the sum modulus 256 of all the data bytes + packet_length - (no STX no checksum byte itself) */ -- checksum = packet_lenght; -- for (i = 0; i < (packet_lenght - 1); i++) checksum += my_buf[i]; -+ checksum = packet_length; -+ for (i = 0; i < (packet_length - 1); i++) checksum += my_buf[i]; - checksum = checksum % 256; -- if (my_buf[packet_lenght-1] != checksum) { -- ser_comm_fail("checksum error! got %x instad of %x, received %d bytes \n", my_buf[packet_lenght - 1], checksum, packet_lenght); -- dump_buffer(my_buf, packet_lenght); -+ if (my_buf[packet_length-1] != checksum) { -+ ser_comm_fail("checksum error! got %x instad of %x, received %d bytes \n", my_buf[packet_length - 1], checksum, packet_length); -+ dump_buffer(my_buf, packet_length); - return -1; - } -- packet_lenght-=1; /* get rid of the checksum byte */ -- memcpy(data, my_buf, packet_lenght); -- return packet_lenght; -+ packet_length-=1; /* get rid of the checksum byte */ -+ memcpy(data, my_buf, packet_length); -+ return packet_length; - } - - /* send a read command and try get the answer, if something fails, it retries (5 times max) - if it is on the 4th or 5th retry, it will flush the serial before sending commands -- it returns the lenght of the received answer or -1 in case of failure */ -+ it returns the length of the received answer or -1 in case of failure */ - int command_read_sequence(unsigned char command, unsigned char *data) { - int bytes_read = 0; -@@ -235,11 +235,11 @@ - /* send a write command and try get the answer, if something fails, it retries (5 times max) - if it is on the 4th or 5th retry, it will flush the serial before sending commands -- it returns the lenght of the received answer or -1 in case of failure */ --int command_write_sequence(unsigned char *command, int command_lenght, unsigned char *answer) { -+ it returns the length of the received answer or -1 in case of failure */ -+int command_write_sequence(unsigned char *command, int command_length, unsigned char *answer) { - int bytes_read = 0; - int retry = 0; - - while ((bytes_read < 1) && (retry < 5)) { -- send_write_command(command, command_lenght); -+ send_write_command(command, command_length); - bytes_read = get_answer(answer); - if (retry > 2) ser_flush_in(upsfd, "", 0); +--- a/docs/man/bcmxcp.8 ++++ b/docs/man/bcmxcp.8 +@@ -103,7 +103,7 @@ + .RE + .SH "TODO LIST" + .PP +-Report UPS statistics informations ++Report UPS statistics information + .RS 4 + BCM/XCP supports reporting of UPS statistics data\&. + .RE +--- a/docs/man/dummy-ups.8 ++++ b/docs/man/dummy-ups.8 +@@ -63,7 +63,7 @@ + .RE + .\} + .sp +-This file is generally named "something\&.dev"\&. It contains a list of all valid data and associated values, and has the same format as an \fBupsc\fR(8) dump (: )\&. So you can easilly create definition files from an existing UPS using "upsc > file\&.dev"\&. It can also be empty, in which case only a basic set of data is available: device\&.\fB, driver\&.\fR, ups\&.mfr, ups\&.model, ups\&.status ++This file is generally named "something\&.dev"\&. It contains a list of all valid data and associated values, and has the same format as an \fBupsc\fR(8) dump (: )\&. So you can easily create definition files from an existing UPS using "upsc > file\&.dev"\&. It can also be empty, in which case only a basic set of data is available: device\&.\fB, driver\&.\fR, ups\&.mfr, ups\&.model, ups\&.status + .sp + Samples definition files are available in the "data" directory of the nut source tree, and generally in the sysconfig directory of your system distribution\&. + .sp +--- a/docs/man/dummy-ups.txt ++++ b/docs/man/dummy-ups.txt +@@ -55,7 +55,7 @@ + + This file is generally named "something.dev". It contains a list of all + valid data and associated values, and has the same format as an linkman:upsc[8] +-dump (: ). So you can easilly create definition ++dump (: ). So you can easily create definition + files from an existing UPS using "upsc > file.dev". + It can also be empty, in which case only a basic set of data is available: + device.*, driver.*, ups.mfr, ups.model, ups.status +--- a/docs/man/metasys.8 ++++ b/docs/man/metasys.8 +@@ -124,7 +124,7 @@ + .sp + This driver has been tested on Meta System HF Millennium 820 and ally HF 1000 only\&. + .sp +-Any informations about the use of the driver with the other listed UPS are really welcome\&. ++Any information about the use of the driver with the other listed UPS are really welcome\&. + .SH "AUTHOR" + .sp + Fabio Di Niro +--- a/docs/man/metasys.txt ++++ b/docs/man/metasys.txt +@@ -44,7 +44,7 @@ + This driver has been tested on Meta System HF Millennium 820 and + ally HF 1000 only. + +-Any informations about the use of the driver with the other listed ++Any information about the use of the driver with the other listed + UPS are really welcome. + + AUTHOR +--- a/drivers/apcsmart.c ++++ b/drivers/apcsmart.c +@@ -324,7 +324,7 @@ + /* This should never happen since we only call + this if the REQ_CAPABILITIES command is supported + */ +- upslogx(LOG_ERR, "ERROR: APC cannot do capabilites but said it could!"); ++ upslogx(LOG_ERR, "ERROR: APC cannot do capabilities but said it could!"); + return; + } + +--- a/drivers/dummy-ups.c ++++ b/drivers/dummy-ups.c +@@ -375,7 +375,7 @@ + * enforcing controls! We also need a way to automate + * the update / sync process (with cmdvartab?!) */ + +- upsdebugx(1, "Unknown data. Commiting anyway..."); ++ upsdebugx(1, "Unknown data. Committing anyway..."); + return 1; + /* return 0;*/ + } +@@ -395,7 +395,7 @@ + * enforcing controls! We also need a way to automate + * the update / sync process (with cmdvartab?) */ + +- upsdebugx(1, "Unknown data. Commiting value anyway..."); ++ upsdebugx(1, "Unknown data. Committing value anyway..."); + return 1; + /* return 0;*/ + } +--- a/drivers/genericups.c ++++ b/drivers/genericups.c +@@ -142,12 +142,12 @@ + */ + if ((v = getval("OL")) != NULL) { + parse_input_signals(v, &upstab[upstype].line_ol, &upstab[upstype].val_ol); +- upsdebugx(2, "parse_input_signals: OL overriden with %s\n", v); ++ upsdebugx(2, "parse_input_signals: OL overridden with %s\n", v); + } + + if ((v = getval("LB")) != NULL) { + parse_input_signals(v, &upstab[upstype].line_bl, &upstab[upstype].val_bl); +- upsdebugx(2, "parse_input_signals: LB overriden with %s\n", v); ++ upsdebugx(2, "parse_input_signals: LB overridden with %s\n", v); + } + } + +@@ -318,12 +318,12 @@ + */ + if ((v = getval("CP")) != NULL) { + parse_output_signals(v, &upstab[upstype].line_norm); +- upsdebugx(2, "parse_output_signals: CP overriden with %s\n", v); ++ upsdebugx(2, "parse_output_signals: CP overridden with %s\n", v); + } + + if ((v = getval("SD")) != NULL) { + parse_output_signals(v, &upstab[upstype].line_sd); +- upsdebugx(2, "parse_output_signals: SD overriden with %s\n", v); ++ upsdebugx(2, "parse_output_signals: SD overridden with %s\n", v); + } + + if (ioctl(upsfd, TIOCMSET, &upstab[upstype].line_norm)) { +--- a/drivers/metasys.c ++++ b/drivers/metasys.c +@@ -62,12 +62,12 @@ + + /* + Metasystem UPS data transfer are made with packet of the format: +- STX DATA_LENGHT DATA CHECKSUM ++ STX DATA_LENGTH DATA CHECKSUM + where: + STX is 0x02 and is the start of transmission byte +- DATA_LENGHT is number of data bytes + the checksum byte ++ DATA_LENGTH is number of data bytes + the checksum byte + DATA ...... +- CHECKSUM is the sum modulus 256 of all DATA bytes + DATA_LENGHT ++ CHECKSUM is the sum modulus 256 of all DATA bytes + DATA_LENGTH + + The answer from the UPS have the same packet format and the first + data byte is equal to the command that the ups is answering to +@@ -114,7 +114,7 @@ + } + + /* send a read command to the UPS, it retries 5 times before give up +- it's a 4 byte request (STX, LENGHT, COMMAND and CHECKSUM) */ ++ it's a 4 byte request (STX, LENGTH, COMMAND and CHECKSUM) */ + void send_read_command(char command) { + int retry, sent; + unsigned char buf[4]; +@@ -122,9 +122,9 @@ + sent = 0; + while ((sent != 4) && (retry < 5)) { + buf[0]=0x02; /* STX Start of Transmission */ +- buf[1]=0x02; /* data lenght(data + checksum byte) */ ++ buf[1]=0x02; /* data length(data + checksum byte) */ + buf[2]=command; /* command to send */ +- buf[3]=buf[1] + buf[2]; /* checksum (sum modulus 256 of data bytes + lenght) */ ++ buf[3]=buf[1] + buf[2]; /* checksum (sum modulus 256 of data bytes + length) */ + if (retry == 4) send_zeros(); /* last retry is preceded by a serial reset...*/ + sent = ser_send_buf(upsfd, buf, 4); + retry += 1; +@@ -134,29 +134,29 @@ + /* send a write command to the UPS, the write command and the value to be written are passed + with a char* buffer + it retries 5 times before give up */ +-void send_write_command(unsigned char *command, int command_lenght) { ++void send_write_command(unsigned char *command, int command_length) { + int i, retry, sent, checksum; + unsigned char raw_buf[255]; + + /* prepares the raw data */ + raw_buf[0] = 0x02; /* STX byte */ +- raw_buf[1] = (unsigned char)(command_lenght + 1); /* data lenght + checksum */ +- memcpy(raw_buf+2, command, command_lenght); +- command_lenght += 2; ++ raw_buf[1] = (unsigned char)(command_length + 1); /* data length + checksum */ ++ memcpy(raw_buf+2, command, command_length); ++ command_length += 2; + + /* calculate checksum */ + checksum = 0; +- for (i = 1; i < command_lenght; i++) checksum += raw_buf[i]; ++ for (i = 1; i < command_length; i++) checksum += raw_buf[i]; + checksum = checksum % 256; +- raw_buf[command_lenght] = (unsigned char)checksum; +- command_lenght +=1; ++ raw_buf[command_length] = (unsigned char)checksum; ++ command_length +=1; + + retry = 0; + sent = 0; +- while ((sent != (command_lenght)) && (retry < 5)) { ++ while ((sent != (command_length)) && (retry < 5)) { + if (retry == 4) send_zeros(); /* last retry is preceded by a serial reset... */ +- sent = ser_send_buf(upsfd, raw_buf, (command_lenght)); +- if (sent != (command_lenght)) printf("Error sending command %d\n", raw_buf[2]); ++ sent = ser_send_buf(upsfd, raw_buf, (command_length)); ++ if (sent != (command_length)) printf("Error sending command %d\n", raw_buf[2]); + retry += 1; + } + } +@@ -164,8 +164,8 @@ + + /* get the answer of a command from the ups */ + int get_answer(unsigned char *data) { +- unsigned char my_buf[255]; /* packet has a maximum lenght of 256 bytes */ +- int packet_lenght, checksum, i, res; ++ unsigned char my_buf[255]; /* packet has a maximum length of 256 bytes */ ++ int packet_length, checksum, i, res; + /* Read STX byte */ + res = ser_get_char(upsfd, my_buf, 1, 0); + if (res < 1) { +@@ -176,43 +176,43 @@ + ser_comm_fail("Receive error (STX): packet not on start!!\n"); + return -1; + } +- /* Read data lenght byte */ ++ /* Read data length byte */ + res = ser_get_char(upsfd, my_buf, 1, 0); + if (res < 1) { +- ser_comm_fail("Receive error (lenght): %d!!!\n", res); ++ ser_comm_fail("Receive error (length): %d!!!\n", res); + return -1; + } +- packet_lenght = my_buf[0]; +- if (packet_lenght < 2) { +- ser_comm_fail("Receive error (lenght): packet lenght %d!!!\n", packet_lenght); ++ packet_length = my_buf[0]; ++ if (packet_length < 2) { ++ ser_comm_fail("Receive error (length): packet length %d!!!\n", packet_length); + return -1; + } +- /* Try to read all the remainig bytes (packet_lenght) */ +- res = ser_get_buf_len(upsfd, my_buf, packet_lenght, 1, 0); +- if (res != packet_lenght) { +- ser_comm_fail("Receive error (data): got %d bytes instead of %d!!!\n", res, packet_lenght); ++ /* Try to read all the remainig bytes (packet_length) */ ++ res = ser_get_buf_len(upsfd, my_buf, packet_length, 1, 0); ++ if (res != packet_length) { ++ ser_comm_fail("Receive error (data): got %d bytes instead of %d!!!\n", res, packet_length); + return -1; + } + + /* now we have the whole answer from the ups, we can checksum it +- checksum byte is equal to the sum modulus 256 of all the data bytes + packet_lenght ++ checksum byte is equal to the sum modulus 256 of all the data bytes + packet_length + (no STX no checksum byte itself) */ +- checksum = packet_lenght; +- for (i = 0; i < (packet_lenght - 1); i++) checksum += my_buf[i]; ++ checksum = packet_length; ++ for (i = 0; i < (packet_length - 1); i++) checksum += my_buf[i]; + checksum = checksum % 256; +- if (my_buf[packet_lenght-1] != checksum) { +- ser_comm_fail("checksum error! got %x instad of %x, received %d bytes \n", my_buf[packet_lenght - 1], checksum, packet_lenght); +- dump_buffer(my_buf, packet_lenght); ++ if (my_buf[packet_length-1] != checksum) { ++ ser_comm_fail("checksum error! got %x instad of %x, received %d bytes \n", my_buf[packet_length - 1], checksum, packet_length); ++ dump_buffer(my_buf, packet_length); + return -1; + } +- packet_lenght-=1; /* get rid of the checksum byte */ +- memcpy(data, my_buf, packet_lenght); +- return packet_lenght; ++ packet_length-=1; /* get rid of the checksum byte */ ++ memcpy(data, my_buf, packet_length); ++ return packet_length; + } + + /* send a read command and try get the answer, if something fails, it retries (5 times max) + if it is on the 4th or 5th retry, it will flush the serial before sending commands +- it returns the lenght of the received answer or -1 in case of failure */ ++ it returns the length of the received answer or -1 in case of failure */ + int command_read_sequence(unsigned char command, unsigned char *data) { + int bytes_read = 0; + int retry = 0; +@@ -234,13 +234,13 @@ + + /* send a write command and try get the answer, if something fails, it retries (5 times max) + if it is on the 4th or 5th retry, it will flush the serial before sending commands +- it returns the lenght of the received answer or -1 in case of failure */ +-int command_write_sequence(unsigned char *command, int command_lenght, unsigned char *answer) { ++ it returns the length of the received answer or -1 in case of failure */ ++int command_write_sequence(unsigned char *command, int command_length, unsigned char *answer) { + int bytes_read = 0; + int retry = 0; + + while ((bytes_read < 1) && (retry < 5)) { +- send_write_command(command, command_lenght); ++ send_write_command(command, command_length); + bytes_read = get_answer(answer); + if (retry > 2) ser_flush_in(upsfd, "", 0); + retry += 1; +--- a/drivers/snmp-ups.c ++++ b/drivers/snmp-ups.c +@@ -484,7 +484,7 @@ + len = snprintf(buf, buf_len, "%ld", *pdu->variables->val.integer / 100); + break; + default: +- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", ++ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", + upsname?upsname:device_name, pdu->variables->type, OID); + return FALSE; + break; +@@ -524,7 +524,7 @@ + value = *pdu->variables->val.integer / 100; + break; + default: +- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", ++ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", + upsname?upsname:device_name, pdu->variables->type, OID); + return FALSE; + break; +@@ -1459,7 +1459,7 @@ + if (ret == FALSE) + upslogx(LOG_ERR, "su_setvar: cannot set value %s for %s", arg[4], arg[3]); + else +- upsdebugx(1, "su_setvar: sucessfully set %s to \"%s\"", arg[0], arg[4]); ++ upsdebugx(1, "su_setvar: successfully set %s to \"%s\"", arg[0], arg[4]); + + return 1; + } From 3323ee630367fd60dc1846375c427edc050b596c Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Apr 2011 23:55:23 +0200 Subject: [PATCH 036/291] debian/nut.lintian-overrides: Fix typo --- debian/changelog | 3 ++- debian/nut.lintian-overrides | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index a66b49d..983c120 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,8 +2,9 @@ nut (2.6.0-2) UNRELEASED; urgency=low * debian/nut-snmp.docs: Distribute snmp.txt doc file (Closes: #548295) * d/p/0001-fix_spelling_and_typo.patch: Update and refresh + * debian/nut.lintian-overrides: Fix typo - -- Laurent Bigonville Wed, 02 Mar 2011 15:23:18 +0100 + -- Laurent Bigonville Sun, 24 Apr 2011 23:55:12 +0200 nut (2.6.0-1) unstable; urgency=low diff --git a/debian/nut.lintian-overrides b/debian/nut.lintian-overrides index 79b0fbd..b30037b 100644 --- a/debian/nut.lintian-overrides +++ b/debian/nut.lintian-overrides @@ -1,2 +1,2 @@ nut: script-in-etc-init.d-not-registered-via-update-rc.d -nut: init.d-script-does-not-provide-itself /etc/init.d/ups-monitor +nut: init.d-script-does-not-provide-itself etc/init.d/ups-monitor From 06a2c090710ee720c3e782a4cd5b8106a5d3d4b1 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 7 May 2011 01:09:58 +0200 Subject: [PATCH 037/291] debian/patch/0002-fix_libupsclient_pc.patch: Fix libupsclient.pc (Closes: #624255) --- debian/changelog | 4 +++- debian/patches/0002-fix_libupsclient_pc.patch | 11 +++++++++++ debian/patches/series | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 debian/patches/0002-fix_libupsclient_pc.patch diff --git a/debian/changelog b/debian/changelog index 983c120..3ef7ebd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,8 +3,10 @@ nut (2.6.0-2) UNRELEASED; urgency=low * debian/nut-snmp.docs: Distribute snmp.txt doc file (Closes: #548295) * d/p/0001-fix_spelling_and_typo.patch: Update and refresh * debian/nut.lintian-overrides: Fix typo + * debian/patch/0002-fix_libupsclient_pc.patch: Fix libupsclient.pc (Closes: + #624255) - -- Laurent Bigonville Sun, 24 Apr 2011 23:55:12 +0200 + -- Laurent Bigonville Sat, 07 May 2011 01:07:39 +0200 nut (2.6.0-1) unstable; urgency=low diff --git a/debian/patches/0002-fix_libupsclient_pc.patch b/debian/patches/0002-fix_libupsclient_pc.patch new file mode 100644 index 0000000..0c50a0e --- /dev/null +++ b/debian/patches/0002-fix_libupsclient_pc.patch @@ -0,0 +1,11 @@ +diff --git a/lib/libupsclient.pc.in b/lib/libupsclient.pc.in +index eb6826c..4ad31fb 100644 +--- a/lib/libupsclient.pc.in ++++ b/lib/libupsclient.pc.in +@@ -9,5 +9,5 @@ nutuser=@RUN_AS_USER@ + Name: libupsclient + Description: UPS monitoring with Network UPS Tools + Version: @PACKAGE_VERSION@ +-Libs: -L${libdir} -lupsclient @LIBSSL_LDFLAGS@ ++Libs: -L${libdir} -lupsclient @LIBSSL_LIBS@ + Cflags: -I${includedir} @LIBSSL_CFLAGS@ diff --git a/debian/patches/series b/debian/patches/series index 52e301b..4dd5e93 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ 0001-fix_spelling_and_typo.patch +0002-fix_libupsclient_pc.patch From 9f5431316bcbdb6e892958aacab2ea1f732083d1 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Apr 2011 23:37:41 +0200 Subject: [PATCH 038/291] Switch to cdbs * debian/rules: - Switch to cdbs - Remove not existing configure options (Closes: #611813) - Drop Phony rules (Closes: #613699) * debian/control: - Add cdbs build-dependency --- debian/changelog | 8 ++- debian/control | 1 + debian/rules | 135 +++++++++++------------------------------------ 3 files changed, 39 insertions(+), 105 deletions(-) diff --git a/debian/changelog b/debian/changelog index 3ef7ebd..81747d1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,8 +5,14 @@ nut (2.6.0-2) UNRELEASED; urgency=low * debian/nut.lintian-overrides: Fix typo * debian/patch/0002-fix_libupsclient_pc.patch: Fix libupsclient.pc (Closes: #624255) + * debian/rules: + - Switch to cdbs + - Remove not existing configure options (Closes: #611813) + - Drop Phony rules (Closes: #613699) + * debian/control: + - Add cdbs build-dependency - -- Laurent Bigonville Sat, 07 May 2011 01:07:39 +0200 + -- Laurent Bigonville Sat, 07 May 2011 01:14:50 +0200 nut (2.6.0-1) unstable; urgency=low diff --git a/debian/control b/debian/control index e44d674..1683450 100644 --- a/debian/control +++ b/debian/control @@ -4,6 +4,7 @@ Priority: optional Maintainer: Arnaud Quette Uploaders: Laurent Bigonville Build-Depends: debhelper (>= 8), + cdbs, autoconf, automake, libtool, diff --git a/debian/rules b/debian/rules index cad0fad..39bf66f 100755 --- a/debian/rules +++ b/debian/rules @@ -1,82 +1,37 @@ #!/usr/bin/make -f -#export DH_VERBOSE=1 -export DH_OPTIONS= +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/class/autotools.mk DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null) -CFLAGS+=$(if $(findstring debug,$(DEB_BUILD_OPTIONS)),-g) -CFLAGS+=$(if $(findstring noopt,$(DEB_BUILD_OPTIONS)),-O0,-O2) -CONFIGUREFLAGS+=$(if $(findstring nostrip,$(DEB_BUILD_OPTIONS)),,--enable-strip) -CONFIGUREFLAGS+=--build=$(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) -CONFIGUREFLAGS+=--host=$(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) -CONFIGUREFLAGS+=$(if $(wildcard /usr/include/linux/hiddev.h),--with-linux-hiddev=/usr/include/linux/hiddev.h,--without-linux-hiddev) + + +DEB_CONFIGURE_EXTRA_FLAGS := --prefix=/usr \ + --exec-prefix=/ \ + --sysconfdir=/etc/nut \ + --mandir=/usr/share/man \ + --libdir=/lib \ + --includedir=/usr/include \ + --without-ssl \ + --with-hal \ + --with-cgi \ + --with-dev \ + --enable-static \ + --with-statepath=/var/run/nut \ + --with-altpidpath=/var/run/nut \ + --with-drvpath=/lib/nut \ + --with-cgipath=/usr/lib/cgi-bin/nut \ + --with-htmlpath=/usr/share/nut/www \ + --with-pidpath=/var/run/nut \ + --datadir=/usr/share/nut \ + --with-pkgconfig-dir=/usr/lib/pkgconfig \ + --with-user=nut --with-group=nut + ifeq (linux,$(DEB_HOST_ARCH_OS)) - CONFIGUREFLAGS+=--with-udev-dir=/lib/udev + DEB_CONFIGURE_EXTRA_FLAGS+=--with-udev-dir=/lib/udev endif -configure: configure-stamp -configure-stamp: - dh_testdir - CFLAGS='$(CFLAGS)' ./configure $(CONFIGUREFLAGS) \ - --prefix=/usr \ - --exec-prefix=/ \ - --sysconfdir=/etc/nut \ - --mandir=/usr/share/man \ - --libdir=/lib \ - --includedir=/usr/include \ - --without-ssl \ - --with-hal \ - --with-cgi \ - --with-dev \ - --enable-static \ - --with-statepath=/var/run/nut \ - --with-altpidpath=/var/run/nut \ - --with-drvpath=/lib/nut \ - --with-cgipath=/usr/lib/cgi-bin/nut \ - --with-htmlpath=/usr/share/nut/www \ - --with-pidpath=/var/run/nut \ - --datadir=/usr/share/nut \ - --with-pkgconfig-dir=/usr/lib/pkgconfig \ - --with-user=nut --with-group=nut - touch $@ - -build: configure -build: build-stamp -build-stamp: - dh_testdir - $(MAKE) - touch $@ - -clean: - dh_testdir - dh_testroot - rm -f configure-stamp build-stamp install-stamp - [ ! -f Makefile ] || $(MAKE) distclean - dh_clean -# debconf-updatepo -# -test -r /usr/share/misc/config.sub && \ -# cp -f /usr/share/misc/config.sub config.sub -# -test -r /usr/share/misc/config.guess && \ -# cp -f /usr/share/misc/config.guess config.guess - -uninstall: - dh_testdir - dh_testroot - rm -f install-stamp - dh_prep - -install: build -install: install-stamp -install-stamp: DH_OPTIONS= -install-stamp: - dh_testdir - dh_testroot - dh_prep - dh_installdirs - - $(MAKE) install \ - DESTDIR=$(CURDIR)/debian/tmp RUNUID=65534 RUNGID=65534 - +common-install-arch:: # install the bash completion script mkdir -p $(CURDIR)/debian/tmp/etc/bash_completion.d cp $(CURDIR)/scripts/misc/nut.bash_completion \ @@ -88,39 +43,11 @@ install-stamp: mv $${f} $(CURDIR)/debian/tmp/etc/nut/$${nf}; \ done - dh_installchangelogs ChangeLog - dh_installinit -- start 50 2 3 4 5 . stop 50 0 1 6 . - dh_install - dh_installman - dh_installdocs -XMakefile - dh_link - touch $@ +DEB_DH_INSTALLINIT_ARGS_nut := -- start 50 2 3 4 5 . stop 50 0 1 6 . -binary-indep: DH_OPTIONS=-i -binary-indep: install - -binary-arch: DH_OPTIONS=-a -binary-arch: install - dh_testdir - dh_testroot -# dh_installdebconf - dh_strip - dh_compress - dh_fixperms - dh_makeshlibs - dh_lintian -pnut - dh_installdeb - dh_shlibdeps -# dh_shlibdeps -Xlibupsclient.a ifeq (linux,$(DEB_HOST_ARCH_OS)) - dh_gencontrol -- -Vudev="udev (>= 0.124-1)" +# for Debian + DEB_DH_GENCONTROL_ARGS := -- -Vudev="udev (>= 0.124-1)" # for Ubuntu -# dh_gencontrol -- -Vudev="udev (>= 136-1)" -else - dh_gencontrol -- -Vudev="" +# DEB_DH_GENCONTROL_ARGS := -- -Vudev="udev (>= 136-1)" endif - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary configure install uninstall From 21f8749a47213f25e777a7d21b8cc934448a72ea Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 8 May 2011 21:23:53 +0200 Subject: [PATCH 039/291] Release to unstable --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 81747d1..33e9e29 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.6.0-2) UNRELEASED; urgency=low +nut (2.6.0-2) unstable; urgency=low * debian/nut-snmp.docs: Distribute snmp.txt doc file (Closes: #548295) * d/p/0001-fix_spelling_and_typo.patch: Update and refresh @@ -12,7 +12,7 @@ nut (2.6.0-2) UNRELEASED; urgency=low * debian/control: - Add cdbs build-dependency - -- Laurent Bigonville Sat, 07 May 2011 01:14:50 +0200 + -- Laurent Bigonville Sun, 08 May 2011 21:23:46 +0200 nut (2.6.0-1) unstable; urgency=low From b98ff51068db576ecbb89b38a3b6f6e317ecc03b Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 8 May 2011 21:45:20 +0200 Subject: [PATCH 040/291] Bump Standards-Version to 3.9.2 (no further changes) --- debian/changelog | 7 +++++++ debian/control | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 33e9e29..f93fa7b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +nut (2.6.0-3) UNRELEASED; urgency=low + + * debian/control: + - Bump Standards-Version to 3.9.2 (no further changes) + + -- Laurent Bigonville Sun, 08 May 2011 21:44:42 +0200 + nut (2.6.0-2) unstable; urgency=low * debian/nut-snmp.docs: Distribute snmp.txt doc file (Closes: #548295) diff --git a/debian/control b/debian/control index 1683450..24479cd 100644 --- a/debian/control +++ b/debian/control @@ -19,7 +19,7 @@ Build-Depends: debhelper (>= 8), libneon27-gnutls-dev | libneon26-gnutls-dev | libneon-dev | libneon27-dev | libneon26-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6) -Standards-Version: 3.9.1 +Standards-Version: 3.9.2 Homepage: http://www.networkupstools.org Vcs-Browser: http://git.debian.org/?p=collab-maint/nut.git;a=summary Vcs-Git: git://git.debian.org/git/collab-maint/nut.git From 8cc62ab670497622582b0f032a43130c8c3df865 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 9 May 2011 15:03:14 +0200 Subject: [PATCH 041/291] Drop HAL package and build-dependencies (Closes: #613197) --- debian/changelog | 3 ++- debian/control | 19 ------------------- debian/nut-hal-drivers.docs | 1 - debian/nut-hal-drivers.install | 3 --- debian/nut-hal-drivers.postinst | 24 ------------------------ debian/nut-hal-drivers.preinst | 18 ------------------ debian/nut.docs | 1 - debian/rules | 1 - 8 files changed, 2 insertions(+), 68 deletions(-) delete mode 100644 debian/nut-hal-drivers.docs delete mode 100644 debian/nut-hal-drivers.install delete mode 100644 debian/nut-hal-drivers.postinst delete mode 100644 debian/nut-hal-drivers.preinst diff --git a/debian/changelog b/debian/changelog index f93fa7b..5de4dad 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,10 @@ nut (2.6.0-3) UNRELEASED; urgency=low + * Drop HAL package and build-dependencies (Closes: #613197) * debian/control: - Bump Standards-Version to 3.9.2 (no further changes) - -- Laurent Bigonville Sun, 08 May 2011 21:44:42 +0200 + -- Laurent Bigonville Mon, 09 May 2011 15:02:47 +0200 nut (2.6.0-2) unstable; urgency=low diff --git a/debian/control b/debian/control index 24479cd..8bc1ab0 100644 --- a/debian/control +++ b/debian/control @@ -11,8 +11,6 @@ Build-Depends: debhelper (>= 8), libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), - libhal-dev (>= 0.5.8), - hal, libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, @@ -74,23 +72,6 @@ Description: network UPS tools - SNMP driver supports various MIBs including IETF, MGE, and APC. It adds an SNMP Manager interface to the core NUT system. -Package: nut-hal-drivers -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, ${udev} -Conflicts: nut -Provides: hal-ups-support -Breaks: udev (<< 124-1) -Description: network UPS tools - HAL interface - Network UPS Tools (NUT) is a client/server monitoring system that - allows computers to share uninterruptible power supply (UPS) and - power distribution unit (PDU) hardware. Clients access the hardware - through the server, and are notified whenever the power status - changes. - . - This package provides add-ons for the hardware abstraction layer (HAL) that - allow desktop environments to monitor locally-connected UPS equipment. The - HAL drivers cannot be used at the same time as the normal NUT upsd. - Package: nut-xml Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 2.2.2) diff --git a/debian/nut-hal-drivers.docs b/debian/nut-hal-drivers.docs deleted file mode 100644 index 78279fb..0000000 --- a/debian/nut-hal-drivers.docs +++ /dev/null @@ -1 +0,0 @@ -docs/nut-hal.txt diff --git a/debian/nut-hal-drivers.install b/debian/nut-hal-drivers.install deleted file mode 100644 index 1ef47a2..0000000 --- a/debian/nut-hal-drivers.install +++ /dev/null @@ -1,3 +0,0 @@ -debian/tmp/lib/hal/ /usr/lib/ -debian/tmp/usr/share/hal -debian/tmp/*/udev/ diff --git a/debian/nut-hal-drivers.postinst b/debian/nut-hal-drivers.postinst deleted file mode 100644 index 414d5f3..0000000 --- a/debian/nut-hal-drivers.postinst +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -set -e - -case "$1" in - - configure) - # ask udev to check for new udev rules - [ -x /etc/init.d/udev ] && pidof udevd > /dev/null \ - && udevadm trigger --action=change - ;; - - abort-upgrade|abort-remove|abort-deconfigure) - # do nothing - ;; - - *) - echo "$0: incorrect arguments: $*" >&2 - exit 1 - ;; - -esac - -#DEBHELPER# diff --git a/debian/nut-hal-drivers.preinst b/debian/nut-hal-drivers.preinst deleted file mode 100644 index 2de4425..0000000 --- a/debian/nut-hal-drivers.preinst +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -set -e - -if [ "$1" = install ] || [ "$1" = upgrade ]; then - # Remove previous rules if unchanged, otherwise move to new filename. - if [ -e "/etc/udev/rules.d/52_nut-usbups.rules" ]; then - if [ "`md5sum \"/etc/udev/rules.d/52_nut-usbups.rules\" | sed -e \"s/ .*//\"`" = \ - "`dpkg-query -W -f='${Conffiles}' nut-hal-drivers | sed -n -e \"\\\\' /etc/udev/rules.d/52_nut-usbups.rules's/.* //p\"`" ] - then - rm -f "/etc/udev/rules.d/52_nut-usbups.rules" - else - mv "/etc/udev/rules.d/52_nut-usbups.rules" "/etc/udev/rules.d/52-nut-usbups.rules" - fi - fi -fi - -#DEBHELPER# diff --git a/debian/nut.docs b/debian/nut.docs index 8f9c4d4..d0026f7 100644 --- a/debian/nut.docs +++ b/debian/nut.docs @@ -9,7 +9,6 @@ docs/download.txt docs/FAQ.txt docs/features.txt docs/history.txt -docs/nut-hal.txt docs/nut-names.txt docs/outlets.txt docs/packager-guide.txt diff --git a/debian/rules b/debian/rules index 39bf66f..e1f2863 100755 --- a/debian/rules +++ b/debian/rules @@ -13,7 +13,6 @@ DEB_CONFIGURE_EXTRA_FLAGS := --prefix=/usr \ --libdir=/lib \ --includedir=/usr/include \ --without-ssl \ - --with-hal \ --with-cgi \ --with-dev \ --enable-static \ From 3059d08dfdb01c68fe886721fc32c1c1ec9621cc Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 9 May 2011 15:32:04 +0200 Subject: [PATCH 042/291] Correctly pass flags to configure * debian/rules: - Correctly pass flags to configure --- debian/changelog | 4 +++- debian/rules | 12 +++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/debian/changelog b/debian/changelog index 5de4dad..21f27c3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,8 +3,10 @@ nut (2.6.0-3) UNRELEASED; urgency=low * Drop HAL package and build-dependencies (Closes: #613197) * debian/control: - Bump Standards-Version to 3.9.2 (no further changes) + * debian/rules: + - Correctly pass flags to configure - -- Laurent Bigonville Mon, 09 May 2011 15:02:47 +0200 + -- Laurent Bigonville Mon, 09 May 2011 18:07:50 +0200 nut (2.6.0-2) unstable; urgency=low diff --git a/debian/rules b/debian/rules index e1f2863..3820f30 100755 --- a/debian/rules +++ b/debian/rules @@ -6,13 +6,11 @@ include /usr/share/cdbs/1/class/autotools.mk DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null) -DEB_CONFIGURE_EXTRA_FLAGS := --prefix=/usr \ - --exec-prefix=/ \ - --sysconfdir=/etc/nut \ - --mandir=/usr/share/man \ - --libdir=/lib \ - --includedir=/usr/include \ - --without-ssl \ +DEB_CONFIGURE_PREFIX := +DEB_CONFIGURE_SYSCONFDIR := /etc/nut +DEB_CONFIGURE_INCLUDEDIR := /usr/include +DEB_CONFIGURE_MANDIR := /usr/share/man +DEB_CONFIGURE_EXTRA_FLAGS := --without-ssl \ --with-cgi \ --with-dev \ --enable-static \ From ba4d85c19c34345f8dfa40b556d2fb2ec1dae495 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 9 May 2011 18:46:31 +0200 Subject: [PATCH 043/291] Drop autotools build-dependencies (not needed anymore) --- debian/changelog | 3 ++- debian/control | 3 --- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 21f27c3..208bb0d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,10 +3,11 @@ nut (2.6.0-3) UNRELEASED; urgency=low * Drop HAL package and build-dependencies (Closes: #613197) * debian/control: - Bump Standards-Version to 3.9.2 (no further changes) + - Drop autotools build-dependencies (not needed anymore) * debian/rules: - Correctly pass flags to configure - -- Laurent Bigonville Mon, 09 May 2011 18:07:50 +0200 + -- Laurent Bigonville Mon, 09 May 2011 18:45:50 +0200 nut (2.6.0-2) unstable; urgency=low diff --git a/debian/control b/debian/control index 8bc1ab0..9256d4c 100644 --- a/debian/control +++ b/debian/control @@ -5,9 +5,6 @@ Maintainer: Arnaud Quette Uploaders: Laurent Bigonville Build-Depends: debhelper (>= 8), cdbs, - autoconf, - automake, - libtool, libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), From 0acf1f781a843c00ddace2956efc4e66d78abb2c Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 9 May 2011 18:47:16 +0200 Subject: [PATCH 044/291] Drop non-existing build-dependencies --- debian/changelog | 3 ++- debian/control | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 208bb0d..f1c16c3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,10 +4,11 @@ nut (2.6.0-3) UNRELEASED; urgency=low * debian/control: - Bump Standards-Version to 3.9.2 (no further changes) - Drop autotools build-dependencies (not needed anymore) + - Drop non-existing build-dependencies * debian/rules: - Correctly pass flags to configure - -- Laurent Bigonville Mon, 09 May 2011 18:45:50 +0200 + -- Laurent Bigonville Mon, 09 May 2011 18:46:55 +0200 nut (2.6.0-2) unstable; urgency=low diff --git a/debian/control b/debian/control index 9256d4c..b863db2 100644 --- a/debian/control +++ b/debian/control @@ -11,7 +11,7 @@ Build-Depends: debhelper (>= 8), libdbus-1-dev, libdbus-glib-1-dev, libglib2.0-dev, - libneon27-gnutls-dev | libneon26-gnutls-dev | libneon-dev | libneon27-dev | libneon26-dev, + libneon27-gnutls-dev | libneon27-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6) Standards-Version: 3.9.2 From 1b2269cf22d563d6bb93283589ce889217d282a2 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 3 Jun 2011 09:53:43 +0200 Subject: [PATCH 045/291] New upstream release (Closes: #614842, #595773, #616104) * New upstream release (Closes: #614842, #595773, #616104) - Refresh debian/patches/0001-fix_spelling_and_typo.patch - Drop debian/patches/0002-fix_libupsclient_pc.patch, applied upstream --- debian/changelog | 7 +- .../patches/0001-fix_spelling_and_typo.patch | 325 ++---------------- debian/patches/0002-fix_libupsclient_pc.patch | 11 - debian/patches/series | 1 - 4 files changed, 32 insertions(+), 312 deletions(-) delete mode 100644 debian/patches/0002-fix_libupsclient_pc.patch diff --git a/debian/changelog b/debian/changelog index f1c16c3..2e033b5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,8 @@ -nut (2.6.0-3) UNRELEASED; urgency=low +nut (2.6.1-1) UNRELEASED; urgency=low + * New upstream release (Closes: #614842, #595773, #616104) + - Refresh debian/patches/0001-fix_spelling_and_typo.patch + - Drop debian/patches/0002-fix_libupsclient_pc.patch, applied upstream * Drop HAL package and build-dependencies (Closes: #613197) * debian/control: - Bump Standards-Version to 3.9.2 (no further changes) @@ -8,7 +11,7 @@ nut (2.6.0-3) UNRELEASED; urgency=low * debian/rules: - Correctly pass flags to configure - -- Laurent Bigonville Mon, 09 May 2011 18:46:55 +0200 + -- Laurent Bigonville Fri, 03 Jun 2011 10:33:00 +0200 nut (2.6.0-2) unstable; urgency=low diff --git a/debian/patches/0001-fix_spelling_and_typo.patch b/debian/patches/0001-fix_spelling_and_typo.patch index 44cc905..8d9bc86 100644 --- a/debian/patches/0001-fix_spelling_and_typo.patch +++ b/debian/patches/0001-fix_spelling_and_typo.patch @@ -1,3 +1,7 @@ +Description: Fix several spelling errors +Author: Laurent Bigonville +Last-Update: 2011-06-03 + --- a/docs/man/bcmxcp.8 +++ b/docs/man/bcmxcp.8 @@ -103,7 +103,7 @@ @@ -9,309 +13,34 @@ .RS 4 BCM/XCP supports reporting of UPS statistics data\&. .RE ---- a/docs/man/dummy-ups.8 -+++ b/docs/man/dummy-ups.8 -@@ -63,7 +63,7 @@ +--- a/docs/man/blazer.8 ++++ b/docs/man/blazer.8 +@@ -264,7 +264,7 @@ .RE .\} .sp --This file is generally named "something\&.dev"\&. It contains a list of all valid data and associated values, and has the same format as an \fBupsc\fR(8) dump (: )\&. So you can easilly create definition files from an existing UPS using "upsc > file\&.dev"\&. It can also be empty, in which case only a basic set of data is available: device\&.\fB, driver\&.\fR, ups\&.mfr, ups\&.model, ups\&.status -+This file is generally named "something\&.dev"\&. It contains a list of all valid data and associated values, and has the same format as an \fBupsc\fR(8) dump (: )\&. So you can easily create definition files from an existing UPS using "upsc > file\&.dev"\&. It can also be empty, in which case only a basic set of data is available: device\&.\fB, driver\&.\fR, ups\&.mfr, ups\&.model, ups\&.status +-There is a way to get better readings without disconnecting the load but this requires to keep track on how much (and how fast) current is going in\- and out of the battery\&. If you specified the \fBruntimecal\fR, the driver will attempt to do this\&. Note however, that this heavily relies on the values you enter and that the UPS must be able to report the load as well\&. There are quite a couple of devices that report 0 % (or any other fixed value) at all times, in which case this obviously doesn\(cqt work\&. ++There is a way to get better readings without disconnecting the load but this requires one to keep track on how much (and how fast) current is going in\- and out of the battery\&. If you specified the \fBruntimecal\fR, the driver will attempt to do this\&. Note however, that this heavily relies on the values you enter and that the UPS must be able to report the load as well\&. There are quite a couple of devices that report 0 % (or any other fixed value) at all times, in which case this obviously doesn\(cqt work\&. .sp - Samples definition files are available in the "data" directory of the nut source tree, and generally in the sysconfig directory of your system distribution\&. + The driver also has no way of determining the degradation of the battery capacity over time, so you\(cqll have to deal with this yourself (by adjusting the values in \fBruntimecal\fR)\&. Also note that the driver guesses the initial state of charge based on the battery voltage, so this may be less than 100 %, even when you are certain that they are full\&. There is just no way to reliably measure this between 0 and 100 % full charge\&. .sp ---- a/docs/man/dummy-ups.txt -+++ b/docs/man/dummy-ups.txt -@@ -55,7 +55,7 @@ - - This file is generally named "something.dev". It contains a list of all - valid data and associated values, and has the same format as an linkman:upsc[8] --dump (: ). So you can easilly create definition -+dump (: ). So you can easily create definition - files from an existing UPS using "upsc > file.dev". - It can also be empty, in which case only a basic set of data is available: - device.*, driver.*, ups.mfr, ups.model, ups.status ---- a/docs/man/metasys.8 -+++ b/docs/man/metasys.8 -@@ -124,7 +124,7 @@ +--- a/docs/man/dummy-ups.8 ++++ b/docs/man/dummy-ups.8 +@@ -37,7 +37,7 @@ + This program is a multi\-purpose UPS emulation tool\&. Its behavior depends on the running mode: + .SS "Dummy Mode" .sp - This driver has been tested on Meta System HF Millennium 820 and ally HF 1000 only\&. +-\fBdummy\-ups\fR looks like a standard device driver to \fBupsd\fR(8) and allows to change any value for testing purposes\&. It is both interactive, controllable through the \fBupsrw\fR(1) and \fBupscmd\fR(1) commands (or equivalent graphical tool), and batchable through script files\&. It can be configured, launched and used as any other real driver\&. This mode is mostly useful for development and testing purposes\&. ++\fBdummy\-ups\fR looks like a standard device driver to \fBupsd\fR(8) and allows one to change any value for testing purposes\&. It is both interactive, controllable through the \fBupsrw\fR(1) and \fBupscmd\fR(1) commands (or equivalent graphical tool), and batchable through script files\&. It can be configured, launched and used as any other real driver\&. This mode is mostly useful for development and testing purposes\&. + .SS "Repeater Mode" .sp --Any informations about the use of the driver with the other listed UPS are really welcome\&. -+Any information about the use of the driver with the other listed UPS are really welcome\&. - .SH "AUTHOR" + \fBdummy\-ups\fR acts as a NUT client, simply forwarding data\&. This can be useful for supervision purposes\&. This can also allow some load sharing between several UPS instances, using a point\-to\-point communication with the UPS\&. +@@ -130,7 +130,7 @@ .sp - Fabio Di Niro ---- a/docs/man/metasys.txt -+++ b/docs/man/metasys.txt -@@ -44,7 +44,7 @@ - This driver has been tested on Meta System HF Millennium 820 and - ally HF 1000 only. - --Any informations about the use of the driver with the other listed -+Any information about the use of the driver with the other listed - UPS are really welcome. - - AUTHOR ---- a/drivers/apcsmart.c -+++ b/drivers/apcsmart.c -@@ -324,7 +324,7 @@ - /* This should never happen since we only call - this if the REQ_CAPABILITIES command is supported - */ -- upslogx(LOG_ERR, "ERROR: APC cannot do capabilites but said it could!"); -+ upslogx(LOG_ERR, "ERROR: APC cannot do capabilities but said it could!"); - return; - } - ---- a/drivers/dummy-ups.c -+++ b/drivers/dummy-ups.c -@@ -375,7 +375,7 @@ - * enforcing controls! We also need a way to automate - * the update / sync process (with cmdvartab?!) */ - -- upsdebugx(1, "Unknown data. Commiting anyway..."); -+ upsdebugx(1, "Unknown data. Committing anyway..."); - return 1; - /* return 0;*/ - } -@@ -395,7 +395,7 @@ - * enforcing controls! We also need a way to automate - * the update / sync process (with cmdvartab?) */ - -- upsdebugx(1, "Unknown data. Commiting value anyway..."); -+ upsdebugx(1, "Unknown data. Committing value anyway..."); - return 1; - /* return 0;*/ - } ---- a/drivers/genericups.c -+++ b/drivers/genericups.c -@@ -142,12 +142,12 @@ - */ - if ((v = getval("OL")) != NULL) { - parse_input_signals(v, &upstab[upstype].line_ol, &upstab[upstype].val_ol); -- upsdebugx(2, "parse_input_signals: OL overriden with %s\n", v); -+ upsdebugx(2, "parse_input_signals: OL overridden with %s\n", v); - } - - if ((v = getval("LB")) != NULL) { - parse_input_signals(v, &upstab[upstype].line_bl, &upstab[upstype].val_bl); -- upsdebugx(2, "parse_input_signals: LB overriden with %s\n", v); -+ upsdebugx(2, "parse_input_signals: LB overridden with %s\n", v); - } - } - -@@ -318,12 +318,12 @@ - */ - if ((v = getval("CP")) != NULL) { - parse_output_signals(v, &upstab[upstype].line_norm); -- upsdebugx(2, "parse_output_signals: CP overriden with %s\n", v); -+ upsdebugx(2, "parse_output_signals: CP overridden with %s\n", v); - } - - if ((v = getval("SD")) != NULL) { - parse_output_signals(v, &upstab[upstype].line_sd); -- upsdebugx(2, "parse_output_signals: SD overriden with %s\n", v); -+ upsdebugx(2, "parse_output_signals: SD overridden with %s\n", v); - } - - if (ioctl(upsfd, TIOCMSET, &upstab[upstype].line_norm)) { ---- a/drivers/metasys.c -+++ b/drivers/metasys.c -@@ -62,12 +62,12 @@ - - /* - Metasystem UPS data transfer are made with packet of the format: -- STX DATA_LENGHT DATA CHECKSUM -+ STX DATA_LENGTH DATA CHECKSUM - where: - STX is 0x02 and is the start of transmission byte -- DATA_LENGHT is number of data bytes + the checksum byte -+ DATA_LENGTH is number of data bytes + the checksum byte - DATA ...... -- CHECKSUM is the sum modulus 256 of all DATA bytes + DATA_LENGHT -+ CHECKSUM is the sum modulus 256 of all DATA bytes + DATA_LENGTH - - The answer from the UPS have the same packet format and the first - data byte is equal to the command that the ups is answering to -@@ -114,7 +114,7 @@ - } - - /* send a read command to the UPS, it retries 5 times before give up -- it's a 4 byte request (STX, LENGHT, COMMAND and CHECKSUM) */ -+ it's a 4 byte request (STX, LENGTH, COMMAND and CHECKSUM) */ - void send_read_command(char command) { - int retry, sent; - unsigned char buf[4]; -@@ -122,9 +122,9 @@ - sent = 0; - while ((sent != 4) && (retry < 5)) { - buf[0]=0x02; /* STX Start of Transmission */ -- buf[1]=0x02; /* data lenght(data + checksum byte) */ -+ buf[1]=0x02; /* data length(data + checksum byte) */ - buf[2]=command; /* command to send */ -- buf[3]=buf[1] + buf[2]; /* checksum (sum modulus 256 of data bytes + lenght) */ -+ buf[3]=buf[1] + buf[2]; /* checksum (sum modulus 256 of data bytes + length) */ - if (retry == 4) send_zeros(); /* last retry is preceded by a serial reset...*/ - sent = ser_send_buf(upsfd, buf, 4); - retry += 1; -@@ -134,29 +134,29 @@ - /* send a write command to the UPS, the write command and the value to be written are passed - with a char* buffer - it retries 5 times before give up */ --void send_write_command(unsigned char *command, int command_lenght) { -+void send_write_command(unsigned char *command, int command_length) { - int i, retry, sent, checksum; - unsigned char raw_buf[255]; - - /* prepares the raw data */ - raw_buf[0] = 0x02; /* STX byte */ -- raw_buf[1] = (unsigned char)(command_lenght + 1); /* data lenght + checksum */ -- memcpy(raw_buf+2, command, command_lenght); -- command_lenght += 2; -+ raw_buf[1] = (unsigned char)(command_length + 1); /* data length + checksum */ -+ memcpy(raw_buf+2, command, command_length); -+ command_length += 2; - - /* calculate checksum */ - checksum = 0; -- for (i = 1; i < command_lenght; i++) checksum += raw_buf[i]; -+ for (i = 1; i < command_length; i++) checksum += raw_buf[i]; - checksum = checksum % 256; -- raw_buf[command_lenght] = (unsigned char)checksum; -- command_lenght +=1; -+ raw_buf[command_length] = (unsigned char)checksum; -+ command_length +=1; - - retry = 0; - sent = 0; -- while ((sent != (command_lenght)) && (retry < 5)) { -+ while ((sent != (command_length)) && (retry < 5)) { - if (retry == 4) send_zeros(); /* last retry is preceded by a serial reset... */ -- sent = ser_send_buf(upsfd, raw_buf, (command_lenght)); -- if (sent != (command_lenght)) printf("Error sending command %d\n", raw_buf[2]); -+ sent = ser_send_buf(upsfd, raw_buf, (command_length)); -+ if (sent != (command_length)) printf("Error sending command %d\n", raw_buf[2]); - retry += 1; - } - } -@@ -164,8 +164,8 @@ - - /* get the answer of a command from the ups */ - int get_answer(unsigned char *data) { -- unsigned char my_buf[255]; /* packet has a maximum lenght of 256 bytes */ -- int packet_lenght, checksum, i, res; -+ unsigned char my_buf[255]; /* packet has a maximum length of 256 bytes */ -+ int packet_length, checksum, i, res; - /* Read STX byte */ - res = ser_get_char(upsfd, my_buf, 1, 0); - if (res < 1) { -@@ -176,43 +176,43 @@ - ser_comm_fail("Receive error (STX): packet not on start!!\n"); - return -1; - } -- /* Read data lenght byte */ -+ /* Read data length byte */ - res = ser_get_char(upsfd, my_buf, 1, 0); - if (res < 1) { -- ser_comm_fail("Receive error (lenght): %d!!!\n", res); -+ ser_comm_fail("Receive error (length): %d!!!\n", res); - return -1; - } -- packet_lenght = my_buf[0]; -- if (packet_lenght < 2) { -- ser_comm_fail("Receive error (lenght): packet lenght %d!!!\n", packet_lenght); -+ packet_length = my_buf[0]; -+ if (packet_length < 2) { -+ ser_comm_fail("Receive error (length): packet length %d!!!\n", packet_length); - return -1; - } -- /* Try to read all the remainig bytes (packet_lenght) */ -- res = ser_get_buf_len(upsfd, my_buf, packet_lenght, 1, 0); -- if (res != packet_lenght) { -- ser_comm_fail("Receive error (data): got %d bytes instead of %d!!!\n", res, packet_lenght); -+ /* Try to read all the remainig bytes (packet_length) */ -+ res = ser_get_buf_len(upsfd, my_buf, packet_length, 1, 0); -+ if (res != packet_length) { -+ ser_comm_fail("Receive error (data): got %d bytes instead of %d!!!\n", res, packet_length); - return -1; - } - - /* now we have the whole answer from the ups, we can checksum it -- checksum byte is equal to the sum modulus 256 of all the data bytes + packet_lenght -+ checksum byte is equal to the sum modulus 256 of all the data bytes + packet_length - (no STX no checksum byte itself) */ -- checksum = packet_lenght; -- for (i = 0; i < (packet_lenght - 1); i++) checksum += my_buf[i]; -+ checksum = packet_length; -+ for (i = 0; i < (packet_length - 1); i++) checksum += my_buf[i]; - checksum = checksum % 256; -- if (my_buf[packet_lenght-1] != checksum) { -- ser_comm_fail("checksum error! got %x instad of %x, received %d bytes \n", my_buf[packet_lenght - 1], checksum, packet_lenght); -- dump_buffer(my_buf, packet_lenght); -+ if (my_buf[packet_length-1] != checksum) { -+ ser_comm_fail("checksum error! got %x instad of %x, received %d bytes \n", my_buf[packet_length - 1], checksum, packet_length); -+ dump_buffer(my_buf, packet_length); - return -1; - } -- packet_lenght-=1; /* get rid of the checksum byte */ -- memcpy(data, my_buf, packet_lenght); -- return packet_lenght; -+ packet_length-=1; /* get rid of the checksum byte */ -+ memcpy(data, my_buf, packet_length); -+ return packet_length; - } - - /* send a read command and try get the answer, if something fails, it retries (5 times max) - if it is on the 4th or 5th retry, it will flush the serial before sending commands -- it returns the lenght of the received answer or -1 in case of failure */ -+ it returns the length of the received answer or -1 in case of failure */ - int command_read_sequence(unsigned char command, unsigned char *data) { - int bytes_read = 0; - int retry = 0; -@@ -234,13 +234,13 @@ - - /* send a write command and try get the answer, if something fails, it retries (5 times max) - if it is on the 4th or 5th retry, it will flush the serial before sending commands -- it returns the lenght of the received answer or -1 in case of failure */ --int command_write_sequence(unsigned char *command, int command_lenght, unsigned char *answer) { -+ it returns the length of the received answer or -1 in case of failure */ -+int command_write_sequence(unsigned char *command, int command_length, unsigned char *answer) { - int bytes_read = 0; - int retry = 0; - - while ((bytes_read < 1) && (retry < 5)) { -- send_write_command(command, command_lenght); -+ send_write_command(command, command_length); - bytes_read = get_answer(answer); - if (retry > 2) ser_flush_in(upsfd, "", 0); - retry += 1; ---- a/drivers/snmp-ups.c -+++ b/drivers/snmp-ups.c -@@ -484,7 +484,7 @@ - len = snprintf(buf, buf_len, "%ld", *pdu->variables->val.integer / 100); - break; - default: -- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", -+ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", - upsname?upsname:device_name, pdu->variables->type, OID); - return FALSE; - break; -@@ -524,7 +524,7 @@ - value = *pdu->variables->val.integer / 100; - break; - default: -- upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x recieved from %s", -+ upslogx(LOG_ERR, "[%s] unhandled ASN 0x%x received from %s", - upsname?upsname:device_name, pdu->variables->type, OID); - return FALSE; - break; -@@ -1459,7 +1459,7 @@ - if (ret == FALSE) - upslogx(LOG_ERR, "su_setvar: cannot set value %s for %s", arg[4], arg[3]); - else -- upsdebugx(1, "su_setvar: sucessfully set %s to \"%s\"", arg[0], arg[4]); -+ upsdebugx(1, "su_setvar: successfully set %s to \"%s\"", arg[0], arg[4]); - - return 1; - } + It also helps the NUT Quality Assurance effort, by automating some tests on the NUT framework\&. + .sp +-It now offers a repeater mode\&. This will help in building the Meta UPS approach, which allows to build a virtual device, composed of several other devices (either UPS, PDUs)\&. ++It now offers a repeater mode\&. This will help in building the Meta UPS approach, which allows one to build a virtual device, composed of several other devices (either UPS, PDUs)\&. + .SH "BUGS" + .sp + Instant commands are not yet supported in Dummy Mode, and data need name/value checking enforcement, as well as boundaries or enumeration definition\&. diff --git a/debian/patches/0002-fix_libupsclient_pc.patch b/debian/patches/0002-fix_libupsclient_pc.patch deleted file mode 100644 index 0c50a0e..0000000 --- a/debian/patches/0002-fix_libupsclient_pc.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff --git a/lib/libupsclient.pc.in b/lib/libupsclient.pc.in -index eb6826c..4ad31fb 100644 ---- a/lib/libupsclient.pc.in -+++ b/lib/libupsclient.pc.in -@@ -9,5 +9,5 @@ nutuser=@RUN_AS_USER@ - Name: libupsclient - Description: UPS monitoring with Network UPS Tools - Version: @PACKAGE_VERSION@ --Libs: -L${libdir} -lupsclient @LIBSSL_LDFLAGS@ -+Libs: -L${libdir} -lupsclient @LIBSSL_LIBS@ - Cflags: -I${includedir} @LIBSSL_CFLAGS@ diff --git a/debian/patches/series b/debian/patches/series index 4dd5e93..52e301b 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1 @@ 0001-fix_spelling_and_typo.patch -0002-fix_libupsclient_pc.patch From 85d2d1a10ae84670eddad0b7882ce642758e6b1f Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 3 Jun 2011 10:59:23 +0200 Subject: [PATCH 046/291] debian/nut.README.Debian: Adjust udev rules naming for permissions override (Closes: #529664) --- debian/changelog | 4 +++- debian/nut.README.Debian | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 2e033b5..6cb6e4c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,8 +10,10 @@ nut (2.6.1-1) UNRELEASED; urgency=low - Drop non-existing build-dependencies * debian/rules: - Correctly pass flags to configure + * debian/nut.README.Debian: Adjust udev rules naming for permissions override + (Closes: #529664) - -- Laurent Bigonville Fri, 03 Jun 2011 10:33:00 +0200 + -- Laurent Bigonville Fri, 03 Jun 2011 10:56:08 +0200 nut (2.6.0-2) unstable; urgency=low diff --git a/debian/nut.README.Debian b/debian/nut.README.Debian index 7ca7e60..975b389 100644 --- a/debian/nut.README.Debian +++ b/debian/nut.README.Debian @@ -71,8 +71,8 @@ MODE. If you are running in "netclient" MODE, jump directly to section 6. on Ubuntu. b) Another solution, for system supporting udev, is to create a file - (for example /etc/udev/rules.d/52_nut-serialups.rules), placed - after 020_permissions.rules and to add something like: + (for example /etc/udev/rules.d/92-nut-serialups.rules), placed + after 91-permissions.rules and to add something like: KERNEL=="ttyS1", GROUP="nut" where 'ttyS1' has to be replaced by the exact name of your serial port. From 1106c880a1f9238d8ee10cca74885e17edae8099 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 27 Jun 2011 17:28:00 +0200 Subject: [PATCH 047/291] Manually merge Arnaud release --- debian/changelog | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/debian/changelog b/debian/changelog index 6cb6e4c..201f836 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,17 @@ -nut (2.6.1-1) UNRELEASED; urgency=low +nut (2.6.1-2) UNRELEASED; urgency=low - * New upstream release (Closes: #614842, #595773, #616104) - - Refresh debian/patches/0001-fix_spelling_and_typo.patch - - Drop debian/patches/0002-fix_libupsclient_pc.patch, applied upstream + * debian/nut.README.Debian: Adjust udev rules naming for permissions override + (Closes: #529664) + * Re-add and refresh debian/patches/0001-fix_spelling_and_typo.patch: + Some typos and spelling errors remain. + + -- Laurent Bigonville Mon, 27 Jun 2011 17:26:59 +0200 + +nut (2.6.1-1) unstable; urgency=low + + * New upstream release (Closes: #595953, #614842, #595773) + * debian/patches/*.patch: removed since these are now fixed upstream + [Laurent Bigonville] * Drop HAL package and build-dependencies (Closes: #613197) * debian/control: - Bump Standards-Version to 3.9.2 (no further changes) @@ -10,10 +19,8 @@ nut (2.6.1-1) UNRELEASED; urgency=low - Drop non-existing build-dependencies * debian/rules: - Correctly pass flags to configure - * debian/nut.README.Debian: Adjust udev rules naming for permissions override - (Closes: #529664) - -- Laurent Bigonville Fri, 03 Jun 2011 10:56:08 +0200 + -- Arnaud Quette Wed, 01 Jun 2011 22:34:28 +0200 nut (2.6.0-2) unstable; urgency=low From 910934027d22ee8c94b5440959311fa39493534d Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 16 May 2011 13:58:32 +0200 Subject: [PATCH 048/291] Split nut package into nut-client and nut-server, keep nut package as metapackage --- debian/changelog | 2 ++ debian/control | 34 +++++++++++++++++-- debian/nut-client.install | 10 ++++++ debian/nut-client.manpages | 9 +++++ ...README.Debian => nut-server.README.Debian} | 0 debian/nut-server.dirs | 1 + debian/{nut.init => nut-server.init} | 0 debian/{nut.install => nut-server.install} | 10 +----- debian/{nut.links => nut-server.links} | 0 debian/nut-server.lintian-overrides | 2 ++ debian/{nut.manpages => nut-server.manpages} | 9 ----- debian/{nut.postinst => nut-server.postinst} | 0 debian/{nut.postrm => nut-server.postrm} | 0 debian/{nut.preinst => nut-server.preinst} | 0 debian/{nut.prerm => nut-server.prerm} | 0 debian/nut.dirs | 4 --- debian/nut.lintian-overrides | 2 -- debian/rules | 2 +- 18 files changed, 57 insertions(+), 28 deletions(-) create mode 100644 debian/nut-client.install create mode 100644 debian/nut-client.manpages rename debian/{nut.README.Debian => nut-server.README.Debian} (100%) create mode 100644 debian/nut-server.dirs rename debian/{nut.init => nut-server.init} (100%) rename debian/{nut.install => nut-server.install} (84%) rename debian/{nut.links => nut-server.links} (100%) create mode 100644 debian/nut-server.lintian-overrides rename debian/{nut.manpages => nut-server.manpages} (82%) rename debian/{nut.postinst => nut-server.postinst} (100%) rename debian/{nut.postrm => nut-server.postrm} (100%) rename debian/{nut.preinst => nut-server.preinst} (100%) rename debian/{nut.prerm => nut-server.prerm} (100%) delete mode 100644 debian/nut.dirs delete mode 100644 debian/nut.lintian-overrides diff --git a/debian/changelog b/debian/changelog index 201f836..8a87d81 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,8 @@ nut (2.6.1-2) UNRELEASED; urgency=low (Closes: #529664) * Re-add and refresh debian/patches/0001-fix_spelling_and_typo.patch: Some typos and spelling errors remain. + * Split nut package into nut-client and nut-server, keep nut package as + metapackage -- Laurent Bigonville Mon, 27 Jun 2011 17:26:59 +0200 diff --git a/debian/control b/debian/control index b863db2..614634b 100644 --- a/debian/control +++ b/debian/control @@ -20,13 +20,25 @@ Vcs-Browser: http://git.debian.org/?p=collab-maint/nut.git;a=summary Vcs-Git: git://git.debian.org/git/collab-maint/nut.git Package: nut +Architecture: all +Depends: ${misc:Depends}, nut-server, nut-client +Description: network UPS tools - metapackage + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package is a metapackage that install both nut-server and nut-client + +Package: nut-server Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6), ${udev} -Recommends: bash-completion +Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6), ${udev}, nut-client (= ${binary:Version}) Suggests: nut-cgi, nut-snmp, nut-dev, nut-xml Provides: ups-monitor, nut-doc, nut-usb Conflicts: ups-monitor, nut-doc, nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) -Replaces: nut-doc +Replaces: nut-doc, nut (<< 2.6.1) +Breaks: nut (<< 2.6.1) Description: network UPS tools - core system Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and @@ -38,6 +50,22 @@ Description: network UPS tools - core system drivers. In most cases it is sufficient for a basic UPS monitoring system. +Package: nut-client +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Recommends: bash-completion +Replaces: nut (<< 2.6.1) +Breaks: nut (<< 2.6.1) +Description: network UPS tools - clients + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides NUT's clients that allows the user to control + and monitor the UPS. + Package: nut-cgi Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, adduser diff --git a/debian/nut-client.install b/debian/nut-client.install new file mode 100644 index 0000000..d15acda --- /dev/null +++ b/debian/nut-client.install @@ -0,0 +1,10 @@ +debian/tmp/bin/upslog +debian/tmp/bin/upsc +debian/tmp/bin/upsrw +debian/tmp/bin/upscmd +debian/tmp/sbin/upsmon +debian/tmp/sbin/upssched +debian/tmp/etc/bash_completion.d/nut +debian/tmp/etc/nut/nut.conf +debian/tmp/etc/nut/upsmon.conf +debian/tmp/etc/nut/upssched.conf diff --git a/debian/nut-client.manpages b/debian/nut-client.manpages new file mode 100644 index 0000000..115e821 --- /dev/null +++ b/debian/nut-client.manpages @@ -0,0 +1,9 @@ +debian/tmp/usr/share/man/man8/upsc.8 +debian/tmp/usr/share/man/man8/upscmd.8 +debian/tmp/usr/share/man/man8/upsmon.8 +debian/tmp/usr/share/man/man8/upsrw.8 +debian/tmp/usr/share/man/man8/upssched.8 +debian/tmp/usr/share/man/man5/nut.conf.5 +debian/tmp/usr/share/man/man5/upsmon.conf.5 +debian/tmp/usr/share/man/man5/upssched.conf.5 +debian/tmp/usr/share/man/man8/upslog.8 diff --git a/debian/nut.README.Debian b/debian/nut-server.README.Debian similarity index 100% rename from debian/nut.README.Debian rename to debian/nut-server.README.Debian diff --git a/debian/nut-server.dirs b/debian/nut-server.dirs new file mode 100644 index 0000000..a805311 --- /dev/null +++ b/debian/nut-server.dirs @@ -0,0 +1 @@ +/var/lib/nut diff --git a/debian/nut.init b/debian/nut-server.init similarity index 100% rename from debian/nut.init rename to debian/nut-server.init diff --git a/debian/nut.install b/debian/nut-server.install similarity index 84% rename from debian/nut.install rename to debian/nut-server.install index b535cd0..034e307 100644 --- a/debian/nut.install +++ b/debian/nut-server.install @@ -1,18 +1,10 @@ -debian/tmp/bin/upslog -debian/tmp/bin/upsc -debian/tmp/bin/upsrw -debian/tmp/bin/upscmd -debian/tmp/sbin/ +debian/tmp/sbin/upsd debian/tmp/usr/share/nut/cmdvartab debian/tmp/usr/share/nut/driver.list debian/tmp/*/udev/ -debian/tmp/etc/nut/nut.conf debian/tmp/etc/nut/ups.conf debian/tmp/etc/nut/upsd.conf debian/tmp/etc/nut/upsd.users -debian/tmp/etc/nut/upsmon.conf -debian/tmp/etc/nut/upssched.conf -debian/tmp/etc/bash_completion.d/nut debian/tmp/lib/nut/genericups debian/tmp/lib/nut/mge-shut debian/tmp/lib/nut/rhino diff --git a/debian/nut.links b/debian/nut-server.links similarity index 100% rename from debian/nut.links rename to debian/nut-server.links diff --git a/debian/nut-server.lintian-overrides b/debian/nut-server.lintian-overrides new file mode 100644 index 0000000..9618794 --- /dev/null +++ b/debian/nut-server.lintian-overrides @@ -0,0 +1,2 @@ +nut-server: script-in-etc-init.d-not-registered-via-update-rc.d +nut-server: init.d-script-does-not-provide-itself etc/init.d/ups-monitor diff --git a/debian/nut.manpages b/debian/nut-server.manpages similarity index 82% rename from debian/nut.manpages rename to debian/nut-server.manpages index ff02b6e..b23eea8 100644 --- a/debian/nut.manpages +++ b/debian/nut-server.manpages @@ -1,9 +1,6 @@ -debian/tmp/usr/share/man/man5/nut.conf.5 debian/tmp/usr/share/man/man5/ups.conf.5 debian/tmp/usr/share/man/man5/upsd.conf.5 debian/tmp/usr/share/man/man5/upsd.users.5 -debian/tmp/usr/share/man/man5/upsmon.conf.5 -debian/tmp/usr/share/man/man5/upssched.conf.5 debian/tmp/usr/share/man/man8/apcsmart.8 debian/tmp/usr/share/man/man8/bcmxcp.8 debian/tmp/usr/share/man/man8/bcmxcp_usb.8 @@ -37,14 +34,8 @@ debian/tmp/usr/share/man/man8/solis.8 debian/tmp/usr/share/man/man8/tripplite.8 debian/tmp/usr/share/man/man8/tripplitesu.8 debian/tmp/usr/share/man/man8/tripplite_usb.8 -debian/tmp/usr/share/man/man8/upsc.8 -debian/tmp/usr/share/man/man8/upscmd.8 debian/tmp/usr/share/man/man8/upscode2.8 debian/tmp/usr/share/man/man8/upsd.8 debian/tmp/usr/share/man/man8/upsdrvctl.8 -debian/tmp/usr/share/man/man8/upslog.8 -debian/tmp/usr/share/man/man8/upsmon.8 -debian/tmp/usr/share/man/man8/upsrw.8 -debian/tmp/usr/share/man/man8/upssched.8 debian/tmp/usr/share/man/man8/usbhid-ups.8 debian/tmp/usr/share/man/man8/victronups.8 diff --git a/debian/nut.postinst b/debian/nut-server.postinst similarity index 100% rename from debian/nut.postinst rename to debian/nut-server.postinst diff --git a/debian/nut.postrm b/debian/nut-server.postrm similarity index 100% rename from debian/nut.postrm rename to debian/nut-server.postrm diff --git a/debian/nut.preinst b/debian/nut-server.preinst similarity index 100% rename from debian/nut.preinst rename to debian/nut-server.preinst diff --git a/debian/nut.prerm b/debian/nut-server.prerm similarity index 100% rename from debian/nut.prerm rename to debian/nut-server.prerm diff --git a/debian/nut.dirs b/debian/nut.dirs deleted file mode 100644 index 0082856..0000000 --- a/debian/nut.dirs +++ /dev/null @@ -1,4 +0,0 @@ -/etc/nut -/bin -/sbin -/var/lib/nut diff --git a/debian/nut.lintian-overrides b/debian/nut.lintian-overrides deleted file mode 100644 index b30037b..0000000 --- a/debian/nut.lintian-overrides +++ /dev/null @@ -1,2 +0,0 @@ -nut: script-in-etc-init.d-not-registered-via-update-rc.d -nut: init.d-script-does-not-provide-itself etc/init.d/ups-monitor diff --git a/debian/rules b/debian/rules index 3820f30..4dd3f67 100755 --- a/debian/rules +++ b/debian/rules @@ -40,7 +40,7 @@ common-install-arch:: mv $${f} $(CURDIR)/debian/tmp/etc/nut/$${nf}; \ done -DEB_DH_INSTALLINIT_ARGS_nut := -- start 50 2 3 4 5 . stop 50 0 1 6 . +DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut -- start 50 2 3 4 5 . stop 50 0 1 6 . ifeq (linux,$(DEB_HOST_ARCH_OS)) # for Debian From ad6a04226d5f7d3f7677157a8f0ac56753a5fc16 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 3 Jun 2011 11:54:05 +0200 Subject: [PATCH 049/291] List non-installed files --- debian/changelog | 2 ++ debian/rules | 3 +++ 2 files changed, 5 insertions(+) diff --git a/debian/changelog b/debian/changelog index 8a87d81..d14f7d3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,8 @@ nut (2.6.1-2) UNRELEASED; urgency=low Some typos and spelling errors remain. * Split nut package into nut-client and nut-server, keep nut package as metapackage + * debian/rules: + - List non-installed files -- Laurent Bigonville Mon, 27 Jun 2011 17:26:59 +0200 diff --git a/debian/rules b/debian/rules index 4dd3f67..b7f180b 100755 --- a/debian/rules +++ b/debian/rules @@ -5,6 +5,9 @@ include /usr/share/cdbs/1/class/autotools.mk DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null) +# List any files which are not installed +include /usr/share/cdbs/1/rules/utils.mk +common-binary-post-install-arch:: list-missing DEB_CONFIGURE_PREFIX := DEB_CONFIGURE_SYSCONFDIR := /etc/nut From 46c56a3a13d8b89ee8d8c9d0a194e6a342d7508d Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 3 Jun 2011 13:54:46 +0200 Subject: [PATCH 050/291] Add python-nut package --- debian/changelog | 3 +++ debian/control | 21 ++++++++++++++++++--- debian/python-nut.install | 1 + debian/rules | 1 + 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 debian/python-nut.install diff --git a/debian/changelog b/debian/changelog index d14f7d3..a6b0403 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,9 @@ nut (2.6.1-2) UNRELEASED; urgency=low metapackage * debian/rules: - List non-installed files + - Includes python-module.mk + * debian/control: + - Add python-nut package and add python build-dependency -- Laurent Bigonville Mon, 27 Jun 2011 17:26:59 +0200 diff --git a/debian/control b/debian/control index 614634b..730a984 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,7 @@ Priority: optional Maintainer: Arnaud Quette Uploaders: Laurent Bigonville Build-Depends: debhelper (>= 8), - cdbs, + cdbs (>= 0.4.90~), libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), @@ -13,11 +13,13 @@ Build-Depends: debhelper (>= 8), libglib2.0-dev, libneon27-gnutls-dev | libneon27-dev, libpowerman0-dev (>= 2.3.3), - libwrap0-dev (>= 7.6) + libwrap0-dev (>= 7.6), + python (>= 2.6.6-3~) Standards-Version: 3.9.2 -Homepage: http://www.networkupstools.org +Homepage: http://www.networkupstools.org/ Vcs-Browser: http://git.debian.org/?p=collab-maint/nut.git;a=summary Vcs-Git: git://git.debian.org/git/collab-maint/nut.git +X-Python-Version: >= 2.5 Package: nut Architecture: all @@ -150,3 +152,16 @@ Description: network UPS tools - development files changes. . This package provides the development files. + +Package: python-nut +Section: python +Architecture: all +Depends: ${python:Depends}, ${misc:Depends} +Description: network UPS tools - Python bindings for NUT server + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides Python bindings to connect to NUT server. diff --git a/debian/python-nut.install b/debian/python-nut.install new file mode 100644 index 0000000..fa24bc5 --- /dev/null +++ b/debian/python-nut.install @@ -0,0 +1 @@ +scripts/python/module/PyNUT.py usr/share/pyshared/ diff --git a/debian/rules b/debian/rules index b7f180b..88d6ea4 100755 --- a/debian/rules +++ b/debian/rules @@ -2,6 +2,7 @@ include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/autotools.mk +include /usr/share/cdbs/1/class/python-module.mk DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null) From 14ffb4d76b27e0435bb7956164f7b9b5f2ca7a67 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 3 Jun 2011 16:02:02 +0200 Subject: [PATCH 051/291] Set nut-powerman-pdu priority to extras --- debian/changelog | 1 + debian/control | 1 + 2 files changed, 2 insertions(+) diff --git a/debian/changelog b/debian/changelog index a6b0403..a43845b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,6 +11,7 @@ nut (2.6.1-2) UNRELEASED; urgency=low - Includes python-module.mk * debian/control: - Add python-nut package and add python build-dependency + - Set nut-powerman-pdu priority to extras -- Laurent Bigonville Mon, 27 Jun 2011 17:26:59 +0200 diff --git a/debian/control b/debian/control index 730a984..9f62c0a 100644 --- a/debian/control +++ b/debian/control @@ -115,6 +115,7 @@ Description: network UPS tools - XML/HTTP driver Package: nut-powerman-pdu Architecture: any +Priority: extra Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 2.4.0), powerman (>= 2.3.3) Description: network UPS tools - PowerMan PDU driver Network UPS Tools (NUT) is a client/server monitoring system that From 63f12aa09fe591948620db1d7c6858458704ff2a Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 3 Jun 2011 16:22:58 +0200 Subject: [PATCH 052/291] Add nut-monitor package --- debian/changelog | 1 + debian/control | 17 ++++++++ debian/nut-monitor.install | 6 +++ debian/patches/0002-nut-monitor-paths.patch | 48 +++++++++++++++++++++ debian/patches/series | 1 + debian/rules | 3 ++ 6 files changed, 76 insertions(+) create mode 100644 debian/nut-monitor.install create mode 100644 debian/patches/0002-nut-monitor-paths.patch diff --git a/debian/changelog b/debian/changelog index a43845b..5783c14 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,6 +12,7 @@ nut (2.6.1-2) UNRELEASED; urgency=low * debian/control: - Add python-nut package and add python build-dependency - Set nut-powerman-pdu priority to extras + - Add nut-monitor package -- Laurent Bigonville Mon, 27 Jun 2011 17:26:59 +0200 diff --git a/debian/control b/debian/control index 9f62c0a..81bcef2 100644 --- a/debian/control +++ b/debian/control @@ -166,3 +166,20 @@ Description: network UPS tools - Python bindings for NUT server changes. . This package provides Python bindings to connect to NUT server. + +Package: nut-monitor +Architecture: all +Depends: ${python:Depends}, + ${misc:Depends}, + python-gobject, + python-gtk2, + python-glade2, + python-nut +Description: network UPS tools - GUI application to monitor UPS status + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides nut-monitor, a GUI application to monitor UPS status. diff --git a/debian/nut-monitor.install b/debian/nut-monitor.install new file mode 100644 index 0000000..612e8f3 --- /dev/null +++ b/debian/nut-monitor.install @@ -0,0 +1,6 @@ +scripts/python/app/NUT-Monitor usr/bin/ +scripts/python/app/nut-monitor.desktop usr/share/applications/ +scripts/python/app/gui-*.glade usr/share/nut-monitor/ +scripts/python/app/locale/ usr/share/ +scripts/python/app/nut-monitor.png usr/share/pixmaps/ +scripts/python/app/pixmaps usr/share/nut-monitor/ diff --git a/debian/patches/0002-nut-monitor-paths.patch b/debian/patches/0002-nut-monitor-paths.patch new file mode 100644 index 0000000..00fd0de --- /dev/null +++ b/debian/patches/0002-nut-monitor-paths.patch @@ -0,0 +1,48 @@ +--- a/scripts/python/app/NUT-Monitor ++++ b/scripts/python/app/NUT-Monitor +@@ -70,7 +70,7 @@ + ( cmd_opts, args ) = opt_parser.parse_args() + + +- self.__glade_file = os.path.join( os.path.dirname( sys.argv[0] ), "gui-1.3.glade" ) ++ self.__glade_file = '/usr/share/nut-monitor/gui-1.3.glade' + + self.__widgets["interface"] = gtk.glade.XML( self.__glade_file, "window1", APP ) + self.__widgets["main_window"] = self.__widgets["interface"].get_widget("window1") +@@ -103,11 +103,11 @@ + + # Create the tray icon and connect it to the show/hide method... + self.__widgets["status_icon"] = gtk.StatusIcon() +- self.__widgets["status_icon"].set_from_file( os.path.join( os.path.dirname( sys.argv[0] ), "pixmaps", "on_line.png" ) ) ++ self.__widgets["status_icon"].set_from_file( "/usr/share/nut-monitor/pixmaps/on_line.png" ) + self.__widgets["status_icon"].set_visible( True ) + self.__widgets["status_icon"].connect( "activate", self.tray_activated ) + +- self.__widgets["ups_status_image"].set_from_file( os.path.join( os.path.dirname( sys.argv[0] ), "pixmaps", "on_line.png" ) ) ++ self.__widgets["ups_status_image"].set_from_file( "/usr/share/nut-monitor/pixmaps/on_line.png" ) + + # Define interface callbacks actions + self.__callbacks = { "on_window1_destroy" : self.quit, +@@ -265,8 +265,8 @@ + #------------------------------------------------------------------- + # Change the status icon and tray icon + def change_status_icon( self, icon="on_line", blink=False ) : +- self.__widgets["status_icon"].set_from_file( os.path.join( os.path.dirname( sys.argv[0] ), "pixmaps", "%s.png" % icon ) ) +- self.__widgets["ups_status_image"].set_from_file( os.path.join( os.path.dirname( sys.argv[0] ), "pixmaps", "%s.png" % icon ) ) ++ self.__widgets["status_icon"].set_from_file( "/usr/share/nut-monitor/pixmaps/%s.png" % icon ) ++ self.__widgets["ups_status_image"].set_from_file( "/usr/share/nut-monitor/pixmaps/%s.png" % icon ) + self.__widgets["status_icon"].set_blinking( blink ) + + #------------------------------------------------------------------- +@@ -719,9 +719,9 @@ + + for k,v in vars.iteritems() : + if ( rwvars.has_key( k ) ) : +- icon_file = os.path.join( os.path.dirname( sys.argv[0] ), "pixmaps", "var-rw.png" ) ++ icon_file = "/usr/share/nut-monitor/pixmaps/var-rw.png" + else : +- icon_file = os.path.join( os.path.dirname( sys.argv[0] ), "pixmaps", "var-ro.png" ) ++ icon_file = "/usr/share/nut-monitor/pixmaps/var-ro.png" + + icon = gtk.gdk.pixbuf_new_from_file( icon_file ) + self.__widgets["ups_vars_tree_store"].append( [ icon, k, v ] ) diff --git a/debian/patches/series b/debian/patches/series index 52e301b..9e8eaf1 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ 0001-fix_spelling_and_typo.patch +0002-nut-monitor-paths.patch diff --git a/debian/rules b/debian/rules index 88d6ea4..3219e60 100755 --- a/debian/rules +++ b/debian/rules @@ -44,6 +44,9 @@ common-install-arch:: mv $${f} $(CURDIR)/debian/tmp/etc/nut/$${nf}; \ done +binary-install/nut-monitor:: + dh_python2 -pnut-monitor + DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut -- start 50 2 3 4 5 . stop 50 0 1 6 . ifeq (linux,$(DEB_HOST_ARCH_OS)) From dfa7599f3342ba3bb5d21832b233d0cd05e73f08 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 3 Jun 2011 11:54:24 +0200 Subject: [PATCH 053/291] Generate PDF and html doc and install it in nut-doc package --- debian/changelog | 5 ++++- debian/control | 23 ++++++++++++++++++--- debian/nut-doc.doc-base.nut-developer-guide | 13 ++++++++++++ debian/nut-doc.doc-base.nut-faq | 12 +++++++++++ debian/nut-doc.doc-base.nut-packager-guide | 15 ++++++++++++++ debian/nut-doc.doc-base.nut-user-manual | 15 ++++++++++++++ debian/nut-doc.install | 1 + debian/rules | 18 ++++++++++++++++ 8 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 debian/nut-doc.doc-base.nut-developer-guide create mode 100644 debian/nut-doc.doc-base.nut-faq create mode 100644 debian/nut-doc.doc-base.nut-packager-guide create mode 100644 debian/nut-doc.doc-base.nut-user-manual create mode 100644 debian/nut-doc.install diff --git a/debian/changelog b/debian/changelog index 5783c14..c23369c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,16 +5,19 @@ nut (2.6.1-2) UNRELEASED; urgency=low * Re-add and refresh debian/patches/0001-fix_spelling_and_typo.patch: Some typos and spelling errors remain. * Split nut package into nut-client and nut-server, keep nut package as + * Generate PDF and html doc and install it in nut-doc package metapackage * debian/rules: - List non-installed files - Includes python-module.mk + - Add flags to build documentation and install it * debian/control: - Add python-nut package and add python build-dependency - Set nut-powerman-pdu priority to extras - Add nut-monitor package + - Add nut-doc package and add required C/R/P - -- Laurent Bigonville Mon, 27 Jun 2011 17:26:59 +0200 + -- Laurent Bigonville Fri, 15 Jul 2011 14:59:36 +0200 nut (2.6.1-1) unstable; urgency=low diff --git a/debian/control b/debian/control index 81bcef2..53f2c66 100644 --- a/debian/control +++ b/debian/control @@ -15,6 +15,9 @@ Build-Depends: debhelper (>= 8), libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6), python (>= 2.6.6-3~) +Build-Depends-Indep: asciidoc (>= 8.6.3), + dblatex (>= 0.2.5), + libxml2-utils Standards-Version: 3.9.2 Homepage: http://www.networkupstools.org/ Vcs-Browser: http://git.debian.org/?p=collab-maint/nut.git;a=summary @@ -37,9 +40,9 @@ Package: nut-server Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6), ${udev}, nut-client (= ${binary:Version}) Suggests: nut-cgi, nut-snmp, nut-dev, nut-xml -Provides: ups-monitor, nut-doc, nut-usb -Conflicts: ups-monitor, nut-doc, nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) -Replaces: nut-doc, nut (<< 2.6.1) +Provides: ups-monitor, nut-usb +Conflicts: ups-monitor, nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) +Replaces: nut (<< 2.6.1) Breaks: nut (<< 2.6.1) Description: network UPS tools - core system Network UPS Tools (NUT) is a client/server monitoring system that @@ -127,6 +130,20 @@ Description: network UPS tools - PowerMan PDU driver This package provides powerman-pdu, which allows NUT clients to communicate with the PowerMan daemon to support PDUs. +Package: nut-doc +Architecture: all +Section: doc +Depends: ${misc:Depends} +Suggests: doc-base +Description: network UPS tools - documentation + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package contains FAQ, user, developer and packager documentation. + Package: libupsclient1 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} diff --git a/debian/nut-doc.doc-base.nut-developer-guide b/debian/nut-doc.doc-base.nut-developer-guide new file mode 100644 index 0000000..ed3ad0d --- /dev/null +++ b/debian/nut-doc.doc-base.nut-developer-guide @@ -0,0 +1,13 @@ +Document: nut-developer-guide +Title: Network UPS Tools Developer Guide +Author: Russell Kroll, Arnaud Quette, Charles Lepple and Peter Selinger +Abstract: This document intend to describe how NUT is designed, + and the way to develop new device drivers and client applications. +Section: Programming + +Format: PDF +Files: /usr/share/doc/nut-doc/pdf/developer-guide.pdf + +Format: HTML +Index: /usr/share/doc/nut-doc/html/developer-guide/index.html +Files: /usr/share/doc/nut-doc/html/developer-guide/*.html diff --git a/debian/nut-doc.doc-base.nut-faq b/debian/nut-doc.doc-base.nut-faq new file mode 100644 index 0000000..098042f --- /dev/null +++ b/debian/nut-doc.doc-base.nut-faq @@ -0,0 +1,12 @@ +Document: nut-faq +Title: NUT Frequently asked questions +Author: Arnaud Quette +Abstract: Frequently asked questions for Network UPS Tools (NUT) +Section: Help/FAQ + +Format: PDF +Files: /usr/share/doc/nut-doc/pdf/FAQ.pdf + +Format: HTML +Index: /usr/share/doc/nut-doc/html/FAQ.html +Files: /usr/share/doc/nut-doc/html/FAQ.html diff --git a/debian/nut-doc.doc-base.nut-packager-guide b/debian/nut-doc.doc-base.nut-packager-guide new file mode 100644 index 0000000..61d6b46 --- /dev/null +++ b/debian/nut-doc.doc-base.nut-packager-guide @@ -0,0 +1,15 @@ +Document: nut-packager-guide +Title: NUT Packager and Integrators Guide +Author: Arnaud Quette +Abstract: Packaging is a final aim for software. + It eases and completes the software integration into an OS, + and allows users to have an easy software installation and support out of the box. + This document describes best practice for packaging NUT. +Section: Debian + +Format: PDF +Files: /usr/share/doc/nut-doc/pdf/packager-guide.pdf + +Format: HTML +Index: /usr/share/doc/nut-doc/html/packager-guide/index.html +Files: /usr/share/doc/nut-doc/html/packager-guide/*.html diff --git a/debian/nut-doc.doc-base.nut-user-manual b/debian/nut-doc.doc-base.nut-user-manual new file mode 100644 index 0000000..76db720 --- /dev/null +++ b/debian/nut-doc.doc-base.nut-user-manual @@ -0,0 +1,15 @@ +Document: nut-user-manual +Title: Network UPS Tools User Manual +Author: Russell Kroll, Arnaud Quette and Arjen de Korte +Abstract: This document intend to describe how to install software support + for your Power Devices (UPS, PDU, …), and how to use the NUT project. + It is not intended to explain what are, nor distinguish the different technologies that exist. + For such information, have a look at the General Power Devices Information. +Section: System/Administration + +Format: PDF +Files: /usr/share/doc/nut-doc/pdf/user-manual.pdf + +Format: HTML +Index: /usr/share/doc/nut-doc/html/user-manual/index.html +Files: /usr/share/doc/nut-doc/html/user-manual/*.html diff --git a/debian/nut-doc.install b/debian/nut-doc.install new file mode 100644 index 0000000..e3f78fa --- /dev/null +++ b/debian/nut-doc.install @@ -0,0 +1 @@ +debian/tmp/usr/share/doc/nut-doc/ diff --git a/debian/rules b/debian/rules index 3219e60..871ffb1 100755 --- a/debian/rules +++ b/debian/rules @@ -32,6 +32,11 @@ ifeq (linux,$(DEB_HOST_ARCH_OS)) DEB_CONFIGURE_EXTRA_FLAGS+=--with-udev-dir=/lib/udev endif +# only build documentation if asciidoc is installed +ifneq ($(shell which asciidoc),) + DEB_CONFIGURE_EXTRA_FLAGS+=--with-doc=html-chunked,pdf +endif + common-install-arch:: # install the bash completion script mkdir -p $(CURDIR)/debian/tmp/etc/bash_completion.d @@ -44,10 +49,23 @@ common-install-arch:: mv $${f} $(CURDIR)/debian/tmp/etc/nut/$${nf}; \ done +common-install-indep:: + #install documentation + mkdir -p $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/pdf + mkdir -p $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/html + cp $(CURDIR)/docs/*.pdf $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/pdf + cp $(CURDIR)/docs/FAQ.html $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/html + + for f in $(CURDIR)/docs/*.chunked/; do \ + nf=`basename $${f} | sed 's/\(.*\)\.chunked/\1/'`; \ + cp -a $${f} $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/html/$${nf}/; \ + done + binary-install/nut-monitor:: dh_python2 -pnut-monitor DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut -- start 50 2 3 4 5 . stop 50 0 1 6 . +DEB_DH_COMPRESS_ARGS_nut-doc := -X.pdf ifeq (linux,$(DEB_HOST_ARCH_OS)) # for Debian From 1e45c0d27020645088c711246fc7121016d1cc4f Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 15 Jul 2011 15:32:31 +0200 Subject: [PATCH 054/291] debian/nut-server.prerm: Remove /var/run/nut during removal --- debian/changelog | 3 ++- debian/nut-server.prerm | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index c23369c..7927218 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,8 +16,9 @@ nut (2.6.1-2) UNRELEASED; urgency=low - Set nut-powerman-pdu priority to extras - Add nut-monitor package - Add nut-doc package and add required C/R/P + * debian/nut-server.prerm: Remove /var/run/nut during removal - -- Laurent Bigonville Fri, 15 Jul 2011 14:59:36 +0200 + -- Laurent Bigonville Fri, 15 Jul 2011 15:31:30 +0200 nut (2.6.1-1) unstable; urgency=low diff --git a/debian/nut-server.prerm b/debian/nut-server.prerm index 2c9c2e1..6292ef8 100644 --- a/debian/nut-server.prerm +++ b/debian/nut-server.prerm @@ -14,7 +14,7 @@ case "$1" in [ -L /usr/doc/nut ] && rm -f /usr/doc/nut # do stop the daemon on remove invoke-rc.d nut stop && sleep 1 - [ -d /var/run/nut ] && rm -f /var/run/nut/*.pid + [ -d /var/run/nut ] && rm -rf /var/run/nut/ ;; upgrade) From 2ffa6bd47947f26daa65b9e722d5c55d52e1ee31 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 15 Jul 2011 15:41:05 +0200 Subject: [PATCH 055/291] Add libups-nut-perl package --- debian/changelog | 3 ++- debian/control | 13 +++++++++++++ debian/libups-nut-perl.install | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 debian/libups-nut-perl.install diff --git a/debian/changelog b/debian/changelog index 7927218..ca960be 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,9 +16,10 @@ nut (2.6.1-2) UNRELEASED; urgency=low - Set nut-powerman-pdu priority to extras - Add nut-monitor package - Add nut-doc package and add required C/R/P + - Add libups-nut-perl package * debian/nut-server.prerm: Remove /var/run/nut during removal - -- Laurent Bigonville Fri, 15 Jul 2011 15:31:30 +0200 + -- Laurent Bigonville Fri, 15 Jul 2011 15:40:40 +0200 nut (2.6.1-1) unstable; urgency=low diff --git a/debian/control b/debian/control index 53f2c66..1153e72 100644 --- a/debian/control +++ b/debian/control @@ -200,3 +200,16 @@ Description: network UPS tools - GUI application to monitor UPS status changes. . This package provides nut-monitor, a GUI application to monitor UPS status. + +Package: libups-nut-perl +Section: perl +Architecture: all +Depends: ${perl:Depends}, ${misc:Depends} +Description: network UPS tools - Perl bindings for NUT server + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides Perl bindings to connect to NUT server. diff --git a/debian/libups-nut-perl.install b/debian/libups-nut-perl.install new file mode 100644 index 0000000..355c6fe --- /dev/null +++ b/debian/libups-nut-perl.install @@ -0,0 +1 @@ +scripts/perl/Nut.pm /usr/share/perl5/UPS/ From 9d7ae928f5aa33b6234d73f8c1bf56557d1e86ff Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 17 Jul 2011 17:48:57 +0200 Subject: [PATCH 056/291] debian/control: Adjust Breaks/Replaces --- debian/control | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/debian/control b/debian/control index 1153e72..2696b7c 100644 --- a/debian/control +++ b/debian/control @@ -42,8 +42,8 @@ Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6), ${ude Suggests: nut-cgi, nut-snmp, nut-dev, nut-xml Provides: ups-monitor, nut-usb Conflicts: ups-monitor, nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) -Replaces: nut (<< 2.6.1) -Breaks: nut (<< 2.6.1) +Replaces: nut (<< 2.6.1-2~) +Breaks: nut (<< 2.6.1-2~) Description: network UPS tools - core system Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and @@ -59,8 +59,8 @@ Package: nut-client Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: bash-completion -Replaces: nut (<< 2.6.1) -Breaks: nut (<< 2.6.1) +Replaces: nut (<< 2.6.1-2~) +Breaks: nut (<< 2.6.1-2~) Description: network UPS tools - clients Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and From 6be08da846d2a64a27714f572436af518e53387c Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 17 Jul 2011 19:12:26 +0200 Subject: [PATCH 057/291] Fix changelog entry --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index ca960be..7c59db3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,8 +5,8 @@ nut (2.6.1-2) UNRELEASED; urgency=low * Re-add and refresh debian/patches/0001-fix_spelling_and_typo.patch: Some typos and spelling errors remain. * Split nut package into nut-client and nut-server, keep nut package as - * Generate PDF and html doc and install it in nut-doc package metapackage + * Generate PDF and html doc and install it in nut-doc package * debian/rules: - List non-installed files - Includes python-module.mk From eb01d7e338beb4d47af1bc36aed0427729a1b498 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 17 Jul 2011 19:03:33 +0200 Subject: [PATCH 058/291] Release to unstable --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7c59db3..71dc1ca 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.6.1-2) UNRELEASED; urgency=low +nut (2.6.1-2) unstable; urgency=low * debian/nut.README.Debian: Adjust udev rules naming for permissions override (Closes: #529664) @@ -19,7 +19,7 @@ nut (2.6.1-2) UNRELEASED; urgency=low - Add libups-nut-perl package * debian/nut-server.prerm: Remove /var/run/nut during removal - -- Laurent Bigonville Fri, 15 Jul 2011 15:40:40 +0200 + -- Laurent Bigonville Sun, 17 Jul 2011 19:03:18 +0200 nut (2.6.1-1) unstable; urgency=low From 18de36389b10ac8cc7400442627b0db46748aec9 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Thu, 29 Sep 2011 20:17:51 +0200 Subject: [PATCH 059/291] Debian release 2.6.2-1 --- debian/changelog | 15 +++++++++++++++ debian/control | 4 +--- debian/nut-server.init | 10 ++-------- debian/nut-server.install | 1 + debian/nut.TODO.Debian | 19 +++++++++---------- 5 files changed, 28 insertions(+), 21 deletions(-) diff --git a/debian/changelog b/debian/changelog index 71dc1ca..6124fed 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,18 @@ +nut (2.6.2-1) unstable; urgency=low + + * New upstream release (Closes: #594989) + * debian/control: + - remove legacy Build-Depends for nut-hal-drivers on libdbus and libglib + - Build-Depends-Indep on docbook-xsl for offline document + generation (Closes: #635347) + * debian/nut-server.install: add apcsmart-old + * debian/nut-server.init: + - add udev as Required-Start/Stop (Closes: #642412) + - remove legacy support for /etc/default/nut (Closes: #638021) + * debian/nut.TODO.Debian: update and complete the TODO list + + -- Arnaud Quette Thu, 29 Sep 2011 18:39:16 +0200 + nut (2.6.1-2) unstable; urgency=low * debian/nut.README.Debian: Adjust udev rules naming for permissions override diff --git a/debian/control b/debian/control index 2696b7c..b0e8188 100644 --- a/debian/control +++ b/debian/control @@ -8,14 +8,12 @@ Build-Depends: debhelper (>= 8), libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), - libdbus-1-dev, - libdbus-glib-1-dev, - libglib2.0-dev, libneon27-gnutls-dev | libneon27-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6), python (>= 2.6.6-3~) Build-Depends-Indep: asciidoc (>= 8.6.3), + docbook-xsl, dblatex (>= 0.2.5), libxml2-utils Standards-Version: 3.9.2 diff --git a/debian/nut-server.init b/debian/nut-server.init index 50706ed..158e127 100644 --- a/debian/nut-server.init +++ b/debian/nut-server.init @@ -1,8 +1,8 @@ #! /bin/sh ### BEGIN INIT INFO # Provides: nut -# Required-Start: $local_fs $syslog $network $remote_fs -# Required-Stop: $local_fs $syslog $network $remote_fs +# Required-Start: $local_fs $syslog $network $remote_fs udev +# Required-Stop: $local_fs $syslog $network $remote_fs udev # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Network UPS Tools initscript @@ -17,7 +17,6 @@ PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin NAME=nut DESC="Network UPS Tools" -DEFAULT=/etc/default/nut CONFIG=/etc/nut/nut.conf . /lib/lsb/init-functions @@ -28,11 +27,6 @@ UPSD_OPTIONS="" # set upsmon specific options. use "man upsmon" for more info UPSMON_OPTIONS="" -# Include defaults if available (transition period) -if [ -f $DEFAULT ] ; then - . $DEFAULT -fi - # Include NUT nut.conf if [ -f $CONFIG ] ; then . $CONFIG diff --git a/debian/nut-server.install b/debian/nut-server.install index 034e307..3c0c086 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -12,6 +12,7 @@ debian/tmp/lib/nut/bestups debian/tmp/lib/nut/bestfortress debian/tmp/lib/nut/usbhid-ups debian/tmp/lib/nut/apcsmart +debian/tmp/lib/nut/apcsmart-old debian/tmp/lib/nut/belkin debian/tmp/lib/nut/blazer_ser debian/tmp/lib/nut/blazer_usb diff --git a/debian/nut.TODO.Debian b/debian/nut.TODO.Debian index 3a35bbc..4efc003 100644 --- a/debian/nut.TODO.Debian +++ b/debian/nut.TODO.Debian @@ -1,11 +1,10 @@ -- address the /var/www issue with upstream -- rewrite and enhance the init script (log output, LSB, ...) -- audit and solve the lintian reports... -- factorise install rules (possibly use CDBS) +- split nut-server.init into nut-server.init + nut-client.init (upsmon) +- how to distribute the nut-scanner and its library? Ie, a single package, + or using the nut-{xml,snmp,...} packages. + this requires libusb (0.1), Net SNMP, FreeIPMi, Avahi, libupsclient and Neon! - consider an SSL/TLS set of packages (ie nut-ssl, ...) - or help the port to NSS -- apply when available the NUT Packaging Standard (NPS) - ie create a nut-client package -- install the device-recorder.sh script (with nut-client or nut-dev?) -- consider joining the powermgt effort: - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=55123 + or help the port to NSS +- install the device-recorder.sh script (with libupsclient-dev or a more + generic nut-dev that depends?) +- address the /var/www issue with upstream +- audit and solve the lintian reports... From e75060ac30ae0e80f9c776cf25f8067663f7f125 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Thu, 29 Sep 2011 22:58:03 +0200 Subject: [PATCH 060/291] Debian release 2.6.2-1 UNRELEASED --- debian/changelog | 2 +- debian/rules | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 6124fed..8ea2bc5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.6.2-1) unstable; urgency=low +nut (2.6.2-1) UNRELEASED; urgency=low * New upstream release (Closes: #594989) * debian/control: diff --git a/debian/rules b/debian/rules index 871ffb1..8fa38f7 100755 --- a/debian/rules +++ b/debian/rules @@ -1,5 +1,8 @@ #!/usr/bin/make -f +DEB_AUTO_UPDATE_ACLOCAL := 1.11 +DEB_AUTO_UPDATE_LIBTOOL := pre +include /usr/share/cdbs/1/rules/autoreconf.mk include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/autotools.mk include /usr/share/cdbs/1/class/python-module.mk From e69a4460bbe3bebc13d369a6e72acdeb8f0201c7 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Fri, 30 Sep 2011 22:37:48 +0200 Subject: [PATCH 061/291] Debian release 2.6.2-1 --- debian/changelog | 6 +++++- debian/libupsclient1-dev.links | 2 +- debian/libupsclient1.symbols | 1 + .../patches/0003-libupsclient-version.patch | 20 +++++++++++++++++++ debian/patches/series | 1 + debian/rules | 3 --- 6 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 debian/patches/0003-libupsclient-version.patch diff --git a/debian/changelog b/debian/changelog index 8ea2bc5..83671bf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.6.2-1) UNRELEASED; urgency=low +nut (2.6.2-1) unstable; urgency=low * New upstream release (Closes: #594989) * debian/control: @@ -9,6 +9,10 @@ nut (2.6.2-1) UNRELEASED; urgency=low * debian/nut-server.init: - add udev as Required-Start/Stop (Closes: #642412) - remove legacy support for /etc/default/nut (Closes: #638021) + * debian/patches/0003-libupsclient-version.patch: added to fix the missing + libupsclient version info bump + * debian/libupsclient1-dev.links: update link name + * debian/libupsclient1.symbols: add with upscli_tryconnect * debian/nut.TODO.Debian: update and complete the TODO list -- Arnaud Quette Thu, 29 Sep 2011 18:39:16 +0200 diff --git a/debian/libupsclient1-dev.links b/debian/libupsclient1-dev.links index 107c217..0ac64c7 100644 --- a/debian/libupsclient1-dev.links +++ b/debian/libupsclient1-dev.links @@ -1 +1 @@ -/lib/libupsclient.so.1.0.0 /usr/lib/libupsclient.so +/lib/libupsclient.so.1.1.0 /usr/lib/libupsclient.so diff --git a/debian/libupsclient1.symbols b/debian/libupsclient1.symbols index f9cd39a..85e4066 100644 --- a/debian/libupsclient1.symbols +++ b/debian/libupsclient1.symbols @@ -22,3 +22,4 @@ libupsclient.so.1 libupsclient1 #MINVER# upscli_sslcert@Base 2.4.1 upscli_strerror@Base 2.4.1 upscli_upserror@Base 2.4.1 + upscli_tryconnect@Base 2.6.2 diff --git a/debian/patches/0003-libupsclient-version.patch b/debian/patches/0003-libupsclient-version.patch new file mode 100644 index 0000000..4b02835 --- /dev/null +++ b/debian/patches/0003-libupsclient-version.patch @@ -0,0 +1,20 @@ +--- a/clients/Makefile.am ++++ b/clients/Makefile.am +@@ -50,4 +50,4 @@ + if WITH_SSL + libupsclient_la_LIBADD += $(LIBSSL_LIBS) + endif +-libupsclient_la_LDFLAGS = -version-info 1:0:0 ++libupsclient_la_LDFLAGS = -version-info 2:0:1 +diff -ru nut-2.6.2.orig/clients/Makefile.in nut-2.6.2/clients/Makefile.in +--- a/clients/Makefile.in ++++ b/clients/Makefile.in +@@ -384,7 +384,7 @@ + # not LDADD. + libupsclient_la_SOURCES = upsclient.c upsclient.h + libupsclient_la_LIBADD = ../common/libparseconf.la $(am__append_4) +-libupsclient_la_LDFLAGS = -version-info 1:0:0 ++libupsclient_la_LDFLAGS = -version-info 2:0:1 + all: all-am + + .SUFFIXES: diff --git a/debian/patches/series b/debian/patches/series index 9e8eaf1..6ea723f 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1,3 @@ 0001-fix_spelling_and_typo.patch 0002-nut-monitor-paths.patch +0003-libupsclient-version.patch diff --git a/debian/rules b/debian/rules index 8fa38f7..871ffb1 100755 --- a/debian/rules +++ b/debian/rules @@ -1,8 +1,5 @@ #!/usr/bin/make -f -DEB_AUTO_UPDATE_ACLOCAL := 1.11 -DEB_AUTO_UPDATE_LIBTOOL := pre -include /usr/share/cdbs/1/rules/autoreconf.mk include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/autotools.mk include /usr/share/cdbs/1/class/python-module.mk From 968d86eb0288513a6b39e3ee22de399b21f10296 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Thu, 3 Nov 2011 21:49:45 -0400 Subject: [PATCH 062/291] add richcomm_usb --- debian/changelog | 6 ++++++ debian/nut-server.install | 1 + debian/nut-server.manpages | 1 + 3 files changed, 8 insertions(+) diff --git a/debian/changelog b/debian/changelog index 83671bf..96a7139 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +nut (2.6.2-2) UNRELEASED; urgency=low + + * debian/nut-server.{install,manpages}: add richcomm_usb + + -- Arnaud Quette Thu, 03 Nov 2011 21:34:14 -0400 + nut (2.6.2-1) unstable; urgency=low * New upstream release (Closes: #594989) diff --git a/debian/nut-server.install b/debian/nut-server.install index 3c0c086..ec6965f 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -45,3 +45,4 @@ debian/tmp/lib/nut/optiups debian/tmp/lib/nut/upsdrvctl /sbin debian/tmp/lib/nut/everups debian/tmp/lib/nut/dummy-ups +debian/tmp/lib/nut/richcomm_usb diff --git a/debian/nut-server.manpages b/debian/nut-server.manpages index b23eea8..7b82e84 100644 --- a/debian/nut-server.manpages +++ b/debian/nut-server.manpages @@ -29,6 +29,7 @@ debian/tmp/usr/share/man/man8/optiups.8 debian/tmp/usr/share/man/man8/powercom.8 debian/tmp/usr/share/man/man8/powerpanel.8 debian/tmp/usr/share/man/man8/rhino.8 +debian/tmp/usr/share/man/man8/richcomm_usb.8 debian/tmp/usr/share/man/man8/safenet.8 debian/tmp/usr/share/man/man8/solis.8 debian/tmp/usr/share/man/man8/tripplite.8 From 39af1601d0eedf7ca7b63ba7a2efa5a31e720737 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Fri, 2 Dec 2011 20:40:30 +0100 Subject: [PATCH 063/291] Install Avahi service file --- debian/changelog | 1 + debian/nut-server.install | 1 + debian/rules | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index 96a7139..1c30aee 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ nut (2.6.2-2) UNRELEASED; urgency=low * debian/nut-server.{install,manpages}: add richcomm_usb + * debian/nut-server.install, debian/rules: install Avahi service file -- Arnaud Quette Thu, 03 Nov 2011 21:34:14 -0400 diff --git a/debian/nut-server.install b/debian/nut-server.install index ec6965f..be2e16c 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -2,6 +2,7 @@ debian/tmp/sbin/upsd debian/tmp/usr/share/nut/cmdvartab debian/tmp/usr/share/nut/driver.list debian/tmp/*/udev/ +debian/tmp/etc/avahi/services/nut.service debian/tmp/etc/nut/ups.conf debian/tmp/etc/nut/upsd.conf debian/tmp/etc/nut/upsd.users diff --git a/debian/rules b/debian/rules index 871ffb1..5d6983d 100755 --- a/debian/rules +++ b/debian/rules @@ -43,6 +43,11 @@ common-install-arch:: cp $(CURDIR)/scripts/misc/nut.bash_completion \ $(CURDIR)/debian/tmp/etc/bash_completion.d/nut + # install the avahi service file + mkdir -p $(CURDIR)/debian/tmp/etc/avahi/services + cp $(CURDIR)/scripts/avahi/nut.service \ + $(CURDIR)/debian/tmp/etc/avahi/services + # install the default configuration for f in $(CURDIR)/debian/tmp/etc/nut/*; do \ nf=`basename $${f} | sed 's/\(.*\).sample/\1/'`; \ From bd91941eb2d4def0591e694e44f675b633bdf501 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Fri, 2 Dec 2011 21:02:54 +0100 Subject: [PATCH 064/291] Install Augeas lenses --- debian/changelog | 1 + debian/nut-client.install | 9 +++++++++ debian/rules | 7 +++++++ 3 files changed, 17 insertions(+) diff --git a/debian/changelog b/debian/changelog index 1c30aee..8a7777e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ nut (2.6.2-2) UNRELEASED; urgency=low * debian/nut-server.{install,manpages}: add richcomm_usb * debian/nut-server.install, debian/rules: install Avahi service file + * debian/rules, nut-client.install: install Augeas lenses -- Arnaud Quette Thu, 03 Nov 2011 21:34:14 -0400 diff --git a/debian/nut-client.install b/debian/nut-client.install index d15acda..cde4bd7 100644 --- a/debian/nut-client.install +++ b/debian/nut-client.install @@ -8,3 +8,12 @@ debian/tmp/etc/bash_completion.d/nut debian/tmp/etc/nut/nut.conf debian/tmp/etc/nut/upsmon.conf debian/tmp/etc/nut/upssched.conf +debian/tmp/usr/share/augeas/lenses/dist/nuthostsconf.aug +debian/tmp/usr/share/augeas/lenses/dist/nutnutconf.aug +debian/tmp/usr/share/augeas/lenses/dist/nutupsconf.aug +debian/tmp/usr/share/augeas/lenses/dist/nutupsdconf.aug +debian/tmp/usr/share/augeas/lenses/dist/nutupsdusers.aug +debian/tmp/usr/share/augeas/lenses/dist/nutupsmonconf.aug +debian/tmp/usr/share/augeas/lenses/dist/nutupsschedconf.aug +debian/tmp/usr/share/augeas/lenses/dist/nutupssetconf.aug +debian/tmp/usr/share/augeas/lenses/dist/tests/test_nut.aug diff --git a/debian/rules b/debian/rules index 5d6983d..9af3f0b 100755 --- a/debian/rules +++ b/debian/rules @@ -48,6 +48,13 @@ common-install-arch:: cp $(CURDIR)/scripts/avahi/nut.service \ $(CURDIR)/debian/tmp/etc/avahi/services + # install Augeas lenses + mkdir -p $(CURDIR)/debian/tmp/usr/share/augeas/lenses/dist/tests + cp $(CURDIR)/scripts/augeas/*.aug \ + $(CURDIR)/debian/tmp/usr/share/augeas/lenses/dist/ + cp $(CURDIR)/scripts/augeas/tests/test_nut.aug \ + $(CURDIR)/debian/tmp/usr/share/augeas/lenses/dist/tests/ + # install the default configuration for f in $(CURDIR)/debian/tmp/etc/nut/*; do \ nf=`basename $${f} | sed 's/\(.*\).sample/\1/'`; \ From 0d4527e4ffa178649c5d083d28baf3ab791c2d2e Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Thu, 5 Jan 2012 17:00:59 +0100 Subject: [PATCH 065/291] Clarify udev explanation (Closes: #529664) --- debian/changelog | 1 + debian/nut-server.README.Debian | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 8a7777e..1e5b064 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,7 @@ nut (2.6.2-2) UNRELEASED; urgency=low * debian/nut-server.{install,manpages}: add richcomm_usb * debian/nut-server.install, debian/rules: install Avahi service file * debian/rules, nut-client.install: install Augeas lenses + * debian/nut-server.README.Debian: clarify udev explanation (Closes: #529664) -- Arnaud Quette Thu, 03 Nov 2011 21:34:14 -0400 diff --git a/debian/nut-server.README.Debian b/debian/nut-server.README.Debian index 975b389..ed4446c 100644 --- a/debian/nut-server.README.Debian +++ b/debian/nut-server.README.Debian @@ -70,15 +70,17 @@ MODE. If you are running in "netclient" MODE, jump directly to section 6. This is not done by default for security reason on Debian, but is applied on Ubuntu. - b) Another solution, for system supporting udev, is to create a file - (for example /etc/udev/rules.d/92-nut-serialups.rules), placed - after 91-permissions.rules and to add something like: + b) Another solution, for system supporting udev, is to create a file, + For example /etc/udev/rules.d/92-nut-serialups.rules. It will + be used after /lib/udev/rules.d/91-permissions.rules, and + contains something like: + KERNEL=="ttyS1", GROUP="nut" where 'ttyS1' has to be replaced by the exact name of your serial port. For USB devices, permissions are automatically set by the - 52-nut-usbups.rules udev rules file. + /lib/udev/rules.d/52-nut-usbups.rules udev rules file. (4) /etc/nut/upsd.conf (see 'man 5 upsd.conf' for more information) the default /etc/nut/upsd.conf is fine for a "standalone" configuration. From ba627733517475db3dbd3d2ee3d3b3e63980043b Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Tue, 24 Jan 2012 11:28:33 +0100 Subject: [PATCH 066/291] Update patches list --- debian/changelog | 7 ++- .../patches/0001-fix_spelling_and_typo.patch | 46 ------------------- .../patches/0003-libupsclient-version.patch | 20 -------- debian/patches/series | 2 - 4 files changed, 6 insertions(+), 69 deletions(-) delete mode 100644 debian/patches/0001-fix_spelling_and_typo.patch delete mode 100644 debian/patches/0003-libupsclient-version.patch diff --git a/debian/changelog b/debian/changelog index 1e5b064..b25cefa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,14 @@ -nut (2.6.2-2) UNRELEASED; urgency=low +nut (2.6.3-1) unstable; urgency=low + * New upstream release * debian/nut-server.{install,manpages}: add richcomm_usb * debian/nut-server.install, debian/rules: install Avahi service file * debian/rules, nut-client.install: install Augeas lenses * debian/nut-server.README.Debian: clarify udev explanation (Closes: #529664) + * debian/patches/0001-fix_spelling_and_typo.patch, + debian/patches/0003-libupsclient-version.patch: removed since these are now + fixed upstream + * debian/patches/series: updated -- Arnaud Quette Thu, 03 Nov 2011 21:34:14 -0400 diff --git a/debian/patches/0001-fix_spelling_and_typo.patch b/debian/patches/0001-fix_spelling_and_typo.patch deleted file mode 100644 index 8d9bc86..0000000 --- a/debian/patches/0001-fix_spelling_and_typo.patch +++ /dev/null @@ -1,46 +0,0 @@ -Description: Fix several spelling errors -Author: Laurent Bigonville -Last-Update: 2011-06-03 - ---- a/docs/man/bcmxcp.8 -+++ b/docs/man/bcmxcp.8 -@@ -103,7 +103,7 @@ - .RE - .SH "TODO LIST" - .PP --Report UPS statistics informations -+Report UPS statistics information - .RS 4 - BCM/XCP supports reporting of UPS statistics data\&. - .RE ---- a/docs/man/blazer.8 -+++ b/docs/man/blazer.8 -@@ -264,7 +264,7 @@ - .RE - .\} - .sp --There is a way to get better readings without disconnecting the load but this requires to keep track on how much (and how fast) current is going in\- and out of the battery\&. If you specified the \fBruntimecal\fR, the driver will attempt to do this\&. Note however, that this heavily relies on the values you enter and that the UPS must be able to report the load as well\&. There are quite a couple of devices that report 0 % (or any other fixed value) at all times, in which case this obviously doesn\(cqt work\&. -+There is a way to get better readings without disconnecting the load but this requires one to keep track on how much (and how fast) current is going in\- and out of the battery\&. If you specified the \fBruntimecal\fR, the driver will attempt to do this\&. Note however, that this heavily relies on the values you enter and that the UPS must be able to report the load as well\&. There are quite a couple of devices that report 0 % (or any other fixed value) at all times, in which case this obviously doesn\(cqt work\&. - .sp - The driver also has no way of determining the degradation of the battery capacity over time, so you\(cqll have to deal with this yourself (by adjusting the values in \fBruntimecal\fR)\&. Also note that the driver guesses the initial state of charge based on the battery voltage, so this may be less than 100 %, even when you are certain that they are full\&. There is just no way to reliably measure this between 0 and 100 % full charge\&. - .sp ---- a/docs/man/dummy-ups.8 -+++ b/docs/man/dummy-ups.8 -@@ -37,7 +37,7 @@ - This program is a multi\-purpose UPS emulation tool\&. Its behavior depends on the running mode: - .SS "Dummy Mode" - .sp --\fBdummy\-ups\fR looks like a standard device driver to \fBupsd\fR(8) and allows to change any value for testing purposes\&. It is both interactive, controllable through the \fBupsrw\fR(1) and \fBupscmd\fR(1) commands (or equivalent graphical tool), and batchable through script files\&. It can be configured, launched and used as any other real driver\&. This mode is mostly useful for development and testing purposes\&. -+\fBdummy\-ups\fR looks like a standard device driver to \fBupsd\fR(8) and allows one to change any value for testing purposes\&. It is both interactive, controllable through the \fBupsrw\fR(1) and \fBupscmd\fR(1) commands (or equivalent graphical tool), and batchable through script files\&. It can be configured, launched and used as any other real driver\&. This mode is mostly useful for development and testing purposes\&. - .SS "Repeater Mode" - .sp - \fBdummy\-ups\fR acts as a NUT client, simply forwarding data\&. This can be useful for supervision purposes\&. This can also allow some load sharing between several UPS instances, using a point\-to\-point communication with the UPS\&. -@@ -130,7 +130,7 @@ - .sp - It also helps the NUT Quality Assurance effort, by automating some tests on the NUT framework\&. - .sp --It now offers a repeater mode\&. This will help in building the Meta UPS approach, which allows to build a virtual device, composed of several other devices (either UPS, PDUs)\&. -+It now offers a repeater mode\&. This will help in building the Meta UPS approach, which allows one to build a virtual device, composed of several other devices (either UPS, PDUs)\&. - .SH "BUGS" - .sp - Instant commands are not yet supported in Dummy Mode, and data need name/value checking enforcement, as well as boundaries or enumeration definition\&. diff --git a/debian/patches/0003-libupsclient-version.patch b/debian/patches/0003-libupsclient-version.patch deleted file mode 100644 index 4b02835..0000000 --- a/debian/patches/0003-libupsclient-version.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/clients/Makefile.am -+++ b/clients/Makefile.am -@@ -50,4 +50,4 @@ - if WITH_SSL - libupsclient_la_LIBADD += $(LIBSSL_LIBS) - endif --libupsclient_la_LDFLAGS = -version-info 1:0:0 -+libupsclient_la_LDFLAGS = -version-info 2:0:1 -diff -ru nut-2.6.2.orig/clients/Makefile.in nut-2.6.2/clients/Makefile.in ---- a/clients/Makefile.in -+++ b/clients/Makefile.in -@@ -384,7 +384,7 @@ - # not LDADD. - libupsclient_la_SOURCES = upsclient.c upsclient.h - libupsclient_la_LIBADD = ../common/libparseconf.la $(am__append_4) --libupsclient_la_LDFLAGS = -version-info 1:0:0 -+libupsclient_la_LDFLAGS = -version-info 2:0:1 - all: all-am - - .SUFFIXES: diff --git a/debian/patches/series b/debian/patches/series index 6ea723f..2024d93 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1 @@ -0001-fix_spelling_and_typo.patch 0002-nut-monitor-paths.patch -0003-libupsclient-version.patch From 926c972a29fa346b0980241f4dadc7f854750166 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Tue, 24 Jan 2012 13:17:02 +0100 Subject: [PATCH 067/291] Update the list of closed bugs --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index b25cefa..d5fe734 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,6 @@ nut (2.6.3-1) unstable; urgency=low - * New upstream release + * New upstream release (Closes: #635186, #598741, #633756, #638221) * debian/nut-server.{install,manpages}: add richcomm_usb * debian/nut-server.install, debian/rules: install Avahi service file * debian/rules, nut-client.install: install Augeas lenses @@ -10,7 +10,7 @@ nut (2.6.3-1) unstable; urgency=low fixed upstream * debian/patches/series: updated - -- Arnaud Quette Thu, 03 Nov 2011 21:34:14 -0400 + -- Arnaud Quette Tue, 24 Jan 2012 13:14:59 +0100 nut (2.6.2-1) unstable; urgency=low From 1aa25b671de39e63c454251c14601ad076d60d30 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Sat, 28 Jan 2012 19:26:35 +0100 Subject: [PATCH 068/291] Debian release 2.6.3-2 --- debian/Makefile.am | 7 +- debian/changelog | 15 ++ debian/control | 6 +- debian/nut-client.init | 177 ++++++++++++++++++ debian/nut-client.links | 1 + debian/nut-server.init | 159 +++++++--------- debian/nut-server.links | 1 - ...server.README.Debian => nut.README.Debian} | 11 +- debian/nut.TODO.Debian | 1 - debian/rules | 3 +- 10 files changed, 280 insertions(+), 101 deletions(-) create mode 100755 debian/nut-client.init create mode 100644 debian/nut-client.links delete mode 100644 debian/nut-server.links rename debian/{nut-server.README.Debian => nut.README.Debian} (94%) diff --git a/debian/Makefile.am b/debian/Makefile.am index 031e44b..68fdb08 100644 --- a/debian/Makefile.am +++ b/debian/Makefile.am @@ -2,7 +2,8 @@ EXTRA_DIST = changelog control copyright description.subst hotplug \ nut-cgi.config nut-cgi.docs nut-cgi.examples nut-cgi.postinst nut-cgi.postrm \ nut-cgi.preinst nut-cgi.README.Debian nut-cgi.templates nut.config \ nut.default nut.dirs nut.docs nut.examples nut-hal-drivers.docs \ - nut.init nut.links nut.postinst nut.postrm nut.preinst nut.prerm \ - nut.README.Debian nut.templates nut.TODO.Debian \ - rules watch po/ca.po po/cs.po po/de.po po/fr.po po/POTFILES.in \ + nut-server.init nut-client.init nut-client.links \ + nut.postinst nut.postrm nut.preinst nut.prerm nut.README.Debian \ + nut.templates nut.TODO.Debian rules watch \ + po/ca.po po/cs.po po/de.po po/fr.po po/POTFILES.in \ po/pt.po po/pt_BR.po po/templates.pot po/vi.po diff --git a/debian/changelog b/debian/changelog index d5fe734..052d4c7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,18 @@ +nut (2.6.3-2) unstable; urgency=low + + * debian/nut-server.init: rewrite to match upsd / drivers startup scope + * debian/nut-client.init: created to match upsmon startup scope + (Closes: #634858) + * debian/nut.TODO.Debian, debian/Makefile.am: updated to reflect the above + * debian/rules: install nut-client.init, and update to reflect the above + * debian/control, debian/Makefile.am: updated to reflect the above + * debian/nut-client.links: renamed from debian/nut-server.links, since + ups-monitor is now provided by nut-client initscript + * debian/nut.README.Debian: renamed from nut-server.README.Debian, + to provide it with both client and server packages + + -- Arnaud Quette Tue, 24 Jan 2012 13:14:59 +0100 + nut (2.6.3-1) unstable; urgency=low * New upstream release (Closes: #635186, #598741, #633756, #638221) diff --git a/debian/control b/debian/control index b0e8188..50d49a4 100644 --- a/debian/control +++ b/debian/control @@ -38,8 +38,8 @@ Package: nut-server Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6), ${udev}, nut-client (= ${binary:Version}) Suggests: nut-cgi, nut-snmp, nut-dev, nut-xml -Provides: ups-monitor, nut-usb -Conflicts: ups-monitor, nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) +Provides: nut-usb +Conflicts: nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) Replaces: nut (<< 2.6.1-2~) Breaks: nut (<< 2.6.1-2~) Description: network UPS tools - core system @@ -56,6 +56,8 @@ Description: network UPS tools - core system Package: nut-client Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} +Provides: ups-monitor +Conflicts: ups-monitor, nut-server (<< 2.6.3-1) Recommends: bash-completion Replaces: nut (<< 2.6.1-2~) Breaks: nut (<< 2.6.1-2~) diff --git a/debian/nut-client.init b/debian/nut-client.init new file mode 100755 index 0000000..8aa663f --- /dev/null +++ b/debian/nut-client.init @@ -0,0 +1,177 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: nut-client upsmon ups-monitor +# Required-Start: $local_fs $syslog $network $remote_fs +# Required-Stop: $local_fs $syslog $network $remote_fs +# Should-Start: nut-server +# Should-Stop: nut-server +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Network UPS Tools monitor initscript +# Description: This script take care of starting and stopping the +# Network UPS Tools monitoring component (upsmon). +### END INIT INFO + +# Author: Arnaud Quette + +PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin + +NAME=nut-client +DESC="Network UPS Tools - power device monitor and shutdown controller" +CONFIG=/etc/nut/nut.conf +pid_dir=/var/run/nut +upsmon_pid=${pid_dir}/upsmon.pid +upsmon=/sbin/upsmon +log=">/dev/null 2>/dev/null" + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. +. /lib/lsb/init-functions + +# set upsmon specific options. use "man upsmon" for more info +# this parameter is now located in nut.conf, and not in /etc/default/nut anymore +# FIXME: retrieved from 'nut' script during update +UPSMON_OPTIONS="" + +# Exit if the package is not installed +[ -x "$upsmon" ] || exit 0 + +# Include NUT nut.conf +[ -r $CONFIG ] && . $CONFIG + +# FIXME: put all common bits, between nut-client and nut-server, +# into a common nut-function + +# Explicitly require the configuration to be done in /etc/nut/nut.conf +if [ "x$MODE" = "xnone" -o -z "$MODE" ] ; then + log_action_msg "$NAME disabled, please adjust the configuration to your needs" + log_action_msg "Then set MODE to a suitable value in $CONFIG to enable it" + # exit success to avoid breaking the install process! + exit 0 +fi + +# Check if /var/run/nut exists and has the correct perms +check_var_directory() { + [ ! -d ${pid_dir} ] && mkdir -p ${pid_dir} \ + && chown root:nut ${pid_dir} \ + && chmod 770 ${pid_dir} +} + +# check if the right components are running +check_status() { + case "$MODE" in + standalone|netserver|netclient) + status_of_proc -p $upsmon_pid $upsmon upsmon + ;; + none|*) + ;; + esac +} + +start_stop_client () { + case "$MODE" in + standalone|netserver|netclient) + # FIXME: for standalone|netserver, ensure 'nut-server status' returns ? + case "$1" in + start) + start-stop-daemon -S -q -p $upsmon_pid -x $upsmon \ + -- $UPSMON_OPTIONS >/dev/null 2>&1 && + log_progress_msg "upsmon" || log_progress_msg "(upsmon failed)" + ;; + stop) + start-stop-daemon -K -o -q -p $upsmon_pid -n upsmon >/dev/null 2>&1 && + log_progress_msg "upsmon" || log_progress_msg "(upsmon failed)" + ;; + esac + ;; + none|*) + return 1 + ;; + esac +} + +case "$1" in + + start) + log_daemon_msg "Starting $DESC" + check_var_directory + start_stop_client start #&& log_progress_msg "upsmon" + log_end_msg 0 + ;; + + stop) + log_daemon_msg "Stopping $DESC" + start_stop_client stop && log_progress_msg "upsmon" + log_end_msg 0 + ;; + + reload) + $upsmon -c reload >/dev/null 2>&1 + ;; + + restart|force-reload) + # FIXME: lack consistency, due to initscript split. + # This only addresses partial reload. + # Full reload requires to: + # - stop nut-client + # - restart (Ie stop+start) nut-server + # - start nut-client + log_daemon_msg "Restarting $DESC" + start_stop_client stop + # should then 'start_stop_server stop', Ie /etc/init.d/nut-server stop + #sleep 5 + check_var_directory + # should first 'start_stop_server start', Ie /etc/init.d/nut-server start + start_stop_client start && log_progress_msg "upsmon" + log_end_msg 0 + ;; + + status) + #log_daemon_msg "Checking status of $DESC" + echo "Checking status of $DESC" + check_status + exit $? + ;; + + poweroff) + case "$MODE" in + standalone|netserver) + # Sanity check + flag=`sed -ne 's#^ *POWERDOWNFLAG *\(.*\)$#\1#p' /etc/nut/upsmon.conf` + if [ -z "$flag" ] ; then + log_action_msg "##########################################################" + log_action_msg "## POWERDOWNFLAG is not defined in /etc/nut/upsmon.conf ##" + log_action_msg "## ##" + log_action_msg "## Please read the Manual page upsmon.conf(5) ##" + log_action_msg "##########################################################" + exit 1 + fi + + # Defer to nut-server to actually poweroff the UPS, if needed + if $upsmon -K >/dev/null 2>&1 ; then + log_daemon_msg "UPS poweroff required..." + log_end_msg 0 + if [ -x /etc/init.d/nut-server ] ; then + exec /etc/init.d/nut-server poweroff + else + log_action_msg "Failure: /etc/init.d/nut-server script missing" + fi + else + log_action_msg "Power down flag is not set (UPS poweroff not needed)" + fi + ;; + none|netclient|*) + # nothing to do + log_action_msg "'$MODE' configuration does not require UPS poweroff" + ;; + esac + ;; + + *) + N=/etc/init.d/$NAME + echo "Usage: $N {start|stop|reload|restart|force-reload|status|poweroff}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/debian/nut-client.links b/debian/nut-client.links new file mode 100644 index 0000000..c8d27c5 --- /dev/null +++ b/debian/nut-client.links @@ -0,0 +1 @@ +etc/init.d/nut-client etc/init.d/ups-monitor diff --git a/debian/nut-server.init b/debian/nut-server.init index 158e127..bf924ac 100644 --- a/debian/nut-server.init +++ b/debian/nut-server.init @@ -1,8 +1,8 @@ #! /bin/sh ### BEGIN INIT INFO -# Provides: nut +# Provides: nut-server upsd # Required-Start: $local_fs $syslog $network $remote_fs udev -# Required-Stop: $local_fs $syslog $network $remote_fs udev +# Required-Stop: $local_fs $syslog $network $remote_fs udev nut-client # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Network UPS Tools initscript @@ -15,24 +15,32 @@ PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin -NAME=nut -DESC="Network UPS Tools" +NAME=nut-server +DESC="Network UPS Tools - power devices information server and drivers" CONFIG=/etc/nut/nut.conf +pid_dir=/var/run/nut +upsd_pid=${pid_dir}/upsd.pid +upsd=/sbin/upsd +upsdrvctl=/sbin/upsdrvctl +log=">/dev/null 2>/dev/null" +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # set upsd specific options. use "man upsd" for more info +# this parameter is now located in nut.conf, and not in /etc/default/nut anymore +# FIXME: retrieved from 'nut' script during update UPSD_OPTIONS="" -# set upsmon specific options. use "man upsmon" for more info -UPSMON_OPTIONS="" +# Exit if the package is not installed +[ -x "$upsd" ] || exit 0 # Include NUT nut.conf -if [ -f $CONFIG ] ; then - . $CONFIG -fi +[ -r $CONFIG ] && . $CONFIG # Explicitly require the configuration to be done in /etc/nut/nut.conf +# redundant with nut-client if [ "x$MODE" = "xnone" -o -z "$MODE" ] ; then log_action_msg "$NAME disabled, please adjust the configuration to your needs" log_action_msg "Then set MODE to a suitable value in $CONFIG to enable it" @@ -40,32 +48,23 @@ if [ "x$MODE" = "xnone" -o -z "$MODE" ] ; then exit 0 fi -pid_dir=/var/run/nut -upsmon_pid=${pid_dir}/upsmon.pid -upsd_pid=${pid_dir}/upsd.pid -upsd=/sbin/upsd -upsdrvctl=/sbin/upsdrvctl -upsmon=/sbin/upsmon -log=">/dev/null 2>/dev/null" - # Check if /var/run/nut exists and has the correct perms check_var_directory() { - [ ! -d ${pid_dir} ] && mkdir -p ${pid_dir} \ - && chown root:nut ${pid_dir} \ - && chmod 770 ${pid_dir} + [ ! -d ${pid_dir} ] && mkdir -p ${pid_dir} \ + && chown root:nut ${pid_dir} \ + && chmod 770 ${pid_dir} } # check if the right components are running check_status() { case "$MODE" in standalone|netserver) - status_of_proc -p $upsd_pid $upsd upsd - status_of_proc -p $upsmon_pid $upsmon upsmon + status_of_proc -p $upsd_pid $upsd upsd + # FIXME: need driver(s) status too! ;; - netclient) - status_of_proc -p $upsmon_pid $upsmon upsmon - ;; - none|*) + none|netclient|*) + # defered to nut-client + #status_of_proc -p $upsmon_pid $upsmon upsmon ;; esac } @@ -75,38 +74,25 @@ start_stop_server () { standalone|netserver) case "$1" in start) + # First, start driver(s) ! $upsdrvctl start >/dev/null 2>&1 && \ log_progress_msg "(driver(s) failed)" || log_progress_msg "driver(s)" - start-stop-daemon -S -q -p $upsd_pid -x $upsd \ - -- $UPSD_OPTIONS >/dev/null 2>&1 + # Then, data server (upsd) + start-stop-daemon -S -p $upsd_pid -x $upsd \ + -- $UPSD_OPTIONS >/dev/null 2>&1 && + log_progress_msg "upsd" || log_progress_msg "(upsd failed)" ;; stop) - start-stop-daemon -K -o -q -p $upsd_pid -n upsd >/dev/null 2>&1 + # Reverse order for stop + start-stop-daemon -K -o -p $upsd_pid -n upsd && #>/dev/null 2>&1 && + log_action_msg "upsd" || log_action_msg "(upsd failed)" ! /sbin/upsdrvctl stop >/dev/null 2>&1 && \ - log_progress_msg "(driver(s) failed)" || log_progress_msg "driver(s)" + log_action_msg "(driver(s) failed)" || log_action_msg "driver(s)" ;; esac ;; none|netclient|*) - return 1 - ;; - esac -} - -start_stop_client () { - case "$MODE" in - standalone|netserver|netclient) - case "$1" in - start) - start-stop-daemon -S -q -p $upsmon_pid -x $upsmon \ - -- $UPSMON_OPTIONS >/dev/null 2>&1 - ;; - stop) - start-stop-daemon -K -o -q -p $upsmon_pid -n upsmon >/dev/null 2>&1 - ;; - esac - ;; - none|*) + # now handled by nut-client return 1 ;; esac @@ -117,31 +103,31 @@ case "$1" in start) log_daemon_msg "Starting $DESC" check_var_directory - start_stop_server start && log_progress_msg "upsd" - start_stop_client start && log_progress_msg "upsmon" + start_stop_server start #&& log_progress_msg "upsd" + #start_stop_client start && log_progress_msg "upsmon" log_end_msg 0 ;; stop) log_daemon_msg "Stopping $DESC" - start_stop_server stop && log_progress_msg "upsd" - start_stop_client stop && log_progress_msg "upsmon" + start_stop_server stop #&& log_progress_msg "upsd" + #start_stop_client stop && log_progress_msg "upsmon" log_end_msg 0 ;; reload) $upsd -c reload >/dev/null 2>&1 - $upsmon -c reload >/dev/null 2>&1 + #$upsmon -c reload >/dev/null 2>&1 ;; restart|force-reload) log_daemon_msg "Restarting $DESC" - start_stop_client stop + #start_stop_client stop start_stop_server stop sleep 5 check_var_directory - start_stop_server start && log_progress_msg "upsd" - start_stop_client start && log_progress_msg "upsmon" + start_stop_server start #&& log_progress_msg "upsd" + #start_stop_client start && log_progress_msg "upsmon" log_end_msg 0 ;; @@ -153,44 +139,37 @@ case "$1" in ;; poweroff) - flag=`sed -ne 's#^ *POWERDOWNFLAG *\(.*\)$#\1#p' /etc/nut/upsmon.conf` wait_delay=`sed -ne 's#^ *POWEROFF_WAIT= *\(.*\)$#\1#p' /etc/nut/nut.conf` - if [ -f "$flag" ] ; then - if $upsmon -K >/dev/null 2>&1 ; then - log_daemon_msg "Shutting down the UPS ..." - sleep 1 - if $upsdrvctl shutdown ; then - sleep 5 - log_progress_msg "Waiting for UPS to cut the power" - log_end_msg 0 - else - log_progress_msg "Shutdown failed." - log_progress_msg "Waiting for UPS batteries to run down" - log_end_msg 0 - fi - if [ "$wait_delay" ] ; then - log_daemon_msg " (will reboot after $wait_delay) ..." - sleep "$wait_delay" - invoke-rc.d reboot stop - fi - else - log_daemon_msg "Power down flag is not set (UPS shutdown not needed)" - fi - else - if [ -z "$flag" ] ; then - log_daemon_msg "##########################################################" - log_progress_msg "## POWERDOWNFLAG is not defined in /etc/nut/upsmon.conf ##" - log_progress_msg "## ##" - log_progress_msg "## Please read the Manual page upsmon.conf(5) ##" - log_progress_msg "##########################################################" - log_end_msg 0 - fi - fi + # UPS poweroff action is actually done here. + # But nut-monitor (Ie nut-client) does the check and call nut-server if needed! + # This action MUST NOT be called directly, and thus is not exposed in 'Usage' + case "$MODE" in + standalone|netserver) + log_daemon_msg "Shutting down the UPS ..." + if $upsdrvctl shutdown ; then + # FIXME (needed?): sleep 5 + log_progress_msg "Waiting for UPS to cut the power" + log_end_msg 0 + else + log_progress_msg "Shutdown failed." + log_progress_msg "Waiting for UPS batteries to run down" + log_end_msg 0 + fi + if [ -n "$wait_delay" ] ; then + log_daemon_msg " (will reboot after $wait_delay) ..." + sleep "$wait_delay" + invoke-rc.d reboot stop + fi + ;; + none|netclient|*) + # nothing to do + ;; + esac ;; *) N=/etc/init.d/$NAME - echo "Usage: $N {start|stop|reload|restart|force-reload|status|poweroff}" >&2 + echo "Usage: $N {start|stop|reload|restart|force-reload|status}" >&2 exit 1 ;; esac diff --git a/debian/nut-server.links b/debian/nut-server.links deleted file mode 100644 index a86f46f..0000000 --- a/debian/nut-server.links +++ /dev/null @@ -1 +0,0 @@ -etc/init.d/nut etc/init.d/ups-monitor diff --git a/debian/nut-server.README.Debian b/debian/nut.README.Debian similarity index 94% rename from debian/nut-server.README.Debian rename to debian/nut.README.Debian index ed4446c..882e2af 100644 --- a/debian/nut-server.README.Debian +++ b/debian/nut.README.Debian @@ -126,9 +126,14 @@ MODE. If you are running in "netclient" MODE, jump directly to section 6. nut.conf provides all the needed features to replace this file. (8) start the daemon - Invoke '/etc/init.d/nut start' to start the daemon(s). Check - /var/log/syslog to ensure that upsd, appropriate drivers, and upsmon - started up correctly. + If you use a "standalone" or "netserver" MODE, invoke: + - '/etc/init.d/nut-server start' to start upsd and appropriate driver(s), + - '/etc/init.d/nut-client start' to start upsmon. + + If you are running in "netclient" MODE, invoke: + - '/etc/init.d/nut-client start' to start upsmon. + + Check /var/log/syslog to ensure that daemon(s) started up correctly. Additional Notes for Sharing a UPS diff --git a/debian/nut.TODO.Debian b/debian/nut.TODO.Debian index 4efc003..b8fe9dd 100644 --- a/debian/nut.TODO.Debian +++ b/debian/nut.TODO.Debian @@ -1,4 +1,3 @@ -- split nut-server.init into nut-server.init + nut-client.init (upsmon) - how to distribute the nut-scanner and its library? Ie, a single package, or using the nut-{xml,snmp,...} packages. this requires libusb (0.1), Net SNMP, FreeIPMi, Avahi, libupsclient and Neon! diff --git a/debian/rules b/debian/rules index 9af3f0b..b9eef15 100755 --- a/debian/rules +++ b/debian/rules @@ -76,7 +76,8 @@ common-install-indep:: binary-install/nut-monitor:: dh_python2 -pnut-monitor -DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut -- start 50 2 3 4 5 . stop 50 0 1 6 . +DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut-server -- start 50 2 3 4 5 . stop 50 0 1 6 . +DEB_DH_INSTALLINIT_ARGS_nut-client := --init-script=nut-client -- start 51 2 3 4 5 . stop 51 0 1 6 . DEB_DH_COMPRESS_ARGS_nut-doc := -X.pdf ifeq (linux,$(DEB_HOST_ARCH_OS)) From dafbfe8075feea14935bf0ef9df4bac24bdad225 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Mon, 6 Feb 2012 11:11:05 +0100 Subject: [PATCH 069/291] Fix control file --- debian/changelog | 1 + debian/control | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 052d4c7..9c7a814 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,7 @@ nut (2.6.3-2) unstable; urgency=low * debian/nut.TODO.Debian, debian/Makefile.am: updated to reflect the above * debian/rules: install nut-client.init, and update to reflect the above * debian/control, debian/Makefile.am: updated to reflect the above + * debian/control: add Breaks on nut-server (<< 2.6.3-1~) * debian/nut-client.links: renamed from debian/nut-server.links, since ups-monitor is now provided by nut-client initscript * debian/nut.README.Debian: renamed from nut-server.README.Debian, diff --git a/debian/control b/debian/control index 50d49a4..782effa 100644 --- a/debian/control +++ b/debian/control @@ -60,7 +60,7 @@ Provides: ups-monitor Conflicts: ups-monitor, nut-server (<< 2.6.3-1) Recommends: bash-completion Replaces: nut (<< 2.6.1-2~) -Breaks: nut (<< 2.6.1-2~) +Breaks: nut (<< 2.6.1-2~), nut-server (<< 2.6.3-1~) Description: network UPS tools - clients Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and From 19bb945c6489694f74ec75a317591e2e8486eb11 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Mon, 6 Feb 2012 11:37:46 +0100 Subject: [PATCH 070/291] Fix loop between nut-server and nut-client in stop mode --- debian/nut-client.init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/nut-client.init b/debian/nut-client.init index 8aa663f..22a4b63 100755 --- a/debian/nut-client.init +++ b/debian/nut-client.init @@ -4,7 +4,7 @@ # Required-Start: $local_fs $syslog $network $remote_fs # Required-Stop: $local_fs $syslog $network $remote_fs # Should-Start: nut-server -# Should-Stop: nut-server +# Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Network UPS Tools monitor initscript From f4447a2e78177d70f8c01f2ed508fd6407d82531 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Wed, 2 May 2012 20:31:36 +0200 Subject: [PATCH 071/291] Fix output messages content and format --- debian/nut-client.init | 14 +++++++++----- debian/nut-server.init | 9 +++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/debian/nut-client.init b/debian/nut-client.init index 22a4b63..ade3ffe 100755 --- a/debian/nut-client.init +++ b/debian/nut-client.init @@ -17,7 +17,7 @@ PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin NAME=nut-client -DESC="Network UPS Tools - power device monitor and shutdown controller" +DESC="NUT - power device monitor and shutdown controller" CONFIG=/etc/nut/nut.conf pid_dir=/var/run/nut upsmon_pid=${pid_dir}/upsmon.pid @@ -75,8 +75,7 @@ start_stop_client () { case "$1" in start) start-stop-daemon -S -q -p $upsmon_pid -x $upsmon \ - -- $UPSMON_OPTIONS >/dev/null 2>&1 && - log_progress_msg "upsmon" || log_progress_msg "(upsmon failed)" + -- $UPSMON_OPTIONS >/dev/null 2>&1 && return 0 || return 1 ;; stop) start-stop-daemon -K -o -q -p $upsmon_pid -n upsmon >/dev/null 2>&1 && @@ -95,17 +94,20 @@ case "$1" in start) log_daemon_msg "Starting $DESC" check_var_directory - start_stop_client start #&& log_progress_msg "upsmon" + start_stop_client start && log_progress_msg "upsmon" + || log_progress_msg "upsmon (failed)" log_end_msg 0 ;; stop) log_daemon_msg "Stopping $DESC" start_stop_client stop && log_progress_msg "upsmon" + || log_progress_msg "upsmon (failed)" log_end_msg 0 ;; reload) + log_daemon_msg "Reloading $DESC" $upsmon -c reload >/dev/null 2>&1 ;; @@ -117,12 +119,13 @@ case "$1" in # - restart (Ie stop+start) nut-server # - start nut-client log_daemon_msg "Restarting $DESC" - start_stop_client stop + start_stop_client stop || log_progress_msg "upsmon (failed)" # should then 'start_stop_server stop', Ie /etc/init.d/nut-server stop #sleep 5 check_var_directory # should first 'start_stop_server start', Ie /etc/init.d/nut-server start start_stop_client start && log_progress_msg "upsmon" + || log_progress_msg "upsmon (failed)" log_end_msg 0 ;; @@ -148,6 +151,7 @@ case "$1" in fi # Defer to nut-server to actually poweroff the UPS, if needed + # (the need is tested here though!) if $upsmon -K >/dev/null 2>&1 ; then log_daemon_msg "UPS poweroff required..." log_end_msg 0 diff --git a/debian/nut-server.init b/debian/nut-server.init index bf924ac..5505be4 100644 --- a/debian/nut-server.init +++ b/debian/nut-server.init @@ -16,7 +16,7 @@ PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin NAME=nut-server -DESC="Network UPS Tools - power devices information server and drivers" +DESC="NUT - power devices information server and drivers" CONFIG=/etc/nut/nut.conf pid_dir=/var/run/nut upsd_pid=${pid_dir}/upsd.pid @@ -76,18 +76,19 @@ start_stop_server () { start) # First, start driver(s) ! $upsdrvctl start >/dev/null 2>&1 && \ - log_progress_msg "(driver(s) failed)" || log_progress_msg "driver(s)" + log_progress_msg " (driver(s) failed)." || log_progress_msg " driver(s)." # Then, data server (upsd) start-stop-daemon -S -p $upsd_pid -x $upsd \ -- $UPSD_OPTIONS >/dev/null 2>&1 && log_progress_msg "upsd" || log_progress_msg "(upsd failed)" ;; stop) + # FIXME: should stop nut-client first! # Reverse order for stop start-stop-daemon -K -o -p $upsd_pid -n upsd && #>/dev/null 2>&1 && - log_action_msg "upsd" || log_action_msg "(upsd failed)" + log_progress_msg "upsd" || log_progress_msg "(upsd failed)" ! /sbin/upsdrvctl stop >/dev/null 2>&1 && \ - log_action_msg "(driver(s) failed)" || log_action_msg "driver(s)" + log_progress_msg "(driver(s) failed)" || log_progress_msg "driver(s)" ;; esac ;; From a97c4725339f5f611e1801c859321a13e078e940 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Wed, 2 May 2012 20:53:04 +0200 Subject: [PATCH 072/291] Add missing drivers and manpages --- debian/nut-server.install | 3 +++ debian/nut-server.manpages | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/debian/nut-server.install b/debian/nut-server.install index be2e16c..9486e8a 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -18,6 +18,7 @@ debian/tmp/lib/nut/belkin debian/tmp/lib/nut/blazer_ser debian/tmp/lib/nut/blazer_usb debian/tmp/lib/nut/clone +debian/tmp/lib/nut/clone-outlet debian/tmp/lib/nut/ivtscd debian/tmp/lib/nut/metasys debian/tmp/lib/nut/etapro @@ -47,3 +48,5 @@ debian/tmp/lib/nut/upsdrvctl /sbin debian/tmp/lib/nut/everups debian/tmp/lib/nut/dummy-ups debian/tmp/lib/nut/richcomm_usb +debian/tmp/lib/nut/liebert-esp2 +debian/tmp/lib/nut/microdowell diff --git a/debian/nut-server.manpages b/debian/nut-server.manpages index 7b82e84..f2f6a33 100644 --- a/debian/nut-server.manpages +++ b/debian/nut-server.manpages @@ -2,6 +2,7 @@ debian/tmp/usr/share/man/man5/ups.conf.5 debian/tmp/usr/share/man/man5/upsd.conf.5 debian/tmp/usr/share/man/man5/upsd.users.5 debian/tmp/usr/share/man/man8/apcsmart.8 +debian/tmp/usr/share/man/man8/apcsmart-old.8 debian/tmp/usr/share/man/man8/bcmxcp.8 debian/tmp/usr/share/man/man8/bcmxcp_usb.8 debian/tmp/usr/share/man/man8/belkin.8 @@ -18,11 +19,14 @@ debian/tmp/usr/share/man/man8/everups.8 debian/tmp/usr/share/man/man8/gamatronic.8 debian/tmp/usr/share/man/man8/genericups.8 debian/tmp/usr/share/man/man8/isbmex.8 +debian/tmp/usr/share/man/man8/ivtscd.8 debian/tmp/usr/share/man/man8/liebert.8 +debian/tmp/usr/share/man/man8/liebert-esp2.8 debian/tmp/usr/share/man/man8/masterguard.8 debian/tmp/usr/share/man/man8/metasys.8 debian/tmp/usr/share/man/man8/mge-shut.8 debian/tmp/usr/share/man/man8/mge-utalk.8 +debian/tmp/usr/share/man/man8/microdowell.8 debian/tmp/usr/share/man/man8/nutupsdrv.8 debian/tmp/usr/share/man/man8/oneac.8 debian/tmp/usr/share/man/man8/optiups.8 From 8b4a877ae9963038c1bb7b361317a04bde5507b7 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Wed, 2 May 2012 22:29:43 +0200 Subject: [PATCH 073/291] Bump Standards-Version to 3.9.3 --- debian/changelog | 8 +++++++- debian/control | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9c7a814..c4d4f6b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,11 +6,17 @@ nut (2.6.3-2) unstable; urgency=low * debian/nut.TODO.Debian, debian/Makefile.am: updated to reflect the above * debian/rules: install nut-client.init, and update to reflect the above * debian/control, debian/Makefile.am: updated to reflect the above - * debian/control: add Breaks on nut-server (<< 2.6.3-1~) + * debian/control: + - add Breaks on nut-server (<< 2.6.3-1~) + - bump Standards-Version to 3.9.3 * debian/nut-client.links: renamed from debian/nut-server.links, since ups-monitor is now provided by nut-client initscript * debian/nut.README.Debian: renamed from nut-server.README.Debian, to provide it with both client and server packages + * debian/nut-server.install: add missing drivers (clone-outlet, + liebert-esp2 and microdowell) + * debian/nut-server.manpages: add missing manual pages (apcsmart-old, + ivtscd, liebert-esp2 and microdowell) -- Arnaud Quette Tue, 24 Jan 2012 13:14:59 +0100 diff --git a/debian/control b/debian/control index 782effa..dbf99d7 100644 --- a/debian/control +++ b/debian/control @@ -16,7 +16,7 @@ Build-Depends-Indep: asciidoc (>= 8.6.3), docbook-xsl, dblatex (>= 0.2.5), libxml2-utils -Standards-Version: 3.9.2 +Standards-Version: 3.9.3 Homepage: http://www.networkupstools.org/ Vcs-Browser: http://git.debian.org/?p=collab-maint/nut.git;a=summary Vcs-Git: git://git.debian.org/git/collab-maint/nut.git From 848fe6dc7451760dd2fa195c9b9992b4c9311cab Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Mon, 4 Jun 2012 11:35:54 +0200 Subject: [PATCH 074/291] Start packaging 2.6.4-1, closing #671444 + NMU #613643 --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index c4d4f6b..ed29e52 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +nut (2.6.4-1) UNRELEASED; urgency=low + + * New upstream release (Closes: #671444) + * acknowledges NMU (Closes: #613643) + + -- Arnaud Quette Fri, 01 Jun 2012 16:15:20 +0200 + nut (2.6.3-2) unstable; urgency=low * debian/nut-server.init: rewrite to match upsd / drivers startup scope From 112d9a7c99cfe815b0e281b10d471550e0b21acb Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Mon, 4 Jun 2012 11:38:04 +0200 Subject: [PATCH 075/291] Fix nut-client init script (Closes: #675619) Fix action "start" and use of log_*_*msg LSB log functions. Patch from Laurent Bigonville (Closes: #675619) --- debian/changelog | 2 ++ debian/nut-client.init | 30 ++++++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/debian/changelog b/debian/changelog index ed29e52..3a66c0f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,8 @@ nut (2.6.4-1) UNRELEASED; urgency=low * New upstream release (Closes: #671444) * acknowledges NMU (Closes: #613643) + * debian/nut-client.init: fix action "start" and use of log_*_*msg + LSB log functions (Closes: #675619) -- Arnaud Quette Fri, 01 Jun 2012 16:15:20 +0200 diff --git a/debian/nut-client.init b/debian/nut-client.init index ade3ffe..8524dd2 100755 --- a/debian/nut-client.init +++ b/debian/nut-client.init @@ -78,8 +78,8 @@ start_stop_client () { -- $UPSMON_OPTIONS >/dev/null 2>&1 && return 0 || return 1 ;; stop) - start-stop-daemon -K -o -q -p $upsmon_pid -n upsmon >/dev/null 2>&1 && - log_progress_msg "upsmon" || log_progress_msg "(upsmon failed)" + start-stop-daemon -K -o -q -p $upsmon_pid -n upsmon >/dev/null 2>&1 \ + && return 0 || return 1 ;; esac ;; @@ -92,23 +92,22 @@ start_stop_client () { case "$1" in start) - log_daemon_msg "Starting $DESC" + log_daemon_msg "Starting $DESC" "$NAME" check_var_directory - start_stop_client start && log_progress_msg "upsmon" - || log_progress_msg "upsmon (failed)" - log_end_msg 0 + start_stop_client start + log_end_msg $? ;; stop) - log_daemon_msg "Stopping $DESC" - start_stop_client stop && log_progress_msg "upsmon" - || log_progress_msg "upsmon (failed)" - log_end_msg 0 + log_daemon_msg "Stopping $DESC" "$NAME" + start_stop_client stop + log_end_msg $? ;; reload) - log_daemon_msg "Reloading $DESC" + log_daemon_msg "Reloading $DESC" "$NAME" $upsmon -c reload >/dev/null 2>&1 + log_end_msg $? ;; restart|force-reload) @@ -118,15 +117,14 @@ case "$1" in # - stop nut-client # - restart (Ie stop+start) nut-server # - start nut-client - log_daemon_msg "Restarting $DESC" - start_stop_client stop || log_progress_msg "upsmon (failed)" + log_daemon_msg "Restarting $DESC" "$NAME" + start_stop_client stop || true # should then 'start_stop_server stop', Ie /etc/init.d/nut-server stop #sleep 5 check_var_directory # should first 'start_stop_server start', Ie /etc/init.d/nut-server start - start_stop_client start && log_progress_msg "upsmon" - || log_progress_msg "upsmon (failed)" - log_end_msg 0 + start_stop_client start + log_end_msg $? ;; status) From 39a7ae33fbf64919c6703e213d0e415fa3e947d2 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Wed, 6 Jun 2012 21:06:03 +0200 Subject: [PATCH 076/291] Fix bug #660072 (obsolete udev rules left in /etc) --- debian/changelog | 8 ++++++-- debian/nut-server.preinst | 17 ++++------------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/debian/changelog b/debian/changelog index 3a66c0f..a66b5f5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,15 @@ -nut (2.6.4-1) UNRELEASED; urgency=low +nut (2.6.4-1) unstable; urgency=high * New upstream release (Closes: #671444) * acknowledges NMU (Closes: #613643) * debian/nut-client.init: fix action "start" and use of log_*_*msg LSB log functions (Closes: #675619) + * debian/nut-server.preinst: remove obsolete file(s) left in + /etc/udev/rules.d and related processing: udev files are now located + in /lib/udev/rules, and there is no reason to modify the dedicated + USB UPS rules (52-nut-usbups.rules) (Closes: #660072) - -- Arnaud Quette Fri, 01 Jun 2012 16:15:20 +0200 + -- Arnaud Quette Wed, 06 Jun 2012 21:03:50 +0200 nut (2.6.3-2) unstable; urgency=low diff --git a/debian/nut-server.preinst b/debian/nut-server.preinst index 9999abe..587c150 100644 --- a/debian/nut-server.preinst +++ b/debian/nut-server.preinst @@ -1,19 +1,10 @@ #!/bin/sh -e if [ "$1" = upgrade ]; then - # remove the obsolete udev file - [ -f /etc/udev/rules.d/025_nut-usbups.rules ] && rm -f /etc/udev/rules.d/025_nut-usbups.rules - - # Remove previous rules if unchanged, otherwise move to new filename. - if [ -e "/etc/udev/rules.d/52_nut-usbups.rules" ]; then - if [ "`md5sum \"/etc/udev/rules.d/52_nut-usbups.rules\" | sed -e \"s/ .*//\"`" = \ - "`dpkg-query -W -f='${Conffiles}' nut | sed -n -e \"\\\\' /etc/udev/rules.d/52_nut-usbups.rules's/.* //p\"`" ] - then - rm -f "/etc/udev/rules.d/52_nut-usbups.rules" - else - mv "/etc/udev/rules.d/52_nut-usbups.rules" "/etc/udev/rules.d/52-nut-usbups.rules" - fi - fi + # remove the obsolete udev file(s) + [ -f /etc/udev/rules.d/025_nut-usbups.rules ] && rm -f /etc/udev/rules.d/025_nut-usbups.rules + [ -f /etc/udev/rules.d/52_nut-usbups.rules ] && rm -f /etc/udev/rules.d/52_nut-usbups.rules + [ -f /etc/udev/rules.d/52-nut-usbups.rules ] && rm -f /etc/udev/rules.d/52-nut-usbups.rules # migrate /etc/default/nut to /etc/nut/nut.conf (part #1) # we need to do this before default gets trashed From ca0de194e261ace3dd882c8dbc5b9e62a8ede86a Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Fri, 8 Jun 2012 23:27:10 +0200 Subject: [PATCH 077/291] Create IPMI support package --- debian/changelog | 7 +++++++ debian/control | 22 ++++++++++++++++++++-- debian/nut-ipmi.install | 1 + debian/nut-ipmi.manpages | 1 + 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 debian/nut-ipmi.install create mode 100644 debian/nut-ipmi.manpages diff --git a/debian/changelog b/debian/changelog index a66b5f5..1c7fd72 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +nut (2.6.4-2) unstable; urgency=low + + * debian/control, debian/nut-ipmi.{install,manpages}: create IPMI + support package + + -- Arnaud Quette Fri, 08 Jun 2012 23:23:03 +0200 + nut (2.6.4-1) unstable; urgency=high * New upstream release (Closes: #671444) diff --git a/debian/control b/debian/control index dbf99d7..9b55e05 100644 --- a/debian/control +++ b/debian/control @@ -11,7 +11,9 @@ Build-Depends: debhelper (>= 8), libneon27-gnutls-dev | libneon27-dev, libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6), - python (>= 2.6.6-3~) + python (>= 2.6.6-3~), + libfreeipmi-dev (>= 0.8.5), + libipmimonitoring-dev (>= 0.8.5) Build-Depends-Indep: asciidoc (>= 8.6.3), docbook-xsl, dblatex (>= 0.2.5), @@ -37,7 +39,7 @@ Description: network UPS tools - metapackage Package: nut-server Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6), ${udev}, nut-client (= ${binary:Version}) -Suggests: nut-cgi, nut-snmp, nut-dev, nut-xml +Suggests: nut-cgi, nut-snmp, nut-ipmi, nut-xml, nut-dev Provides: nut-usb Conflicts: nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) Replaces: nut (<< 2.6.1-2~) @@ -102,6 +104,22 @@ Description: network UPS tools - SNMP driver supports various MIBs including IETF, MGE, and APC. It adds an SNMP Manager interface to the core NUT system. +Package: nut-impi +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 1.4.1-pre1) +Conflicts: nut (<= 1.4.0) +Description: network UPS tools - IPMI driver + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package currently provides nut-ipmipsu, a driver which allows + to monitor IPMI power supply units (PSU) found in servers of + popular brands, such as Dell, HP, IBM. It adds an IPMI interface + to the core NUT system. + Package: nut-xml Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 2.2.2) diff --git a/debian/nut-ipmi.install b/debian/nut-ipmi.install new file mode 100644 index 0000000..4823952 --- /dev/null +++ b/debian/nut-ipmi.install @@ -0,0 +1 @@ +debian/tmp/lib/nut/nut-ipmipsu diff --git a/debian/nut-ipmi.manpages b/debian/nut-ipmi.manpages new file mode 100644 index 0000000..5da576f --- /dev/null +++ b/debian/nut-ipmi.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man8/nut-ipmipsu.8 From 82fda8eb40da49eb299756f9f1ac993a6a1e9202 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Mon, 11 Jun 2012 20:27:04 +0200 Subject: [PATCH 078/291] Split udev rules files between nut-server and nut-ipmi --- debian/changelog | 1 + debian/control | 2 +- debian/nut-ipmi.install | 1 + debian/nut-server.install | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 1c7fd72..a7d2a88 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ nut (2.6.4-2) unstable; urgency=low * debian/control, debian/nut-ipmi.{install,manpages}: create IPMI support package + * debian/nut-server.install: only install USB udev rules -- Arnaud Quette Fri, 08 Jun 2012 23:23:03 +0200 diff --git a/debian/control b/debian/control index 9b55e05..ef2b59a 100644 --- a/debian/control +++ b/debian/control @@ -13,7 +13,7 @@ Build-Depends: debhelper (>= 8), libwrap0-dev (>= 7.6), python (>= 2.6.6-3~), libfreeipmi-dev (>= 0.8.5), - libipmimonitoring-dev (>= 0.8.5) + libipmimonitoring-dev (>= 1.1.5-2) Build-Depends-Indep: asciidoc (>= 8.6.3), docbook-xsl, dblatex (>= 0.2.5), diff --git a/debian/nut-ipmi.install b/debian/nut-ipmi.install index 4823952..2d9854d 100644 --- a/debian/nut-ipmi.install +++ b/debian/nut-ipmi.install @@ -1 +1,2 @@ debian/tmp/lib/nut/nut-ipmipsu +debian/tmp/*/udev/rules.d/52-nut-ipmipsu.rules diff --git a/debian/nut-server.install b/debian/nut-server.install index 9486e8a..1c22483 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -1,7 +1,7 @@ debian/tmp/sbin/upsd debian/tmp/usr/share/nut/cmdvartab debian/tmp/usr/share/nut/driver.list -debian/tmp/*/udev/ +debian/tmp/*/udev/rules.d/52-nut-usbups.rules debian/tmp/etc/avahi/services/nut.service debian/tmp/etc/nut/ups.conf debian/tmp/etc/nut/upsd.conf From 357d77d1f2552d514865128bf4d3ed6d3f817559 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Tue, 12 Jun 2012 14:34:34 +0200 Subject: [PATCH 079/291] Fix typo error on nut-ipmi package name --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index ef2b59a..0c7eebe 100644 --- a/debian/control +++ b/debian/control @@ -104,7 +104,7 @@ Description: network UPS tools - SNMP driver supports various MIBs including IETF, MGE, and APC. It adds an SNMP Manager interface to the core NUT system. -Package: nut-impi +Package: nut-ipmi Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 1.4.1-pre1) Conflicts: nut (<= 1.4.0) From f50e2690169d0ec9af2563ed48813dc517911b48 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 9 Aug 2012 10:36:09 +0200 Subject: [PATCH 080/291] debian/rules: Stop the nut-client before nut-server on systems using static boot ordering (Closes: #679451) --- debian/changelog | 7 +++++++ debian/rules | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index a7d2a88..08b58c2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +nut (2.6.4-3) UNRELEASED; urgency=low + + * debian/rules: Stop the nut-client before nut-server on systems using static + boot ordering (Closes: #679451) + + -- Laurent Bigonville Thu, 09 Aug 2012 10:31:05 +0200 + nut (2.6.4-2) unstable; urgency=low * debian/control, debian/nut-ipmi.{install,manpages}: create IPMI diff --git a/debian/rules b/debian/rules index b9eef15..b0745bb 100755 --- a/debian/rules +++ b/debian/rules @@ -76,8 +76,8 @@ common-install-indep:: binary-install/nut-monitor:: dh_python2 -pnut-monitor -DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut-server -- start 50 2 3 4 5 . stop 50 0 1 6 . -DEB_DH_INSTALLINIT_ARGS_nut-client := --init-script=nut-client -- start 51 2 3 4 5 . stop 51 0 1 6 . +DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut-server -- start 50 2 3 4 5 . stop 51 0 1 6 . +DEB_DH_INSTALLINIT_ARGS_nut-client := --init-script=nut-client -- start 51 2 3 4 5 . stop 50 0 1 6 . DEB_DH_COMPRESS_ARGS_nut-doc := -X.pdf ifeq (linux,$(DEB_HOST_ARCH_OS)) From 51c7f9422f070dc2bb8b109caf81e296e694ebc2 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 9 Aug 2012 11:05:51 +0200 Subject: [PATCH 081/291] debian/nut-server.maintscript: Remove /etc/init.d/nut on upgrade (Closes: #677822) --- debian/changelog | 4 +++- debian/control | 3 ++- debian/nut-server.maintscript | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 debian/nut-server.maintscript diff --git a/debian/changelog b/debian/changelog index 08b58c2..2f50b3f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,8 +2,10 @@ nut (2.6.4-3) UNRELEASED; urgency=low * debian/rules: Stop the nut-client before nut-server on systems using static boot ordering (Closes: #679451) + * debian/nut-server.maintscript: Remove /etc/init.d/nut on upgrade + (Closes: #677822) - -- Laurent Bigonville Thu, 09 Aug 2012 10:31:05 +0200 + -- Laurent Bigonville Thu, 09 Aug 2012 11:04:51 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/control b/debian/control index 0c7eebe..e9ff6a4 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: admin Priority: optional Maintainer: Arnaud Quette Uploaders: Laurent Bigonville -Build-Depends: debhelper (>= 8), +Build-Depends: debhelper (>= 8.1.0~), cdbs (>= 0.4.90~), libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, @@ -44,6 +44,7 @@ Provides: nut-usb Conflicts: nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) Replaces: nut (<< 2.6.1-2~) Breaks: nut (<< 2.6.1-2~) +Pre-Depends: ${misc:Pre-Depends} Description: network UPS tools - core system Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and diff --git a/debian/nut-server.maintscript b/debian/nut-server.maintscript new file mode 100644 index 0000000..1d202d4 --- /dev/null +++ b/debian/nut-server.maintscript @@ -0,0 +1,3 @@ +#Removing obsolete init script. +#The file is gone in 2.6.3-2 but was not removed on upgrades. +rm_conffile /etc/init.d/nut 2.6.4-3~ From a9f5fa9b6f1ac755593bce9f818a43664c5926f5 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 9 Aug 2012 11:20:54 +0200 Subject: [PATCH 082/291] Rename nut-server.lintian-overrides to nut-client.lintian-overrides and adjust overrides now that ups-monitor is shipped in nut-client package (Closes: #677947) --- debian/changelog | 5 ++++- debian/nut-client.lintian-overrides | 1 + debian/nut-server.lintian-overrides | 2 -- 3 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 debian/nut-client.lintian-overrides delete mode 100644 debian/nut-server.lintian-overrides diff --git a/debian/changelog b/debian/changelog index 2f50b3f..3d891a2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,8 +4,11 @@ nut (2.6.4-3) UNRELEASED; urgency=low boot ordering (Closes: #679451) * debian/nut-server.maintscript: Remove /etc/init.d/nut on upgrade (Closes: #677822) + * Rename nut-server.lintian-overrides to nut-client.lintian-overrides and + adjust overrides now that ups-monitor is shipped in nut-client package + (Closes: #677947) - -- Laurent Bigonville Thu, 09 Aug 2012 11:04:51 +0200 + -- Laurent Bigonville Thu, 09 Aug 2012 11:20:06 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/nut-client.lintian-overrides b/debian/nut-client.lintian-overrides new file mode 100644 index 0000000..4651289 --- /dev/null +++ b/debian/nut-client.lintian-overrides @@ -0,0 +1 @@ +nut-client: script-in-etc-init.d-not-registered-via-update-rc.d diff --git a/debian/nut-server.lintian-overrides b/debian/nut-server.lintian-overrides deleted file mode 100644 index 9618794..0000000 --- a/debian/nut-server.lintian-overrides +++ /dev/null @@ -1,2 +0,0 @@ -nut-server: script-in-etc-init.d-not-registered-via-update-rc.d -nut-server: init.d-script-does-not-provide-itself etc/init.d/ups-monitor From dbeaea56b06b396f5d9ca9fea36f26672d40f6f1 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 9 Aug 2012 11:39:46 +0200 Subject: [PATCH 083/291] Add debian/patches/0001-fix-upsmon-regression.patch: Fix upsmon/upssched regression (Taken from upstream) (Closes: #679513) --- debian/changelog | 4 +++- debian/patches/0001-fix-upsmon-regression.patch | 15 +++++++++++++++ debian/patches/series | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 debian/patches/0001-fix-upsmon-regression.patch diff --git a/debian/changelog b/debian/changelog index 3d891a2..c52ef13 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,8 +7,10 @@ nut (2.6.4-3) UNRELEASED; urgency=low * Rename nut-server.lintian-overrides to nut-client.lintian-overrides and adjust overrides now that ups-monitor is shipped in nut-client package (Closes: #677947) + * Add debian/patches/0001-fix-upsmon-regression.patch: Fix upsmon/upssched + regression (Taken from upstream) (Closes: #679513) - -- Laurent Bigonville Thu, 09 Aug 2012 11:20:06 +0200 + -- Laurent Bigonville Thu, 09 Aug 2012 11:36:41 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/patches/0001-fix-upsmon-regression.patch b/debian/patches/0001-fix-upsmon-regression.patch new file mode 100644 index 0000000..aa8c13e --- /dev/null +++ b/debian/patches/0001-fix-upsmon-regression.patch @@ -0,0 +1,15 @@ +Description: Fix upsmon/upssched regression +Origin: upstream, http://trac.networkupstools.org/projects/nut/changeset/3670 +Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679513 + +Index: /trunk/clients/upssched.c +=================================================================== +--- a/clients/upssched.c (revision 3555) ++++ b/clients/upssched.c (revision 3670) +@@ -695,5 +695,5 @@ + pconf_encode(arg2, enc, sizeof(enc))); + +- snprintfcat(enc, sizeof(enc), "%s\n", buf); ++ snprintf(enc, sizeof(enc), "%s\n", buf); + + /* see if the parent needs to be started (and maybe start it) */ diff --git a/debian/patches/series b/debian/patches/series index 2024d93..f80396c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ +0001-fix-upsmon-regression.patch 0002-nut-monitor-paths.patch From 1cd02baa2d0423925be31e54b3dfd398ae7ba730 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 9 Aug 2012 11:50:35 +0200 Subject: [PATCH 084/291] Move nut metapackage to Section: metapackages --- debian/changelog | 3 ++- debian/control | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index c52ef13..2a9b7f1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,8 +9,9 @@ nut (2.6.4-3) UNRELEASED; urgency=low (Closes: #677947) * Add debian/patches/0001-fix-upsmon-regression.patch: Fix upsmon/upssched regression (Taken from upstream) (Closes: #679513) + * Move nut metapackage to Section: metapackages - -- Laurent Bigonville Thu, 09 Aug 2012 11:36:41 +0200 + -- Laurent Bigonville Thu, 09 Aug 2012 11:50:08 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/control b/debian/control index e9ff6a4..b99fe5a 100644 --- a/debian/control +++ b/debian/control @@ -26,6 +26,7 @@ X-Python-Version: >= 2.5 Package: nut Architecture: all +Section: metapackages Depends: ${misc:Depends}, nut-server, nut-client Description: network UPS tools - metapackage Network UPS Tools (NUT) is a client/server monitoring system that From a6634bc58eb5f436a9a81532e4231230df43ee50 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 9 Aug 2012 21:21:03 +0200 Subject: [PATCH 085/291] Also create nut user when installing nut-client package and do not delete it on purge anymore (Closes: #682000) --- debian/changelog | 4 ++- debian/nut-client.postinst | 60 ++++++++++++++++++++++++++++++++++++++ debian/nut-server.postinst | 2 +- debian/nut-server.postrm | 6 ---- 4 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 debian/nut-client.postinst diff --git a/debian/changelog b/debian/changelog index 2a9b7f1..b6331fb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,8 +10,10 @@ nut (2.6.4-3) UNRELEASED; urgency=low * Add debian/patches/0001-fix-upsmon-regression.patch: Fix upsmon/upssched regression (Taken from upstream) (Closes: #679513) * Move nut metapackage to Section: metapackages + * Also create nut user when installing nut-client package and do not delete + it on purge anymore (Closes: #682000) - -- Laurent Bigonville Thu, 09 Aug 2012 11:50:08 +0200 + -- Laurent Bigonville Thu, 09 Aug 2012 21:18:03 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/nut-client.postinst b/debian/nut-client.postinst new file mode 100644 index 0000000..fbcf657 --- /dev/null +++ b/debian/nut-client.postinst @@ -0,0 +1,60 @@ +#!/bin/sh -e + +case "$1" in + + configure) + + # make sure the nut user exists and has correct memberships + if ! getent group nut >/dev/null; then + addgroup --quiet --system nut + fi + if ! getent passwd nut >/dev/null; then + adduser --quiet --system --ingroup nut --home /var/lib/nut --no-create-home nut + elif ! groups nut | grep -qw nut; then + adduser nut nut + fi +# for Ubuntu, while waiting for a proper debconf +# if ! groups nut | grep -qw dialout; then +# adduser nut dialout +# fi + + # make sure that conffiles are secured and have the correct ownerships + if [ -d /etc/nut/ ] ; then + chown root:nut /etc/nut/ + fi + for file in nut.conf upsmon.conf upssched.conf ; do + if [ -f /etc/nut/$file ] ; then + chown root:nut /etc/nut/$file + chmod 640 /etc/nut/$file + fi + done + + # make sure that /var/run/nut exists and has the correct ownerships + if [ ! -d /var/run/nut ] ; then + mkdir -p /var/run/nut + fi + if [ -d /var/run/nut ] ; then + chown root:nut /var/run/nut + chmod 770 /var/run/nut + fi + + abort-upgrade) + # do nothing + ;; + + abort-remove) + # do nothing + ;; + + abort-deconfigure) + # do nothing + ;; + + *) + echo "$0: incorrect arguments: $*" >&2 + exit 1 + ;; + +esac + +#DEBHELPER# diff --git a/debian/nut-server.postinst b/debian/nut-server.postinst index a91caab..193676f 100644 --- a/debian/nut-server.postinst +++ b/debian/nut-server.postinst @@ -22,7 +22,7 @@ case "$1" in if [ -d /etc/nut/ ] ; then chown root:nut /etc/nut/ fi - for file in nut.conf ups.conf upsd.conf upsmon.conf upsd.users upssched.conf ; do + for file in ups.conf upsd.conf upsd.users ; do if [ -f /etc/nut/$file ] ; then chown root:nut /etc/nut/$file chmod 640 /etc/nut/$file diff --git a/debian/nut-server.postrm b/debian/nut-server.postrm index 38b8d52..1ca0437 100644 --- a/debian/nut-server.postrm +++ b/debian/nut-server.postrm @@ -14,12 +14,6 @@ case "$1" in rm -f /etc/udev/rules.d/025_nut-usbups.rules rm -f /etc/udev/rules.d/52_nut-usbups.rules rm -f /etc/udev/rules.d/52-nut-usbups.rules - # remove the nut user - if [ -x "$(command -v deluser)" ]; then - deluser --quiet --system nut > /dev/null || true - else - echo >&2 "not removing nut system account because deluser command was not found" - fi # handle a dpkg bug [ -d /etc/nut ] && rmdir --ignore-fail-on-non-empty /etc/nut >/dev/null 2>&1 ;; From 0429bb5294efa09086bf10b2984b9cf3708b990c Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 9 Aug 2012 21:40:24 +0200 Subject: [PATCH 086/291] =?UTF-8?q?Drop=20/etc/default/nut=20=E2=86=92=20/?= =?UTF-8?q?etc/nut/nut.conf=20migration=20code,=20migration=20happends=20b?= =?UTF-8?q?efore=20squeeze=20release=20(Closes:=20#684392)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- debian/changelog | 4 ++- debian/nut-server.postinst | 63 -------------------------------------- debian/nut-server.preinst | 7 ----- 3 files changed, 3 insertions(+), 71 deletions(-) diff --git a/debian/changelog b/debian/changelog index b6331fb..75093d1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,8 +12,10 @@ nut (2.6.4-3) UNRELEASED; urgency=low * Move nut metapackage to Section: metapackages * Also create nut user when installing nut-client package and do not delete it on purge anymore (Closes: #682000) + * Drop /etc/default/nut → /etc/nut/nut.conf migration code, migration + happends before squeeze release (Closes: #684392) - -- Laurent Bigonville Thu, 09 Aug 2012 21:18:03 +0200 + -- Laurent Bigonville Thu, 09 Aug 2012 21:32:09 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/nut-server.postinst b/debian/nut-server.postinst index 193676f..c2574b8 100644 --- a/debian/nut-server.postinst +++ b/debian/nut-server.postinst @@ -49,69 +49,6 @@ case "$1" in && udevadm trigger --subsystem-match=usb --action=change # 557178 udevadm trigger --subsystem-match=usb - - # migrate /etc/default/nut to /etc/nut/nut.conf (part #2) - if dpkg --compare-versions "$2" lt-nl "2.4.1-2" ; then - # source the temporary /etc/default/nut.bak file - if [ -f /etc/default/nut.bak ] ; then - . /etc/default/nut.bak - - # FIXME: use a template (and debconf to output?) - echo "migrating /etc/default/nut to /etc/nut/nut.conf" - - # pre process the config - case "$START_UPSD" in - y|Y|yes|YES|Yes) - START_UPSD=yes - ;; - *) - START_UPSD=no - ;; - esac - case "$START_UPSMON" in - y|Y|yes|YES|Yes) - START_UPSMON=yes - ;; - *) - START_UPSMON=no - ;; - esac - - # now process the result - if [ "x$START_UPSD" = "xyes" ] ; then - if [ "x$START_UPSMON" = "xyes" ] ; then - # can also be netserver - NUT_MODE=standalone - #else not processed since it should be an error! - fi - else - if [ "x$START_UPSMON" = "xyes" ] ; then - NUT_MODE=netclient - else - NUT_MODE=none - fi - fi - - # output back the MODE to nut.conf - sed "s/^MODE\(.*\)/MODE=$NUT_MODE/" /etc/nut/nut.conf > /etc/nut/nut.conf.new - - # append the content of default, removing START_* / start... - grep -iv 'START' /etc/default/nut.bak >> /etc/nut/nut.conf.new - # move back to nut.conf - mv /etc/nut/nut.conf.new /etc/nut/nut.conf - # and to init.d/nut - #if [ -f /etc/init.d/nut ] ; then - # sed "s/^UPSD_OPTIONS\(.*\)/UPSD_OPTIONS=\"$UPSD_OPTIONS\"/" /etc/init.d/nut > /etc/init.d/nut.new - # sed "s/^UPSMON_OPTIONS\(.*\)/UPSMON_OPTIONS=\"$UPSMON_OPTIONS\"/" /etc/init.d/nut.new > /etc/init.d/nut - #fi - rm -f /etc/default/nut.bak /etc/default/nut - fi - else - # re process nut.conf MODE so that it can be sourced - NUT_MODE=`grep -e '^ *MODE' /etc/nut/nut.conf | tr -d " "` - sed "s/^ *MODE.*/$NUT_MODE/" /etc/nut/nut.conf > /etc/nut/nut.conf.new - mv /etc/nut/nut.conf.new /etc/nut/nut.conf - fi ;; abort-upgrade) diff --git a/debian/nut-server.preinst b/debian/nut-server.preinst index 587c150..72370d5 100644 --- a/debian/nut-server.preinst +++ b/debian/nut-server.preinst @@ -5,13 +5,6 @@ if [ "$1" = upgrade ]; then [ -f /etc/udev/rules.d/025_nut-usbups.rules ] && rm -f /etc/udev/rules.d/025_nut-usbups.rules [ -f /etc/udev/rules.d/52_nut-usbups.rules ] && rm -f /etc/udev/rules.d/52_nut-usbups.rules [ -f /etc/udev/rules.d/52-nut-usbups.rules ] && rm -f /etc/udev/rules.d/52-nut-usbups.rules - - # migrate /etc/default/nut to /etc/nut/nut.conf (part #1) - # we need to do this before default gets trashed - if [ -f /etc/default/nut ] ; then - # backup /etc/default/nut - cp /etc/default/nut /etc/default/nut.bak - fi fi #DEBHELPER# From 04703f7239bae389cd5138801914af98c9050852 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 10 Aug 2012 21:06:18 +0200 Subject: [PATCH 087/291] Fix changelog entry --- debian/changelog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 75093d1..99ad325 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,7 +13,8 @@ nut (2.6.4-3) UNRELEASED; urgency=low * Also create nut user when installing nut-client package and do not delete it on purge anymore (Closes: #682000) * Drop /etc/default/nut → /etc/nut/nut.conf migration code, migration - happends before squeeze release (Closes: #684392) + happends before squeeze release and this was against policy to have a + maintainer script modifying a conffile in the first place (Closes: #684392) -- Laurent Bigonville Thu, 09 Aug 2012 21:32:09 +0200 From 5d4e219ae8386040ad2c8b0c67af3bd0b57e1c88 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 11 Aug 2012 17:07:22 +0200 Subject: [PATCH 088/291] Add dependency against adduser and lsb-base on nut-client package --- debian/changelog | 3 ++- debian/control | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 99ad325..54fc67e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -15,8 +15,9 @@ nut (2.6.4-3) UNRELEASED; urgency=low * Drop /etc/default/nut → /etc/nut/nut.conf migration code, migration happends before squeeze release and this was against policy to have a maintainer script modifying a conffile in the first place (Closes: #684392) + * Add dependency against adduser and lsb-base on nut-client package - -- Laurent Bigonville Thu, 09 Aug 2012 21:32:09 +0200 + -- Laurent Bigonville Sat, 11 Aug 2012 17:06:27 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/control b/debian/control index b99fe5a..cd6b27e 100644 --- a/debian/control +++ b/debian/control @@ -59,7 +59,7 @@ Description: network UPS tools - core system Package: nut-client Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6) Provides: ups-monitor Conflicts: ups-monitor, nut-server (<< 2.6.3-1) Recommends: bash-completion From 6c856783433e9dfb4880f05521f61ab4c93b0714 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 11 Aug 2012 17:15:13 +0200 Subject: [PATCH 089/291] Fix typo in debian/nut-client.postinst --- debian/nut-client.postinst | 1 + 1 file changed, 1 insertion(+) diff --git a/debian/nut-client.postinst b/debian/nut-client.postinst index fbcf657..9d5cad3 100644 --- a/debian/nut-client.postinst +++ b/debian/nut-client.postinst @@ -37,6 +37,7 @@ case "$1" in chown root:nut /var/run/nut chmod 770 /var/run/nut fi + ;; abort-upgrade) # do nothing From a7e6c2affcca412e5f9d8fb02725ec41866109a3 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 11 Aug 2012 17:21:01 +0200 Subject: [PATCH 090/291] Do not use dpkg-maintscript-helper to remove /etc/init.d/nut --- debian/changelog | 2 +- debian/control | 3 +-- debian/nut-server.maintscript | 3 --- debian/nut-server.postinst | 5 +++++ 4 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 debian/nut-server.maintscript diff --git a/debian/changelog b/debian/changelog index 54fc67e..9642eba 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,7 +2,7 @@ nut (2.6.4-3) UNRELEASED; urgency=low * debian/rules: Stop the nut-client before nut-server on systems using static boot ordering (Closes: #679451) - * debian/nut-server.maintscript: Remove /etc/init.d/nut on upgrade + * debian/nut-server.postinst: Remove /etc/init.d/nut on upgrade (Closes: #677822) * Rename nut-server.lintian-overrides to nut-client.lintian-overrides and adjust overrides now that ups-monitor is shipped in nut-client package diff --git a/debian/control b/debian/control index cd6b27e..684855a 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: admin Priority: optional Maintainer: Arnaud Quette Uploaders: Laurent Bigonville -Build-Depends: debhelper (>= 8.1.0~), +Build-Depends: debhelper (>= 8), cdbs (>= 0.4.90~), libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, @@ -45,7 +45,6 @@ Provides: nut-usb Conflicts: nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) Replaces: nut (<< 2.6.1-2~) Breaks: nut (<< 2.6.1-2~) -Pre-Depends: ${misc:Pre-Depends} Description: network UPS tools - core system Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and diff --git a/debian/nut-server.maintscript b/debian/nut-server.maintscript deleted file mode 100644 index 1d202d4..0000000 --- a/debian/nut-server.maintscript +++ /dev/null @@ -1,3 +0,0 @@ -#Removing obsolete init script. -#The file is gone in 2.6.3-2 but was not removed on upgrades. -rm_conffile /etc/init.d/nut 2.6.4-3~ diff --git a/debian/nut-server.postinst b/debian/nut-server.postinst index c2574b8..7952552 100644 --- a/debian/nut-server.postinst +++ b/debian/nut-server.postinst @@ -49,6 +49,11 @@ case "$1" in && udevadm trigger --subsystem-match=usb --action=change # 557178 udevadm trigger --subsystem-match=usb + + if dpkg --compare-versions "$2" le "2.6.4-2~" ; then + rm -f /etc/init.d/nut + update-rc.d nut remove >/dev/null + fi ;; abort-upgrade) From fa2376d331459513fa68b53c01e5a68fa5544493 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 11 Aug 2012 18:04:03 +0200 Subject: [PATCH 091/291] Be sure that client is stopped before the server also when using dependencies based boot --- debian/changelog | 4 +++- debian/nut-server.init | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9642eba..038abcf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,8 +16,10 @@ nut (2.6.4-3) UNRELEASED; urgency=low happends before squeeze release and this was against policy to have a maintainer script modifying a conffile in the first place (Closes: #684392) * Add dependency against adduser and lsb-base on nut-client package + * Be sure that client is stopped before the server also when using + dependencies based boot - -- Laurent Bigonville Sat, 11 Aug 2012 17:06:27 +0200 + -- Laurent Bigonville Sat, 11 Aug 2012 18:02:59 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/nut-server.init b/debian/nut-server.init index 5505be4..a606b72 100644 --- a/debian/nut-server.init +++ b/debian/nut-server.init @@ -2,7 +2,7 @@ ### BEGIN INIT INFO # Provides: nut-server upsd # Required-Start: $local_fs $syslog $network $remote_fs udev -# Required-Stop: $local_fs $syslog $network $remote_fs udev nut-client +# Required-Stop: $local_fs $syslog $network $remote_fs udev # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Network UPS Tools initscript From b13692c4ba7c813641014d37bf5d37904d23524d Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 11 Aug 2012 19:36:11 +0200 Subject: [PATCH 092/291] Fix package descriptions (Closes: #678068) --- debian/changelog | 3 ++- debian/control | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 038abcf..a72c338 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,8 +18,9 @@ nut (2.6.4-3) UNRELEASED; urgency=low * Add dependency against adduser and lsb-base on nut-client package * Be sure that client is stopped before the server also when using dependencies based boot + * Fix package descriptions (Closes: #678068) - -- Laurent Bigonville Sat, 11 Aug 2012 18:02:59 +0200 + -- Laurent Bigonville Sat, 11 Aug 2012 19:35:49 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/control b/debian/control index 684855a..701d80a 100644 --- a/debian/control +++ b/debian/control @@ -35,7 +35,8 @@ Description: network UPS tools - metapackage through the server, and are notified whenever the power status changes. . - This package is a metapackage that install both nut-server and nut-client + This package is a metapackage that install both nut-server and nut-client, + in most cases it is sufficient for a basic UPS monitoring system. Package: nut-server Architecture: any @@ -53,8 +54,7 @@ Description: network UPS tools - core system changes. . This package provides NUT's core system, and the serial and USB UPS - drivers. In most cases it is sufficient for a basic UPS monitoring - system. + drivers. Package: nut-client Architecture: any From 37fc9173250e8d7920b5ecc0b954e5dd7ca3ffb3 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 11 Aug 2012 20:04:57 +0200 Subject: [PATCH 093/291] Also install /bin/upssched-cmd in nut-client package as this script is referenced in default upssched.conf config file --- debian/changelog | 4 +++- debian/nut-client.install | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index a72c338..8ae5bba 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,8 +19,10 @@ nut (2.6.4-3) UNRELEASED; urgency=low * Be sure that client is stopped before the server also when using dependencies based boot * Fix package descriptions (Closes: #678068) + * Also install /bin/upssched-cmd in nut-client package as this script is + referenced in default upssched.conf config file - -- Laurent Bigonville Sat, 11 Aug 2012 19:35:49 +0200 + -- Laurent Bigonville Sat, 11 Aug 2012 20:03:56 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/nut-client.install b/debian/nut-client.install index cde4bd7..b4b7d7f 100644 --- a/debian/nut-client.install +++ b/debian/nut-client.install @@ -4,6 +4,7 @@ debian/tmp/bin/upsrw debian/tmp/bin/upscmd debian/tmp/sbin/upsmon debian/tmp/sbin/upssched +debian/tmp/bin/upssched-cmd debian/tmp/etc/bash_completion.d/nut debian/tmp/etc/nut/nut.conf debian/tmp/etc/nut/upsmon.conf From d634a9971d9663abe10c6512ff85267cebd7fbfd Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 11 Aug 2012 21:02:26 +0200 Subject: [PATCH 094/291] debian/watch: Update watch file --- debian/changelog | 3 ++- debian/watch | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 8ae5bba..87d600a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -21,8 +21,9 @@ nut (2.6.4-3) UNRELEASED; urgency=low * Fix package descriptions (Closes: #678068) * Also install /bin/upssched-cmd in nut-client package as this script is referenced in default upssched.conf config file + * debian/watch: Update watch file - -- Laurent Bigonville Sat, 11 Aug 2012 20:03:56 +0200 + -- Laurent Bigonville Sat, 11 Aug 2012 21:02:05 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/watch b/debian/watch index cfb143e..fd44637 100644 --- a/debian/watch +++ b/debian/watch @@ -1,2 +1,2 @@ version=3 -http://www.networkupstools.org/source/2.4/nut-(.*)\.tar\.gz debian uupdate +http://www.networkupstools.org/source/([0-9.]+)/nut-(.*)\.tar\.gz From d518f66985b360d482d60ee239d0f3703e4ab139 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 12 Aug 2012 00:08:16 +0200 Subject: [PATCH 095/291] Be sure that all maintainer scripts are returning 0 at their end --- debian/changelog | 3 ++- debian/nut-cgi.postrm | 1 + debian/nut-client.postinst | 2 ++ debian/nut-server.postinst | 2 ++ debian/nut-server.postrm | 1 + debian/nut-server.preinst | 2 ++ 6 files changed, 10 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 87d600a..d1952f3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -22,8 +22,9 @@ nut (2.6.4-3) UNRELEASED; urgency=low * Also install /bin/upssched-cmd in nut-client package as this script is referenced in default upssched.conf config file * debian/watch: Update watch file + * Be sure that all maintainer scripts are returning 0 at their end - -- Laurent Bigonville Sat, 11 Aug 2012 21:02:05 +0200 + -- Laurent Bigonville Sun, 12 Aug 2012 00:07:46 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/nut-cgi.postrm b/debian/nut-cgi.postrm index bdfecf0..91be66d 100644 --- a/debian/nut-cgi.postrm +++ b/debian/nut-cgi.postrm @@ -44,3 +44,4 @@ esac #DEBHELPER# +exit 0 diff --git a/debian/nut-client.postinst b/debian/nut-client.postinst index 9d5cad3..8546a95 100644 --- a/debian/nut-client.postinst +++ b/debian/nut-client.postinst @@ -59,3 +59,5 @@ case "$1" in esac #DEBHELPER# + +exit 0 diff --git a/debian/nut-server.postinst b/debian/nut-server.postinst index 7952552..d0ec14b 100644 --- a/debian/nut-server.postinst +++ b/debian/nut-server.postinst @@ -76,3 +76,5 @@ case "$1" in esac #DEBHELPER# + +exit 0 diff --git a/debian/nut-server.postrm b/debian/nut-server.postrm index 1ca0437..b95b26f 100644 --- a/debian/nut-server.postrm +++ b/debian/nut-server.postrm @@ -47,3 +47,4 @@ esac #DEBHELPER# +exit 0 diff --git a/debian/nut-server.preinst b/debian/nut-server.preinst index 72370d5..f3e949f 100644 --- a/debian/nut-server.preinst +++ b/debian/nut-server.preinst @@ -8,3 +8,5 @@ if [ "$1" = upgrade ]; then fi #DEBHELPER# + +exit 0 From e25bc18d9646e83c2e278d4a0808797dd7e4fba0 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 12 Aug 2012 20:39:01 +0200 Subject: [PATCH 096/291] Release to unstable (2.6.4-2) --- debian/changelog | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/debian/changelog b/debian/changelog index d1952f3..11dc6d6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,13 @@ nut (2.6.4-3) UNRELEASED; urgency=low + * debian/control, debian/nut-ipmi.{install,manpages}: create IPMI + support package + * debian/nut-server.install: only install USB udev rules + + -- Arnaud Quette Fri, 08 Jun 2012 23:23:03 +0200 + +nut (2.6.4-2) unstable; urgency=low + * debian/rules: Stop the nut-client before nut-server on systems using static boot ordering (Closes: #679451) * debian/nut-server.postinst: Remove /etc/init.d/nut on upgrade @@ -24,15 +32,7 @@ nut (2.6.4-3) UNRELEASED; urgency=low * debian/watch: Update watch file * Be sure that all maintainer scripts are returning 0 at their end - -- Laurent Bigonville Sun, 12 Aug 2012 00:07:46 +0200 - -nut (2.6.4-2) unstable; urgency=low - - * debian/control, debian/nut-ipmi.{install,manpages}: create IPMI - support package - * debian/nut-server.install: only install USB udev rules - - -- Arnaud Quette Fri, 08 Jun 2012 23:23:03 +0200 + -- Laurent Bigonville Sun, 12 Aug 2012 20:38:52 +0200 nut (2.6.4-1) unstable; urgency=high From 8141cb729782a9dc5f01b07678252aa7aad97d3f Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 12 Aug 2012 22:18:54 +0200 Subject: [PATCH 097/291] Follow multi-arch policy --- debian/changelog | 6 +++++- debian/control | 6 ++++-- debian/libupsclient1-dev.install | 9 +++++---- debian/libupsclient1-dev.links | 1 - debian/libupsclient1.install | 2 +- debian/rules | 9 +++++++-- 6 files changed, 22 insertions(+), 11 deletions(-) delete mode 100644 debian/libupsclient1-dev.links diff --git a/debian/changelog b/debian/changelog index 11dc6d6..8918061 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,14 @@ nut (2.6.4-3) UNRELEASED; urgency=low + [ Arnaud Quette ] * debian/control, debian/nut-ipmi.{install,manpages}: create IPMI support package * debian/nut-server.install: only install USB udev rules - -- Arnaud Quette Fri, 08 Jun 2012 23:23:03 +0200 + [ Laurent Bigonville ] + * Follow multi-arch policy + + -- Laurent Bigonville Sun, 12 Aug 2012 22:18:36 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/control b/debian/control index 701d80a..431767f 100644 --- a/debian/control +++ b/debian/control @@ -3,8 +3,8 @@ Section: admin Priority: optional Maintainer: Arnaud Quette Uploaders: Laurent Bigonville -Build-Depends: debhelper (>= 8), - cdbs (>= 0.4.90~), +Build-Depends: debhelper (>= 8.1.3), + cdbs (>= 0.4.93~), libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), @@ -166,6 +166,8 @@ Description: network UPS tools - documentation Package: libupsclient1 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} +Pre-Depends: ${misc:Pre-Depends} +Multi-Arch: same Description: network UPS tools - client library Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and diff --git a/debian/libupsclient1-dev.install b/debian/libupsclient1-dev.install index 3d6b952..144903a 100644 --- a/debian/libupsclient1-dev.install +++ b/debian/libupsclient1-dev.install @@ -1,4 +1,5 @@ -debian/tmp/lib/libupsclient.so -debian/tmp/lib/libupsclient.a -debian/tmp/usr/lib/pkgconfig/ -debian/tmp/usr/include +lib/*/libupsclient.so +usr/lib/*/libupsclient.so +lib/*/libupsclient.a +usr/lib/*/pkgconfig/ +usr/include diff --git a/debian/libupsclient1-dev.links b/debian/libupsclient1-dev.links deleted file mode 100644 index 0ac64c7..0000000 --- a/debian/libupsclient1-dev.links +++ /dev/null @@ -1 +0,0 @@ -/lib/libupsclient.so.1.1.0 /usr/lib/libupsclient.so diff --git a/debian/libupsclient1.install b/debian/libupsclient1.install index 7ba3ff0..132d81a 100644 --- a/debian/libupsclient1.install +++ b/debian/libupsclient1.install @@ -1 +1 @@ -debian/tmp/lib/libupsclient.so.* +lib/*/libupsclient.so.* diff --git a/debian/rules b/debian/rules index b0745bb..3dae758 100755 --- a/debian/rules +++ b/debian/rules @@ -14,7 +14,8 @@ DEB_CONFIGURE_PREFIX := DEB_CONFIGURE_SYSCONFDIR := /etc/nut DEB_CONFIGURE_INCLUDEDIR := /usr/include DEB_CONFIGURE_MANDIR := /usr/share/man -DEB_CONFIGURE_EXTRA_FLAGS := --without-ssl \ +DEB_CONFIGURE_EXTRA_FLAGS := --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) \ + --without-ssl \ --with-cgi \ --with-dev \ --enable-static \ @@ -25,7 +26,7 @@ DEB_CONFIGURE_EXTRA_FLAGS := --without-ssl \ --with-htmlpath=/usr/share/nut/www \ --with-pidpath=/var/run/nut \ --datadir=/usr/share/nut \ - --with-pkgconfig-dir=/usr/lib/pkgconfig \ + --with-pkgconfig-dir=/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig \ --with-user=nut --with-group=nut ifeq (linux,$(DEB_HOST_ARCH_OS)) @@ -61,6 +62,10 @@ common-install-arch:: mv $${f} $(CURDIR)/debian/tmp/etc/nut/$${nf}; \ done + # Create -dev symlink under /usr + ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.1.1.0 \ + $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so + common-install-indep:: #install documentation mkdir -p $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/pdf From 0d1e4a2dcc05c3457234635bf51319e87025a7f9 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 12 Aug 2012 23:14:24 +0200 Subject: [PATCH 098/291] Install systemd .service files (Closes: #679450) --- debian/changelog | 3 ++- debian/rules | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 8918061..464e9b2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,8 +7,9 @@ nut (2.6.4-3) UNRELEASED; urgency=low [ Laurent Bigonville ] * Follow multi-arch policy + * Install systemd .service files (Closes: #679450) - -- Laurent Bigonville Sun, 12 Aug 2012 22:18:36 +0200 + -- Laurent Bigonville Sun, 12 Aug 2012 23:14:05 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/rules b/debian/rules index 3dae758..42ddca7 100755 --- a/debian/rules +++ b/debian/rules @@ -30,7 +30,7 @@ DEB_CONFIGURE_EXTRA_FLAGS := --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) \ --with-user=nut --with-group=nut ifeq (linux,$(DEB_HOST_ARCH_OS)) - DEB_CONFIGURE_EXTRA_FLAGS+=--with-udev-dir=/lib/udev + DEB_CONFIGURE_EXTRA_FLAGS+=--with-udev-dir=/lib/udev --with-systemdsystemunitdir=/lib/systemd/system endif # only build documentation if asciidoc is installed @@ -66,6 +66,18 @@ common-install-arch:: ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.1.1.0 \ $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so + # Install systemd files only on systems where it's supported +ifeq (linux,$(DEB_HOST_ARCH_OS)) + install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-monitor.service \ + $(CURDIR)/debian/nut-client/lib/systemd/system/nut-monitor.service + install -D $(CURDIR)/debian/tmp/lib/systemd/system-shutdown/nutshutdown \ + $(CURDIR)/debian/nut-server/lib/systemd/system-shutdown/nutshutdown + install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-driver.service \ + $(CURDIR)/debian/nut-server/lib/systemd/system/nut-driver.service + install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-server.service \ + $(CURDIR)/debian/nut-server/lib/systemd/system/nut-server.service +endif + common-install-indep:: #install documentation mkdir -p $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/pdf From ce071bf6d9d6ee761a80a9687851979164588ef3 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 12 Aug 2012 23:40:20 +0200 Subject: [PATCH 099/291] New upstream release --- debian/changelog | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 464e9b2..75123ce 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.6.4-3) UNRELEASED; urgency=low +nut (2.6.5-1) UNRELEASED; urgency=low [ Arnaud Quette ] * debian/control, debian/nut-ipmi.{install,manpages}: create IPMI @@ -6,10 +6,11 @@ nut (2.6.4-3) UNRELEASED; urgency=low * debian/nut-server.install: only install USB udev rules [ Laurent Bigonville ] + * New upstream release * Follow multi-arch policy * Install systemd .service files (Closes: #679450) - -- Laurent Bigonville Sun, 12 Aug 2012 23:14:05 +0200 + -- Laurent Bigonville Sun, 12 Aug 2012 23:39:33 +0200 nut (2.6.4-2) unstable; urgency=low From b5e16725faeba13582e8f9a0bd1421b1b4a5e266 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 12 Aug 2012 23:43:25 +0200 Subject: [PATCH 100/291] Drop debian/patches/0001-fix-upsmon-regression.patch, applied upstream --- debian/changelog | 3 ++- debian/patches/0001-fix-upsmon-regression.patch | 15 --------------- debian/patches/series | 1 - 3 files changed, 2 insertions(+), 17 deletions(-) delete mode 100644 debian/patches/0001-fix-upsmon-regression.patch diff --git a/debian/changelog b/debian/changelog index 75123ce..fcbef96 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,10 +7,11 @@ nut (2.6.5-1) UNRELEASED; urgency=low [ Laurent Bigonville ] * New upstream release + - Drop debian/patches/0001-fix-upsmon-regression.patch, applied upstream * Follow multi-arch policy * Install systemd .service files (Closes: #679450) - -- Laurent Bigonville Sun, 12 Aug 2012 23:39:33 +0200 + -- Laurent Bigonville Sun, 12 Aug 2012 23:43:02 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/patches/0001-fix-upsmon-regression.patch b/debian/patches/0001-fix-upsmon-regression.patch deleted file mode 100644 index aa8c13e..0000000 --- a/debian/patches/0001-fix-upsmon-regression.patch +++ /dev/null @@ -1,15 +0,0 @@ -Description: Fix upsmon/upssched regression -Origin: upstream, http://trac.networkupstools.org/projects/nut/changeset/3670 -Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679513 - -Index: /trunk/clients/upssched.c -=================================================================== ---- a/clients/upssched.c (revision 3555) -+++ b/clients/upssched.c (revision 3670) -@@ -695,5 +695,5 @@ - pconf_encode(arg2, enc, sizeof(enc))); - -- snprintfcat(enc, sizeof(enc), "%s\n", buf); -+ snprintf(enc, sizeof(enc), "%s\n", buf); - - /* see if the parent needs to be started (and maybe start it) */ diff --git a/debian/patches/series b/debian/patches/series index f80396c..2024d93 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1 @@ -0001-fix-upsmon-regression.patch 0002-nut-monitor-paths.patch From 4730afcab2ecc95e00fd4ac6f3e094bd0bbf3340 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 12 Aug 2012 23:49:47 +0200 Subject: [PATCH 101/291] Systemd units are now installed in multi-arch path --- debian/rules | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/debian/rules b/debian/rules index 42ddca7..e647ddc 100755 --- a/debian/rules +++ b/debian/rules @@ -68,13 +68,13 @@ common-install-arch:: # Install systemd files only on systems where it's supported ifeq (linux,$(DEB_HOST_ARCH_OS)) - install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-monitor.service \ + install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-monitor.service \ $(CURDIR)/debian/nut-client/lib/systemd/system/nut-monitor.service - install -D $(CURDIR)/debian/tmp/lib/systemd/system-shutdown/nutshutdown \ + install -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system-shutdown/nutshutdown \ $(CURDIR)/debian/nut-server/lib/systemd/system-shutdown/nutshutdown - install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-driver.service \ + install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-driver.service \ $(CURDIR)/debian/nut-server/lib/systemd/system/nut-driver.service - install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-server.service \ + install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-server.service \ $(CURDIR)/debian/nut-server/lib/systemd/system/nut-server.service endif From 7903ed56c27ab293b109dc534dc4a4a8d02a1c6d Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 13 Aug 2012 00:19:04 +0200 Subject: [PATCH 102/291] debian/nut-server.install: Drop newmge-shut, renamed upstream to mge-shut and install the old implementation (oldmge-shut) instead --- debian/NEWS | 6 ++++++ debian/changelog | 4 +++- debian/nut-server.install | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 debian/NEWS diff --git a/debian/NEWS b/debian/NEWS new file mode 100644 index 0000000..e42605c --- /dev/null +++ b/debian/NEWS @@ -0,0 +1,6 @@ +nut (2.6.5-1) experimental; urgency=low + + mge-shut driver has been replaced by a new implementation (newmge-shut). + In case of issue with this new version, users can revert to oldmge-shut. + + -- Laurent Bigonville Mon, 13 Aug 2012 00:32:18 +0200 diff --git a/debian/changelog b/debian/changelog index fcbef96..17ace90 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,8 +10,10 @@ nut (2.6.5-1) UNRELEASED; urgency=low - Drop debian/patches/0001-fix-upsmon-regression.patch, applied upstream * Follow multi-arch policy * Install systemd .service files (Closes: #679450) + * debian/nut-server.install: Drop newmge-shut, renamed upstream to mge-shut + and install the old implementation (oldmge-shut) instead - -- Laurent Bigonville Sun, 12 Aug 2012 23:43:02 +0200 + -- Laurent Bigonville Mon, 13 Aug 2012 00:23:00 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/nut-server.install b/debian/nut-server.install index 1c22483..ad36c03 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -26,7 +26,7 @@ debian/tmp/lib/nut/tripplite_usb debian/tmp/lib/nut/bcmxcp debian/tmp/lib/nut/bestuferrups debian/tmp/lib/nut/gamatronic -debian/tmp/lib/nut/newmge-shut +debian/tmp/lib/nut/oldmge-shut debian/tmp/lib/nut/safenet debian/tmp/lib/nut/isbmex debian/tmp/lib/nut/masterguard From b8b31887a5d31d7a8a04c4058ba56299c3664419 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 13 Aug 2012 00:58:16 +0200 Subject: [PATCH 103/291] debian/control: Drop ancient Conflicts/Provides/Replaces --- debian/changelog | 3 ++- debian/control | 14 ++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/debian/changelog b/debian/changelog index 17ace90..7356843 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,8 +12,9 @@ nut (2.6.5-1) UNRELEASED; urgency=low * Install systemd .service files (Closes: #679450) * debian/nut-server.install: Drop newmge-shut, renamed upstream to mge-shut and install the old implementation (oldmge-shut) instead + * debian/control: Drop ancient Conflicts/Provides/Replaces - -- Laurent Bigonville Mon, 13 Aug 2012 00:23:00 +0200 + -- Laurent Bigonville Mon, 13 Aug 2012 00:56:42 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/control b/debian/control index 431767f..7b6c990 100644 --- a/debian/control +++ b/debian/control @@ -41,9 +41,8 @@ Description: network UPS tools - metapackage Package: nut-server Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6), ${udev}, nut-client (= ${binary:Version}) -Suggests: nut-cgi, nut-snmp, nut-ipmi, nut-xml, nut-dev -Provides: nut-usb -Conflicts: nut-hal-drivers, nut-usb (<< 2.1.0-3), nut-dev (<< 2.2.2) +Suggests: nut-cgi, nut-snmp, nut-ipmi, nut-xml, nut-monitor +Conflicts: nut-hal-drivers Replaces: nut (<< 2.6.1-2~) Breaks: nut (<< 2.6.1-2~) Description: network UPS tools - core system @@ -60,9 +59,9 @@ Package: nut-client Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6) Provides: ups-monitor -Conflicts: ups-monitor, nut-server (<< 2.6.3-1) +Conflicts: ups-monitor Recommends: bash-completion -Replaces: nut (<< 2.6.1-2~) +Replaces: ups-monitor, nut (<< 2.6.1-2~), nut-server (<< 2.6.3-1~) Breaks: nut (<< 2.6.1-2~), nut-server (<< 2.6.3-1~) Description: network UPS tools - clients Network UPS Tools (NUT) is a client/server monitoring system that @@ -79,7 +78,6 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, adduser Recommends: apache2 | httpd-cgi Suggests: nut -Replaces: nut (<< 1.1.11) Description: network UPS tools - web interface Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and @@ -93,7 +91,6 @@ Description: network UPS tools - web interface Package: nut-snmp Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 1.4.1-pre1) -Conflicts: nut (<= 1.4.0) Description: network UPS tools - SNMP driver Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and @@ -108,7 +105,6 @@ Description: network UPS tools - SNMP driver Package: nut-ipmi Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 1.4.1-pre1) -Conflicts: nut (<= 1.4.0) Description: network UPS tools - IPMI driver Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and @@ -181,8 +177,6 @@ Package: libupsclient1-dev Section: libdevel Architecture: any Depends: libupsclient1 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} -Provides: nut-dev -Conflicts: nut-dev (<< 2.2.2) Description: network UPS tools - development files Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and From 2904bfac3cc33bd7508bb91b68afebf134027b4c Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 13 Aug 2012 01:11:45 +0200 Subject: [PATCH 104/291] Install all development files under /usr --- debian/changelog | 3 ++- debian/libupsclient1-dev.dirs | 1 - debian/libupsclient1-dev.install | 5 ++--- .../0003-install-dev-files-in-usr.patch | 20 +++++++++++++++++++ debian/patches/series | 1 + debian/rules | 7 +++++-- 6 files changed, 30 insertions(+), 7 deletions(-) delete mode 100644 debian/libupsclient1-dev.dirs create mode 100644 debian/patches/0003-install-dev-files-in-usr.patch diff --git a/debian/changelog b/debian/changelog index 7356843..2f5a8ad 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,8 +13,9 @@ nut (2.6.5-1) UNRELEASED; urgency=low * debian/nut-server.install: Drop newmge-shut, renamed upstream to mge-shut and install the old implementation (oldmge-shut) instead * debian/control: Drop ancient Conflicts/Provides/Replaces + * Install all development files under /usr - -- Laurent Bigonville Mon, 13 Aug 2012 00:56:42 +0200 + -- Laurent Bigonville Mon, 13 Aug 2012 01:11:26 +0200 nut (2.6.4-2) unstable; urgency=low diff --git a/debian/libupsclient1-dev.dirs b/debian/libupsclient1-dev.dirs deleted file mode 100644 index 502167f..0000000 --- a/debian/libupsclient1-dev.dirs +++ /dev/null @@ -1 +0,0 @@ -/lib diff --git a/debian/libupsclient1-dev.install b/debian/libupsclient1-dev.install index 144903a..5b3120a 100644 --- a/debian/libupsclient1-dev.install +++ b/debian/libupsclient1-dev.install @@ -1,5 +1,4 @@ -lib/*/libupsclient.so usr/lib/*/libupsclient.so -lib/*/libupsclient.a -usr/lib/*/pkgconfig/ +usr/lib/*/libupsclient.a +usr/lib/*/pkgconfig/libupsclient.pc usr/include diff --git a/debian/patches/0003-install-dev-files-in-usr.patch b/debian/patches/0003-install-dev-files-in-usr.patch new file mode 100644 index 0000000..73ea30b --- /dev/null +++ b/debian/patches/0003-install-dev-files-in-usr.patch @@ -0,0 +1,20 @@ +Description: Adjust .pc paths to install development files to /usr +Author: Laurent Bigonville +Forwarded: not-needed + +--- a/lib/libnutscan.pc.in ++++ b/lib/libnutscan.pc.in +@@ -1,4 +1,4 @@ +-prefix=@prefix@ ++prefix=/usr + exec_prefix=@exec_prefix@ + libdir=@libdir@ + includedir=@includedir@ +--- a/lib/libupsclient.pc.in ++++ b/lib/libupsclient.pc.in +@@ -1,4 +1,4 @@ +-prefix=@prefix@ ++prefix=/usr + exec_prefix=@exec_prefix@ + libdir=@libdir@ + includedir=@includedir@ diff --git a/debian/patches/series b/debian/patches/series index 2024d93..0b2897f 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ +0003-install-dev-files-in-usr.patch 0002-nut-monitor-paths.patch diff --git a/debian/rules b/debian/rules index e647ddc..9104960 100755 --- a/debian/rules +++ b/debian/rules @@ -62,8 +62,11 @@ common-install-arch:: mv $${f} $(CURDIR)/debian/tmp/etc/nut/$${nf}; \ done - # Create -dev symlink under /usr - ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.1.1.0 \ + # Move -dev file to /usr + mv $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libupsclient.a \ + $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.a + rm -f $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so + ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.1 \ $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so # Install systemd files only on systems where it's supported From 3f5ae0e4fb66dc24065e4207b7ea7b3042d23b20 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 13 Aug 2012 01:59:26 +0200 Subject: [PATCH 105/291] Release to experimental --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 2f5a8ad..6152411 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.6.5-1) UNRELEASED; urgency=low +nut (2.6.5-1) experimental; urgency=low [ Arnaud Quette ] * debian/control, debian/nut-ipmi.{install,manpages}: create IPMI @@ -15,7 +15,7 @@ nut (2.6.5-1) UNRELEASED; urgency=low * debian/control: Drop ancient Conflicts/Provides/Replaces * Install all development files under /usr - -- Laurent Bigonville Mon, 13 Aug 2012 01:11:26 +0200 + -- Laurent Bigonville Mon, 13 Aug 2012 01:59:18 +0200 nut (2.6.4-2) unstable; urgency=low From 5b99c93354906e83a65b00322f3eed432c3bc574 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 13 Aug 2012 10:46:13 +0200 Subject: [PATCH 106/291] debian/control: Move the nut-monitor Suggests from nut-server to nut-client --- debian/changelog | 7 +++++++ debian/control | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 6152411..e97fa58 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +nut (2.6.5-2) UNRELEASED; urgency=low + + * debian/control: Move the nut-monitor Suggests from nut-server to + nut-client + + -- Laurent Bigonville Mon, 13 Aug 2012 10:45:03 +0200 + nut (2.6.5-1) experimental; urgency=low [ Arnaud Quette ] diff --git a/debian/control b/debian/control index 7b6c990..71ce684 100644 --- a/debian/control +++ b/debian/control @@ -41,7 +41,7 @@ Description: network UPS tools - metapackage Package: nut-server Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6), ${udev}, nut-client (= ${binary:Version}) -Suggests: nut-cgi, nut-snmp, nut-ipmi, nut-xml, nut-monitor +Suggests: nut-cgi, nut-snmp, nut-ipmi, nut-xml Conflicts: nut-hal-drivers Replaces: nut (<< 2.6.1-2~) Breaks: nut (<< 2.6.1-2~) @@ -61,6 +61,7 @@ Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.0-6) Provides: ups-monitor Conflicts: ups-monitor Recommends: bash-completion +Suggests: nut-monitor Replaces: ups-monitor, nut (<< 2.6.1-2~), nut-server (<< 2.6.3-1~) Breaks: nut (<< 2.6.1-2~), nut-server (<< 2.6.3-1~) Description: network UPS tools - clients From c79bcd71af2285eec15c642fa66dbc13b876dead Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 9 Oct 2012 23:38:43 +0200 Subject: [PATCH 107/291] Restore proper SELinux context for runtime created /var/run/nut directory --- debian/changelog | 3 ++- debian/nut-client.init | 3 ++- debian/nut-client.postinst | 1 + debian/nut-server.init | 3 ++- debian/nut-server.postinst | 1 + 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index e97fa58..1651395 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,8 +2,9 @@ nut (2.6.5-2) UNRELEASED; urgency=low * debian/control: Move the nut-monitor Suggests from nut-server to nut-client + * Restore proper SELinux context for runtime created /var/run/nut directory - -- Laurent Bigonville Mon, 13 Aug 2012 10:45:03 +0200 + -- Laurent Bigonville Tue, 09 Oct 2012 23:38:10 +0200 nut (2.6.5-1) experimental; urgency=low diff --git a/debian/nut-client.init b/debian/nut-client.init index 8524dd2..15a9f75 100755 --- a/debian/nut-client.init +++ b/debian/nut-client.init @@ -54,7 +54,8 @@ fi check_var_directory() { [ ! -d ${pid_dir} ] && mkdir -p ${pid_dir} \ && chown root:nut ${pid_dir} \ - && chmod 770 ${pid_dir} + && chmod 770 ${pid_dir} \ + && [ -x /sbin/restorecon ] && /sbin/restorecon ${pid_dir} } # check if the right components are running diff --git a/debian/nut-client.postinst b/debian/nut-client.postinst index 8546a95..5f61e55 100644 --- a/debian/nut-client.postinst +++ b/debian/nut-client.postinst @@ -36,6 +36,7 @@ case "$1" in if [ -d /var/run/nut ] ; then chown root:nut /var/run/nut chmod 770 /var/run/nut + [ -x /sbin/restorecon ] && /sbin/restorecon /var/run/nut fi ;; diff --git a/debian/nut-server.init b/debian/nut-server.init index a606b72..c539bd5 100644 --- a/debian/nut-server.init +++ b/debian/nut-server.init @@ -52,7 +52,8 @@ fi check_var_directory() { [ ! -d ${pid_dir} ] && mkdir -p ${pid_dir} \ && chown root:nut ${pid_dir} \ - && chmod 770 ${pid_dir} + && chmod 770 ${pid_dir} \ + && [ -x /sbin/restorecon ] && /sbin/restorecon ${pid_dir} } # check if the right components are running diff --git a/debian/nut-server.postinst b/debian/nut-server.postinst index d0ec14b..8523527 100644 --- a/debian/nut-server.postinst +++ b/debian/nut-server.postinst @@ -36,6 +36,7 @@ case "$1" in if [ -d /var/run/nut ] ; then chown root:nut /var/run/nut chmod 770 /var/run/nut + [ -x /sbin/restorecon ] && /sbin/restorecon /var/run/nut fi # make sure that /var/lib/nut has the correct permissions and ownerships From a80da4998d7254857d1d01d8fdd8bcfbf1ff68ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= Date: Tue, 27 Nov 2012 08:34:19 +0100 Subject: [PATCH 108/291] debian/nut-client.preinst: revert /etc/nut/nut.conf mangling done by older versions of the postinst (Closes: #677054) --- debian/changelog | 5 +++++ debian/nut-client.preinst | 14 ++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 debian/nut-client.preinst diff --git a/debian/changelog b/debian/changelog index 1651395..46f7e6b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,14 @@ nut (2.6.5-2) UNRELEASED; urgency=low + [ Laurent Bigonville ] * debian/control: Move the nut-monitor Suggests from nut-server to nut-client * Restore proper SELinux context for runtime created /var/run/nut directory + [ Sébastien Villemot ] + * debian/nut-client.preinst: revert /etc/nut/nut.conf mangling done by older + versions of the postinst (Closes: #677054) + -- Laurent Bigonville Tue, 09 Oct 2012 23:38:10 +0200 nut (2.6.5-1) experimental; urgency=low diff --git a/debian/nut-client.preinst b/debian/nut-client.preinst new file mode 100644 index 0000000..2107da1 --- /dev/null +++ b/debian/nut-client.preinst @@ -0,0 +1,14 @@ +#!/bin/sh + +set -e + +# Revert /etc/nut/nut.conf mangling done by older versions of the postinst +# See #677054 +if [ "$1" = "install" -o "$1" = "upgrade" ] \ + && dpkg --compare-versions "$2" lt "2.6.4-2" \ + && [ -f /etc/nut/nut.conf ] \ + && [ "`md5sum /etc/nut/nut.conf | cut -d ' ' -f 1`" = f9b571ae65952e3a761fac2202633478 ]; then + sed -i 's/^MODE=none$/MODE = none/' /etc/nut/nut.conf +fi + +#DEBHELPER# From caf09b3d5850a2f36fff35c5948d7ccaeb4fb14c Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 2 Dec 2012 13:08:38 +0100 Subject: [PATCH 109/291] debian/control: Fix typo in package description --- debian/changelog | 3 ++- debian/control | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 46f7e6b..a4d1a60 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,12 +4,13 @@ nut (2.6.5-2) UNRELEASED; urgency=low * debian/control: Move the nut-monitor Suggests from nut-server to nut-client * Restore proper SELinux context for runtime created /var/run/nut directory + * debian/control: Fix typo in package description [ Sébastien Villemot ] * debian/nut-client.preinst: revert /etc/nut/nut.conf mangling done by older versions of the postinst (Closes: #677054) - -- Laurent Bigonville Tue, 09 Oct 2012 23:38:10 +0200 + -- Laurent Bigonville Sun, 02 Dec 2012 13:07:51 +0100 nut (2.6.5-1) experimental; urgency=low diff --git a/debian/control b/debian/control index 71ce684..81b21f6 100644 --- a/debian/control +++ b/debian/control @@ -35,7 +35,7 @@ Description: network UPS tools - metapackage through the server, and are notified whenever the power status changes. . - This package is a metapackage that install both nut-server and nut-client, + This package is a metapackage that installs both nut-server and nut-client, in most cases it is sufficient for a basic UPS monitoring system. Package: nut-server From 68adcbdb659141fcf9118f787922482be2ceadc5 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 2 Dec 2012 13:48:57 +0100 Subject: [PATCH 110/291] debian/watch: Update watch file URL (Thanks to Bart Martens) --- debian/changelog | 3 ++- debian/watch | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index a4d1a60..72f7176 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,12 +5,13 @@ nut (2.6.5-2) UNRELEASED; urgency=low nut-client * Restore proper SELinux context for runtime created /var/run/nut directory * debian/control: Fix typo in package description + * debian/watch: Update watch file URL (Thanks to Bart Martens) [ Sébastien Villemot ] * debian/nut-client.preinst: revert /etc/nut/nut.conf mangling done by older versions of the postinst (Closes: #677054) - -- Laurent Bigonville Sun, 02 Dec 2012 13:07:51 +0100 + -- Laurent Bigonville Sun, 02 Dec 2012 13:48:20 +0100 nut (2.6.5-1) experimental; urgency=low diff --git a/debian/watch b/debian/watch index fd44637..606e460 100644 --- a/debian/watch +++ b/debian/watch @@ -1,2 +1,2 @@ version=3 -http://www.networkupstools.org/source/([0-9.]+)/nut-(.*)\.tar\.gz +http://www.networkupstools.org/download.html .*/nut-(.*)\.tar\.(?:gz|bz2|xz) From d54dd5484020cb893751942c476b90fdfad7f6f4 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 13 Jan 2013 17:31:58 +0100 Subject: [PATCH 111/291] Only fix permissions of configfiles on first install. --- debian/changelog | 5 ++++- debian/nut-client.postinst | 19 +++++++++++-------- debian/nut-server.postinst | 19 +++++++++++-------- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/debian/changelog b/debian/changelog index 72f7176..eaf9c73 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,7 +11,10 @@ nut (2.6.5-2) UNRELEASED; urgency=low * debian/nut-client.preinst: revert /etc/nut/nut.conf mangling done by older versions of the postinst (Closes: #677054) - -- Laurent Bigonville Sun, 02 Dec 2012 13:48:20 +0100 + [ Ivo De Decker ] + * Only fix permissions of configfiles on first install. + + -- Laurent Bigonville Sun, 13 Jan 2013 17:31:15 +0100 nut (2.6.5-1) experimental; urgency=low diff --git a/debian/nut-client.postinst b/debian/nut-client.postinst index 5f61e55..e4743f5 100644 --- a/debian/nut-client.postinst +++ b/debian/nut-client.postinst @@ -19,15 +19,18 @@ case "$1" in # fi # make sure that conffiles are secured and have the correct ownerships - if [ -d /etc/nut/ ] ; then - chown root:nut /etc/nut/ - fi - for file in nut.conf upsmon.conf upssched.conf ; do - if [ -f /etc/nut/$file ] ; then - chown root:nut /etc/nut/$file - chmod 640 /etc/nut/$file + # on first install + if [ -z "$2" ] ; then + if [ -d /etc/nut/ ] ; then + chown root:nut /etc/nut/ fi - done + for file in nut.conf upsmon.conf upssched.conf ; do + if [ -f /etc/nut/$file ] ; then + chown root:nut /etc/nut/$file + chmod 640 /etc/nut/$file + fi + done + fi # make sure that /var/run/nut exists and has the correct ownerships if [ ! -d /var/run/nut ] ; then diff --git a/debian/nut-server.postinst b/debian/nut-server.postinst index 8523527..0c653da 100644 --- a/debian/nut-server.postinst +++ b/debian/nut-server.postinst @@ -19,15 +19,18 @@ case "$1" in # fi # make sure that conffiles are secured and have the correct ownerships - if [ -d /etc/nut/ ] ; then - chown root:nut /etc/nut/ - fi - for file in ups.conf upsd.conf upsd.users ; do - if [ -f /etc/nut/$file ] ; then - chown root:nut /etc/nut/$file - chmod 640 /etc/nut/$file + # on first install + if [ -z "$2" ] ; then + if [ -d /etc/nut/ ] ; then + chown root:nut /etc/nut/ fi - done + for file in ups.conf upsd.conf upsd.users ; do + if [ -f /etc/nut/$file ] ; then + chown root:nut /etc/nut/$file + chmod 640 /etc/nut/$file + fi + done + fi # make sure that /var/run/nut exists and has the correct ownerships if [ ! -d /var/run/nut ] ; then From 715368e54fdb4a4ccdc2e155a918eae23c479e45 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 13 Jan 2013 17:36:52 +0100 Subject: [PATCH 112/291] Only remove /etc/init.d/nut from previous versions of nut in nut-server postinst if there are no local changes. * Only remove /etc/init.d/nut from previous versions of nut in nut-server postinst if there are no local changes. * Also remove /etc/init.d/nut in nut-client postinst. Thanks to Laurent Bigonville for the hint. --- debian/changelog | 6 +++++- debian/nut-client.postinst | 10 ++++++++++ debian/nut-server.postinst | 9 +++++++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index eaf9c73..35237fa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,8 +13,12 @@ nut (2.6.5-2) UNRELEASED; urgency=low [ Ivo De Decker ] * Only fix permissions of configfiles on first install. + * Only remove /etc/init.d/nut from previous versions of nut in nut-server + postinst if there are no local changes. + * Also remove /etc/init.d/nut in nut-client postinst. Thanks to + Laurent Bigonville for the hint. - -- Laurent Bigonville Sun, 13 Jan 2013 17:31:15 +0100 + -- Laurent Bigonville Sun, 13 Jan 2013 17:36:13 +0100 nut (2.6.5-1) experimental; urgency=low diff --git a/debian/nut-client.postinst b/debian/nut-client.postinst index e4743f5..bac6721 100644 --- a/debian/nut-client.postinst +++ b/debian/nut-client.postinst @@ -41,6 +41,16 @@ case "$1" in chmod 770 /var/run/nut [ -x /sbin/restorecon ] && /sbin/restorecon /var/run/nut fi + + if dpkg --compare-versions "$2" le "2.6.4-2~" && + [ -f /etc/init.d/nut ] ; then + if [ "`md5sum /etc/init.d/nut | cut -d ' ' -f 1`" = 72f1dbc6b92cb4407f26605d05b12681 ]; then + rm -f /etc/init.d/nut + else + mv /etc/init.d/nut /etc/init.d/nut.dpkg-old + fi + update-rc.d nut remove >/dev/null + fi ;; abort-upgrade) diff --git a/debian/nut-server.postinst b/debian/nut-server.postinst index 0c653da..4a718aa 100644 --- a/debian/nut-server.postinst +++ b/debian/nut-server.postinst @@ -54,8 +54,13 @@ case "$1" in # 557178 udevadm trigger --subsystem-match=usb - if dpkg --compare-versions "$2" le "2.6.4-2~" ; then - rm -f /etc/init.d/nut + if dpkg --compare-versions "$2" le "2.6.4-2~" && + [ -f /etc/init.d/nut ] ; then + if [ "`md5sum /etc/init.d/nut | cut -d ' ' -f 1`" = 72f1dbc6b92cb4407f26605d05b12681 ]; then + rm -f /etc/init.d/nut + else + mv /etc/init.d/nut /etc/init.d/nut.dpkg-old + fi update-rc.d nut remove >/dev/null fi ;; From 853f3503ce848548eb092ee904db5208b1e570a8 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 25 Jan 2013 23:17:36 +0100 Subject: [PATCH 113/291] debian/rules: Alias systemd nut-monitor service file to nut-client to prevent it from running twice --- debian/changelog | 4 +++- debian/rules | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 35237fa..b7eeeaa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,8 @@ nut (2.6.5-2) UNRELEASED; urgency=low * Restore proper SELinux context for runtime created /var/run/nut directory * debian/control: Fix typo in package description * debian/watch: Update watch file URL (Thanks to Bart Martens) + * debian/rules: Alias systemd nut-monitor service file to nut-client to + prevent it from running twice [ Sébastien Villemot ] * debian/nut-client.preinst: revert /etc/nut/nut.conf mangling done by older @@ -18,7 +20,7 @@ nut (2.6.5-2) UNRELEASED; urgency=low * Also remove /etc/init.d/nut in nut-client postinst. Thanks to Laurent Bigonville for the hint. - -- Laurent Bigonville Sun, 13 Jan 2013 17:36:13 +0100 + -- Laurent Bigonville Fri, 25 Jan 2013 23:13:51 +0100 nut (2.6.5-1) experimental; urgency=low diff --git a/debian/rules b/debian/rules index 9104960..2d6ca9e 100755 --- a/debian/rules +++ b/debian/rules @@ -79,6 +79,11 @@ ifeq (linux,$(DEB_HOST_ARCH_OS)) $(CURDIR)/debian/nut-server/lib/systemd/system/nut-driver.service install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-server.service \ $(CURDIR)/debian/nut-server/lib/systemd/system/nut-server.service + + # This is needed to avoid services to be started twice (systemd and LSB) + mkdir -p $(CURDIR)/debian/nut-client/etc/systemd/system/ + ln -s /lib/systemd/system/nut-monitor.service \ + $(CURDIR)/debian/nut-client/etc/systemd/system/nut-client.service endif common-install-indep:: From 47044fe3b0fdc06b89c806eb2765f66a17d63ff0 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 26 Jan 2013 00:19:45 +0100 Subject: [PATCH 114/291] d/p/0004-fix-systemd-service.patch: Fix systemd service file for Debian --- debian/changelog | 3 +- debian/patches/0004-fix-systemd-service.patch | 28 +++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 debian/patches/0004-fix-systemd-service.patch diff --git a/debian/changelog b/debian/changelog index b7eeeaa..1864def 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,7 @@ nut (2.6.5-2) UNRELEASED; urgency=low * debian/watch: Update watch file URL (Thanks to Bart Martens) * debian/rules: Alias systemd nut-monitor service file to nut-client to prevent it from running twice + * d/p/0004-fix-systemd-service.patch: Fix systemd service file for Debian [ Sébastien Villemot ] * debian/nut-client.preinst: revert /etc/nut/nut.conf mangling done by older @@ -20,7 +21,7 @@ nut (2.6.5-2) UNRELEASED; urgency=low * Also remove /etc/init.d/nut in nut-client postinst. Thanks to Laurent Bigonville for the hint. - -- Laurent Bigonville Fri, 25 Jan 2013 23:13:51 +0100 + -- Laurent Bigonville Sat, 26 Jan 2013 00:15:43 +0100 nut (2.6.5-1) experimental; urgency=low diff --git a/debian/patches/0004-fix-systemd-service.patch b/debian/patches/0004-fix-systemd-service.patch new file mode 100644 index 0000000..9465687 --- /dev/null +++ b/debian/patches/0004-fix-systemd-service.patch @@ -0,0 +1,28 @@ +Subject: Fix systemd service file for Debian +From: Laurent Bigonville +Forwarded: not-needed + +--- a/scripts/systemd/nut-driver.service.in ++++ b/scripts/systemd/nut-driver.service.in +@@ -1,10 +1,11 @@ + [Unit] + Description=Network UPS Tools - power device driver controller +-After=local-fs.target network.target ++After=local-fs.target network.target udev-settle.service ++Wants=udev-settle.service + StopWhenUnneeded=yes + + [Service] +-ExecStart=@driverexecdir@/upsdrvctl start +-ExecStop=@driverexecdir@/upsdrvctl stop ++ExecStart=@SBINDIR@/upsdrvctl start ++ExecStop=@SBINDIR@/upsdrvctl stop + Type=forking + +--- a/scripts/systemd/nut-monitor.service.in ++++ b/scripts/systemd/nut-monitor.service.in +@@ -9,3 +9,4 @@ Type=forking + + [Install] + WantedBy=multi-user.target ++Alias=nut-client.service diff --git a/debian/patches/series b/debian/patches/series index 0b2897f..540178d 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1,3 @@ 0003-install-dev-files-in-usr.patch 0002-nut-monitor-paths.patch +0004-fix-systemd-service.patch From 11b7980da62ca4326d14cc3c1e461fe76cdc7486 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 26 Jan 2013 01:01:44 +0100 Subject: [PATCH 115/291] Install tmpfiles conf files to create /run/nut directory during boot --- debian/changelog | 3 ++- debian/nut-client.tmpfiles | 1 + debian/nut-server.tmpfiles | 1 + debian/rules | 6 ++++++ 4 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 debian/nut-client.tmpfiles create mode 100644 debian/nut-server.tmpfiles diff --git a/debian/changelog b/debian/changelog index 1864def..7fbb256 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,7 @@ nut (2.6.5-2) UNRELEASED; urgency=low * debian/rules: Alias systemd nut-monitor service file to nut-client to prevent it from running twice * d/p/0004-fix-systemd-service.patch: Fix systemd service file for Debian + * Install tmpfiles conf files to create /run/nut directory during boot [ Sébastien Villemot ] * debian/nut-client.preinst: revert /etc/nut/nut.conf mangling done by older @@ -21,7 +22,7 @@ nut (2.6.5-2) UNRELEASED; urgency=low * Also remove /etc/init.d/nut in nut-client postinst. Thanks to Laurent Bigonville for the hint. - -- Laurent Bigonville Sat, 26 Jan 2013 00:15:43 +0100 + -- Laurent Bigonville Sat, 26 Jan 2013 00:59:10 +0100 nut (2.6.5-1) experimental; urgency=low diff --git a/debian/nut-client.tmpfiles b/debian/nut-client.tmpfiles new file mode 100644 index 0000000..bf195cf --- /dev/null +++ b/debian/nut-client.tmpfiles @@ -0,0 +1 @@ +d /run/nut 0770 root nut - - diff --git a/debian/nut-server.tmpfiles b/debian/nut-server.tmpfiles new file mode 100644 index 0000000..bf195cf --- /dev/null +++ b/debian/nut-server.tmpfiles @@ -0,0 +1 @@ +d /run/nut 0770 root nut - - diff --git a/debian/rules b/debian/rules index 2d6ca9e..425a353 100755 --- a/debian/rules +++ b/debian/rules @@ -80,6 +80,12 @@ ifeq (linux,$(DEB_HOST_ARCH_OS)) install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-server.service \ $(CURDIR)/debian/nut-server/lib/systemd/system/nut-server.service + # Install tmpfiles config file to create /run/nut directory + install -m 644 -D $(CURDIR)/debian/nut-client.tmpfiles \ + $(CURDIR)/debian/nut-client/usr/lib/tmpfiles.d/nut-client.conf + install -m 644 -D $(CURDIR)/debian/nut-server.tmpfiles \ + $(CURDIR)/debian/nut-server/usr/lib/tmpfiles.d/nut-server.conf + # This is needed to avoid services to be started twice (systemd and LSB) mkdir -p $(CURDIR)/debian/nut-client/etc/systemd/system/ ln -s /lib/systemd/system/nut-monitor.service \ From 2f87baa5a4330ede008dda35e8dfdaad05ed8c12 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 26 Jan 2013 01:12:41 +0100 Subject: [PATCH 116/291] Do not hardcode full path to restorecon Use which command to detect if the executable is present or not --- debian/nut-client.postinst | 4 +++- debian/nut-server.postinst | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/debian/nut-client.postinst b/debian/nut-client.postinst index bac6721..4b04850 100644 --- a/debian/nut-client.postinst +++ b/debian/nut-client.postinst @@ -39,7 +39,9 @@ case "$1" in if [ -d /var/run/nut ] ; then chown root:nut /var/run/nut chmod 770 /var/run/nut - [ -x /sbin/restorecon ] && /sbin/restorecon /var/run/nut + if which restorecon >/dev/null 2>&1; then + restorecon /var/run/nut + fi fi if dpkg --compare-versions "$2" le "2.6.4-2~" && diff --git a/debian/nut-server.postinst b/debian/nut-server.postinst index 4a718aa..3322126 100644 --- a/debian/nut-server.postinst +++ b/debian/nut-server.postinst @@ -39,7 +39,9 @@ case "$1" in if [ -d /var/run/nut ] ; then chown root:nut /var/run/nut chmod 770 /var/run/nut - [ -x /sbin/restorecon ] && /sbin/restorecon /var/run/nut + if which restorecon >/dev/null 2>&1; then + restorecon /var/run/nut + fi fi # make sure that /var/lib/nut has the correct permissions and ownerships From e8e497bcf43557ff8936587baab97a935f066c83 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 31 Jan 2013 21:51:37 +0100 Subject: [PATCH 117/291] Release to experimental --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7fbb256..91f6766 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.6.5-2) UNRELEASED; urgency=low +nut (2.6.5-2) experimental; urgency=low [ Laurent Bigonville ] * debian/control: Move the nut-monitor Suggests from nut-server to @@ -22,7 +22,7 @@ nut (2.6.5-2) UNRELEASED; urgency=low * Also remove /etc/init.d/nut in nut-client postinst. Thanks to Laurent Bigonville for the hint. - -- Laurent Bigonville Sat, 26 Jan 2013 00:59:10 +0100 + -- Laurent Bigonville Thu, 31 Jan 2013 21:51:31 +0100 nut (2.6.5-1) experimental; urgency=low From 623a7f2f699fa33ad150b9230fbe7a0f4c8aaf1a Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 14 May 2013 18:04:58 +0200 Subject: [PATCH 118/291] Move libupsclient1 package to libs Section * debian/control: - Move libupsclient1 package to libs Section --- debian/changelog | 7 +++++++ debian/control | 1 + 2 files changed, 8 insertions(+) diff --git a/debian/changelog b/debian/changelog index 91f6766..01c2e19 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +nut (2.6.5-3) UNRELEASED; urgency=low + + * debian/control: + - Move libupsclient1 package to libs Section + + -- Laurent Bigonville Tue, 14 May 2013 18:04:04 +0200 + nut (2.6.5-2) experimental; urgency=low [ Laurent Bigonville ] diff --git a/debian/control b/debian/control index 81b21f6..097a738 100644 --- a/debian/control +++ b/debian/control @@ -161,6 +161,7 @@ Description: network UPS tools - documentation This package contains FAQ, user, developer and packager documentation. Package: libupsclient1 +Section: libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Pre-Depends: ${misc:Pre-Depends} From 8e1c6bce0dd9d6fbac2d3c147c89c3f6c7c10ccf Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 14 May 2013 18:13:57 +0200 Subject: [PATCH 119/291] Add libgd-dev to the Build-Depends, keep the other alternatives to ease the backports --- debian/changelog | 2 ++ debian/control | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 01c2e19..0bb09b5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,8 @@ nut (2.6.5-3) UNRELEASED; urgency=low * debian/control: - Move libupsclient1 package to libs Section + - Add libgd-dev to the Build-Depends, keep the other alternatives to ease + the backports -- Laurent Bigonville Tue, 14 May 2013 18:04:04 +0200 diff --git a/debian/control b/debian/control index 097a738..0c84526 100644 --- a/debian/control +++ b/debian/control @@ -5,7 +5,7 @@ Maintainer: Arnaud Quette Uploaders: Laurent Bigonville Build-Depends: debhelper (>= 8.1.3), cdbs (>= 0.4.93~), - libgd2-xpm-dev | libgd2-noxpm-dev, + libgd-dev | libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), libneon27-gnutls-dev | libneon27-dev, From fc374550b2985c8eb8b398ddd6bb04e4b498233a Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 18 Jun 2013 10:33:13 +0200 Subject: [PATCH 120/291] Bump Standards-Version to 3.9.4 (no further changes) --- debian/changelog | 1 + debian/control | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 0bb09b5..dfd730e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,7 @@ nut (2.6.5-3) UNRELEASED; urgency=low - Move libupsclient1 package to libs Section - Add libgd-dev to the Build-Depends, keep the other alternatives to ease the backports + - Bump Standards-Version to 3.9.4 (no further changes) -- Laurent Bigonville Tue, 14 May 2013 18:04:04 +0200 diff --git a/debian/control b/debian/control index 0c84526..5107a95 100644 --- a/debian/control +++ b/debian/control @@ -18,7 +18,7 @@ Build-Depends-Indep: asciidoc (>= 8.6.3), docbook-xsl, dblatex (>= 0.2.5), libxml2-utils -Standards-Version: 3.9.3 +Standards-Version: 3.9.4 Homepage: http://www.networkupstools.org/ Vcs-Browser: http://git.debian.org/?p=collab-maint/nut.git;a=summary Vcs-Git: git://git.debian.org/git/collab-maint/nut.git From d5939980c129647e6e7d7c528247a771ab8abaf0 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 18 Jun 2013 10:35:08 +0200 Subject: [PATCH 121/291] Add autotools-dev to the build-dependencies so config.{guess,sub} are getting updated during build --- debian/changelog | 2 ++ debian/control | 1 + 2 files changed, 3 insertions(+) diff --git a/debian/changelog b/debian/changelog index dfd730e..77cf6ca 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,8 @@ nut (2.6.5-3) UNRELEASED; urgency=low - Add libgd-dev to the Build-Depends, keep the other alternatives to ease the backports - Bump Standards-Version to 3.9.4 (no further changes) + - Add autotools-dev to the build-dependencies so config.{guess,sub} are + getting updated during build -- Laurent Bigonville Tue, 14 May 2013 18:04:04 +0200 diff --git a/debian/control b/debian/control index 5107a95..7fd2128 100644 --- a/debian/control +++ b/debian/control @@ -5,6 +5,7 @@ Maintainer: Arnaud Quette Uploaders: Laurent Bigonville Build-Depends: debhelper (>= 8.1.3), cdbs (>= 0.4.93~), + autotools-dev, libgd-dev | libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), From c51fe5965ab7fb49e047995b4548df24df80d41d Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 18 Jun 2013 10:36:07 +0200 Subject: [PATCH 122/291] Use canonical URL for the VCS-* fields --- debian/changelog | 1 + debian/control | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 77cf6ca..4d5c627 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,7 @@ nut (2.6.5-3) UNRELEASED; urgency=low - Bump Standards-Version to 3.9.4 (no further changes) - Add autotools-dev to the build-dependencies so config.{guess,sub} are getting updated during build + - Use canonical URL for the VCS-* fields -- Laurent Bigonville Tue, 14 May 2013 18:04:04 +0200 diff --git a/debian/control b/debian/control index 7fd2128..475f3eb 100644 --- a/debian/control +++ b/debian/control @@ -21,8 +21,8 @@ Build-Depends-Indep: asciidoc (>= 8.6.3), libxml2-utils Standards-Version: 3.9.4 Homepage: http://www.networkupstools.org/ -Vcs-Browser: http://git.debian.org/?p=collab-maint/nut.git;a=summary -Vcs-Git: git://git.debian.org/git/collab-maint/nut.git +Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/nut.git;a=summary +Vcs-Git: git://anonscm.debian.org/collab-maint/nut.git X-Python-Version: >= 2.5 Package: nut From cc689212ad818533def33a61693d7a22040f444f Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 18 Jun 2013 21:21:00 +0200 Subject: [PATCH 123/291] debian/nut-client.preinst: also revert /etc/nut/nut.conf mangling done by postinst during upgrade from lenny to squeeze (Really closes: #677054) Thanks to Andreas Beckmann for the review. --- debian/changelog | 6 ++++++ debian/nut-client.preinst | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/debian/changelog b/debian/changelog index 4d5c627..8f3daf2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,6 @@ nut (2.6.5-3) UNRELEASED; urgency=low + [ Laurent Bigonville ] * debian/control: - Move libupsclient1 package to libs Section - Add libgd-dev to the Build-Depends, keep the other alternatives to ease @@ -9,6 +10,11 @@ nut (2.6.5-3) UNRELEASED; urgency=low getting updated during build - Use canonical URL for the VCS-* fields + [ Ivo De Decker ] + * debian/nut-client.preinst: also revert /etc/nut/nut.conf mangling done + by postinst during upgrade from lenny to squeeze (Really closes: #677054) + Thanks to Andreas Beckmann for the review. + -- Laurent Bigonville Tue, 14 May 2013 18:04:04 +0200 nut (2.6.5-2) experimental; urgency=low diff --git a/debian/nut-client.preinst b/debian/nut-client.preinst index 2107da1..fa1bd01 100644 --- a/debian/nut-client.preinst +++ b/debian/nut-client.preinst @@ -4,6 +4,15 @@ set -e # Revert /etc/nut/nut.conf mangling done by older versions of the postinst # See #677054 +# changed configfile created by a fresh install in lenny, upgraded to squeeze +if [ "$1" = "install" -o "$1" = "upgrade" ] \ + && dpkg --compare-versions "$2" lt "2.6.4-2" \ + && [ -f /etc/nut/nut.conf ] \ + && [ "`md5sum /etc/nut/nut.conf | cut -d ' ' -f 1`" = 331cca39153f451c2968f4b734c1cf3f ]; then + sed -i '29,$ d' /etc/nut/nut.conf +fi + +# changed configfile created by a fresh install in squeeze if [ "$1" = "install" -o "$1" = "upgrade" ] \ && dpkg --compare-versions "$2" lt "2.6.4-2" \ && [ -f /etc/nut/nut.conf ] \ From f313323738fd5bf05cd49c0b80b1f21783e8602b Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 18 Jun 2013 21:52:31 +0200 Subject: [PATCH 124/291] Added dep-8-tests to improve QA (from Ubuntu, closes: #708130) --- debian/changelog | 3 +- debian/tests/control | 3 + debian/tests/nut | 6 + debian/tests/test-nut.py | 422 ++++++++++++++ debian/tests/testlib.py | 1144 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 1577 insertions(+), 1 deletion(-) create mode 100644 debian/tests/control create mode 100644 debian/tests/nut create mode 100644 debian/tests/test-nut.py create mode 100644 debian/tests/testlib.py diff --git a/debian/changelog b/debian/changelog index 8f3daf2..411a8be 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,13 +9,14 @@ nut (2.6.5-3) UNRELEASED; urgency=low - Add autotools-dev to the build-dependencies so config.{guess,sub} are getting updated during build - Use canonical URL for the VCS-* fields + * Added dep-8-tests to improve QA (from Ubuntu, closes: #708130) [ Ivo De Decker ] * debian/nut-client.preinst: also revert /etc/nut/nut.conf mangling done by postinst during upgrade from lenny to squeeze (Really closes: #677054) Thanks to Andreas Beckmann for the review. - -- Laurent Bigonville Tue, 14 May 2013 18:04:04 +0200 + -- Laurent Bigonville Tue, 18 Jun 2013 21:49:12 +0200 nut (2.6.5-2) experimental; urgency=low diff --git a/debian/tests/control b/debian/tests/control new file mode 100644 index 0000000..b4bdda5 --- /dev/null +++ b/debian/tests/control @@ -0,0 +1,3 @@ +Tests: nut +Depends: python-unit, nut-server, nut-client +Restrictions: needs-root diff --git a/debian/tests/nut b/debian/tests/nut new file mode 100644 index 0000000..598cde8 --- /dev/null +++ b/debian/tests/nut @@ -0,0 +1,6 @@ +#!/bin/bash +#------------ +# Testing nut +#------------ +set -e +python `dirname $0`/test-nut.py 2>&1 diff --git a/debian/tests/test-nut.py b/debian/tests/test-nut.py new file mode 100644 index 0000000..c34256c --- /dev/null +++ b/debian/tests/test-nut.py @@ -0,0 +1,422 @@ +#!/usr/bin/python +# +# test-nut.py quality assurance test script +# Copyright (C) 2008-2011 Arnaud Quette +# Copyright (C) 2012 Jamie Strandboge +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 3, +# as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +''' + *** IMPORTANT *** + DO NOT RUN ON A PRODUCTION SERVER. + *** IMPORTANT *** + + How to run (up to natty): + $ sudo apt-get -y install python-unit nut + $ sudo ./test-nut.py -v + + How to run (oneiric+): + $ sudo apt-get -y install python-unit nut-server nut-client + $ sudo ./test-nut.py -v + + NOTE: + - NUT architecture (helps understanding): + http://www.networkupstools.org/docs/developer-guide.chunked/ar01s02.html#_the_layering + + - These tests only validate the NUT software framework itself (communication + between the drivers, server and client layers ; events propagation and + detection). The critical part of NUT, Ie the driver layer which + communicate with actual devices, can only be tested with real hardware! + + - These tests use the NUT simulation driver (dummy-ups) to emulate real + hardware behavior, and generate events (power failure, low battery, ...). + + TODO: + - improve test duration, by reworking NutTestCommon._setUp() and the way + daemons are started (ie, always) + - more events testing (upsmon / upssched) + - test syslog and wall output + - test UPS redundancy + - test Powerchain (once available!) + - test AppArmor (once available!) + - add hardware testing as Private tests? + - load a .dev file, and test a full output + + QA INFORMATION: + - NUT provides "make check" and "make distcheck" in its source distribution + - NUT provides Quality Assurance information, to track all efforts: + http://www.networkupstools.org/nut-qa.html +''' + +# QRT-Packages: python-unit netcat-openbsd +# QRT-Alternates: nut-server nut +# QRT-Alternates: nut-client nut +# nut-dev is needed for the dummy driver on hardy +# QRT-Alternates: nut-dev +# QRT-Privilege: root +# QRT-Depends: + + +import unittest, subprocess, sys, os, time +import tempfile +import testlib + +use_private = True +try: + from private.qrt.nut import PrivateNutTest +except ImportError: + class PrivateNutTest(object): + '''Empty class''' + print >>sys.stdout, "Skipping private tests" + + +class NutTestCommon(testlib.TestlibCase): + '''Common functions''' + + # FIXME: initscript will be splitted into nut-server and nut-client + # (Debian bug #634858) + initscript = "/etc/init.d/nut-server" + hosts_file = "/etc/hosts" + powerdownflag = "/etc/killpower" + shutdowncmd = "/tmp/shutdowncmd" + notifyscript = "/tmp/nutifyme" + notifylog = "/tmp/notify.log" + + def _setUp(self): + '''Set up prior to each test_* function''' + '''We generate a NUT config using the dummmy-ups driver + and standard settings for local monitoring + ''' + self.tmpdir = "" + self.rundir = "/var/run/nut" + testlib.cmd(['/bin/rm -f' + self.powerdownflag]) + + testlib.config_replace('/etc/nut/ups.conf', ''' +[dummy-dev1] + driver = dummy-ups + port = dummy.dev + desc = "simulation device" + ''') + + if self.lsb_release['Release'] <= 8.04: + testlib.config_replace('/etc/nut/upsd.conf', ''' +ACL dummy-net 127.0.0.1/8 +ACL dummy-net2 ::1/64 +ACL all 0.0.0.0/0 +ACCEPT dummy-net dummy-net2 +REJECT all + ''') + else: + testlib.config_replace('/etc/nut/upsd.conf', '''# just to touch the file''') + + extra_cfgs = '' + if self.lsb_release['Release'] <= 8.04: + extra_cfgs = ''' allowfrom = dummy-net dummy-net2 +''' + testlib.config_replace('/etc/nut/upsd.users', ''' +[admin] + password = dummypass + actions = SET + instcmds = ALL +%s +[monuser] + password = dummypass + upsmon master +%s ''' %(extra_cfgs, extra_cfgs)) + + testlib.config_replace('/etc/nut/upsmon.conf', ''' +MONITOR dummy-dev1@localhost 1 monuser dummy-pass master +MINSUPPLIES 1 +SHUTDOWNCMD "/usr/bin/touch ''' + self.shutdowncmd + '"\n' +'''POWERDOWNFLAG ''' + self.powerdownflag + '\n' +''' +NOTIFYCMD ''' + self.notifyscript + '\n' +''' +NOTIFYFLAG ONLINE SYSLOG+EXEC +NOTIFYFLAG ONBATT SYSLOG+EXEC +NOTIFYFLAG LOWBATT SYSLOG+EXEC +NOTIFYFLAG FSD SYSLOG+EXEC +# NOTIFYFLAG COMMOK SYSLOG+EXEC +# NOTIFYFLAG COMMBAD SYSLOG+EXEC +NOTIFYFLAG SHUTDOWN SYSLOG+EXEC +# NOTIFYFLAG REPLBATT SYSLOG+EXEC +# NOTIFYFLAG NOCOMM SYSLOG+EXEC +# NOTIFYFLAG NOPARENT SYSLOG+EXEC + +# Shorten test duration by: +# Speeding up polling frequency +POLLFREQ 2 +# And final wait delay +FINALDELAY 0 +''' +) + + testlib.create_fill(self.notifyscript, ''' +#! /bin/bash +echo "$*" > ''' + self.notifylog + '\n', mode=0755) + + # dummy-ups absolutely needs a data file, even if empty + testlib.config_replace('/etc/nut/dummy.dev', ''' +ups.mfr: Dummy Manufacturer +ups.model: Dummy UPS +ups.status: OL +# Set a big enough timer to avoid value reset, due to reading loop +TIMER 600 + ''') + + testlib.config_replace('/etc/nut/nut.conf', '''MODE=standalone''') + + # Add known friendly IP names for localhost v4 and v6 + # FIXME: find a way to determine if v4 / v6 are enabled, and a way to + # get v4 / v6 names + testlib.config_replace(self.hosts_file, '''# +127.0.0.1 localv4 +::1 localv6 +''', append=True) + + if self.lsb_release['Release'] <= 8.04: + testlib.config_replace('/etc/default/nut', '''# +START_UPSD=yes +UPSD_OPTIONS="" +START_UPSMON=yes +UPSMON_OPTIONS="" +''', append=False) + + # Start the framework + self._restart() + + def _tearDown(self): + '''Clean up after each test_* function''' + self._stop() + time.sleep(2) + os.unlink('/etc/nut/ups.conf') + os.unlink('/etc/nut/upsd.conf') + os.unlink('/etc/nut/upsd.users') + os.unlink('/etc/nut/upsmon.conf') + os.unlink('/etc/nut/dummy.dev') + os.unlink('/etc/nut/nut.conf') + testlib.config_restore('/etc/nut/ups.conf') + testlib.config_restore('/etc/nut/upsd.conf') + testlib.config_restore('/etc/nut/upsd.users') + testlib.config_restore('/etc/nut/upsmon.conf') + testlib.config_restore('/etc/nut/dummy.dev') + testlib.config_restore('/etc/nut/nut.conf') + if os.path.exists(self.notifyscript): + os.unlink(self.notifyscript) + if os.path.exists(self.shutdowncmd): + os.unlink(self.shutdowncmd) + testlib.config_restore(self.hosts_file) + if self.lsb_release['Release'] <= 8.04: + testlib.config_restore('/etc/default/nut') + + if os.path.exists(self.tmpdir): + testlib.recursive_rm(self.tmpdir) + + # this is needed because of the potentially hung upsd process in the + # CVE-2012-2944 test + testlib.cmd(['killall', 'upsd']) + testlib.cmd(['killall', '-9', 'upsd']) + + def _start(self): + '''Start NUT''' + rc, report = testlib.cmd([self.initscript, 'start']) + expected = 0 + result = 'Got exit code %d, expected %d\n' % (rc, expected) + self.assertEquals(expected, rc, result + report) + time.sleep(2) + + def _stop(self): + '''Stop NUT''' + rc, report = testlib.cmd([self.initscript, 'stop']) + expected = 0 + result = 'Got exit code %d, expected %d\n' % (rc, expected) + self.assertEquals(expected, rc, result + report) + + def _reload(self): + '''Reload NUT''' + rc, report = testlib.cmd([self.initscript, 'force-reload']) + expected = 0 + result = 'Got exit code %d, expected %d\n' % (rc, expected) + self.assertEquals(expected, rc, result + report) + + def _restart(self): + '''Restart NUT''' + self._stop() + time.sleep(2) + self._start() + + def _status(self): + '''NUT Status''' + rc, report = testlib.cmd([self.initscript, 'status']) + expected = 0 + if self.lsb_release['Release'] <= 8.04: + self._skipped("init script does not support status command") + expected = 1 + result = 'Got exit code %d, expected %d\n' % (rc, expected) + self.assertEquals(expected, rc, result + report) + + def _testDaemons(self, daemons): + '''Daemons running''' + for d in daemons: + # A note on the driver pid file: its name is + # -.pid + # ex: dummy-dev1-dummy-ups.pid + if d == 'dummy-ups' : + pidfile = os.path.join(self.rundir, 'dummy-ups-dummy-dev1.pid') + else : + pidfile = os.path.join(self.rundir, d + '.pid') + warning = "Could not find pidfile '" + pidfile + "'" + self.assertTrue(os.path.exists(pidfile), warning) + self.assertTrue(testlib.check_pidfile(d, pidfile), d + ' is not running') + + def _nut_setvar(self, var, value): + '''Test upsrw''' + rc, report = testlib.cmd(['/bin/upsrw', '-s', var + '=' + value, + '-u', 'admin' , '-p', 'dummypass', 'dummy-dev1@localhost']) + self.assertTrue(rc == 0, 'upsrw: ' + report) + return rc,report + + +class BasicTest(NutTestCommon, PrivateNutTest): + '''Test basic NUT functionalities''' + + def setUp(self): + '''Setup mechanisms''' + NutTestCommon._setUp(self) + + def tearDown(self): + '''Shutdown methods''' + NutTestCommon._tearDown(self) + + def test_daemons_service(self): + '''Test daemons using "service status"''' + self._status() + + def test_daemons_pid(self): + '''Test daemons using PID files''' + # upsmon does not work because ups-client is still missing + daemons = [ 'dummy-ups', 'upsd'] + self._testDaemons(daemons) + + def test_upsd_IPv4(self): + '''Test upsd IPv4 reachability''' + rc, report = testlib.cmd(['/bin/upsc', '-l', 'localv4']) + self.assertTrue('dummy-dev1' in report, 'dummy-dev1 should be present in device(s) listing: ' + report) + + def test_upsd_IPv6(self): + '''Test upsd IPv6 reachability''' + rc, report = testlib.cmd(['/bin/upsc', '-l', 'localv6']) + self.assertTrue('dummy-dev1' in report, 'dummy-dev1 should be present in device(s) listing: ' + report) + + def test_upsc_device_list(self): + '''Test NUT client interface (upsc): device(s) listing''' + rc, report = testlib.cmd(['/bin/upsc', '-L']) + self.assertTrue('dummy-dev1: simulation device' in report, 'dummy-dev1 should be present in device(s) listing: ' + report) + + def _test_upsc_status(self): + '''Test NUT client interface (upsc): data access''' + rc, report = testlib.cmd(['/bin/upsc', 'dummy-dev1', 'ups.status']) + self.assertTrue('OL' in report, 'UPS Status: ' + report + 'should be OL') + + #def test_upsc_powerchain(self): + # '''Test NUT client interface (upsc): Powerchain(s) listing''' + # rc, report = testlib.cmd(['/bin/upsc', '-p']) + # Result == Main ; dummy-dev1 ; $hostname + # self.assertTrue('dummy-dev1' in report, 'dummy-dev1 should be present in device(s) listing: ' + report) + + def test_upsrw(self): + '''Test upsrw''' + # Set ups.status to OB (On Battery)... + self._nut_setvar('ups.model', 'Test') + time.sleep(2) + # and check the result on the client side + rc, report = testlib.cmd(['/bin/upsc', 'dummy-dev1@localhost', 'ups.model']) + self.assertTrue('Test' in report, 'UPS Model: ' + report + 'should be Test') + + # FIXME: need a simulation counterpart, not yet implemented + #def test_upscmd(self): + # '''Test upscmd''' + + def test_upsmon_notif(self): + '''Test upsmon notifications''' + # Set ups.status to OB (On Battery)... + self._nut_setvar('ups.status', 'OB') + time.sleep(1) + # and check the result on the client side + rc, report = testlib.cmd(['/bin/upsc', 'dummy-dev1@localhost', 'ups.status']) + self.assertTrue('OB' in report, 'UPS Status: ' + report + 'should be OB') + + #def test_upsmon_shutdown(self): + # '''Test upsmon basic shutdown (single UPS, low battery status)''' + # self._nut_setvar('ups.status', 'OB LB') + # time.sleep(2) + # # and check the result on the client side + # rc, report = testlib.cmd(['/bin/upsc', 'dummy-dev1@localhost', 'ups.status']) + # self.assertTrue('OB LB' in report, 'UPS Status: ' + report + 'should be OB LB') + # # FIXME: improve with a 2 sec loop * 5 tries + # time.sleep(3) + # # Check for powerdownflag and shutdowncmd (needed for halt!) + # # FIXME: replace by a call to 'upsmon -K' + # self.assertTrue(os.path.exists(self.powerdownflag), 'POWERDOWNFLAG has not been set!') + # self.assertTrue(os.path.exists(self.shutdowncmd), 'SHUTDOWNCMD has not been executed!') + + def test_CVE_2012_2944(self): + '''Test CVE-2012-2944''' + self.tmpdir = tempfile.mkdtemp(dir='/tmp', prefix="testlib-") + # First send bad input. We need to do this in a script because python + # functions don't like our embedded NULs + script = os.path.join(self.tmpdir, 'script.sh') + contents = '''#!/bin/sh +printf '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n' | nc -q 1 127.0.0.1 3493 +sleep 1 +dd if=/dev/urandom count=64 | nc -q 1 127.0.0.1 3493 +''' + testlib.create_fill(script, contents, mode=0755) + rc, report = testlib.cmd([script]) + + # It should not have crashed. Let's see if it did + self._testDaemons(['upsd']) + self.assertTrue('ERR UNKNOWN-COMMAND' in report, "Could not find 'ERR UNKNOWN-COMMAND' in:\n%s" % report) + + # This CVE may also result in a hung upsd. Try to kill it, if it is + # still around, it is hung + testlib.cmd(['killall', 'upsd']) + pidfile = os.path.join(self.rundir, 'upsd.pid') + self.assertFalse(os.path.exists(pidfile), "Found %s" % pidfile) + self.assertFalse(testlib.check_pidfile('upsd', pidfile), 'upsd is hung') + #subprocess.call(['bash']) + +# FIXME +#class AdvancedTest(NutTestCommon, PrivateNutTest): +# '''Test advanced NUT functionalities''' + +if __name__ == '__main__': + + suite = unittest.TestSuite() + # more configurable + if (len(sys.argv) == 1 or sys.argv[1] == '-v'): + suite.addTest(unittest.TestLoader().loadTestsFromTestCase(BasicTest)) + + # Pull in private tests + #if use_private: + # suite.addTest(unittest.TestLoader().loadTestsFromTestCase(MyPrivateTest)) + + else: + print '''Usage: + test-nut.py [-v] basic tests +''' + sys.exit(1) + rc = unittest.TextTestRunner(verbosity=2).run(suite) + if not rc.wasSuccessful(): + sys.exit(1) diff --git a/debian/tests/testlib.py b/debian/tests/testlib.py new file mode 100644 index 0000000..fe0a622 --- /dev/null +++ b/debian/tests/testlib.py @@ -0,0 +1,1144 @@ +# +# testlib.py quality assurance test script +# Copyright (C) 2008-2011 Canonical Ltd. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this program. If not, see +# . +# + +'''Common classes and functions for package tests.''' + +import string, random, crypt, subprocess, pwd, grp, signal, time, unittest, tempfile, shutil, os, os.path, re, glob +import sys, socket, gzip +from stat import * +from encodings import string_escape + +import warnings +warnings.filterwarnings('ignore', message=r'.*apt_pkg\.TagFile.*', category=DeprecationWarning) +try: + import apt_pkg + apt_pkg.InitSystem(); +except: + # On non-Debian system, fall back to simple comparison without debianisms + class apt_pkg(object): + def VersionCompare(one, two): + list_one = one.split('.') + list_two = two.split('.') + while len(list_one)>0 and len(list_two)>0: + if list_one[0] > list_two[0]: + return 1 + if list_one[0] < list_two[0]: + return -1 + list_one.pop(0) + list_two.pop(0) + return 0 + +bogus_nxdomain = "208.69.32.132" + +# http://www.chiark.greenend.org.uk/ucgi/~cjwatson/blosxom/2009-07-02-python-sigpipe.html +# This is needed so that the subprocesses that produce endless output +# actually quit when the reader goes away. +import signal +def subprocess_setup(): + # Python installs a SIGPIPE handler by default. This is usually not what + # non-Python subprocesses expect. + signal.signal(signal.SIGPIPE, signal.SIG_DFL) + +class TimedOutException(Exception): + def __init__(self, value = "Timed Out"): + self.value = value + def __str__(self): + return repr(self.value) + +def _restore_backup(path): + pathbackup = path + '.autotest' + if os.path.exists(pathbackup): + shutil.move(pathbackup, path) + +def _save_backup(path): + pathbackup = path + '.autotest' + if os.path.exists(path) and not os.path.exists(pathbackup): + shutil.copy2(path, pathbackup) + # copy2 does not copy ownership, so do it here. + # Reference: http://docs.python.org/library/shutil.html + a = os.stat(path) + os.chown(pathbackup, a[4], a[5]) + +def config_copydir(path): + if os.path.exists(path) and not os.path.isdir(path): + raise OSError, "'%s' is not a directory" % (path) + _restore_backup(path) + + pathbackup = path + '.autotest' + if os.path.exists(path): + shutil.copytree(path, pathbackup, symlinks=True) + +def config_replace(path,contents,append=False): + '''Replace (or append) to a config file''' + _restore_backup(path) + if os.path.exists(path): + _save_backup(path) + if append: + contents = file(path).read() + contents + open(path, 'w').write(contents) + +def config_comment(path, field): + _save_backup(path) + contents = "" + for line in file(path): + if re.search("^\s*%s\s*=" % (field), line): + line = "#" + line + contents += line + + open(path+'.new', 'w').write(contents) + os.rename(path+'.new', path) + +def config_set(path, field, value, spaces=True): + _save_backup(path) + contents = "" + if spaces==True: + setting = '%s = %s\n' % (field, value) + else: + setting = '%s=%s\n' % (field, value) + found = False + for line in file(path): + if re.search("^\s*%s\s*=" % (field), line): + found = True + line = setting + contents += line + if not found: + contents += setting + + open(path+'.new', 'w').write(contents) + os.rename(path+'.new', path) + +def config_patch(path, patch, depth=1): + '''Patch a config file''' + _restore_backup(path) + _save_backup(path) + + handle, name = mkstemp_fill(patch) + rc = subprocess.call(['/usr/bin/patch', '-p%s' %(depth), path], stdin=handle, stdout=subprocess.PIPE) + os.unlink(name) + if rc != 0: + raise Exception("Patch failed") + +def config_restore(path): + '''Rename a replaced config file back to its initial state''' + _restore_backup(path) + +def timeout(secs, f, *args): + def handler(signum, frame): + raise TimedOutException() + + old = signal.signal(signal.SIGALRM, handler) + result = None + signal.alarm(secs) + try: + result = f(*args) + finally: + signal.alarm(0) + signal.signal(signal.SIGALRM, old) + + return result + +def require_nonroot(): + if os.geteuid() == 0: + print >>sys.stderr, "This series of tests should be run as a regular user with sudo access, not as root." + sys.exit(1) + +def require_root(): + if os.geteuid() != 0: + print >>sys.stderr, "This series of tests should be run with root privileges (e.g. via sudo)." + sys.exit(1) + +def require_sudo(): + if os.geteuid() != 0 or os.environ.get('SUDO_USER', None) == None: + print >>sys.stderr, "This series of tests must be run under sudo." + sys.exit(1) + if os.environ['SUDO_USER'] == 'root': + print >>sys.stderr, 'Please run this test using sudo from a regular user. (You ran sudo from root.)' + sys.exit(1) + +def random_string(length,lower=False): + '''Return a random string, consisting of ASCII letters, with given + length.''' + + s = '' + selection = string.letters + if lower: + selection = string.lowercase + maxind = len(selection)-1 + for l in range(length): + s += selection[random.randint(0, maxind)] + return s + +def mkstemp_fill(contents,suffix='',prefix='testlib-',dir=None): + '''As tempfile.mkstemp does, return a (file, name) pair, but with + prefilled contents.''' + + handle, name = tempfile.mkstemp(suffix=suffix,prefix=prefix,dir=dir) + os.close(handle) + handle = file(name,"w+") + handle.write(contents) + handle.flush() + handle.seek(0) + + return handle, name + +def create_fill(path, contents, mode=0644): + '''Safely create a page''' + # make the temp file in the same dir as the destination file so we + # don't get invalid cross-device link errors when we rename + handle, name = mkstemp_fill(contents, dir=os.path.dirname(path)) + handle.close() + os.rename(name, path) + os.chmod(path, mode) + +def login_exists(login): + '''Checks whether the given login exists on the system.''' + + try: + pwd.getpwnam(login) + return True + except KeyError: + return False + +def group_exists(group): + '''Checks whether the given login exists on the system.''' + + try: + grp.getgrnam(group) + return True + except KeyError: + return False + +def recursive_rm(dirPath, contents_only=False): + '''recursively remove directory''' + names = os.listdir(dirPath) + for name in names: + path = os.path.join(dirPath, name) + if os.path.islink(path) or not os.path.isdir(path): + os.unlink(path) + else: + recursive_rm(path) + if contents_only == False: + os.rmdir(dirPath) + +def check_pidfile(exe, pidfile): + '''Checks if pid in pidfile is running''' + if not os.path.exists(pidfile): + return False + + # get the pid + try: + fd = open(pidfile, 'r') + pid = fd.readline().rstrip('\n') + fd.close() + except: + return False + + return check_pid(exe, pid) + +def check_pid(exe, pid): + '''Checks if pid is running''' + cmdline = "/proc/%s/cmdline" % (str(pid)) + if not os.path.exists(cmdline): + return False + + # get the command line + try: + fd = open(cmdline, 'r') + tmp = fd.readline().split('\0') + fd.close() + except: + return False + + # this allows us to match absolute paths or just the executable name + if re.match('^' + exe + '$', tmp[0]) or \ + re.match('.*/' + exe + '$', tmp[0]) or \ + re.match('^' + exe + ': ', tmp[0]) or \ + re.match('^\(' + exe + '\)', tmp[0]): + return True + + return False + +def check_port(port, proto, ver=4): + '''Check if something is listening on the specified port. + WARNING: for some reason this does not work with a bind mounted /proc + ''' + assert (port >= 1) + assert (port <= 65535) + assert (proto.lower() == "tcp" or proto.lower() == "udp") + assert (ver == 4 or ver == 6) + + fn = "/proc/net/%s" % (proto) + if ver == 6: + fn += str(ver) + + rc, report = cmd(['cat', fn]) + assert (rc == 0) + + hport = "%0.4x" % port + + if re.search(': [0-9a-f]{8}:%s [0-9a-f]' % str(hport).lower(), report.lower()): + return True + return False + +def get_arch(): + '''Get the current architecture''' + rc, report = cmd(['uname', '-m']) + assert (rc == 0) + return report.strip() + +def get_memory(): + '''Gets total ram and swap''' + meminfo = "/proc/meminfo" + memtotal = 0 + swaptotal = 0 + if not os.path.exists(meminfo): + return (False, False) + + try: + fd = open(meminfo, 'r') + for line in fd.readlines(): + splitline = line.split() + if splitline[0] == 'MemTotal:': + memtotal = int(splitline[1]) + elif splitline[0] == 'SwapTotal:': + swaptotal = int(splitline[1]) + fd.close() + except: + return (False, False) + + return (memtotal,swaptotal) + +def is_running_in_vm(): + '''Check if running under a VM''' + # add other virtualization environments here + for search in ['QEMU Virtual CPU']: + rc, report = cmd_pipe(['dmesg'], ['grep', search]) + if rc == 0: + return True + return False + +def ubuntu_release(): + '''Get the Ubuntu release''' + f = "/etc/lsb-release" + try: + size = os.stat(f)[ST_SIZE] + except: + return "UNKNOWN" + + if size > 1024*1024: + raise IOError, 'Could not open "%s" (too big)' % f + + try: + fh = open("/etc/lsb-release", 'r') + except: + raise + + lines = fh.readlines() + fh.close() + + pat = re.compile(r'DISTRIB_CODENAME') + for line in lines: + if pat.search(line): + return line.split('=')[1].rstrip('\n').rstrip('\r') + + return "UNKNOWN" + +def cmd(command, input = None, stderr = subprocess.STDOUT, stdout = subprocess.PIPE, stdin = None, timeout = None): + '''Try to execute given command (array) and return its stdout, or return + a textual error if it failed.''' + + try: + sp = subprocess.Popen(command, stdin=stdin, stdout=stdout, stderr=stderr, close_fds=True, preexec_fn=subprocess_setup) + except OSError, e: + return [127, str(e)] + + out, outerr = sp.communicate(input) + # Handle redirection of stdout + if out == None: + out = '' + # Handle redirection of stderr + if outerr == None: + outerr = '' + return [sp.returncode,out+outerr] + +def cmd_pipe(command1, command2, input = None, stderr = subprocess.STDOUT, stdin = None): + '''Try to pipe command1 into command2.''' + try: + sp1 = subprocess.Popen(command1, stdin=stdin, stdout=subprocess.PIPE, stderr=stderr, close_fds=True) + sp2 = subprocess.Popen(command2, stdin=sp1.stdout, stdout=subprocess.PIPE, stderr=stderr, close_fds=True) + except OSError, e: + return [127, str(e)] + + out = sp2.communicate(input)[0] + return [sp2.returncode,out] + +def cwd_has_enough_space(cdir, total_bytes): + '''Determine if the partition of the current working directory has 'bytes' + free.''' + rc, df_output = cmd(['df']) + result = 'Got exit code %d, expected %d\n' % (rc, 0) + if rc != 0: + return False + + kb = total_bytes / 1024 + + mounts = dict() + for line in df_output.splitlines(): + if '/' not in line: + continue + tmp = line.split() + mounts[tmp[5]] = int(tmp[3]) + + cdir = os.getcwd() + while cdir != '/': + if not mounts.has_key(cdir): + cdir = os.path.dirname(cdir) + continue + if kb < mounts[cdir]: + return True + else: + return False + + if kb < mounts['/']: + return True + + return False + +def get_md5(filename): + '''Gets the md5sum of the file specified''' + + (rc, report) = cmd(["/usr/bin/md5sum", "-b", filename]) + expected = 0 + assert (expected == rc) + + return report.split(' ')[0] + +def dpkg_compare_installed_version(pkg, check, version): + '''Gets the version for the installed package, and compares it to the + specified version. + ''' + (rc, report) = cmd(["/usr/bin/dpkg", "-s", pkg]) + assert (rc == 0) + assert ("Status: install ok installed" in report) + installed_version = "" + for line in report.splitlines(): + if line.startswith("Version: "): + installed_version = line.split()[1] + + assert (installed_version != "") + + (rc, report) = cmd(["/usr/bin/dpkg", "--compare-versions", installed_version, check, version]) + assert (rc == 0 or rc == 1) + if rc == 0: + return True + return False + +def prepare_source(source, builder, cached_src, build_src, patch_system): + '''Download and unpack source package, installing necessary build depends, + adjusting the permissions for the 'builder' user, and returning the + directory of the unpacked source. Patch system can be one of: + - cdbs + - dpatch + - quilt + - quiltv3 + - None (not the string) + + This is normally used like this: + + def setUp(self): + ... + self.topdir = os.getcwd() + self.cached_src = os.path.join(os.getcwd(), "source") + self.tmpdir = tempfile.mkdtemp(prefix='testlib', dir='/tmp') + self.builder = testlib.TestUser() + testlib.cmd(['chgrp', self.builder.login, self.tmpdir]) + os.chmod(self.tmpdir, 0775) + + def tearDown(self): + ... + self.builder = None + self.topdir = os.getcwd() + if os.path.exists(self.tmpdir): + testlib.recursive_rm(self.tmpdir) + + def test_suite_build(self): + ... + build_dir = testlib.prepare_source('foo', \ + self.builder, \ + self.cached_src, \ + os.path.join(self.tmpdir, \ + os.path.basename(self.cached_src)), + "quilt") + os.chdir(build_dir) + + # Example for typical build, adjust as necessary + print "" + print " make clean" + rc, report = testlib.cmd(['sudo', '-u', self.builder.login, 'make', 'clean']) + + print " configure" + rc, report = testlib.cmd(['sudo', '-u', self.builder.login, './configure', '--prefix=%s' % self.tmpdir, '--enable-debug']) + + print " make (will take a while)" + rc, report = testlib.cmd(['sudo', '-u', self.builder.login, 'make']) + + print " make check (will take a while)", + rc, report = testlib.cmd(['sudo', '-u', self.builder.login, 'make', 'check']) + expected = 0 + result = 'Got exit code %d, expected %d\n' % (rc, expected) + self.assertEquals(expected, rc, result + report) + + def test_suite_cleanup(self): + ... + if os.path.exists(self.cached_src): + testlib.recursive_rm(self.cached_src) + + It is up to the caller to clean up cached_src and build_src (as in the + above example, often the build_src is in a tmpdir that is cleaned in + tearDown() and the cached_src is cleaned in a one time clean-up + operation (eg 'test_suite_cleanup()) which must be run after the build + suite test (obviously). + ''' + + # Make sure we have a clean slate + assert (os.path.exists(os.path.dirname(build_src))) + assert (not os.path.exists(build_src)) + + cdir = os.getcwd() + if os.path.exists(cached_src): + shutil.copytree(cached_src, build_src) + os.chdir(build_src) + else: + # Only install the build dependencies on the initial setup + rc, report = cmd(['apt-get','-y','--force-yes','build-dep',source]) + assert (rc == 0) + + os.makedirs(build_src) + os.chdir(build_src) + + # These are always needed + pkgs = ['build-essential', 'dpkg-dev', 'fakeroot'] + rc, report = cmd(['apt-get','-y','--force-yes','install'] + pkgs) + assert (rc == 0) + + rc, report = cmd(['apt-get','source',source]) + assert (rc == 0) + shutil.copytree(build_src, cached_src) + + unpacked_dir = os.path.join(build_src, glob.glob('%s-*' % source)[0]) + + # Now apply the patches. Do it here so that we don't mess up our cached + # sources. + os.chdir(unpacked_dir) + assert (patch_system in ['cdbs', 'dpatch', 'quilt', 'quiltv3', None]) + if patch_system != None and patch_system != "quiltv3": + if patch_system == "quilt": + os.environ.setdefault('QUILT_PATCHES','debian/patches') + rc, report = cmd(['quilt', 'push', '-a']) + assert (rc == 0) + elif patch_system == "cdbs": + rc, report = cmd(['./debian/rules', 'apply-patches']) + assert (rc == 0) + elif patch_system == "dpatch": + rc, report = cmd(['dpatch', 'apply-all']) + assert (rc == 0) + + cmd(['chown', '-R', '%s:%s' % (builder.uid, builder.gid), build_src]) + os.chdir(cdir) + + return unpacked_dir + +def _aa_status(): + '''Get aa-status output''' + exe = "/usr/sbin/aa-status" + assert (os.path.exists(exe)) + if os.geteuid() == 0: + return cmd([exe]) + return cmd(['sudo', exe]) + +def is_apparmor_loaded(path): + '''Check if profile is loaded''' + rc, report = _aa_status() + if rc != 0: + return False + + for line in report.splitlines(): + if line.endswith(path): + return True + return False + +def is_apparmor_confined(path): + '''Check if application is confined''' + rc, report = _aa_status() + if rc != 0: + return False + + for line in report.splitlines(): + if re.search('%s \(' % path, line): + return True + return False + +def check_apparmor(path, first_ubuntu_release, is_running=True): + '''Check if path is loaded and confined for everything higher than the + first Ubuntu release specified. + + Usage: + rc, report = testlib.check_apparmor('/usr/sbin/foo', 8.04, is_running=True) + if rc < 0: + return self._skipped(report) + + expected = 0 + result = 'Got exit code %d, expected %d\n' % (rc, expected) + self.assertEquals(expected, rc, result + report) + ''' + global manager + rc = -1 + + if manager.lsb_release["Release"] < first_ubuntu_release: + return (rc, "Skipped apparmor check") + + if not os.path.exists('/sbin/apparmor_parser'): + return (rc, "Skipped (couldn't find apparmor_parser)") + + rc = 0 + msg = "" + if not is_apparmor_loaded(path): + rc = 1 + msg = "Profile not loaded for '%s'" % path + + # this check only makes sense it the 'path' is currently executing + if is_running and rc == 0 and not is_apparmor_confined(path): + rc = 1 + msg = "'%s' is not running in enforce mode" % path + + return (rc, msg) + +def get_gcc_version(gcc, full=True): + gcc_version = 'none' + if not gcc.startswith('/'): + gcc = '/usr/bin/%s' % (gcc) + if os.path.exists(gcc): + gcc_version = 'unknown' + lines = cmd([gcc,'-v'])[1].strip().splitlines() + version_lines = [x for x in lines if x.startswith('gcc version')] + if len(version_lines) == 1: + gcc_version = " ".join(version_lines[0].split()[2:]) + if not full: + return gcc_version.split()[0] + return gcc_version + +def is_kdeinit_running(): + '''Test if kdeinit is running''' + # applications that use kdeinit will spawn it if it isn't running in the + # test. This is a problem because it does not exit. This is a helper to + # check for it. + rc, report = cmd(['ps', 'x']) + if 'kdeinit4 Running' not in report: + print >>sys.stderr, ("kdeinit not running (you may start/stop any KDE application then run this script again)") + return False + return True + +def get_pkgconfig_flags(libs=[]): + '''Find pkg-config flags for libraries''' + assert (len(libs) > 0) + rc, pkg_config = cmd(['pkg-config', '--cflags', '--libs'] + libs) + expected = 0 + if rc != expected: + print >>sys.stderr, 'Got exit code %d, expected %d\n' % (rc, expected) + assert(rc == expected) + return pkg_config.split() + +class TestDaemon: + '''Helper class to manage daemons consistently''' + def __init__(self, init): + '''Setup daemon attributes''' + self.initscript = init + + def start(self): + '''Start daemon''' + rc, report = cmd([self.initscript, 'start']) + expected = 0 + result = 'Got exit code %d, expected %d\n' % (rc, expected) + time.sleep(2) + if expected != rc: + return (False, result + report) + + if "fail" in report: + return (False, "Found 'fail' in report\n" + report) + + return (True, "") + + def stop(self): + '''Stop daemon''' + rc, report = cmd([self.initscript, 'stop']) + expected = 0 + result = 'Got exit code %d, expected %d\n' % (rc, expected) + if expected != rc: + return (False, result + report) + + if "fail" in report: + return (False, "Found 'fail' in report\n" + report) + + return (True, "") + + def reload(self): + '''Reload daemon''' + rc, report = cmd([self.initscript, 'force-reload']) + expected = 0 + result = 'Got exit code %d, expected %d\n' % (rc, expected) + if expected != rc: + return (False, result + report) + + if "fail" in report: + return (False, "Found 'fail' in report\n" + report) + + return (True, "") + + def restart(self): + '''Restart daemon''' + (res, str) = self.stop() + if not res: + return (res, str) + + (res, str) = self.start() + if not res: + return (res, str) + + return (True, "") + + def status(self): + '''Check daemon status''' + rc, report = cmd([self.initscript, 'status']) + expected = 0 + result = 'Got exit code %d, expected %d\n' % (rc, expected) + if expected != rc: + return (False, result + report) + + if "fail" in report: + return (False, "Found 'fail' in report\n" + report) + + return (True, "") + +class TestlibManager(object): + '''Singleton class used to set up per-test-run information''' + def __init__(self): + # Set glibc aborts to dump to stderr instead of the tty so test output + # is more sane. + os.environ.setdefault('LIBC_FATAL_STDERR_','1') + + # check verbosity + self.verbosity = False + if (len(sys.argv) > 1 and '-v' in sys.argv[1:]): + self.verbosity = True + + # Load LSB release file + self.lsb_release = dict() + if not os.path.exists('/usr/bin/lsb_release') and not os.path.exists('/bin/lsb_release'): + raise OSError, "Please install 'lsb-release'" + for line in subprocess.Popen(['lsb_release','-a'],stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()[0].splitlines(): + field, value = line.split(':',1) + value=value.strip() + field=field.strip() + # Convert numerics + try: + value = float(value) + except: + pass + self.lsb_release.setdefault(field,value) + + # FIXME: hack OEM releases into known-Ubuntu versions + if self.lsb_release['Distributor ID'] == "HP MIE (Mobile Internet Experience)": + if self.lsb_release['Release'] == 1.0: + self.lsb_release['Distributor ID'] = "Ubuntu" + self.lsb_release['Release'] = 8.04 + else: + raise OSError, "Unknown version of HP MIE" + + # FIXME: hack to assume a most-recent release if we're not + # running under Ubuntu. + if self.lsb_release['Distributor ID'] not in ["Ubuntu","Linaro"]: + self.lsb_release['Release'] = 10000 + # Adjust Linaro release to pretend to be Ubuntu + if self.lsb_release['Distributor ID'] in ["Linaro"]: + self.lsb_release['Distributor ID'] = "Ubuntu" + self.lsb_release['Release'] -= 0.01 + + # Load arch + if not os.path.exists('/usr/bin/dpkg'): + machine = cmd(['uname','-m'])[1].strip() + if machine.endswith('86'): + self.dpkg_arch = 'i386' + elif machine.endswith('_64'): + self.dpkg_arch = 'amd64' + elif machine.startswith('arm'): + self.dpkg_arch = 'armel' + else: + raise ValueError, "Unknown machine type '%s'" % (machine) + else: + self.dpkg_arch = cmd(['dpkg','--print-architecture'])[1].strip() + + # Find kernel version + self.kernel_is_ubuntu = False + self.kernel_version_signature = None + self.kernel_version = cmd(["uname","-r"])[1].strip() + versig = '/proc/version_signature' + if os.path.exists(versig): + self.kernel_is_ubuntu = True + self.kernel_version_signature = file(versig).read().strip() + self.kernel_version_ubuntu = self.kernel_version + elif os.path.exists('/usr/bin/dpkg'): + # this can easily be inaccurate but is only an issue for Dapper + rc, out = cmd(['dpkg','-l','linux-image-%s' % (self.kernel_version)]) + if rc == 0: + self.kernel_version_signature = out.strip().split('\n').pop().split()[2] + self.kernel_version_ubuntu = self.kernel_version_signature + if self.kernel_version_signature == None: + # Attempt to fall back to something for non-Debian-based + self.kernel_version_signature = self.kernel_version + self.kernel_version_ubuntu = self.kernel_version + # Build ubuntu version without hardware suffix + try: + self.kernel_version_ubuntu = "-".join([x for x in self.kernel_version_signature.split(' ')[1].split('-') if re.search('^[0-9]', x)]) + except: + pass + + # Find gcc version + self.gcc_version = get_gcc_version('gcc') + + # Find libc + self.path_libc = [x.split()[2] for x in cmd(['ldd','/bin/ls'])[1].splitlines() if x.startswith('\tlibc.so.')][0] + + # Report self + if self.verbosity: + kernel = self.kernel_version_ubuntu + if kernel != self.kernel_version_signature: + kernel += " (%s)" % (self.kernel_version_signature) + print >>sys.stdout, "Running test: '%s' distro: '%s %.2f' kernel: '%s' arch: '%s' uid: %d/%d SUDO_USER: '%s')" % ( \ + sys.argv[0], + self.lsb_release['Distributor ID'], + self.lsb_release['Release'], + kernel, + self.dpkg_arch, + os.geteuid(), os.getuid(), + os.environ.get('SUDO_USER', '')) + sys.stdout.flush() + + # Additional heuristics + #if os.environ.get('SUDO_USER', os.environ.get('USER', '')) in ['mdeslaur']: + # sys.stdout.write("Replying to Marc Deslauriers in http://launchpad.net/bugs/%d: " % random.randint(600000, 980000)) + # sys.stdout.flush() + # time.sleep(0.5) + # sys.stdout.write("destroyed\n") + # time.sleep(0.5) + + def hello(self, msg): + print >>sys.stderr, "Hello from %s" % (msg) +# The central instance +manager = TestlibManager() + +class TestlibCase(unittest.TestCase): + def __init__(self, *args): + '''This is called for each TestCase test instance, which isn't much better + than SetUp.''' + + unittest.TestCase.__init__(self, *args) + + # Attach to and duplicate dicts from manager singleton + self.manager = manager + #self.manager.hello(repr(self) + repr(*args)) + self.my_verbosity = self.manager.verbosity + self.lsb_release = self.manager.lsb_release + self.dpkg_arch = self.manager.dpkg_arch + self.kernel_version = self.manager.kernel_version + self.kernel_version_signature = self.manager.kernel_version_signature + self.kernel_version_ubuntu = self.manager.kernel_version_ubuntu + self.kernel_is_ubuntu = self.manager.kernel_is_ubuntu + self.gcc_version = self.manager.gcc_version + self.path_libc = self.manager.path_libc + + def version_compare(self, one, two): + return apt_pkg.VersionCompare(one,two) + + def assertFileType(self, filename, filetype): + '''Checks the file type of the file specified''' + + (rc, report, out) = self._testlib_shell_cmd(["/usr/bin/file", "-b", filename]) + out = out.strip() + expected = 0 + # Absolutely no idea why this happens on Hardy + if self.lsb_release['Release'] == 8.04 and rc == 255 and len(out) > 0: + rc = 0 + result = 'Got exit code %d, expected %d:\n%s\n' % (rc, expected, report) + self.assertEquals(expected, rc, result) + + filetype = '^%s$' % (filetype) + result = 'File type reported by file: [%s], expected regex: [%s]\n' % (out, filetype) + self.assertNotEquals(None, re.search(filetype, out), result) + + def yank_commonname_from_cert(self, certfile): + '''Extract the commonName from a given PEM''' + rc, out = cmd(['openssl','asn1parse','-in',certfile]) + if rc == 0: + ready = False + for line in out.splitlines(): + if ready: + return line.split(':')[-1] + if ':commonName' in line: + ready = True + return socket.getfqdn() + + def announce(self, text): + if self.my_verbosity: + print >>sys.stdout, "(%s) " % (text), + sys.stdout.flush() + + def make_clean(self): + rc, output = self.shell_cmd(['make','clean']) + self.assertEquals(rc, 0, output) + + def get_makefile_compiler(self): + # Find potential compiler name + compiler = 'gcc' + if os.path.exists('Makefile'): + for line in open('Makefile'): + if line.startswith('CC') and '=' in line: + items = [x.strip() for x in line.split('=')] + if items[0] == 'CC': + compiler = items[1] + break + return compiler + + def make_target(self, target, expected=0): + '''Compile a target and report output''' + + compiler = self.get_makefile_compiler() + rc, output = self.shell_cmd(['make',target]) + self.assertEquals(rc, expected, 'rc(%d)!=%d:\n' % (rc, expected) + output) + self.assertTrue('%s ' % (compiler) in output, 'Expected "%s":' % (compiler) + output) + return output + + # call as return testlib.skipped() + def _skipped(self, reason=""): + '''Provide a visible way to indicate that a test was skipped''' + if reason != "": + reason = ': %s' % (reason) + self.announce("skipped%s" % (reason)) + return False + + def _testlib_shell_cmd(self,args,stdin=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT): + argstr = "'" + "', '".join(args).strip() + "'" + rc, out = cmd(args,stdin=stdin,stdout=stdout,stderr=stderr) + report = 'Command: ' + argstr + '\nOutput:\n' + out + return rc, report, out + + def shell_cmd(self, args, stdin=None): + return cmd(args,stdin=stdin) + + def assertShellExitEquals(self, expected, args, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, msg=""): + '''Test a shell command matches a specific exit code''' + rc, report, out = self._testlib_shell_cmd(args, stdin=stdin, stdout=stdout, stderr=stderr) + result = 'Got exit code %d, expected %d\n' % (rc, expected) + self.assertEquals(expected, rc, msg + result + report) + + def assertShellExitNotEquals(self, unwanted, args, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, msg=""): + '''Test a shell command doesn't match a specific exit code''' + rc, report, out = self._testlib_shell_cmd(args, stdin=stdin, stdout=stdout, stderr=stderr) + result = 'Got (unwanted) exit code %d\n' % rc + self.assertNotEquals(unwanted, rc, msg + result + report) + + def assertShellOutputContains(self, text, args, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, msg="", invert=False): + '''Test a shell command contains a specific output''' + rc, report, out = self._testlib_shell_cmd(args, stdin=stdin, stdout=stdout, stderr=stderr) + result = 'Got exit code %d. Looking for text "%s"\n' % (rc, text) + if not invert: + self.assertTrue(text in out, msg + result + report) + else: + self.assertFalse(text in out, msg + result + report) + + def assertShellOutputEquals(self, text, args, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, msg="", invert=False, expected=None): + '''Test a shell command matches a specific output''' + rc, report, out = self._testlib_shell_cmd(args, stdin=stdin, stdout=stdout, stderr=stderr) + result = 'Got exit code %d. Looking for exact text "%s" (%s)\n' % (rc, text, " ".join(args)) + if not invert: + self.assertEquals(text, out, msg + result + report) + else: + self.assertNotEquals(text, out, msg + result + report) + if expected != None: + result = 'Got exit code %d. Expected %d (%s)\n' % (rc, expected, " ".join(args)) + self.assertEquals(rc, expected, msg + result + report) + + def _word_find(self, report, content, invert=False): + '''Check for a specific string''' + if invert: + warning = 'Found "%s"\n' % content + self.assertTrue(content not in report, warning + report) + else: + warning = 'Could not find "%s"\n' % content + self.assertTrue(content in report, warning + report) + + def _test_sysctl_value(self, path, expected, msg=None, exists=True): + sysctl = '/proc/sys/%s' % (path) + self.assertEquals(exists, os.path.exists(sysctl), sysctl) + value = None + if exists: + value = int(file(sysctl).read()) + report = "%s is not %d: %d" % (sysctl, expected, value) + if msg: + report += " (%s)" % (msg) + self.assertEquals(value, expected, report) + return value + + def set_sysctl_value(self, path, desired): + sysctl = '/proc/sys/%s' % (path) + self.assertTrue(os.path.exists(sysctl),"%s does not exist" % (sysctl)) + file(sysctl,'w').write(str(desired)) + self._test_sysctl_value(path, desired) + + def kernel_at_least(self, introduced): + return self.version_compare(self.kernel_version_ubuntu, + introduced) >= 0 + + def kernel_claims_cve_fixed(self, cve): + changelog = "/usr/share/doc/linux-image-%s/changelog.Debian.gz" % (self.kernel_version) + if os.path.exists(changelog): + for line in gzip.open(changelog): + if cve in line and not "revert" in line and not "Revert" in line: + return True + return False + +class TestGroup: + '''Create a temporary test group and remove it again in the dtor.''' + + def __init__(self, group=None, lower=False): + '''Create a new group''' + + self.group = None + if group: + if group_exists(group): + raise ValueError, 'group name already exists' + else: + while(True): + group = random_string(7,lower=lower) + if not group_exists(group): + break + + assert subprocess.call(['groupadd',group]) == 0 + self.group = group + g = grp.getgrnam(self.group) + self.gid = g[2] + + def __del__(self): + '''Remove the created group.''' + + if self.group: + rc, report = cmd(['groupdel', self.group]) + assert rc == 0 + +class TestUser: + '''Create a temporary test user and remove it again in the dtor.''' + + def __init__(self, login=None, home=True, group=None, uidmin=None, lower=False, shell=None): + '''Create a new user account with a random password. + + By default, the login name is random, too, but can be explicitly + specified with 'login'. By default, a home directory is created, this + can be suppressed with 'home=False'.''' + + self.login = None + + if os.geteuid() != 0: + raise ValueError, "You must be root to run this test" + + if login: + if login_exists(login): + raise ValueError, 'login name already exists' + else: + while(True): + login = 't' + random_string(7,lower=lower) + if not login_exists(login): + break + + self.salt = random_string(2) + self.password = random_string(8,lower=lower) + self.crypted = crypt.crypt(self.password, self.salt) + + creation = ['useradd', '-p', self.crypted] + if home: + creation += ['-m'] + if group: + creation += ['-G',group] + if uidmin: + creation += ['-K','UID_MIN=%d'%uidmin] + if shell: + creation += ['-s',shell] + creation += [login] + assert subprocess.call(creation) == 0 + # Set GECOS + assert subprocess.call(['usermod','-c','Buddy %s' % (login),login]) == 0 + + self.login = login + p = pwd.getpwnam(self.login) + self.uid = p[2] + self.gid = p[3] + self.gecos = p[4] + self.home = p[5] + self.shell = p[6] + + def __del__(self): + '''Remove the created user account.''' + + if self.login: + # sanity check the login name so we don't accidentally wipe too much + if len(self.login)>3 and not '/' in self.login: + subprocess.call(['rm','-rf', '/home/'+self.login, '/var/mail/'+self.login]) + rc, report = cmd(['userdel', '-f', self.login]) + assert rc == 0 + + def add_to_group(self, group): + '''Add user to the specified group name''' + rc, report = cmd(['usermod', '-G', group, self.login]) + if rc != 0: + print report + assert rc == 0 + +# Timeout handler using alarm() from John P. Speno's Pythonic Avocado +class TimeoutFunctionException(Exception): + """Exception to raise on a timeout""" + pass +class TimeoutFunction: + def __init__(self, function, timeout): + self.timeout = timeout + self.function = function + + def handle_timeout(self, signum, frame): + raise TimeoutFunctionException() + + def __call__(self, *args, **kwargs): + old = signal.signal(signal.SIGALRM, self.handle_timeout) + signal.alarm(self.timeout) + try: + result = self.function(*args, **kwargs) + finally: + signal.signal(signal.SIGALRM, old) + signal.alarm(0) + return result + +def main(): + print "hi" + unittest.main() From 476bccbdb39457dc31ffa9a1ce3e98d030605b04 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 21 Jun 2013 17:29:14 +0200 Subject: [PATCH 125/291] debian/nut-monitor.menu, nut-monitor.xpm: Add Debian menu entry (Closes: #708813) --- debian/changelog | 2 + debian/nut-monitor.install | 1 + debian/nut-monitor.menu | 4 + debian/nut-monitor.xpm | 326 +++++++++++++++++++++++++++++++++++++ 4 files changed, 333 insertions(+) create mode 100644 debian/nut-monitor.menu create mode 100644 debian/nut-monitor.xpm diff --git a/debian/changelog b/debian/changelog index 411a8be..17d90e1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,8 @@ nut (2.6.5-3) UNRELEASED; urgency=low getting updated during build - Use canonical URL for the VCS-* fields * Added dep-8-tests to improve QA (from Ubuntu, closes: #708130) + * debian/nut-monitor.menu, nut-monitor.xpm: Add Debian menu entry (Closes: + #708813) [ Ivo De Decker ] * debian/nut-client.preinst: also revert /etc/nut/nut.conf mangling done diff --git a/debian/nut-monitor.install b/debian/nut-monitor.install index 612e8f3..6cbef89 100644 --- a/debian/nut-monitor.install +++ b/debian/nut-monitor.install @@ -4,3 +4,4 @@ scripts/python/app/gui-*.glade usr/share/nut-monitor/ scripts/python/app/locale/ usr/share/ scripts/python/app/nut-monitor.png usr/share/pixmaps/ scripts/python/app/pixmaps usr/share/nut-monitor/ +debian/nut-monitor.xpm usr/share/pixmaps/ diff --git a/debian/nut-monitor.menu b/debian/nut-monitor.menu new file mode 100644 index 0000000..2b849cb --- /dev/null +++ b/debian/nut-monitor.menu @@ -0,0 +1,4 @@ +?package(nut-monitor): needs="X11" section="Applications/System/Monitoring"\ + title="NUT Monitor" command="/usr/bin/NUT-Monitor"\ + icon="/usr/share/pixmaps/nut-monitor.xpm"\ + longtitle="Network UPS Tools GUI client" diff --git a/debian/nut-monitor.xpm b/debian/nut-monitor.xpm new file mode 100644 index 0000000..6bfa642 --- /dev/null +++ b/debian/nut-monitor.xpm @@ -0,0 +1,326 @@ +/* XPM */ +static char * nut_monitor_xpm[] = { +"32 32 291 2", +" c None", +". c #C7A509", +"+ c #D0B123", +"@ c #CEAF21", +"# c #CBAB15", +"$ c #C5A305", +"% c #C4A100", +"& c #CAAB1A", +"* c #E0C74E", +"= c #E0C949", +"- c #ECDA6F", +"; c #FCF6C6", +"> c #FDF7B5", +", c #E8D663", +"' c #CEAF0E", +") c #CAA915", +"! c #DFC858", +"~ c #D1B42E", +"{ c #C29E00", +"] c #D6BB34", +"^ c #FBEE92", +"/ c #FFF792", +"( c #FEF07A", +"_ c #F9E857", +": c #F6E558", +"< c #F5E55D", +"[ c #EED500", +"} c #D7B800", +"| c #CCAB00", +"1 c #CAA80A", +"2 c #EFDA59", +"3 c #EFDC69", +"4 c #F0E289", +"5 c #DBC350", +"6 c #C8A714", +"7 c #BE9700", +"8 c #FFFEAA", +"9 c #FCE955", +"0 c #FCED74", +"a c #FCF194", +"b c #FDF4AD", +"c c #F5E565", +"d c #EFD91D", +"e c #E6CA00", +"f c #D2B000", +"g c #D0B226", +"h c #EAD65F", +"i c #EDD852", +"j c #E9D037", +"k c #E6CC2E", +"l c #ECD856", +"m c #CDAF23", +"n c #BD9500", +"o c #FFFFD2", +"p c #FCED72", +"q c #FCEE7A", +"r c #FDF087", +"s c #FDF195", +"t c #FDF4AB", +"u c #FEF8C2", +"v c #FEF9C0", +"w c #FEF5AA", +"x c #FBEE8A", +"y c #F4E269", +"z c #F4E058", +"A c #F0DA49", +"B c #EDD851", +"C c #EBD96F", +"D c #CCAD23", +"E c #BC9400", +"F c #FFFFD9", +"G c #FDF5B0", +"H c #FDFAD9", +"I c #FDF9D4", +"J c #FEF9D8", +"K c #FEFBE3", +"L c #FFFDEA", +"M c #FFFCE4", +"N c #FEFAD4", +"O c #FBF3B8", +"P c #F5E99B", +"Q c #EBDA75", +"R c #E0CA52", +"S c #D8C03D", +"T c #D6BE48", +"U c #CCAC21", +"V c #FFFFD6", +"W c #FDF3A5", +"X c #FDF9D0", +"Y c #FCF4B9", +"Z c #F9F2AB", +"` c #F5E561", +" . c #F1DE3B", +".. c #EFD91C", +"+. c #E8CF1B", +"@. c #E0C61C", +"#. c #DBC01E", +"$. c #D9BD21", +"%. c #D6BA26", +"&. c #D5B729", +"*. c #D7BD43", +"=. c #FFFFD4", +"-. c #FCF3A2", +";. c #FDF9CE", +">. c #FBF4B9", +",. c #FAF2AA", +"'. c #F5E86D", +"). c #F3E14B", +"!. c #F0DC2D", +"~. c #EAD329", +"{. c #E1C927", +"]. c #DCC224", +"^. c #D9BD23", +"/. c #D5B921", +"(. c #D2B522", +"_. c #D3BA3E", +":. c #CBAC22", +"<. c #A68E1A", +"[. c #FFFCD8", +"}. c #FCF2A0", +"|. c #FEF8C9", +"1. c #FCF4B1", +"2. c #FAF1A2", +"3. c #F5E666", +"4. c #F2E045", +"5. c #F0DB28", +"6. c #E8D123", +"7. c #E1C720", +"8. c #DCC01D", +"9. c #D9BC1A", +"0. c #D7B916", +"a. c #D3B41A", +"b. c #C8B140", +"c. c #B6A34A", +"d. c #777B7D", +"e. c #EFF0ED", +"f. c #DCDECF", +"g. c #F0EEDC", +"h. c #F2ECC0", +"i. c #F4EDA6", +"j. c #F2E568", +"k. c #F2DF3E", +"l. c #F4DD12", +"m. c #EBD118", +"n. c #DDC420", +"o. c #D1BA27", +"p. c #C0AD37", +"q. c #A5994E", +"r. c #898464", +"s. c #7F8077", +"t. c #8F9396", +"u. c #72746E", +"v. c #D8DAD4", +"w. c #E7E8E5", +"x. c #E0E2E1", +"y. c #DBDDDE", +"z. c #CACDD3", +"A. c #C2C6CD", +"B. c #B7BBC8", +"C. c #A9AFB8", +"D. c #9CA0A7", +"E. c #8E9396", +"F. c #848888", +"G. c #7E7F7B", +"H. c #76786F", +"I. c #7B7C77", +"J. c #8C8E8A", +"K. c #676965", +"L. c #EFF1EE", +"M. c #D6D9D4", +"N. c #E4E5E3", +"O. c #DFE0DC", +"P. c #D9DCD7", +"Q. c #CCCEC8", +"R. c #C4C7BF", +"S. c #BABDB5", +"T. c #ADAFA7", +"U. c #9FA199", +"V. c #91938B", +"W. c #84877F", +"X. c #7B7D76", +"Y. c #71736E", +"Z. c #787975", +"`. c #858783", +" + c #5F615C", +".+ c #EFF0EE", +"++ c #D5D8D3", +"@+ c #E3E5E1", +"#+ c #DCDDDA", +"$+ c #D6D9D5", +"%+ c #C9CCC7", +"&+ c #C2C5BE", +"*+ c #B8BBB4", +"=+ c #ABAEA6", +"-+ c #9C9F97", +";+ c #8E9089", +">+ c #81847D", +",+ c #787A74", +"'+ c #6E716B", +")+ c #757772", +"!+ c #7E807C", +"~+ c #555752", +"{+ c #D5D7D3", +"]+ c #E0E2DE", +"^+ c #DADBD8", +"/+ c #D4D6D1", +"(+ c #C8CAC5", +"_+ c #C1C4BD", +":+ c #B6B9B3", +"<+ c #A9ACA4", +"[+ c #999C95", +"}+ c #8A8D85", +"|+ c #7F827B", +"1+ c #767771", +"2+ c #6D6F6A", +"3+ c #757773", +"4+ c #777975", +"5+ c #4B4E49", +"6+ c #F0F2EE", +"7+ c #D3D6D1", +"8+ c #DEE0DE", +"9+ c #D8D9D6", +"0+ c #D1D3CF", +"a+ c #C6C8C3", +"b+ c #BFC2BB", +"c+ c #B5B8B1", +"d+ c #A6A9A2", +"e+ c #989B93", +"f+ c #767773", +"g+ c #70726F", +"h+ c #434540", +"i+ c #D2D5D0", +"j+ c #DCDDDB", +"k+ c #D4D6D2", +"l+ c #CED0CB", +"m+ c #C5C7C2", +"n+ c #BEC1BA", +"o+ c #B4B7B0", +"p+ c #A7AAA2", +"q+ c #767874", +"r+ c #6A6C68", +"s+ c #424440", +"t+ c #EFF1ED", +"u+ c #D1D4CF", +"v+ c #DADCD8", +"w+ c #D3D5D0", +"x+ c #CCCFC9", +"y+ c #C4C7C1", +"z+ c #6A6B68", +"A+ c #41433F", +"B+ c #EDEFEC", +"C+ c #D2D5CF", +"D+ c #D9DAD7", +"E+ c #D2D4CF", +"F+ c #CBCEC8", +"G+ c #D7D9D5", +"H+ c #D1D3CE", +"I+ c #CBCDC8", +"J+ c #8A8C85", +"K+ c #7D8079", +"L+ c #696B65", +"M+ c #7F807C", +"N+ c #6A6C69", +"O+ c #81827E", +"P+ c #DEE0DD", +"Q+ c #F1F2EF", +"R+ c #DEE0DC", +"S+ c #CFD2CC", +"T+ c #C3C6C0", +"U+ c #BBBEB7", +"V+ c #ADB0A9", +"W+ c #A2A59D", +"X+ c #979A92", +"Y+ c #8F928A", +"Z+ c #92948F", +"`+ c #9D9E99", +" @ c #A9AAA6", +".@ c #868784", +"+@ c #4B4D49", +"@@ c #5E605B", +"#@ c #959794", +"$@ c #AEAFAC", +"%@ c #B6B8B5", +"&@ c #BABCB8", +"*@ c #BDBEBB", +"=@ c #B4B6B2", +"-@ c #AAABA7", +";@ c #9E9F9B", +">@ c #888986", +",@ c #686A66", +"'@ c #454743", +" ", +" ", +" ", +" ", +" ", +" ", +" . + @ # $ ", +" % & * = - ; > , ' ) ! ~ { ", +" ] ^ / ( _ : < [ } | 1 2 3 4 5 6 ", +" 7 8 9 0 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 A B C D ", +" E F G H I J K L M N O P Q R S T U ", +" E V W X Y Z ` ...+.@.#.$.%.&.*.U ", +" E =.-.;.>.,.'.).!.~.{.].^./.(._.:. ", +" <.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c. ", +" d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t. ", +" u.e.v.w.x.y.z.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.`. ", +" +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+ ", +" ~+.+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+ ", +" 5+6+7+8+9+0+a+b+c+d+e+}+|+1+2+f+g+ ", +" h+6+i+j+k+l+m+n+o+p+e+}+|+1+2+q+r+ ", +" s+t+u+v+w+x+y+n+o+p+e+}+|+1+2+q+z+ ", +" A+B+C+D+E+F+y+n+o+p+e+}+|+1+2+4+z+ ", +" s+6+7+G+H+I+y+n+c+p+e+J+K+u.L+M+N+ ", +" O+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@ ", +" A+@@#@$@%@&@*@=@-@;@>@,@'@ ", +" ", +" ", +" ", +" ", +" "}; From 65234e6c7b5eb087f662c60f51bbb69b4c5ce817 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 21 Jun 2013 17:37:48 +0200 Subject: [PATCH 126/291] debian/control: Add missing Testsuite field --- debian/control | 1 + 1 file changed, 1 insertion(+) diff --git a/debian/control b/debian/control index 475f3eb..f58e3a2 100644 --- a/debian/control +++ b/debian/control @@ -24,6 +24,7 @@ Homepage: http://www.networkupstools.org/ Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/nut.git;a=summary Vcs-Git: git://anonscm.debian.org/collab-maint/nut.git X-Python-Version: >= 2.5 +XS-Testsuite: autopkgtest Package: nut Architecture: all From a60005575faaf44f3314b6659325d63b50af675d Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Wed, 26 Jun 2013 18:48:42 +0200 Subject: [PATCH 127/291] debian/rules: Drop manual creation of .service files symlink, this should be handled by dh_systemd now --- debian/changelog | 4 +++- debian/rules | 5 ----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/debian/changelog b/debian/changelog index 17d90e1..6df125c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,13 +12,15 @@ nut (2.6.5-3) UNRELEASED; urgency=low * Added dep-8-tests to improve QA (from Ubuntu, closes: #708130) * debian/nut-monitor.menu, nut-monitor.xpm: Add Debian menu entry (Closes: #708813) + * debian/rules: Drop manual creation of .service files symlink, this should + be handled by dh_systemd now [ Ivo De Decker ] * debian/nut-client.preinst: also revert /etc/nut/nut.conf mangling done by postinst during upgrade from lenny to squeeze (Really closes: #677054) Thanks to Andreas Beckmann for the review. - -- Laurent Bigonville Tue, 18 Jun 2013 21:49:12 +0200 + -- Laurent Bigonville Wed, 26 Jun 2013 18:47:52 +0200 nut (2.6.5-2) experimental; urgency=low diff --git a/debian/rules b/debian/rules index 425a353..06213c6 100755 --- a/debian/rules +++ b/debian/rules @@ -85,11 +85,6 @@ ifeq (linux,$(DEB_HOST_ARCH_OS)) $(CURDIR)/debian/nut-client/usr/lib/tmpfiles.d/nut-client.conf install -m 644 -D $(CURDIR)/debian/nut-server.tmpfiles \ $(CURDIR)/debian/nut-server/usr/lib/tmpfiles.d/nut-server.conf - - # This is needed to avoid services to be started twice (systemd and LSB) - mkdir -p $(CURDIR)/debian/nut-client/etc/systemd/system/ - ln -s /lib/systemd/system/nut-monitor.service \ - $(CURDIR)/debian/nut-client/etc/systemd/system/nut-client.service endif common-install-indep:: From 38742dde537f22a2fd220d1d9f678569a08e8793 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 6 Jul 2013 16:26:58 +0200 Subject: [PATCH 128/291] Add build-dependency against dh-systemd and bump minimal cdbs version so systemd helpers are called during build. --- debian/changelog | 4 +++- debian/control | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 6df125c..4f36d30 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,8 @@ nut (2.6.5-3) UNRELEASED; urgency=low - Add autotools-dev to the build-dependencies so config.{guess,sub} are getting updated during build - Use canonical URL for the VCS-* fields + - Add build-dependency against dh-systemd and bump minimal cdbs version so + systemd helpers are called during build. * Added dep-8-tests to improve QA (from Ubuntu, closes: #708130) * debian/nut-monitor.menu, nut-monitor.xpm: Add Debian menu entry (Closes: #708813) @@ -20,7 +22,7 @@ nut (2.6.5-3) UNRELEASED; urgency=low by postinst during upgrade from lenny to squeeze (Really closes: #677054) Thanks to Andreas Beckmann for the review. - -- Laurent Bigonville Wed, 26 Jun 2013 18:47:52 +0200 + -- Laurent Bigonville Sat, 06 Jul 2013 16:25:00 +0200 nut (2.6.5-2) experimental; urgency=low diff --git a/debian/control b/debian/control index f58e3a2..14f1fec 100644 --- a/debian/control +++ b/debian/control @@ -4,8 +4,9 @@ Priority: optional Maintainer: Arnaud Quette Uploaders: Laurent Bigonville Build-Depends: debhelper (>= 8.1.3), - cdbs (>= 0.4.93~), + cdbs (>= 0.4.122~), autotools-dev, + dh-systemd (>= 1.4), libgd-dev | libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), From fd9b4809ec28d45e69f825bda4233aef875331d1 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Wed, 10 Jul 2013 22:13:44 +0200 Subject: [PATCH 129/291] debian/patches/0004-fix-systemd-service.patch: Also add Wants/Before for systemd-udev-settle.service in the nut-driver.service as it got renamed after udev merge --- debian/changelog | 5 ++++- debian/patches/0004-fix-systemd-service.patch | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 4f36d30..6c1bb63 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,13 +16,16 @@ nut (2.6.5-3) UNRELEASED; urgency=low #708813) * debian/rules: Drop manual creation of .service files symlink, this should be handled by dh_systemd now + * debian/patches/0004-fix-systemd-service.patch: Also add Wants/Before for + systemd-udev-settle.service in the nut-driver.service as it got renamed + after udev merge [ Ivo De Decker ] * debian/nut-client.preinst: also revert /etc/nut/nut.conf mangling done by postinst during upgrade from lenny to squeeze (Really closes: #677054) Thanks to Andreas Beckmann for the review. - -- Laurent Bigonville Sat, 06 Jul 2013 16:25:00 +0200 + -- Laurent Bigonville Wed, 10 Jul 2013 22:12:22 +0200 nut (2.6.5-2) experimental; urgency=low diff --git a/debian/patches/0004-fix-systemd-service.patch b/debian/patches/0004-fix-systemd-service.patch index 9465687..02d4825 100644 --- a/debian/patches/0004-fix-systemd-service.patch +++ b/debian/patches/0004-fix-systemd-service.patch @@ -8,8 +8,8 @@ Forwarded: not-needed [Unit] Description=Network UPS Tools - power device driver controller -After=local-fs.target network.target -+After=local-fs.target network.target udev-settle.service -+Wants=udev-settle.service ++After=local-fs.target network.target udev-settle.service systemd-udev-settle.service ++Wants=udev-settle.service systemd-udev-settle.service StopWhenUnneeded=yes [Service] From 154f28c325d8b7c1efdfd61032b63b26d8fae645 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Wed, 10 Jul 2013 22:48:24 +0200 Subject: [PATCH 130/291] debian/patches/0004-fix-systemd-service.patch: Fix path for upsdrvctl in scripts/systemd/nutshutdown.in --- debian/changelog | 4 +++- debian/patches/0004-fix-systemd-service.patch | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 6c1bb63..35ee448 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,13 +19,15 @@ nut (2.6.5-3) UNRELEASED; urgency=low * debian/patches/0004-fix-systemd-service.patch: Also add Wants/Before for systemd-udev-settle.service in the nut-driver.service as it got renamed after udev merge + * debian/patches/0004-fix-systemd-service.patch: Fix path for upsdrvctl in + scripts/systemd/nutshutdown.in [ Ivo De Decker ] * debian/nut-client.preinst: also revert /etc/nut/nut.conf mangling done by postinst during upgrade from lenny to squeeze (Really closes: #677054) Thanks to Andreas Beckmann for the review. - -- Laurent Bigonville Wed, 10 Jul 2013 22:12:22 +0200 + -- Laurent Bigonville Wed, 10 Jul 2013 22:47:23 +0200 nut (2.6.5-2) experimental; urgency=low diff --git a/debian/patches/0004-fix-systemd-service.patch b/debian/patches/0004-fix-systemd-service.patch index 02d4825..d33a250 100644 --- a/debian/patches/0004-fix-systemd-service.patch +++ b/debian/patches/0004-fix-systemd-service.patch @@ -26,3 +26,9 @@ Forwarded: not-needed [Install] WantedBy=multi-user.target +Alias=nut-client.service +--- a/scripts/systemd/nutshutdown.in ++++ b/scripts/systemd/nutshutdown.in +@@ -1,2 +1,2 @@ + #!/bin/sh +-@SBINDIR@/upsmon -K >/dev/null 2>&1 && @driverexecdir@/upsdrvctl shutdown ++@SBINDIR@/upsmon -K >/dev/null 2>&1 && @SBINDIR@/upsdrvctl shutdown From 4c61ee613e3fa30c78f53a08b6fd9d581f523955 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 11 Jul 2013 00:50:18 +0200 Subject: [PATCH 131/291] Release to unstable --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 35ee448..935da5e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.6.5-3) UNRELEASED; urgency=low +nut (2.6.5-3) unstable; urgency=low [ Laurent Bigonville ] * debian/control: @@ -27,7 +27,7 @@ nut (2.6.5-3) UNRELEASED; urgency=low by postinst during upgrade from lenny to squeeze (Really closes: #677054) Thanks to Andreas Beckmann for the review. - -- Laurent Bigonville Wed, 10 Jul 2013 22:47:23 +0200 + -- Laurent Bigonville Thu, 11 Jul 2013 00:50:06 +0200 nut (2.6.5-2) experimental; urgency=low From 8157c709a1894b0ccb8f23889defafb503d412f0 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 11 Jul 2013 12:13:31 +0200 Subject: [PATCH 132/291] debian/control: Do not build nut-ipmi on hurd-i386 as freeipmi is not available on that platform. --- debian/changelog | 7 +++++++ debian/control | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 935da5e..e9e8a6f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +nut (2.6.5-4) UNRELEASED; urgency=low + + * debian/control: Do not build nut-ipmi on hurd-i386 as freeipmi is not + available on that platform. + + -- Laurent Bigonville Thu, 11 Jul 2013 12:12:51 +0200 + nut (2.6.5-3) unstable; urgency=low [ Laurent Bigonville ] diff --git a/debian/control b/debian/control index 14f1fec..66a37a8 100644 --- a/debian/control +++ b/debian/control @@ -14,8 +14,8 @@ Build-Depends: debhelper (>= 8.1.3), libpowerman0-dev (>= 2.3.3), libwrap0-dev (>= 7.6), python (>= 2.6.6-3~), - libfreeipmi-dev (>= 0.8.5), - libipmimonitoring-dev (>= 1.1.5-2) + libfreeipmi-dev (>= 0.8.5) [!hurd-i386], + libipmimonitoring-dev (>= 1.1.5-2) [!hurd-i386] Build-Depends-Indep: asciidoc (>= 8.6.3), docbook-xsl, dblatex (>= 0.2.5), @@ -107,7 +107,7 @@ Description: network UPS tools - SNMP driver Manager interface to the core NUT system. Package: nut-ipmi -Architecture: any +Architecture: linux-any kfreebsd-any Depends: ${shlibs:Depends}, ${misc:Depends}, nut (>= 1.4.1-pre1) Description: network UPS tools - IPMI driver Network UPS Tools (NUT) is a client/server monitoring system that From 9b4acffd6cbf531ed84327b21e026b1e14ba8183 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Thu, 11 Jul 2013 12:30:04 +0200 Subject: [PATCH 133/291] Release to unstable --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index e9e8a6f..976cbaa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -nut (2.6.5-4) UNRELEASED; urgency=low +nut (2.6.5-4) unstable; urgency=low * debian/control: Do not build nut-ipmi on hurd-i386 as freeipmi is not available on that platform. - -- Laurent Bigonville Thu, 11 Jul 2013 12:12:51 +0200 + -- Laurent Bigonville Thu, 11 Jul 2013 12:29:58 +0200 nut (2.6.5-3) unstable; urgency=low From 0469bcf177b88155c9c787cd5a559770b492a63f Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 16:08:55 +0100 Subject: [PATCH 134/291] New upstream release (Closes: #730183) --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 976cbaa..52fea5b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +nut (2.7.1-1) UNRELEASED; urgency=low + + * New upstream release (Closes: #730183) + + -- Laurent Bigonville Sun, 24 Nov 2013 16:02:21 +0100 + nut (2.6.5-4) unstable; urgency=low * debian/control: Do not build nut-ipmi on hurd-i386 as freeipmi is not From 74efce57ebeaec8d545ae598b7390853e88a955d Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 16:15:25 +0100 Subject: [PATCH 135/291] debian/rules, debian/control: Enable SSL support using libnss3 --- debian/changelog | 3 ++- debian/control | 3 ++- debian/rules | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 52fea5b..9043056 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,9 @@ nut (2.7.1-1) UNRELEASED; urgency=low * New upstream release (Closes: #730183) + * debian/rules, debian/control: Enable SSL support using libnss3 - -- Laurent Bigonville Sun, 24 Nov 2013 16:02:21 +0100 + -- Laurent Bigonville Sun, 24 Nov 2013 16:12:34 +0100 nut (2.6.5-4) unstable; urgency=low diff --git a/debian/control b/debian/control index 66a37a8..ec39863 100644 --- a/debian/control +++ b/debian/control @@ -15,7 +15,8 @@ Build-Depends: debhelper (>= 8.1.3), libwrap0-dev (>= 7.6), python (>= 2.6.6-3~), libfreeipmi-dev (>= 0.8.5) [!hurd-i386], - libipmimonitoring-dev (>= 1.1.5-2) [!hurd-i386] + libipmimonitoring-dev (>= 1.1.5-2) [!hurd-i386], + libnss3-dev Build-Depends-Indep: asciidoc (>= 8.6.3), docbook-xsl, dblatex (>= 0.2.5), diff --git a/debian/rules b/debian/rules index 06213c6..3c286a1 100755 --- a/debian/rules +++ b/debian/rules @@ -15,7 +15,7 @@ DEB_CONFIGURE_SYSCONFDIR := /etc/nut DEB_CONFIGURE_INCLUDEDIR := /usr/include DEB_CONFIGURE_MANDIR := /usr/share/man DEB_CONFIGURE_EXTRA_FLAGS := --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) \ - --without-ssl \ + --with-ssl --with-nss \ --with-cgi \ --with-dev \ --enable-static \ From 3bac34e7882995d92c46d2d3b404bd8f960c9240 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 16:23:35 +0100 Subject: [PATCH 136/291] Refresh debian/patches/0004-fix-systemd-service.patch --- debian/changelog | 3 ++- debian/patches/0004-fix-systemd-service.patch | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9043056..e7375ce 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,10 @@ nut (2.7.1-1) UNRELEASED; urgency=low * New upstream release (Closes: #730183) + - Refresh debian/patches/0004-fix-systemd-service.patch * debian/rules, debian/control: Enable SSL support using libnss3 - -- Laurent Bigonville Sun, 24 Nov 2013 16:12:34 +0100 + -- Laurent Bigonville Sun, 24 Nov 2013 16:23:21 +0100 nut (2.6.5-4) unstable; urgency=low diff --git a/debian/patches/0004-fix-systemd-service.patch b/debian/patches/0004-fix-systemd-service.patch index d33a250..7ba9621 100644 --- a/debian/patches/0004-fix-systemd-service.patch +++ b/debian/patches/0004-fix-systemd-service.patch @@ -8,13 +8,13 @@ Forwarded: not-needed [Unit] Description=Network UPS Tools - power device driver controller -After=local-fs.target network.target -+After=local-fs.target network.target udev-settle.service systemd-udev-settle.service -+Wants=udev-settle.service systemd-udev-settle.service ++After=local-fs.target network.target systemd-udev-settle.service ++Wants=systemd-udev-settle.service StopWhenUnneeded=yes [Service] --ExecStart=@driverexecdir@/upsdrvctl start --ExecStop=@driverexecdir@/upsdrvctl stop +-ExecStart=@DRVPATH@/upsdrvctl start +-ExecStop=@DRVPATH@/upsdrvctl stop +ExecStart=@SBINDIR@/upsdrvctl start +ExecStop=@SBINDIR@/upsdrvctl stop Type=forking From 8e8886fd9576d9f78136050bff7750a38b9eccd3 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 16:26:31 +0100 Subject: [PATCH 137/291] d/p/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch, d/p/0006-ups-conf-maxretry.patch: By default, retry to start the drivers up-to three times, this should mitigate races with slow devices (Closes: #694717) --- debian/changelog | 6 +- ...ry-options-for-upsdrvctl-and-drivers.patch | 133 ++++++++++++++++++ debian/patches/0006-ups-conf-maxretry.patch | 34 +++++ debian/patches/series | 2 + 4 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch create mode 100644 debian/patches/0006-ups-conf-maxretry.patch diff --git a/debian/changelog b/debian/changelog index e7375ce..72f68fe 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,8 +3,12 @@ nut (2.7.1-1) UNRELEASED; urgency=low * New upstream release (Closes: #730183) - Refresh debian/patches/0004-fix-systemd-service.patch * debian/rules, debian/control: Enable SSL support using libnss3 + * d/p/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch, + d/p/0006-ups-conf-maxretry.patch: By default, retry to start the drivers + up-to three times, this should mitigate races with slow devices + (Closes: #694717) - -- Laurent Bigonville Sun, 24 Nov 2013 16:23:21 +0100 + -- Laurent Bigonville Sun, 24 Nov 2013 16:26:05 +0100 nut (2.6.5-4) unstable; urgency=low diff --git a/debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch b/debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch new file mode 100644 index 0000000..ee3cb8f --- /dev/null +++ b/debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch @@ -0,0 +1,133 @@ +From ad1e78a22dc91b70bee871425cd5f74bb3c34c9f Mon Sep 17 00:00:00 2001 +From: Laurent Bigonville +Date: Thu, 21 Nov 2013 17:52:16 +0100 +Subject: [PATCH] Provide retry options for upsdrvctl and driver(s) + +As recently seen in Debian (bugs #694717 and #677143), it may be required to +have upsdrvctl retrying to start the driver in case of failure. More +specifically, a mix of init system (V and systemd), udev and USB device(s) can +result in the /dev entry not being available at driver startup, thus resulting +in a general failure to start NUT. This commit provides at least a way to +overcome this issue. A more suitable solution will require more work on NUT +design. + +This patch if based on Arnaud Quette proposal +--- + docs/man/ups.conf.txt | 15 +++++++++++++++ + docs/man/upsdrvctl.txt | 3 ++- + drivers/upsdrvctl.c | 37 ++++++++++++++++++++++++++++++++++--- + 3 files changed, 51 insertions(+), 4 deletions(-) + +diff --git a/docs/man/ups.conf.txt b/docs/man/ups.conf.txt +index 8a72a83..4877852 100644 +--- a/docs/man/ups.conf.txt ++++ b/docs/man/ups.conf.txt +@@ -58,6 +58,21 @@ directory, which is often /usr/local/ups/bin. + Optional. Same as the UPS field of the same name, but this is the + default for UPSes that don't have the field. + ++*maxretry*:: ++Optional. Specify the number of attempts to start the driver(s), in case of ++failure, before giving up. A delay of 'retrydelay' is inserted between each ++attempt. Caution should be taken when using this option, since it can ++impact the time taken by your system to start. +++ ++The default is 1 attempt. ++ ++*retrydelay*:: ++Optional. Specify the delay between each restart attempt of the driver(s), ++as specified by 'maxretry'. Caution should be taken when using this option, ++since it can impact the time taken by your system to start. +++ ++The default is 5 seconds. ++ + *pollinterval*:: + + Optional. The status of the UPS will be refreshed after a maximum +diff --git a/docs/man/upsdrvctl.txt b/docs/man/upsdrvctl.txt +index f19fd77..52e5509 100644 +--- a/docs/man/upsdrvctl.txt ++++ b/docs/man/upsdrvctl.txt +@@ -63,7 +63,8 @@ Without that argument, they operate on every UPS that is currently + configured. + + *start*:: +-Start the UPS driver(s). ++Start the UPS driver(s). In case of failure, further attempts may be executed ++by using the 'maxretry' and 'retrydelay' options - see linkman:ups.conf[5]. + + *stop*:: + Stop the UPS driver(s). +diff --git a/drivers/upsdrvctl.c b/drivers/upsdrvctl.c +index 623f753..0cdaa2c 100644 +--- a/drivers/upsdrvctl.c ++++ b/drivers/upsdrvctl.c +@@ -45,6 +45,12 @@ + /* timer - keeps us from getting stuck if a driver hangs */ + static int maxstartdelay = 45; + ++ /* counter - retry that many time(s) to start the driver if it fails to */ ++static int maxretry = 1; ++ ++ /* timer - delay between each restart attempt of the driver(s) */ ++static int retrydelay = 5; ++ + /* Directory where driver executables live */ + static char *driverpath = NULL; + +@@ -65,6 +71,12 @@ void do_upsconf_args(char *upsname, char *var, char *val) + driverpath = xstrdup(val); + } + ++ if (!strcmp(var, "maxretry")) ++ maxretry = atoi(val); ++ ++ if (!strcmp(var, "retrydelay")) ++ retrydelay = atoi(val); ++ + /* ignore anything else - it's probably for main */ + + return; +@@ -248,6 +260,7 @@ static void start_driver(const ups_t *ups) + char *argv[8]; + char dfn[SMALLBUF]; + int ret, arg = 0; ++ int initial_exec_error = exec_error, drv_maxretry = maxretry; + struct stat fs; + + upsdebugx(1, "Starting UPS: %s", ups->upsname); +@@ -276,10 +289,28 @@ static void start_driver(const ups_t *ups) + /* tie it off */ + argv[arg++] = NULL; + +- debugcmdline(2, "exec: ", argv); + +- if (!testmode) { +- forkexec(argv, ups); ++ while (drv_maxretry > 0) { ++ int cur_exec_error = exec_error; ++ ++ upsdebugx(2, "%i remaining attempts", drv_maxretry); ++ debugcmdline(2, "exec: ", argv); ++ drv_maxretry--; ++ ++ if (!testmode) { ++ forkexec(argv, ups); ++ } ++ ++ /* driver command succeeded */ ++ if (cur_exec_error == exec_error) { ++ drv_maxretry = 0; ++ exec_error = initial_exec_error; ++ } ++ else { ++ /* otherwise, retry if still needed */ ++ if (drv_maxretry > 0) ++ sleep (retrydelay); ++ } + } + } + +-- +1.8.4 + diff --git a/debian/patches/0006-ups-conf-maxretry.patch b/debian/patches/0006-ups-conf-maxretry.patch new file mode 100644 index 0000000..dd8ef93 --- /dev/null +++ b/debian/patches/0006-ups-conf-maxretry.patch @@ -0,0 +1,34 @@ +--- a/conf/ups.conf.sample ++++ b/conf/ups.conf.sample +@@ -40,6 +40,24 @@ + # + # Configuration directives + # ------------------------ ++# ++# These directives are used by upsdrvctl only and should be specified outside ++# of a driver definition: ++# ++# maxretry: Optional. Specify the number of attempts to start the driver(s), ++# in case of failure, before giving up. A delay of 'retrydelay' is ++# inserted between each attempt. Caution should be taken when using ++# this option, since it can impact the time taken by your system to ++# start. ++# ++# The default is 1 attempt. ++# ++# retrydelay: Optional. Specify the delay between each restart attempt of the ++# driver(s), as specified by 'maxretry'. Caution should be taken ++# when using this option, since it can impact the time taken by your ++# system to start. ++# ++# The default is 5 seconds. + # + # These directives are common to all drivers that support ups.conf: + # +@@ -102,3 +120,6 @@ + # + # To find out if your driver supports any extra settings, start it with + # the -h option and/or read the driver's documentation. ++ ++# Set maxretry to 3 by default, this should mitigate race with slow devices: ++maxretry = 3 diff --git a/debian/patches/series b/debian/patches/series index 540178d..aaccd1f 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1,5 @@ 0003-install-dev-files-in-usr.patch 0002-nut-monitor-paths.patch 0004-fix-systemd-service.patch +0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch +0006-ups-conf-maxretry.patch From a62d95150d95befc77c2c1a1b38ed41e93cbeda3 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 17:07:08 +0100 Subject: [PATCH 138/291] Rename libupsclient1 to libupsclient3 following the soname bump, rename libupsclient1-dev to libupsclient-dev, the package is not co-installable anyway --- debian/changelog | 5 +++- debian/control | 8 +++--- debian/libupsclient-dev.install | 9 +++++++ debian/libupsclient-dev.manpages | 2 ++ debian/libupsclient1-dev.install | 4 --- debian/libupsclient1-dev.manpages | 1 - debian/libupsclient1.symbols | 25 ----------------- ...sclient1.install => libupsclient3.install} | 0 debian/libupsclient3.symbols | 27 +++++++++++++++++++ debian/rules | 2 +- 10 files changed, 48 insertions(+), 35 deletions(-) create mode 100644 debian/libupsclient-dev.install create mode 100644 debian/libupsclient-dev.manpages delete mode 100644 debian/libupsclient1-dev.install delete mode 100644 debian/libupsclient1-dev.manpages delete mode 100644 debian/libupsclient1.symbols rename debian/{libupsclient1.install => libupsclient3.install} (100%) create mode 100644 debian/libupsclient3.symbols diff --git a/debian/changelog b/debian/changelog index 72f68fe..531012a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,13 +2,16 @@ nut (2.7.1-1) UNRELEASED; urgency=low * New upstream release (Closes: #730183) - Refresh debian/patches/0004-fix-systemd-service.patch + - Rename libupsclient1 to libupsclient3 following the soname bump, rename + libupsclient1-dev to libupsclient-dev, the package is not co-installable + anyway * debian/rules, debian/control: Enable SSL support using libnss3 * d/p/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch, d/p/0006-ups-conf-maxretry.patch: By default, retry to start the drivers up-to three times, this should mitigate races with slow devices (Closes: #694717) - -- Laurent Bigonville Sun, 24 Nov 2013 16:26:05 +0100 + -- Laurent Bigonville Sun, 24 Nov 2013 16:59:49 +0100 nut (2.6.5-4) unstable; urgency=low diff --git a/debian/control b/debian/control index ec39863..b8cf451 100644 --- a/debian/control +++ b/debian/control @@ -164,7 +164,7 @@ Description: network UPS tools - documentation . This package contains FAQ, user, developer and packager documentation. -Package: libupsclient1 +Package: libupsclient3 Section: libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} @@ -179,10 +179,12 @@ Description: network UPS tools - client library . This package provides the shared client library. -Package: libupsclient1-dev +Package: libupsclient-dev Section: libdevel Architecture: any -Depends: libupsclient1 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Depends: libupsclient3 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Conflicts: libupsclient1-dev +Replaces: libupsclient1-dev Description: network UPS tools - development files Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and diff --git a/debian/libupsclient-dev.install b/debian/libupsclient-dev.install new file mode 100644 index 0000000..42e1e8a --- /dev/null +++ b/debian/libupsclient-dev.install @@ -0,0 +1,9 @@ +usr/lib/*/libupsclient.so +usr/lib/*/libupsclient.a +usr/lib/*/pkgconfig/libupsclient.pc +usr/include/nut-scan.h +usr/include/nutscan-device.h +usr/include/nutscan-init.h +usr/include/nutscan-ip.h +usr/include/parseconf.h +usr/include/upsclient.h diff --git a/debian/libupsclient-dev.manpages b/debian/libupsclient-dev.manpages new file mode 100644 index 0000000..141a1b1 --- /dev/null +++ b/debian/libupsclient-dev.manpages @@ -0,0 +1,2 @@ +debian/tmp/usr/share/man/man3/nutscan*.3 +debian/tmp/usr/share/man/man3/upscli*.3 diff --git a/debian/libupsclient1-dev.install b/debian/libupsclient1-dev.install deleted file mode 100644 index 5b3120a..0000000 --- a/debian/libupsclient1-dev.install +++ /dev/null @@ -1,4 +0,0 @@ -usr/lib/*/libupsclient.so -usr/lib/*/libupsclient.a -usr/lib/*/pkgconfig/libupsclient.pc -usr/include diff --git a/debian/libupsclient1-dev.manpages b/debian/libupsclient1-dev.manpages deleted file mode 100644 index 242943a..0000000 --- a/debian/libupsclient1-dev.manpages +++ /dev/null @@ -1 +0,0 @@ -debian/tmp/usr/share/man/man3/*.3 diff --git a/debian/libupsclient1.symbols b/debian/libupsclient1.symbols deleted file mode 100644 index 85e4066..0000000 --- a/debian/libupsclient1.symbols +++ /dev/null @@ -1,25 +0,0 @@ -libupsclient.so.1 libupsclient1 #MINVER# - pconf_char@Base 2.4.1 - pconf_encode@Base 2.4.1 - pconf_file_begin@Base 2.4.1 - pconf_file_next@Base 2.4.1 - pconf_finish@Base 2.4.1 - pconf_init@Base 2.4.1 - pconf_line@Base 2.4.1 - pconf_parse_error@Base 2.4.1 - upscli_connect@Base 2.4.1 - upscli_disconnect@Base 2.4.1 - upscli_errlist@Base 2.4.1 - upscli_fd@Base 2.4.1 - upscli_get@Base 2.4.1 - upscli_list_next@Base 2.4.1 - upscli_list_start@Base 2.4.1 - upscli_readline@Base 2.4.1 - upscli_sendline@Base 2.4.1 - upscli_splitaddr@Base 2.4.1 - upscli_splitname@Base 2.4.1 - upscli_ssl@Base 2.4.1 - upscli_sslcert@Base 2.4.1 - upscli_strerror@Base 2.4.1 - upscli_upserror@Base 2.4.1 - upscli_tryconnect@Base 2.6.2 diff --git a/debian/libupsclient1.install b/debian/libupsclient3.install similarity index 100% rename from debian/libupsclient1.install rename to debian/libupsclient3.install diff --git a/debian/libupsclient3.symbols b/debian/libupsclient3.symbols new file mode 100644 index 0000000..4fc0a9f --- /dev/null +++ b/debian/libupsclient3.symbols @@ -0,0 +1,27 @@ +libupsclient.so.3 libupsclient3 #MINVER# + pconf_char@Base 2.7.1 + pconf_encode@Base 2.7.1 + pconf_file_begin@Base 2.7.1 + pconf_file_next@Base 2.7.1 + pconf_finish@Base 2.7.1 + pconf_init@Base 2.7.1 + pconf_line@Base 2.7.1 + pconf_parse_error@Base 2.7.1 + upscli_add_host_cert@Base 2.7.1 + upscli_cleanup@Base 2.7.1 + upscli_connect@Base 2.7.1 + upscli_disconnect@Base 2.7.1 + upscli_errlist@Base 2.7.1 + upscli_fd@Base 2.7.1 + upscli_get@Base 2.7.1 + upscli_init@Base 2.7.1 + upscli_list_next@Base 2.7.1 + upscli_list_start@Base 2.7.1 + upscli_readline@Base 2.7.1 + upscli_sendline@Base 2.7.1 + upscli_splitaddr@Base 2.7.1 + upscli_splitname@Base 2.7.1 + upscli_ssl@Base 2.7.1 + upscli_strerror@Base 2.7.1 + upscli_upserror@Base 2.7.1 + upscli_tryconnect@Base 2.7.1 diff --git a/debian/rules b/debian/rules index 3c286a1..c72e21f 100755 --- a/debian/rules +++ b/debian/rules @@ -66,7 +66,7 @@ common-install-arch:: mv $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libupsclient.a \ $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.a rm -f $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so - ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.1 \ + ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.3 \ $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so # Install systemd files only on systems where it's supported From 0389780de8760566dc3239e56de16431c7b9e478 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 17:11:05 +0100 Subject: [PATCH 139/291] debian/nut-server.install, debian/nut-server.manpages: Install new drivers --- debian/changelog | 3 ++- debian/nut-server.install | 5 +++++ debian/nut-server.manpages | 8 +++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 531012a..62c4738 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,8 +10,9 @@ nut (2.7.1-1) UNRELEASED; urgency=low d/p/0006-ups-conf-maxretry.patch: By default, retry to start the drivers up-to three times, this should mitigate races with slow devices (Closes: #694717) + * debian/nut-server.install, debian/nut-server.manpages: Install new drivers - -- Laurent Bigonville Sun, 24 Nov 2013 16:59:49 +0100 + -- Laurent Bigonville Sun, 24 Nov 2013 17:10:44 +0100 nut (2.6.5-4) unstable; urgency=low diff --git a/debian/nut-server.install b/debian/nut-server.install index ad36c03..1a61309 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -50,3 +50,8 @@ debian/tmp/lib/nut/dummy-ups debian/tmp/lib/nut/richcomm_usb debian/tmp/lib/nut/liebert-esp2 debian/tmp/lib/nut/microdowell +debian/tmp/lib/nut/al175 +debian/tmp/lib/nut/apcupsd-ups +debian/tmp/lib/nut/nutdrv_qx +debian/tmp/lib/nut/riello_ser +debian/tmp/lib/nut/riello_usb diff --git a/debian/nut-server.manpages b/debian/nut-server.manpages index f2f6a33..44de902 100644 --- a/debian/nut-server.manpages +++ b/debian/nut-server.manpages @@ -11,7 +11,6 @@ debian/tmp/usr/share/man/man8/bestfcom.8 debian/tmp/usr/share/man/man8/bestuferrups.8 debian/tmp/usr/share/man/man8/bestups.8 debian/tmp/usr/share/man/man8/bestfortress.8 -debian/tmp/usr/share/man/man8/blazer.8 debian/tmp/usr/share/man/man8/clone.8 debian/tmp/usr/share/man/man8/dummy-ups.8 debian/tmp/usr/share/man/man8/etapro.8 @@ -44,3 +43,10 @@ debian/tmp/usr/share/man/man8/upsd.8 debian/tmp/usr/share/man/man8/upsdrvctl.8 debian/tmp/usr/share/man/man8/usbhid-ups.8 debian/tmp/usr/share/man/man8/victronups.8 +debian/tmp/usr/share/man/man8/al175.8 +debian/tmp/usr/share/man/man8/apcupsd-ups.8 +debian/tmp/usr/share/man/man8/blazer_ser.8 +debian/tmp/usr/share/man/man8/blazer_usb.8 +debian/tmp/usr/share/man/man8/nutdrv_qx.8 +debian/tmp/usr/share/man/man8/riello_ser.8 +debian/tmp/usr/share/man/man8/riello_usb.8 From cbf85f6779f4f7798d7e424634302c45397d3490 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 17:54:31 +0100 Subject: [PATCH 140/291] Move bash-completion file to /usr/share/bash-completion/ --- debian/changelog | 3 ++- debian/nut-client.install | 2 +- debian/nut-client.maintscript | 1 + debian/rules | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 debian/nut-client.maintscript diff --git a/debian/changelog b/debian/changelog index 62c4738..83c3488 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,8 +11,9 @@ nut (2.7.1-1) UNRELEASED; urgency=low up-to three times, this should mitigate races with slow devices (Closes: #694717) * debian/nut-server.install, debian/nut-server.manpages: Install new drivers + * Move bash-completion file to /usr/share/bash-completion/ - -- Laurent Bigonville Sun, 24 Nov 2013 17:10:44 +0100 + -- Laurent Bigonville Sun, 24 Nov 2013 17:53:49 +0100 nut (2.6.5-4) unstable; urgency=low diff --git a/debian/nut-client.install b/debian/nut-client.install index b4b7d7f..b899f84 100644 --- a/debian/nut-client.install +++ b/debian/nut-client.install @@ -5,7 +5,6 @@ debian/tmp/bin/upscmd debian/tmp/sbin/upsmon debian/tmp/sbin/upssched debian/tmp/bin/upssched-cmd -debian/tmp/etc/bash_completion.d/nut debian/tmp/etc/nut/nut.conf debian/tmp/etc/nut/upsmon.conf debian/tmp/etc/nut/upssched.conf @@ -18,3 +17,4 @@ debian/tmp/usr/share/augeas/lenses/dist/nutupsmonconf.aug debian/tmp/usr/share/augeas/lenses/dist/nutupsschedconf.aug debian/tmp/usr/share/augeas/lenses/dist/nutupssetconf.aug debian/tmp/usr/share/augeas/lenses/dist/tests/test_nut.aug +debian/tmp/usr/share/bash-completion/completions/nut diff --git a/debian/nut-client.maintscript b/debian/nut-client.maintscript new file mode 100644 index 0000000..692b715 --- /dev/null +++ b/debian/nut-client.maintscript @@ -0,0 +1 @@ +rm_conffile /etc/bash_completion.d/nut 2.7.1-1~ diff --git a/debian/rules b/debian/rules index c72e21f..19cbcea 100755 --- a/debian/rules +++ b/debian/rules @@ -40,9 +40,9 @@ endif common-install-arch:: # install the bash completion script - mkdir -p $(CURDIR)/debian/tmp/etc/bash_completion.d + mkdir -p $(CURDIR)/debian/tmp/usr/share/bash-completion/completions/ cp $(CURDIR)/scripts/misc/nut.bash_completion \ - $(CURDIR)/debian/tmp/etc/bash_completion.d/nut + $(CURDIR)/debian/tmp/usr/share/bash-completion/completions/nut # install the avahi service file mkdir -p $(CURDIR)/debian/tmp/etc/avahi/services From bd7c860a72b68a3f6efded91bfb79ffa31c6dbba Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 19:10:48 +0100 Subject: [PATCH 141/291] debian/patches/0007-killpower-path.patch: Revert POWERDOWNFLAG back to /etc/killpower --- debian/changelog | 4 +++- debian/patches/0007-killpower-path.patch | 11 +++++++++++ debian/patches/series | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 debian/patches/0007-killpower-path.patch diff --git a/debian/changelog b/debian/changelog index 83c3488..1b6fd10 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,8 +12,10 @@ nut (2.7.1-1) UNRELEASED; urgency=low (Closes: #694717) * debian/nut-server.install, debian/nut-server.manpages: Install new drivers * Move bash-completion file to /usr/share/bash-completion/ + * debian/patches/0007-killpower-path.patch: Revert POWERDOWNFLAG back to + /etc/killpower - -- Laurent Bigonville Sun, 24 Nov 2013 17:53:49 +0100 + -- Laurent Bigonville Sun, 24 Nov 2013 19:09:07 +0100 nut (2.6.5-4) unstable; urgency=low diff --git a/debian/patches/0007-killpower-path.patch b/debian/patches/0007-killpower-path.patch new file mode 100644 index 0000000..537b585 --- /dev/null +++ b/debian/patches/0007-killpower-path.patch @@ -0,0 +1,11 @@ +--- a/conf/upsmon.conf.sample.in ++++ b/conf/upsmon.conf.sample.in +@@ -196,7 +196,7 @@ DEADTIME 15 + # + # See the shutdown.txt file in the docs subdirectory for more information. + +-POWERDOWNFLAG @CONFPATH@/killpower ++POWERDOWNFLAG /etc/killpower + + # -------------------------------------------------------------------------- + # NOTIFYMSG - change messages sent by upsmon when certain events occur diff --git a/debian/patches/series b/debian/patches/series index aaccd1f..45dbe55 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -3,3 +3,4 @@ 0004-fix-systemd-service.patch 0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch 0006-ups-conf-maxretry.patch +0007-killpower-path.patch From c68443d7956a048b23c8a53ab3c979268b2e5368 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 19:41:45 +0100 Subject: [PATCH 142/291] debian/nut-client.lintian-overrides: Add override for systemd-no-service-for-init-script ups-monitor --- debian/changelog | 4 +++- debian/nut-client.lintian-overrides | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 1b6fd10..7b3d2a8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,8 +14,10 @@ nut (2.7.1-1) UNRELEASED; urgency=low * Move bash-completion file to /usr/share/bash-completion/ * debian/patches/0007-killpower-path.patch: Revert POWERDOWNFLAG back to /etc/killpower + * debian/nut-client.lintian-overrides: Add override for + systemd-no-service-for-init-script ups-monitor - -- Laurent Bigonville Sun, 24 Nov 2013 19:09:07 +0100 + -- Laurent Bigonville Sun, 24 Nov 2013 19:41:22 +0100 nut (2.6.5-4) unstable; urgency=low diff --git a/debian/nut-client.lintian-overrides b/debian/nut-client.lintian-overrides index 4651289..4830620 100644 --- a/debian/nut-client.lintian-overrides +++ b/debian/nut-client.lintian-overrides @@ -1 +1,2 @@ nut-client: script-in-etc-init.d-not-registered-via-update-rc.d +nut-client: systemd-no-service-for-init-script ups-monitor From bbd9f7852baf8dee6c50085374ef8e73dafc0e3f Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 20:11:37 +0100 Subject: [PATCH 143/291] debian/rules: Drop static ordering for the initscripts and pass --restart-after-upgrade option to dh_installinit and dh_systemd_start to minimize the downtime of the daemons --- debian/changelog | 5 ++++- debian/rules | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7b3d2a8..4b03b7d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,8 +16,11 @@ nut (2.7.1-1) UNRELEASED; urgency=low /etc/killpower * debian/nut-client.lintian-overrides: Add override for systemd-no-service-for-init-script ups-monitor + * debian/rules: Drop static ordering for the initscripts and pass + --restart-after-upgrade option to dh_installinit and dh_systemd_start to + minimize the downtime of the daemons - -- Laurent Bigonville Sun, 24 Nov 2013 19:41:22 +0100 + -- Laurent Bigonville Sun, 24 Nov 2013 20:06:43 +0100 nut (2.6.5-4) unstable; urgency=low diff --git a/debian/rules b/debian/rules index 19cbcea..25c1779 100755 --- a/debian/rules +++ b/debian/rules @@ -102,8 +102,10 @@ common-install-indep:: binary-install/nut-monitor:: dh_python2 -pnut-monitor -DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut-server -- start 50 2 3 4 5 . stop 51 0 1 6 . -DEB_DH_INSTALLINIT_ARGS_nut-client := --init-script=nut-client -- start 51 2 3 4 5 . stop 50 0 1 6 . +DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut-server --restart-after-upgrade +DEB_DH_INSTALLINIT_ARGS_nut-client := --init-script=nut-client --restart-after-upgrade +DEB_DH_SYSTEMD_START_ARGS_nut-server := --restart-after-upgrade +DEB_DH_SYSTEMD_START_ARGS_nut-client := --restart-after-upgrade DEB_DH_COMPRESS_ARGS_nut-doc := -X.pdf ifeq (linux,$(DEB_HOST_ARCH_OS)) From e02d9266916613c47bdfe1e7f2b0a6c8c88849e5 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 20:58:03 +0100 Subject: [PATCH 144/291] Release to unstable --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 4b03b7d..bfed15f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.7.1-1) UNRELEASED; urgency=low +nut (2.7.1-1) unstable; urgency=low * New upstream release (Closes: #730183) - Refresh debian/patches/0004-fix-systemd-service.patch @@ -20,7 +20,7 @@ nut (2.7.1-1) UNRELEASED; urgency=low --restart-after-upgrade option to dh_installinit and dh_systemd_start to minimize the downtime of the daemons - -- Laurent Bigonville Sun, 24 Nov 2013 20:06:43 +0100 + -- Laurent Bigonville Sun, 24 Nov 2013 20:57:51 +0100 nut (2.6.5-4) unstable; urgency=low From 9b564eb7df6ce14344efa89a4b2915ee008e6b21 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 9 Dec 2013 20:03:34 +0100 Subject: [PATCH 145/291] debian/rules, debian/control, d/p/0004-fix-systemd-service.patch: Use a symlink instead of an Alias= to mask the SysV initscript --- debian/changelog | 7 +++++++ debian/control | 2 +- debian/patches/0004-fix-systemd-service.patch | 7 ------- debian/rules | 3 +++ 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/debian/changelog b/debian/changelog index bfed15f..e4653ae 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +nut (2.7.1-2) UNRELEASED; urgency=low + + * debian/rules, debian/control, d/p/0004-fix-systemd-service.patch: Use a + symlink instead of an Alias= to mask the SysV initscript + + -- Laurent Bigonville Mon, 09 Dec 2013 20:03:24 +0100 + nut (2.7.1-1) unstable; urgency=low * New upstream release (Closes: #730183) diff --git a/debian/control b/debian/control index b8cf451..ac8ef40 100644 --- a/debian/control +++ b/debian/control @@ -6,7 +6,7 @@ Uploaders: Laurent Bigonville Build-Depends: debhelper (>= 8.1.3), cdbs (>= 0.4.122~), autotools-dev, - dh-systemd (>= 1.4), + dh-systemd (>= 1.14), libgd-dev | libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, libusb-dev (>= 0.1.8), diff --git a/debian/patches/0004-fix-systemd-service.patch b/debian/patches/0004-fix-systemd-service.patch index 7ba9621..b6dff75 100644 --- a/debian/patches/0004-fix-systemd-service.patch +++ b/debian/patches/0004-fix-systemd-service.patch @@ -19,13 +19,6 @@ Forwarded: not-needed +ExecStop=@SBINDIR@/upsdrvctl stop Type=forking ---- a/scripts/systemd/nut-monitor.service.in -+++ b/scripts/systemd/nut-monitor.service.in -@@ -9,3 +9,4 @@ Type=forking - - [Install] - WantedBy=multi-user.target -+Alias=nut-client.service --- a/scripts/systemd/nutshutdown.in +++ b/scripts/systemd/nutshutdown.in @@ -1,2 +1,2 @@ diff --git a/debian/rules b/debian/rules index 25c1779..570cf28 100755 --- a/debian/rules +++ b/debian/rules @@ -80,6 +80,9 @@ ifeq (linux,$(DEB_HOST_ARCH_OS)) install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-server.service \ $(CURDIR)/debian/nut-server/lib/systemd/system/nut-server.service + # Add a symlink to mask the LSB initscript + ln -s nut-monitor.service $(CURDIR)/debian/nut-client/lib/systemd/system/nut-client.service + # Install tmpfiles config file to create /run/nut directory install -m 644 -D $(CURDIR)/debian/nut-client.tmpfiles \ $(CURDIR)/debian/nut-client/usr/lib/tmpfiles.d/nut-client.conf From 032745e879f9c66bf4f79d90f89f50e4f8c165ee Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 23 Dec 2013 13:40:06 +0100 Subject: [PATCH 146/291] debian/control: Bump Standards-Version to 3.9.5 (no further changes) --- debian/changelog | 3 ++- debian/control | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index e4653ae..0e91261 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,8 +2,9 @@ nut (2.7.1-2) UNRELEASED; urgency=low * debian/rules, debian/control, d/p/0004-fix-systemd-service.patch: Use a symlink instead of an Alias= to mask the SysV initscript + * debian/control: Bump Standards-Version to 3.9.5 (no further changes) - -- Laurent Bigonville Mon, 09 Dec 2013 20:03:24 +0100 + -- Laurent Bigonville Mon, 23 Dec 2013 13:39:49 +0100 nut (2.7.1-1) unstable; urgency=low diff --git a/debian/control b/debian/control index ac8ef40..3e32d44 100644 --- a/debian/control +++ b/debian/control @@ -21,7 +21,7 @@ Build-Depends-Indep: asciidoc (>= 8.6.3), docbook-xsl, dblatex (>= 0.2.5), libxml2-utils -Standards-Version: 3.9.4 +Standards-Version: 3.9.5 Homepage: http://www.networkupstools.org/ Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/nut.git;a=summary Vcs-Git: git://anonscm.debian.org/collab-maint/nut.git From 106ff01fcf87c9faf3d5cc9baf311fa2a660a491 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 29 Dec 2013 16:35:48 +0100 Subject: [PATCH 147/291] debian/tests/control: Add lsb-release and netcat to the dependencies (Closes: #733189) --- debian/changelog | 4 +++- debian/tests/control | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 0e91261..85d0316 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,8 +3,10 @@ nut (2.7.1-2) UNRELEASED; urgency=low * debian/rules, debian/control, d/p/0004-fix-systemd-service.patch: Use a symlink instead of an Alias= to mask the SysV initscript * debian/control: Bump Standards-Version to 3.9.5 (no further changes) + * debian/tests/control: Add lsb-release and netcat to the dependencies + (Closes: #733189) - -- Laurent Bigonville Mon, 23 Dec 2013 13:39:49 +0100 + -- Laurent Bigonville Sun, 29 Dec 2013 16:35:33 +0100 nut (2.7.1-1) unstable; urgency=low diff --git a/debian/tests/control b/debian/tests/control index b4bdda5..d8f2976 100644 --- a/debian/tests/control +++ b/debian/tests/control @@ -1,3 +1,3 @@ Tests: nut -Depends: python-unit, nut-server, nut-client +Depends: python-unit, nut-server, nut-client, lsb-release, netcat Restrictions: needs-root From d0947d03cc8543ff8bef0ee1a5f155ea41b52854 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 22 Apr 2014 20:43:14 +0200 Subject: [PATCH 148/291] New upstream release * New upstream release - Fix the undefined references (Closes: #731156) --- debian/changelog | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 85d0316..fa0a536 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,12 +1,14 @@ -nut (2.7.1-2) UNRELEASED; urgency=low +nut (2.7.2-1) UNRELEASED; urgency=low + * New upstream release + - Fix the undefined references (Closes: #731156) * debian/rules, debian/control, d/p/0004-fix-systemd-service.patch: Use a symlink instead of an Alias= to mask the SysV initscript * debian/control: Bump Standards-Version to 3.9.5 (no further changes) * debian/tests/control: Add lsb-release and netcat to the dependencies (Closes: #733189) - -- Laurent Bigonville Sun, 29 Dec 2013 16:35:33 +0100 + -- Laurent Bigonville Tue, 22 Apr 2014 20:42:08 +0200 nut (2.7.1-1) unstable; urgency=low From a766575eca0f0f082a343af725fe1e1b478577b2 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 24 Nov 2013 18:20:21 +0100 Subject: [PATCH 149/291] debian/control, debian/rules: Call dh-autoreconf and pass LDFLAGS to minimize runtime dependencies --- debian/changelog | 2 ++ debian/control | 1 + debian/rules | 8 ++++++++ 3 files changed, 11 insertions(+) diff --git a/debian/changelog b/debian/changelog index fa0a536..4c88058 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,8 @@ nut (2.7.2-1) UNRELEASED; urgency=low * debian/control: Bump Standards-Version to 3.9.5 (no further changes) * debian/tests/control: Add lsb-release and netcat to the dependencies (Closes: #733189) + * debian/control, debian/rules: Call dh-autoreconf and pass LDFLAGS to + minimize runtime dependencies -- Laurent Bigonville Tue, 22 Apr 2014 20:42:08 +0200 diff --git a/debian/control b/debian/control index 3e32d44..b821640 100644 --- a/debian/control +++ b/debian/control @@ -6,6 +6,7 @@ Uploaders: Laurent Bigonville Build-Depends: debhelper (>= 8.1.3), cdbs (>= 0.4.122~), autotools-dev, + dh-autoreconf, dh-systemd (>= 1.14), libgd-dev | libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, diff --git a/debian/rules b/debian/rules index 570cf28..4e13232 100755 --- a/debian/rules +++ b/debian/rules @@ -4,12 +4,20 @@ include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/autotools.mk include /usr/share/cdbs/1/class/python-module.mk +include /usr/share/cdbs/1/rules/autoreconf.mk +# We cannot call autoreconf -f -i as it updates INSTALL which is used for doc +# generation +DEB_DH_AUTORECONF_ARGS = --as-needed + DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null) # List any files which are not installed include /usr/share/cdbs/1/rules/utils.mk common-binary-post-install-arch:: list-missing +DEB_LDFLAGS_MAINT_APPEND=-Wl,-z,defs -Wl,-O1 -Wl,--as-needed +include /usr/share/dpkg/buildflags.mk + DEB_CONFIGURE_PREFIX := DEB_CONFIGURE_SYSCONFDIR := /etc/nut DEB_CONFIGURE_INCLUDEDIR := /usr/include From c94a1d80c66ce7e839e79c81cacb7fee402a704e Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 22 Apr 2014 20:55:43 +0200 Subject: [PATCH 150/291] debian/patches/0004-fix-systemd-service.patch: Refreshed --- debian/changelog | 3 ++- debian/patches/0004-fix-systemd-service.patch | 14 +------------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/debian/changelog b/debian/changelog index 4c88058..b8b9430 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ nut (2.7.2-1) UNRELEASED; urgency=low * New upstream release - Fix the undefined references (Closes: #731156) + - debian/patches/0004-fix-systemd-service.patch: Refreshed * debian/rules, debian/control, d/p/0004-fix-systemd-service.patch: Use a symlink instead of an Alias= to mask the SysV initscript * debian/control: Bump Standards-Version to 3.9.5 (no further changes) @@ -10,7 +11,7 @@ nut (2.7.2-1) UNRELEASED; urgency=low * debian/control, debian/rules: Call dh-autoreconf and pass LDFLAGS to minimize runtime dependencies - -- Laurent Bigonville Tue, 22 Apr 2014 20:42:08 +0200 + -- Laurent Bigonville Tue, 22 Apr 2014 20:55:27 +0200 nut (2.7.1-1) unstable; urgency=low diff --git a/debian/patches/0004-fix-systemd-service.patch b/debian/patches/0004-fix-systemd-service.patch index b6dff75..16df1c7 100644 --- a/debian/patches/0004-fix-systemd-service.patch +++ b/debian/patches/0004-fix-systemd-service.patch @@ -4,7 +4,7 @@ Forwarded: not-needed --- a/scripts/systemd/nut-driver.service.in +++ b/scripts/systemd/nut-driver.service.in -@@ -1,10 +1,11 @@ +@@ -1,6 +1,7 @@ [Unit] Description=Network UPS Tools - power device driver controller -After=local-fs.target network.target @@ -13,15 +13,3 @@ Forwarded: not-needed StopWhenUnneeded=yes [Service] --ExecStart=@DRVPATH@/upsdrvctl start --ExecStop=@DRVPATH@/upsdrvctl stop -+ExecStart=@SBINDIR@/upsdrvctl start -+ExecStop=@SBINDIR@/upsdrvctl stop - Type=forking - ---- a/scripts/systemd/nutshutdown.in -+++ b/scripts/systemd/nutshutdown.in -@@ -1,2 +1,2 @@ - #!/bin/sh --@SBINDIR@/upsmon -K >/dev/null 2>&1 && @driverexecdir@/upsdrvctl shutdown -+@SBINDIR@/upsmon -K >/dev/null 2>&1 && @SBINDIR@/upsdrvctl shutdown From 6621b7de39f8b34545f9ee65d92e4c56c7d7a9f6 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 22 Apr 2014 20:57:00 +0200 Subject: [PATCH 151/291] Drop d/p/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch: Merged upstream --- debian/changelog | 4 +- ...ry-options-for-upsdrvctl-and-drivers.patch | 133 ------------------ debian/patches/series | 1 - 3 files changed, 3 insertions(+), 135 deletions(-) delete mode 100644 debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch diff --git a/debian/changelog b/debian/changelog index b8b9430..5245d7d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,8 @@ nut (2.7.2-1) UNRELEASED; urgency=low * New upstream release - Fix the undefined references (Closes: #731156) - debian/patches/0004-fix-systemd-service.patch: Refreshed + - Drop d/p/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch: + Merged upstream * debian/rules, debian/control, d/p/0004-fix-systemd-service.patch: Use a symlink instead of an Alias= to mask the SysV initscript * debian/control: Bump Standards-Version to 3.9.5 (no further changes) @@ -11,7 +13,7 @@ nut (2.7.2-1) UNRELEASED; urgency=low * debian/control, debian/rules: Call dh-autoreconf and pass LDFLAGS to minimize runtime dependencies - -- Laurent Bigonville Tue, 22 Apr 2014 20:55:27 +0200 + -- Laurent Bigonville Tue, 22 Apr 2014 20:56:12 +0200 nut (2.7.1-1) unstable; urgency=low diff --git a/debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch b/debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch deleted file mode 100644 index ee3cb8f..0000000 --- a/debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch +++ /dev/null @@ -1,133 +0,0 @@ -From ad1e78a22dc91b70bee871425cd5f74bb3c34c9f Mon Sep 17 00:00:00 2001 -From: Laurent Bigonville -Date: Thu, 21 Nov 2013 17:52:16 +0100 -Subject: [PATCH] Provide retry options for upsdrvctl and driver(s) - -As recently seen in Debian (bugs #694717 and #677143), it may be required to -have upsdrvctl retrying to start the driver in case of failure. More -specifically, a mix of init system (V and systemd), udev and USB device(s) can -result in the /dev entry not being available at driver startup, thus resulting -in a general failure to start NUT. This commit provides at least a way to -overcome this issue. A more suitable solution will require more work on NUT -design. - -This patch if based on Arnaud Quette proposal ---- - docs/man/ups.conf.txt | 15 +++++++++++++++ - docs/man/upsdrvctl.txt | 3 ++- - drivers/upsdrvctl.c | 37 ++++++++++++++++++++++++++++++++++--- - 3 files changed, 51 insertions(+), 4 deletions(-) - -diff --git a/docs/man/ups.conf.txt b/docs/man/ups.conf.txt -index 8a72a83..4877852 100644 ---- a/docs/man/ups.conf.txt -+++ b/docs/man/ups.conf.txt -@@ -58,6 +58,21 @@ directory, which is often /usr/local/ups/bin. - Optional. Same as the UPS field of the same name, but this is the - default for UPSes that don't have the field. - -+*maxretry*:: -+Optional. Specify the number of attempts to start the driver(s), in case of -+failure, before giving up. A delay of 'retrydelay' is inserted between each -+attempt. Caution should be taken when using this option, since it can -+impact the time taken by your system to start. -++ -+The default is 1 attempt. -+ -+*retrydelay*:: -+Optional. Specify the delay between each restart attempt of the driver(s), -+as specified by 'maxretry'. Caution should be taken when using this option, -+since it can impact the time taken by your system to start. -++ -+The default is 5 seconds. -+ - *pollinterval*:: - - Optional. The status of the UPS will be refreshed after a maximum -diff --git a/docs/man/upsdrvctl.txt b/docs/man/upsdrvctl.txt -index f19fd77..52e5509 100644 ---- a/docs/man/upsdrvctl.txt -+++ b/docs/man/upsdrvctl.txt -@@ -63,7 +63,8 @@ Without that argument, they operate on every UPS that is currently - configured. - - *start*:: --Start the UPS driver(s). -+Start the UPS driver(s). In case of failure, further attempts may be executed -+by using the 'maxretry' and 'retrydelay' options - see linkman:ups.conf[5]. - - *stop*:: - Stop the UPS driver(s). -diff --git a/drivers/upsdrvctl.c b/drivers/upsdrvctl.c -index 623f753..0cdaa2c 100644 ---- a/drivers/upsdrvctl.c -+++ b/drivers/upsdrvctl.c -@@ -45,6 +45,12 @@ - /* timer - keeps us from getting stuck if a driver hangs */ - static int maxstartdelay = 45; - -+ /* counter - retry that many time(s) to start the driver if it fails to */ -+static int maxretry = 1; -+ -+ /* timer - delay between each restart attempt of the driver(s) */ -+static int retrydelay = 5; -+ - /* Directory where driver executables live */ - static char *driverpath = NULL; - -@@ -65,6 +71,12 @@ void do_upsconf_args(char *upsname, char *var, char *val) - driverpath = xstrdup(val); - } - -+ if (!strcmp(var, "maxretry")) -+ maxretry = atoi(val); -+ -+ if (!strcmp(var, "retrydelay")) -+ retrydelay = atoi(val); -+ - /* ignore anything else - it's probably for main */ - - return; -@@ -248,6 +260,7 @@ static void start_driver(const ups_t *ups) - char *argv[8]; - char dfn[SMALLBUF]; - int ret, arg = 0; -+ int initial_exec_error = exec_error, drv_maxretry = maxretry; - struct stat fs; - - upsdebugx(1, "Starting UPS: %s", ups->upsname); -@@ -276,10 +289,28 @@ static void start_driver(const ups_t *ups) - /* tie it off */ - argv[arg++] = NULL; - -- debugcmdline(2, "exec: ", argv); - -- if (!testmode) { -- forkexec(argv, ups); -+ while (drv_maxretry > 0) { -+ int cur_exec_error = exec_error; -+ -+ upsdebugx(2, "%i remaining attempts", drv_maxretry); -+ debugcmdline(2, "exec: ", argv); -+ drv_maxretry--; -+ -+ if (!testmode) { -+ forkexec(argv, ups); -+ } -+ -+ /* driver command succeeded */ -+ if (cur_exec_error == exec_error) { -+ drv_maxretry = 0; -+ exec_error = initial_exec_error; -+ } -+ else { -+ /* otherwise, retry if still needed */ -+ if (drv_maxretry > 0) -+ sleep (retrydelay); -+ } - } - } - --- -1.8.4 - diff --git a/debian/patches/series b/debian/patches/series index 45dbe55..09a762e 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,6 +1,5 @@ 0003-install-dev-files-in-usr.patch 0002-nut-monitor-paths.patch 0004-fix-systemd-service.patch -0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch 0006-ups-conf-maxretry.patch 0007-killpower-path.patch From d551399f973b8a7d6c5eb5d3b12cddf6aa5b2aef Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 22 Apr 2014 21:16:19 +0200 Subject: [PATCH 152/291] debian/nut-server.install: Upstream is now installing upsdrvctl /sbin --- debian/changelog | 3 ++- debian/nut-server.install | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 5245d7d..1094015 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,7 @@ nut (2.7.2-1) UNRELEASED; urgency=low - debian/patches/0004-fix-systemd-service.patch: Refreshed - Drop d/p/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch: Merged upstream + - debian/nut-server.install: Upstream is now installing upsdrvctl /sbin * debian/rules, debian/control, d/p/0004-fix-systemd-service.patch: Use a symlink instead of an Alias= to mask the SysV initscript * debian/control: Bump Standards-Version to 3.9.5 (no further changes) @@ -13,7 +14,7 @@ nut (2.7.2-1) UNRELEASED; urgency=low * debian/control, debian/rules: Call dh-autoreconf and pass LDFLAGS to minimize runtime dependencies - -- Laurent Bigonville Tue, 22 Apr 2014 20:56:12 +0200 + -- Laurent Bigonville Tue, 22 Apr 2014 21:15:52 +0200 nut (2.7.1-1) unstable; urgency=low diff --git a/debian/nut-server.install b/debian/nut-server.install index 1a61309..e515b0f 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -1,4 +1,5 @@ debian/tmp/sbin/upsd +debian/tmp/sbin/upsdrvctl debian/tmp/usr/share/nut/cmdvartab debian/tmp/usr/share/nut/driver.list debian/tmp/*/udev/rules.d/52-nut-usbups.rules @@ -44,7 +45,6 @@ debian/tmp/lib/nut/bcmxcp_usb debian/tmp/lib/nut/victronups debian/tmp/lib/nut/tripplitesu debian/tmp/lib/nut/optiups -debian/tmp/lib/nut/upsdrvctl /sbin debian/tmp/lib/nut/everups debian/tmp/lib/nut/dummy-ups debian/tmp/lib/nut/richcomm_usb From 8bd57e3e0131fd25c611792380f1087b1ef4ed03 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 22 Apr 2014 21:25:56 +0200 Subject: [PATCH 153/291] Rename package libupsclient3 to libupsclient4, soname got bumped again --- debian/changelog | 3 +- debian/control | 4 +- debian/libupsclient3.symbols | 27 ------- ...sclient3.install => libupsclient4.install} | 0 debian/libupsclient4.symbols | 78 +++++++++++++++++++ debian/rules | 2 +- 6 files changed, 83 insertions(+), 31 deletions(-) delete mode 100644 debian/libupsclient3.symbols rename debian/{libupsclient3.install => libupsclient4.install} (100%) create mode 100644 debian/libupsclient4.symbols diff --git a/debian/changelog b/debian/changelog index 1094015..1a67944 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,7 @@ nut (2.7.2-1) UNRELEASED; urgency=low - Drop d/p/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch: Merged upstream - debian/nut-server.install: Upstream is now installing upsdrvctl /sbin + - Rename package libupsclient3 to libupsclient4, soname got bumped again * debian/rules, debian/control, d/p/0004-fix-systemd-service.patch: Use a symlink instead of an Alias= to mask the SysV initscript * debian/control: Bump Standards-Version to 3.9.5 (no further changes) @@ -14,7 +15,7 @@ nut (2.7.2-1) UNRELEASED; urgency=low * debian/control, debian/rules: Call dh-autoreconf and pass LDFLAGS to minimize runtime dependencies - -- Laurent Bigonville Tue, 22 Apr 2014 21:15:52 +0200 + -- Laurent Bigonville Tue, 22 Apr 2014 21:25:23 +0200 nut (2.7.1-1) unstable; urgency=low diff --git a/debian/control b/debian/control index b821640..11e4876 100644 --- a/debian/control +++ b/debian/control @@ -165,7 +165,7 @@ Description: network UPS tools - documentation . This package contains FAQ, user, developer and packager documentation. -Package: libupsclient3 +Package: libupsclient4 Section: libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} @@ -183,7 +183,7 @@ Description: network UPS tools - client library Package: libupsclient-dev Section: libdevel Architecture: any -Depends: libupsclient3 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Depends: libupsclient4 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} Conflicts: libupsclient1-dev Replaces: libupsclient1-dev Description: network UPS tools - development files diff --git a/debian/libupsclient3.symbols b/debian/libupsclient3.symbols deleted file mode 100644 index 4fc0a9f..0000000 --- a/debian/libupsclient3.symbols +++ /dev/null @@ -1,27 +0,0 @@ -libupsclient.so.3 libupsclient3 #MINVER# - pconf_char@Base 2.7.1 - pconf_encode@Base 2.7.1 - pconf_file_begin@Base 2.7.1 - pconf_file_next@Base 2.7.1 - pconf_finish@Base 2.7.1 - pconf_init@Base 2.7.1 - pconf_line@Base 2.7.1 - pconf_parse_error@Base 2.7.1 - upscli_add_host_cert@Base 2.7.1 - upscli_cleanup@Base 2.7.1 - upscli_connect@Base 2.7.1 - upscli_disconnect@Base 2.7.1 - upscli_errlist@Base 2.7.1 - upscli_fd@Base 2.7.1 - upscli_get@Base 2.7.1 - upscli_init@Base 2.7.1 - upscli_list_next@Base 2.7.1 - upscli_list_start@Base 2.7.1 - upscli_readline@Base 2.7.1 - upscli_sendline@Base 2.7.1 - upscli_splitaddr@Base 2.7.1 - upscli_splitname@Base 2.7.1 - upscli_ssl@Base 2.7.1 - upscli_strerror@Base 2.7.1 - upscli_upserror@Base 2.7.1 - upscli_tryconnect@Base 2.7.1 diff --git a/debian/libupsclient3.install b/debian/libupsclient4.install similarity index 100% rename from debian/libupsclient3.install rename to debian/libupsclient4.install diff --git a/debian/libupsclient4.symbols b/debian/libupsclient4.symbols new file mode 100644 index 0000000..c72efc4 --- /dev/null +++ b/debian/libupsclient4.symbols @@ -0,0 +1,78 @@ +libupsclient.so.4 libupsclient4 #MINVER# + UPS_VERSION@Base 2.7.2 + altpidpath@Base 2.7.2 + background@Base 2.7.2 + become_user@Base 2.7.2 + chroot_start@Base 2.7.2 + confpath@Base 2.7.2 + dflt_statepath@Base 2.7.2 + fatal_with_errno@Base 2.7.2 + fatalx@Base 2.7.2 + get_user_pwent@Base 2.7.2 + ltrim@Base 2.7.2 + nut_debug_level@Base 2.7.2 + nut_log_level@Base 2.7.2 + open_syslog@Base 2.7.2 + pconf_char@Base 2.7.2 + pconf_encode@Base 2.7.2 + pconf_file_begin@Base 2.7.2 + pconf_file_next@Base 2.7.2 + pconf_finish@Base 2.7.2 + pconf_init@Base 2.7.2 + pconf_line@Base 2.7.2 + pconf_parse_error@Base 2.7.2 + rtrim@Base 2.7.2 + select_read@Base 2.7.2 + select_write@Base 2.7.2 + sendsignal@Base 2.7.2 + sendsignalfn@Base 2.7.2 + snprintfcat@Base 2.7.2 + state_addcmd@Base 2.7.2 + state_addenum@Base 2.7.2 + state_addrange@Base 2.7.2 + state_cmdfree@Base 2.7.2 + state_delcmd@Base 2.7.2 + state_delenum@Base 2.7.2 + state_delinfo@Base 2.7.2 + state_delrange@Base 2.7.2 + state_getaux@Base 2.7.2 + state_getenumlist@Base 2.7.2 + state_getflags@Base 2.7.2 + state_getinfo@Base 2.7.2 + state_getrangelist@Base 2.7.2 + state_infofree@Base 2.7.2 + state_setaux@Base 2.7.2 + state_setflags@Base 2.7.2 + state_setinfo@Base 2.7.2 + state_tree_find@Base 2.7.2 + syslogbit_set@Base 2.7.2 + upscli_add_host_cert@Base 2.7.2 + upscli_cleanup@Base 2.7.2 + upscli_connect@Base 2.7.2 + upscli_disconnect@Base 2.7.2 + upscli_errlist@Base 2.7.2 + upscli_fd@Base 2.7.2 + upscli_get@Base 2.7.2 + upscli_init@Base 2.7.2 + upscli_list_next@Base 2.7.2 + upscli_list_start@Base 2.7.2 + upscli_readline@Base 2.7.2 + upscli_sendline@Base 2.7.2 + upscli_splitaddr@Base 2.7.2 + upscli_splitname@Base 2.7.2 + upscli_ssl@Base 2.7.2 + upscli_strerror@Base 2.7.2 + upscli_tryconnect@Base 2.7.2 + upscli_upserror@Base 2.7.2 + upsdebug_ascii@Base 2.7.2 + upsdebug_hex@Base 2.7.2 + upsdebug_with_errno@Base 2.7.2 + upsdebugx@Base 2.7.2 + upslog_with_errno@Base 2.7.2 + upslogx@Base 2.7.2 + writepid@Base 2.7.2 + xbasename@Base 2.7.2 + xcalloc@Base 2.7.2 + xmalloc@Base 2.7.2 + xrealloc@Base 2.7.2 + xstrdup@Base 2.7.2 diff --git a/debian/rules b/debian/rules index 4e13232..b169acd 100755 --- a/debian/rules +++ b/debian/rules @@ -74,7 +74,7 @@ common-install-arch:: mv $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libupsclient.a \ $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.a rm -f $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so - ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.3 \ + ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.4 \ $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so # Install systemd files only on systems where it's supported From f26715942d235bdbbdfb1929ee038d47a2a436aa Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 22 Apr 2014 21:46:02 +0200 Subject: [PATCH 154/291] debian/patches/0008-drop-w3c-icons.patch: Remove the link to external W3C icons to prevent privacy breach (privacy-breach-w3c-valid-html) --- debian/changelog | 4 +++- debian/patches/0008-drop-w3c-icons.patch | 26 ++++++++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 debian/patches/0008-drop-w3c-icons.patch diff --git a/debian/changelog b/debian/changelog index 1a67944..7184137 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,8 +14,10 @@ nut (2.7.2-1) UNRELEASED; urgency=low (Closes: #733189) * debian/control, debian/rules: Call dh-autoreconf and pass LDFLAGS to minimize runtime dependencies + * debian/patches/0008-drop-w3c-icons.patch: Remove the link to external W3C + icons to prevent privacy breach (privacy-breach-w3c-valid-html) - -- Laurent Bigonville Tue, 22 Apr 2014 21:25:23 +0200 + -- Laurent Bigonville Tue, 22 Apr 2014 21:44:35 +0200 nut (2.7.1-1) unstable; urgency=low diff --git a/debian/patches/0008-drop-w3c-icons.patch b/debian/patches/0008-drop-w3c-icons.patch new file mode 100644 index 0000000..ac05a34 --- /dev/null +++ b/debian/patches/0008-drop-w3c-icons.patch @@ -0,0 +1,26 @@ +--- a/conf/upsstats.html.sample ++++ b/conf/upsstats.html.sample +@@ -180,11 +180,4 @@ Network UPS Tools upsstats + + + +-
+-Valid CSS! +- +-
+- + +--- a/conf/upsstats-single.html.sample ++++ b/conf/upsstats-single.html.sample +@@ -286,9 +286,6 @@ + + + +-Valid HTML 4.0 Transitional + + + diff --git a/debian/patches/series b/debian/patches/series index 09a762e..5046408 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -3,3 +3,4 @@ 0004-fix-systemd-service.patch 0006-ups-conf-maxretry.patch 0007-killpower-path.patch +0008-drop-w3c-icons.patch From 1e664224b23d5bf959141eb85cd5ad4c3941704f Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 22 Apr 2014 22:14:57 +0200 Subject: [PATCH 155/291] debian/nut-server.install, debian/nut-server.manpages: Install new nutdrv_atcl_usb driver --- debian/changelog | 4 +++- debian/nut-server.install | 1 + debian/nut-server.manpages | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 7184137..f3f767b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,8 +16,10 @@ nut (2.7.2-1) UNRELEASED; urgency=low minimize runtime dependencies * debian/patches/0008-drop-w3c-icons.patch: Remove the link to external W3C icons to prevent privacy breach (privacy-breach-w3c-valid-html) + * debian/nut-server.install, debian/nut-server.manpages: Install new + nutdrv_atcl_usb driver - -- Laurent Bigonville Tue, 22 Apr 2014 21:44:35 +0200 + -- Laurent Bigonville Tue, 22 Apr 2014 22:14:11 +0200 nut (2.7.1-1) unstable; urgency=low diff --git a/debian/nut-server.install b/debian/nut-server.install index e515b0f..8b67a85 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -52,6 +52,7 @@ debian/tmp/lib/nut/liebert-esp2 debian/tmp/lib/nut/microdowell debian/tmp/lib/nut/al175 debian/tmp/lib/nut/apcupsd-ups +debian/tmp/lib/nut/nutdrv_atcl_usb debian/tmp/lib/nut/nutdrv_qx debian/tmp/lib/nut/riello_ser debian/tmp/lib/nut/riello_usb diff --git a/debian/nut-server.manpages b/debian/nut-server.manpages index 44de902..d5cf07e 100644 --- a/debian/nut-server.manpages +++ b/debian/nut-server.manpages @@ -47,6 +47,7 @@ debian/tmp/usr/share/man/man8/al175.8 debian/tmp/usr/share/man/man8/apcupsd-ups.8 debian/tmp/usr/share/man/man8/blazer_ser.8 debian/tmp/usr/share/man/man8/blazer_usb.8 +debian/tmp/usr/share/man/man8/nutdrv_atcl_usb.8 debian/tmp/usr/share/man/man8/nutdrv_qx.8 debian/tmp/usr/share/man/man8/riello_ser.8 debian/tmp/usr/share/man/man8/riello_usb.8 From d504d6110114d00726a7bc9d3025bee81209c428 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 22 Apr 2014 22:46:17 +0200 Subject: [PATCH 156/291] Release to unstable --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index f3f767b..e940af1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.7.2-1) UNRELEASED; urgency=low +nut (2.7.2-1) unstable; urgency=low * New upstream release - Fix the undefined references (Closes: #731156) @@ -19,7 +19,7 @@ nut (2.7.2-1) UNRELEASED; urgency=low * debian/nut-server.install, debian/nut-server.manpages: Install new nutdrv_atcl_usb driver - -- Laurent Bigonville Tue, 22 Apr 2014 22:14:11 +0200 + -- Laurent Bigonville Tue, 22 Apr 2014 22:46:12 +0200 nut (2.7.1-1) unstable; urgency=low From 165791ea2ad25a48267b89079e4c3dde5923b854 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Mon, 20 Oct 2014 20:06:06 +0200 Subject: [PATCH 157/291] New packages: libnutclient0 and libnutclient-dev --- debian/changelog | 10 ++ debian/control | 28 ++++ debian/libnutclient-dev.install | 4 + debian/libnutclient-dev.manpages | 34 +++++ debian/libnutclient0.install | 1 + debian/libnutclient0.symbols | 234 +++++++++++++++++++++++++++++++ debian/rules | 5 + 7 files changed, 316 insertions(+) create mode 100644 debian/libnutclient-dev.install create mode 100644 debian/libnutclient-dev.manpages create mode 100644 debian/libnutclient0.install create mode 100644 debian/libnutclient0.symbols diff --git a/debian/changelog b/debian/changelog index e940af1..687fd78 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +nut (2.7.2-2) UNRELEASED; urgency=low + + * debian/control: add new packages libnutclient0 and libnutclient-dev + * debian/rules: adapted for the new packages + * debian/libnutclient0.install, debian/libnutclient0.symbols, + debian/libnutclient-dev.install, debian/libnutclient-dev.manpages: + created for the new packages + + -- Arnaud Quette Mon, 20 Oct 2014 20:41:47 +0200 + nut (2.7.2-1) unstable; urgency=low * New upstream release diff --git a/debian/control b/debian/control index 11e4876..e6a2fbe 100644 --- a/debian/control +++ b/debian/control @@ -195,6 +195,34 @@ Description: network UPS tools - development files . This package provides the development files. +Package: libnutclient0 +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Pre-Depends: ${misc:Pre-Depends} +Multi-Arch: same +Description: network UPS tools - new client library + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides the new shared client library. + +Package: libnutclient-dev +Section: libdevel +Architecture: any +Depends: libnutclient0 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: network UPS tools - development files + Network UPS Tools (NUT) is a client/server monitoring system that + allows computers to share uninterruptible power supply (UPS) and + power distribution unit (PDU) hardware. Clients access the hardware + through the server, and are notified whenever the power status + changes. + . + This package provides the development files for the new client library. + Package: python-nut Section: python Architecture: all diff --git a/debian/libnutclient-dev.install b/debian/libnutclient-dev.install new file mode 100644 index 0000000..8d84fd6 --- /dev/null +++ b/debian/libnutclient-dev.install @@ -0,0 +1,4 @@ +usr/lib/*/libnutclient.so +usr/lib/*/libnutclient.a +usr/lib/*/pkgconfig/libnutclient.pc +usr/include/nutclient.h diff --git a/debian/libnutclient-dev.manpages b/debian/libnutclient-dev.manpages new file mode 100644 index 0000000..7ac2971 --- /dev/null +++ b/debian/libnutclient-dev.manpages @@ -0,0 +1,34 @@ +debian/tmp/usr/share/man/man3/libnutclient.3 +debian/tmp/usr/share/man/man3/libnutclient_commands.3 +debian/tmp/usr/share/man/man3/libnutclient_devices.3 +debian/tmp/usr/share/man/man3/libnutclient_general.3 +debian/tmp/usr/share/man/man3/libnutclient_misc.3 +debian/tmp/usr/share/man/man3/libnutclient_tcp.3 +debian/tmp/usr/share/man/man3/libnutclient_variables.3 +debian/tmp/usr/share/man/man3/nutclient_authenticate.3 +debian/tmp/usr/share/man/man3/nutclient_destroy.3 +debian/tmp/usr/share/man/man3/nutclient_device_forced_shutdown.3 +debian/tmp/usr/share/man/man3/nutclient_device_login.3 +debian/tmp/usr/share/man/man3/nutclient_device_master.3 +debian/tmp/usr/share/man/man3/nutclient_execute_device_command.3 +debian/tmp/usr/share/man/man3/nutclient_get_device_command_description.3 +debian/tmp/usr/share/man/man3/nutclient_get_device_commands.3 +debian/tmp/usr/share/man/man3/nutclient_get_device_description.3 +debian/tmp/usr/share/man/man3/nutclient_get_device_num_logins.3 +debian/tmp/usr/share/man/man3/nutclient_get_device_rw_variables.3 +debian/tmp/usr/share/man/man3/nutclient_get_devices.3 +debian/tmp/usr/share/man/man3/nutclient_get_device_variable_description.3 +debian/tmp/usr/share/man/man3/nutclient_get_device_variables.3 +debian/tmp/usr/share/man/man3/nutclient_get_device_variable_values.3 +debian/tmp/usr/share/man/man3/nutclient_has_device.3 +debian/tmp/usr/share/man/man3/nutclient_has_device_command.3 +debian/tmp/usr/share/man/man3/nutclient_has_device_variable.3 +debian/tmp/usr/share/man/man3/nutclient_logout.3 +debian/tmp/usr/share/man/man3/nutclient_set_device_variable_value.3 +debian/tmp/usr/share/man/man3/nutclient_set_device_variable_values.3 +debian/tmp/usr/share/man/man3/nutclient_tcp_create_client.3 +debian/tmp/usr/share/man/man3/nutclient_tcp_disconnect.3 +debian/tmp/usr/share/man/man3/nutclient_tcp_get_timeout.3 +debian/tmp/usr/share/man/man3/nutclient_tcp_is_connected.3 +debian/tmp/usr/share/man/man3/nutclient_tcp_reconnect.3 +debian/tmp/usr/share/man/man3/nutclient_tcp_set_timeout.3 diff --git a/debian/libnutclient0.install b/debian/libnutclient0.install new file mode 100644 index 0000000..e5a792e --- /dev/null +++ b/debian/libnutclient0.install @@ -0,0 +1 @@ +lib/*/libnutclient.so.* diff --git a/debian/libnutclient0.symbols b/debian/libnutclient0.symbols new file mode 100644 index 0000000..dcc54cd --- /dev/null +++ b/debian/libnutclient0.symbols @@ -0,0 +1,234 @@ +libnutclient.so.0 libnutclient0 #MINVER# + _ZN3nut11IOExceptionD0Ev@Base 2.7.2 + _ZN3nut11IOExceptionD1Ev@Base 2.7.2 + _ZN3nut11IOExceptionD2Ev@Base 2.7.2 + _ZN3nut12NutExceptionC1ERKSs@Base 2.7.2 + _ZN3nut12NutExceptionC2ERKSs@Base 2.7.2 + _ZN3nut12NutExceptionD0Ev@Base 2.7.2 + _ZN3nut12NutExceptionD1Ev@Base 2.7.2 + _ZN3nut12NutExceptionD2Ev@Base 2.7.2 + _ZN3nut15SystemException3errEv@Base 2.7.2 + _ZN3nut15SystemExceptionC1Ev@Base 2.7.2 + _ZN3nut15SystemExceptionC2Ev@Base 2.7.2 + _ZN3nut15SystemExceptionD0Ev@Base 2.7.2 + _ZN3nut15SystemExceptionD1Ev@Base 2.7.2 + _ZN3nut15SystemExceptionD2Ev@Base 2.7.2 + _ZN3nut16TimeoutExceptionC1Ev@Base 2.7.2 + _ZN3nut16TimeoutExceptionC2Ev@Base 2.7.2 + _ZN3nut16TimeoutExceptionD0Ev@Base 2.7.2 + _ZN3nut16TimeoutExceptionD1Ev@Base 2.7.2 + _ZN3nut16TimeoutExceptionD2Ev@Base 2.7.2 + _ZN3nut20UnknownHostExceptionC1Ev@Base 2.7.2 + _ZN3nut20UnknownHostExceptionC2Ev@Base 2.7.2 + _ZN3nut20UnknownHostExceptionD0Ev@Base 2.7.2 + _ZN3nut20UnknownHostExceptionD1Ev@Base 2.7.2 + _ZN3nut20UnknownHostExceptionD2Ev@Base 2.7.2 + _ZN3nut21NotConnectedExceptionC1Ev@Base 2.7.2 + _ZN3nut21NotConnectedExceptionC2Ev@Base 2.7.2 + _ZN3nut21NotConnectedExceptionD0Ev@Base 2.7.2 + _ZN3nut21NotConnectedExceptionD1Ev@Base 2.7.2 + _ZN3nut21NotConnectedExceptionD2Ev@Base 2.7.2 + _ZN3nut6Client10getDevicesEv@Base 2.7.2 + _ZN3nut6Client16hasDeviceCommandERKSsS2_@Base 2.7.2 + _ZN3nut6Client17hasDeviceVariableERKSsS2_@Base 2.7.2 + _ZN3nut6Client23getDeviceVariableValuesERKSs@Base 2.7.2 + _ZN3nut6Client9getDeviceERKSs@Base 2.7.2 + _ZN3nut6Client9hasDeviceERKSs@Base 2.7.2 + _ZN3nut6ClientC1Ev@Base 2.7.2 + _ZN3nut6ClientC2Ev@Base 2.7.2 + _ZN3nut6ClientD1Ev@Base 2.7.2 + _ZN3nut6ClientD2Ev@Base 2.7.2 + _ZN3nut6Device10getCommandERKSs@Base 2.7.2 + _ZN3nut6Device11getCommandsEv@Base 2.7.2 + _ZN3nut6Device11getVariableERKSs@Base 2.7.2 + _ZN3nut6Device11setVariableERKSsRKSt6vectorISsSaISsEE@Base 2.7.2 + _ZN3nut6Device11setVariableERKSsS2_@Base 2.7.2 + _ZN3nut6Device12getNumLoginsEv@Base 2.7.2 + _ZN3nut6Device12getVariablesEv@Base 2.7.2 + _ZN3nut6Device14executeCommandERKSs@Base 2.7.2 + _ZN3nut6Device14forcedShutdownEv@Base 2.7.2 + _ZN3nut6Device14getDescriptionEv@Base 2.7.2 + _ZN3nut6Device14getRWVariablesEv@Base 2.7.2 + _ZN3nut6Device15getCommandNamesEv@Base 2.7.2 + _ZN3nut6Device16getVariableNamesEv@Base 2.7.2 + _ZN3nut6Device16getVariableValueERKSs@Base 2.7.2 + _ZN3nut6Device17getVariableValuesEv@Base 2.7.2 + _ZN3nut6Device18getRWVariableNamesEv@Base 2.7.2 + _ZN3nut6Device5loginEv@Base 2.7.2 + _ZN3nut6Device6masterEv@Base 2.7.2 + _ZN3nut6Device9getClientEv@Base 2.7.2 + _ZN3nut6DeviceC1EPNS_6ClientERKSs@Base 2.7.2 + _ZN3nut6DeviceC1ERKS0_@Base 2.7.2 + _ZN3nut6DeviceC2EPNS_6ClientERKSs@Base 2.7.2 + _ZN3nut6DeviceC2ERKS0_@Base 2.7.2 + _ZN3nut6DeviceD1Ev@Base 2.7.2 + _ZN3nut6DeviceD2Ev@Base 2.7.2 + _ZN3nut7Command14getDescriptionEv@Base 2.7.2 + _ZN3nut7Command7executeEv@Base 2.7.2 + _ZN3nut7Command9getDeviceEv@Base 2.7.2 + _ZN3nut7CommandC1EPNS_6DeviceERKSs@Base 2.7.2 + _ZN3nut7CommandC1ERKS0_@Base 2.7.2 + _ZN3nut7CommandC2EPNS_6DeviceERKSs@Base 2.7.2 + _ZN3nut7CommandC2ERKS0_@Base 2.7.2 + _ZN3nut7CommandD1Ev@Base 2.7.2 + _ZN3nut7CommandD2Ev@Base 2.7.2 + _ZN3nut8Variable14getDescriptionEv@Base 2.7.2 + _ZN3nut8Variable8getValueEv@Base 2.7.2 + _ZN3nut8Variable8setValueERKSs@Base 2.7.2 + _ZN3nut8Variable9getDeviceEv@Base 2.7.2 + _ZN3nut8Variable9setValuesERKSt6vectorISsSaISsEE@Base 2.7.2 + _ZN3nut8VariableC1EPNS_6DeviceERKSs@Base 2.7.2 + _ZN3nut8VariableC1ERKS0_@Base 2.7.2 + _ZN3nut8VariableC2EPNS_6DeviceERKSs@Base 2.7.2 + _ZN3nut8VariableC2ERKS0_@Base 2.7.2 + _ZN3nut8VariableD1Ev@Base 2.7.2 + _ZN3nut8VariableD2Ev@Base 2.7.2 + _ZN3nut8internal6Socket10disconnectEv@Base 2.7.2 + _ZN3nut8internal6Socket10setTimeoutEl@Base 2.7.2 + _ZN3nut8internal6Socket4readEPvm@Base 2.7.2 + _ZN3nut8internal6Socket4readEv@Base 2.7.2 + _ZN3nut8internal6Socket5writeEPKvm@Base 2.7.2 + _ZN3nut8internal6Socket5writeERKSs@Base 2.7.2 + _ZN3nut8internal6Socket7connectERKSsi@Base 2.7.2 + _ZN3nut8internal6SocketC1Ev@Base 2.7.2 + _ZN3nut8internal6SocketC2Ev@Base 2.7.2 + _ZN3nut9TcpClient10disconnectEv@Base 2.7.2 + _ZN3nut9TcpClient10setTimeoutEl@Base 2.7.2 + _ZN3nut9TcpClient11detectErrorERKSs@Base 2.7.2 + _ZN3nut9TcpClient11deviceLoginERKSs@Base 2.7.2 + _ZN3nut9TcpClient12authenticateERKSsS2_@Base 2.7.2 + _ZN3nut9TcpClient12deviceMasterERKSs@Base 2.7.2 + _ZN3nut9TcpClient14getDeviceNamesEv@Base 2.7.2 + _ZN3nut9TcpClient17setDeviceVariableERKSsS2_RKSt6vectorISsSaISsEE@Base 2.7.2 + _ZN3nut9TcpClient17setDeviceVariableERKSsS2_S2_@Base 2.7.2 + _ZN3nut9TcpClient18deviceGetNumLoginsERKSs@Base 2.7.2 + _ZN3nut9TcpClient20deviceForcedShutdownERKSs@Base 2.7.2 + _ZN3nut9TcpClient20executeDeviceCommandERKSsS2_@Base 2.7.2 + _ZN3nut9TcpClient20getDeviceDescriptionERKSs@Base 2.7.2 + _ZN3nut9TcpClient21getDeviceCommandNamesERKSs@Base 2.7.2 + _ZN3nut9TcpClient22getDeviceVariableNamesERKSs@Base 2.7.2 + _ZN3nut9TcpClient22getDeviceVariableValueERKSsS2_@Base 2.7.2 + _ZN3nut9TcpClient23getDeviceVariableValuesERKSs@Base 2.7.2 + _ZN3nut9TcpClient24getDeviceRWVariableNamesERKSs@Base 2.7.2 + _ZN3nut9TcpClient27getDeviceCommandDescriptionERKSsS2_@Base 2.7.2 + _ZN3nut9TcpClient28getDeviceVariableDescriptionERKSsS2_@Base 2.7.2 + _ZN3nut9TcpClient3getERKSsS2_@Base 2.7.2 + _ZN3nut9TcpClient4listERKSsS2_@Base 2.7.2 + _ZN3nut9TcpClient6escapeERKSs@Base 2.7.2 + _ZN3nut9TcpClient6logoutEv@Base 2.7.2 + _ZN3nut9TcpClient7connectERKSsi@Base 2.7.2 + _ZN3nut9TcpClient7connectEv@Base 2.7.2 + _ZN3nut9TcpClient7explodeERKSsm@Base 2.7.2 + _ZN3nut9TcpClient9getDeviceERKSs@Base 2.7.2 + _ZN3nut9TcpClient9sendQueryERKSs@Base 2.7.2 + _ZN3nut9TcpClientC1ERKSsi@Base 2.7.2 + _ZN3nut9TcpClientC1Ev@Base 2.7.2 + _ZN3nut9TcpClientC2ERKSsi@Base 2.7.2 + _ZN3nut9TcpClientC2Ev@Base 2.7.2 + _ZN3nut9TcpClientD1Ev@Base 2.7.2 + _ZN3nut9TcpClientD2Ev@Base 2.7.2 + _ZNK3nut12NutException3strEv@Base 2.7.2 + _ZNK3nut12NutException4whatEv@Base 2.7.2 + _ZNK3nut6Device4isOkEv@Base 2.7.2 + _ZNK3nut6Device7getNameEv@Base 2.7.2 + _ZNK3nut6Device9getClientEv@Base 2.7.2 + _ZNK3nut6DevicecvbEv@Base 2.7.2 + _ZNK3nut6DeviceeqERKS0_@Base 2.7.2 + _ZNK3nut6DeviceltERKS0_@Base 2.7.2 + _ZNK3nut6DevicentEv@Base 2.7.2 + _ZNK3nut7Command4isOkEv@Base 2.7.2 + _ZNK3nut7Command7getNameEv@Base 2.7.2 + _ZNK3nut7Command9getDeviceEv@Base 2.7.2 + _ZNK3nut7CommandcvbEv@Base 2.7.2 + _ZNK3nut7CommandeqERKS0_@Base 2.7.2 + _ZNK3nut7CommandltERKS0_@Base 2.7.2 + _ZNK3nut7CommandntEv@Base 2.7.2 + _ZNK3nut8Variable4isOkEv@Base 2.7.2 + _ZNK3nut8Variable7getNameEv@Base 2.7.2 + _ZNK3nut8Variable9getDeviceEv@Base 2.7.2 + _ZNK3nut8VariablecvbEv@Base 2.7.2 + _ZNK3nut8VariableeqERKS0_@Base 2.7.2 + _ZNK3nut8VariableltERKS0_@Base 2.7.2 + _ZNK3nut8VariablentEv@Base 2.7.2 + _ZNK3nut8internal6Socket11isConnectedEv@Base 2.7.2 + _ZNK3nut9TcpClient10getTimeoutEv@Base 2.7.2 + _ZNK3nut9TcpClient11isConnectedEv@Base 2.7.2 + _ZNK3nut9TcpClient7getHostEv@Base 2.7.2 + _ZNK3nut9TcpClient7getPortEv@Base 2.7.2 + _ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag@Base 2.7.2 + _ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3_@Base 2.7.2 + _ZNSt4pairIKSsSt6vectorISsSaISsEEED1Ev@Base 2.7.2 + _ZNSt4pairIKSsSt6vectorISsSaISsEEED2Ev@Base 2.7.2 + _ZNSt6vectorIS_ISsSaISsEESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_@Base 2.7.2 + _ZNSt6vectorIS_ISsSaISsEESaIS1_EED1Ev@Base 2.7.2 + _ZNSt6vectorIS_ISsSaISsEESaIS1_EED2Ev@Base 2.7.2 + _ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs@Base 2.7.2 + _ZNSt6vectorISsSaISsEED1Ev@Base 2.7.2 + _ZNSt6vectorISsSaISsEED2Ev@Base 2.7.2 + _ZNSt6vectorISsSaISsEEaSERKS1_@Base 2.7.2 + _ZNSt8_Rb_treeIN3nut6DeviceES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E@Base 2.7.2 + _ZNSt8_Rb_treeIN3nut7CommandES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E@Base 2.7.2 + _ZNSt8_Rb_treeIN3nut8VariableES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_uniqueERKS1_@Base 2.7.2 + _ZNSt8_Rb_treeIN3nut8VariableES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E@Base 2.7.2 + _ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs@Base 2.7.2 + _ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs@Base 2.7.2 + _ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE@Base 2.7.2 + _ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorISsSaISsEEESt10_Select1stIS5_ESt4lessISsESaIS5_EE10_M_insert_EPSt18_Rb_tree_node_baseSD_RKS5_@Base 2.7.2 + _ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorISsSaISsEEESt10_Select1stIS5_ESt4lessISsESaIS5_EE24_M_get_insert_unique_posERS1_@Base 2.7.2 + _ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorISsSaISsEEESt10_Select1stIS5_ESt4lessISsESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS1_@Base 2.7.2 + _ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorISsSaISsEEESt10_Select1stIS5_ESt4lessISsESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E@Base 2.7.2 + _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_@Base 2.7.2 + _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_@Base 2.7.2 + _ZTIN3nut11IOExceptionE@Base 2.7.2 + _ZTIN3nut12NutExceptionE@Base 2.7.2 + _ZTIN3nut15SystemExceptionE@Base 2.7.2 + _ZTIN3nut16TimeoutExceptionE@Base 2.7.2 + _ZTIN3nut20UnknownHostExceptionE@Base 2.7.2 + _ZTIN3nut21NotConnectedExceptionE@Base 2.7.2 + _ZTIN3nut6ClientE@Base 2.7.2 + _ZTIN3nut9TcpClientE@Base 2.7.2 + _ZTSN3nut11IOExceptionE@Base 2.7.2 + _ZTSN3nut12NutExceptionE@Base 2.7.2 + _ZTSN3nut15SystemExceptionE@Base 2.7.2 + _ZTSN3nut16TimeoutExceptionE@Base 2.7.2 + _ZTSN3nut20UnknownHostExceptionE@Base 2.7.2 + _ZTSN3nut21NotConnectedExceptionE@Base 2.7.2 + _ZTSN3nut6ClientE@Base 2.7.2 + _ZTSN3nut9TcpClientE@Base 2.7.2 + _ZTVN3nut11IOExceptionE@Base 2.7.2 + _ZTVN3nut12NutExceptionE@Base 2.7.2 + _ZTVN3nut15SystemExceptionE@Base 2.7.2 + _ZTVN3nut16TimeoutExceptionE@Base 2.7.2 + _ZTVN3nut20UnknownHostExceptionE@Base 2.7.2 + _ZTVN3nut21NotConnectedExceptionE@Base 2.7.2 + _ZTVN3nut6ClientE@Base 2.7.2 + _ZTVN3nut9TcpClientE@Base 2.7.2 + nutclient_authenticate@Base 2.7.2 + nutclient_destroy@Base 2.7.2 + nutclient_device_forced_shutdown@Base 2.7.2 + nutclient_device_login@Base 2.7.2 + nutclient_device_master@Base 2.7.2 + nutclient_execute_device_command@Base 2.7.2 + nutclient_get_device_command_description@Base 2.7.2 + nutclient_get_device_commands@Base 2.7.2 + nutclient_get_device_description@Base 2.7.2 + nutclient_get_device_num_logins@Base 2.7.2 + nutclient_get_device_rw_variables@Base 2.7.2 + nutclient_get_device_variable_description@Base 2.7.2 + nutclient_get_device_variable_values@Base 2.7.2 + nutclient_get_device_variables@Base 2.7.2 + nutclient_get_devices@Base 2.7.2 + nutclient_has_device@Base 2.7.2 + nutclient_has_device_command@Base 2.7.2 + nutclient_has_device_variable@Base 2.7.2 + nutclient_logout@Base 2.7.2 + nutclient_set_device_variable_value@Base 2.7.2 + nutclient_set_device_variable_values@Base 2.7.2 + nutclient_tcp_create_client@Base 2.7.2 + nutclient_tcp_disconnect@Base 2.7.2 + nutclient_tcp_get_timeout@Base 2.7.2 + nutclient_tcp_is_connected@Base 2.7.2 + nutclient_tcp_reconnect@Base 2.7.2 + nutclient_tcp_set_timeout@Base 2.7.2 + strarr_alloc@Base 2.7.2 + strarr_free@Base 2.7.2 diff --git a/debian/rules b/debian/rules index b169acd..73abe42 100755 --- a/debian/rules +++ b/debian/rules @@ -76,6 +76,11 @@ common-install-arch:: rm -f $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.4 \ $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so + mv $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libnutclient.a \ + $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libnutclient.a + rm -f $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libnutclient.so + ln -s /lib/$(DEB_HOST_MULTIARCH)/libnutclient.so.0 \ + $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libnutclient.so # Install systemd files only on systems where it's supported ifeq (linux,$(DEB_HOST_ARCH_OS)) From c57ad7e8971e36fb7560e96ef82610544a79e1f4 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Fri, 24 Oct 2014 23:02:25 +0200 Subject: [PATCH 158/291] Demangle C++ symbols --- debian/libnutclient0.symbols | 373 ++++++++++++++++------------------- 1 file changed, 169 insertions(+), 204 deletions(-) diff --git a/debian/libnutclient0.symbols b/debian/libnutclient0.symbols index dcc54cd..ccc230c 100644 --- a/debian/libnutclient0.symbols +++ b/debian/libnutclient0.symbols @@ -1,208 +1,173 @@ libnutclient.so.0 libnutclient0 #MINVER# - _ZN3nut11IOExceptionD0Ev@Base 2.7.2 - _ZN3nut11IOExceptionD1Ev@Base 2.7.2 - _ZN3nut11IOExceptionD2Ev@Base 2.7.2 - _ZN3nut12NutExceptionC1ERKSs@Base 2.7.2 - _ZN3nut12NutExceptionC2ERKSs@Base 2.7.2 - _ZN3nut12NutExceptionD0Ev@Base 2.7.2 - _ZN3nut12NutExceptionD1Ev@Base 2.7.2 - _ZN3nut12NutExceptionD2Ev@Base 2.7.2 - _ZN3nut15SystemException3errEv@Base 2.7.2 - _ZN3nut15SystemExceptionC1Ev@Base 2.7.2 - _ZN3nut15SystemExceptionC2Ev@Base 2.7.2 - _ZN3nut15SystemExceptionD0Ev@Base 2.7.2 - _ZN3nut15SystemExceptionD1Ev@Base 2.7.2 - _ZN3nut15SystemExceptionD2Ev@Base 2.7.2 - _ZN3nut16TimeoutExceptionC1Ev@Base 2.7.2 - _ZN3nut16TimeoutExceptionC2Ev@Base 2.7.2 - _ZN3nut16TimeoutExceptionD0Ev@Base 2.7.2 - _ZN3nut16TimeoutExceptionD1Ev@Base 2.7.2 - _ZN3nut16TimeoutExceptionD2Ev@Base 2.7.2 - _ZN3nut20UnknownHostExceptionC1Ev@Base 2.7.2 - _ZN3nut20UnknownHostExceptionC2Ev@Base 2.7.2 - _ZN3nut20UnknownHostExceptionD0Ev@Base 2.7.2 - _ZN3nut20UnknownHostExceptionD1Ev@Base 2.7.2 - _ZN3nut20UnknownHostExceptionD2Ev@Base 2.7.2 - _ZN3nut21NotConnectedExceptionC1Ev@Base 2.7.2 - _ZN3nut21NotConnectedExceptionC2Ev@Base 2.7.2 - _ZN3nut21NotConnectedExceptionD0Ev@Base 2.7.2 - _ZN3nut21NotConnectedExceptionD1Ev@Base 2.7.2 - _ZN3nut21NotConnectedExceptionD2Ev@Base 2.7.2 - _ZN3nut6Client10getDevicesEv@Base 2.7.2 - _ZN3nut6Client16hasDeviceCommandERKSsS2_@Base 2.7.2 - _ZN3nut6Client17hasDeviceVariableERKSsS2_@Base 2.7.2 - _ZN3nut6Client23getDeviceVariableValuesERKSs@Base 2.7.2 - _ZN3nut6Client9getDeviceERKSs@Base 2.7.2 - _ZN3nut6Client9hasDeviceERKSs@Base 2.7.2 - _ZN3nut6ClientC1Ev@Base 2.7.2 - _ZN3nut6ClientC2Ev@Base 2.7.2 - _ZN3nut6ClientD1Ev@Base 2.7.2 - _ZN3nut6ClientD2Ev@Base 2.7.2 - _ZN3nut6Device10getCommandERKSs@Base 2.7.2 - _ZN3nut6Device11getCommandsEv@Base 2.7.2 - _ZN3nut6Device11getVariableERKSs@Base 2.7.2 - _ZN3nut6Device11setVariableERKSsRKSt6vectorISsSaISsEE@Base 2.7.2 - _ZN3nut6Device11setVariableERKSsS2_@Base 2.7.2 - _ZN3nut6Device12getNumLoginsEv@Base 2.7.2 - _ZN3nut6Device12getVariablesEv@Base 2.7.2 - _ZN3nut6Device14executeCommandERKSs@Base 2.7.2 - _ZN3nut6Device14forcedShutdownEv@Base 2.7.2 - _ZN3nut6Device14getDescriptionEv@Base 2.7.2 - _ZN3nut6Device14getRWVariablesEv@Base 2.7.2 - _ZN3nut6Device15getCommandNamesEv@Base 2.7.2 - _ZN3nut6Device16getVariableNamesEv@Base 2.7.2 - _ZN3nut6Device16getVariableValueERKSs@Base 2.7.2 - _ZN3nut6Device17getVariableValuesEv@Base 2.7.2 - _ZN3nut6Device18getRWVariableNamesEv@Base 2.7.2 - _ZN3nut6Device5loginEv@Base 2.7.2 - _ZN3nut6Device6masterEv@Base 2.7.2 - _ZN3nut6Device9getClientEv@Base 2.7.2 - _ZN3nut6DeviceC1EPNS_6ClientERKSs@Base 2.7.2 - _ZN3nut6DeviceC1ERKS0_@Base 2.7.2 - _ZN3nut6DeviceC2EPNS_6ClientERKSs@Base 2.7.2 - _ZN3nut6DeviceC2ERKS0_@Base 2.7.2 - _ZN3nut6DeviceD1Ev@Base 2.7.2 - _ZN3nut6DeviceD2Ev@Base 2.7.2 - _ZN3nut7Command14getDescriptionEv@Base 2.7.2 - _ZN3nut7Command7executeEv@Base 2.7.2 - _ZN3nut7Command9getDeviceEv@Base 2.7.2 - _ZN3nut7CommandC1EPNS_6DeviceERKSs@Base 2.7.2 - _ZN3nut7CommandC1ERKS0_@Base 2.7.2 - _ZN3nut7CommandC2EPNS_6DeviceERKSs@Base 2.7.2 - _ZN3nut7CommandC2ERKS0_@Base 2.7.2 - _ZN3nut7CommandD1Ev@Base 2.7.2 - _ZN3nut7CommandD2Ev@Base 2.7.2 - _ZN3nut8Variable14getDescriptionEv@Base 2.7.2 - _ZN3nut8Variable8getValueEv@Base 2.7.2 - _ZN3nut8Variable8setValueERKSs@Base 2.7.2 - _ZN3nut8Variable9getDeviceEv@Base 2.7.2 - _ZN3nut8Variable9setValuesERKSt6vectorISsSaISsEE@Base 2.7.2 - _ZN3nut8VariableC1EPNS_6DeviceERKSs@Base 2.7.2 - _ZN3nut8VariableC1ERKS0_@Base 2.7.2 - _ZN3nut8VariableC2EPNS_6DeviceERKSs@Base 2.7.2 - _ZN3nut8VariableC2ERKS0_@Base 2.7.2 - _ZN3nut8VariableD1Ev@Base 2.7.2 - _ZN3nut8VariableD2Ev@Base 2.7.2 - _ZN3nut8internal6Socket10disconnectEv@Base 2.7.2 - _ZN3nut8internal6Socket10setTimeoutEl@Base 2.7.2 - _ZN3nut8internal6Socket4readEPvm@Base 2.7.2 - _ZN3nut8internal6Socket4readEv@Base 2.7.2 - _ZN3nut8internal6Socket5writeEPKvm@Base 2.7.2 - _ZN3nut8internal6Socket5writeERKSs@Base 2.7.2 - _ZN3nut8internal6Socket7connectERKSsi@Base 2.7.2 - _ZN3nut8internal6SocketC1Ev@Base 2.7.2 - _ZN3nut8internal6SocketC2Ev@Base 2.7.2 - _ZN3nut9TcpClient10disconnectEv@Base 2.7.2 - _ZN3nut9TcpClient10setTimeoutEl@Base 2.7.2 - _ZN3nut9TcpClient11detectErrorERKSs@Base 2.7.2 - _ZN3nut9TcpClient11deviceLoginERKSs@Base 2.7.2 - _ZN3nut9TcpClient12authenticateERKSsS2_@Base 2.7.2 - _ZN3nut9TcpClient12deviceMasterERKSs@Base 2.7.2 - _ZN3nut9TcpClient14getDeviceNamesEv@Base 2.7.2 - _ZN3nut9TcpClient17setDeviceVariableERKSsS2_RKSt6vectorISsSaISsEE@Base 2.7.2 - _ZN3nut9TcpClient17setDeviceVariableERKSsS2_S2_@Base 2.7.2 - _ZN3nut9TcpClient18deviceGetNumLoginsERKSs@Base 2.7.2 - _ZN3nut9TcpClient20deviceForcedShutdownERKSs@Base 2.7.2 - _ZN3nut9TcpClient20executeDeviceCommandERKSsS2_@Base 2.7.2 - _ZN3nut9TcpClient20getDeviceDescriptionERKSs@Base 2.7.2 - _ZN3nut9TcpClient21getDeviceCommandNamesERKSs@Base 2.7.2 - _ZN3nut9TcpClient22getDeviceVariableNamesERKSs@Base 2.7.2 - _ZN3nut9TcpClient22getDeviceVariableValueERKSsS2_@Base 2.7.2 - _ZN3nut9TcpClient23getDeviceVariableValuesERKSs@Base 2.7.2 - _ZN3nut9TcpClient24getDeviceRWVariableNamesERKSs@Base 2.7.2 - _ZN3nut9TcpClient27getDeviceCommandDescriptionERKSsS2_@Base 2.7.2 - _ZN3nut9TcpClient28getDeviceVariableDescriptionERKSsS2_@Base 2.7.2 - _ZN3nut9TcpClient3getERKSsS2_@Base 2.7.2 - _ZN3nut9TcpClient4listERKSsS2_@Base 2.7.2 - _ZN3nut9TcpClient6escapeERKSs@Base 2.7.2 - _ZN3nut9TcpClient6logoutEv@Base 2.7.2 - _ZN3nut9TcpClient7connectERKSsi@Base 2.7.2 - _ZN3nut9TcpClient7connectEv@Base 2.7.2 - _ZN3nut9TcpClient7explodeERKSsm@Base 2.7.2 - _ZN3nut9TcpClient9getDeviceERKSs@Base 2.7.2 - _ZN3nut9TcpClient9sendQueryERKSs@Base 2.7.2 - _ZN3nut9TcpClientC1ERKSsi@Base 2.7.2 - _ZN3nut9TcpClientC1Ev@Base 2.7.2 - _ZN3nut9TcpClientC2ERKSsi@Base 2.7.2 - _ZN3nut9TcpClientC2Ev@Base 2.7.2 - _ZN3nut9TcpClientD1Ev@Base 2.7.2 - _ZN3nut9TcpClientD2Ev@Base 2.7.2 - _ZNK3nut12NutException3strEv@Base 2.7.2 - _ZNK3nut12NutException4whatEv@Base 2.7.2 - _ZNK3nut6Device4isOkEv@Base 2.7.2 - _ZNK3nut6Device7getNameEv@Base 2.7.2 - _ZNK3nut6Device9getClientEv@Base 2.7.2 - _ZNK3nut6DevicecvbEv@Base 2.7.2 - _ZNK3nut6DeviceeqERKS0_@Base 2.7.2 - _ZNK3nut6DeviceltERKS0_@Base 2.7.2 - _ZNK3nut6DevicentEv@Base 2.7.2 - _ZNK3nut7Command4isOkEv@Base 2.7.2 - _ZNK3nut7Command7getNameEv@Base 2.7.2 - _ZNK3nut7Command9getDeviceEv@Base 2.7.2 - _ZNK3nut7CommandcvbEv@Base 2.7.2 - _ZNK3nut7CommandeqERKS0_@Base 2.7.2 - _ZNK3nut7CommandltERKS0_@Base 2.7.2 - _ZNK3nut7CommandntEv@Base 2.7.2 - _ZNK3nut8Variable4isOkEv@Base 2.7.2 - _ZNK3nut8Variable7getNameEv@Base 2.7.2 - _ZNK3nut8Variable9getDeviceEv@Base 2.7.2 - _ZNK3nut8VariablecvbEv@Base 2.7.2 - _ZNK3nut8VariableeqERKS0_@Base 2.7.2 - _ZNK3nut8VariableltERKS0_@Base 2.7.2 - _ZNK3nut8VariablentEv@Base 2.7.2 - _ZNK3nut8internal6Socket11isConnectedEv@Base 2.7.2 - _ZNK3nut9TcpClient10getTimeoutEv@Base 2.7.2 - _ZNK3nut9TcpClient11isConnectedEv@Base 2.7.2 - _ZNK3nut9TcpClient7getHostEv@Base 2.7.2 - _ZNK3nut9TcpClient7getPortEv@Base 2.7.2 - _ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag@Base 2.7.2 - _ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3_@Base 2.7.2 - _ZNSt4pairIKSsSt6vectorISsSaISsEEED1Ev@Base 2.7.2 - _ZNSt4pairIKSsSt6vectorISsSaISsEEED2Ev@Base 2.7.2 - _ZNSt6vectorIS_ISsSaISsEESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_@Base 2.7.2 - _ZNSt6vectorIS_ISsSaISsEESaIS1_EED1Ev@Base 2.7.2 - _ZNSt6vectorIS_ISsSaISsEESaIS1_EED2Ev@Base 2.7.2 - _ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs@Base 2.7.2 - _ZNSt6vectorISsSaISsEED1Ev@Base 2.7.2 - _ZNSt6vectorISsSaISsEED2Ev@Base 2.7.2 - _ZNSt6vectorISsSaISsEEaSERKS1_@Base 2.7.2 - _ZNSt8_Rb_treeIN3nut6DeviceES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E@Base 2.7.2 - _ZNSt8_Rb_treeIN3nut7CommandES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E@Base 2.7.2 - _ZNSt8_Rb_treeIN3nut8VariableES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_uniqueERKS1_@Base 2.7.2 - _ZNSt8_Rb_treeIN3nut8VariableES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E@Base 2.7.2 - _ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs@Base 2.7.2 - _ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs@Base 2.7.2 - _ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE@Base 2.7.2 - _ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorISsSaISsEEESt10_Select1stIS5_ESt4lessISsESaIS5_EE10_M_insert_EPSt18_Rb_tree_node_baseSD_RKS5_@Base 2.7.2 - _ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorISsSaISsEEESt10_Select1stIS5_ESt4lessISsESaIS5_EE24_M_get_insert_unique_posERS1_@Base 2.7.2 - _ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorISsSaISsEEESt10_Select1stIS5_ESt4lessISsESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS1_@Base 2.7.2 - _ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorISsSaISsEEESt10_Select1stIS5_ESt4lessISsESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E@Base 2.7.2 - _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_@Base 2.7.2 - _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_@Base 2.7.2 - _ZTIN3nut11IOExceptionE@Base 2.7.2 - _ZTIN3nut12NutExceptionE@Base 2.7.2 - _ZTIN3nut15SystemExceptionE@Base 2.7.2 - _ZTIN3nut16TimeoutExceptionE@Base 2.7.2 - _ZTIN3nut20UnknownHostExceptionE@Base 2.7.2 - _ZTIN3nut21NotConnectedExceptionE@Base 2.7.2 - _ZTIN3nut6ClientE@Base 2.7.2 - _ZTIN3nut9TcpClientE@Base 2.7.2 - _ZTSN3nut11IOExceptionE@Base 2.7.2 - _ZTSN3nut12NutExceptionE@Base 2.7.2 - _ZTSN3nut15SystemExceptionE@Base 2.7.2 - _ZTSN3nut16TimeoutExceptionE@Base 2.7.2 - _ZTSN3nut20UnknownHostExceptionE@Base 2.7.2 - _ZTSN3nut21NotConnectedExceptionE@Base 2.7.2 - _ZTSN3nut6ClientE@Base 2.7.2 - _ZTSN3nut9TcpClientE@Base 2.7.2 - _ZTVN3nut11IOExceptionE@Base 2.7.2 - _ZTVN3nut12NutExceptionE@Base 2.7.2 - _ZTVN3nut15SystemExceptionE@Base 2.7.2 - _ZTVN3nut16TimeoutExceptionE@Base 2.7.2 - _ZTVN3nut20UnknownHostExceptionE@Base 2.7.2 - _ZTVN3nut21NotConnectedExceptionE@Base 2.7.2 - _ZTVN3nut6ClientE@Base 2.7.2 - _ZTVN3nut9TcpClientE@Base 2.7.2 + (c++)"nut::IOException::~IOException()@Base" 2.7.2 + (c++)"nut::NutException::NutException(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::NutException::~NutException()@Base" 2.7.2 + (c++)"nut::SystemException::err()@Base" 2.7.2 + (c++)"nut::SystemException::SystemException()@Base" 2.7.2 + (c++)"nut::SystemException::~SystemException()@Base" 2.7.2 + (c++)"nut::TimeoutException::TimeoutException()@Base" 2.7.2 + (c++)"nut::TimeoutException::~TimeoutException()@Base" 2.7.2 + (c++)"nut::UnknownHostException::UnknownHostException()@Base" 2.7.2 + (c++)"nut::UnknownHostException::~UnknownHostException()@Base" 2.7.2 + (c++)"nut::NotConnectedException::NotConnectedException()@Base" 2.7.2 + (c++)"nut::NotConnectedException::~NotConnectedException()@Base" 2.7.2 + (c++)"nut::Client::getDevices()@Base" 2.7.2 + (c++)"nut::Client::hasDeviceCommand(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Client::hasDeviceVariable(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Client::getDeviceVariableValues(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Client::getDevice(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Client::hasDevice(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Client::Client()@Base" 2.7.2 + (c++)"nut::Client::~Client()@Base" 2.7.2 + (c++)"nut::Device::getCommand(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Device::getCommands()@Base" 2.7.2 + (c++)"nut::Device::getVariable(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Device::setVariable(std::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.2 + (c++)"nut::Device::setVariable(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Device::getNumLogins()@Base" 2.7.2 + (c++)"nut::Device::getVariables()@Base" 2.7.2 + (c++)"nut::Device::executeCommand(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Device::forcedShutdown()@Base" 2.7.2 + (c++)"nut::Device::getDescription()@Base" 2.7.2 + (c++)"nut::Device::getRWVariables()@Base" 2.7.2 + (c++)"nut::Device::getCommandNames()@Base" 2.7.2 + (c++)"nut::Device::getVariableNames()@Base" 2.7.2 + (c++)"nut::Device::getVariableValue(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Device::getVariableValues()@Base" 2.7.2 + (c++)"nut::Device::getRWVariableNames()@Base" 2.7.2 + (c++)"nut::Device::login()@Base" 2.7.2 + (c++)"nut::Device::master()@Base" 2.7.2 + (c++)"nut::Device::getClient()@Base" 2.7.2 + (c++)"nut::Device::Device(nut::Client*, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Device::Device(nut::Device const&)@Base" 2.7.2 + (c++)"nut::Device::~Device()@Base" 2.7.2 + (c++)"nut::Command::getDescription()@Base" 2.7.2 + (c++)"nut::Command::execute()@Base" 2.7.2 + (c++)"nut::Command::getDevice()@Base" 2.7.2 + (c++)"nut::Command::Command(nut::Device*, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Command::Command(nut::Command const&)@Base" 2.7.2 + (c++)"nut::Command::~Command()@Base" 2.7.2 + (c++)"nut::Variable::getDescription()@Base" 2.7.2 + (c++)"nut::Variable::getValue()@Base" 2.7.2 + (c++)"nut::Variable::setValue(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Variable::getDevice()@Base" 2.7.2 + (c++)"nut::Variable::setValues(std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.2 + (c++)"nut::Variable::Variable(nut::Device*, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::Variable::Variable(nut::Variable const&)@Base" 2.7.2 + (c++)"nut::Variable::~Variable()@Base" 2.7.2 + (c++)"nut::internal::Socket::disconnect()@Base" 2.7.2 + (c++)"nut::internal::Socket::setTimeout(long)@Base" 2.7.2 + (c++)"nut::internal::Socket::read(void*, unsigned long)@Base" 2.7.2 + (c++)"nut::internal::Socket::read()@Base" 2.7.2 + (c++)"nut::internal::Socket::write(void const*, unsigned long)@Base" 2.7.2 + (c++)"nut::internal::Socket::write(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::internal::Socket::connect(std::basic_string, std::allocator > const&, int)@Base" 2.7.2 + (c++)"nut::internal::Socket::Socket()@Base" 2.7.2 + (c++)"nut::TcpClient::disconnect()@Base" 2.7.2 + (c++)"nut::TcpClient::setTimeout(long)@Base" 2.7.2 + (c++)"nut::TcpClient::detectError(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::deviceLogin(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::authenticate(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::deviceMaster(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::getDeviceNames()@Base" 2.7.2 + (c++)"nut::TcpClient::setDeviceVariable(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::setDeviceVariable(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::deviceGetNumLogins(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::deviceForcedShutdown(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::executeDeviceCommand(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::getDeviceDescription(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::getDeviceCommandNames(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::getDeviceVariableNames(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::getDeviceVariableValue(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::getDeviceVariableValues(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::getDeviceRWVariableNames(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::getDeviceCommandDescription(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::getDeviceVariableDescription(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::get(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::list(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::escape(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::logout()@Base" 2.7.2 + (c++)"nut::TcpClient::connect(std::basic_string, std::allocator > const&, int)@Base" 2.7.2 + (c++)"nut::TcpClient::connect()@Base" 2.7.2 + (c++)"nut::TcpClient::explode(std::basic_string, std::allocator > const&, unsigned long)@Base" 2.7.2 + (c++)"nut::TcpClient::getDevice(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::sendQuery(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"nut::TcpClient::TcpClient(std::basic_string, std::allocator > const&, int)@Base" 2.7.2 + (c++)"nut::TcpClient::TcpClient()@Base" 2.7.2 + (c++)"nut::TcpClient::~TcpClient()@Base" 2.7.2 + (c++)"nut::NutException::str() const@Base" 2.7.2 + (c++)"nut::NutException::what() const@Base" 2.7.2 + (c++)"nut::Device::isOk() const@Base" 2.7.2 + (c++)"nut::Device::getName() const@Base" 2.7.2 + (c++)"nut::Device::getClient() const@Base" 2.7.2 + (c++)"nut::Device::operator bool() const@Base" 2.7.2 + (c++)"nut::Device::operator==(nut::Device const&) const@Base" 2.7.2 + (c++)"nut::Device::operator<(nut::Device const&) const@Base" 2.7.2 + (c++)"nut::Device::operator!() const@Base" 2.7.2 + (c++)"nut::Command::isOk() const@Base" 2.7.2 + (c++)"nut::Command::getName() const@Base" 2.7.2 + (c++)"nut::Command::getDevice() const@Base" 2.7.2 + (c++)"nut::Command::operator bool() const@Base" 2.7.2 + (c++)"nut::Command::operator==(nut::Command const&) const@Base" 2.7.2 + (c++)"nut::Command::operator<(nut::Command const&) const@Base" 2.7.2 + (c++)"nut::Command::operator!() const@Base" 2.7.2 + (c++)"nut::Variable::isOk() const@Base" 2.7.2 + (c++)"nut::Variable::getName() const@Base" 2.7.2 + (c++)"nut::Variable::getDevice() const@Base" 2.7.2 + (c++)"nut::Variable::operator bool() const@Base" 2.7.2 + (c++)"nut::Variable::operator==(nut::Variable const&) const@Base" 2.7.2 + (c++)"nut::Variable::operator<(nut::Variable const&) const@Base" 2.7.2 + (c++)"nut::Variable::operator!() const@Base" 2.7.2 + (c++)"nut::internal::Socket::isConnected() const@Base" 2.7.2 + (c++)"nut::TcpClient::getTimeout() const@Base" 2.7.2 + (c++)"nut::TcpClient::isConnected() const@Base" 2.7.2 + (c++)"nut::TcpClient::getHost() const@Base" 2.7.2 + (c++)"nut::TcpClient::getPort() const@Base" 2.7.2 + (c++)"char* std::basic_string, std::allocator >::_S_construct(char*, char*, std::allocator const&, std::forward_iterator_tag)@Base" 2.7.2 + (c++)"void std::_Destroy_aux::__destroy, std::allocator >*>(std::basic_string, std::allocator >*, std::basic_string, std::allocator >*)@Base" 2.7.2 + (c++)"std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >::~pair()@Base" 2.7.2 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator, std::allocator >, std::allocator, std::allocator > > > > >::_M_insert_aux(__gnu_cxx::__normal_iterator, std::allocator >, std::allocator, std::allocator > > >*, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator, std::allocator >, std::allocator, std::allocator > > > > > >, std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.2 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator, std::allocator >, std::allocator, std::allocator > > > > >::~vector()@Base" 2.7.2 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >::_M_insert_aux(__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >::~vector()@Base" 2.7.2 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >::operator=(std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::less, std::allocator >::_M_insert_unique(nut::Variable const&)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::allocator >, std::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_insert_unique(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::allocator >, std::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::find(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::allocator >, std::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_erase(std::_Rb_tree_node, std::allocator > >*)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_insert_(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > const&)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_get_insert_unique_pos(std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >*)@Base" 2.7.2 + (c++)"std::basic_string, std::allocator > std::operator+, std::allocator >(char const*, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"std::basic_string, std::allocator > std::operator+, std::allocator >(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 + (c++)"typeinfo for nut::IOException@Base" 2.7.2 + (c++)"typeinfo for nut::NutException@Base" 2.7.2 + (c++)"typeinfo for nut::SystemException@Base" 2.7.2 + (c++)"typeinfo for nut::TimeoutException@Base" 2.7.2 + (c++)"typeinfo for nut::UnknownHostException@Base" 2.7.2 + (c++)"typeinfo for nut::NotConnectedException@Base" 2.7.2 + (c++)"typeinfo for nut::Client@Base" 2.7.2 + (c++)"typeinfo for nut::TcpClient@Base" 2.7.2 + (c++)"typeinfo name for nut::IOException@Base" 2.7.2 + (c++)"typeinfo name for nut::NutException@Base" 2.7.2 + (c++)"typeinfo name for nut::SystemException@Base" 2.7.2 + (c++)"typeinfo name for nut::TimeoutException@Base" 2.7.2 + (c++)"typeinfo name for nut::UnknownHostException@Base" 2.7.2 + (c++)"typeinfo name for nut::NotConnectedException@Base" 2.7.2 + (c++)"typeinfo name for nut::Client@Base" 2.7.2 + (c++)"typeinfo name for nut::TcpClient@Base" 2.7.2 + (c++)"vtable for nut::IOException@Base" 2.7.2 + (c++)"vtable for nut::NutException@Base" 2.7.2 + (c++)"vtable for nut::SystemException@Base" 2.7.2 + (c++)"vtable for nut::TimeoutException@Base" 2.7.2 + (c++)"vtable for nut::UnknownHostException@Base" 2.7.2 + (c++)"vtable for nut::NotConnectedException@Base" 2.7.2 + (c++)"vtable for nut::Client@Base" 2.7.2 + (c++)"vtable for nut::TcpClient@Base" 2.7.2 nutclient_authenticate@Base 2.7.2 nutclient_destroy@Base 2.7.2 nutclient_device_forced_shutdown@Base 2.7.2 From 819cab0654a2a599dae96550a120c9a37a6aae29 Mon Sep 17 00:00:00 2001 From: Neil Williams Date: Sat, 17 Jan 2015 10:29:11 +0000 Subject: [PATCH 159/291] Imported Debian patch 2.7.2-1.1 --- debian/changelog | 8 ++++++++ debian/rules | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index e940af1..f8ba3fa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +nut (2.7.2-1.1) unstable; urgency=medium + + * Non-maintainer upload. + * Port Ubuntu change to drop upstream systemd unit files to allow + sysvinit files for Jessie. (Closes: #747863) + + -- Neil Williams Sat, 17 Jan 2015 10:29:11 +0000 + nut (2.7.2-1) unstable; urgency=low * New upstream release diff --git a/debian/rules b/debian/rules index b169acd..084af15 100755 --- a/debian/rules +++ b/debian/rules @@ -78,7 +78,9 @@ common-install-arch:: $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so # Install systemd files only on systems where it's supported -ifeq (linux,$(DEB_HOST_ARCH_OS)) + # disabled in Ubuntu until the unit gets fixed to check nut.conf + # disabled in Debian Jessie to retain sysvinit support until fix is available +ifeq (linux-disabled,$(DEB_HOST_ARCH_OS)) install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-monitor.service \ $(CURDIR)/debian/nut-client/lib/systemd/system/nut-monitor.service install -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system-shutdown/nutshutdown \ From f07df515f5ce5a258e05d6e9f4174391edf3da75 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 25 Jan 2015 12:28:45 +0100 Subject: [PATCH 160/291] debian/gbp.conf: Switch to debian-jessie branch --- debian/changelog | 6 ++++++ debian/gbp.conf | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index f8ba3fa..bedfdc1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +nut (2.7.2-2) UNRELEASED; urgency=medium + + * debian/gbp.conf: Switch to debian-jessie branch + + -- Laurent Bigonville Sun, 25 Jan 2015 12:28:14 +0100 + nut (2.7.2-1.1) unstable; urgency=medium * Non-maintainer upload. diff --git a/debian/gbp.conf b/debian/gbp.conf index 6837223..2e63610 100644 --- a/debian/gbp.conf +++ b/debian/gbp.conf @@ -1,5 +1,5 @@ [DEFAULT] -debian-branch = debian +debian-branch = debian-jessie upstream-branch = upstream pristine-tar = True From fedf671e4dee3c649022eab07663c768a8d52163 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 25 Jan 2015 12:50:07 +0100 Subject: [PATCH 161/291] Revert the changes made in the previous NMU debian/rules: Revert the changes made in the previous NMU, I don't think that dropping the .service file that late in the release cycle is a good idea and anyway this was causing left-over files on upgrade. --- debian/changelog | 5 ++++- debian/rules | 4 +--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index bedfdc1..4968b14 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,11 @@ nut (2.7.2-2) UNRELEASED; urgency=medium * debian/gbp.conf: Switch to debian-jessie branch + * debian/rules: Revert the changes made in the previous NMU, I don't think + that dropping the .service file that late in the release cycle is a good + idea and anyway this was causing left-over files on upgrade. - -- Laurent Bigonville Sun, 25 Jan 2015 12:28:14 +0100 + -- Laurent Bigonville Sun, 25 Jan 2015 12:47:47 +0100 nut (2.7.2-1.1) unstable; urgency=medium diff --git a/debian/rules b/debian/rules index 084af15..b169acd 100755 --- a/debian/rules +++ b/debian/rules @@ -78,9 +78,7 @@ common-install-arch:: $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so # Install systemd files only on systems where it's supported - # disabled in Ubuntu until the unit gets fixed to check nut.conf - # disabled in Debian Jessie to retain sysvinit support until fix is available -ifeq (linux-disabled,$(DEB_HOST_ARCH_OS)) +ifeq (linux,$(DEB_HOST_ARCH_OS)) install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-monitor.service \ $(CURDIR)/debian/nut-client/lib/systemd/system/nut-monitor.service install -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system-shutdown/nutshutdown \ From 241119d464a2c8b1afdc20f0a15395ec2ef8e7fd Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 25 Jan 2015 12:54:03 +0100 Subject: [PATCH 162/291] Add wrappers that check the MODE in /etc/nut/nut.conf to avoid starting the daemons if nut is not configured (Closes: #747863). --- debian/changelog | 4 +++- debian/local/upsd | 19 +++++++++++++++++++ debian/local/upsmon | 19 +++++++++++++++++++ debian/nut-client.install | 1 + debian/nut-server.install | 1 + debian/rules | 6 ++++++ 6 files changed, 49 insertions(+), 1 deletion(-) create mode 100755 debian/local/upsd create mode 100755 debian/local/upsmon diff --git a/debian/changelog b/debian/changelog index 4968b14..acd59b2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,8 +4,10 @@ nut (2.7.2-2) UNRELEASED; urgency=medium * debian/rules: Revert the changes made in the previous NMU, I don't think that dropping the .service file that late in the release cycle is a good idea and anyway this was causing left-over files on upgrade. + * Add wrappers that check the MODE in /etc/nut/nut.conf to avoid starting + the daemons if nut is not configured (Closes: #747863). - -- Laurent Bigonville Sun, 25 Jan 2015 12:47:47 +0100 + -- Laurent Bigonville Sun, 25 Jan 2015 12:53:03 +0100 nut (2.7.2-1.1) unstable; urgency=medium diff --git a/debian/local/upsd b/debian/local/upsd new file mode 100755 index 0000000..5e4d2a4 --- /dev/null +++ b/debian/local/upsd @@ -0,0 +1,19 @@ +#!/bin/sh + +# Include NUT nut.conf +[ -r /etc/nut/nut.conf ] && . /etc/nut/nut.conf + +case "$MODE" in + standalone|netserver) + exec /lib/nut/upsd "$@" + ;; + none|netclient) + echo "upsd disabled, please adjust the configuration to your needs" + echo "Then set MODE to a suitable value in /etc/nut/nut.conf to enable it" + # exit success to avoid breaking the install process! + exit 0 + ;; + *) + exit 1 + ;; +esac diff --git a/debian/local/upsmon b/debian/local/upsmon new file mode 100755 index 0000000..a9f6d1b --- /dev/null +++ b/debian/local/upsmon @@ -0,0 +1,19 @@ +#!/bin/sh + +# Include NUT nut.conf +[ -r /etc/nut/nut.conf ] && . /etc/nut/nut.conf + +case "$MODE" in + standalone|netserver|netclient) + exec /lib/nut/upsmon "$@" + ;; + none) + echo "upsmon disabled, please adjust the configuration to your needs" + echo "Then set MODE to a suitable value in /etc/nut/nut.conf to enable it" + # exit success to avoid breaking the install process! + exit 0 + ;; + *) + exit 1 + ;; +esac diff --git a/debian/nut-client.install b/debian/nut-client.install index b899f84..e9e32e4 100644 --- a/debian/nut-client.install +++ b/debian/nut-client.install @@ -3,6 +3,7 @@ debian/tmp/bin/upsc debian/tmp/bin/upsrw debian/tmp/bin/upscmd debian/tmp/sbin/upsmon +debian/tmp/lib/nut/upsmon debian/tmp/sbin/upssched debian/tmp/bin/upssched-cmd debian/tmp/etc/nut/nut.conf diff --git a/debian/nut-server.install b/debian/nut-server.install index 8b67a85..bbc50da 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -1,4 +1,5 @@ debian/tmp/sbin/upsd +debian/tmp/lib/nut/upsd debian/tmp/sbin/upsdrvctl debian/tmp/usr/share/nut/cmdvartab debian/tmp/usr/share/nut/driver.list diff --git a/debian/rules b/debian/rules index b169acd..c667da4 100755 --- a/debian/rules +++ b/debian/rules @@ -77,6 +77,12 @@ common-install-arch:: ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.4 \ $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so + # Move daemons and install wrappers + mv $(CURDIR)/debian/tmp/sbin/upsmon $(CURDIR)/debian/tmp/lib/nut/upsmon + mv $(CURDIR)/debian/tmp/sbin/upsd $(CURDIR)/debian/tmp/lib/nut/upsd + install -m 0755 debian/local/upsmon $(CURDIR)/debian/tmp/sbin/upsmon + install -m 0755 debian/local/upsd $(CURDIR)/debian/tmp/sbin/upsd + # Install systemd files only on systems where it's supported ifeq (linux,$(DEB_HOST_ARCH_OS)) install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-monitor.service \ From 1563b485dc5490a087a64f3da08cb41ebd553fa6 Mon Sep 17 00:00:00 2001 From: Michael Fincham Date: Fri, 13 Feb 2015 11:39:10 +1300 Subject: [PATCH 163/291] Add patch that detects and corrects unsafe permissions on ~/.nut-monitor left over from old installations during NUT-Monitor startup. (Closes: #777706) --- debian/NEWS | 13 ++++ debian/changelog | 8 ++- .../0009-fix-favorites-permissions.patch | 69 +++++++++++++++++++ debian/patches/series | 1 + 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 debian/patches/0009-fix-favorites-permissions.patch diff --git a/debian/NEWS b/debian/NEWS index e42605c..53ca695 100644 --- a/debian/NEWS +++ b/debian/NEWS @@ -1,3 +1,16 @@ +nut (2.7.2-2) unstable; urgency=medium + + Since version 1.2 NUT-Monitor uses safer directory permissions when + creating ~/.nut-monitor. + + NUT-Monitor will now detect a pre-1.2 settings directory on startup + and update its permissions. + + Please note that passwords stored in NUT-Monitor prior to this change + may have been exposed, and it is recommended that they be reset. + + -- Michael Fincham Fri, 13 Feb 2015 11:57:12 +1300 + nut (2.6.5-1) experimental; urgency=low mge-shut driver has been replaced by a new implementation (newmge-shut). diff --git a/debian/changelog b/debian/changelog index acd59b2..8332b74 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,6 @@ nut (2.7.2-2) UNRELEASED; urgency=medium + [ Laurent Bigonville ] * debian/gbp.conf: Switch to debian-jessie branch * debian/rules: Revert the changes made in the previous NMU, I don't think that dropping the .service file that late in the release cycle is a good @@ -7,7 +8,12 @@ nut (2.7.2-2) UNRELEASED; urgency=medium * Add wrappers that check the MODE in /etc/nut/nut.conf to avoid starting the daemons if nut is not configured (Closes: #747863). - -- Laurent Bigonville Sun, 25 Jan 2015 12:53:03 +0100 + [ Michael Fincham ] + * Add patch that detects and corrects unsafe permissions on ~/.nut-monitor + left over from old installations during NUT-Monitor startup. + (Closes: #777706) + + -- Michael Fincham Fri, 13 Feb 2015 11:39:10 +1300 nut (2.7.2-1.1) unstable; urgency=medium diff --git a/debian/patches/0009-fix-favorites-permissions.patch b/debian/patches/0009-fix-favorites-permissions.patch new file mode 100644 index 0000000..7128250 --- /dev/null +++ b/debian/patches/0009-fix-favorites-permissions.patch @@ -0,0 +1,69 @@ +If a ~/.nut-monitor directory is found with insecure permissions, change them to 0700. +--- a/scripts/python/app/NUT-Monitor ++++ b/scripts/python/app/NUT-Monitor +@@ -29,6 +29,7 @@ + import sys + import base64 + import os, os.path ++import stat + import platform + import time + import threading +@@ -44,21 +45,23 @@ + + class interface : + +- __widgets = {} +- __callbacks = {} +- __favorites = {} +- __favorites_file = None +- __favorites_path = "" +- __fav_menu_items = list() +- __window_visible = True +- __glade_file = None +- __connected = False +- __ups_handler = None +- __ups_commands = None +- __ups_vars = None +- __ups_rw_vars = None +- __gui_thread = None +- __current_ups = None ++ DESIRED_FAVORITES_DIRECTORY_MODE = 0700 ++ ++ __widgets = {} ++ __callbacks = {} ++ __favorites = {} ++ __favorites_file = None ++ __favorites_path = "" ++ __fav_menu_items = list() ++ __window_visible = True ++ __glade_file = None ++ __connected = False ++ __ups_handler = None ++ __ups_commands = None ++ __ups_vars = None ++ __ups_rw_vars = None ++ __gui_thread = None ++ __current_ups = None + + def __init__( self ) : + +@@ -528,6 +531,9 @@ + return + + try : ++ if ( not stat.S_IMODE( os.stat( self.__favorites_path ).st_mode ) == self.DESIRED_FAVORITES_DIRECTORY_MODE ) : # unsafe pre-1.2 directory found ++ os.chmod( self.__favorites_path, self.DESIRED_FAVORITES_DIRECTORY_MODE ) ++ + conf = ConfigParser.ConfigParser() + conf.read( self.__favorites_file ) + for current in conf.sections() : +@@ -573,7 +579,7 @@ + # If path does not exists, try to create it + if ( not os.path.exists( self.__favorites_file ) ) : + try : +- os.makedirs( self.__favorites_path, mode=0700 ) ++ os.makedirs( self.__favorites_path, mode=self.DESIRED_FAVORITES_DIRECTORY_MODE ) + except : + self.gui_status_message( _("Error while creating configuration folder (%s)") % sys.exc_info()[1] ) + diff --git a/debian/patches/series b/debian/patches/series index 5046408..fbaa314 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -4,3 +4,4 @@ 0006-ups-conf-maxretry.patch 0007-killpower-path.patch 0008-drop-w3c-icons.patch +0009-fix-favorites-permissions.patch From f8cfca1b183d27f69da4b08930b96415f7fc0875 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 17 Feb 2015 10:01:35 +0100 Subject: [PATCH 164/291] Release to unstable --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 8332b74..ac59e51 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -nut (2.7.2-2) UNRELEASED; urgency=medium +nut (2.7.2-2) unstable; urgency=medium [ Laurent Bigonville ] * debian/gbp.conf: Switch to debian-jessie branch @@ -13,7 +13,7 @@ nut (2.7.2-2) UNRELEASED; urgency=medium left over from old installations during NUT-Monitor startup. (Closes: #777706) - -- Michael Fincham Fri, 13 Feb 2015 11:39:10 +1300 + -- Laurent Bigonville Tue, 17 Feb 2015 09:54:11 +0100 nut (2.7.2-1.1) unstable; urgency=medium From 47e0e45e3531240f8a08faa025acd982efa01de6 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 17 Feb 2015 10:43:27 +0100 Subject: [PATCH 165/291] debian/NEWS: Fix NEWS file syntax --- debian/NEWS | 12 ++++++------ debian/changelog | 6 ++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/debian/NEWS b/debian/NEWS index 53ca695..c943bb7 100644 --- a/debian/NEWS +++ b/debian/NEWS @@ -1,13 +1,13 @@ nut (2.7.2-2) unstable; urgency=medium - Since version 1.2 NUT-Monitor uses safer directory permissions when - creating ~/.nut-monitor. + Since version 1.2 NUT-Monitor uses safer directory permissions when + creating ~/.nut-monitor. - NUT-Monitor will now detect a pre-1.2 settings directory on startup - and update its permissions. + NUT-Monitor will now detect a pre-1.2 settings directory on startup + and update its permissions. - Please note that passwords stored in NUT-Monitor prior to this change - may have been exposed, and it is recommended that they be reset. + Please note that passwords stored in NUT-Monitor prior to this change + may have been exposed, and it is recommended that they be reset. -- Michael Fincham Fri, 13 Feb 2015 11:57:12 +1300 diff --git a/debian/changelog b/debian/changelog index ac59e51..5e7a799 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +nut (2.7.2-3) UNRELEASED; urgency=medium + + * debian/NEWS: Fix NEWS file syntax + + -- Laurent Bigonville Tue, 17 Feb 2015 10:40:24 +0100 + nut (2.7.2-2) unstable; urgency=medium [ Laurent Bigonville ] From 64e656ba48ad625257835f9baad856f2e13ab9bf Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Tue, 17 Feb 2015 23:17:22 +0100 Subject: [PATCH 166/291] Release to unstable The changelog was not changed before releasing 2.7.2-3 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 5e7a799..e31806e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,8 @@ -nut (2.7.2-3) UNRELEASED; urgency=medium +nut (2.7.2-3) unstable; urgency=medium * debian/NEWS: Fix NEWS file syntax - -- Laurent Bigonville Tue, 17 Feb 2015 10:40:24 +0100 + -- Laurent Bigonville Tue, 17 Feb 2015 23:13:02 +0100 nut (2.7.2-2) unstable; urgency=medium From 5dc71af1098a1774681f6cf632488e31a6f7a349 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 15 Mar 2015 11:14:01 +0100 Subject: [PATCH 167/291] Really fix package initial installation when PID1 is systemd (Closes: #747863) --- debian/changelog | 7 +++++++ debian/nut-client.postinst | 11 +++++++++++ debian/nut-client.prerm | 13 +++++++++++++ debian/nut-server.postinst | 13 +++++++++++++ debian/nut-server.prerm | 7 +++++++ debian/rules | 4 ++-- 6 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 debian/nut-client.prerm diff --git a/debian/changelog b/debian/changelog index e31806e..d2a67f2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +nut (2.7.2-4) UNRELEASED; urgency=medium + + * Really fix package initial installation when PID1 is systemd (Closes: + #747863) + + -- Laurent Bigonville Fri, 20 Mar 2015 00:44:01 +0100 + nut (2.7.2-3) unstable; urgency=medium * debian/NEWS: Fix NEWS file syntax diff --git a/debian/nut-client.postinst b/debian/nut-client.postinst index 4b04850..5d68dae 100644 --- a/debian/nut-client.postinst +++ b/debian/nut-client.postinst @@ -1,5 +1,16 @@ #!/bin/sh -e +handle_start_failure () { +# The nut client part (upsmon) must run in all cases except when MODE in +# /etc/nut/nut.conf is set to "none" or not set at all. + [ -r /etc/nut/nut.conf ] && . /etc/nut/nut.conf + if [ -d /run/systemd/system ] && [ "$MODE" = "none" -o -z "$MODE" ]; then + return 0 + else + return 1 + fi +} + case "$1" in configure) diff --git a/debian/nut-client.prerm b/debian/nut-client.prerm new file mode 100644 index 0000000..e45a69b --- /dev/null +++ b/debian/nut-client.prerm @@ -0,0 +1,13 @@ +#!/bin/sh +set -e + +handle_start_failure () { +# The MODE defined in /etc/nut/nut.conf shouldn't affect the exit code when the +# daemon is stopped. If it fails to stop, the maintainer script should fail +# too. + return 1 +} + +#DEBHELPER# + +exit 0 diff --git a/debian/nut-server.postinst b/debian/nut-server.postinst index 3322126..f0e05c2 100644 --- a/debian/nut-server.postinst +++ b/debian/nut-server.postinst @@ -1,5 +1,18 @@ #!/bin/sh -e +handle_start_failure () { +# The nut server part (upsd) must run in all cases except when MODE in +# /etc/nut/nut.conf is set to "none", not set at all or if the machine is a +# client. + [ -r /etc/nut/nut.conf ] && . /etc/nut/nut.conf + if [ -d /run/systemd/system ] \ + && [ "$MODE" = "none" -o "$MODE" = "netclient" -o -z "$MODE" ]; then + return 0 + else + return 1 + fi +} + case "$1" in configure) diff --git a/debian/nut-server.prerm b/debian/nut-server.prerm index 6292ef8..b68c6d8 100644 --- a/debian/nut-server.prerm +++ b/debian/nut-server.prerm @@ -4,6 +4,13 @@ # because we don't want the daemon to be # stopped during an upgrade +handle_start_failure () { +# The MODE defined in /etc/nut/nut.conf shouldn't affect the exit code when the +# daemon is stopped. If it fails to stop, the maintainer script should fail +# too. + return 1 +} + case "$1" in remove) diff --git a/debian/rules b/debian/rules index c667da4..26bab23 100755 --- a/debian/rules +++ b/debian/rules @@ -119,8 +119,8 @@ common-install-indep:: binary-install/nut-monitor:: dh_python2 -pnut-monitor -DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut-server --restart-after-upgrade -DEB_DH_INSTALLINIT_ARGS_nut-client := --init-script=nut-client --restart-after-upgrade +DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut-server --restart-after-upgrade --error-handler=handle_start_failure +DEB_DH_INSTALLINIT_ARGS_nut-client := --init-script=nut-client --restart-after-upgrade --error-handler=handle_start_failure DEB_DH_SYSTEMD_START_ARGS_nut-server := --restart-after-upgrade DEB_DH_SYSTEMD_START_ARGS_nut-client := --restart-after-upgrade DEB_DH_COMPRESS_ARGS_nut-doc := -X.pdf From 564becd819124049542e5085a7159dd62e00ef97 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Fri, 20 Mar 2015 23:13:01 +0100 Subject: [PATCH 168/291] Release to unstable --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index d2a67f2..37bfd60 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -nut (2.7.2-4) UNRELEASED; urgency=medium +nut (2.7.2-4) unstable; urgency=medium * Really fix package initial installation when PID1 is systemd (Closes: #747863) - -- Laurent Bigonville Fri, 20 Mar 2015 00:44:01 +0100 + -- Laurent Bigonville Fri, 20 Mar 2015 23:12:53 +0100 nut (2.7.2-3) unstable; urgency=medium From 7ca12c8e253a0c3175ba4865a51213e80316b273 Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Thu, 30 Apr 2015 15:58:47 +0200 Subject: [PATCH 169/291] New upstream release --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 687fd78..09d3cfc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +nut (2.7.3-1) UNRELEASED; urgency=low + + * New upstream release + + -- Arnaud Quette Thu, 30 Apr 2015 15:56:50 +0200 + nut (2.7.2-2) UNRELEASED; urgency=low * debian/control: add new packages libnutclient0 and libnutclient-dev From c2a1ac8f1fbdcb98e7c9267ec5bf0ca0759b2acc Mon Sep 17 00:00:00 2001 From: Arnaud Quette Date: Thu, 30 Apr 2015 16:01:34 +0200 Subject: [PATCH 170/291] Remove 0007-killpower-path.patch --- debian/changelog | 1 + debian/patches/0007-killpower-path.patch | 11 ----------- debian/patches/series | 1 - 3 files changed, 1 insertion(+), 12 deletions(-) delete mode 100644 debian/patches/0007-killpower-path.patch diff --git a/debian/changelog b/debian/changelog index 09d3cfc..8868573 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ nut (2.7.3-1) UNRELEASED; urgency=low * New upstream release + * debian/patches/series: remove 0007-killpower-path.patch -- Arnaud Quette Thu, 30 Apr 2015 15:56:50 +0200 diff --git a/debian/patches/0007-killpower-path.patch b/debian/patches/0007-killpower-path.patch deleted file mode 100644 index 537b585..0000000 --- a/debian/patches/0007-killpower-path.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/conf/upsmon.conf.sample.in -+++ b/conf/upsmon.conf.sample.in -@@ -196,7 +196,7 @@ DEADTIME 15 - # - # See the shutdown.txt file in the docs subdirectory for more information. - --POWERDOWNFLAG @CONFPATH@/killpower -+POWERDOWNFLAG /etc/killpower - - # -------------------------------------------------------------------------- - # NOTIFYMSG - change messages sent by upsmon when certain events occur diff --git a/debian/patches/series b/debian/patches/series index 5046408..14e0996 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -2,5 +2,4 @@ 0002-nut-monitor-paths.patch 0004-fix-systemd-service.patch 0006-ups-conf-maxretry.patch -0007-killpower-path.patch 0008-drop-w3c-icons.patch From f5439265c8b3a6c1dd4669edbdab802448c9231f Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 16 Jul 2016 10:47:56 +0200 Subject: [PATCH 171/291] debian/gbp.conf: Switch back the branch to the "debian" one --- debian/changelog | 6 +++++- debian/gbp.conf | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 0088030..8db4090 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,6 @@ nut (2.7.3-1) UNRELEASED; urgency=low + [ Arnaud Quette ] * New upstream release * debian/patches/series: remove 0007-killpower-path.patch * debian/control: add new packages libnutclient0 and libnutclient-dev @@ -8,7 +9,10 @@ nut (2.7.3-1) UNRELEASED; urgency=low debian/libnutclient-dev.install, debian/libnutclient-dev.manpages: created for the new packages - -- Arnaud Quette Mon, 20 Oct 2014 20:41:47 +0200 + [ Laurent Bigonville ] + * debian/gbp.conf: Switch back the branch to the "debian" one + + -- Laurent Bigonville Sat, 16 Jul 2016 10:52:14 +0200 nut (2.7.2-4) unstable; urgency=medium diff --git a/debian/gbp.conf b/debian/gbp.conf index 2e63610..6837223 100644 --- a/debian/gbp.conf +++ b/debian/gbp.conf @@ -1,5 +1,5 @@ [DEFAULT] -debian-branch = debian-jessie +debian-branch = debian upstream-branch = upstream pristine-tar = True From f07d79cd65317bc7ab50c0637fe3b753feda35b5 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 16 Jul 2016 10:57:26 +0200 Subject: [PATCH 172/291] Drop d/p/0009-fix-favorites-permissions.patch, merged upstream --- debian/changelog | 3 +- .../0009-fix-favorites-permissions.patch | 69 ------------------- debian/patches/series | 1 - 3 files changed, 2 insertions(+), 71 deletions(-) delete mode 100644 debian/patches/0009-fix-favorites-permissions.patch diff --git a/debian/changelog b/debian/changelog index 8db4090..1bdd65c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,8 +11,9 @@ nut (2.7.3-1) UNRELEASED; urgency=low [ Laurent Bigonville ] * debian/gbp.conf: Switch back the branch to the "debian" one + * Drop d/p/0009-fix-favorites-permissions.patch, merged upstream - -- Laurent Bigonville Sat, 16 Jul 2016 10:52:14 +0200 + -- Laurent Bigonville Sat, 16 Jul 2016 10:56:38 +0200 nut (2.7.2-4) unstable; urgency=medium diff --git a/debian/patches/0009-fix-favorites-permissions.patch b/debian/patches/0009-fix-favorites-permissions.patch deleted file mode 100644 index 7128250..0000000 --- a/debian/patches/0009-fix-favorites-permissions.patch +++ /dev/null @@ -1,69 +0,0 @@ -If a ~/.nut-monitor directory is found with insecure permissions, change them to 0700. ---- a/scripts/python/app/NUT-Monitor -+++ b/scripts/python/app/NUT-Monitor -@@ -29,6 +29,7 @@ - import sys - import base64 - import os, os.path -+import stat - import platform - import time - import threading -@@ -44,21 +45,23 @@ - - class interface : - -- __widgets = {} -- __callbacks = {} -- __favorites = {} -- __favorites_file = None -- __favorites_path = "" -- __fav_menu_items = list() -- __window_visible = True -- __glade_file = None -- __connected = False -- __ups_handler = None -- __ups_commands = None -- __ups_vars = None -- __ups_rw_vars = None -- __gui_thread = None -- __current_ups = None -+ DESIRED_FAVORITES_DIRECTORY_MODE = 0700 -+ -+ __widgets = {} -+ __callbacks = {} -+ __favorites = {} -+ __favorites_file = None -+ __favorites_path = "" -+ __fav_menu_items = list() -+ __window_visible = True -+ __glade_file = None -+ __connected = False -+ __ups_handler = None -+ __ups_commands = None -+ __ups_vars = None -+ __ups_rw_vars = None -+ __gui_thread = None -+ __current_ups = None - - def __init__( self ) : - -@@ -528,6 +531,9 @@ - return - - try : -+ if ( not stat.S_IMODE( os.stat( self.__favorites_path ).st_mode ) == self.DESIRED_FAVORITES_DIRECTORY_MODE ) : # unsafe pre-1.2 directory found -+ os.chmod( self.__favorites_path, self.DESIRED_FAVORITES_DIRECTORY_MODE ) -+ - conf = ConfigParser.ConfigParser() - conf.read( self.__favorites_file ) - for current in conf.sections() : -@@ -573,7 +579,7 @@ - # If path does not exists, try to create it - if ( not os.path.exists( self.__favorites_file ) ) : - try : -- os.makedirs( self.__favorites_path, mode=0700 ) -+ os.makedirs( self.__favorites_path, mode=self.DESIRED_FAVORITES_DIRECTORY_MODE ) - except : - self.gui_status_message( _("Error while creating configuration folder (%s)") % sys.exc_info()[1] ) - diff --git a/debian/patches/series b/debian/patches/series index 984c24b..14e0996 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -3,4 +3,3 @@ 0004-fix-systemd-service.patch 0006-ups-conf-maxretry.patch 0008-drop-w3c-icons.patch -0009-fix-favorites-permissions.patch From 85836f6836b89033697c1a283c6f7bdc98568880 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 16 Jul 2016 11:00:39 +0200 Subject: [PATCH 173/291] d/p/0002-nut-monitor-paths.patch, d/p/0006-ups-conf-maxretry.patch: Refreshed --- debian/changelog | 4 +++- debian/patches/0002-nut-monitor-paths.patch | 8 ++++---- debian/patches/0006-ups-conf-maxretry.patch | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/debian/changelog b/debian/changelog index 1bdd65c..16bb9f1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,8 +12,10 @@ nut (2.7.3-1) UNRELEASED; urgency=low [ Laurent Bigonville ] * debian/gbp.conf: Switch back the branch to the "debian" one * Drop d/p/0009-fix-favorites-permissions.patch, merged upstream + * d/p/0002-nut-monitor-paths.patch, d/p/0006-ups-conf-maxretry.patch: + Refreshed - -- Laurent Bigonville Sat, 16 Jul 2016 10:56:38 +0200 + -- Laurent Bigonville Sat, 16 Jul 2016 11:00:06 +0200 nut (2.7.2-4) unstable; urgency=medium diff --git a/debian/patches/0002-nut-monitor-paths.patch b/debian/patches/0002-nut-monitor-paths.patch index 00fd0de..88294d6 100644 --- a/debian/patches/0002-nut-monitor-paths.patch +++ b/debian/patches/0002-nut-monitor-paths.patch @@ -1,6 +1,6 @@ --- a/scripts/python/app/NUT-Monitor +++ b/scripts/python/app/NUT-Monitor -@@ -70,7 +70,7 @@ +@@ -76,7 +76,7 @@ class interface : ( cmd_opts, args ) = opt_parser.parse_args() @@ -9,7 +9,7 @@ self.__widgets["interface"] = gtk.glade.XML( self.__glade_file, "window1", APP ) self.__widgets["main_window"] = self.__widgets["interface"].get_widget("window1") -@@ -103,11 +103,11 @@ +@@ -109,11 +109,11 @@ class interface : # Create the tray icon and connect it to the show/hide method... self.__widgets["status_icon"] = gtk.StatusIcon() @@ -23,7 +23,7 @@ # Define interface callbacks actions self.__callbacks = { "on_window1_destroy" : self.quit, -@@ -265,8 +265,8 @@ +@@ -271,8 +271,8 @@ class interface : #------------------------------------------------------------------- # Change the status icon and tray icon def change_status_icon( self, icon="on_line", blink=False ) : @@ -34,7 +34,7 @@ self.__widgets["status_icon"].set_blinking( blink ) #------------------------------------------------------------------- -@@ -719,9 +719,9 @@ +@@ -728,9 +728,9 @@ class interface : for k,v in vars.iteritems() : if ( rwvars.has_key( k ) ) : diff --git a/debian/patches/0006-ups-conf-maxretry.patch b/debian/patches/0006-ups-conf-maxretry.patch index dd8ef93..fae5806 100644 --- a/debian/patches/0006-ups-conf-maxretry.patch +++ b/debian/patches/0006-ups-conf-maxretry.patch @@ -25,7 +25,7 @@ # # These directives are common to all drivers that support ups.conf: # -@@ -102,3 +120,6 @@ +@@ -117,3 +135,6 @@ # # To find out if your driver supports any extra settings, start it with # the -h option and/or read the driver's documentation. From e9487070937b148098e21e3cc5be732bf0c994d5 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 16 Jul 2016 11:07:56 +0200 Subject: [PATCH 174/291] debian/control: Bump Standards-Version to 3.9.8 (no further changes) --- debian/changelog | 3 ++- debian/control | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 16bb9f1..a427732 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,8 +14,9 @@ nut (2.7.3-1) UNRELEASED; urgency=low * Drop d/p/0009-fix-favorites-permissions.patch, merged upstream * d/p/0002-nut-monitor-paths.patch, d/p/0006-ups-conf-maxretry.patch: Refreshed + * debian/control: Bump Standards-Version to 3.9.8 (no further changes) - -- Laurent Bigonville Sat, 16 Jul 2016 11:00:06 +0200 + -- Laurent Bigonville Sat, 16 Jul 2016 11:07:41 +0200 nut (2.7.2-4) unstable; urgency=medium diff --git a/debian/control b/debian/control index e6a2fbe..15d8f9b 100644 --- a/debian/control +++ b/debian/control @@ -22,7 +22,7 @@ Build-Depends-Indep: asciidoc (>= 8.6.3), docbook-xsl, dblatex (>= 0.2.5), libxml2-utils -Standards-Version: 3.9.5 +Standards-Version: 3.9.8 Homepage: http://www.networkupstools.org/ Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/nut.git;a=summary Vcs-Git: git://anonscm.debian.org/collab-maint/nut.git From b762a3580ed2169f9e494579d3c99e777db075c6 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sat, 16 Jul 2016 11:12:54 +0200 Subject: [PATCH 175/291] debian/control: Add dh-python to the build-dependencies --- debian/changelog | 3 ++- debian/control | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index a427732..03f691c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -15,8 +15,9 @@ nut (2.7.3-1) UNRELEASED; urgency=low * d/p/0002-nut-monitor-paths.patch, d/p/0006-ups-conf-maxretry.patch: Refreshed * debian/control: Bump Standards-Version to 3.9.8 (no further changes) + * debian/control: Add dh-python to the build-dependencies - -- Laurent Bigonville Sat, 16 Jul 2016 11:07:41 +0200 + -- Laurent Bigonville Sat, 16 Jul 2016 11:12:46 +0200 nut (2.7.2-4) unstable; urgency=medium diff --git a/debian/control b/debian/control index 15d8f9b..698cdee 100644 --- a/debian/control +++ b/debian/control @@ -7,6 +7,7 @@ Build-Depends: debhelper (>= 8.1.3), cdbs (>= 0.4.122~), autotools-dev, dh-autoreconf, + dh-python, dh-systemd (>= 1.14), libgd-dev | libgd2-xpm-dev | libgd2-noxpm-dev, libsnmp-dev | libsnmp9-dev, From 79b4afb095620785ef8325194a14ae772970d857 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 17 Jul 2016 18:07:49 +0200 Subject: [PATCH 176/291] Revert "Systemd units are now installed in multi-arch path" The unit files are again installed in the systemdsystemunitdir path This reverts commit 4730afcab2ecc95e00fd4ac6f3e094bd0bbf3340. --- debian/rules | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/debian/rules b/debian/rules index 0c837fc..f7dfd8a 100755 --- a/debian/rules +++ b/debian/rules @@ -90,13 +90,13 @@ common-install-arch:: # Install systemd files only on systems where it's supported ifeq (linux,$(DEB_HOST_ARCH_OS)) - install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-monitor.service \ + install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-monitor.service \ $(CURDIR)/debian/nut-client/lib/systemd/system/nut-monitor.service - install -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system-shutdown/nutshutdown \ + install -D $(CURDIR)/debian/tmp/lib/systemd/system-shutdown/nutshutdown \ $(CURDIR)/debian/nut-server/lib/systemd/system-shutdown/nutshutdown - install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-driver.service \ + install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-driver.service \ $(CURDIR)/debian/nut-server/lib/systemd/system/nut-driver.service - install -m 644 -D $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/systemd/system/nut-server.service \ + install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-server.service \ $(CURDIR)/debian/nut-server/lib/systemd/system/nut-server.service # Add a symlink to mask the LSB initscript From 38537675bae2f358c547f14f303e7bca53e9b3f1 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 17 Jul 2016 18:10:22 +0200 Subject: [PATCH 177/291] Bump debhelper compatibility to 9 --- debian/changelog | 3 ++- debian/compat | 2 +- debian/control | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 03f691c..3f2b378 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,8 +16,9 @@ nut (2.7.3-1) UNRELEASED; urgency=low Refreshed * debian/control: Bump Standards-Version to 3.9.8 (no further changes) * debian/control: Add dh-python to the build-dependencies + * Bump debhelper compatibility to 9 - -- Laurent Bigonville Sat, 16 Jul 2016 11:12:46 +0200 + -- Laurent Bigonville Sun, 17 Jul 2016 18:10:02 +0200 nut (2.7.2-4) unstable; urgency=medium diff --git a/debian/compat b/debian/compat index 45a4fb7..ec63514 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -8 +9 diff --git a/debian/control b/debian/control index 698cdee..b864c02 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: admin Priority: optional Maintainer: Arnaud Quette Uploaders: Laurent Bigonville -Build-Depends: debhelper (>= 8.1.3), +Build-Depends: debhelper (>= 9), cdbs (>= 0.4.122~), autotools-dev, dh-autoreconf, From 1a30e36c57bd509f9ff7b4d544946d939228d5c1 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 17 Jul 2016 19:06:03 +0200 Subject: [PATCH 178/291] d/p/0009-fix-nutshutdown-install.patch: Install the nutshutdown script in the correct path --- debian/changelog | 4 +++- debian/patches/0009-fix-nutshutdown-install.patch | 11 +++++++++++ debian/patches/series | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 debian/patches/0009-fix-nutshutdown-install.patch diff --git a/debian/changelog b/debian/changelog index 3f2b378..d773150 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,8 +17,10 @@ nut (2.7.3-1) UNRELEASED; urgency=low * debian/control: Bump Standards-Version to 3.9.8 (no further changes) * debian/control: Add dh-python to the build-dependencies * Bump debhelper compatibility to 9 + * d/p/0009-fix-nutshutdown-install.patch: Install the nutshutdown script in + the correct path - -- Laurent Bigonville Sun, 17 Jul 2016 18:10:02 +0200 + -- Laurent Bigonville Sun, 17 Jul 2016 19:05:43 +0200 nut (2.7.2-4) unstable; urgency=medium diff --git a/debian/patches/0009-fix-nutshutdown-install.patch b/debian/patches/0009-fix-nutshutdown-install.patch new file mode 100644 index 0000000..732cc22 --- /dev/null +++ b/debian/patches/0009-fix-nutshutdown-install.patch @@ -0,0 +1,11 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -1065,7 +1065,7 @@ dnl Override installation directory, wit + dnl prefix. This is needed for 'distcheck*' targets, otherwise + dnl files will try to get intalled to the actual system directories + if test -n "${systemdsystemunitdir}"; then +- systemdsystemshutdowndir="${libdir}/systemd/system-shutdown" ++ systemdsystemshutdowndir=`$PKG_CONFIG --variable=systemdshutdowndir systemd` + AC_MSG_RESULT(using ${systemdsystemunitdir}) + else + AC_MSG_RESULT(no) diff --git a/debian/patches/series b/debian/patches/series index 14e0996..0b7915d 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -3,3 +3,4 @@ 0004-fix-systemd-service.patch 0006-ups-conf-maxretry.patch 0008-drop-w3c-icons.patch +0009-fix-nutshutdown-install.patch From b0b61548a47b153b1ce6205bb9ce47edbb32910f Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Sun, 17 Jul 2016 19:20:31 +0200 Subject: [PATCH 179/291] debian/nut-server.install: 52-nut-usbups.rules file has been renamed to 62-nut-usbups.rules --- debian/changelog | 4 +++- debian/nut-server.install | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index d773150..f3f57c3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,8 +19,10 @@ nut (2.7.3-1) UNRELEASED; urgency=low * Bump debhelper compatibility to 9 * d/p/0009-fix-nutshutdown-install.patch: Install the nutshutdown script in the correct path + * debian/nut-server.install: 52-nut-usbups.rules file has been renamed to + 62-nut-usbups.rules - -- Laurent Bigonville Sun, 17 Jul 2016 19:05:43 +0200 + -- Laurent Bigonville Sun, 17 Jul 2016 19:20:10 +0200 nut (2.7.2-4) unstable; urgency=medium diff --git a/debian/nut-server.install b/debian/nut-server.install index bbc50da..8ea1b3c 100644 --- a/debian/nut-server.install +++ b/debian/nut-server.install @@ -3,7 +3,7 @@ debian/tmp/lib/nut/upsd debian/tmp/sbin/upsdrvctl debian/tmp/usr/share/nut/cmdvartab debian/tmp/usr/share/nut/driver.list -debian/tmp/*/udev/rules.d/52-nut-usbups.rules +debian/tmp/*/udev/rules.d/62-nut-usbups.rules debian/tmp/etc/avahi/services/nut.service debian/tmp/etc/nut/ups.conf debian/tmp/etc/nut/upsd.conf From 237be91ad92a727fd1502f0f2eb70bc9163afbe6 Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 18 Jul 2016 01:37:33 +0200 Subject: [PATCH 180/291] debian/libnutclient0.symbols, debian/libupsclient4.symbols: Adjust the .symbols files --- debian/changelog | 4 +- debian/libnutclient0.symbols | 428 +++++++++++++++++++---------------- debian/libupsclient4.symbols | 2 + 3 files changed, 235 insertions(+), 199 deletions(-) diff --git a/debian/changelog b/debian/changelog index f3f57c3..2e7094e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -21,8 +21,10 @@ nut (2.7.3-1) UNRELEASED; urgency=low the correct path * debian/nut-server.install: 52-nut-usbups.rules file has been renamed to 62-nut-usbups.rules + * debian/libnutclient0.symbols, debian/libupsclient4.symbols: Adjust the + .symbols files - -- Laurent Bigonville Sun, 17 Jul 2016 19:20:10 +0200 + -- Laurent Bigonville Mon, 18 Jul 2016 01:37:16 +0200 nut (2.7.2-4) unstable; urgency=medium diff --git a/debian/libnutclient0.symbols b/debian/libnutclient0.symbols index ccc230c..66c845d 100644 --- a/debian/libnutclient0.symbols +++ b/debian/libnutclient0.symbols @@ -1,199 +1,231 @@ libnutclient.so.0 libnutclient0 #MINVER# - (c++)"nut::IOException::~IOException()@Base" 2.7.2 - (c++)"nut::NutException::NutException(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::NutException::~NutException()@Base" 2.7.2 - (c++)"nut::SystemException::err()@Base" 2.7.2 - (c++)"nut::SystemException::SystemException()@Base" 2.7.2 - (c++)"nut::SystemException::~SystemException()@Base" 2.7.2 - (c++)"nut::TimeoutException::TimeoutException()@Base" 2.7.2 - (c++)"nut::TimeoutException::~TimeoutException()@Base" 2.7.2 - (c++)"nut::UnknownHostException::UnknownHostException()@Base" 2.7.2 - (c++)"nut::UnknownHostException::~UnknownHostException()@Base" 2.7.2 - (c++)"nut::NotConnectedException::NotConnectedException()@Base" 2.7.2 - (c++)"nut::NotConnectedException::~NotConnectedException()@Base" 2.7.2 - (c++)"nut::Client::getDevices()@Base" 2.7.2 - (c++)"nut::Client::hasDeviceCommand(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Client::hasDeviceVariable(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Client::getDeviceVariableValues(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Client::getDevice(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Client::hasDevice(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Client::Client()@Base" 2.7.2 - (c++)"nut::Client::~Client()@Base" 2.7.2 - (c++)"nut::Device::getCommand(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Device::getCommands()@Base" 2.7.2 - (c++)"nut::Device::getVariable(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Device::setVariable(std::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.2 - (c++)"nut::Device::setVariable(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Device::getNumLogins()@Base" 2.7.2 - (c++)"nut::Device::getVariables()@Base" 2.7.2 - (c++)"nut::Device::executeCommand(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Device::forcedShutdown()@Base" 2.7.2 - (c++)"nut::Device::getDescription()@Base" 2.7.2 - (c++)"nut::Device::getRWVariables()@Base" 2.7.2 - (c++)"nut::Device::getCommandNames()@Base" 2.7.2 - (c++)"nut::Device::getVariableNames()@Base" 2.7.2 - (c++)"nut::Device::getVariableValue(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Device::getVariableValues()@Base" 2.7.2 - (c++)"nut::Device::getRWVariableNames()@Base" 2.7.2 - (c++)"nut::Device::login()@Base" 2.7.2 - (c++)"nut::Device::master()@Base" 2.7.2 - (c++)"nut::Device::getClient()@Base" 2.7.2 - (c++)"nut::Device::Device(nut::Client*, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Device::Device(nut::Device const&)@Base" 2.7.2 - (c++)"nut::Device::~Device()@Base" 2.7.2 - (c++)"nut::Command::getDescription()@Base" 2.7.2 - (c++)"nut::Command::execute()@Base" 2.7.2 - (c++)"nut::Command::getDevice()@Base" 2.7.2 - (c++)"nut::Command::Command(nut::Device*, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Command::Command(nut::Command const&)@Base" 2.7.2 - (c++)"nut::Command::~Command()@Base" 2.7.2 - (c++)"nut::Variable::getDescription()@Base" 2.7.2 - (c++)"nut::Variable::getValue()@Base" 2.7.2 - (c++)"nut::Variable::setValue(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Variable::getDevice()@Base" 2.7.2 - (c++)"nut::Variable::setValues(std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.2 - (c++)"nut::Variable::Variable(nut::Device*, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::Variable::Variable(nut::Variable const&)@Base" 2.7.2 - (c++)"nut::Variable::~Variable()@Base" 2.7.2 - (c++)"nut::internal::Socket::disconnect()@Base" 2.7.2 - (c++)"nut::internal::Socket::setTimeout(long)@Base" 2.7.2 - (c++)"nut::internal::Socket::read(void*, unsigned long)@Base" 2.7.2 - (c++)"nut::internal::Socket::read()@Base" 2.7.2 - (c++)"nut::internal::Socket::write(void const*, unsigned long)@Base" 2.7.2 - (c++)"nut::internal::Socket::write(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::internal::Socket::connect(std::basic_string, std::allocator > const&, int)@Base" 2.7.2 - (c++)"nut::internal::Socket::Socket()@Base" 2.7.2 - (c++)"nut::TcpClient::disconnect()@Base" 2.7.2 - (c++)"nut::TcpClient::setTimeout(long)@Base" 2.7.2 - (c++)"nut::TcpClient::detectError(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::deviceLogin(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::authenticate(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::deviceMaster(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::getDeviceNames()@Base" 2.7.2 - (c++)"nut::TcpClient::setDeviceVariable(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::setDeviceVariable(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::deviceGetNumLogins(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::deviceForcedShutdown(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::executeDeviceCommand(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::getDeviceDescription(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::getDeviceCommandNames(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::getDeviceVariableNames(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::getDeviceVariableValue(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::getDeviceVariableValues(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::getDeviceRWVariableNames(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::getDeviceCommandDescription(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::getDeviceVariableDescription(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::get(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::list(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::escape(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::logout()@Base" 2.7.2 - (c++)"nut::TcpClient::connect(std::basic_string, std::allocator > const&, int)@Base" 2.7.2 - (c++)"nut::TcpClient::connect()@Base" 2.7.2 - (c++)"nut::TcpClient::explode(std::basic_string, std::allocator > const&, unsigned long)@Base" 2.7.2 - (c++)"nut::TcpClient::getDevice(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::sendQuery(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"nut::TcpClient::TcpClient(std::basic_string, std::allocator > const&, int)@Base" 2.7.2 - (c++)"nut::TcpClient::TcpClient()@Base" 2.7.2 - (c++)"nut::TcpClient::~TcpClient()@Base" 2.7.2 - (c++)"nut::NutException::str() const@Base" 2.7.2 - (c++)"nut::NutException::what() const@Base" 2.7.2 - (c++)"nut::Device::isOk() const@Base" 2.7.2 - (c++)"nut::Device::getName() const@Base" 2.7.2 - (c++)"nut::Device::getClient() const@Base" 2.7.2 - (c++)"nut::Device::operator bool() const@Base" 2.7.2 - (c++)"nut::Device::operator==(nut::Device const&) const@Base" 2.7.2 - (c++)"nut::Device::operator<(nut::Device const&) const@Base" 2.7.2 - (c++)"nut::Device::operator!() const@Base" 2.7.2 - (c++)"nut::Command::isOk() const@Base" 2.7.2 - (c++)"nut::Command::getName() const@Base" 2.7.2 - (c++)"nut::Command::getDevice() const@Base" 2.7.2 - (c++)"nut::Command::operator bool() const@Base" 2.7.2 - (c++)"nut::Command::operator==(nut::Command const&) const@Base" 2.7.2 - (c++)"nut::Command::operator<(nut::Command const&) const@Base" 2.7.2 - (c++)"nut::Command::operator!() const@Base" 2.7.2 - (c++)"nut::Variable::isOk() const@Base" 2.7.2 - (c++)"nut::Variable::getName() const@Base" 2.7.2 - (c++)"nut::Variable::getDevice() const@Base" 2.7.2 - (c++)"nut::Variable::operator bool() const@Base" 2.7.2 - (c++)"nut::Variable::operator==(nut::Variable const&) const@Base" 2.7.2 - (c++)"nut::Variable::operator<(nut::Variable const&) const@Base" 2.7.2 - (c++)"nut::Variable::operator!() const@Base" 2.7.2 - (c++)"nut::internal::Socket::isConnected() const@Base" 2.7.2 - (c++)"nut::TcpClient::getTimeout() const@Base" 2.7.2 - (c++)"nut::TcpClient::isConnected() const@Base" 2.7.2 - (c++)"nut::TcpClient::getHost() const@Base" 2.7.2 - (c++)"nut::TcpClient::getPort() const@Base" 2.7.2 - (c++)"char* std::basic_string, std::allocator >::_S_construct(char*, char*, std::allocator const&, std::forward_iterator_tag)@Base" 2.7.2 - (c++)"void std::_Destroy_aux::__destroy, std::allocator >*>(std::basic_string, std::allocator >*, std::basic_string, std::allocator >*)@Base" 2.7.2 - (c++)"std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >::~pair()@Base" 2.7.2 - (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator, std::allocator >, std::allocator, std::allocator > > > > >::_M_insert_aux(__gnu_cxx::__normal_iterator, std::allocator >, std::allocator, std::allocator > > >*, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator, std::allocator >, std::allocator, std::allocator > > > > > >, std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.2 - (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator, std::allocator >, std::allocator, std::allocator > > > > >::~vector()@Base" 2.7.2 - (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >::_M_insert_aux(__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >::~vector()@Base" 2.7.2 - (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >::operator=(std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::less, std::allocator >::_M_insert_unique(nut::Variable const&)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::allocator >, std::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_insert_unique(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::allocator >, std::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::find(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::allocator >, std::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_erase(std::_Rb_tree_node, std::allocator > >*)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_insert_(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > const&)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_get_insert_unique_pos(std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >*)@Base" 2.7.2 - (c++)"std::basic_string, std::allocator > std::operator+, std::allocator >(char const*, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"std::basic_string, std::allocator > std::operator+, std::allocator >(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 2.7.2 - (c++)"typeinfo for nut::IOException@Base" 2.7.2 - (c++)"typeinfo for nut::NutException@Base" 2.7.2 - (c++)"typeinfo for nut::SystemException@Base" 2.7.2 - (c++)"typeinfo for nut::TimeoutException@Base" 2.7.2 - (c++)"typeinfo for nut::UnknownHostException@Base" 2.7.2 - (c++)"typeinfo for nut::NotConnectedException@Base" 2.7.2 - (c++)"typeinfo for nut::Client@Base" 2.7.2 - (c++)"typeinfo for nut::TcpClient@Base" 2.7.2 - (c++)"typeinfo name for nut::IOException@Base" 2.7.2 - (c++)"typeinfo name for nut::NutException@Base" 2.7.2 - (c++)"typeinfo name for nut::SystemException@Base" 2.7.2 - (c++)"typeinfo name for nut::TimeoutException@Base" 2.7.2 - (c++)"typeinfo name for nut::UnknownHostException@Base" 2.7.2 - (c++)"typeinfo name for nut::NotConnectedException@Base" 2.7.2 - (c++)"typeinfo name for nut::Client@Base" 2.7.2 - (c++)"typeinfo name for nut::TcpClient@Base" 2.7.2 - (c++)"vtable for nut::IOException@Base" 2.7.2 - (c++)"vtable for nut::NutException@Base" 2.7.2 - (c++)"vtable for nut::SystemException@Base" 2.7.2 - (c++)"vtable for nut::TimeoutException@Base" 2.7.2 - (c++)"vtable for nut::UnknownHostException@Base" 2.7.2 - (c++)"vtable for nut::NotConnectedException@Base" 2.7.2 - (c++)"vtable for nut::Client@Base" 2.7.2 - (c++)"vtable for nut::TcpClient@Base" 2.7.2 - nutclient_authenticate@Base 2.7.2 - nutclient_destroy@Base 2.7.2 - nutclient_device_forced_shutdown@Base 2.7.2 - nutclient_device_login@Base 2.7.2 - nutclient_device_master@Base 2.7.2 - nutclient_execute_device_command@Base 2.7.2 - nutclient_get_device_command_description@Base 2.7.2 - nutclient_get_device_commands@Base 2.7.2 - nutclient_get_device_description@Base 2.7.2 - nutclient_get_device_num_logins@Base 2.7.2 - nutclient_get_device_rw_variables@Base 2.7.2 - nutclient_get_device_variable_description@Base 2.7.2 - nutclient_get_device_variable_values@Base 2.7.2 - nutclient_get_device_variables@Base 2.7.2 - nutclient_get_devices@Base 2.7.2 - nutclient_has_device@Base 2.7.2 - nutclient_has_device_command@Base 2.7.2 - nutclient_has_device_variable@Base 2.7.2 - nutclient_logout@Base 2.7.2 - nutclient_set_device_variable_value@Base 2.7.2 - nutclient_set_device_variable_values@Base 2.7.2 - nutclient_tcp_create_client@Base 2.7.2 - nutclient_tcp_disconnect@Base 2.7.2 - nutclient_tcp_get_timeout@Base 2.7.2 - nutclient_tcp_is_connected@Base 2.7.2 - nutclient_tcp_reconnect@Base 2.7.2 - nutclient_tcp_set_timeout@Base 2.7.2 - strarr_alloc@Base 2.7.2 - strarr_free@Base 2.7.2 + (c++)"nut::IOException::~IOException()@Base" 2.7.3 + (c++)"nut::IOException::~IOException()@Base" 2.7.3 + (c++)"nut::IOException::~IOException()@Base" 2.7.3 + (c++)"nut::NutException::NutException(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::NutException::NutException(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::NutException::~NutException()@Base" 2.7.3 + (c++)"nut::NutException::~NutException()@Base" 2.7.3 + (c++)"nut::NutException::~NutException()@Base" 2.7.3 + (c++)"nut::SystemException::err[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::SystemException::SystemException()@Base" 2.7.3 + (c++)"nut::SystemException::SystemException()@Base" 2.7.3 + (c++)"nut::SystemException::~SystemException()@Base" 2.7.3 + (c++)"nut::SystemException::~SystemException()@Base" 2.7.3 + (c++)"nut::SystemException::~SystemException()@Base" 2.7.3 + (c++)"nut::TimeoutException::TimeoutException()@Base" 2.7.3 + (c++)"nut::TimeoutException::TimeoutException()@Base" 2.7.3 + (c++)"nut::TimeoutException::~TimeoutException()@Base" 2.7.3 + (c++)"nut::TimeoutException::~TimeoutException()@Base" 2.7.3 + (c++)"nut::TimeoutException::~TimeoutException()@Base" 2.7.3 + (c++)"nut::UnknownHostException::UnknownHostException()@Base" 2.7.3 + (c++)"nut::UnknownHostException::UnknownHostException()@Base" 2.7.3 + (c++)"nut::UnknownHostException::~UnknownHostException()@Base" 2.7.3 + (c++)"nut::UnknownHostException::~UnknownHostException()@Base" 2.7.3 + (c++)"nut::UnknownHostException::~UnknownHostException()@Base" 2.7.3 + (c++)"nut::NotConnectedException::NotConnectedException()@Base" 2.7.3 + (c++)"nut::NotConnectedException::NotConnectedException()@Base" 2.7.3 + (c++)"nut::NotConnectedException::~NotConnectedException()@Base" 2.7.3 + (c++)"nut::NotConnectedException::~NotConnectedException()@Base" 2.7.3 + (c++)"nut::NotConnectedException::~NotConnectedException()@Base" 2.7.3 + (c++)"nut::Client::getDevices()@Base" 2.7.3 + (c++)"nut::Client::hasDeviceCommand(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Client::hasDeviceVariable(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Client::getDeviceVariableValues(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Client::getDevice(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Client::hasDevice(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Client::Client()@Base" 2.7.3 + (c++)"nut::Client::Client()@Base" 2.7.3 + (c++)"nut::Client::~Client()@Base" 2.7.3 + (c++)"nut::Client::~Client()@Base" 2.7.3 + (c++)"nut::Device::getCommand(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Device::getCommands()@Base" 2.7.3 + (c++)"nut::Device::getVariable(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Device::setVariable(std::__cxx11::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.3 + (c++)"nut::Device::setVariable(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Device::getNumLogins()@Base" 2.7.3 + (c++)"nut::Device::getVariables()@Base" 2.7.3 + (c++)"nut::Device::executeCommand(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Device::forcedShutdown()@Base" 2.7.3 + (c++)"nut::Device::getDescription[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::Device::getRWVariables()@Base" 2.7.3 + (c++)"nut::Device::getCommandNames[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::Device::getVariableNames[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::Device::getVariableValue(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Device::getVariableValues[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::Device::getRWVariableNames[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::Device::login()@Base" 2.7.3 + (c++)"nut::Device::master()@Base" 2.7.3 + (c++)"nut::Device::getClient()@Base" 2.7.3 + (c++)"nut::Device::Device(nut::Client*, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Device::Device(nut::Device const&)@Base" 2.7.3 + (c++)"nut::Device::Device(nut::Client*, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Device::Device(nut::Device const&)@Base" 2.7.3 + (c++)"nut::Device::~Device()@Base" 2.7.3 + (c++)"nut::Device::~Device()@Base" 2.7.3 + (c++)"nut::Command::getDescription[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::Command::execute()@Base" 2.7.3 + (c++)"nut::Command::getDevice()@Base" 2.7.3 + (c++)"nut::Command::Command(nut::Device*, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Command::Command(nut::Command const&)@Base" 2.7.3 + (c++)"nut::Command::Command(nut::Device*, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Command::Command(nut::Command const&)@Base" 2.7.3 + (c++)"nut::Command::~Command()@Base" 2.7.3 + (c++)"nut::Command::~Command()@Base" 2.7.3 + (c++)"nut::Variable::getDescription[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::Variable::getValue[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::Variable::setValue(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Variable::getDevice()@Base" 2.7.3 + (c++)"nut::Variable::setValues(std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.3 + (c++)"nut::Variable::Variable(nut::Device*, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Variable::Variable(nut::Variable const&)@Base" 2.7.3 + (c++)"nut::Variable::Variable(nut::Device*, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::Variable::Variable(nut::Variable const&)@Base" 2.7.3 + (c++)"nut::Variable::~Variable()@Base" 2.7.3 + (c++)"nut::Variable::~Variable()@Base" 2.7.3 + (c++)"nut::internal::Socket::disconnect()@Base" 2.7.3 + (c++)"nut::internal::Socket::setTimeout(long)@Base" 2.7.3 + (c++)"nut::internal::Socket::read[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::internal::Socket::read(void*, unsigned long)@Base" 2.7.3 + (c++)"nut::internal::Socket::write(void const*, unsigned long)@Base" 2.7.3 + (c++)"nut::internal::Socket::write(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::internal::Socket::connect(std::__cxx11::basic_string, std::allocator > const&, int)@Base" 2.7.3 + (c++)"nut::internal::Socket::Socket()@Base" 2.7.3 + (c++)"nut::internal::Socket::Socket()@Base" 2.7.3 + (c++)"nut::TcpClient::disconnect()@Base" 2.7.3 + (c++)"nut::TcpClient::setTimeout(long)@Base" 2.7.3 + (c++)"nut::TcpClient::detectError(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::deviceLogin(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::authenticate(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::deviceMaster(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::getDeviceNames[abi:cxx11]()@Base" 2.7.3 + (c++)"nut::TcpClient::setDeviceVariable(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::setDeviceVariable(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::deviceGetNumLogins(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::deviceForcedShutdown(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::executeDeviceCommand(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::getDeviceDescription(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::getDeviceCommandNames(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::getDeviceVariableNames(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::getDeviceVariableValue(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::getDeviceVariableValues(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::getDeviceRWVariableNames(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::getDeviceCommandDescription(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::getDeviceVariableDescription(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::get(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::list(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::escape(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::logout()@Base" 2.7.3 + (c++)"nut::TcpClient::connect(std::__cxx11::basic_string, std::allocator > const&, int)@Base" 2.7.3 + (c++)"nut::TcpClient::connect()@Base" 2.7.3 + (c++)"nut::TcpClient::explode(std::__cxx11::basic_string, std::allocator > const&, unsigned long)@Base" 2.7.3 + (c++)"nut::TcpClient::getDevice(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::sendQuery(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"nut::TcpClient::TcpClient(std::__cxx11::basic_string, std::allocator > const&, int)@Base" 2.7.3 + (c++)"nut::TcpClient::TcpClient()@Base" 2.7.3 + (c++)"nut::TcpClient::TcpClient(std::__cxx11::basic_string, std::allocator > const&, int)@Base" 2.7.3 + (c++)"nut::TcpClient::TcpClient()@Base" 2.7.3 + (c++)"nut::TcpClient::~TcpClient()@Base" 2.7.3 + (c++)"nut::TcpClient::~TcpClient()@Base" 2.7.3 + (c++)"nut::NutException::str[abi:cxx11]() const@Base" 2.7.3 + (c++)"nut::NutException::what() const@Base" 2.7.3 + (c++)"nut::Device::isOk() const@Base" 2.7.3 + (c++)"nut::Device::getName[abi:cxx11]() const@Base" 2.7.3 + (c++)"nut::Device::getClient() const@Base" 2.7.3 + (c++)"nut::Device::operator bool() const@Base" 2.7.3 + (c++)"nut::Device::operator==(nut::Device const&) const@Base" 2.7.3 + (c++)"nut::Device::operator<(nut::Device const&) const@Base" 2.7.3 + (c++)"nut::Device::operator!() const@Base" 2.7.3 + (c++)"nut::Command::isOk() const@Base" 2.7.3 + (c++)"nut::Command::getName[abi:cxx11]() const@Base" 2.7.3 + (c++)"nut::Command::getDevice() const@Base" 2.7.3 + (c++)"nut::Command::operator bool() const@Base" 2.7.3 + (c++)"nut::Command::operator==(nut::Command const&) const@Base" 2.7.3 + (c++)"nut::Command::operator<(nut::Command const&) const@Base" 2.7.3 + (c++)"nut::Command::operator!() const@Base" 2.7.3 + (c++)"nut::Variable::isOk() const@Base" 2.7.3 + (c++)"nut::Variable::getName[abi:cxx11]() const@Base" 2.7.3 + (c++)"nut::Variable::getDevice() const@Base" 2.7.3 + (c++)"nut::Variable::operator bool() const@Base" 2.7.3 + (c++)"nut::Variable::operator==(nut::Variable const&) const@Base" 2.7.3 + (c++)"nut::Variable::operator<(nut::Variable const&) const@Base" 2.7.3 + (c++)"nut::Variable::operator!() const@Base" 2.7.3 + (c++)"nut::internal::Socket::isConnected() const@Base" 2.7.3 + (c++)"nut::TcpClient::getTimeout() const@Base" 2.7.3 + (c++)"nut::TcpClient::isConnected() const@Base" 2.7.3 + (c++)"nut::TcpClient::getHost[abi:cxx11]() const@Base" 2.7.3 + (c++)"nut::TcpClient::getPort() const@Base" 2.7.3 + (c++)"std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >::~pair()@Base" 2.7.3 + (c++)"std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >::~pair()@Base" 2.7.3 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >::_M_insert_aux(__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >::~vector()@Base" 2.7.3 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >::~vector()@Base" 2.7.3 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >::operator=(std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.3 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator, std::allocator >, std::allocator, std::allocator > > > > >::_M_insert_aux(__gnu_cxx::__normal_iterator, std::allocator >, std::allocator, std::allocator > > >*, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator, std::allocator >, std::allocator, std::allocator > > > > > >, std::vector, std::allocator >, std::allocator, std::allocator > > > const&)@Base" 2.7.3 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator, std::allocator >, std::allocator, std::allocator > > > > >::~vector()@Base" 2.7.3 + (c++)"std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator, std::allocator >, std::allocator, std::allocator > > > > >::~vector()@Base" 2.7.3 + (c++)"std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)@Base" 2.7.3 + (c++)"std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)@Base" 2.7.3 + (c++)"std::_Rb_tree, std::less, std::allocator >::_M_insert_unique(nut::Variable const&)@Base" 2.7.3 + (c++)"std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)@Base" 2.7.3 + (c++)"std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_insert_unique(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::find(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_erase(std::_Rb_tree_node, std::allocator > >*)@Base" 2.7.3 + (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_get_insert_unique_pos(std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >*)@Base" 2.7.3 + (c++)"std::__cxx11::basic_string, std::allocator > std::operator+, std::allocator >(char const*, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"std::__cxx11::basic_string, std::allocator > std::operator+, std::allocator >(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@Base" 2.7.3 + (c++)"typeinfo for nut::IOException@Base" 2.7.3 + (c++)"typeinfo for nut::NutException@Base" 2.7.3 + (c++)"typeinfo for nut::SystemException@Base" 2.7.3 + (c++)"typeinfo for nut::TimeoutException@Base" 2.7.3 + (c++)"typeinfo for nut::UnknownHostException@Base" 2.7.3 + (c++)"typeinfo for nut::NotConnectedException@Base" 2.7.3 + (c++)"typeinfo for nut::Client@Base" 2.7.3 + (c++)"typeinfo for nut::TcpClient@Base" 2.7.3 + (c++)"typeinfo name for nut::IOException@Base" 2.7.3 + (c++)"typeinfo name for nut::NutException@Base" 2.7.3 + (c++)"typeinfo name for nut::SystemException@Base" 2.7.3 + (c++)"typeinfo name for nut::TimeoutException@Base" 2.7.3 + (c++)"typeinfo name for nut::UnknownHostException@Base" 2.7.3 + (c++)"typeinfo name for nut::NotConnectedException@Base" 2.7.3 + (c++)"typeinfo name for nut::Client@Base" 2.7.3 + (c++)"typeinfo name for nut::TcpClient@Base" 2.7.3 + (c++)"vtable for nut::IOException@Base" 2.7.3 + (c++)"vtable for nut::NutException@Base" 2.7.3 + (c++)"vtable for nut::SystemException@Base" 2.7.3 + (c++)"vtable for nut::TimeoutException@Base" 2.7.3 + (c++)"vtable for nut::UnknownHostException@Base" 2.7.3 + (c++)"vtable for nut::NotConnectedException@Base" 2.7.3 + (c++)"vtable for nut::Client@Base" 2.7.3 + (c++)"vtable for nut::TcpClient@Base" 2.7.3 + nutclient_authenticate@Base 2.7.3 + nutclient_destroy@Base 2.7.3 + nutclient_device_forced_shutdown@Base 2.7.3 + nutclient_device_login@Base 2.7.3 + nutclient_device_master@Base 2.7.3 + nutclient_execute_device_command@Base 2.7.3 + nutclient_get_device_command_description@Base 2.7.3 + nutclient_get_device_commands@Base 2.7.3 + nutclient_get_device_description@Base 2.7.3 + nutclient_get_device_num_logins@Base 2.7.3 + nutclient_get_device_rw_variables@Base 2.7.3 + nutclient_get_device_variable_description@Base 2.7.3 + nutclient_get_device_variable_values@Base 2.7.3 + nutclient_get_device_variables@Base 2.7.3 + nutclient_get_devices@Base 2.7.3 + nutclient_has_device@Base 2.7.3 + nutclient_has_device_command@Base 2.7.3 + nutclient_has_device_variable@Base 2.7.3 + nutclient_logout@Base 2.7.3 + nutclient_set_device_variable_value@Base 2.7.3 + nutclient_set_device_variable_values@Base 2.7.3 + nutclient_tcp_create_client@Base 2.7.3 + nutclient_tcp_disconnect@Base 2.7.3 + nutclient_tcp_get_timeout@Base 2.7.3 + nutclient_tcp_is_connected@Base 2.7.3 + nutclient_tcp_reconnect@Base 2.7.3 + nutclient_tcp_set_timeout@Base 2.7.3 + strarr_alloc@Base 2.7.3 + strarr_free@Base 2.7.3 diff --git a/debian/libupsclient4.symbols b/debian/libupsclient4.symbols index c72efc4..2838c57 100644 --- a/debian/libupsclient4.symbols +++ b/debian/libupsclient4.symbols @@ -10,6 +10,7 @@ libupsclient.so.4 libupsclient4 #MINVER# fatalx@Base 2.7.2 get_user_pwent@Base 2.7.2 ltrim@Base 2.7.2 + ltrim_m@Base 2.7.3 nut_debug_level@Base 2.7.2 nut_log_level@Base 2.7.2 open_syslog@Base 2.7.2 @@ -22,6 +23,7 @@ libupsclient.so.4 libupsclient4 #MINVER# pconf_line@Base 2.7.2 pconf_parse_error@Base 2.7.2 rtrim@Base 2.7.2 + rtrim_m@Base 2.7.3 select_read@Base 2.7.2 select_write@Base 2.7.2 sendsignal@Base 2.7.2 From c9cb2187eed2bd478c9c4b73fba7c36c748680bb Mon Sep 17 00:00:00 2001 From: Laurent Bigonville Date: Mon, 18 Jul 2016 02:11:41 +0200 Subject: [PATCH 181/291] Imported Upstream version 2.7.4 --- ChangeLog | 1100 ++++++++++++++++++++++ INSTALL.nut | 24 +- Makefile.am | 3 +- Makefile.in | 4 +- NEWS | 120 ++- UPGRADING | 18 +- clients/Makefile.in | 1 + clients/nutclient.cpp | 5 + clients/upsrw.c | 5 + common/Makefile.am | 4 +- common/Makefile.in | 14 +- common/common.c | 41 - common/str.c | 607 ++++++++++++ conf/Makefile.in | 1 + configure | 98 +- configure.ac | 11 +- data/Makefile.in | 1 + data/cmdvartab | 40 +- data/driver.list.in | 38 +- data/html/Makefile.in | 1 + docs/FAQ.txt | 4 +- docs/Makefile.am | 9 +- docs/Makefile.in | 17 +- docs/config-notes.txt | 60 +- docs/configure.txt | 8 +- docs/documentation.txt | 4 +- docs/download.txt | 12 +- docs/features.txt | 8 +- docs/images/nut_layering.png | Bin 83521 -> 231026 bytes docs/man/Makefile.in | 1 + docs/man/al175.8 | 6 +- docs/man/apcsmart-old.8 | 6 +- docs/man/apcsmart.8 | 6 +- docs/man/apcupsd-ups.8 | 6 +- docs/man/asem.8 | 6 +- docs/man/bcmxcp.8 | 6 +- docs/man/bcmxcp_usb.8 | 6 +- docs/man/belkin.8 | 6 +- docs/man/belkinunv.8 | 6 +- docs/man/bestfcom.8 | 6 +- docs/man/bestfortress.8 | 6 +- docs/man/bestuferrups.8 | 6 +- docs/man/bestups.8 | 6 +- docs/man/blazer_ser.8 | 6 +- docs/man/blazer_usb.8 | 6 +- docs/man/clone.8 | 6 +- docs/man/dummy-ups.8 | 6 +- docs/man/etapro.8 | 6 +- docs/man/everups.8 | 6 +- docs/man/gamatronic.8 | 6 +- docs/man/genericups.8 | 6 +- docs/man/hosts.conf.5 | 6 +- docs/man/isbmex.8 | 6 +- docs/man/ivtscd.8 | 6 +- docs/man/libnutclient.3 | 6 +- docs/man/libnutclient_commands.3 | 6 +- docs/man/libnutclient_devices.3 | 6 +- docs/man/libnutclient_general.3 | 6 +- docs/man/libnutclient_misc.3 | 6 +- docs/man/libnutclient_tcp.3 | 6 +- docs/man/libnutclient_variables.3 | 6 +- docs/man/libupsclient-config.1 | 6 +- docs/man/liebert-esp2.8 | 6 +- docs/man/liebert.8 | 6 +- docs/man/macosx-ups.8 | 16 +- docs/man/macosx-ups.txt | 32 +- docs/man/masterguard.8 | 6 +- docs/man/metasys.8 | 6 +- docs/man/mge-shut.8 | 6 +- docs/man/mge-utalk.8 | 6 +- docs/man/microdowell.8 | 6 +- docs/man/netxml-ups.8 | 6 +- docs/man/nut-ipmipsu.8 | 6 +- docs/man/nut-recorder.8 | 6 +- docs/man/nut-scanner.8 | 6 +- docs/man/nut.conf.5 | 6 +- docs/man/nutdrv_atcl_usb.8 | 10 +- docs/man/nutdrv_atcl_usb.txt | 12 +- docs/man/nutdrv_qx.8 | 11 +- docs/man/nutdrv_qx.txt | 2 +- docs/man/nutscan.3 | 6 +- docs/man/nutscan_add_device_to_device.3 | 6 +- docs/man/nutscan_add_option_to_device.3 | 6 +- docs/man/nutscan_cidr_to_ip.3 | 6 +- docs/man/nutscan_display_parsable.3 | 6 +- docs/man/nutscan_display_ups_conf.3 | 6 +- docs/man/nutscan_free_device.3 | 6 +- docs/man/nutscan_get_serial_ports_list.3 | 6 +- docs/man/nutscan_init.3 | 6 +- docs/man/nutscan_new_device.3 | 6 +- docs/man/nutscan_scan_avahi.3 | 6 +- docs/man/nutscan_scan_eaton_serial.3 | 6 +- docs/man/nutscan_scan_ipmi.3 | 6 +- docs/man/nutscan_scan_nut.3 | 6 +- docs/man/nutscan_scan_snmp.3 | 6 +- docs/man/nutscan_scan_usb.3 | 6 +- docs/man/nutscan_scan_xml_http.3 | 6 +- docs/man/nutupsdrv.8 | 6 +- docs/man/oneac.8 | 6 +- docs/man/optiups.8 | 6 +- docs/man/powercom.8 | 6 +- docs/man/powerman-pdu.8 | 6 +- docs/man/powerpanel.8 | 6 +- docs/man/rhino.8 | 6 +- docs/man/richcomm_usb.8 | 6 +- docs/man/riello_ser.8 | 6 +- docs/man/riello_usb.8 | 6 +- docs/man/safenet.8 | 6 +- docs/man/snmp-ups.8 | 26 +- docs/man/snmp-ups.txt | 13 + docs/man/solis.8 | 6 +- docs/man/tripplite.8 | 6 +- docs/man/tripplite_usb.8 | 6 +- docs/man/tripplitesu.8 | 6 +- docs/man/ups.conf.5 | 20 +- docs/man/ups.conf.txt | 12 +- docs/man/upsc.8 | 6 +- docs/man/upscli_add_host_cert.3 | 6 +- docs/man/upscli_cleanup.3 | 6 +- docs/man/upscli_connect.3 | 6 +- docs/man/upscli_disconnect.3 | 6 +- docs/man/upscli_fd.3 | 6 +- docs/man/upscli_get.3 | 6 +- docs/man/upscli_init.3 | 6 +- docs/man/upscli_list_next.3 | 6 +- docs/man/upscli_list_start.3 | 6 +- docs/man/upscli_readline.3 | 6 +- docs/man/upscli_sendline.3 | 6 +- docs/man/upscli_splitaddr.3 | 6 +- docs/man/upscli_splitname.3 | 6 +- docs/man/upscli_ssl.3 | 6 +- docs/man/upscli_strerror.3 | 6 +- docs/man/upscli_upserror.3 | 6 +- docs/man/upsclient.3 | 6 +- docs/man/upscmd.8 | 6 +- docs/man/upscode2.8 | 6 +- docs/man/upsd.8 | 6 +- docs/man/upsd.conf.5 | 6 +- docs/man/upsd.users.5 | 6 +- docs/man/upsdrvctl.8 | 6 +- docs/man/upsimage.cgi.8 | 6 +- docs/man/upslog.8 | 6 +- docs/man/upsmon.8 | 6 +- docs/man/upsmon.conf.5 | 6 +- docs/man/upsrw.8 | 9 +- docs/man/upsrw.txt | 9 + docs/man/upssched.8 | 6 +- docs/man/upssched.conf.5 | 6 +- docs/man/upsset.cgi.8 | 6 +- docs/man/upsset.conf.5 | 6 +- docs/man/upsstats.cgi.8 | 6 +- docs/man/upsstats.html.5 | 6 +- docs/man/usbhid-ups.8 | 6 +- docs/man/victronups.8 | 6 +- docs/net-protocol.txt | 12 +- docs/new-clients.txt | 4 +- docs/new-drivers.txt | 8 +- docs/nut-names.txt | 318 +++++-- docs/nut-qa.txt | 3 + docs/nutdrv_qx-subdrivers.txt | 77 +- docs/packager-guide.txt | 4 +- docs/scheduling.txt | 2 +- docs/snmp-subdrivers.txt | 3 +- docs/user-manual.txt | 4 + drivers/Makefile.am | 7 +- drivers/Makefile.in | 18 +- drivers/apc-ats-mib.c | 447 +++++++++ drivers/apc-ats-mib.h | 29 + drivers/apc-hid.c | 7 +- drivers/apc-mib.c | 12 +- drivers/baytech-mib.c | 8 +- drivers/bcmxcp.c | 4 +- drivers/bcmxcp.h | 1 + drivers/bcmxcp_usb.c | 76 +- drivers/bestpower-mib.c | 4 +- drivers/blazer.c | 2 +- drivers/blazer_ser.c | 2 +- drivers/blazer_usb.c | 2 +- drivers/compaq-mib.c | 14 +- drivers/cyberpower-mib.c | 4 +- drivers/delta_ups-mib.c | 8 +- drivers/dstate.c | 6 +- drivers/dummy-ups.c | 10 +- drivers/dummy-ups.h | 3 +- drivers/eaton-ats-mib.c | 245 +++++ drivers/eaton-ats-mib.h | 30 + drivers/eaton-mib.c | 334 ++++++- drivers/hidparser.c | 28 +- drivers/hidtypes.h | 11 +- drivers/huawei-mib.c | 234 +++++ drivers/huawei-mib.h | 9 + drivers/ietf-mib.c | 20 +- drivers/ietf-mib.h | 1 + drivers/libhid.c | 10 +- drivers/libshut.c | 17 +- drivers/libshut.h | 13 +- drivers/libusb.c | 30 +- drivers/macosx-ups.c | 144 +-- drivers/mge-hid.c | 8 +- drivers/mge-mib.c | 28 +- drivers/mge-xml.c | 20 +- drivers/netvision-mib.c | 8 +- drivers/nut-libfreeipmi.c | 15 +- drivers/nutdrv_qx.c | 146 ++- drivers/nutdrv_qx.h | 28 +- drivers/nutdrv_qx_bestups.c | 128 +-- drivers/nutdrv_qx_blazer-common.c | 6 +- drivers/nutdrv_qx_blazer-common.h | 6 +- drivers/nutdrv_qx_mecer.c | 82 +- drivers/nutdrv_qx_megatec-old.c | 72 +- drivers/nutdrv_qx_megatec.c | 72 +- drivers/nutdrv_qx_mustek.c | 72 +- drivers/nutdrv_qx_q1.c | 58 +- drivers/nutdrv_qx_voltronic-qs-hex.c | 219 +++-- drivers/nutdrv_qx_voltronic-qs.c | 76 +- drivers/nutdrv_qx_voltronic.c | 552 +++++------ drivers/nutdrv_qx_zinto.c | 72 +- drivers/powercom.c | 137 ++- drivers/powerp-bin.c | 2 +- drivers/powerp-txt.c | 4 +- drivers/powerpanel.c | 2 +- drivers/powerware-mib.c | 242 ++++- drivers/powerware-mib.h | 1 + drivers/raritan-pdu-mib.c | 8 +- drivers/snmp-ups.c | 872 ++++++++++++----- drivers/snmp-ups.h | 22 +- drivers/solis.c | 346 ++++--- drivers/solis.h | 108 ++- drivers/tripplite-hid.c | 71 +- drivers/tripplitesu.c | 9 +- drivers/upscode2.c | 4 +- drivers/usb-common.h | 13 +- drivers/usbhid-ups.c | 19 +- drivers/xppc-mib.c | 4 +- include/Makefile.am | 2 +- include/Makefile.in | 3 +- include/common.h | 6 +- include/config.h.in | 6 + include/str.h | 129 +++ lib/Makefile.in | 1 + lib/README | 2 +- m4/nut_check_libnss.m4 | 7 +- scripts/Makefile.in | 1 + scripts/Solaris/Makefile.in | 1 + scripts/augeas/Makefile.in | 1 + scripts/augeas/README | 2 +- scripts/augeas/nutupsconf.aug.in | 7 + scripts/augeas/nutupsconf.aug.tpl | 5 + scripts/devd/Makefile.in | 1 + scripts/devd/nut-usb.conf.in | 20 + scripts/hotplug/Makefile.in | 1 + scripts/hotplug/libhid.usermap | 6 + scripts/python/Makefile.in | 1 + scripts/subdriver/gen-snmp-subdriver.sh | 42 +- scripts/systemd/Makefile.in | 1 + scripts/systemd/nut-server.service.in | 2 +- scripts/udev/Makefile.in | 1 + scripts/udev/nut-usbups.rules.in | 6 + scripts/upower/95-upower-hid.rules | 14 +- server/Makefile.in | 1 + server/netget.c | 5 +- server/upsd.c | 2 +- tests/Makefile.in | 1 + tools/Makefile.am | 5 +- tools/Makefile.in | 6 +- tools/driver-list-format.sh | 32 + tools/nut-scanner/Makefile.in | 1 + tools/nut-scanner/README | 2 +- tools/nut-scanner/nut-scan.h | 11 +- tools/nut-scanner/nut-scanner.c | 39 +- tools/nut-scanner/nutscan-device.c | 11 +- tools/nut-scanner/nutscan-device.h | 11 +- tools/nut-scanner/nutscan-display.c | 10 +- tools/nut-scanner/nutscan-init.c | 79 +- tools/nut-scanner/nutscan-init.h | 11 +- tools/nut-scanner/nutscan-ip.c | 10 +- tools/nut-scanner/nutscan-ip.h | 11 +- tools/nut-scanner/nutscan-serial.c | 11 +- tools/nut-scanner/nutscan-serial.h | 11 +- tools/nut-scanner/nutscan-snmp.h | 43 +- tools/nut-scanner/nutscan-usb.h | 2 + tools/nut-scanner/scan_avahi.c | 208 ++-- tools/nut-scanner/scan_eaton_serial.c | 10 +- tools/nut-scanner/scan_ipmi.c | 21 +- tools/nut-scanner/scan_nut.c | 111 ++- tools/nut-scanner/scan_snmp.c | 39 +- tools/nut-scanner/scan_usb.c | 126 +-- tools/nut-scanner/scan_xml_http.c | 94 +- tools/nut-snmpinfo.py | 19 +- tools/nut-usbinfo.pl | 9 +- 290 files changed, 7473 insertions(+), 2607 deletions(-) create mode 100644 common/str.c create mode 100755 drivers/apc-ats-mib.c create mode 100755 drivers/apc-ats-mib.h create mode 100644 drivers/eaton-ats-mib.c create mode 100644 drivers/eaton-ats-mib.h create mode 100644 drivers/huawei-mib.c create mode 100644 drivers/huawei-mib.h create mode 100644 include/str.h create mode 100755 tools/driver-list-format.sh diff --git a/ChangeLog b/ChangeLog index 96dc998..2a1df65 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,1090 @@ +2016-03-09 Arnaud Quette + + * configure.ac: Fix autoreconf on Debian For some reason, Automake + doesn't search the current directory correctly when searching for + helper scripts, when 'nut' is running as a git-submodule, as it is + the case with the website repository + * configure.ac: update version to 2.7.4 + * drivers/apc-ats-mib.c: snmp-ups: add APC ATS input.source + * drivers/snmp-ups.c: snmp-ups: fix the matching OID tests For both + sysOID and classic methods, we used to test one of the two OIDs + provided in the mib2nut structures. However, these two OIDs + (oid_pwr_status and oid_auto_check) tend to be redundant and + confusing. Replace these matching by an extraction of + {ups,device}.model + * drivers/nut-libfreeipmi.c: nut-ipmipsu: fix compilation warnings + * NEWS, UPGRADING, docs/FAQ.txt, docs/net-protocol.txt, docs/new- + drivers.txt, docs/nut-names.txt, docs/nutdrv_qx-subdrivers.txt, + docs/packager-guide.txt, docs/snmp-subdrivers.txt, lib/README, + scripts/augeas/README: Fix spelling and typo errors Following the + spell-checking scope expansion, do a spell-checking pass + * docs/documentation.txt: Update documentation as per the new devices + scope + * docs/features.txt, docs/user-manual.txt: Update documentation as + per the new devices scope + * docs/Makefile.am: Expand spell-checking scope Add more documents, + outside of the docs/ directory Closes: + https://github.com/networkupstools/nut/issues/222 + +2016-03-08 Arnaud Quette + + * configure.ac, tools/Makefile.am, tools/driver-list-format.sh: Check + driver.list[.in] format at make dist time Instead of checking + driver.list.in at configure time, move the checking and + modification into a script that is called at make dist time. The + script can also be called manually, and will try to fix both + driver.list.in and driver.list + +2016-03-07 Arnaud Quette + + * drivers/powerware-mib.c: Remove an erroneous test This was made + test the enumerated values registration in snmp-ups, and should not + have been committed + * data/driver.list.in: HCL: APC ATS AP7724 supported by snmp-ups + These Automatic Transfer Switch should be supported by snmp-ups, + however this was not tested at all Reference: + https://github.com/networkupstools/nut/issues/260 + * NEWS, UPGRADING: Update for release 2.7.4 + * drivers/Makefile.am, drivers/apc-ats-mib.c, drivers/apc-ats-mib.h, + drivers/snmp-ups.c: snmp-ups: support APC Automatic Transfer Switch + Following the recent extension of NUT scope and variable namespace, + to support Automatic Transfer Switch (ATS), implement SNMP support + for APC ATS (with help from "maaboo" through github) Reference: + https://github.com/networkupstools/nut/issues/260 + +2016-03-04 Arnaud Quette + + * drivers/baytech-mib.c, drivers/bestpower-mib.c, drivers/compaq- + mib.c, drivers/cyberpower-mib.c, drivers/eaton-mib.c, drivers/mge- + mib.c, drivers/netvision-mib.c, drivers/powerware-mib.c, drivers + /raritan-pdu-mib.c: snmp-ups: fix mib2nut structures Non existent + OIDs, for testing MIB selection, must be expressed as NULL and not + as empty string ("") for the algorithm to work + +2016-03-03 Daniele Pezzini + + * docs/download.txt: docs: update several download links + +2016-03-03 Arnaud Quette + + * docs/man/upsrw.txt, docs/net-protocol.txt: Clarification on NUMBER + type float values Clarify a bit more documentation on how to + express float values, when using upsrw. That is to say, using + decimal (base 10) english-based representation, so using a dot, in + non-scientific notation. So hexadecimal, exponents, and comma for + thousands separator are forbiden + * clients/upsrw.c, docs/net-protocol.txt, server/netget.c: Prefer + NUMBER to NUMERIC for variable type As per discussion on the + Github pull request, NUMBER would be more suitable than NUMERIC + +2015-11-22 Daniele Pezzini + + * drivers/nutdrv_qx.c: nutdrv_qx: increase timeouts in 'sgs' USB + subdriver Apparently the previously used timeouts in the 'sgs' USB + subdriver were not always enough, so increase them. + +2015-11-11 Daniele Pezzini + + * data/driver.list.in: HCL: various TS Shara UPSes supported by + nutdrv_qx Protocol: 'megatec' USB subdriver: 'sgs' + * drivers/nutdrv_qx.c: nutdrv_qx: make sure 'sgs' USB subdriver uses + only what it reads Since, in 'sgs' USB subdriver, we read only 8 + bytes at a time and we expect the first byte to tell us the length + of the data that follows, make sure we don't use more than what we + read from the device in case the first byte is not what we expect + it to be. + +2015-03-04 Daniele Pezzini + + * drivers/nutdrv_qx.c: nutdrv_qx: increase verbosity of 'sgs' USB + subdriver In 'sgs' USB subdriver: - be more verbose when + debugging, - always print the return code when dealing with an + error. + +2014-01-31 Daniele Pezzini + + * docs/man/nutdrv_qx.txt: nutdrv_qx: update man page for new 'sgs' + USB subdriver + +2014-01-31 Ronaldo Yamada + + * drivers/nutdrv_qx.c: nutdrv_qx: add new 'sgs' USB subdriver to + support TS Shara units + +2016-03-02 Arnaud Quette + + * data/driver.list.in: HCL: added Eaton Powerware 9125-5000g + Supported with the additional USB card, with the bcmxcp_usb driver + * docs/man/upsrw.txt, docs/net-protocol.txt: Clarification on NUMERIC + type float values Clarify documentation on how to express float + values, when using upsrw. That is to say, using decimal english- + based representation, so using a dot + * drivers/mge-xml.c: netxml-ups: fix Eaton XML published data Some + raw protocol data were wrongly published, and are now commented. + Also add some R/W flags to ambient thresholds Closes: + https://github.com/networkupstools/nut/issues/201 + * tools/nut-scanner/nut-scanner.c: nut-scanner: fix thread attachment + Add a test to have the right thread waiting for the scan to be + complete (patch from Michal Hlavinka, Red Hat) + * configure.ac, tools/nut-scanner/nutscan-init.c, tools/nut- + scanner/scan_avahi.c, tools/nut-scanner/scan_ipmi.c, tools/nut- + scanner/scan_nut.c, tools/nut-scanner/scan_snmp.c, tools/nut- + scanner/scan_usb.c, tools/nut-scanner/scan_xml_http.c: nut-scanner: + don't depend on development libraries nut-scanner was previously + trying to use directly libXXX.so (libusb-0.1, libfreeipmi, + libnetsnmp, libavahi-client, libneon, libupsclient}. However, these + files are generally provided by the development packages. nut- + scanner now tries to look at some known paths, including the one + provided through --libdir, to find the correct libraries Closes: + https://github.com/networkupstools/nut/issues/233 + +2016-03-01 Arnaud Quette + + * clients/upsrw.c, docs/net-protocol.txt, server/netget.c: Default to + type NUMERIC for variables Any variable that is not STRING, RANGE + or ENUM is just a simple numeric value. The protocol documentation + (net-protocol.txt) was previously stating that "The default , + when omitted, is integer." which was not fully true, since a + variable could also be a float. Hence, the wording was changed to + advertise this, and that each driver is then responsible for + handling values as either integer or float. Moreover, instead of + returning a TYPE "UNKNOWN", return "NUMERIC", which is more + suitable, and aligned with the NUT protocol specification + * tools/nut-snmpinfo.py: SNMP subdriver generator: fix output + formatting + * tools/nut-snmpinfo.py: SNMP subdriver generator: discard commented + lines Discard any commented mib2nut_info_t declaration, which + should thus not be taken into account + +2016-02-26 Arnaud Quette + + * data/driver.list.in, drivers/Makefile.am, drivers/eaton-ats-mib.c, + drivers/eaton-ats-mib.h, drivers/snmp-ups.c: snmp-ups: support + Eaton Automatic Transfer Switch Following the recent extension of + NUT scope and variable namespace, to support Automatic Transfer + Switch (ATS), implement SNMP support for Eaton ATS. Note that this + device can also be supported through Eaton XML/PDC (XML over HTTP) + protocol, supported by the NUT netxml-ups driver + * data/cmdvartab, docs/nut-names.txt: Extend namespace for Automatic + Transfer Switch (ATS) Extend NUT namespace to support a new type + of power device: ATS - Automatic Transfer Switch. These devices + are used to setup 2 power systems, such as UPS, to power a single + power supply system, and be able to automatically transfer between + the input sources in case of failure of the primary one. The added + variable are for now limited to 'input.source' and + 'input.source.preferred', but may be extended if needed + +2016-02-25 C Fraire + + * docs/scheduling.txt: Fix docs location of upssched to sbin + +2016-02-25 Arnaud Quette + + * scripts/subdriver/gen-snmp-subdriver.sh: snmp-ups: add the last + missing element in the structure + * drivers/apc-mib.c, drivers/bestpower-mib.c, drivers/compaq-mib.c, + drivers/cyberpower-mib.c, drivers/delta_ups-mib.c, drivers/huawei- + mib.c, drivers/ietf-mib.c, drivers/mge-mib.c, drivers/netvision- + mib.c, drivers/powerware-mib.c, drivers/xppc-mib.c, + scripts/subdriver/gen-snmp-subdriver.sh: snmp-ups: fix values + lookup terminating element The terminating element should really + be NULL, and not the string "NULL", as it was originally done, back + in 2002 + * drivers/snmp-ups.c: snmp-ups: revert order of the NULL/"NULL" test + Fix a segfault when doing first the string comparison test + * drivers/snmp-ups.c: snmp-ups: register values enumerations + Whenever there is a values lookup structure for read/write data, + push the values as enumerations for upsrw + * drivers/snmp-ups.c: snmp-ups: try to lookup values for numeric + elements Numeric elements can also use the value resolution + mechanism + * drivers/snmp-ups.c: snmp-ups: counter test sysOID with a test OID + Some devices have buggy sysOID exposed. Allow to counter test + another OID, to be able to select between different mapping + structures + +2016-02-24 Arnaud Quette + + * scripts/subdriver/gen-snmp-subdriver.sh: SNMP subdriver creation + script: allow sysOID override Allow to use -s to override buggy + sysOID in some device FW. In this case, the sysOID entry in the + mib2nut structure should be set to NULL + +2016-02-11 Arnaud Quette + + * drivers/raritan-pdu-mib.c: snmp-ups: fix macaddr support for + Raritan PDU Raritan MIB was fixed to expose macaddr on + device.macaddr instead of ups.macaddr + * drivers/baytech-mib.c: snmp-ups: fix macaddr support for Baytech + PDU Baytech MIB was fixed to expose macaddr on device.macaddr + instead of ups.macaddr + * drivers/eaton-mib.c: snmp-ups: fix and complete macaddr support for + Eaton Eaton G2 and G3 can now expose the MAC address of the + device, using device.macaddr. Eaton G1 Aphel was fixed to expose + this data on device.macaddr instead of ups.macaddr + * drivers/snmp-ups.c: snmp-ups: add support for hexadecimal octet + strings + * drivers/snmp-ups.c: snmp-ups: fallback for classic MIB detection + If the sysOID matching has failed, then snmp-ups uses ups.model to + get an OID to test. In case ups.model is not available, fallback to + trying to use device.model instead + * docs/images/nut_layering.png, docs/images/nut_layering.svg: Refresh + and complete NUT architecture diagram + +2016-02-08 Arnaud Quette + + * drivers/powerware-mib.c: snmp-ups: extend Eaton 3ph outputSource + values map Add the new status values for xupsOutputSource + (.1.3.6.1.4.1.534.1.4.5.0), that maps to both ups.status and + ups.type + +2016-02-03 Arnaud Quette + + * drivers/powerware-mib.c: snmp-ups: improve support for Eaton 3ph + Improve support for temperature and humidity data, including: - + ups.temperature now available - fixing ambient.temperature + (previously pointing at a wrong OID) - ambient.humidity now + available - the following settings now available: * + ups.temperature.low * ups.temperature.high * ambient.humidity.high + * ambient.humidity.low * ambient.temperature.high * + ambient.temperature.low + +2016-02-01 Daniele Pezzini + + * data/driver.list.in: HCL: various APCUPSD-controlled APC devices + via apcupsd-ups Originally reported by GitHub user @Thermionix. + Reference: https://github.com/networkupstools/nut/pull/215 + +2016-01-31 Charles Lepple + + * docs/man/nutdrv_atcl_usb.txt: man/nutdrv_atcl_usb: point to + nutdrv_qx (fuji) for 0001:0000 Also update best guess for the USB- + to-serial converter situation. + * docs/FAQ.txt: FAQ: udevadm for fixing permissions + +2016-01-30 Charles Lepple + + * drivers/nut-libfreeipmi.c: FreeIPMI: do not split function + arguments with a conditional Alternate approach to suggestion by + Romero B. de S. Malaquias Closes: + https://github.com/networkupstools/nut/pull/250 + +2016-01-24 Charles Lepple + + * docs/config-notes.txt: Documentation: fix formatting Put syntax + examples in verbatim mode, and remove spaces from ends of lines. + * drivers/apc-hid.c: usbhid-ups: handle missing USB strings in APC + code Closes: https://github.com/networkupstools/nut/issues/258 + Might fix: + https://bugs.launchpad.net/ubuntu/+source/nut/+bug/1483615 + +2016-01-23 Charles Lepple + + * data/driver.list.in: HCL: added NHS Laser Senoidal 5000VA Source: + http://article.gmane.org/gmane.comp.monitoring.nut.devel/7123 + Closes: https://github.com/networkupstools/nut/issues/254 + +2016-01-14 Arnaud Quette + + * drivers/snmp-ups.c: snmp-ups: fix staleness detection With some + ePDUs or devices using template for outlet and outlet.group, + communication loss with the device were not detected, due to the + handling mechanism. Simply skipping commands for templates, after + the init time, is sufficient to avoid this issue + +2016-01-05 Arnaud Quette + + * drivers/snmp-ups.c: snmp-ups: improve stale communication recovery + Disable the 10 iterations to retry communicating with stale device. + This was leading up to 10 x 30 seconds, so 5mn, before being able + to get data again + * docs/new-drivers.txt, docs/nut-names.txt: Document + battery.charger.status This will in time replace the historic CHRG + and DISCHRG flags published in ups.status. Closes + https://github.com/networkupstools/nut/issues/196 + +2016-01-03 Charles Lepple + + * data/driver.list.in: HCL: Sweex model P220 via blazer_usb + Reference: https://github.com/networkupstools/nut/issues/251 + +2016-01-04 Arnaud Quette + + * drivers/ietf-mib.c, drivers/ietf-mib.h, drivers/snmp-ups.c: snmp- + ups: add support for Tripplite units on IETF mib These devices + expose ".1.3.6.1.4.1.850.1", which could be supported through this + specific MIB. For now, just link that to the IETF MIB, to provide + a first level of support Reference: + https://github.com/networkupstools/nut/issues/171 + +2015-12-30 Arnaud Quette + + * configure.ac: First stab at checking driver.list.in format + +2015-12-29 Charles Lepple + + * scripts/upower/95-upower-hid.rules: upower: update for AEG + +2015-12-29 Arnaud Quette + + * drivers/powercom.c: Fix the processing of output voltage for KIN + units The processing of output voltage requires to also take into + account the line voltage, as reported by Patrik Dufresne. This may + still need some further adjustments Reference: + https://github.com/networkupstools/nut/issues/187 + * drivers/powercom.c: Fix the processing of input voltage for KIN + units The processing of input voltage requires to also take into + account the line voltage, as reported by Patrik Dufresne. Also bump + the driver version to 0.16, since 0.15 was already used, but not + set Reference: https://github.com/networkupstools/nut/issues/187 + * drivers/mge-hid.c: Fix letter case for AEG USB VendorID The letter + case of this VendorID may be important for generated files, such as + the udev ones (reported by Charles Lepple) + +2015-12-28 Arnaud Quette + + * data/driver.list.in, drivers/mge-hid.c: HCL: AEG PROTECT B / NAS + supported by usbhid-ups Reference: + https://github.com/networkupstools/nut/issues/249 + +2015-12-17 Daniele Pezzini + + * data/driver.list.in: HCL: Legrand Keor Multiplug supported by + nutdrv_qx Reference: + https://github.com/networkupstools/nut/issues/248 + +2015-12-09 Andrey Jr. Melnikov + + * drivers/bcmxcp_usb.c: Don't call usb_close() after reset + +2015-12-08 Andrey Jr. Melnikov + + * drivers/bcmxcp_usb.c: Call usb_reset() when driver unable to claim + device + * drivers/bcmxcp.h, drivers/bcmxcp_usb.c: Refactor get_answer() + routine, make it properly deal with multi-packets responses. Lower + stack usage. + +2015-07-27 Daniele Pezzini + + * common/common.c, common/str.c, drivers/bcmxcp.c, drivers/blazer.c, + drivers/blazer_ser.c, drivers/blazer_usb.c, drivers/libhid.c, + drivers/mge-xml.c, drivers/nutdrv_qx.c, drivers/powerp-bin.c, + drivers/powerp-txt.c, drivers/powerpanel.c, drivers/tripplitesu.c, + drivers/upscode2.c, include/common.h, include/str.h, server/upsd.c, + tools/nut-scanner/scan_usb.c: common: consolidate some string- + related functions Move *trim*() functions from common to str. + Prepend the 'str_' common prefix. Bailout early if string is NULL + or empty. In *trim_m() functions, make sure the string containing + characters to be removed is not NULL and bailout early if empty. + Add new str_trim[_m]() functions to remove both leading and + trailing characters at the same time. Update all the tree + accordingly; versioning where appropriate. + * common/Makefile.am, common/str.c, include/Makefile.am, + include/common.h, include/str.h: common: add some string-related + functions + +2015-11-10 Charles Lepple + + * data/driver.list.in: HCL: Electrys UPS 2500 (nutdrv_qx and + blazer_ser) Closes + https://github.com/networkupstools/nut/issues/241 + * data/driver.list.in: HCL: Eaton E Series DX UPS 1-20 kVA uses + blazer_ser Closes + https://github.com/networkupstools/nut/issues/238 + +2015-11-09 Arnaud Quette + + * drivers/eaton-mib.c: snmp-ups: add number of outlets in Eaton ePDU + groups + * docs/nut-names.txt: Add a variable for the number of outlets in a + group Added 'outlet.group.n.count' which provides the number of + outlets in the outlet group 'n' + +2015-11-06 Daniele Pezzini + + * drivers/nutdrv_qx_voltronic-qs.c: nutdrv_qx: update 'voltronic-qs' + subdriver Since, for devices supported by 'voltronic-qs' + subdriver, in reality: - invalid commands or queries are echoed + back, - accepted commands are followed by action without any + further reply, update the subdriver interface accordingly. Also: - + change slightly the way we publish protocol as ups.firmware.aux, - + update F's reply examples and some info_type (ratings; + output.frequency) in QX to NUT table to reflect reality, - increase + version number. + +2015-10-19 Daniele Pezzini + + * drivers/nutdrv_qx_voltronic-qs-hex.c: nutdrv_qx: improve 'T' + protocol support in 'voltronic-qs-hex' subdriver Since the last + byte of the reply to the QS query (before the trailing CR) of + devices that implement the 'T' protocol holds in reality ratings + informations (nominal output frequency/voltage and nominal battery + voltage) in its bits, change the 'voltronic-qs-hex' subdriver + accordingly. Also: - change slightly the way we publish protocol as + ups.firmware.aux, - increase version number. + * drivers/nutdrv_qx_voltronic-qs-hex.c: nutdrv_qx: simplify + {in,out}put voltage conversion in 'voltronic-qs-hex' In + 'voltronic-qs-hex' subdriver, instead of calculating separately the + fractional and integer part of input and output voltage, do it at + once. Also, increase version number. + * drivers/nutdrv_qx_voltronic-qs-hex.c: nutdrv_qx: improve protocol + identification in 'voltronic-qs-hex' Since 'V' protocol, in + reality, never happens to use the encoded version of the reply to + the QS query, but it always uses the plain version already + implemented in 'voltronic-qs' subdriver, remove it from the + identification process of 'voltronic-qs-hex' subdriver. Also, + remove some non-significant entries from the testing table and + increase version number. + * drivers/nutdrv_qx_voltronic-qs-hex.c: nutdrv_qx: harmonize + declarations/definitions in 'voltronic-qs-hex' In 'voltronic-qs- + hex' subdriver, the scope of support functions is limited to the + subdriver as rightly stated in forward declarations, so correct + their definitions to reflect that. Also, increase version number. + +2015-10-09 Arnaud Quette + + * docs/nut-qa.txt: Reference Black Duck OpenHUB in QA documentation + Closes networkupstools/nut#192 + +2015-10-08 Arnaud Quette + + * drivers/snmp-ups.c: snmp-ups: also use __func__ for additional + traces + * drivers/powerware-mib.c: powerware-mib: more comments for RFC + device.event Add more comments on the need to RFC device.event for + some data that are currently published under ups.alarm + * drivers/powerware-mib.c: snmp-ups: improve Eaton 3-phase UPS alarms + reporting Eaton 3phase UPS, using the Powerware MIB, can expose + many new alarms. Also use the standard driver "X.YY" versioning, + and bump subdriver release to "0.85" + * drivers/snmp-ups.c, drivers/snmp-ups.h: snmp-ups: fix and improve + the ups.alarms mechanism This mechanism allows to walk a subtree + (array) of alarms, composed of OID references. The object + referenced should not be accessible, but rather when present, this + means that the alarm condition is TRUE. Both ups.status and/or + ups.alarm values can be provided + * drivers/snmp-ups.c: snmp-ups: fix on some snprintf calls Some + snprintf calls are using dynamically allocated variables, which + doesn't work with sizeof + * drivers/snmp-ups.c: snmp-ups: use __func__ in debug messages + * drivers/snmp-ups.c: snmp-ups: nut_snmp_get_oid() returns TRUE on + success + * drivers/snmp-ups.c: snmp-ups: only use snprintf calls instead of + sprintf + * drivers/eaton-mib.c, drivers/snmp-ups.c: snmp-ups: simplify + handling of other alarms outlet, outlet groups and phase alarms + are now using a simplified approach that does not require specific + lookup structure to adapt alarm messages. This applies to Eaton + ePDU G2/G3 + +2015-09-22 Arnaud Quette + + * drivers/snmp-ups.c: snmp-ups: fix a typo error in debug message + Unknown is spelled with an ending N (reported by Evgeny "Jim" + Klimov, from Eaton) + * drivers/snmp-ups.c: snmp-ups: optimize phase number extraction + efficiency Since we know that we are processing an alarm for a + phase "Lx", don't use strchr, but simply index (reported by Evgeny + "Jim" Klimov, from Eaton) + * docs/nut-names.txt, drivers/eaton-mib.c: snmp-ups: use dash- + separator for out-of-range For the sake of coherence with other + status relative to thresholds, "out of range" frequency status now + also use dash as separator, instead of space + * drivers/eaton-mib.c: Fix a spelling error in comments + * drivers/eaton-mib.c: snmp-ups: fix a typo error on Eaton ePDU G2/G3 + MIB Critical is really spelled critical, and not cricital, as used + in the various status thresholds value-lookup structures (reported + by Evgeny "Jim" Klimov, from Eaton) + * data/cmdvartab: Mention the unit for ambient humidity information + Add an explicit mention that ambient information related to + humidity use the "(percent)" unit + * data/cmdvartab, docs/nut-names.txt: Mention the unit for input + voltage information Add an explicit mention that input information + related to voltage use the "Volts (V)" unit + * data/cmdvartab: Mention the unit for ambient temperature + information Add an explicit mention that ambient information + related to temperature use the "degrees C" unit + +2015-09-18 Arnaud Quette + + * drivers/eaton-mib.c: snmp-ups: add outlet group identifier for + Eaton ePDU Eaton ePDU can now publish the parent group of each + outlet + * docs/nut-names.txt: Extend outlet collection namespace with group + ID An outlet can now publish the group to which it belongs to + * drivers/snmp-ups.c: snmp-ups: complete nut_snmp_get_{str,int} + These methods now allow to get the value of an OID returned by the + source OID (as for the sysOID). In case of failure (non existent + OID), the functions return the last part of the returned OID (ex: + 1.2.3 => 3) + * drivers/snmp-ups.c: snmp-ups: create a nut_snmp_get_oid() function + This method allows to get the value of an OID which is also an OID + (as for the sysOID), without trying to get the value of the pointed + OID. This will allow to use nut_snmp_get_{int,str}() the get the + value of the pointed OID + +2015-09-17 Arnaud Quette + + * drivers/eaton-mib.c: snmp-ups: outlet groups type handling for + Eaton ePDU Eaton ePDU can now publish the type of outlet group + * docs/nut-names.txt: Extend outlet group collection namespace with + type The type of outlet group can now be published, part of the + new outlet.group data collection + * drivers/eaton-mib.c: snmp-ups: outlet groups commands for Eaton + ePDU Eaton ePDU can now handle commands outlet groups, including + on, off and reboot (cycle) + * drivers/snmp-ups.c: snmp-ups: fix commands handling for outlet + groups The su_instcmd() function of snmp-ups is now adapted to + support outlet groups + * drivers/eaton-mib.c: Advanced outlets groups alarm handling for + Eaton ePDU Eaton ePDU can now handle alarms on outlets groups, for + voltage and current, relative to the configured thresholds + * drivers/snmp-ups.c: snmp-ups: improvements for outlet groups and + alarms Improve the code for general template management, including + outlets and outlets groups for now, and add alarm management for + outlet groups, the same way as for outlets + +2015-09-16 Arnaud Quette + + * drivers/snmp-ups.c: snmp-ups: fix set variable for outlet groups + The setvar() function of snmp-ups is now adapted to support outlet + groups + * drivers/eaton-mib.c: snmp-ups: outlet groups handling for Eaton + ePDU Eaton ePDU can now handle outlet groups, including voltage + and current (with thresholds and status relative to the configured + thresholds), along with power and realpower. A subsequent commit + will address the alarms, settings and commands. Bump subdriver + version to 0.30 + * drivers/snmp-ups.c: snmp-ups: update debug message The template + guestimation function name was changed, but the debug message was + left with the old function name + +2015-09-15 Arnaud Quette + + * docs/nut-names.txt: Extend NUT namespace with outlet.group + collection A new data collection, called "outlet.group", is now + available. It provides grouped management for a set of outlets. The + same principles and data than the outlet collection apply to + outlet.group + * drivers/snmp-ups.c, drivers/snmp-ups.h: snmp-ups: adapt template + mechanisms for outlet groups The template handling mechanisms, + originally created for outlets, is now adapted to also manage + outlet groups + +2015-09-14 root + + * docs/nut-names.txt: Add a note on the outlet.count variable + +2015-09-14 Arnaud Quette + + * drivers/eaton-mib.c: snmp-ups: add nominal input current for Eaton + ePDU snmp-ups now provides input.[Lx.]current.nominal for Eaton + ePDU G2/G3, both for 1phase and 3phase + * drivers/eaton-mib.c: snmp-ups: better input.power handling for + Eaton ePDUs Improve the way we declare and process input.power, as + previously done for input.realpower, in order to address the + variations between Eaton ePDUs G2 and G3 + +2015-09-11 Arnaud Quette + + * drivers/eaton-mib.c: snmp-ups: publish part number for Eaton ePDU + device.part was standardized in NUT namespace, so enable the + declaration for Eaton ePDU + * drivers/eaton-mib.c: snmp-ups: 3-phase alarm handling for Eaton + ePDU Eaton ePDU can now handle alarms on 3-phase, currently + limited to voltage and current, relative to the configured + thresholds + * drivers/snmp-ups.c: snmp-ups: implement 3-phase alarm handling + snmp-ups now allows to publish 3-phase alarms in ups.alarm, the + same way as with outlet. Declaration of such alarms are done using + "Lx.alarm". info_lkp_t structures messages are shared templates + with outlets, and use the string formats to include the context + (outlet or phase) and the number (of the outlet or phase) in alarm + messages. These alarms are then published in "ups.alarm", with the + standard mechanism for alarm publication + * docs/nut-names.txt: Extend 3-phase collection namespace with alarms + 3-phase data collection now allows to specify alarms, the same way + than with the outlet collection ("outlet.n.alarm"), but using + "Lx.alarm" (for example "L1.alarm"). These alarms are then + published in "ups.alarm", with the standard mechanism for alarm + publication + * drivers/eaton-mib.c: Advanced threshold handling for Eaton 3-phase + ePDU Eaton ePDU can now handle warning and critical thresholds + settings and status for input voltage and current on 3-phase units. + Alarms are however still to be implement + * docs/nut-names.txt: Extend 3-phase collection namespace with + threshold 3-phase data collection now allows to specify low / high + warning and critical thresholds for voltage and current. Status + relative to the thresholds also exist for these data + +2015-09-07 Arnaud Quette + + * drivers/snmp-ups.c, drivers/snmp-ups.h: snmp-ups: fix loss of + precision when setting values su_setvar() was losing precision + when converting and casting the provided values to send to the SNMP + agent. As an example, with an OID in millivolt (multiplier set to + 0.001), when providing 238 (V) using upsrw, the value sent to the + SNMP agent was 237999, so leaking 0.1 volt + +2015-09-04 Arnaud Quette + + * drivers/dstate.c: Extend ups.alarm internal buffer to 1024 chars + Currently, ups.alarm can hold up to 256 chars to expose alarms. + With the recent outlet alarms handling addition, the buffer may + quickly be to small. Thus, increase to 1024, which may still not + be sufficient but already provides a bit more room + * drivers/eaton-mib.c: snmp-ups: outlet alarm handling for Eaton ePDU + Eaton ePDU can now handle alarms on outlets, currently limited to + outlet voltage and current, relative to the configured thresholds + * drivers/snmp-ups.c: snmp-ups: implement outlets / PDU alarm + handling snmp-ups now allows to publish outlets and PDU alarms in + ups.alarm, the same way as with ups.status. Declaration of such + alarms are done using the outlet template mechanism + ("outlet.%i.alarm"). info_lkp_t structures messages can also use + the string formats to include the outlet number in alarm messages. + These alarms are then published in "ups.alarm", with the standard + mechanism for alarm publication + * docs/nut-names.txt: Extend outlet collection namespace with alarms + Outlet data collection now allows to specify alarms, using the + template definitions ("outlet.n.alarm"). These alarms are then + published in "ups.alarm", with the standard mechanism for alarm + publication + +2015-09-02 Arnaud Quette + + * drivers/eaton-mib.c: snmp-ups: outlet threshold handling for Eaton + ePDU Eaton ePDU can now handle warning and critical thresholds + settings and status for outlet voltage and current + * docs/nut-names.txt: Extend outlet collection namespace with + threshold Outlet data collection now allows to specify low / high + warning and critical thresholds for voltage and current. Status + relative to the thresholds also exist for these data + +2015-09-01 Arnaud Quette + + * drivers/eaton-mib.c: snmp-ups: alarms handling for Eaton ePDU + Eaton ePDU can now publish alarms, related to input status + (voltage, frequency and current) and ambient status (temperature + and humidity). Note that alarms are still published under + ups.alarms, though these should belong to either pdu.alarms or + better device.alarms + * drivers/eaton-mib.c: Advanced input threshold handling for Eaton + ePDU Eaton ePDU can now handle warning and critical thresholds + settings and status for input voltage and current, along with the + frequency status + * data/cmdvartab, docs/nut-names.txt: Extend input collection + namespace with threshold Input data collection now allows to + specify low / high warning and critical thresholds for voltage and + current. Status relative to the thresholds also exist for these + data, and for the frequency + +2015-08-31 Arnaud Quette + + * drivers/eaton-mib.c: snmp-ups: ambient dry contacts support for + Eaton ePDU Eaton ambient modules, connected on ePDU, now publish + the status of the connected dry contacts sensors + * data/cmdvartab, docs/nut-names.txt: Extend ambient collection + namespace with dry contacts Ambient data collection now allow to + specify dry contacts sensor status + * drivers/eaton-mib.c: snmp-ups: fix Eaton Pulizzi Switched PDU + multiplier As per the previous commit, to well handle integer RW + variables + * drivers/eaton-mib.c: snmp-ups: ambient threshold handling for Eaton + ePDU Eaton ePDU can now handle warning and critical thresholds and + status for both humidity and temperature + * data/cmdvartab, docs/nut-names.txt: Extend ambient collection + namespace with threshold Ambient data collection now allow to + specify warning and critical thresholds + * drivers/eaton-mib.c: snmp-ups: publish presence of Eaton ambient + sensor Publish the actual presence of ambient sensor for Eaton + ePDU G2 and G3 + * data/cmdvartab, docs/nut-names.txt: Publish the actual presence of + an ambient sensor A new data was created (ambient.present) to + publish the actual presence of an ambient sensor + +2015-10-06 Charles Lepple + + * data/driver.list.in: HCL: Asium P700, Micropower LCD 1000 and Eaton + 5E1100iUSB + +2015-10-06 Daniele Pezzini + + * data/driver.list.in: HCL: LYONN CTB-800V supported by nutdrv_qx + Protocol: 'voltronic-qs-hex' Reference: + https://github.com/networkupstools/nut/pull/230 + +2015-08-22 Mariano + + * drivers/nutdrv_qx_voltronic-qs-hex.c: nutdrv_qx: add support for + LYONN CTB-800V Small protocol validation change in 'voltronic-qs- + hex' subdriver to add support for the protocol used by the LYONN + CTB-800V UPS. + +2015-09-28 Arnaud Quette + + * docs/new-drivers.txt: Fix spacing error + +2015-09-22 Charles Lepple + + * drivers/solis.c, drivers/solis.h: solis: remove additional warnings + The "Waiting" flag is always zero, and several other variables were + not used. + * drivers/solis.c, drivers/solis.h: solis: clean up warnings Comment + out unused constants, and add 'static' and 'const' wherever + possible. + +2015-09-20 Charles Lepple + + * drivers/Makefile.am, drivers/solis.c: solis: math fixes As + mentioned here: https://github.com/networkupstools/nut/pull/235 + +2015-09-19 bsalvador + + * drivers/solis.c, drivers/solis.h: solis: patch for Microsol Back- + Ups BZ1200-BR patch for correct reading for Microsol Back-Ups + BZ1200-BR (rebased onto solis_debug branch, and cleaned up + whitespace. -- CFL) Closes + https://github.com/networkupstools/nut/pull/235 and Closes + https://github.com/networkupstools/nut/pull/236 + +2015-09-16 Arnaud Quette + + * data/driver.list.in, docs/man/snmp-ups.txt, drivers/powerware- + mib.c, drivers/powerware-mib.h, drivers/snmp-ups.c: snmp-ups: add + Eaton Power Xpert Gateway UPS Card This newer generation of SNMP + card is used for BladeUPS or other UPS, and is serving the same + XUPS MIB, as in the "pw" subdriver + * scripts/subdriver/gen-snmp-subdriver.sh: Update SNMP subdriver + generation script Complete the documentation, by adding some notes + and examples ; Fix the MIBs directories list and the "keep + temporary files" option + +2015-09-11 Arnaud Quette + + * drivers/snmp-ups.c: Improve log/debug output trace + +2015-09-08 Charles Lepple + + * drivers/solis.c: solis: resync with end-of-packet character (0.64) + Suggested by @rpvelloso in https://github.com/networkupstools/nut/i + ssues/231#issuecomment-134795747 Note that the driver could + possibly get out-of-sync after initial detection. + +2015-09-07 Charles Lepple + + * docs/man/macosx-ups.txt, drivers/macosx-ups.c: macosx-ups: + gracefully handle disconnection of UPS Tested on 10.9.5 and + 10.10.5. Returns "data stale" when UPS disappears. + +2015-09-07 Arnaud Quette + + * drivers/powerware-mib.c: Bump Powerware SNMP subdriver version + +2015-09-04 Charles Lepple + + * Makefile.am, docs/configure.txt, docs/new-clients.txt, tools/nut- + scanner/README: doc: correct remaining `--with-lib` references + Credit: Paul Vermeer + +2015-09-01 Arnaud Quette + + * drivers/snmp-ups.h: Minor updates to TODO comments + * drivers/snmp-ups.c: Implement ups.alarm for SNMP snmp-ups now + allows to publish alarms in ups.alarm, the same way as with + ups.status + +2015-08-31 Arnaud Quette + + * drivers/snmp-ups.c: Proper handling of integer RW variables RW + variables were previously supposed to always be strings. Thus, the + multiplier (using the info_len field) was not applied. Also allow + setting float values, not only integer + * drivers/snmp-ups.c, drivers/snmp-ups.h: Fix default SNMP retries + and timeout The previous patch was using the default values from + Net-SNMP, which are set to -1. When the user was not providing + overriden values, this was causing the driver to not be able to + establish the communication with the device. The default values are + now fixed, as per documented (i.e. 5 retries and timeout of 1 + second). Also bump the driver version to 0.74 + * docs/man/ups.conf.txt, drivers/dstate.c: Make more obvious the + socket write failure Document the error that require the use of + the 'synchronous' flag. Also use debug level 1 instead of 2 for the + debug message + +2015-08-23 Charles Lepple + + * drivers/solis.c: solis: Add upsdebug*() and upslogx() calls for + diagnostics + +2015-08-18 Kenny Root + + * drivers/powerware-mib.c: Add ups.start.auto for Powerware SNMP Use + the IETF UPS MIB to indicate to Powerware devices that it should + restart when mains power is applied. + * drivers/powerware-mib.c: Fix some indentation problems in PowerWare + SNMP + * drivers/powerware-mib.c: Add shutdown.return for Powerware SNMP + The Powerware MIB supports the concept of shutting down with a + delay and then returning when line power is restored. The delay is + set to 0 seconds currently. + * drivers/powerware-mib.c: Add load.{off,on}.delay for Powerware SNMP + The commands to shut down with delay have existed since the first + version of the Powerware MIB so add the newer commands + "load.off.delay" and "load.on.delay" to aid in shutdown scripts. + +2015-08-07 Arnaud Quette + + * drivers/dummy-ups.c, drivers/dummy-ups.h: Fix dummy-ups for + external value changes dummy-ups allow to change the values of the + publicated variables through the standard upsrw tool. This method + is handy to script value changes, in a controlled way, compared to + the dynamic version (using the TIMER keyword in .dev files), which + changes the values in a non controlled way. Bump driver version to + 0.14 + * m4/nut_check_libnss.m4: Fully check for a working Mozilla NSS + Rework the NSS tests so that just having runtime libraries + installed is not enough. Moreover, since GNU libc6 also provides a + nss.h header, the test now checks for both nss.h and ssl.h Closes + networkupstools/nut#184 + * docs/download.txt: Fix Red Hat / Fedora packages repository URL + +2015-08-03 Tomas Halman + + * clients/nutclient.cpp: Problem: nutclient library sometimes reads + socket closed by server. Solution: proper read return value + evaluation + +2015-08-04 Arnaud Quette + + * tools/nut-scanner/scan_snmp.c: Fix a crash on a 2nd call to + libnutscan on behalf of Tomas Halman, from Eaton Opensource Team + +2015-07-24 Nash Kaminski + + * drivers/tripplitesu.c: tripplitesu: Fix initialization when + tripplite firmware is buggy With some Tripplite SU1000RT2U (and + possibly more) UPS's, a firmware bug causes a malformed response to + the very first command that is sent after the serial port is opened + following a warm or cold boot of the system. My theory is that this + related to either the RS232 data lines or handshaking lines being + pulled high once the server's UART is powered however I have not + determined precisely if this is related to the data line being + pulled high or the handshaking lines being asserted. However, I + have been able to consistently reproduce the issue where the driver + fails to start on the first attempt after a cold/warm boot across 3 + different machines and 2 SU1000RT2U UPS's. To workaround this, the + initial enumeration is repeated a 2nd time after 300ms(to allow all + garbage data to arrive) if the first attempt fails, which allows + the driver to consistently startup successfully on the 1st attempt. + Closes networkupstools/nut#220 + +2015-07-24 Tim Smith + + * INSTALL.nut: Spelling fixes Spelling fixes and capitalization of + SUSE + +2015-07-23 Arnaud Quette + + * scripts/augeas/nutupsconf.aug.tpl: Update Augeas lens for ups.conf + Add the various missing global directives and ups fields + +2015-07-20 Daniele Pezzini + + * data/driver.list.in: HCL: fix case and spacing + +2015-07-18 Daniele Pezzini + + * drivers/nutdrv_qx.c: nutdrv_qx: when targeting 'UPS No Ack' + consider also the trailing CR In 'fabula' and 'krauler' USB + subdrivers, take into account also the trailing CR in the reply + while looking for a 'UPS No Ack'. + * drivers/nutdrv_qx.c: nutdrv_qx: stay true to return code in + 'fabula' USB subdriver In 'fabula' USB subdriver, when reading + 'UPS No Ack' from device, since we already mimic a timeout, also + empty the reply. + +2015-07-11 Charles Lepple + + * data/driver.list.in: HCL: Fideltronic INIGO Viper 1200 supported by + nutdrv_qx + +2015-07-02 Charles Lepple + + * drivers/usbhid-ups.c: usbhid-ups: bump version to 0.41 Both the + eaton_dual_reportdesc and usbhid_ups_input_vs_feature branches + claimed version 0.40, so let's disambiguate the merged version. + +2015-07-02 Arnaud Quette + + * drivers/libhid.c: Add a debug trace for the number of HID objects + found + * drivers/hidtypes.h: Fix testing typo MAX_REPORT is really 500 (HID + objects), not 50! + * drivers/hidparser.c: Report when there are further unprocessed HID + objects Following the last commits, and especially the MAX_REPORT + one, warn whenever there are remaining HID objects that were not + processed. This may serve + * drivers/hidtypes.h: Increase the maximum number of HID objects The + previous value (300) was causing a trim of the remaining objects. + Increase the value to 500, which should give a bit of time + * drivers/libshut.c, drivers/libshut.h, drivers/libusb.c, drivers + /usb-common.h, drivers/usbhid-ups.c: Add support for Eaton dual HID + report descriptor All devices use HID descriptor at index 0. + However, some newer Eaton units have a light HID descriptor at + index 0, and the full version is at index 1 (in which case, + bcdDevice == 0x0202). This dual report descriptor approach is due + to the fact that the main report descriptor is now too heavy, and + cause some BIOS to hang. A light version is thus provided at the + default index, solving this BIOS issues + +2015-06-27 Charles Lepple + + * drivers/macosx-ups.c: macosx-ups: fix for 10.10 (Yosemite); v1.1 + In OS X 10.9 and earlier, IOPSGetPowerSourcesInfo() returned a + CFDictionary. In 10.10 it returns a CFArray. Programmers are + supposed to use IOPSGetPowerSourceDescription() to gloss over this + distinction. However, this does not make it easy to distinguish + between a laptop battery and an UPS. So the "port" driver option no + longer has any effect. https://developer.apple.com/library/mac/doc + umentation/IOKit/Reference/IOPowerSources_header_reference/#//apple + _ref/c/func/IOPSGetPowerSourceDescription + +2015-06-22 Arnaud Quette + + * scripts/upower/95-upower-hid.rules, tools/nut-usbinfo.pl: Update + UPower HID rules and generator + +2015-06-11 Charles Lepple + + * drivers/usbhid-ups.c: usbhid-ups.c: fall back to HID Input type if + not a Feature + +2015-06-07 Charles Lepple + + * drivers/tripplite-hid.c: tripplite-hid.c: device.part is static + (version 0.82) + +2015-06-04 Daniele Pezzini + + * drivers/nutdrv_qx.c: nutdrv_qx: make sure processed item's + boundaries are not wrong + +2015-04-26 Nick Mayerhofer + + * docs/nutdrv_qx-subdrivers.txt, drivers/nutdrv_qx.c, + drivers/nutdrv_qx.h: nutdrv_qx: improve documentation for some + methods + +2015-06-04 Daniele Pezzini + + * docs/nutdrv_qx-subdrivers.txt, drivers/nutdrv_qx.c, + drivers/nutdrv_qx.h: nutdrv_qx: remove redundant comments and + update docs + +2015-04-28 Nick Mayerhofer + + * drivers/nutdrv_qx_voltronic.c: nutdrv_qx: move var declaration in + 'voltronic' subdriver Move variable declaration to fulfill + condition '3.3. Portability' of the developer guide. Bump version. + * drivers/libhid.c: libhid: replace "flush loop" with memset Move to + the C way of setting memory (memset), replacing a for loop with a + few anti-patterns in it: - for (...; ; i++) - for (...; i < + MAGIC_NUMBER; ...) - for (...) array[i] = 0 + +2015-05-18 Daniele Pezzini + + * docs/nutdrv_qx-subdrivers.txt, drivers/nutdrv_qx.c, + drivers/nutdrv_qx.h, drivers/nutdrv_qx_bestups.c, + drivers/nutdrv_qx_mecer.c, drivers/nutdrv_qx_megatec-old.c, + drivers/nutdrv_qx_megatec.c, drivers/nutdrv_qx_mustek.c, + drivers/nutdrv_qx_q1.c, drivers/nutdrv_qx_voltronic-qs-hex.c, + drivers/nutdrv_qx_voltronic-qs.c, drivers/nutdrv_qx_voltronic.c, + drivers/nutdrv_qx_zinto.c: nutdrv_qx: give subdrivers a last chance + to process the command Add (and document) a new function + ('preprocess_command()') to preprocess the command to be sent to + the device, just before the actual sending and, in case of instant + commands/setvars, after the 'preprocess()' function has been + triggered (if appropriate). As an example, this function can be + useful to add to all commands (both queries and instant + commands/setvars) a CRC or to fill the command of a query with some + data. Also, in qx_process(), address buf size vs item->answer size + earlier. Update all subdrivers accordingly, bump versions. + +2015-06-01 Arnaud Quette + + * docs/man/snmp-ups.txt, drivers/snmp-ups.c, drivers/snmp-ups.h: + Provide access to Net-SNMP timeout and retries Two new extra + arguments are now available to allow overriding Net-SNMP number of + retries (snmp_retries) and timeout per retry (snmp_timeout). These + respectively maps to snmpcmd "-r retries" and "-t timeout" + +2015-05-29 Arnaud Quette + + * scripts/upower/95-upower-hid.rules: Update UPower HID rules + * tools/nut-usbinfo.pl: Fix UPower device matching for recent kernels + As per the UPower patch below referenced, hiddev* devices now have + class "usbmisc", rather than "usb". See + http://cgit.freedesktop.org/upower/commit/rules/95-upower- + hid.rules?id=9f31068707fc79744961cea7258b0eb262effbf1 + +2015-05-28 Arnaud Quette + + * tools/nut-scanner/nut-scan.h, tools/nut-scanner/nut-scanner.c, + tools/nut-scanner/nutscan-device.c, tools/nut-scanner/nutscan- + device.h, tools/nut-scanner/nutscan-display.c, tools/nut-scanner + /nutscan-init.c, tools/nut-scanner/nutscan-init.h, tools/nut- + scanner/nutscan-ip.c, tools/nut-scanner/nutscan-ip.h, tools/nut- + scanner/nutscan-serial.c, tools/nut-scanner/nutscan-serial.h, tools + /nut-scanner/scan_avahi.c, tools/nut-scanner/scan_eaton_serial.c, + tools/nut-scanner/scan_ipmi.c, tools/nut-scanner/scan_nut.c, tools + /nut-scanner/scan_snmp.c, tools/nut-scanner/scan_usb.c, tools/nut- + scanner/scan_xml_http.c: Fix legal information on source-code + headers Copyright and author were not mentioned as it should be. + Most of the nut-scanner copyright belongs to EATON, apart from few + parts. Files descriptions are now also in Doxygen format + +2015-05-18 Daniele Pezzini + + * docs/nutdrv_qx-subdrivers.txt, drivers/nutdrv_qx.c, + drivers/nutdrv_qx.h, drivers/nutdrv_qx_bestups.c, drivers + /nutdrv_qx_blazer-common.c, drivers/nutdrv_qx_blazer-common.h, + drivers/nutdrv_qx_mecer.c, drivers/nutdrv_qx_megatec-old.c, + drivers/nutdrv_qx_megatec.c, drivers/nutdrv_qx_mustek.c, + drivers/nutdrv_qx_q1.c, drivers/nutdrv_qx_voltronic-qs-hex.c, + drivers/nutdrv_qx_voltronic-qs.c, drivers/nutdrv_qx_voltronic.c, + drivers/nutdrv_qx_zinto.c: nutdrv_qx: make preprocessed value's + size_t a const There's no need to intervene on the passed-to-the- + function value of a preprocessed value's size_t, so clarify it is a + const. Update all subdrivers accordingly, bump versions. + * drivers/nutdrv_qx.c: nutdrv_qx: make sure an answer is not reused + if preprocess_answer() fails If an item's preprocess_answer() + function fails, the answer should not be considered valid and + inherited by the following items with the same command. Therefore, + on failure, clear the answer so that the following items are forced + to query the device and preprocess the answer anew, if appropriate. + +2015-05-13 Arnaud Quette + + * docs/download.txt: Update NUT packages for Windows to 2.6.5-6 + +2015-05-07 Arnaud Quette + + * scripts/systemd/nut-server.service.in: Restore systemd relationship + with nut-driver service The Requires directive from nut-server to + nut-driver was previously removed, since it was preventing upsd + from starting whenever one or more drivers, among several, was + failing to start. Use the Wants directive, a weaker version of + Requires, which will start upsd even if the nut-driver unit fails + to start. closes https://github.com/networkupstools/nut/issues/200 + +2015-04-23 Arnaud Quette + + * Makefile.am: Cleanup GPG signature before generation + 2015-04-22 Arnaud Quette + * configure.ac: bump version back to 2.7.3.1 * configure.ac: Restore version 2.7.3 for release * docs/security.txt: Missing link reference update The filename of the previous GPG release key was not updated, leading to pointing @@ -146,6 +1231,17 @@ historic CHRG and DISCHRG flags are not published anymore in ups.status +2015-03-26 Stuart Henderson + + * data/driver.list.in, docs/man/snmp-ups.txt, docs/snmp- + subdrivers.txt, drivers/Makefile.am, drivers/huawei-mib.c, drivers + /huawei-mib.h, drivers/snmp-ups.c: snmp-ups: new subdriver for + Huawei "Hi, the [commit] below adds a new subdriver for snmp-ups + to support Huawei UPS, based on an observed walk from a UPS5000-E + with a few bits filled in from the MIBs (copy at + http://junkpile.org/HUAWEI_UPS_MIB/)." http://news.gmane.org/find- + root.php?message_id=slrnmh6npf.tg7.stu%40naiad.spacehopper.org + 2015-03-25 Daniele Pezzini * drivers/nutdrv_qx_voltronic.c: nutdrv_qx: add support in @@ -1051,6 +2147,10 @@ * NEWS, UPGRADING, configure.ac: Update for release 2.7.2 Complete the release information for NUT 2.7.2 +2014-04-17 Stephen J. Butler + + * drivers/tripplite-hid.c: Scale for SMART1500LCDT + 2014-04-07 Arnaud Quette * drivers/compaq-mib.c: Fix erroneous status in HP/Compaq SNMP MIB diff --git a/INSTALL.nut b/INSTALL.nut index 160b558..202d1af 100644 --- a/INSTALL.nut +++ b/INSTALL.nut @@ -207,8 +207,8 @@ Debian, Ubuntu and other derivatives NOTE: NUT is packaged and well maintained in these systems. The official Debian packager is part of the NUT Team. -Using your prefered method (apt-get, aptitude, Synaptic, ...), install -the 'nut' package, and optionaly the following: +Using your preferred method (apt-get, aptitude, Synaptic, ...), install +the 'nut' package, and optionally the following: - 'nut-cgi', if you need the CGI (HTML) option, - 'nut-snmp', if you need the snmp-ups driver, @@ -233,32 +233,32 @@ Mandriva NOTE: NUT is packaged and well maintained in these systems. The official Mandriva packager is part of the NUT Team. -Using your prefered method (urpmi, RPMdrake, ...), install one of the two below +Using your preferred method (urpmi, RPMdrake, ...), install one of the two below packages: - 'nut-server' if you have a 'standalone' or 'netserver' installation, - 'nut' if you have a 'netclient' installation. -Optionaly, you can also install the following: +Optionally, you can also install the following: - 'nut-cgi', if you need the CGI (HTML) option, - 'nut-devel', if you need the development files. -[[Suse]] -Suse / Opensuse +[[SUSE]] +SUSE / openSUSE ~~~~~~~~~~~~~~~ NOTE: NUT is packaged and well maintained in these systems. -The official Suse packager is part of the NUT Team. +The official SUSE packager is part of the NUT Team. -Install the 'nut-classic' package, and optionaly the following: +Install the 'nut-classic' package, and optionally the following: - 'nut-drivers-net', if you need the snmp-ups or the netxml-ups drivers, - 'nut-cgi', if you need the CGI (HTML) option, - 'nut-devel', if you need the development files, -NOTE: Suse and Opensuse users can use the +NOTE: SUSE and openSUSE users can use the link:http://software.opensuse.org/search?baseproject=ALL&p=1&q=nut[one-click install method] to install NUT. @@ -270,13 +270,13 @@ Red Hat, Fedora and CentOS NOTE: NUT is packaged and well maintained in these systems. The official Red Hat packager is part of the NUT Team. -Using your prefered method (yum, Add/Remove Software, ...), install one of the +Using your preferred method (yum, Add/Remove Software, ...), install one of the two below packages: - 'nut' if you have a 'standalone' or 'netserver' installation, - 'nut-client' if you have a 'netclient' installation. -Optionaly, you can also install the following: +Optionally, you can also install the following: - 'nut-cgi', if you need the CGI (HTML) option, - 'nut-xml', if you need the netxml-ups driver, @@ -306,7 +306,7 @@ To install it, use the following command: You have to define WITH_NUT_CGI to build the optional CGI scripts. -Optionaly, you can also install the following ports: +Optionally, you can also install the following ports: - sysutils/nut-snmp, for the SNMP driver, - sysutils/nut-usb, for the USB drivers, diff --git a/Makefile.am b/Makefile.am index aebe618..dd9ec33 100644 --- a/Makefile.am +++ b/Makefile.am @@ -56,6 +56,7 @@ ChangeLog: tools/gitlog2changelog.py dummy-stamp # ---------------------------------------------------------------------- # Maintainers targets: distribution signature and hashes dist-sig: + rm -f nut-@PACKAGE_VERSION@.tar.gz.sig gpg --detach-sign nut-@PACKAGE_VERSION@.tar.gz dist-hash: @@ -107,7 +108,7 @@ install-cgi-man install-cgi-conf install-cgi-html: @echo "Use './configure --with-cgi' instead." install-lib: @echo "Error: 'make $@' no longer exists." - @echo "Use './configure --with-lib' instead." + @echo "Use './configure --with-dev' instead." usb build-usb install-usb: @echo "Error: 'make $@' no longer exists." @echo "Use './configure --with-usb' instead." diff --git a/Makefile.in b/Makefile.in index 44ffd6b..6b39990 100644 --- a/Makefile.in +++ b/Makefile.in @@ -273,6 +273,7 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ +LIBDIR = @LIBDIR@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ @@ -931,6 +932,7 @@ ChangeLog: tools/gitlog2changelog.py dummy-stamp # ---------------------------------------------------------------------- # Maintainers targets: distribution signature and hashes dist-sig: + rm -f nut-@PACKAGE_VERSION@.tar.gz.sig gpg --detach-sign nut-@PACKAGE_VERSION@.tar.gz dist-hash: @@ -976,7 +978,7 @@ install-cgi-man install-cgi-conf install-cgi-html: @echo "Use './configure --with-cgi' instead." install-lib: @echo "Error: 'make $@' no longer exists." - @echo "Use './configure --with-lib' instead." + @echo "Use './configure --with-dev' instead." usb build-usb install-usb: @echo "Error: 'make $@' no longer exists." @echo "Use './configure --with-usb' instead." diff --git a/NEWS b/NEWS index 1e6fbde..216c835 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,124 @@ If you're upgrading from an earlier version, see the UPGRADING file. For a complete and more detailed list of changes, please refer to the ChangeLog file. +--------------------------------------------------------------------------- +Release notes for NUT 2.7.4 - what's new since 2.7.3: + + - New class of device supported: ATS - Automatic Transfer Switch are now + supported in NUT. Eaton ATS are supported, and APC ones should be too. Users + are welcomed to test and provide feedback + + - NUT command and variable naming scheme: + * Document battery.charger.status, which will in time replace the historic + CHRG and DISCHRG flags published in ups.status + * Many extensions to support outlets groups, thresholds / alarms (ambient, + input, output, outlet and outlet.group) + + - support for new devices: + AEG PROTECT B / NAS + APC ATS AP7724 (should be supported) + Asium P700 + Eaton ATS + Eaton 5E 1100iUSB + Eaton E Series DX UPS 1-20 kVA + Eaton Powerware 9125-5000g + Electrys UPS 2500 + Fideltronic INIGO Viper 1200 + Legrand Keor Multiplug + LYONN CTB-800V + Micropower LCD 1000 + NHS Laser Senoidal 5000VA + Sweex model P220 + TS Shara + Various APCUPSD-controlled APC devices + + - snmp-ups: + * Improve automatic detection algorithm + * Provide access to Net-SNMP timeout and retries + * Proper handling of integer RW variables + * Implement support for alarms, through ups.alarm and outlet.n.alarm + * Improve log/debug output trace + * Fix loss of precision when setting values, using upsrw + * Support for outlets group management + * Many improvements and simplification + * Add support for Tripplite units using IETF mib + * Improve communication staleness detection and recovery + * Add devices MAC address publication + * Register values enumerations, when available + * Many improvements and fixes to the SNMP subdriver creation script + + - Eaton: + * 3ph SNMP: + Many improvements to Powerware / XUPS MIB, for data and commands + Add support for Eaton Power Xpert Gateway UPS Card + Improve support for temperature and humidity, including low / high values + Alarms handling + * ePDU (G2 and G3): + Improve support for ambient sensor, including thresholds and dry contacts + Outlet groups handling, including data, thresholds, settings and commands + Alarms handling + * XML/PDC (netxml-ups): + Fix Eaton XML published data + Add some settings (R/W flags) on ambient thresholds + + - bcmxcp_usb: improvements for device claiming and multi-packets responses + + - dummy-ups: allow any variable to be modified + + - libnutclient: Fix for reads when the socket was closed by NUT server + + - macosx-ups: + * fix for 10.10 (Yosemite), v1.1 + * gracefully handle disconnection of UPS (return "data stale") + + - nutdrv_atcl_usb: point to nutdrv_qx (fuji) for 0001:0000 + + - nutdrv_qx: + * Add new 'sgs' USB subdriver to support TS Shara units + * various improvements and simplification, to the code and documentation + + - nut-ipmipsu: improve FreeIPMI support + + - nut-scanner: + * Don't depend on development libraries, by looking at some known paths, + including the one provided through --libdir, to find the correct libraries + * Fix a crash on a 2nd call to libnutscan with SNMP method + + - powercom: fix the processing of input and output voltage for KIN units + + - solis: + * many improvements and cleanup + * resync with end-of-packet character + * fixes for Microsol Back-Ups BZ1200-BR + + - tripplitesu: Fix initialization when tripplite firmware is buggy (for + Tripplite SU1000RT2U and possibly more) + + - usbhid-ups: + * various minor improvements + * support for Eaton UPS with dual HID report descriptor in HID Parser + * handle missing USB strings in APC code + + - SSL support through Mozilla NSS: Rework the NSS tests to ensure that NSS is + actually installed and usable for enabling SSL support in NUT + + - Augeas support: Augeas lens for ups.conf was updated to add various missing + global directives and ups fields + + - scripts/systemd/nut-server.service.in: Restore systemd relationship since it + was preventing upsd from starting whenever one or more drivers, among several, + was failing to start + + - Fix UPower device matching for recent kernels, since hiddev* devices now have + class "usbmisc", rather than "usb" + + - Network protocol information: default to type NUMBER for variables that are + not flagged as STRING . This point is subject to improvements or change in + the next release 2.7.5. Refer to docs/net-protocol.txt for more information + + - As usual, more bugfixes, cleanup and improvements, on both source code + and documentation. + --------------------------------------------------------------------------- Release notes for NUT 2.7.3 - what's new since 2.7.2: @@ -323,7 +441,7 @@ Release notes for NUT 2.6.4 - what's new since 2.6.3: - bestups has also received some care, though users are encouraged to switch to blazer_ser, since bestups will soon be deprecated. - - newmge-shut has been heavilly improved. However, replacement of the + - newmge-shut has been heavily improved. However, replacement of the current mge-shut has been postponed to the next release, due to the CVE issue. diff --git a/UPGRADING b/UPGRADING index 3b14a40..03cf410 100644 --- a/UPGRADING +++ b/UPGRADING @@ -7,6 +7,22 @@ This file lists changes that affect users who installed older versions of this software. When upgrading from an older version, be sure to check this file to see if you need to make changes to your system. +Changes from 2.7.3 to 2.7.4 +--------------------------- + +- scripts/systemd/nut-server.service.in: Restore systemd relationship since it + was preventing upsd from starting whenever one or more drivers, among several, + was failing to start + +- Fix UPower device matching for recent kernels, since hiddev* devices now have + class "usbmisc", rather than "usb" + +- macosx-ups: the "port" driver option no longer has any effect + +- Network protocol information: default to type NUMBER for variables that are + not flagged as STRING . This point is subject to improvements or change in + the next release 2.7.5. Refer to docs/net-protocol.txt for more information + Changes from 2.7.2 to 2.7.3 --------------------------- @@ -191,7 +207,7 @@ automake). Refer to packaging/debian/ for an example of migration. ie not using upsdrvctl. - Developers of external client application using libupsclient are encouraged to rename the "UPSCONN" client structure to "UPSCONN_t" -since the former will disapear by the release of NUT 2.4. +since the former will disappear by the release of NUT 2.4. Changes from 2.0.4 to 2.0.5 --------------------------- diff --git a/clients/Makefile.in b/clients/Makefile.in index 7e58b62..0a7949e 100644 --- a/clients/Makefile.in +++ b/clients/Makefile.in @@ -366,6 +366,7 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ +LIBDIR = @LIBDIR@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ diff --git a/clients/nutclient.cpp b/clients/nutclient.cpp index dcf0c2d..8304473 100644 --- a/clients/nutclient.cpp +++ b/clients/nutclient.cpp @@ -374,6 +374,11 @@ std::string Socket::read()throw(nut::IOException) // Read new buffer size_t sz = read(&buff, 256); + if(sz==0) + { + disconnect(); + throw nut::IOException("Server closed connection unexpectedly"); + } _buffer.assign(buff, sz); } } diff --git a/clients/upsrw.c b/clients/upsrw.c index 8113690..3a0efb4 100644 --- a/clients/upsrw.c +++ b/clients/upsrw.c @@ -366,6 +366,11 @@ static void do_type(const char *varname) } + if (!strcasecmp(answer[i], "NUMBER")) { + printf("Type: NUMBER\n"); + return; + } + /* ignore this one */ if (!strcasecmp(answer[i], "RW")) { continue; diff --git a/common/Makefile.am b/common/Makefile.am index f85244c..2bfc6e0 100644 --- a/common/Makefile.am +++ b/common/Makefile.am @@ -9,8 +9,8 @@ libparseconf_la_SOURCES = parseconf.c # 'dist', and is only required for actual build, in which case # BUILT_SOURCES (in ../include) will ensure nut_version.h will # be built before anything else -libcommon_la_SOURCES = common.c state.c upsconf.c -libcommonclient_la_SOURCES = common.c state.c +libcommon_la_SOURCES = common.c state.c str.c upsconf.c +libcommonclient_la_SOURCES = common.c state.c str.c # ensure inclusion of local implementation of missing systems functions # using LTLIBOBJS. Refer to configure.in -> AC_REPLACE_FUNCS libcommon_la_LIBADD = libparseconf.la @LTLIBOBJS@ diff --git a/common/Makefile.in b/common/Makefile.in index 6a5149e..8710560 100644 --- a/common/Makefile.in +++ b/common/Makefile.in @@ -82,8 +82,8 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = common -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am strerror.c \ - atexit.c setenv.c snprintf.c $(top_srcdir)/depcomp +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am atexit.c \ + snprintf.c setenv.c strerror.c $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ @@ -114,14 +114,14 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libcommon_la_DEPENDENCIES = libparseconf.la @LTLIBOBJS@ -am_libcommon_la_OBJECTS = common.lo state.lo upsconf.lo +am_libcommon_la_OBJECTS = common.lo state.lo str.lo upsconf.lo libcommon_la_OBJECTS = $(am_libcommon_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libcommonclient_la_DEPENDENCIES = libparseconf.la @LTLIBOBJS@ -am_libcommonclient_la_OBJECTS = common.lo state.lo +am_libcommonclient_la_OBJECTS = common.lo state.lo str.lo libcommonclient_la_OBJECTS = $(am_libcommonclient_la_OBJECTS) libparseconf_la_LIBADD = am_libparseconf_la_OBJECTS = parseconf.lo @@ -241,6 +241,7 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ +LIBDIR = @LIBDIR@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ @@ -382,8 +383,8 @@ libparseconf_la_SOURCES = parseconf.c # 'dist', and is only required for actual build, in which case # BUILT_SOURCES (in ../include) will ensure nut_version.h will # be built before anything else -libcommon_la_SOURCES = common.c state.c upsconf.c -libcommonclient_la_SOURCES = common.c state.c +libcommon_la_SOURCES = common.c state.c str.c upsconf.c +libcommonclient_la_SOURCES = common.c state.c str.c # ensure inclusion of local implementation of missing systems functions # using LTLIBOBJS. Refer to configure.in -> AC_REPLACE_FUNCS libcommon_la_LIBADD = libparseconf.la @LTLIBOBJS@ @@ -456,6 +457,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseconf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/upsconf.Plo@am__quote@ .c.o: diff --git a/common/common.c b/common/common.c index d7c74d3..6637113 100644 --- a/common/common.c +++ b/common/common.c @@ -584,47 +584,6 @@ char *xstrdup(const char *string) return p; } -/* modify in - strip all trailing instances of */ -char *rtrim(char *in, const char sep) -{ - char seps[2] = { sep, '\0' }; - - return rtrim_m(in, seps); -} - -/* modify in - strip all trailing instances of each char in */ -char *rtrim_m(char *in, const char *seps) -{ - char *p; - - if (in && strlen(in)) { - p = &in[strlen(in) - 1]; - - while ((p >= in) && (strchr(seps, *p) != NULL)) - *p-- = '\0'; - } - return in; -} - -/* modify in - strip all leading instances of */ -char* ltrim(char *in, const char sep) -{ - char seps[2] = { sep, '\0' }; - - return ltrim_m(in, seps); -} - -/* modify in - strip all leading instances of each char in */ -char* ltrim_m(char *in, const char *seps) -{ - if (in && strlen(in)) { - while ((*in != '\0') && (strchr(seps, *in) != NULL)) - memmove(in, in + 1, strlen(in)); - } - - return in; -} - /* Read up to buflen bytes from fd and return the number of bytes read. If no data is available within d_sec + d_usec, return 0. On error, a value < 0 is returned (errno indicates error). */ diff --git a/common/str.c b/common/str.c new file mode 100644 index 0000000..092efcf --- /dev/null +++ b/common/str.c @@ -0,0 +1,607 @@ +/* str.c - Common string-related functions + * + * Copyright (C) + * 2000 Russell Kroll + * 2015 Daniele Pezzini + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include +#include +#include +#include + +#include "str.h" + +char *str_trim(char *string, const char character) +{ + return str_rtrim(str_ltrim(string, character), character); +} + +char *str_trim_m(char *string, const char *characters) +{ + return str_rtrim_m(str_ltrim_m(string, characters), characters); +} + +char *str_ltrim(char *string, const char character) +{ + char characters[2] = { character, '\0' }; + + return str_ltrim_m(string, characters); +} + +char *str_ltrim_m(char *string, const char *characters) +{ + if ( + string == NULL || + *string == '\0' || + characters == NULL || + *characters == '\0' + ) + return string; + + while ( + *string != '\0' && + strchr(characters, *string) != NULL + ) + memmove(string, string + 1, strlen(string)); + + return string; +} + +char *str_rtrim(char *string, const char character) +{ + char characters[2] = { character, '\0' }; + + return str_rtrim_m(string, characters); +} + +char *str_rtrim_m(char *string, const char *characters) +{ + char *ptr; + + if ( + string == NULL || + *string == '\0' || + characters == NULL || + *characters == '\0' + ) + return string; + + ptr = &string[strlen(string) - 1]; + + while ( + ptr >= string && + strchr(characters, *ptr) != NULL + ) + *ptr-- = '\0'; + + return string; +} + +char *str_trim_space(char *string) +{ + return str_rtrim_space(str_ltrim_space(string)); +} + +char *str_ltrim_space(char *string) +{ + if ( + string == NULL || + *string == '\0' + ) + return string; + + while ( + *string != '\0' && + isspace(*string) + ) + memmove(string, string + 1, strlen(string)); + + return string; +} + +char *str_rtrim_space(char *string) +{ + char *ptr; + + if ( + string == NULL || + *string == '\0' + ) + return string; + + ptr = &string[strlen(string) - 1]; + + while ( + ptr >= string && + isspace(*ptr) + ) + *ptr-- = '\0'; + + return string; +} + +int str_is_short(const char *string, const int base) +{ + short number; + + return str_to_short(string, &number, base); +} + +int str_is_short_strict(const char *string, const int base) +{ + short number; + + return str_to_short_strict(string, &number, base); +} + +int str_is_ushort(const char *string, const int base) +{ + unsigned short number; + + return str_to_ushort(string, &number, base); +} + +int str_is_ushort_strict(const char *string, const int base) +{ + unsigned short number; + + return str_to_ushort_strict(string, &number, base); +} + +int str_is_int(const char *string, const int base) +{ + int number; + + return str_to_int(string, &number, base); +} + +int str_is_int_strict(const char *string, const int base) +{ + int number; + + return str_to_int_strict(string, &number, base); +} + +int str_is_uint(const char *string, const int base) +{ + unsigned int number; + + return str_to_uint(string, &number, base); +} + +int str_is_uint_strict(const char *string, const int base) +{ + unsigned int number; + + return str_to_uint_strict(string, &number, base); +} + +int str_is_long(const char *string, const int base) +{ + long number; + + return str_to_long(string, &number, base); +} + +int str_is_long_strict(const char *string, const int base) +{ + long number; + + return str_to_long_strict(string, &number, base); +} + +int str_is_ulong(const char *string, const int base) +{ + unsigned long number; + + return str_to_ulong(string, &number, base); +} + +int str_is_ulong_strict(const char *string, const int base) +{ + unsigned long number; + + return str_to_ulong_strict(string, &number, base); +} + +int str_is_double(const char *string, const int base) +{ + double number; + + return str_to_double(string, &number, base); +} + +int str_is_double_strict(const char *string, const int base) +{ + double number; + + return str_to_double_strict(string, &number, base); +} + +int str_to_short(const char *string, short *number, const int base) +{ + long num; + + *number = 0; + + if (!str_to_long(string, &num, base)) + return 0; + + if ( + num < SHRT_MIN || + num > SHRT_MAX + ) { + errno = ERANGE; + return 0; + } + + *number = num; + return 1; +} + +int str_to_short_strict(const char *string, short *number, const int base) +{ + long num; + + *number = 0; + + if (!str_to_long_strict(string, &num, base)) + return 0; + + if ( + num < SHRT_MIN || + num > SHRT_MAX + ) { + errno = ERANGE; + return 0; + } + + *number = num; + return 1; +} + +int str_to_ushort(const char *string, unsigned short *number, const int base) +{ + unsigned long num; + + *number = 0; + + if (!str_to_ulong(string, &num, base)) + return 0; + + if (num > USHRT_MAX) { + errno = ERANGE; + return 0; + } + + *number = num; + return 1; +} + +int str_to_ushort_strict(const char *string, unsigned short *number, const int base) +{ + unsigned long num; + + *number = 0; + + if (!str_to_ulong_strict(string, &num, base)) + return 0; + + if (num > USHRT_MAX) { + errno = ERANGE; + return 0; + } + + *number = num; + return 1; +} + +int str_to_int(const char *string, int *number, const int base) +{ + long num; + + *number = 0; + + if (!str_to_long(string, &num, base)) + return 0; + + if ( + num < INT_MIN || + num > INT_MAX + ) { + errno = ERANGE; + return 0; + } + + *number = num; + return 1; +} + +int str_to_int_strict(const char *string, int *number, const int base) +{ + long num; + + *number = 0; + + if (!str_to_long_strict(string, &num, base)) + return 0; + + if ( + num < INT_MIN || + num > INT_MAX + ) { + errno = ERANGE; + return 0; + } + + *number = num; + return 1; +} + +int str_to_uint(const char *string, unsigned int *number, const int base) +{ + unsigned long num; + + *number = 0; + + if (!str_to_ulong(string, &num, base)) + return 0; + + if (num > UINT_MAX) { + errno = ERANGE; + return 0; + } + + *number = num; + return 1; +} + +int str_to_uint_strict(const char *string, unsigned int *number, const int base) +{ + unsigned long num; + + *number = 0; + + if (!str_to_ulong_strict(string, &num, base)) + return 0; + + if (num > UINT_MAX) { + errno = ERANGE; + return 0; + } + + *number = num; + return 1; +} + +int str_to_long(const char *string, long *number, const int base) +{ + char *str; + + *number = 0; + + if ( + string == NULL || + *string == '\0' + ) { + errno = EINVAL; + return 0; + } + + str = strdup(string); + if (str == NULL) + return 0; + + str_trim_space(str); + + if (!str_to_long_strict(str, number, base)) { + free(str); + return 0; + } + + free(str); + return 1; +} + +int str_to_long_strict(const char *string, long *number, const int base) +{ + char *ptr = NULL; + + *number = 0; + + if ( + string == NULL || + *string == '\0' || + isspace(*string) + ) { + errno = EINVAL; + return 0; + } + + errno = 0; + *number = strtol(string, &ptr, base); + + if ( + errno == EINVAL || + *ptr != '\0' + ) { + *number = 0; + errno = EINVAL; + return 0; + } + + if (errno == ERANGE) { + *number = 0; + return 0; + } + + return 1; +} + +int str_to_ulong(const char *string, unsigned long *number, const int base) +{ + char *str; + + *number = 0; + + if ( + string == NULL || + *string == '\0' + ) { + errno = EINVAL; + return 0; + } + + str = strdup(string); + if (str == NULL) + return 0; + + str_trim_space(str); + + if (!str_to_ulong_strict(str, number, base)) { + free(str); + return 0; + } + + free(str); + return 1; +} + +int str_to_ulong_strict(const char *string, unsigned long *number, const int base) +{ + char *ptr = NULL; + + *number = 0; + + if ( + string == NULL || + *string == '\0' || + *string == '+' || + *string == '-' || + isspace(*string) + ) { + errno = EINVAL; + return 0; + } + + errno = 0; + *number = strtoul(string, &ptr, base); + + if ( + errno == EINVAL || + *ptr != '\0' + ) { + *number = 0; + errno = EINVAL; + return 0; + } + + if (errno == ERANGE) { + *number = 0; + return 0; + } + + return 1; +} + +int str_to_double(const char *string, double *number, const int base) +{ + char *str; + + *number = 0; + + if ( + string == NULL || + *string == '\0' + ) { + errno = EINVAL; + return 0; + } + + str = strdup(string); + if (str == NULL) + return 0; + + str_trim_space(str); + + if (!str_to_double_strict(str, number, base)) { + free(str); + return 0; + } + + free(str); + return 1; +} + +int str_to_double_strict(const char *string, double *number, const int base) +{ + char *ptr = NULL; + + *number = 0; + + if ( + string == NULL || + *string == '\0' || + isspace(*string) + ) { + errno = EINVAL; + return 0; + } + + switch (base) + { + case 0: + break; + case 10: + if (strlen(string) != strspn(string, "-+.0123456789Ee")) { + errno = EINVAL; + return 0; + } + break; + case 16: + if (strlen(string) != strspn(string, "-+.0123456789ABCDEFabcdefXxPp")) { + errno = EINVAL; + return 0; + } + break; + default: + errno = EINVAL; + return 0; + } + + errno = 0; + *number = strtod(string, &ptr); + + if ( + errno == EINVAL || + *ptr != '\0' + ) { + *number = 0; + errno = EINVAL; + return 0; + } + + if (errno == ERANGE) { + *number = 0; + return 0; + } + + return 1; +} diff --git a/conf/Makefile.in b/conf/Makefile.in index 4afc1f8..cc5884c 100644 --- a/conf/Makefile.in +++ b/conf/Makefile.in @@ -220,6 +220,7 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ +LIBDIR = @LIBDIR@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ diff --git a/configure b/configure index 3210ecd..f70451d 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for nut 2.7.3. +# Generated by GNU Autoconf 2.69 for nut 2.7.4. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='nut' PACKAGE_TARNAME='nut' -PACKAGE_VERSION='2.7.3' -PACKAGE_STRING='nut 2.7.3' +PACKAGE_VERSION='2.7.4' +PACKAGE_STRING='nut 2.7.4' PACKAGE_BUGREPORT='https://github.com/networkupstools/nut/issues' PACKAGE_URL='' @@ -652,6 +652,7 @@ RUN_AS_USER PORT SBINDIR DRVPATH +LIBDIR BINDIR CONFPATH STATEPATH @@ -1511,7 +1512,7 @@ if test "$ac_init_help" = "long"; then # 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 <<_ACEOF -\`configure' configures nut 2.7.3 to adapt to many kinds of systems. +\`configure' configures nut 2.7.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1582,7 +1583,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of nut 2.7.3:";; + short | recursive ) echo "Configuration of nut 2.7.4:";; esac cat <<\_ACEOF @@ -1784,7 +1785,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -nut configure 2.7.3 +nut configure 2.7.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2374,7 +2375,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by nut $as_me 2.7.3, which was +It was created by nut $as_me 2.7.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3493,7 +3494,7 @@ fi # Define the identity of the package. PACKAGE='nut' - VERSION='2.7.3' + VERSION='2.7.4' cat >>confdefs.h <<_ACEOF @@ -10271,32 +10272,33 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${LIBS}" >&5 $as_echo "${LIBS}" >&6; } - for ac_header in nss.h -do : - ac_fn_c_check_header_compile "$LINENO" "nss.h" "ac_cv_header_nss_h" "$ac_includes_default -" -if test "x$ac_cv_header_nss_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NSS_H 1 -_ACEOF - nut_have_libnss=yes -else - nut_have_libnss=no -fi - -done - - for ac_func in NSS_Init + for ac_func in NSS_Init do : ac_fn_c_check_func "$LINENO" "NSS_Init" "ac_cv_func_NSS_Init" if test "x$ac_cv_func_NSS_Init" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NSS_INIT 1 +_ACEOF + nut_have_libnss=yes +else + nut_have_libnss=no +fi +done + + for ac_header in nss.h ssl.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else nut_have_libnss=no fi + done @@ -10601,32 +10603,33 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${LIBS}" >&5 $as_echo "${LIBS}" >&6; } - for ac_header in nss.h -do : - ac_fn_c_check_header_compile "$LINENO" "nss.h" "ac_cv_header_nss_h" "$ac_includes_default -" -if test "x$ac_cv_header_nss_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NSS_H 1 -_ACEOF - nut_have_libnss=yes -else - nut_have_libnss=no -fi - -done - - for ac_func in NSS_Init + for ac_func in NSS_Init do : ac_fn_c_check_func "$LINENO" "NSS_Init" "ac_cv_func_NSS_Init" if test "x$ac_cv_func_NSS_Init" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NSS_INIT 1 +_ACEOF + nut_have_libnss=yes +else + nut_have_libnss=no +fi +done + + for ac_header in nss.h ssl.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else nut_have_libnss=no fi + done @@ -23333,6 +23336,16 @@ cat >>confdefs.h <<_ACEOF _ACEOF +conftemp="${libdir}" +eval conftemp=\"${conftemp}\" +eval conftemp=\"${conftemp}\" +LIBDIR=${conftemp} + +cat >>confdefs.h <<_ACEOF +#define LIBDIR "${conftemp}" +_ACEOF + + now=`TZ=UTC date +%Y-%m-%d` @@ -23384,6 +23397,7 @@ now=`TZ=UTC date +%Y-%m-%d` + ac_config_files="$ac_config_files clients/Makefile common/Makefile conf/Makefile conf/upsmon.conf.sample conf/upssched.conf.sample data/html/header.html data/html/Makefile data/Makefile data/driver.list docs/Makefile docs/docinfo.xml docs/man/Makefile drivers/Makefile include/Makefile lib/libupsclient-config lib/libupsclient.pc lib/libnutclient.pc lib/libnutscan.pc lib/Makefile scripts/Aix/nut-aix.spec scripts/augeas/Makefile scripts/augeas/nutnutconf.aug scripts/augeas/nutupsconf.aug scripts/augeas/nutupsdconf.aug scripts/augeas/nutupsdusers.aug scripts/augeas/nutupsmonconf.aug scripts/augeas/nutupsschedconf.aug scripts/augeas/nuthostsconf.aug scripts/augeas/nutupssetconf.aug scripts/avahi/nut.service scripts/devd/Makefile scripts/devd/nut-usb.conf scripts/hotplug/Makefile scripts/hotplug/libhidups scripts/HP-UX/nut.psf scripts/HP-UX/postinstall scripts/python/Makefile scripts/systemd/Makefile scripts/systemd/nut-driver.service scripts/systemd/nut-monitor.service scripts/systemd/nut-server.service scripts/systemd/nutshutdown scripts/Solaris/Makefile scripts/Solaris/pkginfo scripts/Solaris/postinstall scripts/Solaris/preremove scripts/Solaris/nut scripts/udev/Makefile scripts/udev/nut-ipmipsu.rules scripts/udev/nut-usbups.rules scripts/ufw/nut.ufw.profile scripts/Makefile server/Makefile tools/Makefile tools/nut-scanner/Makefile tests/Makefile Makefile" @@ -24051,7 +24065,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by nut $as_me 2.7.3, which was +This file was extended by nut $as_me 2.7.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -24117,7 +24131,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -nut config.status 2.7.3 +nut config.status 2.7.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index f87be6d..41db8d3 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,8 @@ dnl | Network UPS Tools: configure.ac | dnl +------------------------------------------------------------------+ dnl NUT version number is defined here, with a Git suffix in include/nut_version.h -AC_INIT(nut, 2.7.3, [https://github.com/networkupstools/nut/issues]) +AC_INIT(nut, 2.7.4, [https://github.com/networkupstools/nut/issues]) +AC_CONFIG_AUX_DIR([.]) AC_CONFIG_SRCDIR(server/upsd.c) AC_CONFIG_MACRO_DIR([m4]) echo "Network UPS Tools version ${PACKAGE_VERSION}" @@ -1202,6 +1203,13 @@ eval conftemp=\"${conftemp}\" SBINDIR=${conftemp} AC_DEFINE_UNQUOTED(SBINDIR, "${conftemp}", [Default path for system executables]) +dnl same for libdir +conftemp="${libdir}" +eval conftemp=\"${conftemp}\" +eval conftemp=\"${conftemp}\" +LIBDIR=${conftemp} +AC_DEFINE_UNQUOTED(LIBDIR, "${conftemp}", [Default path for system libraries]) + dnl Current date now=`TZ=UTC date +%Y-%m-%d` @@ -1239,6 +1247,7 @@ AC_SUBST(PIDPATH) AC_SUBST(STATEPATH) AC_SUBST(CONFPATH) AC_SUBST(BINDIR) +AC_SUBST(LIBDIR) AC_SUBST(DRVPATH) AC_SUBST(SBINDIR) AC_SUBST(PORT) diff --git a/data/Makefile.in b/data/Makefile.in index 5a010e3..0bd8feb 100644 --- a/data/Makefile.in +++ b/data/Makefile.in @@ -274,6 +274,7 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ +LIBDIR = @LIBDIR@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ diff --git a/data/cmdvartab b/data/cmdvartab index ef68d70..3d091f2 100644 --- a/data/cmdvartab +++ b/data/cmdvartab @@ -47,6 +47,11 @@ VARDESC input.voltage "Input voltage (V)" VARDESC input.voltage.extended "Extended input voltage range" VARDESC input.voltage.maximum "Maximum incoming voltage seen (V)" VARDESC input.voltage.minimum "Minimum incoming voltage seen (V)" +VARDESC input.voltage.status "Voltage status relative to the thresholds" +VARDESC input.voltage.low.warning "Input voltage low warning threshold (V)" +VARDESC input.voltage.low.critical "Input voltage low critical threshold (V)" +VARDESC input.voltage.high.warning "Input voltage high warning threshold (V)" +VARDESC input.voltage.high.critical "Input voltage high critical threshold (V)" VARDESC input.voltage.nominal "Nominal input voltage (V)" VARDESC input.transfer.reason "Reason for last transfer to battery" VARDESC input.transfer.low "Low voltage transfer point (V)" @@ -59,8 +64,14 @@ VARDESC input.sensitivity "Input power sensitivity" VARDESC input.quality "Input power quality" VARDESC input.current "Input current (A)" VARDESC input.current.nominal "Nominal input current (A)" +VARDESC input.current.status "Current status relative to the thresholds" +VARDESC input.current.low.warning "Input current low warning threshold (A)" +VARDESC input.current.low.critical "Input current low critical threshold (A)" +VARDESC input.current.high.warning "Input current high warning threshold (A)" +VARDESC input.current.high.critical "Input current high critical threshold (A)" VARDESC input.frequency "Input line frequency (Hz)" VARDESC input.frequency.extended "Extended input frequency range" +VARDESC input.frequency.status "Frequency status" VARDESC input.frequency.nominal "Nominal input line frequency (Hz)" VARDESC input.frequency.low "Minimum input line frequency (Hz)" VARDESC input.frequency.high "Maximum input line frequency (Hz)" @@ -72,6 +83,8 @@ VARDESC input.transfer.delay "Delay before transfer to mains" VARDESC input.load "Load on (ePDU) input (percent of full)" VARDESC input.realpower "Current sum value of all (ePDU) phases real power (W)" VARDESC input.power "Current sum value of all (ePDU) phases apparent power (VA)" +VARDESC input.source "The current input power source" +VARDESC input.source.preferred "The prefered input power source" VARDESC output.voltage "Output voltage (V)" VARDESC output.voltage.nominal "Nominal output voltage (V)" @@ -106,14 +119,31 @@ VARDESC battery.charger.status "Battery charger status" VARDESC ambient.temperature "Ambient temperature (degrees C)" VARDESC ambient.temperature.alarm "Ambient temperature alarm is active" -VARDESC ambient.temperature.alarm.maximum "Maximum allowed ambient temperature" -VARDESC ambient.temperature.alarm.minimum "Minimum allowed ambient temperature" +VARDESC ambient.temperature.status "Ambient temperature status relative to the configured thresholds" +VARDESC ambient.temperature.alarm.maximum "Maximum allowed ambient temperature (degrees C)" +VARDESC ambient.temperature.alarm.minimum "Minimum allowed ambient temperature (degrees C)" VARDESC ambient.temperature.alarm.enable "Enable ambient temperature alarm" -VARDESC ambient.humidity "Ambient humidity" +VARDESC ambient.temperature.low "Temperature threshold low (degrees C)" +VARDESC ambient.temperature.low.warning "Temperature threshold low warning (degrees C)" +VARDESC ambient.temperature.low.critical "Temperature threshold low critical (degrees C)" +VARDESC ambient.temperature.high "Temperature threshold high (degrees C)" +VARDESC ambient.temperature.high.warning "Temperature threshold high warning (degrees C)" +VARDESC ambient.temperature.high.critical "Temperature threshold high critical (degrees C)" +VARDESC ambient.humidity "Ambient humidity (percent)" VARDESC ambient.humidity.alarm "Ambient humidity alarm is active" -VARDESC ambient.humidity.alarm.maximum "Maximum allowed ambient humidity" -VARDESC ambient.humidity.alarm.minimum "Minimum allowed ambient humidity" +VARDESC ambient.humidity.status "Ambient humidity status relative to the configured thresholds" +VARDESC ambient.humidity.alarm.maximum "Maximum allowed ambient humidity (percent)" +VARDESC ambient.humidity.alarm.minimum "Minimum allowed ambient humidity (percent)" VARDESC ambient.humidity.alarm.enable "Enable ambient humidity alarm" +VARDESC ambient.humidity.low "Ambient humidity threshold low (percent)" +VARDESC ambient.humidity.low.warning "Ambient humidity threshold low warning (percent)" +VARDESC ambient.humidity.low.critical "Ambient humidity threshold low critical (percent)" +VARDESC ambient.humidity.high "Ambient humidity threshold high (percent)" +VARDESC ambient.humidity.high.warning "Ambient humidity threshold high warning (percent)" +VARDESC ambient.humidity.high.critical "Ambient humidity threshold high critical (percent)" +VARDESC ambient.present "Ambient sensor presence" +VARDESC ambient.contacts.1.status "State of the dry contact sensor 1" +VARDESC ambient.contacts.2.status "State of the dry contact sensor 2" # FIXME: the outlet collection is indexed - solve with regexs? # diff --git a/data/driver.list.in b/data/driver.list.in index a0e82fb..50f23b8 100644 --- a/data/driver.list.in +++ b/data/driver.list.in @@ -18,6 +18,7 @@ # "ups" for Uninterruptible Power Supply # "pdu" for Power Distributions Unit # "scd" for Solar Controlers Device +# "ats" for Automatic Transfer Switch # # - support level: a number from "1" to "5" (stars) meaning: # * protocol based on reverse engineering @@ -47,6 +48,8 @@ "AEC" "ups" "1" "MiniGuard UPS 700" "Megatec M2501 cable" "genericups upstype=21" "AEG Power Solutions" "ups" "2" "PROTECT HOME" "" "blazer_ser or blazer_usb" +"AEG Power Solutions" "ups" "3" "PROTECT NAS" "" "usbhid-ups" +"AEG Power Solutions" "ups" "3" "PROTECT B" "" "usbhid-ups" "APC" "ups" "2" "Back-UPS 1200BR (Microsol)" "" "solis" "APC" "ups" "2" "Back-UPS BZ2200BI-BR (Microsol)" "" "solis" @@ -70,10 +73,12 @@ "APC" "ups" "3" "Smart-UPS RT XL" "AP9618 SNMP monitoring card" "snmp-ups" "APC" "ups" "3" "(various)" "AP9618 SNMP monitoring card" "snmp-ups" "APC" "ups" "3" "(various)" "AP9630 SNMP monitoring card" "snmp-ups privProtocol=AES" +"APC" "ups" "3" "(various)" "APCUPSD-controlled devices" "apcupsd-ups" "APC" "pdu" "1" "Masterswitch" "940-0020 cable" "genericups upstype=12" "APC" "pdu" "1" "AP9210" "8 outlets" "powerman-pdu (experimental)" "APC" "pdu" "1" "AP79xx" "8 to 24 outlets" "powerman-pdu (experimental)" "APC" "pdu" "3" "(various)" "SNMP monitoring card" "snmp-ups (experimental)" +"APC" "ats" "3" "ATS AP7724" "" "snmp-ups (experimental)" "Aphel" "pdu" "3" "various PDU" "" "snmp-ups (experimental)" @@ -93,7 +98,9 @@ "ARTronic" "ups" "2" "ARTon Platinium Combo 3.1 10/15/20 kVA" "USB" "blazer_usb" "ARTronic" "ups" "2" "ARTon Platinium RT 1/2/3/6/10 kVA" "USB" "blazer_usb" -"ASEM SPA" "UPS" "5" "PB1300 UPS" "i2c" "asem" +"ASEM SPA" "ups" "5" "PB1300 UPS" "i2c" "asem" + +"Asium" "ups" "3" "P700" "USB" "blazer_usb" # http://www.asiumpower.com/Asium-ASIUM-P700-650VA-360W/dp/B009SMEQ10 "ATEK" "ups" "2" "Defensor 1K Tower / Rack" "USB" "blazer_usb" "ATEK" "ups" "2" "Defensor 2K Tower / Rack" "USB" "blazer_usb" @@ -242,8 +249,8 @@ "Dell" "ups" "5" "Rack 3750W High Efficiency Online HV" "USB port" "usbhid-ups" "Dell" "ups" "5" "Rack 4200W High Efficiency Online HV" "USB port" "usbhid-ups" "Dell" "ups" "5" "Rack 5600W HV" "USB port" "usbhid-ups" -"Dell" "ups" "5" "Various (SNMP mode)" "UPS Network Management Card " "snmp-ups" -"Dell" "ups" "5" "Various (XML/HTTP mode)" "UPS Network Management Card " "netxml-ups (experimental)" +"Dell" "ups" "5" "Various (SNMP mode)" "UPS Network Management Card" "snmp-ups" +"Dell" "ups" "5" "Various (XML/HTTP mode)" "UPS Network Management Card" "netxml-ups (experimental)" "Delta" "ups" "1" "GES602N" "" "belkin" @@ -275,6 +282,8 @@ "Eaton" "ups" "5" "MX 5/8/10/15/20 kVA" "USB port" "usbhid-ups" "Eaton" "ups" "5" "5 PX" "USB port" "usbhid-ups" "Eaton" "ups" "5" "Nova AVR 625/1250" "USB" "usbhid-ups" +"Eaton" "ups" "5" "5E650iUSB" "USB port" "usbhid-ups" +"Eaton" "ups" "5" "5E1100iUSB" "USB port" "usbhid-ups" # http://powerquality.eaton.com/5E1100iUSB.aspx?CX&GUID=8D85FE66-3102-427C-8F33-B8D56BBDD4D3 "Eaton" "ups" "5" "5S" "USB port" "usbhid-ups" "Eaton" "ups" "5" "5SC" "USB port" "usbhid-ups" "Eaton" "ups" "5" "5P" "USB port" "usbhid-ups" @@ -296,9 +305,10 @@ "Eaton" "ups" "5" "EX RT (XML/HTTP)" "NMC Transverse card (ref 66074)" "netxml-ups (experimental)" "Eaton" "ups" "5" "EX RT (SNMP)" "NMC Transverse card (ref 66074)" "snmp-ups (experimental)" "Eaton" "ups" "5" "E Series NV UPS 400-2000 VA" "" "blazer_usb" -"Eaton" "ups" "5" "E Series DX UPS 1-20 kVA" "" "mge-utalk" +"Eaton" "ups" "5" "E Series DX UPS 1-20 kVA" "" "blazer_ser" # http://www.eaton.com/Eaton/ESeriesUPS/DXUPS/ "Eaton" "ups" "4" "NetUPS SE 450/700/1000/1500" "" "upscode2" "Eaton" "ups" "5" "BladeUPS (SNMP)" "ConnectUPS Web/SNMP Card" "snmp-ups (experimental)" +"Eaton" "ups" "5" "various models (SNMP mode)" "Power Xpert Gateway UPS Card" "snmp-ups (experimental)" "Eaton" "ups" "5" "various models (XML/HTTP mode)" "NMC Minislot (ref 66102)" "netxml-ups (experimental)" "Eaton" "ups" "5" "various models (SNMP mode)" "NMC Minislot (ref 66102)" "snmp-ups (experimental)" "Eaton" "ups" "5" "various models (XML/HTTP mode)" "SNMP/Web Minislot card (ref 66244)" "netxml-ups (experimental)" @@ -308,6 +318,7 @@ "Eaton" "pdu" "5" "ePDU Switched" "" "snmp-ups" "Eaton" "pdu" "5" "ePDU Monitored" "" "snmp-ups or netxml-ups" "Eaton" "ups" "5" "Powerware 3105" "USB" "bcmxcp_usb" # http://powerquality.eaton.com/Products-services/Backup-Power-UPS/3105-eol.aspx +"Eaton" "ups" "5" "Powerware 9125" "USB card" "bcmxcp_usb" "Eaton" "ups" "5" "Powerware 9130" "" "bcmxcp or usbhid-ups" "Eaton" "ups" "5" "Powerware 9140" "" "bcmxcp or usbhid-ups" "Eaton" "ups" "5" "Powerware 5130" "" "usbhid-ups" @@ -316,10 +327,13 @@ "Eaton" "ups" "5" "ConnectUPS X / BD / E Slot" "Serial Pass-through mode" "bcmxcp" "Eaton" "ups" "5" "ConnectUPS X / BD / E Slot" "Network port" "snmp-ups" "Eaton" "ups" "5" "Management Card Contact" "Config 3 - Cable 66033" "genericups upstype=7" +"Eaton" "ats" "5" "Eaton ATS16" "" "snmp-ups" "Effekta" "ups" "2" "MI/MT/MH" "2502 cable" "blazer_ser" "Effekta" "ups" "2" "RM2000MH" "" "blazer_ser" +"Electrys" "ups" "2" "UPS 2500" "" "nutdrv_qx or blazer_ser" + "Energy Sistem" "ups" "2" "(various)" "" "blazer_ser" "ETA" "ups" "1" "mini+UPS" "WinNT/Upsoft cable" "genericups upstype=7" @@ -351,6 +365,7 @@ "Fideltronik" "ups" "1" "Ares 700 and larger" "" "genericups upstype=6" "Fideltronik" "ups" "2" "LUPUS 500" "USB" "nutdrv_qx" "Fideltronik" "ups" "1" "Other Ares models" "" "genericups upstype=19" +"Fideltronik INIGO" "ups" "2" "Viper 1200" "USB" "nutdrv_qx" # http://fideltronikinigo.com/viper/viper-1200/ "Fiskars" "ups" "4" "PowerRite MAX" "" "upscode2" "Fiskars" "ups" "4" "PowerServer 10" "" "upscode2" @@ -414,9 +429,11 @@ "HP" "ups" "3" "R/T 2200 G2" "" "usbhid-ups" "HP" "ups" "3" "R/T3000" "USB port" "usbhid-ups" "HP" "ups" "3" "R5000 / R7000" "USB port" "usbhid-ups" -"HP" "ups" "4" "Various (SNMP mode)" "HP UPS Management Module " "snmp-ups" +"HP" "ups" "4" "Various (SNMP mode)" "HP UPS Management Module" "snmp-ups" "HP" "pdu" "1" "HP3488 Switch/Control Unit" "" "powerman-pdu (experimental)" +"Huawei" "ups" "4" "UPS5000-E" "" "snmp-ups" + "IBM" "pdu" "1" "Blade Center Management Module" "15 outlets" "powerman-pdu (experimental)" "ICS" "pdu" "1" "8064 Ethernet Relay Interface" "16 outlets" "powerman-pdu (experimental)" @@ -478,6 +495,8 @@ "LDLC" "ups" "2" "UPS-1200D" "" "blazer_usb langid_fix=0x4095" +"Legrand" "ups" "2" "Keor Multiplug" "" "nutdrv_qx" + "Lestar" "ups" "2" "MD-800E" "" "blazer_ser" "Lexis" "ups" "2" "X-Power Tigra 1kVA" "" "blazer_ser or bestups" @@ -491,6 +510,7 @@ "LNXI" "pdu" "1" "Icebox" "10 outlets" "powerman-pdu (experimental)" +"Lyonn" "ups" "2" "CTB-800V" "" "nutdrv_qx" "Lyonn" "ups" "2" "CTB-1200" "" "blazer_usb" "Masterguard" "ups" "1" "(various)" "" "masterguard" @@ -691,6 +711,8 @@ "Microline" "ups" "2" "C-Lion Innova Tower 6K/10K" "" "blazer_usb" "Microline" "ups" "2" "C-Lion Innova Combo 10K/20K (3/1)" "" "blazer_usb" +"Micropower" "ups" "2" "LCD 1000" "USB" "blazer_usb" + "Microsol" "ups" "4" "Solis 1.0" "1000VA" "solis" "Microsol" "ups" "4" "Solis 1.5" "1500VA" "solis" "Microsol" "ups" "4" "Solis 2.0" "2000VA" "solis" @@ -711,7 +733,7 @@ "Mustek" "ups" "2" "Powermust" "2000VA USB" "blazer_ser" "Mustek" "ups" "2" "Powermust Office 650" "USB" "blazer_usb" "Mustek" "ups" "2" "PowerMust 424 / 636 / 848" "USB" "blazer_usb" -"Mustek" "ups" "2" "Yukai PowerMust" "1000 USB (PID: 5161)" "blazer_usb" +"Mustek" "ups" "2" "Yukai PowerMust" "1000 USB (PID: 5161)" "blazer_usb" "Mustek" "ups" "2" "Various" "" "blazer_ser" "Neus" "ups" "2" "400va / 600va" "" "blazer_ser" @@ -723,6 +745,7 @@ "NHS Sistemas de Energia" "ups" "5" "Expert S Online 8000" "" "gamatronic" "NHS Sistemas de Energia" "ups" "5" "Expert S Online 10000" "" "gamatronic" "NHS Sistemas de Energia" "ups" "5" "Expert S Online 10000" "" "gamatronic" +"NHS Sistemas de Energia" "ups" "5" "Laser Senoidal 5000VA" "USB" "gamatronic" # http://www.nhs.com.br/produtos_interna/id/T0RrPQ== "Nitram" "ups" "1" "Elite 500" "" "genericups upstype=8" "Nitram" "ups" "1" "Elite 2002" "" "genericups upstype=16" @@ -936,6 +959,7 @@ "Sweex" "ups" "1" "500/1000" "" "genericups upstype=7" "Sweex" "ups" "1" "1000" "USB" "richcomm_usb" "Sweex" "ups" "2" "(various)" "" "blazer_ser" +"Sweex" "ups" "2" "INTELLIGENT UPS 1500VA P220" "USB" "blazer_usb (USB ID 0665:5161)" # http://www.sweex.com/en/notebook-pc-accessoires/ups/PP220/ "Syndome" "ups" "2" "Era 500VA" "USB" "blazer_usb" @@ -1077,6 +1101,8 @@ "Trust" "ups" "2" "UPS 1200VA Management PW-4120M" "" "blazer_ser" "Trust" "ups" "2" "UPS 1300VA Management PW-4130M" "" "blazer_ser" +"TS Shara" "ups" "4" "(various)" "" "nutdrv_qx" + "UNITEK" "ups" "2" "ALPHA 500 IC" "" "blazer_ser" "UNITEK" "ups" "2" "Alpha 1000is" "" "blazer_ser" "UNITEK" "ups" "2" "Alpha 500" "" "blazer_ser" diff --git a/data/html/Makefile.in b/data/html/Makefile.in index 8ec093f..f455c4a 100644 --- a/data/html/Makefile.in +++ b/data/html/Makefile.in @@ -213,6 +213,7 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ +LIBDIR = @LIBDIR@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ diff --git a/docs/FAQ.txt b/docs/FAQ.txt index 8ce0b14..81c93df 100644 --- a/docs/FAQ.txt +++ b/docs/FAQ.txt @@ -561,6 +561,8 @@ The most frequent issue is that udev has not actually applied the rule: - and if the device USB cord was already plugged when installing NUT. In this case, just unplug and plug back the USB cord, then restart NUT. +Instead of unplugging, you might also be able to run `udevadm trigger +--subsystem-match=usb --action=change` to fix permissions. There was a mistake in the naming of the NUT udev rules file which resulted in the rules being overridden by another udev configuration file. While this has @@ -590,7 +592,7 @@ will appear in dmesg: usbfs: process 29641 (usbhid-ups) did not claim interface 0 before use This can be a symptom of a source install conflicting with a package install. -There is a rudimetary locking mechanism in NUT, but there is a chance that the +There is a rudimentary locking mechanism in NUT, but there is a chance that the packages might not use the same directory as the NUT default, and the conflict will be reported by the kernel. diff --git a/docs/Makefile.am b/docs/Makefile.am index 8ca7afd..c587aa5 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -111,18 +111,21 @@ A2X_COMMON_OPTS = $(ASCIIDOC_VERBOSE) --attribute icons \ $(A2X) $(A2X_COMMON_OPTS) --attribute=pdf_format --format=pdf -a docinfo1 $< if HAVE_ASPELL -# FIXME: also check ../{NEWS,README,UPGRADING}+other dirs # Non-interactively spell check all documentation source files. # This is useful for Buildbot and automated QA processing # FIXME: how to present output (std{out,err}, single file or per target)? +SPELLCHECK_SRC = $(ALL_TXT_SRC) ../README ../INSTALL.nut ../UPGRADING ../NEWS \ + ../TODO ../scripts/ufw/README ../scripts/augeas/README ../lib/README \ + ../tools/nut-scanner/README + spellcheck: - @for docsrc in $(ALL_TXT_SRC); do \ + @for docsrc in $(SPELLCHECK_SRC); do \ echo "Spell checking on $$docsrc"; \ LANG=C $(ASPELL) -a -t -p $(NUT_SPELL_DICT) < $$docsrc | grep [^*]; \ done # Interactively spell check all documentation source files spellcheck-interactive: - @for docsrc in $(ALL_TXT_SRC); do\ + @for docsrc in $(SPELLCHECK_SRC); do\ echo "Spell checking on $$docsrc"; \ LANG=C $(ASPELL) check -p $(NUT_SPELL_DICT) $$docsrc; \ done diff --git a/docs/Makefile.in b/docs/Makefile.in index 037296f..1a28021 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -242,6 +242,7 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ +LIBDIR = @LIBDIR@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ @@ -464,6 +465,14 @@ A2X_COMMON_OPTS = $(ASCIIDOC_VERBOSE) --attribute icons \ --attribute tree_version=@TREE_VERSION@ \ -a toc -a numbered --destination-dir=. + +# Non-interactively spell check all documentation source files. +# This is useful for Buildbot and automated QA processing +# FIXME: how to present output (std{out,err}, single file or per target)? +@HAVE_ASPELL_TRUE@SPELLCHECK_SRC = $(ALL_TXT_SRC) ../README ../INSTALL.nut ../UPGRADING ../NEWS \ +@HAVE_ASPELL_TRUE@ ../TODO ../scripts/ufw/README ../scripts/augeas/README ../lib/README \ +@HAVE_ASPELL_TRUE@ ../tools/nut-scanner/README + all: all-recursive .SUFFIXES: @@ -802,18 +811,14 @@ packager-guide.html packager-guide.chunked packager-guide.pdf: packager-guide.tx .txt.pdf: docinfo.xml $(A2X) $(A2X_COMMON_OPTS) --attribute=pdf_format --format=pdf -a docinfo1 $< -# FIXME: also check ../{NEWS,README,UPGRADING}+other dirs -# Non-interactively spell check all documentation source files. -# This is useful for Buildbot and automated QA processing -# FIXME: how to present output (std{out,err}, single file or per target)? @HAVE_ASPELL_TRUE@spellcheck: -@HAVE_ASPELL_TRUE@ @for docsrc in $(ALL_TXT_SRC); do \ +@HAVE_ASPELL_TRUE@ @for docsrc in $(SPELLCHECK_SRC); do \ @HAVE_ASPELL_TRUE@ echo "Spell checking on $$docsrc"; \ @HAVE_ASPELL_TRUE@ LANG=C $(ASPELL) -a -t -p $(NUT_SPELL_DICT) < $$docsrc | grep [^*]; \ @HAVE_ASPELL_TRUE@ done # Interactively spell check all documentation source files @HAVE_ASPELL_TRUE@spellcheck-interactive: -@HAVE_ASPELL_TRUE@ @for docsrc in $(ALL_TXT_SRC); do\ +@HAVE_ASPELL_TRUE@ @for docsrc in $(SPELLCHECK_SRC); do\ @HAVE_ASPELL_TRUE@ echo "Spell checking on $$docsrc"; \ @HAVE_ASPELL_TRUE@ LANG=C $(ASPELL) check -p $(NUT_SPELL_DICT) $$docsrc; \ @HAVE_ASPELL_TRUE@ done diff --git a/docs/config-notes.txt b/docs/config-notes.txt index 021033b..62983b5 100644 --- a/docs/config-notes.txt +++ b/docs/config-notes.txt @@ -30,7 +30,7 @@ configuration directive. This may be something like MONITOR, NOTIFYCMD, or ACCESS. The case does matter here. "monitor" won't be recognized. Next, the parser does not care about whitespace between words. If you -like to indent things with tabs or spaces, feel free to do it here. +like to indent things with tabs or spaces, feel free to do it here. If you need to set a value to something containing spaces, it has to be contained within "quotes" to keep the parser from splitting up the line. @@ -45,46 +45,46 @@ configuration directive for some reason. You can do that too. NOTIFYCMD "/bin/notifyme -foo -bar \"hi there\" -baz" -In other words, *\* can be used to escape the *"*. +In other words, `\` can be used to escape the `"`. -Finally, for the situation where you need to put the *\* character into your +Finally, for the situation where you need to put the `\` character into your string, you just escape it. NOTIFYCMD "/bin/notifyme c:\\dos\\style\\path" -The *\* can actually be used to escape any character, but you only really -need it for *\*, *"*, and *#* as they have special meanings to the parser. +The `\` can actually be used to escape any character, but you only really +need it for `\`, `"`, and `#` as they have special meanings to the parser. When using file names with space characters, you may end up having tricky -things since you need to write them inside *""* which must be escaped: +things since you need to write them inside `""` which must be escaped: NOTIFYCMD "\"c:\\path with space\\notifyme\" \"c:\\path with space\\name\"" -*#* is the comment character. Anything after an unescaped *#* is ignored. +`#` is the comment character. Anything after an unescaped `#` is ignored. Something like this... identity = my#1ups -... will actually turn into "identity = my", since the *#* stops the -parsing. If you really need to have a *#* in your configuration, then +will actually turn into `identity = my`, since the `#` stops the +parsing. If you really need to have a `#` in your configuration, then escape it. identity = my\#1ups Much better. -The *=* character should be used with care too. There should be only one -"simple" *=* character in a line: between the parameter name and its value. -All other *=* characters should be either escaped or within "quotes". +The `=` character should be used with care too. There should be only one +"simple" `=` character in a line: between the parameter name and its value. +All other `=` characters should be either escaped or within "quotes". password = 123=123 - ... is incorrect. You should use: +is incorrect. You should use: password = 123\=123 - ... or : +or: password = "123=123" @@ -95,7 +95,7 @@ You can put a backslash at the end of the line to join it to the next one. This creates one virtual line that is composed of more than one physical line. -Also, if you leave the *""* quote container open before a newline, it will +Also, if you leave the `""` quote container open before a newline, it will keep scanning until it reaches another one. If you see bizarre behavior in your configuration files, check for an unintentional instance of quotes spanning multiple lines. @@ -176,9 +176,9 @@ right one for your hardware. You might need to try other drivers by changing the "driver=" value in ups.conf. Be sure to check the driver's man page to see if it needs any extra -settings in ups.conf to detect your hardware. +settings in `ups.conf` to detect your hardware. -If it says "can't bind /var/state/ups/..." or similar, then your +If it says `can't bind /var/state/ups/...` or similar, then your state path probably isn't writable by the driver. Check the <>. @@ -204,7 +204,7 @@ NOTE: Refer to the NUT user manual <> for information on how to access and secure upsd clients connections. Next, create upsd.users. For now, this can be an empty file. -You can come back and add more to it later when it's time to +You can come back and add more to it later when it's time to configure upsmon or run one of the management tools. Do not make either file world-readable, since they both hold @@ -266,7 +266,7 @@ You should see just one line in response: OL means your system is running on line power. If it says something else (like OB - on battery, or LB - low battery), your driver was probably misconfigured during the <> -step. If you reconfigure the driver, use 'upsdrvctl stop' to stop it, then +step. If you reconfigure the driver, use `upsdrvctl stop` to stop it, then start it again as shown in the <> step. Reference: man page: linkman:upsc[8] @@ -335,7 +335,7 @@ Reference: man page: linkman:upsc[8], Startup scripts ~~~~~~~~~~~~~~~ -NOTE: This step is not need if you installed from packages. +NOTE: This step is not necessary if you installed from packages. Edit your startup scripts, and make sure upsdrvctl and upsd are run every time your system starts. @@ -347,7 +347,7 @@ Configuring automatic shutdowns for low battery events The whole point of UPS software is to bring down the OS cleanly when you run out of battery power. Everything else is roughly eye candy. -To make sure your system shuts down properly, you will need to perform some +To make sure your system shuts down properly, you will need to perform some additional configuration and run upsmon. Here are the basics. [[Shutdown_design]] @@ -384,9 +384,9 @@ The exact behavior depends on the specific device, and is related to: - call their SHUTDOWNCMD - disconnect from upsd -5. The upsmon master system waits up to HOSTSYNC seconds (typically 15) - for the slaves to disconnect from upsd. If any are connected after - this time, upsmon stops waiting and proceeds with the shutdown +5. The upsmon master system waits up to HOSTSYNC seconds (typically 15) + for the slaves to disconnect from upsd. If any are connected after + this time, upsmon stops waiting and proceeds with the shutdown process. 6. The upsmon master: @@ -433,7 +433,7 @@ References: linkman:upsd[8], linkman:upsd.users[5] Reloading the data server ^^^^^^^^^^^^^^^^^^^^^^^^^ -Reload upsd. Depending on your configuration, you may be able to +Reload upsd. Depending on your configuration, you may be able to do this without stopping upsd: /usr/local/ups/sbin/upsd -c reload @@ -441,7 +441,7 @@ do this without stopping upsd: If that doesn't work (check the syslog), just restart it: /usr/local/ups/sbin/upsd -c stop - /usr/local/ups/sbin/upsd + /usr/local/ups/sbin/upsd NOTE: if you want to make reloading work later, see the entry in the link:FAQ.html[FAQ] about starting upsd as a different user. @@ -479,7 +479,7 @@ adding sensitive data in the next step. Create a MONITOR directive for upsmon ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Edit upsmon.conf and create a MONITOR line with the UPS definition +Edit upsmon.conf and create a MONITOR line with the UPS definition (@), username and password from the <> step, and the master or slave setting. @@ -655,7 +655,7 @@ to keep this running either. After stopping driver, server and client you'll have to send the UPS the command to shutdown only if the POWERDOWNFLAG is present. Note -that most likely you'll have to allow for a grace period after sending +that most likely you'll have to allow for a grace period after sending 'upsdrvctl shutdown' since the system will still have to take a snapshot of itself after that. Not all drivers support this, so before going down this road, make sure that the one you're using does. @@ -706,7 +706,7 @@ for individual hosts: A small to medium sized data room usually has one C and a bunch of Bs. This means that there's a system (type C) hooked to the UPS which depends -on it for power. There are also some other systems in there (type B) +on it for power. There are also some other systems in there (type B) which depend on that same UPS for power, but aren't directly connected to it. @@ -715,7 +715,7 @@ of the "single C, many Bs" depending on how it's all wired. Finally, there's a special case. Type A systems are connected to a UPS's serial port, but don't depend on it for power. This usually happens when -a UPS is physically close to a box and can reach the serial port, but +a UPS is physically close to a box and can reach the serial port, but the wiring is such that it doesn't actually feed it. Once you identify a system's type, use this list to decide which of the diff --git a/docs/configure.txt b/docs/configure.txt index 9b12481..aff82c1 100644 --- a/docs/configure.txt +++ b/docs/configure.txt @@ -90,9 +90,9 @@ Verbose output can be enabled using: ASCIIDOC_VERBOSE=-v make This feature requires AsciiDoc 8.6.3 (http://www.methods.co.nz/asciidoc). - --with-lib (default: no) + --with-dev (default: no) -Build and install the upsclient library and header files. +Build and install the upsclient and nutclient library and header files. --with-all (no default) @@ -227,7 +227,7 @@ Sets the base directories for the man pages. The default is --includedir=PATH -Sets the path for include files to be installed when --with-lib is +Sets the path for include files to be installed when `--with-dev` is selected. For example, upsclient.h is installed here. The default is /include. @@ -266,7 +266,7 @@ HTML files will be installed to this path. By default, this is --with-pkgconfig-dir=PATH Where to install pkg-config *.pc files. This option only has an -effect if --with-lib is selected, and causes a pkg-config file to +effect if `--with-dev` is selected, and causes a pkg-config file to be installed in the named location. The default is /pkgconfig. diff --git a/docs/documentation.txt b/docs/documentation.txt index 4483117..ab3bd2c 100644 --- a/docs/documentation.txt +++ b/docs/documentation.txt @@ -46,11 +46,13 @@ Offsite Links ------------- [[general_powerdev_info]] -These are general information about UPS and PDU. +These are general information about UPS, PDU, ATS, PSU and SCD: - link:http://tldp.org/HOWTO/UPS-HOWTO/[UPS HOWTO] (The Linux Documentation Project) - link:http://en.wikipedia.org/wiki/Uninterruptible_power_supply[UPS on Wikipedia] - link:http://en.wikipedia.org/wiki/Power_distribution_unit[PDU on Wikipedia] +- link:https://en.wikipedia.org/wiki/Transfer_switch[Automatic Transfer Switch] +- link:https://en.wikipedia.org/wiki/Power_supply_unit_%28computer%29[Power Supply Units] - link:http://en.wikipedia.org/wiki/Solar_controller[Solar controller on Wikipedia] - link:http://www.pcguide.com/ref/power/ext/ups/over.htm[UPS on The PC Guide] diff --git a/docs/download.txt b/docs/download.txt index 3991b1c..e43ce48 100644 --- a/docs/download.txt +++ b/docs/download.txt @@ -103,11 +103,11 @@ NOTE: The only official releases from this project are source code. NUT is already available in the following systems: - Linux: -link:http://aur.archlinux.org/packages.php?ID=5379[Arch Linux], +link:https://aur.archlinux.org/packages/network-ups-tools[Arch Linux], link:http://packages.debian.org/nut[Debian], link:http://packages.gentoo.org/package/sys-power/nut[Gentoo Linux], Mandriva, -link:https://admin.fedoraproject.org/pkgdb/acls/name/nut[Red Hat / Fedora], +link:https://apps.fedoraproject.org/packages/nut[Red Hat / Fedora], link:http://software.opensuse.org/package/nut[Novell Suse / openSUSE], link:https://forum.openwrt.org/viewtopic.php?id=26269[OpenWrt], link:http://packages.ubuntu.com/nut[Ubuntu], @@ -115,16 +115,16 @@ link:https://github.com/voidlinux/xbps-packages/blob/master/srcpkgs/network-ups- - BSD systems: link:http://www.FreeBSD.org/cgi/ports.cgi?query=^nut-&stype=name[FreeBSD], -link:ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/sysutils/ups-nut/README.html[NetBSD], -link:http://www.openbsd.org/cgi-bin/cvsweb/ports/sysutils/nut/[OpenBSD], -link:http://doc.freenas.org/index.php/UPS[FreeNAS]. +link:http://pkgsrc.se/sysutils/ups-nut[NetBSD], +link:http://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/sysutils/nut/[OpenBSD], +link:http://doc.freenas.org/9.3/freenas_services.html#ups[FreeNAS]. - Mac OS X: link:http://pdb.finkproject.org/pdb/package.php/nut[Fink], link:http://trac.macports.org/browser/trunk/dports/sysutils/nut/Portfile[MacPorts] - Windows (complete port, Beta): -link:http://www.networkupstools.org/package/windows/NUT-Installer-2.6.5-3.msi[Windows MSI installer 2.6.5-3] +link:http://www.networkupstools.org/package/windows/NUT-Installer-2.6.5-6.msi[Windows MSI installer 2.6.5-6] Java packages diff --git a/docs/features.txt b/docs/features.txt index 8e25259..eef38b6 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -18,10 +18,12 @@ More and more appliances manufacturers are bundling NUT... Multiple manufacturer and device support ---------------------------------------- -- Monitors many UPS, PDU and SCD models from more than 100 manufacturers with a -unified interface (link:stable-hcl.html[Hardware Compatibility List]). +- Monitors many UPS, PDU, ATS, PSU and SCD models from more than 140 +manufacturers with a unified interface +(link:stable-hcl.html[Hardware Compatibility List]). -- Various communication types are supported with the same common interface: +- Various communication types and many protocols are supported with the same +common interface: * serial, * USB, * network (SNMP, Eaton / MGE XML/HTTP). diff --git a/docs/images/nut_layering.png b/docs/images/nut_layering.png index ff451b4bc4db1e403ab32e20d4f2213fa1655862..41f650c593dc25baaa3d945432a1edaf00725704 100644 GIT binary patch literal 231026 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 PO+v}>q@;jv?~MTX{jOs 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%0DoOwV^;Pl?r25LBQ>1vX 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