1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-30 05:40:06 +00:00

sysutils/anacron: Fix start after resume

The anacron utility should be run by it's rc(8) script after resume, since the
time to run jobs from the anacrontab(5) might have passed while the system was
sleeping.

PR:	253567
Reported by:	walter.von.entferndt@posteo.net
Approved by:	dz@426.ch (maintainer)
This commit is contained in:
Fernando Apesteguía 2021-04-07 13:16:00 +02:00
parent 7eb0f1e315
commit 1a76a776c7
8 changed files with 87 additions and 30 deletions

View File

@ -2,7 +2,7 @@
PORTNAME= anacron
PORTVERSION= 2.3
PORTREVISION= 6
PORTREVISION= 7
CATEGORIES= sysutils
MASTER_SITES= SF
@ -13,20 +13,22 @@ LICENSE= GPLv2+
LICENSE_FILE= ${WRKSRC}/COPYING
USES= gmake
USE_RC_SUBR= anacron
USE_RC_SUBR= ${PORTNAME}
SUB_FILES= pkg-message
PLIST_SUB= PORTNAME=${PORTNAME}
SUB_LIST+= PORTNAME=${PORTNAME} COMMENT="${COMMENT}"
post-patch:
.for f in Makefile anacron.8 anacrontab.5
@${REINPLACE_CMD} -e 's|\(/etc/anacrontab\)|${PREFIX}\1|' ${WRKSRC}/${f}
.for f in Makefile ${PORTNAME}.8 ${PORTNAME}tab.5
@${REINPLACE_CMD} -e 's|\(/etc/${PORTNAME}tab\)|${PREFIX}\1|' ${WRKSRC}/${f}
.endfor
@${REINPLACE_CMD} -e 's|^CFLAGS = .*||' ${WRKSRC}/Makefile
do-install:
${INSTALL_PROGRAM} ${WRKSRC}/anacron ${STAGEDIR}${PREFIX}/sbin
${INSTALL_MAN} ${WRKSRC}/anacron.8 ${STAGEDIR}${MAN8PREFIX}/man/man8
${INSTALL_MAN} ${WRKSRC}/anacrontab.5 ${STAGEDIR}${MAN5PREFIX}/man/man5
${INSTALL_DATA} ${FILESDIR}/anacrontab.sample ${STAGEDIR}${PREFIX}/etc
@${MKDIR} ${STAGEDIR}/var/spool/anacron
${INSTALL_PROGRAM} ${WRKSRC}/${PORTNAME} ${STAGEDIR}${PREFIX}/sbin
${INSTALL_MAN} ${WRKSRC}/${PORTNAME}.8 ${STAGEDIR}${MAN8PREFIX}/man/man8
${INSTALL_MAN} ${WRKSRC}/${PORTNAME}tab.5 ${STAGEDIR}${MAN5PREFIX}/man/man5
${INSTALL_DATA} ${FILESDIR}/${PORTNAME}tab.sample ${STAGEDIR}${PREFIX}/etc
@${MKDIR} ${STAGEDIR}/var/spool/${PORTNAME}
.include <bsd.port.mk>

View File

