sysutils/nut: Update to 2.8.1

This commit is contained in:
Cy Schubert 2023-11-14 12:05:57 -08:00
parent a8c2e945f8
commit f702184e22
8 changed files with 47 additions and 340 deletions

View file

@ -1,6 +1,5 @@
PORTNAME= nut
PORTVERSION= 2.8.0
PORTREVISION= 24
PORTVERSION= 2.8.1
CATEGORIES= sysutils
MASTER_SITES= http://www.networkupstools.org/source/${PORTVERSION:R}/
@ -69,9 +68,15 @@ CONFIGURE_ARGS= --sysconfdir=${PREFIX}/etc/nut \
--with-pidpath=${STATEDIR} \
--with-pkgconfig-dir=${PREFIX}/libdata/pkgconfig \
--with-user=${NUT_USER} \
--with-group=${NUT_GROUP}
--with-group=${NUT_GROUP} \
--with-python=${PYTHON_CMD} \
--without-python2 \
--with-python3=${PYTHON_CMD} \
--without-nut_monitor \
--with-ltdl --with-nut-scanner
CFLAGS+= -I${LOCALBASE}/include -L${LOCALBASE}/lib
CFLAGS+= -I${LOCALBASE}/include -L${LOCALBASE}/lib -pthread
CPPFLAGS+= -I${LOCALBASE}/include -L${LOCALBASE}/lib
LIB_DEPENDS+= libltdl.so:devel/libltdl
MANPAGES_CONFIGURE_ON= --with-doc=man=auto
@ -143,7 +148,7 @@ post-install:
${INSTALL_DATA} ${WRKSRC}/docs/cables/*.txt ${STAGEDIR}${DOCSDIR}/cables
${INSTALL_DATA} ${WRKSRC}/docs/*.txt ${STAGEDIR}${DOCSDIR}
${INSTALL_DATA} ${WRKSRC}/docs/FAQ.txt ${STAGEDIR}${DOCSDIR}
.for file in AUTHORS COPYING ChangeLog INSTALL MAINTAINERS NEWS README UPGRADING
.for file in AUTHORS COPYING ChangeLog INSTALL MAINTAINERS NEWS README
${INSTALL_DATA} ${WRKSRC}/${file} ${STAGEDIR}${DOCSDIR}
.endfor
.endif
@ -152,7 +157,5 @@ post-install:
${INSTALL_DATA} ${PATCHDIR}/nut.newsyslog ${STAGEDIR}${EXAMPLESDIR}/newsyslog.sample
${INSTALL_DATA} ${PATCHDIR}/nut_upslog.sample ${STAGEDIR}${EXAMPLESDIR}/nut_upslog.sample
${MKDIR} ${STAGEDIR}/var/log/nut
@${RM} ${STAGEDIR}${PREFIX}/etc/nut/solaris-init/nut
@${RMDIR} ${STAGEDIR}${PREFIX}/etc/nut/solaris-init
.include <bsd.port.post.mk>

View file

@ -1,3 +1,3 @@
TIMESTAMP = 1651085820
SHA256 (nut-2.8.0.tar.gz) = c3e5a708da797b7c70b653d37b1206a000fcb503b85519fe4cdf6353f792bfe5
SIZE (nut-2.8.0.tar.gz) = 3287640
TIMESTAMP = 1699981499
SHA256 (nut-2.8.1.tar.gz) = 7da48ee23b1f0d8d72560bb0af84f5c5ae4dbe35452b84cb49840132e47f099c
SIZE (nut-2.8.1.tar.gz) = 4125263

View file

@ -1,280 +0,0 @@
--- clients/upslog.c.orig 2022-08-29 22:20:14.342137000 -0700
+++ clients/upslog.c 2022-08-29 22:21:10.934419000 -0700
@@ -41,32 +45,49 @@
#include "upslog.h"
static int reopen_flag = 0, exit_flag = 0;
- static uint16_t port;
- static char *upsname, *hostname;
- static UPSCONN_t ups;
+ static char *upsname;
+ static UPSCONN_t *ups;
- static FILE *logfile;
- static const char *logfn, *monhost;
+ static char *logfn, *monhost;
static sigset_t nut_upslog_sigmask;
static char logbuffer[LARGEBUF], *logformat;
static flist_t *fhead = NULL;
+ struct monhost_ups {
+ char *monhost;
+ char *logfn;
+ char *upsname;
+ char *hostname;
+ uint16_t port;
+ UPSCONN_t *ups;
+ FILE *logfile;
+ struct monhost_ups *next;
+ };
+ static struct monhost_ups *monhost_ups_anchor = NULL;
+ static struct monhost_ups *monhost_ups_current = NULL;
+ static struct monhost_ups *monhost_ups_prev = NULL;
+
#define DEFAULT_LOGFORMAT "%TIME @Y@m@d @H@M@S% %VAR battery.charge% " \
"%VAR input.voltage% %VAR ups.load% [%VAR ups.status%] " \
"%VAR ups.temperature% %VAR input.frequency%"
static void reopen_log(void)
{
- if (logfile == stdout) {
- upslogx(LOG_INFO, "logging to stdout");
- return;
- }
+ for (monhost_ups_current = monhost_ups_anchor;
+ monhost_ups_current != NULL;
+ monhost_ups_current = monhost_ups_current->next) {
+ if (monhost_ups_current->logfile == stdout) {
+ upslogx(LOG_INFO, "logging to stdout");
+ return;
+ }
- fclose(logfile);
- logfile = fopen(logfn, "a");
- if (logfile == NULL)
- fatal_with_errno(EXIT_FAILURE, "could not reopen logfile %s", logfn);
+ if ((monhost_ups_current->logfile = freopen(
+ monhost_ups_current->logfn, "a",
+ monhost_ups_current->logfile)) == NULL)
+ fatal_with_errno(EXIT_FAILURE,
+ "could not reopen logfile %s", logfn);
+ }
}
static void set_reopen_flag(int sig)
@@ -131,6 +152,8 @@
printf(" -p <pidbase> - Base name for PID file (defaults to \"%s\")\n", prog);
printf(" -s <ups> - Monitor UPS <ups> - <upsname>@<host>[:<port>]\n");
printf(" - Example: -s myups@server\n");
+ printf(" -m <tuple> - Monitor UPS <ups,logfile>\n");
+ printf(" - Example: -m myups@server,/var/log/myups.log\n");
printf(" -u <user> - Switch to <user> if started as root\n");
printf("\n");
@@ -215,7 +238,7 @@
query[2] = var;
numq = 3;
- ret = upscli_get(&ups, numq, query, &numa, &answer);
+ ret = upscli_get(ups, numq, query, &numa, &answer);
if ((ret < 0) || (numa < numq)) {
snprintfcat(logbuffer, sizeof(logbuffer), "NA");
@@ -368,7 +391,7 @@
}
/* go through the list of functions and call them in order */
-static void run_flist(void)
+static void run_flist(struct monhost_ups *monhost_ups_print)
{
flist_t *tmp;
@@ -382,8 +405,8 @@
tmp = tmp->next;
}
- fprintf(logfile, "%s\n", logbuffer);
- fflush(logfile);
+ fprintf(monhost_ups_print->logfile, "%s\n", logbuffer);
+ fflush(monhost_ups_print->logfile);
}
/* -s <monhost>
@@ -396,6 +419,7 @@
int main(int argc, char **argv)
{
int interval = 30, i, foreground = -1;
+ size_t monhost_len = 0;
const char *prog = xbasename(argv[0]);
time_t now, nextpoll = 0;
const char *user = NULL;
@@ -407,7 +431,7 @@
printf("Network UPS Tools %s %s\n", prog, UPS_VERSION);
- while ((i = getopt(argc, argv, "+hs:l:i:f:u:Vp:FB")) != -1) {
+ while ((i = getopt(argc, argv, "+hs:l:i:f:u:Vp:FBm:")) != -1) {
switch(i) {
case 'h':
help(prog);
@@ -415,6 +439,33 @@
break;
#endif
+ case 'm': { /* var scope */
+ char *m_arg, *s;
+
+ monhost_ups_prev = monhost_ups_current;
+ monhost_ups_current = xmalloc(sizeof(struct monhost_ups));
+ if (monhost_ups_anchor == NULL)
+ monhost_ups_anchor = monhost_ups_current;
+ else
+ monhost_ups_prev->next = monhost_ups_current;
+ monhost_ups_current->next = NULL;
+ monhost_len++;
+
+ /* Be sure to not mangle original optarg, nor rely on its longevity */
+ s = xstrdup(optarg);
+ m_arg = s;
+ monhost_ups_current->monhost = xstrdup(strsep(&m_arg, ","));
+ if (!m_arg)
+ fatalx(EXIT_FAILURE, "Argument '-m upsspec,logfile' requires exactly 2 components in the tuple");
+ monhost_ups_current->logfn = xstrdup(strsep(&m_arg, ","));
+ if (m_arg) /* Had a third comma - also unexpected! */
+ fatalx(EXIT_FAILURE, "Argument '-m upsspec,logfile' requires exactly 2 components in the tuple");
+ if (upscli_splitname(monhost_ups_current->monhost, &(monhost_ups_current->upsname), &(monhost_ups_current->hostname), &(monhost_ups_current->port)) != 0) {
+ fatalx(EXIT_FAILURE, "Error: invalid UPS definition. Required format: upsname[@hostname[:port]]\n");
+ }
+ free(s);
+ } /* var scope */
+ break;
case 's':
monhost = optarg;
break;
@@ -479,42 +530,59 @@
snprintfcat(logformat, LARGEBUF, "%s ", argv[i]);
}
- if (!monhost)
- fatalx(EXIT_FAILURE, "No UPS defined for monitoring - use -s <system>");
+ if (monhost_ups_anchor == NULL) {
+ if (monhost) {
+ monhost_ups_current = xmalloc(sizeof(struct monhost_ups));
+ monhost_ups_anchor = monhost_ups_current;
+ monhost_ups_current->next = NULL;
+ monhost_ups_current->monhost = monhost;
+ monhost_len=1;
+ } else {
+ fatalx(EXIT_FAILURE, "No UPS defined for monitoring - use -s <system>");
+ }
- if (!logfn)
- fatalx(EXIT_FAILURE, "No filename defined for logging - use -l <file>");
+ if (logfn)
+ monhost_ups_current->logfn = logfn;
+ else
+ fatalx(EXIT_FAILURE, "No filename defined for logging - use -l <file>");
+ }
/* shouldn't happen */
if (!logformat)
fatalx(EXIT_FAILURE, "No format defined - but this should be impossible");
- printf("logging status of %s to %s (%is intervals)\n",
- monhost, logfn, interval);
+ for (monhost_ups_current = monhost_ups_anchor;
+ monhost_ups_current != NULL;
+ monhost_ups_current = monhost_ups_current->next) {
+ printf("logging status of %s to %s (%is intervals)\n",
+ monhost_ups_current->monhost, monhost_ups_current->logfn, interval);
+ if (upscli_splitname(monhost_ups_current->monhost, &(monhost_ups_current->upsname), &(monhost_ups_current->hostname), &(monhost_ups_current->port)) != 0) {
+ fatalx(EXIT_FAILURE, "Error: invalid UPS definition. Required format: upsname[@hostname[:port]]\n");
+ }
- if (upscli_splitname(monhost, &upsname, &hostname, &port) != 0) {
- fatalx(EXIT_FAILURE, "Error: invalid UPS definition. Required format: upsname[@hostname[:port]]\n");
- }
+ monhost_ups_current->ups = xmalloc(sizeof(UPSCONN_t));
+ if (upscli_connect(monhost_ups_current->ups, monhost_ups_current->hostname, monhost_ups_current->port, UPSCLI_CONN_TRYSSL) < 0)
+ fprintf(stderr, "Warning: initial connect failed: %s\n",
+ upscli_strerror(monhost_ups_current->ups));
- if (upscli_connect(&ups, hostname, port, UPSCLI_CONN_TRYSSL) < 0)
- fprintf(stderr, "Warning: initial connect failed: %s\n",
- upscli_strerror(&ups));
+ if (strcmp(monhost_ups_current->logfn, "-") == 0)
+ monhost_ups_current->logfile = stdout;
+ else
+ monhost_ups_current->logfile = fopen(monhost_ups_current->logfn, "a");
- if (strcmp(logfn, "-") == 0)
- logfile = stdout;
- else
- logfile = fopen(logfn, "a");
+ if (monhost_ups_current->logfile == NULL)
+ fatal_with_errno(EXIT_FAILURE, "could not open logfile %s", logfn);
- if (logfile == NULL)
- fatal_with_errno(EXIT_FAILURE, "could not open logfile %s", logfn);
+ }
+
/* now drop root if we have it */
new_uid = get_user_pwent(user);
open_syslog(prog);
if (foreground < 0) {
- if (logfile == stdout) {
+ if (monhost_ups_anchor->logfile == stdout) {
foreground = 1;
} else {
foreground = 0;
@@ -552,25 +620,35 @@
reopen_flag = 0;
}
- /* reconnect if necessary */
- if (upscli_fd(&ups) < 0) {
- upscli_connect(&ups, hostname, port, 0);
- }
+ for (monhost_ups_current = monhost_ups_anchor;
+ monhost_ups_current != NULL;
+ monhost_ups_current = monhost_ups_current->next) {
+ ups = monhost_ups_current->ups; /* XXX Not ideal */
+ upsname = monhost_ups_current->upsname; /* XXX Not ideal */
+ /* reconnect if necessary */
+ if (upscli_fd(ups) < 0) {
+ upscli_connect(ups, monhost_ups_current->hostname, monhost_ups_current->port, 0);
+ }
- run_flist();
+ run_flist(monhost_ups_current);
- /* don't keep connection open if we don't intend to use it shortly */
- if (interval > 30) {
- upscli_disconnect(&ups);
+ /* don't keep connection open if we don't intend to use it shortly */
+ if (interval > 30) {
+ upscli_disconnect(ups);
+ }
}
}
upslogx(LOG_INFO, "Signal %d: exiting", exit_flag);
+ for (monhost_ups_current = monhost_ups_anchor;
+ monhost_ups_current != NULL;
+ monhost_ups_current = monhost_ups_current->next) {
- if (logfile != stdout)
- fclose(logfile);
+ if (monhost_ups_current->logfile != stdout)
+ fclose(monhost_ups_current->logfile);
- upscli_disconnect(&ups);
+ upscli_disconnect(monhost_ups_current->ups);
+ }
exit(EXIT_SUCCESS);
}

View file

@ -1,16 +0,0 @@
--- docs/man/upslog.8.orig 2022-08-30 05:56:02.734873000 -0700
+++ docs/man/upslog.8 2022-08-30 06:09:47.928348000 -0700
@@ -134,6 +134,13 @@
upsname[@hostname[:port]]\&. The default hostname is "localhost"\&.
.RE
.PP
+\fB\-m\fR \fItuple\fR
+.RS 4
+Monitor multiple UPSs\&. The format for this option is a tuple of
+ups and logfile separated by commas\&. An example would be:
+upsname@hostname:9999,/var/log/nut/cps.log
+.RE
+.PP
\fB\-u\fR \fIusername\fR
.RS 4
If started as root, upslog will

View file

@ -1,14 +0,0 @@
--- docs/man/upslog.txt.orig 2022-08-30 05:56:02.761764000 -0700
+++ docs/man/upslog.txt 2022-08-30 06:04:33.428455000 -0700
@@ -78,6 +78,11 @@
Monitor this UPS. The format for this option is
+upsname[@hostname[:port]]+. The default hostname is "localhost".
+*-m* 'tuple'::
+Monitor multiple UPSs. The format for this option is a tuple of
+ups and logfile separated by commas. An example would be:
+`upsname@hostname:9999,/var/log/nut/cps.log`
+
*-u* 'username'::
If started as root, upslog will *setuid*(2) to the user id

View file

@ -0,0 +1,21 @@
--- m4/nut_check_libltdl.m4.orig 2023-08-01 07:33:24.593954000 -0700
+++ m4/nut_check_libltdl.m4 2023-08-01 07:35:18.506094000 -0700
@@ -10,10 +10,7 @@
dnl No NUT_CHECK_PKGCONFIG here: (lib)ltdl.pc was not seen on any OS
dnl save CFLAGS and LIBS
- CFLAGS_ORIG="${CFLAGS}"
- LIBS_ORIG="${LIBS}"
LIBS=""
- CFLAGS=""
dnl For fallback below:
myCFLAGS=""
@@ -71,7 +68,5 @@
unset myCFLAGS
dnl restore original CFLAGS and LIBS
- CFLAGS="${CFLAGS_ORIG}"
- LIBS="${LIBS_ORIG}"
fi
])

