You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							185 lines
						
					
					
						
							4.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							185 lines
						
					
					
						
							4.5 KiB
						
					
					
				| #!/bin/sh | |
| # | |
| # rc		This file is responsible for starting/stopping | |
| #		services when the runlevel changes. | |
| # | |
| #		Optimization feature: | |
| #		A startup script is _not_ run when the service was | |
| #		running in the previous runlevel and it wasn't stopped | |
| #		in the runlevel transition (most Debian services don't | |
| #		have K?? links in rc{1,2,3,4,5} ) | |
| # | |
| # Author:	Miquel van Smoorenburg <miquels@cistron.nl> | |
| #		Bruce Perens <Bruce@Pixar.com> | |
| # | |
| # Version:	@(#)rc  2.78  07-Nov-1999  miquels@cistron.nl | |
| # | |
| 
 | |
| . /etc/default/rcS | |
| export VERBOSE | |
| 
 | |
| . /etc/init.d/functions | |
| . /etc/init.d/globals | |
| 
 | |
| startup_progress() { | |
|     step=$(($step + $step_change)) | |
|     if [ "$num_steps" != "0" ]; then | |
|         progress=$((($step * $progress_size / $num_steps) + $first_step)) | |
|     else | |
|         progress=$progress_size | |
|     fi | |
|     #echo "PROGRESS is $progress $runlevel $first_step + ($step of $num_steps) $step_change $progress_size" | |
|     #if type psplash-write >/dev/null 2>&1; then | |
|     #    TMPDIR=/mnt/.psplash psplash-write "PROGRESS $progress" || true | |
|     #fi | |
|     if [ $progress -gt 0 -a -e /proc/progress ]; then | |
|         echo $(($progress / 2)) > /proc/progress | |
|     elif [ $progress -gt 0 -a -e /proc/vfd ]; then | |
|         echo Loading $(($progress / 2)) % > /proc/vfd | |
|     elif [ $progress -gt 0 -a -e /usr/bin/displayvfd ]; then | |
|         displayvfd -s 18 -t "Booting $progress" | |
|     elif [ $progress -gt 0 -a -e /dev/mcu ]; then | |
|         echo $(($progress / 2)) > /dev/mcu | |
|     fi | |
| } | |
| 
 | |
| 
 | |
| # | |
| # Start script or program. | |
| # | |
| startup() { | |
|   # Handle verbosity | |
|   [ "$VERBOSE" = very ] && echo "INIT: Running $@..." | |
|   LOGINFO "running $@" | |
| 
 | |
|   case "$1" in | |
| 	*.sh) | |
| 		# Source shell script for speed. | |
| 		( | |
| 			trap - INT QUIT TSTP | |
| 			scriptname=$1 | |
| 			shift | |
| 			. $scriptname | |
| 		) | |
| 		;; | |
| 	*) | |
| 		"$@" | |
| 		;; | |
|   esac | |
|   startup_progress | |
| } | |
| 
 | |
|   # Ignore CTRL-C only in this shell, so we can interrupt subprocesses. | |
|   trap ":" INT QUIT TSTP | |
| 
 | |
|   # Set onlcr to avoid staircase effect. | |
|   stty onlcr 0>&1 | |
| 
 | |
|   # Limit stack size for startup scripts | |
|   [ "$STACK_SIZE" == "" ] || ulimit -S -s $STACK_SIZE | |
| 
 | |
|   # Now find out what the current and what the previous runlevel are. | |
| 
 | |
|   runlevel=$RUNLEVEL | |
|   # Get first argument. Set new runlevel to this argument. | |
|   [ "$1" != "" ] && runlevel=$1 | |
|   if [ "$runlevel" = "" ] | |
|   then | |
| 	echo "Usage: $0 <runlevel>" >&2 | |
| 	exit 1 | |
|   fi | |
|   previous=$PREVLEVEL | |
|   [ "$previous" = "" ] && previous=N | |
| 
 | |
|   export runlevel previous | |
| 
 | |
|   # Is there an rc directory for this new runlevel? | |
|   if [ -d /etc/rc$runlevel.d ] | |
|   then | |
| 	# Find out where in the progress bar the initramfs got to. | |
| 	PROGRESS_STATE=0 | |
| 	#if [ -f /dev/.initramfs/progress_state ]; then | |
| 	#    . /dev/.initramfs/progress_state | |
| 	#fi | |
| 
 | |
| 	# Split the remaining portion of the progress bar into thirds | |
| 	progress_size=$(((100 - $PROGRESS_STATE) / 3)) | |
| 
 | |
| 	case "$runlevel" in | |
| 		0|6) | |
| 			# Count down from -100 to 0 and use the entire bar | |
| 			first_step=-100 | |
| 			progress_size=100 | |
| 			step_change=1 | |
| 			;; | |
| 	        S) | |
| 			# Begin where the initramfs left off and use 2/3 | |
| 			# of the remaining space | |
| 			first_step=$PROGRESS_STATE | |
| 			progress_size=$(($progress_size * 2)) | |
| 			step_change=1 | |
| 			;; | |
| 		*) | |
| 			# Begin where rcS left off and use the final 1/3 of | |
| 			# the space (by leaving progress_size unchanged) | |
| 			first_step=$(($progress_size * 2 + $PROGRESS_STATE)) | |
| 			step_change=1 | |
| 			;; | |
| 	esac | |
| 
 | |
| 	num_steps=0 | |
| 	for s in /etc/rc$runlevel.d/[SK]*; do | |
|             case "${s##/etc/rc$runlevel.d/S??}" in | |
|                 gdm|xdm|kdm|reboot|halt) | |
|                     break | |
|                     ;; | |
|             esac | |
|             num_steps=$(($num_steps + 1)) | |
|         done | |
|         step=0 | |
| 
 | |
| 	# First, run the KILL scripts. | |
| 	if [ $previous != N ] | |
| 	then | |
| 		for i in /etc/rc$runlevel.d/K[0-9][0-9]* | |
| 		do | |
| 			# Check if the script is there. | |
| 			[ ! -f $i ] && continue | |
| 
 | |
| 			# Stop the service. | |
| 			startup $i stop | |
| 		done | |
| 	fi | |
| 
 | |
| 	# Now run the START scripts for this runlevel. | |
| 	for i in /etc/rc$runlevel.d/S* | |
| 	do | |
| 		[ ! -f $i ] && continue | |
| 
 | |
| 		if [ $previous != N ] && [ $previous != S ] | |
| 		then | |
| 			# | |
| 			# Find start script in previous runlevel and | |
| 			# stop script in this runlevel. | |
| 			# | |
| 			suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9]} | |
| 			stop=/etc/rc$runlevel.d/K[0-9][0-9]$suffix | |
| 			previous_start=/etc/rc$previous.d/S[0-9][0-9]$suffix | |
| 			# | |
| 			# If there is a start script in the previous level | |
| 			# and _no_ stop script in this level, we don't | |
| 			# have to re-start the service. | |
| 			# | |
| 			[ -f $previous_start ] && [ ! -f $stop ] && continue | |
| 		fi | |
| 		case "$runlevel" in | |
| 			0|6) | |
| 				# Runlevels 0 and 6 are always stop runlevels | |
| 				startup $i stop | |
| 				;; | |
| 			*) | |
| 				startup $i start | |
| 				;; | |
| 		esac | |
| 	done | |
|   fi
 | |
| 
 |