@ -1,21 +1,36 @@
#!/bin/sh
# PROVIDE: anacron
# PROVIDE: %%PORTNAME%%
# REQUIRE: LOGIN
# KEYWORD: resume
#
# Add the following line to /etc/rc.conf to enable anacron:
# Execute one of the following commands as root to enable %%PORTNAME%%:
#
# anacron_enable="YES"
# service %%PORTNAME%% enable
# sysrc %%PORTNAME%%_enable=YES
#
. /etc/rc.subr
name=anacron
rcvar=anacron_enable
name=%%PORTNAME%%
command="%%PREFIX%%/sbin/%%PORTNAME%%"
desc="%%COMMENT%%"
extra_commands=resume
rcvar=%%PORTNAME%%_enable
required_vars=syslogd_enable
load_rc_config $name
: ${anacron_enable:=NO}
command="%%PREFIX%%/sbin/anacron"
: ${%%PORTNAME%%_enable:=NO}
run_rc_command "$1"
if [ $# -gt 0 -a $1 = "resume" ]; then
arg=start
if checkyesno $rcvar; then
info "starting ${name} after resume"
fi
else
arg=$1
fi
debug "$name: \$1 = $1, arg = $arg"
run_rc_command "$arg"

View File

@ -0,0 +1,10 @@
--- log.c.orig 2000-06-22 22:55:13 UTC
+++ log.c
@@ -37,6 +37,7 @@
#include <unistd.h>
#include <syslog.h>
#include <stdio.h>
+#include <stdlib.h>
#include <stdarg.h>
#include <errno.h>
#include <signal.h>

View File

@ -0,0 +1,10 @@
--- main.c.orig 2000-06-22 22:58:07 UTC
+++ main.c
@@ -24,6 +24,7 @@
#include <time.h>
#include <stdio.h>
+#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>

View File

@ -1,6 +1,6 @@
--- matchrx.c.orig 2000-06-20 23:12:18 UTC
+++ matchrx.c
@@ -23,6 +23,7 @@
@@ -23,9 +23,11 @@
#include <stdio.h>
@ -8,3 +8,7 @@
#include <regex.h>
#include <stdarg.h>
#include <stdlib.h>
+#include <string.h>
#include "matchrx.h"
int

View File

@ -9,8 +9,6 @@
- int fd, i;
+ int fd;
+ char name[] = "/tmp/anacron.XXXXXX";
+
+ fd = mkstemp(name);
- i = 0;
- name = NULL;
@ -25,6 +23,8 @@
- /* I'm not sure we actually need to be so persistent here */
- } while (fd == -1 && errno == EEXIST && i < max_retries);
-
+ fd = mkstemp(name);
+
if (fd == -1) die_e("Can't open temporary file");
if (unlink(name)) die_e("Can't unlink temporary file");
- free(name);
@ -32,3 +32,12 @@
fcntl(fd, F_SETFD, 1); /* set close-on-exec flag */
return fd;
}
@@ -84,7 +72,7 @@ username()
}
static void
-xputenv(const char *s)
+xputenv(char *s)
{
if (putenv(s)) die_e("Can't set the environment");
}

View File

@ -2,12 +2,17 @@
{ type: install
message: <<EOM
Configuration hints:
- Edit %%PREFIX%%/etc/anacrontab
- Edit %%PREFIX%%/etc/%%PORTNAME%%tab
- Deactivate the 'periodic' commands in /etc/crontab
- Add a call to anacron to /etc/crontab, like
0 0 * * * root %%PREFIX%%/sbin/anacron
- Add anacron_enable="YES" to /etc/rc.conf
- Read anacron(8) and anacrontab(5)
- Add a call to %%PORTNAME%% to /etc/crontab, like
0 0 * * * root %%PREFIX%%/sbin/%%PORTNAME%%
- Add %%PORTNAME%%_enable="YES" to /etc/rc.conf
or execute one of the following commands as root:
service %%PORTNAME%% enable
sysrc %%PORTNAME%%_enable=YES
- Read %%PORTNAME%%(8) and %%PORTNAME%%tab(5)
- To avoid overlapping periodic(8) jobs, you may want to serialize jobs:
sysrc %%PORTNAME%%_flags+=" -s"
EOM
}
]

View File

@ -1,5 +1,7 @@
sbin/anacron
@sample etc/anacrontab.sample
@unexec rmdir /var/spool/anacron 2>/dev/null || echo "If you are permanently removing this port, you should do a 'rm -rf /var/spool/anacron'."
man/man8/anacron.8.gz
man/man5/anacrontab.5.gz
sbin/%%PORTNAME%%
@sample etc/%%PORTNAME%%tab.sample
@postexec mkdir -p /var/spool/%%PORTNAME%% 2>/dev/null
@postunexec rmdir /var/spool/%%PORTNAME%% 2>/dev/null || echo "If you are permanently removing this port, you should do a 'rm -rf /var/spool/%%PORTNAME%%'."
man/man8/%%PORTNAME%%.8.gz
man/man5/%%PORTNAME%%tab.5.gz
@dir /var/spool/%%PORTNAME%%