View file

@ -1,16 +0,0 @@
diff --git tools/nut-scanner/nutscan-init.c.orig tools/nut-scanner/nutscan-init.c
index 9ea3f5d..13f4e78 100644
--- tools/nut-scanner/nutscan-init.c.orig
+++ tools/nut-scanner/nutscan-init.c
@@ -133,7 +133,11 @@ void nutscan_init(void)
char *libname = NULL;
#ifdef WITH_USB
#if WITH_LIBUSB_1_0
+ #ifdef __FreeBSD__
+ libname = get_libname("libusb.so");
+ #else
libname = get_libname("libusb-1.0.so");
+ #endif
#else
libname = get_libname("libusb-0.1.so");
if (!libname) {

View file

@ -40,19 +40,21 @@ bin/upssched-cmd
lib/libnutclient.a
lib/libnutclient.so
lib/libnutclient.so.2
lib/libnutclient.so.2.0.0
lib/libnutclient.so.2.0.2
lib/libupsclient.a
lib/libupsclient.so
lib/libupsclient.so.6
lib/libupsclient.so.6.0.0
lib/libupsclient.so.6.0.1
lib/libnutclientstub.a
lib/libnutclientstub.so
lib/libnutclientstub.so.1
lib/libnutclientstub.so.1.0.0
lib/libnutclientstub.so.1.0.1
lib/libnutscan.a
lib/libnutscan.so
lib/libnutscan.so.2
lib/libnutscan.so.2.0.0
lib/libnutscan.so.2.0.2
%%PYTHON_SITELIBDIR%%/PyNUT.py
%%PYTHON_SITELIBDIR%%/test_nutclient.py
%%DEV%%libdata/pkgconfig/libnutclient.pc
%%DEV%%libdata/pkgconfig/libnutscan.pc
%%DEV%%libdata/pkgconfig/libupsclient.pc
@ -104,6 +106,7 @@ lib/libnutscan.so.2.0.0
%%USB%%libexec/nut/richcomm_usb
%%SERIAL%%libexec/nut/safenet
%%SERIAL%%libexec/nut/skel
libexec/nut/sms_ser
%%SNMP%%libexec/nut/snmp-ups
%%SERIAL%%libexec/nut/solis
%%SERIAL%%libexec/nut/tripplite
@ -117,6 +120,7 @@ lib/libnutscan.so.2.0.0
%%MODBUS%%libexec/nut/phoenixcontact_modbus
%%MODBUS%%libexec/nut/socomec_jbus
%%SERIAL%%libexec/nut/victronups
%%DEV%%libexec/sockdebug
%%MANPAGES%%%%DEV%%man/man3/libnutclient.3.gz
%%MANPAGES%%%%DEV%%man/man3/libnutclient_commands.3.gz
%%MANPAGES%%%%DEV%%man/man3/libnutclient_devices.3.gz
@ -156,6 +160,9 @@ lib/libnutscan.so.2.0.0
%%MANPAGES%%%%DEV%%man/man3/nutscan_add_option_to_device.3.gz
%%MANPAGES%%%%DEV%%man/man3/nutscan_cidr_to_ip.3.gz
%%MANPAGES%%%%DEV%%man/man3/nutscan_display_parsable.3.gz
%%MANPAGES%%%%DEV%%man/man3/nutscan_display_sanity_check.3.gz
%%MANPAGES%%%%DEV%%man/man3/nutscan_display_sanity_check_serial.3.gz
%%MANPAGES%%%%DEV%%man/man3/nutscan_display_ups_conf_with_sanity_check.3.gz
%%MANPAGES%%%%DEV%%man/man3/nutscan_display_ups_conf.3.gz
%%MANPAGES%%%%DEV%%man/man3/nutscan_free_device.3.gz
%%MANPAGES%%%%DEV%%man/man3/nutscan_get_serial_ports_list.3.gz
@ -258,6 +265,7 @@ lib/libnutscan.so.2.0.0
%%MANPAGES%%%%SERIAL%%man/man8/powerpanel.8.gz
%%MANPAGES%%%%SERIAL%%man/man8/rhino.8.gz
%%MANPAGES%%%%SERIAL%%man/man8/safenet.8.gz
%%MANPAGES%%man/man8/sms_ser.8.gz
%%MANPAGES%%%%SERIAL%%man/man8/solis.8.gz
%%MANPAGES%%%%SERIAL%%man/man8/tripplite.8.gz
%%MANPAGES%%%%SERIAL%%man/man8/tripplitesu.8.gz
@ -265,6 +273,7 @@ lib/libnutscan.so.2.0.0
%%MANPAGES%%%%SERIAL%%man/man8/victronups.8.gz
%%MANPAGES%%%%USB%%man/man8/bcmxcp_usb.8.gz
%%MANPAGES%%%%USB%%man/man8/richcomm_usb.8.gz
%%MANPAGES%%%%DEV%%man/man8/sockdebug.8.gz
%%MANPAGES%%%%USB%%man/man8/tripplite_usb.8.gz
%%MANPAGES%%%%USB%%man/man8/usbhid-ups.8.gz
%%MANPAGES%%%%SNMP%%man/man8/snmp-ups.8.gz