Skip to content

Commit

Permalink
sys-process/fcron: Bumped to v3.2.1
Browse files Browse the repository at this point in the history
EBuild changes:
===============
 - Migrated to EAPI=6.

 - Automagic on sys-process/audit removed. (Bug #540446)

 - Previously we did only install cronjobs which remove lastrun lock files
   however we did not install a cronjob which actually called "run-crons"
   in the default systab when using USE=-system-crontab with the result
   that we never actually executed any cronjob from
   /etc/cron.{hourly,daily,weekly,monthly}. This was fixed by adding the
   missing job. (Bug #464278)

 - Default systab rewritten to clarify the purpose of /etc/crontab when the
   package was built with USE=system-crontab. (Bug #466900, #467316)

 - Systab commands are now using absolute path. (Bug #525242)

 - OpenRC runscript updated

  - Shebang updated to use openrc-run. (Bug #573846)

  - Multi instance support fixed which was broken due to missing quotes in
    getconfig(). (Bug #520264, #533786)

  - Runscript now "use clock" instead of "need clock". (Bug #546138)

  - Runscript is now more reliable because it waits 1000ms per default to
    ensure that fcron daemon is really up and running and has not
    terminated due to a problem.

Gentoo-Bug: https://bugs.gentoo.org/464278
Gentoo-Bug: https://bugs.gentoo.org/466900
Gentoo-Bug: https://bugs.gentoo.org/467316
Gentoo-Bug: https://bugs.gentoo.org/520264
Gentoo-Bug: https://bugs.gentoo.org/525242
Gentoo-Bug: https://bugs.gentoo.org/533786
Gentoo-Bug: https://bugs.gentoo.org/540446
Gentoo-Bug: https://bugs.gentoo.org/546138
Gentoo-Bug: https://bugs.gentoo.org/573846

Package-Manager: portage-2.3.2
  • Loading branch information
Whissi committed Nov 17, 2016
1 parent bb7670f commit 531e27c
Show file tree
Hide file tree
Showing 5 changed files with 384 additions and 0 deletions.
1 change: 1 addition & 0 deletions sys-process/fcron/Manifest
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
DIST fcron-3.1.1.src.tar.gz 597094 SHA256 449e21f09f80bd419d87165ba15dad94ad8ab215b7946fcf805b5340f019e952 SHA512 ce20f0aee72521f809af2be13ba797e0f6ac65f12f7797e67a4db56c3b111d24c499c135ec1c948d8385ded415da25a258daf90051a75f603f7322c23dbca945 WHIRLPOOL e3f4d056dd9926629c7ea36de2d5d768f510f256c6cdf0b051baaf5fda776d6295dd8a3213c32765d871cd6bdfc8bbb0bc7b5b0ab1da42c78441e19458594abe
DIST fcron-3.1.2.src.tar.gz 592409 SHA256 1c9299baab86e2b141031193c98ccd2e1b52d97a023b45a9e80266372ab11a5d SHA512 14aec35031449bb8abb81bee781215a09a6cd1d8e08a002ca391ea84c05b9c1cd07ef383e4fc3ee4ae928b60ad75f3f91114a41336110283a07fab64dc770503 WHIRLPOOL 0ec40e9921c187d87247a2bd5b0f807dda6a780e313608ba5c0933d1c470313b9db7f6d5b0ff15b7a853e966bb738c4bbac1c80a54541f402c2c51044f53cca9
DIST fcron-3.2.0.src.tar.gz 595408 SHA256 eb13b86ed96805d117e19847f1da30b834f1990f7ef4c38f5007234d44679564 SHA512 97b200dfec02ca0aba76abf3cf71f54608fbadf46aa29d81d7316920fb1bebbba81d0118925f658cd9062f362b6075467c7f595e736b47616995a95958ae776b WHIRLPOOL 58cd9e7484181354518a53b99a2465608ba94001cf5908342b0e195b7436c0296b6a60a428f6d4136c65ce02644fa568e3a706962d76f6e59fcbe948b4bf0afc
DIST fcron-3.2.1.src.tar.gz 601142 SHA256 6114d0a39a32853669c0c0ba0f96d92920e7cabca3ff1edf37d25750403e5f6a SHA512 ddfd3e3a297b843c924aacccffaa5c1c6b300497f39daa1cdb90dc4cf4bc757042b0b2c1f055c119c8128c64d830ee0e8757091610432f5ffcacca25d369e5cd WHIRLPOOL 39b44f88b09be40705ca5d1f421aa4bff6d9a00fbcb572b9012fb1dd65a24c3b1b746196e722bc544a6c0db062625d9981c60956a7fb7c34e6cb630202bd5a2b
254 changes: 254 additions & 0 deletions sys-process/fcron/fcron-3.2.1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI="6"

WANT_AUTOMAKE=none

inherit cron pam flag-o-matic user autotools versionator systemd

DESCRIPTION="A command scheduler with extended capabilities over cron and anacron"
HOMEPAGE="http://fcron.free.fr/"
SRC_URI="http://fcron.free.fr/archives/${P}.src.tar.gz"

LICENSE="GPL-2"
KEYWORDS="~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
IUSE="audit debug pam selinux l10n_fr +mta +system-crontab readline"

DEPEND="audit? ( sys-process/audit )
pam? ( virtual/pam )
readline? ( sys-libs/readline:= )
selinux? ( sys-libs/libselinux )"

RDEPEND="${DEPEND}
app-misc/editor-wrapper
mta? ( virtual/mta )
pam? ( sys-auth/pambase )"

PATCHES=(
"${FILESDIR}"/${PN}-3.1.1-noreadline.patch
"${FILESDIR}"/${PN}-3.2.1-configure-fix-audit-parameter-check.patch
)

pkg_setup() {
enewgroup fcron
enewuser fcron -1 -1 -1 fcron
rootuser=$(egetent passwd 0 | cut -d ':' -f 1)
[[ ${rootuser} ]] || rootuser=root
rootgroup=$(egetent group 0 | cut -d ':' -f 1)
[[ ${rootgroup} ]] || rootgroup=root
}

src_prepare() {
default

# respect LDFLAGS
sed -i "s:\(@LIBS@\):\$(LDFLAGS) \1:" Makefile.in || die "sed failed"

# Adjust fcrontab path
sed -i -e 's:/etc/fcrontab:/etc/fcron/fcrontab:' script/check_system_crontabs.sh || die

mv configure.in configure.ac || die

eautoconf
}

src_configure() {
# Don't try to pass --with-debug as it'll play with cflags as
# well, and run foreground which is a _very_ nasty idea for
# Gentoo.
use debug && append-cppflags -DDEBUG

# bindir is used just for calling fcronsighup
econf \
--with-cflags="${CFLAGS}" \
--bindir=/usr/libexec \
--sbindir=/usr/libexec \
$(use_with audit) \
$(use_with mta sendmail) \
$(use_with pam) \
$(use_with readline) \
$(use_with selinux) \
--sysconfdir=/etc/fcron \
--with-username=fcron \
--with-groupname=fcron \
--with-piddir=/run \
--with-spooldir=/var/spool/fcron \
--with-fifodir=/run \
--with-fcrondyn=yes \
--disable-checks \
--with-editor=/usr/libexec/editor \
--with-shell=/bin/sh \
--without-db2man \
--without-dsssl-dir \
--with-rootname=${rootuser} \
--with-rootgroup=${rootgroup} \
--with-systemdsystemunitdir="$(systemd_get_systemunitdir)"
}

src_compile() {
default

# bug #216460
sed -i \
-e 's:/usr/local/etc/fcron:/etc/fcron/fcron:g' \
-e 's:/usr/local/etc:/etc:g' \
-e 's:/usr/local/:/usr/:g' \
doc/*/*/*.{txt,1,5,8,html} \
|| die "unable to fix documentation references"
}

src_install() {
keepdir /var/spool/fcron

exeinto /usr/libexec
doexe fcron fcronsighup

dobin fcrondyn fcrontab

insinto /etc/fcron
doins files/fcron.{allow,deny,conf}

if use system-crontab; then
dosym fcrontab /usr/bin/crontab

exeinto /usr/libexec
newexe script/check_system_crontabs.sh check_system_crontabs

insinto /etc/fcron
newins "${FILESDIR}"/fcrontab.2 fcrontab

fowners ${rootuser}:fcron /etc/fcron/fcrontab
fperms 0640 /etc/fcron/fcrontab

insinto /etc
newins "${FILESDIR}"/crontab.2 crontab
fi

fowners fcron:fcron \
/var/spool/fcron \
/usr/bin/fcron{dyn,tab}

# fcronsighup needs to be suid root, because it sends a HUP to the
# running fcron daemon, but only has to be called by the fcron group
# anyway
fowners ${rootuser}:fcron \
/usr/libexec/fcronsighup \
/etc/fcron/fcron.{allow,deny,conf} \
/etc/fcron

fperms 6770 /var/spool/fcron
fperms 6775 /usr/bin/fcron{dyn,tab}

fperms 4710 /usr/libexec/fcronsighup

fperms 0750 /etc/fcron
fperms 0640 /etc/fcron/fcron.{allow,deny,conf}

pamd_mimic system-services fcron auth account session
cat > "${T}"/fcrontab.pam <<- EOF
# Don't ask for the user's password; fcrontab will only allow to
# change user if running as root.
auth sufficient pam_permit.so
# Still use the system-auth stack for account and session as the
# sysadmin might have set up stuff properly, and also avoids
# sidestepping limits (since fcrontab will run \$EDITOR).
account include system-auth
session include system-auth
EOF
newpamd "${T}"/fcrontab.pam fcrontab

newinitd "${FILESDIR}"/fcron.init.4 fcron
systemd_newunit "${S}/script/fcron.init.systemd" fcron.service

local DOCS=( MANIFEST VERSION "${FILESDIR}/crontab")
DOCS+=( doc/en/txt/{readme,thanks,faq,todo,relnotes,changes}.txt )

local HTML_DOCS=( doc/en/HTML/. )

einstalldocs

newdoc files/fcron.conf fcron.conf.sample
doman doc/en/man/*.{1,5,8}

for lang in fr; do
use l10n_${lang} || continue

doman -i18n=${lang} doc/${lang}/man/*.{1,5,8}

docinto html/${lang}
dodoc -r doc/${lang}/HTML/.
done
}

pkg_postinst() {
if [[ -z "${REPLACING_VERSIONS}" ]]; then
# This is a new installation
elog "Make sure you execute"
elog ""
elog " # emerge --config ${CATEGORY}/${PN}"
elog ""
elog "to install the default systab on this system."
else
local v
for v in ${REPLACING_VERSIONS}; do
if ! version_is_at_least "3.2.1" ${v}; then
# This is an upgrade

elog "fcron's default systab was updated since your last installation."
elog "You can use"
elog ""
elog " # emerge --config ${CATEGORY}/${PN}"
elog ""
elog "to re-install systab (do not call this command before you"
elog "have merged your configuration files)."

# Show this elog only once
break
fi
done
fi

if ! use system-crontab; then
echo ""
ewarn "Remember that fcron will *not* use /etc/cron.d in this configuration"
ewarn "due to USE=-system-crontab!"
echo ""
fi
}

pkg_config() {
if [[ $(fcrontab -l -u systab 2>/dev/null) ]]; then
eerror "We're not going to make any change to your systab as long as"
eerror "it contains data; please clear it before proceeding."
eerror "You can do that with"
eerror ""
eerror " # fcrontab -u systab -r"
eerror ""
eerror "However you are advised to do this by hand to review existing"
eerror "systab just in case."
return 1
fi

if use system-crontab; then
elog "This is going to set up fcron to execute check_system_crontabs."
elog "In this configuration, /etc/crontab and /etc/cron.d are respected."
elog "Per default fcron will check for modifications every 10 minutes."
/usr/libexec/check_system_crontabs -v -i -f
else
elog "This is going to set up fcron to set up a default systab that"
elog "executes /etc/cron.{hourly,daily,weekly,monthly} but will ignore"
elog "/etc/crontab and /etc/cron.d."
fcrontab -u systab - <<- EOF
!serial(true)
00 * * * * /bin/rm -f /var/spool/cron/lastrun/cron.hourly
00 00 * * * /bin/rm -f /var/spool/cron/lastrun/cron.daily
00 00 * * 6 /bin/rm -f /var/spool/cron/lastrun/cron.weekly
00 00 1 * * /bin/rm -f /var/spool/cron/lastrun/cron.monthly
*/10 * * * * /usr/bin/test -x /usr/sbin/run-crons && /usr/sbin/run-crons
!serial(false)
EOF
fi
}
26 changes: 26 additions & 0 deletions sys-process/fcron/files/crontab.2
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# /etc/crontab:
# This is fcron's special systab and *not* root's crontab!

# Global variables
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# "run-crons" from sys-process/cronbase package doesn't allow selective
# runs like "run-parts" from sys-apps/debianutils. So every time
# "run-crons" gets executed it loops through
# /etc/cron.{hourly,daily,weekly,monthly} and executes one after another if
# lastrun lock file isn't in place.
# Without fcron's "serial(true)" option it would be possible that a lastrun
# lock file which should have been removed still exists when "run-crons"
# starts so that a promptly execution of all cronjobs isn't always
# guaranteed.

!serial(true)
00 * * * * /bin/rm -f /var/spool/cron/lastrun/cron.hourly
00 00 * * * /bin/rm -f /var/spool/cron/lastrun/cron.daily
00 00 * * 6 /bin/rm -f /var/spool/cron/lastrun/cron.weekly
00 00 1 * * /bin/rm -f /var/spool/cron/lastrun/cron.monthly
*/10 * * * * /usr/bin/test -x /usr/sbin/run-crons && /usr/sbin/run-crons
!serial(false)
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
From cc7a684862fee31c442c49d6a537d86979c23220 Mon Sep 17 00:00:00 2001
From: Thomas Deutschmann <[email protected]>
Date: Thu, 17 Nov 2016 17:19:35 +0100
Subject: [PATCH] configure: Fix --with-audit parameter check

Due to a missing "$" the variable "$useaudit" was never checked for
0 value with the result that you cannot disable building against
libaudit.

Gentoo-Bug: https://bugs.gentoo.org/540446
---
configure.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/configure.in b/configure.in
index 7e7634f..708d1dd 100644
--- a/configure.in
+++ b/configure.in
@@ -822,7 +822,7 @@ AC_ARG_WITH(audit,
;;
esac ]
)
-if test useaudit = "0"; then
+if test "$useaudit" = 0; then
AC_MSG_RESULT(no)
elif test "$useaudit" = "1" && test "$auditavail" != 1; then
useaudit=0
--
2.10.2

73 changes: 73 additions & 0 deletions sys-process/fcron/files/fcron.init.4
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

FCRON_INSTANCE="${SVCNAME##*.}"

if [[ -n "${FCRON_INSTANCE}" && "${SVCNAME}" != "fcron" ]]; then
FCRON_CONFIGFILE="/etc/fcron/fcron.${FCRON_INSTANCE}.conf"
else
FCRON_CONFIGFILE="/etc/fcron/fcron.conf"
fi

getconfig() {
local key="$1"
local value_default="$2"
local value=

if service_started; then
value="$(service_get_value ${key})"
fi

if [[ -z "${value}" && -r "${FCRON_CONFIGFILE}" ]]; then
value="$(sed -n -e 's:^'"${key}"'[ \t]*=[ \t]*::p' "${FCRON_CONFIGFILE}")"
fi

if [[ -z "${value}" ]]; then
# Value not explicitly set in the configfile or configfile does not exist
# or is not readable
echo "${value_default}"
else
echo "${value}"
fi

return 0
}

depend() {
config "${FCRON_CONFIGFILE}"

use clock logger
need hostname

# provide the cron service if we are the main instance
[[ "${SVCNAME}" == "fcron" ]] && provide cron
}

command="/usr/libexec/fcron"
command_args="-c \"${FCRON_CONFIGFILE}\""
start_stop_daemon_args=${FCRON_SSDARGS:-"--wait 1000"}
pidfile="$(getconfig pidfile /run/fcron.pid)"
fcrontabs="$(getconfig fcrontabs /var/spool/fcron)"
required_files="${FCRON_CONFIGFILE}"

extra_started_commands="reload"

reload() {
start-stop-daemon --signal HUP --pidfile "${pidfile}"
}

start_pre() {
checkpath --file "${FCRON_CONFIGFILE}" --owner root:fcron --mode 0640

if [[ ! -d "${fcrontabs}" ]]; then
ebegin "Creating missing spooldir '${fcrontabs}'"
${command} --newspooldir "${fcrontabs}"
eend $?
fi
}

start_post() {
service_set_value fcrontabs "${fcrontabs}"
}

0 comments on commit 531e27c

Please sign in to comment.