# Copyright 1999-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: cron.eclass # @MAINTAINER: # maintainer-needed@gentoo.org # @AUTHOR: # Original Author: Aaron Walker # @SUPPORTED_EAPIS: 7 8 # @BLURB: Some functions for cron # @DESCRIPTION: # Purpose: The main motivation for this eclass was to simplify # the jungle known as src_install() in cron ebuilds. Using these # functions also ensures that permissions are *always* reset, # preventing the accidental installation of files with wrong perms. # # NOTE on defaults: the default settings in the below functions were # chosen based on the most common setting among cron ebuilds. case ${EAPI} in 7|8) ;; *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac if [[ -z ${_CRON_ECLASS} ]]; then _CRON_ECLASS=1 inherit flag-o-matic RDEPEND=">=sys-process/cronbase-0.3.2" for pn in bcron cronie dcron fcron; do [[ ${pn} == "${PN}" ]] || RDEPEND+=" !sys-process/${pn}" done unset pn # @FUNCTION: docrondir # @USAGE: [dir] [perms] # @DESCRIPTION: # Creates crontab directory # # Both arguments are optional. Everything after 'dir' is considered # the permissions (same format as insopts). # # ex: docrondir /some/dir -m 0770 -o 0 -g cron # docrondir /some/dir (uses default perms) # docrondir -m0700 (uses default dir) docrondir() { # defaults local perms="-m0750 -o 0 -g cron" local dir="/var/spool/cron/crontabs" if [[ -n $1 ]] ; then case $1 in */*) dir="$1" shift [[ -n $1 ]] && perms="$@" ;; *) perms="$@" ;; esac fi ( diropts ${perms} keepdir ${dir} ) } # @FUNCTION: docron # @USAGE: [exe] [perms] # @DESCRIPTION: # Install cron executable # # Both arguments are optional. # # ex: docron -m 0700 -o 0 -g root ('exe' defaults to "cron") # docron crond -m 0110 docron() { local cron="cron" local perms="-m 0750 -o 0 -g wheel" if [[ -n $1 ]] ; then case $1 in -*) perms="$@" ;; *) cron="$1" shift [[ -n $1 ]] && perms="$@" ;; esac fi ( exeopts ${perms} exeinto /usr/sbin doexe ${cron} ) } # @FUNCTION: docrontab # @USAGE: [exe] [perms] # @DESCRIPTION: # Install crontab executable # # Uses same semantics as docron. docrontab() { local crontab="crontab" local perms="-m 4750 -o 0 -g cron" if [[ -n $1 ]] ; then case $1 in -*) perms="$@" ;; *) crontab=$1 shift [[ -n $1 ]] && perms="$@" ;; esac fi ( exeopts ${perms} exeinto /usr/bin doexe ${crontab} ) # users expect /usr/bin/crontab to exist... if [[ ${crontab##*/} != crontab ]] ; then dosym ${crontab##*/} /usr/bin/crontab || \ die "failed to create /usr/bin/crontab symlink" fi } # @FUNCTION: cron_pkg_postinst # @DESCRIPTION: # Outputs a message about system crontabs # daemons that have a true system crontab set CRON_SYSTEM_CRONTAB="yes" cron_pkg_postinst() { # daemons that have a true system crontab set CRON_SYSTEM_CRONTAB="yes" if [[ ${CRON_SYSTEM_CRONTAB:-no} != yes ]] ; then einfo "To activate /etc/cron.{hourly|daily|weekly|monthly} please run:" einfo " crontab /etc/crontab" einfo einfo "!!! That will replace root's current crontab !!!" einfo fi einfo "You may wish to read the Gentoo Linux Cron Guide, which can be" einfo "found online at:" einfo " https://wiki.gentoo.org/wiki/Cron" } fi EXPORT_FUNCTIONS pkg_postinst