Add the Auto Nice Daemon as sysutils/and
The auto nice daemon will renice or even kill jobs according to a priority database, after they take up too much CPU time.
This commit is contained in:
parent
6f154d6ade
commit
600ffe3c78
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: Makefile,v 1.1053 2023/06/13 13:15:05 bacon Exp $
|
||||
# $NetBSD: Makefile,v 1.1054 2023/06/15 09:55:25 hauke Exp $
|
||||
#
|
||||
|
||||
COMMENT= System utilities
|
||||
|
@ -30,6 +30,7 @@ SUBDIR+= amanda-plot
|
|||
SUBDIR+= amanda-server
|
||||
SUBDIR+= amlogic-meson-fwtools
|
||||
SUBDIR+= amtterm
|
||||
SUBDIR+= and
|
||||
SUBDIR+= ansible
|
||||
SUBDIR+= ansible-core
|
||||
SUBDIR+= ansible-lint
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
The auto nice daemon will renice or even kill jobs according to a priority
|
||||
database, after they take up too much CPU time.
|
||||
|
||||
You define what "too much" actually means.
|
|
@ -0,0 +1,64 @@
|
|||
# $NetBSD: Makefile,v 1.1 2023/06/15 09:55:25 hauke Exp $
|
||||
|
||||
DISTNAME= and-1.2.2
|
||||
CATEGORIES= sysutils
|
||||
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=and/}
|
||||
|
||||
MAINTAINER= hauke@NetBSD.org
|
||||
HOMEPAGE= http://and.sourceforge.net/
|
||||
COMMENT= Renice or kill jobs based on priority database
|
||||
LICENSE= gnu-gpl-v2
|
||||
|
||||
USE_TOOLS+= gmake
|
||||
|
||||
USE_LANGUAGES= c
|
||||
|
||||
BUILD_TARGET= and doc
|
||||
|
||||
RCD_SCRIPTS= and
|
||||
|
||||
EGDIR= share/examples/and
|
||||
CONFIG_FILES= and.conf and.priorities
|
||||
|
||||
.include "../../mk/bsd.prefs.mk"
|
||||
|
||||
SUBST_CLASSES+= paths
|
||||
SUBST_MESSAGE.paths= Fixing hardcoded paths.
|
||||
SUBST_STAGE.paths= pre-configure
|
||||
SUBST_FILES.paths= Makefile
|
||||
SUBST_FILES.paths+= and.service
|
||||
SUBST_VARS.paths= PREFIX PKG_SYSCONFDIR VARBASE
|
||||
|
||||
SUBST_CLASSES+= man
|
||||
SUBST_MESSAGE.man= Fixing hardcoded paths in man pages.
|
||||
SUBST_STAGE.man= pre-configure
|
||||
SUBST_FILES.man= *.man
|
||||
SUBST_SED.man= -e 's,/etc/,${PKG_SYSCONFDIR}/,g'
|
||||
|
||||
LIBS.NetBSD+= -lkvm
|
||||
LIBS.FreeBSD+= -lkvm
|
||||
|
||||
MAKE_FLAGS+= LD=${CC:Q} LIBS=${LIBS:Q}
|
||||
|
||||
.for f in ${CONFIG_FILES}
|
||||
CONF_FILES+= ${EGDIR}/${f} ${PKG_SYSCONFDIR}/${f}
|
||||
.endfor
|
||||
|
||||
INSTALLATION_DIRS+= sbin ${PKGMANDIR}/man5 ${PKGMANDIR}/man8 ${EGDIR}
|
||||
|
||||
post-extract:
|
||||
cp ${FILESDIR}/and.service ${WRKSRC}/
|
||||
cp ${WRKSRC}/and-OpenBSD.c ${WRKSRC}/and-NetBSD.c
|
||||
|
||||
|
||||
do-install:
|
||||
${INSTALL_PROGRAM} ${WRKSRC}/and ${DESTDIR}${PREFIX}/sbin/and
|
||||
.for mp in and.conf and.priorities
|
||||
${INSTALL_MAN} ${WRKSRC}/${mp}.5 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man5/
|
||||
.endfor
|
||||
${INSTALL_MAN} ${WRKSRC}/and.8 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man8/
|
||||
.for cf in ${CONFIG_FILES} and.init.debian and.service and.startup
|
||||
${INSTALL_DATA} ${WRKSRC}/${cf} ${DESTDIR}${PREFIX}/${EGDIR}
|
||||
.endfor
|
||||
|
||||
.include "../../mk/bsd.pkg.mk"
|
|
@ -0,0 +1,10 @@
|
|||
@comment $NetBSD: PLIST,v 1.1 2023/06/15 09:55:25 hauke Exp $
|
||||
man/man5/and.conf.5
|
||||
man/man5/and.priorities.5
|
||||
man/man8/and.8
|
||||
sbin/and
|
||||
share/examples/and/and.conf
|
||||
share/examples/and/and.init.debian
|
||||
share/examples/and/and.priorities
|
||||
share/examples/and/and.service
|
||||
share/examples/and/and.startup
|
|
@ -0,0 +1,8 @@
|
|||
$NetBSD: distinfo,v 1.1 2023/06/15 09:55:25 hauke Exp $
|
||||
|
||||
BLAKE2s (and-1.2.2.tar.gz) = 0b2c5970802a3698b0239be10227af29675ee370ca6088854b69bfb46b0a3550
|
||||
SHA512 (and-1.2.2.tar.gz) = f9ae5a6193a0029b6d1e6ce3c160635d39b152c49ad88b7ae686f3abf8ebcb5ec994edce5915a7f0eaa0f327c3ee7c4f0be2fc7c8bb01b7f374afdd594d6b609
|
||||
Size (and-1.2.2.tar.gz) = 29989 bytes
|
||||
SHA1 (patch-Makefile) = 78c44b93317d4f726e33c22a490995ec06eb269b
|
||||
SHA1 (patch-and-NetBSD.c) = ff29d9d34b2c5e0e3c6c1b58e7e71a42b0b5bddd
|
||||
SHA1 (patch-and.c) = 1dd220def1520ef2b3d967eb0c940e001a75c917
|
|
@ -0,0 +1,17 @@
|
|||
# Linux systemd service definition
|
||||
|
||||
[Unit]
|
||||
Description=Auto Nice Daemon
|
||||
# We need group information from YP
|
||||
Requires=rpcbind.service domainname.service
|
||||
After=rpcbind.service domainname.service network.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
GuessMainPID=yes
|
||||
ExecStart=@PREFIX@/sbin/and
|
||||
ExecReload=/bin/kill -1 -- $MAINPID
|
||||
ExecStop=/bin/kill -- $MAINPID
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1,23 @@
|
|||
#!@RCD_SCRIPTS_SHELL@
|
||||
#
|
||||
# $NetBSD: and.sh,v 1.1 2023/06/15 09:55:25 hauke Exp $
|
||||
#
|
||||
# PROVIDE: and
|
||||
# REQUIRE: DAEMON
|
||||
|
||||
name="and"
|
||||
command="@PREFIX@/sbin/${name}"
|
||||
|
||||
if [ -f @SYSCONFBASE@/rc.subr ]; then
|
||||
. @SYSCONFBASE@/rc.subr
|
||||
|
||||
rcvar=${name}
|
||||
required_files="@PKG_SYSCONFDIR@/${name}.conf"
|
||||
pidfile="@VARBASE@/run/${name}.pid"
|
||||
|
||||
load_rc_config ${name}
|
||||
run_rc_command "$1"
|
||||
else
|
||||
@ECHO@ -n " ${name}"
|
||||
${command} ${and_flags}
|
||||
fi
|
|
@ -0,0 +1,81 @@
|
|||
$NetBSD: patch-Makefile,v 1.1 2023/06/15 09:55:25 hauke Exp $
|
||||
|
||||
Use pkgsrc paths and build options
|
||||
|
||||
--- Makefile.orig 2005-03-27 19:39:37.000000000 +0000
|
||||
+++ Makefile
|
||||
@@ -22,11 +22,15 @@ INITSCRIPT=and.init
|
||||
# Target directories. Examples for common configurations are
|
||||
# given below.
|
||||
#
|
||||
-PREFIX=/usr/local
|
||||
-INSTALL_ETC=$(PREFIX)/etc
|
||||
-INSTALL_INITD=/etc/init.d
|
||||
-INSTALL_SBIN=$(PREFIX)/sbin
|
||||
-INSTALL_MAN=$(PREFIX)/man
|
||||
+#PREFIX=/usr/local
|
||||
+#INSTALL_ETC=$(PREFIX)/etc
|
||||
+#INSTALL_INITD=/etc/init.d
|
||||
+#INSTALL_SBIN=$(PREFIX)/sbin
|
||||
+#INSTALL_MAN=$(PREFIX)/man
|
||||
+
|
||||
+# pkgsrc
|
||||
+PREFIX=@PREFIX@
|
||||
+INSTALL_ETC=@PKG_SYSCONFDIR@
|
||||
|
||||
# typical OpenBSD or FreeBSD configuration
|
||||
#PREFIX=/usr/local
|
||||
@@ -91,53 +95,6 @@ MANPAGES=and.8 and.conf.5 and.priorities
|
||||
#
|
||||
ARCH=$(shell uname)
|
||||
|
||||
-#
|
||||
-# Architecture-dependent settings: ANSI C compiler and linker
|
||||
-#
|
||||
-ifeq (${ARCH},Linux)
|
||||
- CC = gcc -ansi -pedantic -Wall -g
|
||||
- LD = gcc
|
||||
- LIBS =
|
||||
-else
|
||||
-ifeq (${ARCH},OSF1)
|
||||
- CC = cc -ansi
|
||||
- LD = cc
|
||||
- LIBS =
|
||||
-else
|
||||
-ifeq (${ARCH},OpenBSD)
|
||||
- CC = gcc
|
||||
- LD = gcc
|
||||
- LIBS = -lkvm
|
||||
-else
|
||||
-ifeq (${ARCH},FreeBSD)
|
||||
- CC = gcc -Wall
|
||||
- LD = gcc
|
||||
- LIBS = -lkvm
|
||||
-else
|
||||
-ifeq (${ARCH},SunOS)
|
||||
- CC = cc -D__SunOS__
|
||||
- LD = cc
|
||||
-else
|
||||
-ifeq (${ARCH},IRIX)
|
||||
- CC = cc
|
||||
- LD = cc
|
||||
-else
|
||||
-ifeq (${ARCH},IRIX64)
|
||||
- CC = cc
|
||||
- LD = cc
|
||||
-else
|
||||
- # unsupported architecture
|
||||
- CC = false
|
||||
- LD = false
|
||||
- LIBS =
|
||||
-endif
|
||||
-endif
|
||||
-endif
|
||||
-endif
|
||||
-endif
|
||||
-endif
|
||||
-endif
|
||||
-
|
||||
|
||||
#
|
||||
# Build the auto-nice daemon.
|
|
@ -0,0 +1,39 @@
|
|||
$NetBSD: patch-and-NetBSD.c,v 1.1 2023/06/15 09:55:25 hauke Exp $
|
||||
|
||||
Make NetBSD kernel data structures visible
|
||||
|
||||
Apparently, <sys/resourcevar.h> is not to be exposed to userland, and
|
||||
it is not needed, anyway
|
||||
|
||||
Drop FreeBSD specific #include
|
||||
|
||||
--- and-NetBSD.c.orig 2023-06-14 09:29:04.355389748 +0000
|
||||
+++ and-NetBSD.c
|
||||
@@ -20,23 +20,21 @@
|
||||
|
||||
*/
|
||||
|
||||
+#define _KMEMUSER
|
||||
+
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <kvm.h>
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
+
|
||||
+#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
-#include <sys/resourcevar.h>
|
||||
-
|
||||
-#ifdef __FreeBSD__
|
||||
-#include <sys/user.h>
|
||||
-#endif
|
||||
-
|
||||
|
||||
#include "and.h"
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
$NetBSD: patch-and.c,v 1.1 2023/06/15 09:55:25 hauke Exp $
|
||||
|
||||
<values.h> is non-portable, replace with <limits.h> definitions.
|
||||
|
||||
--- and.c.orig 2004-04-05 19:19:01.000000000 +0000
|
||||
+++ and.c
|
||||
@@ -47,7 +47,6 @@
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
#include <regex.h>
|
||||
-#include <values.h>
|
||||
|
||||
#define DEBUG 0
|
||||
|
||||
@@ -704,7 +703,7 @@ int and_getnice (int uid, int gid, char
|
||||
/* Strategy: each priority database accumulates accuracy points
|
||||
for every aspect: user, group, command, parent. An exact hit is
|
||||
worth the configured weight of the aspect (1, 2, 4, 8); a joker
|
||||
- is worth 0; and a miss is with -MAXINT, effectively eliminating
|
||||
+ is worth 0; and a miss is with -INT_MAX, effectively eliminating
|
||||
the entry (veto). At the end, the highest rated entry is
|
||||
used to determine the new nice level. */
|
||||
for (i=0; i<and_db.n; i++) {
|
||||
@@ -714,7 +713,7 @@ int and_getnice (int uid, int gid, char
|
||||
} else if (and_db.entry[i].uid == -1) {
|
||||
exactness[i] = 0;
|
||||
} else {
|
||||
- exactness[i] = -MAXINT;
|
||||
+ exactness[i] = -INT_MAX;
|
||||
}
|
||||
/* group id */
|
||||
if (gid == and_db.entry[i].gid) {
|
||||
@@ -722,7 +721,7 @@ int and_getnice (int uid, int gid, char
|
||||
} else if (and_db.entry[i].gid == -1) {
|
||||
exactness[i] += 0;
|
||||
} else {
|
||||
- exactness[i] = -MAXINT;
|
||||
+ exactness[i] = -INT_MAX;
|
||||
}
|
||||
/* command */
|
||||
if (command!=NULL && regexec(and_db.entry[i].command,command,0,0,0) == 0) {
|
||||
@@ -730,7 +729,7 @@ int and_getnice (int uid, int gid, char
|
||||
} else if (strcmp(and_db.entry[i].command_str,"*") == 0) {
|
||||
exactness[i] += 0;
|
||||
} else {
|
||||
- exactness[i] = -MAXINT;
|
||||
+ exactness[i] = -INT_MAX;
|
||||
}
|
||||
/* parent */
|
||||
par = parent;
|
||||
@@ -745,7 +744,7 @@ int and_getnice (int uid, int gid, char
|
||||
exactness[i] += 0;
|
||||
break;
|
||||
} else if (last) {
|
||||
- exactness[i] = -MAXINT;
|
||||
+ exactness[i] = -INT_MAX;
|
||||
break;
|
||||
}
|
||||
par = par->parent;
|
Loading…
Reference in New Issue