# readahead-collector - readahead-collector
#
# Starts readahead-collector

start on startup

stop on started prefdm or stopped rc RUNLEVEL=[234] or runlevel [016]

kill timeout 60

script
	# do not exit on failed commands
	set +e

. /etc/sysconfig/readahead
. /etc/init.d/functions
cmdline=$(cat /proc/cmdline)

check_autorelabel()
{	
	if [ -f  /.autorelabel ] || strstr "$cmdline" autorelabel; then  	
		# Check SELinux status
		selinuxfs="$(fstab_decode_str `LC_ALL=C awk '/ selinuxfs / { print $2 }' /proc/mounts`)"
		SELINUX_STATE=
		if [ -n "$selinuxfs" ] && [ "`cat /proc/self/attr/current`" != "kernel" ]; then
		    if [ -r "$selinuxfs/enforce" ] ; then
			SELINUX_STATE=`cat "$selinuxfs/enforce"`
		    else
	                # assume enforcing if you can't read it
	                SELINUX_STATE=1
	            fi
		fi
	
		if [ -n "$SELINUX_STATE" ]; then
			return 0
		fi
	fi
	return 1
}

check_readonly()
{
	READONLY=
	if [ -f /etc/sysconfig/readonly-root ]; then
            . /etc/sysconfig/readonly-root
	fi
	strstr "$cmdline" readonlyroot && READONLY=yes

	[ "$READONLY" = "yes" ] && return 0
	return 1
}


	[ -f /.autofsck ] && exit 0	
	[ -f /forcefsck ] && exit 0

	[ "$READAHEAD_COLLECT" != "yes" ] && exit 0

	if [ ! -f /.readahead_collect ]; then
		[ "$READAHEAD_COLLECT_ON_RPM" != "yes" ] && exit 0
                [ -f /var/lib/readahead/early.sorted ] && \    
                        [ /var/lib/readahead/early.sorted -nt /var/lib/rpm/Packages ] && \
                        exit 0
	fi

	if [ -z "$READAHEAD_DELAY_SERVICES" ]; then
	    # do not delay services, so exit, if they will be started
	    for service in auditd ; do
		/sbin/chkconfig --level $runlevel $service >/dev/null 2>&1 && exit 0
	    done
	fi

	check_readonly && exit 0
	check_autorelabel && exit 0
	> /dev/shm/readahead-collector-started
	echo "<6>readahead-collector: starting" > /dev/kmsg
	exec /sbin/readahead-collector -f
end script

pre-stop script
	set +e

	# after prefdm is startup collect some more seconds
	. /etc/sysconfig/readahead
	sleep ${READAHEAD_EXTRA_COLLECT:-10}
	exit 0
end script

post-stop script
	# do not exit on failed commands
	set +e

	. /etc/sysconfig/readahead
	[ -f /dev/shm/readahead-collector-started ] || exit 0
	rm -f /dev/shm/readahead-collector-started
	rm -f /.readahead_collect

	# start delayed services
	runlevel=$(/sbin/runlevel| (read a b; echo $b))
	for service in "$READAHEAD_DELAY_SERVICES" ; do
		if [ -f /var/lock/subsys/delay-$runlevel-$service ]; then
				echo "<6>readahead-collector: starting delayed service $service" > /dev/kmsg
				/sbin/chkconfig --level $runlevel $service on 
				/sbin/service $service start
				rm -f /var/lock/subsys/delay-$runlevel-$service 
		fi
	done
	# process lists
	echo "<6>readahead-collector: sorting" > /dev/kmsg
	/etc/cron.daily/readahead.cron 2>/dev/null 1>&2
	echo "<6>readahead-collector: finished" > /dev/kmsg
	exit 0
end script
