commit:     eb72f866280ce72c25d22963f3ec24d72d60dfa1
Author:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Thu Apr  1 23:53:28 2021 +0000
Commit:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Thu Apr  1 23:54:01 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=eb72f866

sys-power/apcupsd: rev bump

- Migrate to EAPI 7

- OpenRC runscript rewritten

- Added some patches from Debian/Fedora

Package-Manager: Portage-3.0.18, Repoman-3.0.3
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>

 sys-power/apcupsd/apcupsd-3.14.14-r3.ebuild        | 149 +++++++++++++++++++++
 .../files/apcupsd-3.14.9-close-on-exec.patch       |  50 +++++++
 .../apcupsd/files/apcupsd-3.14.9-commfailure.patch |  15 +++
 .../apcupsd/files/apcupsd-3.14.9-fix-nologin.patch |  15 +++
 .../apcupsd/files/apcupsd-3.14.9-gapcmon.patch     |  33 +++++
 .../files/apcupsd-3.14.9-wall-on-mounted-usr.patch |  20 +++
 sys-power/apcupsd/files/apcupsd.init               |  28 ++++
 7 files changed, 310 insertions(+)

diff --git a/sys-power/apcupsd/apcupsd-3.14.14-r3.ebuild 
b/sys-power/apcupsd/apcupsd-3.14.14-r3.ebuild
new file mode 100644
index 00000000000..12e0b16bcc7
--- /dev/null
+++ b/sys-power/apcupsd/apcupsd-3.14.14-r3.ebuild
@@ -0,0 +1,149 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+
+inherit linux-info flag-o-matic systemd udev tmpfiles
+
+DESCRIPTION="APC UPS daemon with integrated tcp/ip remote shutdown"
+HOMEPAGE="http://www.apcupsd.org/";
+SRC_URI="mirror://sourceforge/apcupsd/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~ppc ~x86"
+IUSE="snmp +usb +modbus cgi gnome kernel_linux"
+
+DEPEND=">=sys-apps/util-linux-2.23[tty-helpers(-)]
+       cgi? ( >=media-libs/gd-1.8.4 )
+       modbus? ( usb? ( virtual/libusb:0 ) )
+       gnome? (
+               >=x11-libs/gtk+-2.4.0:2
+               dev-libs/glib:2
+               >=gnome-base/gconf-2.0
+       )
+       snmp? ( >=net-analyzer/net-snmp-5.7.2 )"
+
+RDEPEND="${DEPEND}
+       virtual/mailx"
+
+CONFIG_CHECK="~USB_HIDDEV ~HIDRAW"
+ERROR_USB_HIDDEV="CONFIG_USB_HIDDEV:   needed to access USB-attached UPSes"
+ERROR_HIDRAW="CONFIG_HIDRAW:           needed to access USB-attached UPSes"
+
+DOCS=( ChangeLog ReleaseNotes )
+HTML_DOCS=( doc/manual )
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-3.14.9-aliasing.patch
+       "${FILESDIR}"/${PN}-3.14.9-close-on-exec.patch
+       "${FILESDIR}"/${PN}-3.14.9-commfailure.patch
+       "${FILESDIR}"/${PN}-3.14.9-fix-nologin.patch
+       "${FILESDIR}"/${PN}-3.14.9-gapcmon.patch
+       "${FILESDIR}"/${PN}-3.14.9-wall-on-mounted-usr.patch
+)
+
+pkg_setup() {
+       if use kernel_linux && use usb && linux_config_exists ; then
+               check_extra_config
+       fi
+}
+
+src_configure() {
+       local myconf
+
+       use cgi && myconf="${myconf} --enable-cgi 
--with-cgi-bin=/usr/libexec/${PN}/cgi-bin"
+
+       if use usb ; then
+               myconf="${myconf} --with-upstype=usb --with-upscable=usb 
--enable-usb --with-dev="
+               use modbus && myconf="${myconf} --enable-modbus-usb"
+       else
+               myconf="${myconf} --with-upstype=apcsmart --with-upscable=smart 
--disable-usb"
+               use modbus || myconf="${myconf} --disable-modbus"
+       fi
+
+       # We force the DISTNAME to gentoo so it will use gentoo's layout also
+       # when installed on non-linux systems.
+       econf \
+               --sbindir=/sbin \
+               --sysconfdir=/etc/apcupsd \
+               --with-pwrfail-dir=/etc/apcupsd \
+               --with-lock-dir=/run/apcupsd \
+               --with-pid-dir=/run/apcupsd \
+               --with-log-dir=/var/log \
+               --with-nis-port=3551 \
+               --enable-net --enable-pcnet \
+               --with-distname=gentoo \
+               $(use_enable snmp) \
+               $(use_enable gnome gapcmon) \
+               ${myconf} \
+               APCUPSD_MAIL=$(type -p mail)
+}
+
+src_compile() {
+       # Workaround for bug #280674; upstream should really just provide
+       # the text files in the distribution, but I wouldn't count on them
+       # doing that anytime soon.
+       MANPAGER=$(type -p cat) \
+               emake VERBOSE=2
+}
+
+src_install() {
+       emake DESTDIR="${D}" VERBOSE=2 install
+       rm "${ED}"/etc/init.d/halt || die
+
+       insinto /etc/apcupsd
+       newins examples/safe.apccontrol safe.apccontrol
+       doins "${FILESDIR}"/apcupsd.conf
+
+       doman doc/*.8 doc/*.5
+
+       einstalldocs
+
+       rm "${ED}"/etc/init.d/apcupsd || die
+       newinitd "${FILESDIR}/${PN}.init" "${PN}"
+       newinitd "${FILESDIR}/${PN}.powerfail.init" "${PN}".powerfail
+
+       systemd_dounit "${FILESDIR}"/${PN}.service
+       dotmpfiles "${FILESDIR}"/${PN}-tmpfiles.conf
+
+       # remove hal settings, we don't really want to have it still around.
+       rm -r "${D}"/usr/share/hal || die
+
+       # replace it with our udev rules if we're in Linux
+       if use kernel_linux ; then
+               udev_newrules "${FILESDIR}"/apcupsd-udev.rules 60-${PN}.rules
+       fi
+
+}
+
+pkg_postinst() {
+       tmpfiles_process ${PN}-tmpfiles.conf
+
+       if use cgi ; then
+               elog "The cgi-bin directory for ${PN} is 
/usr/libexec/${PN}/cgi-bin."
+               elog "Set up your ScriptAlias or symbolic links accordingly."
+       fi
+
+       elog ""
+       elog "Since version 3.14.0 you can use multiple apcupsd instances to"
+       elog "control more than one UPS in a single box with openRC."
+       elog "To do this, create a link between /etc/init.d/apcupsd to a new"
+       elog "/etc/init.d/apcupsd.something, and it will then load the"
+       elog "configuration file at /etc/apcupsd/something.conf."
+       elog ""
+
+       elog 'If you want apcupsd to power off your UPS when it'
+       elog 'shuts down your system in a power failure, you must'
+       elog 'add apcupsd.powerfail to your shutdown runlevel:'
+       elog ''
+       elog ' \e[01m rc-update add apcupsd.powerfail shutdown \e[0m'
+       elog ''
+
+       if use kernel_linux; then
+               elog "Starting from version 3.14.9-r1, ${PN} installs udev 
rules"
+               elog "for persistent device naming. If you have multiple UPS"
+               elog "connected to the machine, you can point them to the 
devices"
+               elog "in /dev/apcups/by-id directory."
+       fi
+}

diff --git a/sys-power/apcupsd/files/apcupsd-3.14.9-close-on-exec.patch 
b/sys-power/apcupsd/files/apcupsd-3.14.9-close-on-exec.patch
new file mode 100644
index 00000000000..aeaa78b3542
--- /dev/null
+++ b/sys-power/apcupsd/files/apcupsd-3.14.9-close-on-exec.patch
@@ -0,0 +1,50 @@
+Close the socket on exec - avoid leaked file descriptors, patch from Fedora
+
+--- a/src/apcnis.c
++++ b/src/apcnis.c
+@@ -157,6 +157,9 @@ void do_server(UPSINFO *ups)
+       sleep(5 * 60);
+    }
+ 
++   /* Close the socket on exec - avoid leaked file descriptors */
++   fcntl(sockfd, F_SETFD, FD_CLOEXEC);
++
+    /* Reuse old sockets */
+ #ifndef HAVE_MINGW
+    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (void*)&turnon, 
sizeof(turnon)) < 0) {
+--- a/src/apcupsd.c
++++ b/src/apcupsd.c
+@@ -212,6 +212,9 @@ int main(int argc, char *argv[])
+       if (ups->event_fd < 0) {
+          log_event(ups, LOG_WARNING, "Could not open events file %s: %s\n",
+             ups->eventfile, strerror(errno));
++      } else {
++         /* Close the file on exec - avoid leaked file descriptors */
++         fcntl(ups->event_fd, F_SETFD, FD_CLOEXEC);
+       }
+    }
+ 
+--- a/src/drivers/usb/linux/linux-usb.c
++++ b/src/drivers/usb/linux/linux-usb.c
+@@ -246,8 +246,11 @@ bool LinuxUsbUpsDriver::open_usb_device()
+    /* Retry 10 times */
+    for (i = 0; i < 10; i++) {
+       _fd = open_device(_ups->device);
+-      if (_fd != -1)
++      if (_fd != -1) {
++         /* Close the device on exec - avoid leaked file descriptors */
++         fcntl(_fd, F_SETFD, FD_CLOEXEC);
+          return true;
++      }
+       sleep(1);
+    }
+ 
+@@ -270,6 +273,7 @@ auto_detect:
+             asnprintf(devname, sizeof(devname), "%s%d", hiddev[j], k);
+             _fd = open_device(devname);
+             if (_fd != -1) {
++               fcntl(_fd, F_SETFD, FD_CLOEXEC);
+                /* Successful open, save device name and return */
+                strlcpy(_ups->device, devname, sizeof(_ups->device));
+                return true;
+ 

diff --git a/sys-power/apcupsd/files/apcupsd-3.14.9-commfailure.patch 
b/sys-power/apcupsd/files/apcupsd-3.14.9-commfailure.patch
new file mode 100644
index 00000000000..49641c06bef
--- /dev/null
+++ b/sys-power/apcupsd/files/apcupsd-3.14.9-commfailure.patch
@@ -0,0 +1,15 @@
+Author: Tero Janka <tero.ja...@mbnet.fi>
+Description: apcaccess call blocking commfailure mails (Closes: #409734).
+
+Index: apcupsd/platforms/etc/commfailure.in
+===================================================================
+--- apcupsd.orig/platforms/etc/commfailure.in
++++ apcupsd/platforms/etc/commfailure.in
+@@ -13,7 +13,5 @@ MSG="$HOSTNAME Communications with UPS $
+    echo "Subject: $MSG"
+    echo " "
+    echo "$MSG"
+-   echo " "
+-   @sbindir@/apcaccess status
+ ) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN
+ exit 0

diff --git a/sys-power/apcupsd/files/apcupsd-3.14.9-fix-nologin.patch 
b/sys-power/apcupsd/files/apcupsd-3.14.9-fix-nologin.patch
new file mode 100644
index 00000000000..75f9e4449bf
--- /dev/null
+++ b/sys-power/apcupsd/files/apcupsd-3.14.9-fix-nologin.patch
@@ -0,0 +1,15 @@
+Description: only prohibit logins on shutdown if login is allowed at all
+Index: apcupsd-3.14.12/src/action.c
+===================================================================
+--- apcupsd-3.14.12.orig/src/action.c
++++ apcupsd-3.14.12/src/action.c
+@@ -208,7 +208,8 @@ static void do_shutdown(UPSINFO *ups, in
+    delete_lockfile(ups);
+    ups->set_fastpoll();
+    make_file(ups, ups->pwrfailpath);
+-   prohibit_logins(ups);
++   if (ups->nologin.type != NEVER)
++      prohibit_logins(ups);
+ 
+    if (!ups->is_slave()) {
+       /*

diff --git a/sys-power/apcupsd/files/apcupsd-3.14.9-gapcmon.patch 
b/sys-power/apcupsd/files/apcupsd-3.14.9-gapcmon.patch
new file mode 100644
index 00000000000..0dd1cc69aa3
--- /dev/null
+++ b/sys-power/apcupsd/files/apcupsd-3.14.9-gapcmon.patch
@@ -0,0 +1,33 @@
+Description: take care of some deprecated functions and format issue
+Author: Thorsten Alteholz <deb...@alteholz.de>
+Index: apcupsd-3.14.14/src/gapcmon/gapcmon.c
+===================================================================
+--- apcupsd-3.14.14.orig/src/gapcmon/gapcmon.c 2016-07-16 03:04:22.000000000 
+0200
++++ apcupsd-3.14.14/src/gapcmon/gapcmon.c      2017-10-06 09:26:40.412004149 
+0200
+@@ -1580,7 +1580,7 @@
+          scaled = gdk_pixbuf_scale_simple(pixbuf, size, size, 
GDK_INTERP_BILINEAR);
+          gtk_image_set_from_pixbuf(GTK_IMAGE(pm->tray_image), scaled);
+          gtk_widget_show(pm->tray_image);
+-         gdk_pixbuf_unref(scaled);
++         g_object_unref(scaled);
+       }
+ 
+       if (pm->window != NULL)
+@@ -2889,7 +2889,7 @@
+ 
+    pch = g_strdup_printf("%s(%s) emsg=%s", pch_func, pch_topic, pch_emsg);
+ 
+-   g_message(pch);
++   g_message("%s",pch);
+ 
+    g_free(pch);
+ 
+@@ -4474,7 +4474,7 @@
+    gtk_image_set_from_pixbuf(GTK_IMAGE(image), scaled);
+    gtk_box_pack_start(GTK_BOX(hbox), image, TRUE, TRUE, 0);
+    gtk_widget_show(image);
+-   gdk_pixbuf_unref(scaled);
++   g_object_unref(scaled);
+ 
+    label = gtk_label_new(about_text);
+    gtk_label_set_use_markup(GTK_LABEL(label), TRUE);

diff --git a/sys-power/apcupsd/files/apcupsd-3.14.9-wall-on-mounted-usr.patch 
b/sys-power/apcupsd/files/apcupsd-3.14.9-wall-on-mounted-usr.patch
new file mode 100644
index 00000000000..b89a5309e5b
--- /dev/null
+++ b/sys-power/apcupsd/files/apcupsd-3.14.9-wall-on-mounted-usr.patch
@@ -0,0 +1,20 @@
+At halt/killpower time, /usr may already be umounted, and wall
+lives in /usr. Avoid failing by using cat if needed.
+
+Index: apcupsd/platforms/apccontrol.in
+===================================================================
+--- apcupsd.orig/platforms/apccontrol.in
++++ apcupsd/platforms/apccontrol.in
+@@ -62,10 +62,10 @@ fi
+ 
+ case "$1" in
+     killpower)
+-      echo "Apccontrol doing: ${APCUPSD} --killpower on UPS ${2}" | ${WALL}
++      echo "Apccontrol doing: ${APCUPSD} --killpower on UPS ${2}" | (${WALL} 
2>/dev/null || cat)
+       sleep 10
+       ${APCUPSD} --killpower
+-      echo "Apccontrol has done: ${APCUPSD} --killpower on UPS ${2}" | ${WALL}
++      echo "Apccontrol has done: ${APCUPSD} --killpower on UPS ${2}" | 
(${WALL} 2>/dev/null || cat)
+     ;;
+     commfailure)
+       echo "Warning communications lost with UPS ${2}" | ${WALL}

diff --git a/sys-power/apcupsd/files/apcupsd.init 
b/sys-power/apcupsd/files/apcupsd.init
new file mode 100644
index 00000000000..e544fd4f390
--- /dev/null
+++ b/sys-power/apcupsd/files/apcupsd.init
@@ -0,0 +1,28 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+: ${APCUPSD_CONFIGFILE:=/etc/apcupsd/${SVCNAME#*.}.conf}
+: ${APCUPSD_POWERFAILFILE:=/etc/apcupsd/powerfail}
+: ${APCUPSD_PIDFILE:=/run/${SVCNAME}.pid}
+: ${APCUPSD_SSDARGS:=--wait 1000}
+: ${APCUPSD_TERMTIMEOUT:=TERM/60/KILL/5}
+
+command="/sbin/apcupsd"
+command_args="${APCUPSD_OPTS} --config-file \"${APCUPSD_CONFIGFILE}\" 
--pid-file \"${APCUPSD_PIDFILE}\""
+pidfile="${APCUPSD_PIDFILE}"
+retry="${APCUPSD_TERMTIMEOUT}"
+start_stop_daemon_args="${APCUPSD_SSDARGS}"
+required_files="${APCUPSD_CONFIGFILE}"
+
+depend() {
+       use dns
+}
+
+start_pre() {
+       if [ -e "${APCUPSD_POWERFAILFILE}" ] ; then
+               ebegin "Removing stale ${APCUPSD_POWERFAILFILE}"
+               rm "${APCUPSD_POWERFAILFILE}"
+               eend $?
+       fi
+}

Reply via email to