mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
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@gentoo.org>
This commit is contained in:
149
sys-power/apcupsd/apcupsd-3.14.14-r3.ebuild
Normal file
149
sys-power/apcupsd/apcupsd-3.14.14-r3.ebuild
Normal file
@@ -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
|
||||
}
|
||||
50
sys-power/apcupsd/files/apcupsd-3.14.9-close-on-exec.patch
Normal file
50
sys-power/apcupsd/files/apcupsd-3.14.9-close-on-exec.patch
Normal file
@@ -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;
|
||||
|
||||
15
sys-power/apcupsd/files/apcupsd-3.14.9-commfailure.patch
Normal file
15
sys-power/apcupsd/files/apcupsd-3.14.9-commfailure.patch
Normal file
@@ -0,0 +1,15 @@
|
||||
Author: Tero Janka <tero.janka@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
|
||||
15
sys-power/apcupsd/files/apcupsd-3.14.9-fix-nologin.patch
Normal file
15
sys-power/apcupsd/files/apcupsd-3.14.9-fix-nologin.patch
Normal file
@@ -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()) {
|
||||
/*
|
||||
33
sys-power/apcupsd/files/apcupsd-3.14.9-gapcmon.patch
Normal file
33
sys-power/apcupsd/files/apcupsd-3.14.9-gapcmon.patch
Normal file
@@ -0,0 +1,33 @@
|
||||
Description: take care of some deprecated functions and format issue
|
||||
Author: Thorsten Alteholz <debian@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);
|
||||
@@ -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}
|
||||
28
sys-power/apcupsd/files/apcupsd.init
Normal file
28
sys-power/apcupsd/files/apcupsd.init
Normal file
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user