# # spec file for package nut # # Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ # %define apache_serverroot %(%{_sbindir}/apxs2 -q datadir 2>/dev/null || %{_sbindir}/apxs -q PREFIX) %define CGIPATH %{apache_serverroot}/cgi-bin %define HTMLPATH %{apache_serverroot}/htdocs %define MODELPATH %{_libexecdir}/ups/driver %define STATEPATH %{_localstatedir}/lib/ups %define CONFPATH %{_sysconfdir}/ups %define USER upsd %define GROUP daemon %define LBRACE ( %define RBRACE ) %define QUOTE " %define BACKSLASH \\ # Collect all devices listed in ups-nut-device.fdi: %define USBHIDDRIVERS %(zcat %{SOURCE0} | tr a-z A-Z | grep -a -A1 USBHID-UPS | sed -n 's/.*ATTR{IDVENDOR}==%{QUOTE}%{BACKSLASH}%{LBRACE}[^%{QUOTE}]*%{BACKSLASH}%{RBRACE}%{QUOTE}, ATTR{IDPRODUCT}==%{QUOTE}%{BACKSLASH}%{LBRACE}[^%{QUOTE}]*%{BACKSLASH}%{RBRACE}%{QUOTE}, MODE=.*/modalias%{LBRACE}usb:v%{BACKSLASH}1p%{BACKSLASH}2d*dc*dsc*dp*ic*isc*ip*%{RBRACE}/p' | tr '%{BACKSLASH}n' ' ') %define USBNONHIDDRIVERS %(zcat %{SOURCE0} | tr a-z A-Z | grep -a -A1 _USB | sed -n 's/.*ATTR{IDVENDOR}==%{QUOTE}%{BACKSLASH}%{LBRACE}[^%{QUOTE}]*%{BACKSLASH}%{RBRACE}%{QUOTE}, ATTR{IDPRODUCT}==%{QUOTE}%{BACKSLASH}%{LBRACE}[^%{QUOTE}]*%{BACKSLASH}%{RBRACE}%{QUOTE}, MODE=.*/modalias%{LBRACE}usb:v%{BACKSLASH}1p%{BACKSLASH}2d*dc*dsc*dp*ic*isc*ip*%{RBRACE}/p' | tr '%{BACKSLASH}n' ' ') %if 0%{?suse_version} > 1210 %define systemdsystemdutildir %(pkg-config --variable=systemdutildir systemd) %define with_systemd 1 %systemd_requires %else %define _libexecdir %{_prefix}/lib %define _udevrulesdir %{_sysconfdir}/udev/rules.d/ %define with_systemd 0 %endif # SLE <= 12 lacks needed packages %if 0%{?sle_version} == 0 %if 0%{?suse_version} < 1200 %define with_doc 0 %else %define with_doc 1 %endif %else %if 0%{?sle_version} < 130000 %define with_doc 0 %else %define with_doc 1 %endif %endif Name: nut Version: 2.7.4 Release: 0 Summary: Network UPS Tools Core (Uninterruptible Power Supply Monitoring) License: GPL-2.0+ Group: Hardware/UPS Url: http://www.networkupstools.org/ Source: http://www.networkupstools.org/source/2.7/%{name}-%{version}.tar.gz Source1: upsd.init Source2: README.SUSE Source3: upsd-early-powerdown.init Source5: nut.firewall.in Source6: nut.system-sleep Source7: nut.sleep Source8: http://www.networkupstools.org/source/2.7/%{name}-%{version}.tar.gz.sig Source9: %{name}.keyring Patch0: nut-preconfig.patch Patch3: nut-notifyflag.patch # PATCH-FIX-UPSTREAM nut-systemd-dirs.patch sbrabec@suse.cz -- Fix systemd targets. Patch7: nut-systemd-dirs.patch # PATCH-FEATURE-OPENSUSE nut-doc-fixed-date.patch sbrabec@suse.cz -- Make doc builds reproducible. Patch8: nut-doc-fixed-date.patch # PATCH-FIX-UPSTREAM nut-doc-cables.patch sbrabec@suse.cz -- Build HTML documentation of cables. Patch9: nut-doc-cables.patch BuildRequires: apache2-devel BuildRequires: avahi-devel BuildRequires: dbus-1-glib-devel BuildRequires: gcc-c++ BuildRequires: gd-devel BuildRequires: libcppunit-devel BuildRequires: libneon-devel BuildRequires: libopenssl-devel BuildRequires: libtool BuildRequires: libusb-devel BuildRequires: net-snmp-devel BuildRequires: pkg-config BuildRequires: tcpd-devel %if 0%{?suse_version} >= 1200 %if 0%{?suse_version} >= 1330 BuildRequires: bash-completion-devel %else BuildRequires: bash-completion %endif %endif Requires: logrotate Requires: usbutils Requires(post): udev # Package provides driver for USB HID UPSes, but people can live with hal addon: Enhances: %{USBHIDDRIVERS} # Package provides the only avalailable driver for other USB UPSes: Supplements: %{USBNONHIDDRIVERS} Conflicts: apcupsd Provides: smartups = %{version} Obsoletes: smartups < %{version} # for update from openSUSE <= 11.3, SLE <= 11 Provides: nut-classic = %{version} Obsoletes: nut-classic < %{version} Obsoletes: nut-hal < %{version} BuildRoot: %{_tmppath}/%{name}-%{version}-build %if 0%{?suse_version} > 1230 BuildRequires: powerman-devel BuildRequires: systemd-devel BuildRequires: udev %ifarch %ix86 x86_64 ia64 BuildRequires: freeipmi-devel %endif %else Requires(pre): %insserv_prereq BuildRequires: pm-utils Requires: powersave %endif %if %suse_version >= 1330 Requires(pre): user(upsd) %endif %if %with_doc BuildRequires: asciidoc BuildRequires: aspell BuildRequires: dblatex BuildRequires: libxml2-tools BuildRequires: libxslt-tools BuildRequires: source-highlight %endif %if 0%{?suse_version} >= 1200 %define bashcompletionsdir %(pkg-config bash-completion --variable=completionsdir) %else %define bashcompletionsdir %{_sysconfdir}/bash_completion.d %endif %description Core package of Network UPS Tools. Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %package drivers-net Summary: Network UPS Tools - Extra Networking Drivers (for Network Monitoring) Group: Hardware/UPS Requires: %{name} = %{version} Enhances: %{name} %description drivers-net Networking drivers for the Network UPS Tools. You will need them together with nut to provide UPS networking support. Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %package -n libupsclient1 Summary: Network UPS Tools Library (Uninterruptible Power Supply Monitoring) Group: System/Libraries %description -n libupsclient1 Shared library for the Network UPS Tools. Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %package cgi Summary: Network UPS Tools Web Server Support (UPS Status Pages) Group: Hardware/UPS Requires: %{name} = %{version} Enhances: %{name} Supplements: packageand(%{name}:apache2) %description cgi Web server support package for the Network UPS Tools. Predefined URL is http://localhost/nut/index.html Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %package devel Summary: Network UPS Tools (Uninterruptible Power Supply Monitoring) Group: Development/Libraries/C and C++ Requires: %{name} = %{version} Requires: openssl-devel %description devel Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %package doc-images Summary: Network UPS Tools - Images for Documentation Group: Documentation/Other Recommends: %{name} = %{version} Enhances: %{name} Requires: %{name}-doc-images = %{version} %if 0%{?suse_version} > 1200 BuildArch: noarch %endif %description doc-images Images for the documentation. It is a supplementary package for some NUT documentation packages. Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %package doc-asciidoc Summary: Network UPS Tools - Documentation in AsciiDoc Format Group: Documentation/Other Recommends: %{name} = %{version} Enhances: %{name} Requires: %{name}-doc-images = %{version} %if 0%{?suse_version} > 1200 BuildArch: noarch %endif %description doc-asciidoc NUT manuals in AsciiDoc format (human readable source). Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %if %with_doc %package doc-pdf Summary: Network UPS Tools - Documentation in PDF Group: Documentation/PDF Recommends: %{name} = %{version} Enhances: %{name} %if 0%{?suse_version} > 1200 BuildArch: noarch %endif %description doc-pdf User manual in PDF format. Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %package doc-html Summary: Network UPS Tools - Documentation in HTML Group: Documentation/HTML Recommends: %{name} = %{version} Enhances: %{name} Requires: %{name}-doc-images = %{version} %if 0%{?suse_version} > 1200 BuildArch: noarch %endif %description doc-html User manual in HTML format. Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %package devel-doc-pdf Summary: Network UPS Tools - Documentation in PDF Group: Documentation/PDF Recommends: %{name} = %{version} Enhances: %{name} %if 0%{?suse_version} > 1200 BuildArch: noarch %endif %description devel-doc-pdf Developer manual in PDF format. Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %package devel-doc-html Summary: Network UPS Tools - Documentation in HTML Group: Documentation/HTML Recommends: %{name} = %{version} Enhances: %{name} Requires: %{name}-doc-images = %{version} # For CSS files: Requires: %{name}-doc-html = %{version} %if 0%{?suse_version} > 1200 BuildArch: noarch %endif %description devel-doc-html Developer manual in HTML format. Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware. %endif %prep %setup -q cp -a %{SOURCE1} %{SOURCE2} %{SOURCE3} %{SOURCE5} %{SOURCE6} %{SOURCE7} . mv upsd-early-powerdown.init upsd-early-powerdown %patch0 %patch3 %patch7 -p1 %patch8 -p1 %patch9 -p1 sed -i s/@now@/`date -r ChangeLog +%%Y-%%m-%%d`/g docs/docinfo.xml.in sed -i "s/@UPSD_USER@/%{USER}/g" upsd.init sed -i s:%{_prefix}/local/ups/bin:/bin: conf/upssched.conf.sample.in %build autoreconf -fvi # documentation fails to build -> disable %configure \ --disable-static \ --sysconfdir=%{CONFPATH} \ --datadir=%{_datadir}/nut \ --with-all \ %if %with_doc --with-doc \ %else --without-doc \ %endif --with-ssl \ --with-openssl \ --without-nss \ --with-wrap \ %if 0%{?suse_version} <= 1230 --without-ipmi \ %endif %ifnarch %ix86 x86_64 ia64 --without-ipmi \ %endif %if 0%{?suse_version} <= 1110 --without-powerman \ %endif --with-htmlpath=%{HTMLPATH} \ --with-cgipath=%{CGIPATH} \ --with-statepath=%{STATEPATH} \ --with-drvpath=%{MODELPATH} \ --with-user=%{USER} \ --with-group=%{GROUP} \ %if 0%{with_systemd} --with-udev-dir=%{_libexecdir}/udev \ %else --with-udev-dir=%{_sysconfdir}/udev \ %endif --enable-option-checking=fatal # There is a bug in doc build that makes impossible to build in parallel cd docs make cd .. make %{?_smp_mflags} PORT=$(sed -n 's/#define PORT //p' config.log) if test "$PORT" = 3493 ; then PORT=nut fi sed s/@PORT@/$PORT/ nut.firewall %install make DESTDIR=%{buildroot} install %{?_smp_mflags} find %{buildroot} -type f -name "*.la" -delete -print mkdir -p %{buildroot}%{STATEPATH} # initscript mkdir -p %{buildroot}%{_sbindir} %if 0%{with_systemd} ln -s service %{buildroot}%{_sbindir}/rcnut-driver ln -s service %{buildroot}%{_sbindir}/rcnut-server ln -s service %{buildroot}%{_sbindir}/rcnut-monitor %else mkdir -p %{buildroot}%{_sysconfdir}/init.d install -m 755 upsd.init %{buildroot}%{_sysconfdir}/init.d/upsd ln -sf ../..%{_sysconfdir}/init.d/upsd %{buildroot}%{_sbindir}/rcupsd %endif mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d install -m 644 scripts/logrotate/nutlogd %{buildroot}%{_sysconfdir}/logrotate.d/nut mkdir -p %{buildroot}%{STATEPATH} rename .sample "" %{buildroot}%{_sysconfdir}/ups/*.sample mkdir -p %{buildroot}%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services cp nut.firewall %{buildroot}%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/nut %if 0%{with_systemd} install -d %{buildroot}%{_libexecdir}/systemd/system-sleep install nut.system-sleep %{buildroot}%{_libexecdir}/systemd/system-sleep/%{name}.sh %else mkdir -p %{buildroot}%{_libexecdir}/pm-utils/sleep.d install nut.sleep %{buildroot}%{_libexecdir}/pm-utils/sleep.d/99nut %endif # Rename web pages to not conflict with apache2-example-pages or user home page: mkdir %{buildroot}%{HTMLPATH}/nut %{buildroot}%{CGIPATH}/nut mv %{buildroot}%{HTMLPATH}/*.{html,png} %{buildroot}%{HTMLPATH}/nut/ mv %{buildroot}%{CGIPATH}/*.cgi %{buildroot}%{CGIPATH}/nut mkdir -p %{buildroot}%{bashcompletionsdir} install -m0644 scripts/misc/nut.bash_completion %{buildroot}%{bashcompletionsdir}/nut # Documentation mkdir -p %{buildroot}%{_docdir}/%{name} cp -a AUTHORS COPYING ChangeLog MAINTAINERS NEWS README README.SUSE UPGRADING upsd-early-powerdown %{buildroot}%{_docdir}/%{name}/ cp -a docs/*.txt docs/cables docs/images %{buildroot}%{_docdir}/%{name}/ %if %with_doc cp -a docs/*.css docs/*.html docs/*.pdf %{buildroot}%{_docdir}/%{name}/ %endif # Not needed for packaged contents: rm %{buildroot}%{_docdir}/%{name}/packager-guide.* %pre %if %suse_version < 1330 getent passwd %{USER} >/dev/null || useradd -r -g %{GROUP} -s /bin/false -c "UPS daemon" -d /sbin %{USER} 2>/dev/null %endif %if 0%{with_systemd} %service_add_pre nut-driver.service nut-server.service nut-monitor.service %endif %post # Be sure that all files are owned by a dedicated user. chown -R %{USER}:%{GROUP} %{STATEPATH} # Generate initial passwords. if grep -q "password = @UPSD_INITIAL_MASTER_PASSWORD@" %{CONFPATH}/upsmon.conf %{CONFPATH}/upsd.users; then UPSD_INITIAL_MASTER_PASSWORD=$(head -c 20 /dev/urandom | md5sum | head -c 10) sed -i s/@UPSD_INITIAL_MASTER_PASSWORD@/$UPSD_INITIAL_MASTER_PASSWORD/ %{CONFPATH}/upsmon.conf %{CONFPATH}/upsd.users fi if grep -q "password = @UPSD_INITIAL_SLAVE_PASSWORD@" %{CONFPATH}/upsd.users ; then UPSD_INITIAL_SLAVE_PASSWORD=$(head -c 20 /dev/urandom | md5sum | head -c 10) sed -i s/@UPSD_INITIAL_SLAVE_PASSWORD@/$UPSD_INITIAL_SLAVE_PASSWORD/ %{CONFPATH}/upsd.users fi # Be sure that all files are owned by a dedicated user. /bin/chown %{USER}:root %{CONFPATH}/upsd.conf %{CONFPATH}/upsmon.conf %{CONFPATH}/upsd.users /bin/chmod 600 %{CONFPATH}/upsd.conf %{CONFPATH}/upsmon.conf %{CONFPATH}/upsd.users # Install or remove HALT_POWERDOWN_INSERT # It was last installed in 1310, but it is obsolete since dropping sysvinit support. %if 0%{?suse_version} < 1310 if grep -q '^HALT_POWERDOWN_INSERT="\(%{_sysconfdir}/init\.d/upsd try-powerdown\|\)"' etc/sysconfig/shutdown ; then sed -i 's:^\(HALT_POWERDOWN_INSERT="\).*"[[:space:]]*:\1%{_sysconfdir}/init.d/upsd try-powerdown":' etc/sysconfig/shutdown else # User configured Suspend-to-disc. Keep it unchanged and be silent. if ! grep -q '^HALT_POWERDOWN_INSERT="%{_bindir}/powersave -U' etc/sysconfig/shutdown ; then echo >&2 "nut: WARNING: Unknown value of HALT_POWERDOWN_INSERT in %{_sysconfdir}/sysconfig/shutdown." echo >&2 " Keeping unchanged. Should be:" echo >&2 "HALT_POWERDOWN_INSERT=\"%{_sysconfdir}/init.d/upsd try-powerdown\"" echo >&2 "or" echo >&2 "HALT_POWERDOWN_INSERT=\"%{_bindir}/powersave -U\"" fi fi %endif # Migrate Suspend to Disc to the new convention (bnc#449861 and later bnc#871406): # It was never on by default, but documentation up to 11.0 recommends # "shutdown -z +0" for suspend to disc. It was discontinued before 11.0. # Documentation since 11.0 up to 13.1 recommends /powersave -U. # pm-utils (and powersave) were obsoleted after 13.1 in favor of systemd. %if 0%{with_systemd} if grep "shutdown -z +0" %{_sysconfdir}/ups/upsmon.conf ; then sed -i 's:/sbin/shutdown -z +0:%{_bindir}/systemctl hibernate:;s:shutdown -z +0:%{_bindir}/systemctl hibernate:' %{_sysconfdir}/ups/upsmon.conf fi if grep "powersave -U" %{_sysconfdir}/ups/upsmon.conf ; then sed -i 's:%{_bindir}/powersave -U:%{_bindir}/systemctl hibernate:;s:powersave -U:%{_bindir}/systemctl hibernate:' %{_sysconfdir}/ups/upsmon.conf fi %else if grep "shutdown -z +0" %{_sysconfdir}/ups/upsmon.conf ; then sed -i 's:/sbin/shutdown -z +0:%{_bindir}/powersave -U:;s:shutdown -z +0:%{_bindir}/powersave -U:' %{_sysconfdir}/ups/upsmon.conf fi %endif # And finally trigger udev to set permissions according to newly installed rules files. /sbin/udevadm trigger --subsystem-match=usb --property-match=DEVTYPE=usb_device %if 0%{with_systemd} %service_add_post nut-driver.service nut-server.service nut-monitor.service %else %{fillup_and_insserv -f -n upsd} %endif %preun %if 0%{with_systemd} %service_del_preun nut-driver.service nut-server.service nut-monitor.service %else %{stop_on_removal upsd} %endif %postun # Remove HALT_POWERDOWN_INSERT # It was last installed in 1310, but it is obsolete since dropping sysvinit support. %if 0%{?suse_version} < 1310 if test $1 -eq 0 -a ! -f %{_sysconfdir}/init.d/upsd ; then if grep -q '^HALT_POWERDOWN_INSERT="\(%{_sysconfdir}/init\.d/upsd try-powerdown\|%{_bindir}/powersave -U\)"' etc/sysconfig/shutdown ; then sed -i 's:^\(HALT_POWERDOWN_INSERT="\)\(%{_sysconfdir}/init\.d/upsd try-powerdown\|%{_bindir}/powersave -U\)":\1":' etc/sysconfig/shutdown else echo >&2 "nut: WARNING: Unknown value of HALT_POWERDOWN_INSERT in %{_sysconfdir}/sysconfig/shutdown." echo >&2 " Keeping unchanged. Should be:" echo >&2 "HALT_POWERDOWN_INSERT=\"\"" fi if test -f %{_sysconfdir}/init.d/upsd-early-powerdown ; then echo >&2 "nut: WARNING: You may want to remove your %{_sysconfdir}/init.d/upsd-early-powerdown." fi fi %endif %if 0%{with_systemd} %service_del_postun nut-driver.service nut-server.service nut-monitor.service %else %{restart_on_update upsd} %insserv_cleanup %endif %post -n libupsclient1 -p /sbin/ldconfig %postun -n libupsclient1 -p /sbin/ldconfig %files %defattr(-,root,root) %doc %dir %{_docdir}/%{name} %doc %{_docdir}/%{name}/[A-EG-Z]* %doc %{_docdir}/%{name}/upsd-early-powerdown %config %{_sysconfdir}/logrotate.d/* %{_bindir}/* %{_datadir}/nut %{_mandir}/man5/*.* %{_mandir}/man8/*.* %exclude %{_mandir}/man8/netxml-ups*.* %exclude %{_mandir}/man8/snmp-ups*.* %dir %{_libexecdir}/ups %{_sbindir}/* %config(noreplace) %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/nut %{_udevrulesdir}/*.rules %config(noreplace) %{CONFPATH}/hosts.conf %config(noreplace) %attr(600,%{USER},root) %{CONFPATH}/upsd.conf %config(noreplace) %attr(600,%{USER},root) %{CONFPATH}/upsd.users %config(noreplace) %attr(600,%{USER},root) %{CONFPATH}/upsmon.conf %dir %{CONFPATH} %config(noreplace) %{CONFPATH}/nut.conf %config(noreplace) %{CONFPATH}/ups.conf %config(noreplace) %{CONFPATH}/upsset.conf %config(noreplace) %{CONFPATH}/upssched.conf %dir %{MODELPATH} %{MODELPATH}/* %exclude %{MODELPATH}/snmp-ups %exclude %{MODELPATH}/netxml-ups %attr(700,%{USER},%{GROUP}) %{STATEPATH} %if 0%{with_systemd} %{_unitdir}/*.service %{systemdsystemdutildir}/system-shutdown/* %{_libexecdir}/systemd/system-sleep/%{name}.sh %else %{_libexecdir}/pm-utils/sleep.d/99nut %{_sysconfdir}/init.d/* %endif %{bashcompletionsdir}/* %files drivers-net %defattr(-,root,root) %{MODELPATH}/snmp-ups %{MODELPATH}/netxml-ups %{_mandir}/man8/netxml-ups*.* %{_mandir}/man8/snmp-ups*.* %files -n libupsclient1 %defattr(-,root,root) %{_libdir}/*.so.* %files cgi %defattr(-,root,root) %{CGIPATH}/nut %{HTMLPATH}/nut %config(noreplace) %{CONFPATH}/upsstats-single.html %config(noreplace) %{CONFPATH}/upsstats.html %files devel %defattr(-,root,root) %{_includedir}/*.h %{_libdir}/*.so %{_libdir}/pkgconfig/*.pc %{_mandir}/man3/*.* %files doc-images %defattr(-,root,root) %doc %dir %{_docdir}/%{name} %{_docdir}/%{name}/images %files doc-asciidoc %defattr(-,root,root) %doc %dir %{_docdir}/%{name} %{_docdir}/%{name}/*.txt %{_docdir}/%{name}/cables %if %with_doc %files doc-pdf %defattr(-,root,root) %doc %dir %{_docdir}/%{name} %{_docdir}/%{name}/FAQ.pdf %{_docdir}/%{name}/cables.pdf %{_docdir}/%{name}/user-manual.pdf %files doc-html %defattr(-,root,root) %{_docdir}/%{name}/FAQ.html %{_docdir}/%{name}/cables.html %{_docdir}/%{name}/user-manual.html %{_docdir}/%{name}/*.css %files devel-doc-pdf %defattr(-,root,root) %doc %dir %{_docdir}/%{name} %{_docdir}/%{name}/developer-guide.pdf %files devel-doc-html %defattr(-,root,root) %{_docdir}/%{name}/developer-guide.html %endif %changelog