1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-process/fcron/fcron-3.0.6-r3.ebuild,v 1.2 2012/08/29 17:48:36 flameeyes Exp $
EAPI=4
inherit cron pam eutils flag-o-matic user
MY_P=${P/_/-}
DESCRIPTION="A command scheduler with extended capabilities over cron and anacron"
HOMEPAGE="http://fcron.free.fr/"
SRC_URI="http://fcron.free.fr/archives/${MY_P}.src.tar.gz"
LICENSE="GPL-2"
KEYWORDS="~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~sparc ~x86 ~x86-fbsd"
IUSE="debug pam selinux linguas_fr +system-crontab"
DEPEND="selinux? ( sys-libs/libselinux )
pam? ( virtual/pam )"
# see bug 282214 for the reason to depend on bash
RDEPEND="${DEPEND}
app-shells/bash
>=app-misc/editor-wrapper-3
pam? ( >=sys-auth/pambase-20100310 )"
S="${WORKDIR}/${MY_P}"
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_unpack() {
unpack ${A}
cd "${S}"
# respect LDFLAGS
sed -i "s:\(@LIBS@\):\$(LDFLAGS) \1:" Makefile.in || die "sed failed"
sed -i -e 's:/etc/fcrontab:/etc/fcron/fcrontab:' script/check_system_crontabs.sh || die
}
src_configure() {
local myconf
# 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-flags -DDEBUG
# bindir is used just for calling fcronsighup
econf \
--with-cflags="${CFLAGS}" \
--bindir=/usr/libexec \
$(use_with pam) \
$(use_with selinux) \
--sysconfdir=/etc/fcron \
--with-username=fcron \
--with-groupname=fcron \
--with-piddir=/var/run \
--with-spooldir=/var/spool/fcron \
--with-fifodir=/var/run \
--with-fcrondyn=yes \
--disable-checks \
--with-editor=/usr/libexec/editor \
--with-sendmail=/usr/sbin/sendmail \
--with-shell=/bin/sh \
--without-db2man --without-dsssl-dir \
--with-rootname=${rootuser} \
--with-rootgroup=${rootgroup}
}
src_compile() {
emake || die "make failed"
# 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 /usr/bin/fcrontab 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
doins "${FILESDIR}"/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 \
/etc/fcron/fcron.{allow,deny,conf} \
fperms 6770 /var/spool/fcron
fperms 2775 /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.3 fcron
dodoc MANIFEST VERSION "${FILESDIR}"/crontab \
doc/en/txt/{readme,thanks,faq,todo,relnotes,changes}.txt
newdoc files/fcron.conf fcron.conf.sample
dohtml doc/en/HTML/*.html
doman doc/en/man/*.{1,5,8}
for lang in fr; do
use linguas_${lang} || continue
doman -i18n=${lang} doc/${lang}/man/*.{1,5,8} || die
docinto html/${lang}
dohtml doc/${lang}/HTML/*.html || die
done
}
pkg_postinst() {
elog "If it's the first time you install fcron make sure to execute"
elog " emerge --config ${CATEGORY}/${PN}"
elog "to configure the proper settings."
if ! use system-crontab; then
ewarn ""
ewarn "Remember that fcron will *not* use /etc/cron.d in this configuration"
ewarn ""
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."
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, you're no longer free to edit the systab"
elog "at your leisure, at it'll be rewritten the moment the crontabs"
elog "are modified."
/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}."
fcrontab -u systab - <<EOF
0 * * * * rm -f /var/spool/cron/lastrun/cron.hourly
1 3 * * * rm -f /var/spool/cron/lastrun/cron.daily
15 4 * * 6 rm -f /var/spool/cron/lastrun/cron.weekly
30 5 1 * * rm -f /var/spool/cron/lastrun/cron.monthly
EOF
fi
}
|