Summary: A file distribution and fetching system Name: afd Version: @AFD_VERSION@ Release: 1%{?dist} License: GPLv2 Group: Applications/Communications Prefix: @prefix@ Source0: %{name}-%{version}.tar.bz2 Requires: @REQUIRES@ %if 0%{?rhl}%{?fedora}%{?rhel} BuildRequires: @BUILD_REQUIRES_REDHAT@ %else BuildRequires: @BUILD_REQUIRES@ %endif URL: https://www.dwd.de/AFD/ %define distro_style_rpms @DISTRO_STYLE_RPMS@ %define INITDIR @INITDIR@ %define BINARY_OWNER @BINARY_OWNER@ %define BINARY_GROUP @BINARY_GROUP@ %define with_systemd @WITH_SYSTMD@ %define with_afdmon @WITH_AFD_MON_SPEC@ %define cleaned_configure_args @cleaned_configure_args@ %if %{distro_style_rpms} %define prefix %{_prefix} %define bindir %{_bindir} %define sbindir %{_sbindir} %define mandir %{_mandir} %define docdir %{_docdir} %define share %{_datadir} %if %{with_systemd} %define sysconfdir %{_sysconfdir} %else %define sysconfdir %{_sysconfdir}/sysconfig %endif %define rundir %{_rundir} %else %define prefix @prefix@ %define bindir @bindir@ %define sbindir @sbindir@ %define mandir @mandir@ %define docdir @docdir@ %define share @datadir@ %if %{with_systemd} %define sysconfdir /etc %else %define sysconfdir @SYSCONFIGDIR@ %endif %define rundir /run %endif %description The Automatic File Distributor provides a framework for very flexible, non-stop, log and debug-able delivery of an arbitrary amount of files to multiple recipients as expressed in URLs (currently mailing, ftp, ftps, sftp and http supported with the mailto://user@domain and ftp://user:password@host URL conventions). %prep %setup -n %{name}-%{version} %build if [ -x %{bindir}/getconf ]; then CPUS=`getconf _NPROCESSORS_ONLN` fi if test "x$CPUS" = "x" -o "x$CPUS" = "x0"; then CPUS=1 fi %if %{distro_style_rpms} %configure %else ./configure '--libdir=%{prefix}/%{_lib}' %{?cleaned_configure_args} %endif make -j$CPUS %install if [ ! "$RPM_BUILD_ROOT" = "/" ] then rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/%{prefix} $RPM_BUILD_ROOT/%{prefix}/bin $RPM_BUILD_ROOT/%{prefix}/sbin $RPM_BUILD_ROOT/%{prefix}/etc mkdir -p $RPM_BUILD_ROOT/%{INITDIR} %if %{with_systemd} mkdir -p $RPM_BUILD_ROOT/%{sysconfdir}/afd %if %{with_afdmon} mkdir -p $RPM_BUILD_ROOT/%{sysconfdir}/afdmon %endif mkdir -p $RPM_BUILD_ROOT/%{_unitdir} %else mkdir -p $RPM_BUILD_ROOT/%{sysconfdir} %endif else if [ ! -d $RPM_BUILD_ROOT/%{prefix} ] then mkdir -p $RPM_BUILD_ROOT/%{prefix} $RPM_BUILD_ROOT/%{prefix}/bin $RPM_BUILD_ROOT/%{prefix}/sbin $RPM_BUILD_ROOT/%{prefix}/etc else if [ ! -d $RPM_BUILD_ROOT/%{prefix}/bin ] then mkdir $RPM_BUILD_ROOT/%{prefix}/bin fi if [ ! -d $RPM_BUILD_ROOT/%{prefix}/sbin ] then mkdir $RPM_BUILD_ROOT/%{prefix}/sbin fi if [ ! -d $RPM_BUILD_ROOT/%{prefix}/etc ] then mkdir $RPM_BUILD_ROOT/%{prefix}/etc fi fi if [ ! -d $RPM_BUILD_ROOT/%{INITDIR} ] then mkdir -p $RPM_BUILD_ROOT/%{INITDIR} fi %if %{with_systemd} if [ ! -d $RPM_BUILD_ROOT/%{_unitdir} ] then mkdir -p $RPM_BUILD_ROOT/%{_unitdir} fi if [ ! -d $RPM_BUILD_ROOT/%{sysconfdir}/afd ] then mkdir -p $RPM_BUILD_ROOT/%{sysconfdir}/afd fi %if %{with_afdmon} if [ ! -d $RPM_BUILD_ROOT/%{sysconfdir}/afdmon ] then mkdir -p $RPM_BUILD_ROOT/%{sysconfdir}/afdmon fi %endif %else if [ ! -d $RPM_BUILD_ROOT/%{sysconfdir} ] then mkdir -p $RPM_BUILD_ROOT/%{sysconfdir} fi %endif fi make DESTDIR=$RPM_BUILD_ROOT install %if %{with_systemd} install -p -m644 scripts/afd@.service $RPM_BUILD_ROOT/%{_unitdir} install -p -m644 scripts/afd.target $RPM_BUILD_ROOT/%{_unitdir} install -p -m644 scripts/afd_environment.conf $RPM_BUILD_ROOT/%{sysconfdir}/afd %if %{with_afdmon} install -p -m644 scripts/afdmon@.service $RPM_BUILD_ROOT/%{_unitdir} install -p -m644 scripts/afdmon.target $RPM_BUILD_ROOT/%{_unitdir} install -p -m644 scripts/afdmon_environment.conf $RPM_BUILD_ROOT/%{sysconfdir}/afdmon %endif %else install -p -m755 scripts/afd $RPM_BUILD_ROOT/%{INITDIR} install -p -m644 scripts/afd.sysconfig $RPM_BUILD_ROOT/%{sysconfdir}/afd %if %{with_afdmon} install -p -m755 scripts/afdmon $RPM_BUILD_ROOT/%{INITDIR} install -p -m644 scripts/afdmon.sysconfig $RPM_BUILD_ROOT/%{sysconfdir}/afdmon %endif %endif %clean if [ ! "$RPM_BUILD_ROOT" = "/" ] then rm -rf $RPM_BUILD_ROOT fi %post if [ "$1" = 1 ] then %if %{with_systemd} systemctl enable afd.target --no-pager %if %{with_afdmon} systemctl enable afdmon.target --no-pager %endif %else if [ -x sbin/chkconfig ] then sbin/chkconfig --add %{name} %if %{with_afdmon} sbin/chkconfig --add afdmon %endif fi %endif else %if %{with_systemd} if [ -f /tmp/.afd.condrestart ] then AFD_INSTANCES="`grep ^afd@ /tmp/.afd.condrestart`" for afd_instance in $AFD_INSTANCES do if [ ! -f /etc/systemd/system/afd.target.wants/$afd_instance ] then systemctl start $afd_instance if [ $? -eq 0 ] then echo "Conditional start of $afd_instance" else echo "Failed to do conditional start of $afd_instance" fi fi done rm -f /tmp/.afd.condrestart fi systemctl start afd.target --no-pager %if %{with_afdmon} if [ -f /tmp/.afdmon.condrestart ] then AFDMON_INSTANCES="`grep ^afdmon@ /tmp/.afdmon.condrestart`" for afdmon_instance in $AFDMON_INSTANCES do if [ ! -f /etc/systemd/system/afdmon.target.wants/$afdmon_instance ] then systemctl start $afdmon_instance if [ $? -eq 0 ] then echo "Conditional start of $afdmon_instance" else echo "Failed to do conditional start of $afdmon_instance" fi fi done rm -f /tmp/.afdmon.condrestart fi systemctl start afdmon.target --no-pager %endif %else /etc/init.d/afd condrestart > /dev/null 2>&1 || : %if %{with_afdmon} /etc/init.d/afdmon condrestart > /dev/null 2>&1 || : %endif %endif fi %pre if [ "$1" != 1 ] then %if %{with_systemd} systemctl status afd.target --no-pager if [ "$?" = 0 ] then rm -f /tmp/.afd.condrestart cd %{rundir} && ls -d afd@*.service > /tmp/.afd.condrestart systemctl stop afd.target --no-pager fi %if %{with_afdmon} systemctl status afdmon.target --no-pager if [ "$?" = 0 ] then rm -f /tmp/.afdmon.condrestart cd %{rundir} && ls -d afdmon@*.service > /tmp/.afdmon.condrestart systemctl stop afdmon.target --no-pager fi %endif %else if [ -r %{sysconfdir}/afd ] then AFD_USERS="`grep \^AFD_USER_ %{sysconfdir}/afd | cut -d '=' -f2` `grep \^AFD_HA_USER_ %{sysconfdir}/afd | cut -d '=' -f2`" else AFD_USERS="" fi if [ -d /var/lock/subsys ] then SYS_LOCKDIR="/var/lock/subsys" else SYS_LOCKDIR="/var/lock" fi if [ ! "$AFD_USERS" = "" ] then for afduser in $AFD_USERS do USER_HOME_DIR="`grep \^${afduser}: /etc/passwd | cut -d ':' -f 6`" if [ -d $USER_HOME_DIR ] then AFD_WORK_DIR_LIST=`su - $afduser -c 'echo MULTIAFDDIRS:\$MULTI_AFD_DIRS' | grep "^MULTIAFDDIRS:" | cut -d: -f2` if [ "$AFD_WORK_DIR_LIST" = "" ] then su - $afduser -c "afd -c" > /dev/null 2>&1 if [ "$?" = 5 ] then touch $SYS_LOCKDIR/restart_afd.$afduser fi su - $afduser -c "afd -S" if [ $? -eq 0 ] then rm -f $SYS_LOCKDIR/afd.$afduser fi else counter=0 for afddir in $AFD_WORK_DIR_LIST do su - $afduser -c "afd -w $afddir -c" > /dev/null 2>&1 if [ "$?" = 5 ] then touch $SYS_LOCKDIR/restart_afd.$afduser-$counter fi su - $afduser -c "afd -w $afddir -S" if [ $? -eq 0 ] then rm -f $SYS_LOCKDIR/afd.$afduser-$counter fi counter=`expr "$counter" + 1` done fi else echo "Unable to determine status of AFD for user $afduser, since home directory is missing." fi done fi %if %{with_afdmon} if [ -r %{sysconfdir}/afdmon ] then AFDMON_USERS="`grep \^AFDMON_USER_ %{sysconfdir}/afdmon | cut -d '=' -f2` `grep \^AFDMON_HA_USER_ %{sysconfdir}/afdmon | cut -d '=' -f2`" else AFDMON_USERS="" fi if [ ! "$AFDMON_USERS" = "" ] then for afduser in $AFDMON_USERS do USER_HOME_DIR="`grep \^${afduser}: /etc/passwd | cut -d ':' -f 6`" if [ -d $USER_HOME_DIR ] then su - $afduser -c "mafd -c" > /dev/null 2>&1 if [ "$?" = 5 ] then touch $SYS_LOCKDIR/restart_afdmon.$afduser fi su - $afduser -c "mafd -S" if [ $? -eq 0 ] then rm -f $SYS_LOCKDIR/afdmon.$afduser fi else echo "Unable to determine status of AFDMON for user $afduser, since home directory is missing." fi done fi %endif %endif fi %preun if [ "$1" = 0 ] then %if %{with_systemd} %systemd_preun afd.target %if %{with_afdmon} %systemd_preun afdmon.target %endif %else %{INITDIR}/afd stop > /dev/null 2>&1 || : if [ -r %{sysconfdir}/afd ] then AFD_HA_USERS="`grep \^AFD_HA_USER_ %{sysconfdir}/afd | cut -d '=' -f2`" else AFD_HA_USERS="" fi if [ ! "$AFD_HA_USERS" = "" ] then for afduser in $AFD_HA_USERS do USER_HOME_DIR="`grep \^${afduser}: /etc/passwd | cut -d ':' -f 6`" if [ -d $USER_HOME_DIR ] then AFD_WORK_DIR_LIST=`su - $afduser -c 'echo MULTIAFDDIRS:\$MULTI_AFD_DIRS' | grep "^MULTIAFDDIRS:" | cut -d: -f2` if [ "$AFD_WORK_DIR_LIST" = "" ] then su - $afduser -c "afd -S" else for afddir in $AFD_WORK_DIR_LIST do su - $afduser -c "afd -w $afddir -S" done fi else echo "Unable to determine shutdown AFD for user $afduser, since home directory is missing." fi done fi if [ -x sbin/chkconfig ] then sbin/chkconfig --del %{name} fi %if %{with_afdmon} %{INITDIR}/afdmon stop > /dev/null 2>&1 || : if [ -r %{sysconfdir}/afdmon ] then AFDMON_HA_USERS="`grep \^AFDMON_HA_USER_ %{sysconfdir}/afdmon | cut -d '=' -f2`" else AFDMON_HA_USERS="" fi if [ ! "$AFDMON_HA_USERS" = "" ] then for afduser in $AFDMON_HA_USERS do su - $afduser -c "mafd -S" done fi if [ -x sbin/chkconfig ] then sbin/chkconfig --del afdmon fi %endif %endif fi exit 0 %files %defattr(-,root,root) %if %{with_systemd} %{_unitdir}/afd@.service %{_unitdir}/afd.target %config(noreplace) %{sysconfdir}/afd/afd_environment.conf %if %{with_afdmon} %{_unitdir}/afdmon@.service %{_unitdir}/afdmon.target %config(noreplace) %{sysconfdir}/afdmon/afdmon_environment.conf %endif %else %config(noreplace) %{sysconfdir}/afd %{INITDIR}/afd %if %{with_afdmon} %config(noreplace) %{sysconfdir}/afdmon %{INITDIR}/afdmon %endif %endif %doc %{docdir}/* %doc %{mandir}/man1/* %doc %{mandir}/man5/* %{prefix}/bin/* %{prefix}/sbin/* %changelog *Wed Jul 18 2018 Holger Kiehl - Add systemd support. *Mon Feb 07 2011 Holger Kiehl - Handle case when users write some data to stdout or stderr. *Wed Nov 05 2008 Holger Kiehl - Let autotools handle doc and man directories. *Wed Aug 08 2007 Holger Kiehl - Added AFD Monitor boot scripts. *Thu Nov 16 2006 Holger Kiehl - Don't rely on the lock file in /var/lock/subsys, do a real check if AFD is up. - Added support for AFD HA users. *Tue Apr 11 2006 Holger Kiehl - When updating, stop AFD before new binaries are installed. *Thu Sep 8 2005 Holger Kiehl - When installing use use strip by default. *Thu Jul 21 2005 Holger Kiehl - Do not overwrite @SYSCONFIGDIR@/afd. *Sun Jun 26 2005 Holger Kiehl - Include etc directory - Setup init/rc script. *Sat Jun 25 2005 Holger Kiehl - Check for user and group. - Include doc directory. *Wed Jun 22 2005 Holger Kiehl - Adapt to build from make. *Mon May 17 2004 Holger Kiehl - Adapt for version 1.3.x. *Sat Dec 14 2002 Holger Kiehl - AFD requires openmotif. *Sat Mar 2 2002 Holger Kiehl - Use build root so the build version is not installed on the build system. *Sun Feb 10 2002 Holger Kiehl - Default install in /opt *Fri Feb 1 2002 Doug Henry - Initial release