Note: This is a beta release of Red Hat Bugzilla 5.0. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Also email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback here.
Bug 3367 - $INITLOG_ARGS is not used in all calls in rc.sysinit and functions
Summary: $INITLOG_ARGS is not used in all calls in rc.sysinit and functions
Keywords:
Status: CLOSED NEXTRELEASE
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: initscripts
Version: 6.0
Hardware: i386
OS: Linux
medium
medium
Target Milestone: ---
Assignee: David Lawrence
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 1999-06-09 16:02 UTC by asiriann
Modified: 2008-05-01 15:37 UTC (History)
0 users

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 1999-06-17 16:29:35 UTC


Attachments (Terms of Use)

Description asiriann 1999-06-09 16:02:50 UTC
After installing RedHat 6.0 the boot messages are directed
to /var/log/boot.log via syslog(local7.*).  In order to
change the direction of these messages a user would need to
change /etc/rc.d/init.d/functions so that the variable
$INITLOG_ARGS contains --facility and --priority.
Unfortunately the change does not work properly because
there are lines in /etc/rc.d/rc.sysinit
and /etc/rc.d/init.d/functions that call initlog without
use of the variable.  Below are the modified rc.sysinit and
functions files;

rc.sysinit
----------
#!/bin/sh
#
# /etc/rc.d/rc.sysinit - run once at boot time
#
# Taken in part from Miquel van Smoorenburg's bcheckrc.
#

# Rerun ourselves through initlog
if [ -z "$IN_INITLOG" ]; then
 [ -f /sbin/initlog ] && exec /sbin/initlog $INITLOG_ARGS -
r /etc/rc.d/rc.sysinit
fi

# Set the path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

# Read in config data.
if [ -f /etc/sysconfig/network ]; then
    . /etc/sysconfig/network
else
    NETWORKING=no
    HOSTNAME=localhost
fi

# Source functions
. /etc/rc.d/init.d/functions

# Fix console loglevel
/sbin/loglevel $LOGLEVEL

# Load keymap
KEYMAP=
if [ -f /etc/sysconfig/console/default.kmap ]; then
  KEYMAP=/etc/sysconfig/console/default.kmap
else
  . /etc/sysconfig/keyboard
  if [ -n "$KEYTABLE" -a -d "/usr/lib/kbd/keymaps" ]; then
     KEYMAP=$KEYTABLE
  fi
fi
if [ -n "$KEYMAP" ]; then
  # Since this takes in/output from stdin/out, we can't use
initlog
  echo -n "Loading default keymap"
  loadkeys $KEYMAP < /dev/tty0 > /dev/tty0 2>/dev/null && \
     success "Loading default keymap" || failure "Loading
default keymap"
  echo
fi

# Load system font
if [ -x /sbin/setsysfont ]; then
    action "Setting default font" /sbin/setsysfont
fi

# Start up swapping.
action "Activating swap partitions" swapon -a

# Set the hostname.
action "Setting hostname ${HOSTNAME}" hostname ${HOSTNAME}

# Set the NIS domain name
if [ -n "$NISDOMAIN" ]; then
    action "Setting NIS domain name $NISDOMAIN" domainname
$NISDOMAIN
else
    domainname ""
fi

if [ -f /fsckoptions ]; then
	fsckoptions=`cat /fsckoptions`
    else
	fsckoptions=
fi

if [ -f /forcefsck ]; then
	fsckoptions="-f $fsckoptions"
fi

_RUN_QUOTACHECK=0
if [ ! -f /fastboot ]; then
        STRING="Checking root filesystem"
	echo $STRING
	initlog $INITLOG_ARGS -c "fsck  -T -a
$fsckoptions /"
	rc=$?

	if [ "$rc" = "0" ]; then
		success "$STRING"
		echo
	elif [ "$rc" = "1" ]; then
	        passed "$STRING"
		echo
        fi

        # A return of 2 or higher means there were serious
problems.
	if [ $rc -gt 1 ]; then
		failure "$STRING"
		echo
		echo
		echo "*** An error occurred during the file
system check."
		echo "*** Dropping you to a shell; the
system will reboot"
		echo "*** when you leave the shell."

		PS1="(Repair filesystem) \#"; export PS1
		sulogin

		echo "Unmounting file systems"
		umount -a
		mount -n -o remount,ro /
		echo "Automatic reboot in progress."
		reboot
	elif [ "$rc" = "1" ]; then
		_RUN_QUOTACHECK=1
	fi
fi

# check for arguments

mount -t proc /proc /proc

if grep -i nopnp /proc/cmdline >/dev/null ; then
    PNP=
else
    PNP=yes
fi

# set up pnp
if [ -x /sbin/isapnp -a -f /etc/isapnp.conf ]; then
    if [ -n "$PNP" ]; then
	action "Setting up ISA PNP
devices" /sbin/isapnp /etc/isapnp.conf
    else
	action "Skipping ISA PNP configuration at users
request" /bin/true
    fi
fi

# Remount the root filesystem read-write.
action "Remounting root filesystem in read-write mode"
mount -n -o remount,rw /

# Update quotas if fsck was run on /.
if [ X"$_RUN_QUOTACHECK" = X1 -a -x /sbin/quotacheck ]; then
	action "Checking root filesystem
quotas"  /sbin/quotacheck -v /
fi
# XXX Disabled to avoid complaints on root later with
quotaon -a
#if [ -x /sbin/quotaon ]; then
#    action "Turning on user and group quotas for root
filesystem"  /sbin/quotaon /
#fi

if [ -n "$IN_INITLOG" ]; then
    IN_INITLOG=
fi

if [ ! -f /etc/HOSTNAME ]; then
    echo ${HOSTNAME} > /etc/HOSTNAME
fi

# Clear mtab
>/etc/mtab

# Enter root and /proc into mtab.
mount -f /
mount -f /proc

if ! grep -i nomodules /proc/cmdline >/dev/null && [ -
f /proc/ksyms ]; then
    USEMODULES=y
else
    USEMODULES=
fi

# Our modutils don't support it anymore, so we might as
well remove
# the link.
rm -f /lib/modules/preferred
rm -f /lib/modules/default
if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then
    # Get ready for kmod if module support in the kernel
    if [ -z `uname -r | grep "-"` ]; then
       # we're using a new kernel, no preferred needed
       mver=`uname -r`
    else
       ktag="`cat /proc/version`"
       mtag=grep -l "$ktag" /lib/modules/*/.rhkmvtag
2> /dev/null
       if [ -n "$mtag" ]; then
          mver=echo $mtag | sed -e 's,/lib/modules/,,' -
e 's,/.rhkmvtag,,' -e 's,[       ].*$,,'
       fi
       if [ -n "$mver" ]; then
         ln -sf /lib/modules/$mver /lib/modules/default
       fi
    fi
    [ -n "$mver" -a -f "/boot/module-info-$mver" ] && ln -
sf /boot/module-info-$mver /boot/module-info
    [ -n "$mver" -a -f "/boot/System.map-$mver" ] && ln -
sf /boot/System.map-$mver /boot/System.map
    action "Finding module dependencies" depmod -a
fi

# load sound modules
if [ -n "$USEMODULES" ]; then
   if grep -s -q "^alias sound" /etc/conf.modules ; then
      action "Loading sound module" modprobe sound
   fi
   if grep -s -q "^alias midi" /etc/conf.modules ; then
      action "Loading midi module" modprobe midi
   fi
fi

if [ -f /proc/sys/kernel/modprobe ]; then
   if [ -n "$USEMODULES" ]; then
       echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
   else
       echo "" > /proc/sys/kernel/modprobe
   fi
fi

# Add raid devices
if [ -f /proc/mdstat -a -f /etc/raidtab -a -
x /sbin/raidadd ]; then
	action "Starting up RAID devices" raidadd -a

	rc=$?

	if [ $rc = 0 ]; then
		raidrun -a
		rc=$?
	fi

	# A non-zero return means there were problems.
	if [ $rc -gt 0 ]; then
		echo
		echo
		echo "*** An error occurred during the RAID
startup"
		echo "*** Dropping you to a shell; the
system will reboot"
		echo "*** when you leave the shell."

		PS1="(RAID Repair) \#"; export PS1
		sulogin

		echo "Unmounting file systems"
		umount -a
		mount -n -o remount,ro /
		echo "Automatic reboot in progress."
		reboot
	fi
fi

# Check filesystems
if [ ! -f /fastboot ]; then
        STRING="Checking filesystems"
	echo $STRING
	initlog $INITLOG_ARGS -c "fsck  -T -R -A -a
$fsckoptions"
	rc=$?
        if [ "$rc" = "0" ]; then
		success "$STRING"
		echo
	elif [ "$rc" = "1" ]; then
	        passed "$STRING"
		echo
	fi

	# A return of 2 or higher means there were serious
problems.
	if [ $rc -gt 1 ]; then
	        failure "$STRING"
		echo
		echo
		echo "*** An error occurred during the file
system check."
		echo "*** Dropping you to a shell; the
system will reboot"
		echo "*** when you leave the shell."

		PS1="(Repair filesystem) \#"; export PS1
		sulogin

		echo "Unmounting file systems"
		umount -a
		mount -n -o remount,ro /
		echo "Automatic reboot in progress."
		reboot
	elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
		action "Checking filesystem
quotas" /sbin/quotacheck -v -R -a
	fi
fi

# Mount all other filesystems (except for NFS and /proc,
which is already
# mounted). Contrary to standard usage,
# filesystems are NOT unmounted in single user mode.
action "Mounting local filesystems" mount -a -t
nonfs,smbfs,ncpfs,proc

if [ -x /sbin/quotaon ]; then
    action "Turning on user and group quotas for local
filesystems" /sbin/quotaon -a
fi

# Clean out /etc.
rm -f /etc/mtab~ /fastboot /fsckoptions /forcefsck
>/var/run/utmp
touch /var/log/wtmp
chgrp utmp /var/run/utmp /var/log/wtmp
chmod 0664 /var/run/utmp /var/log/wtmp

# Delete pam_console lock and refcount files
rm -f /var/lock/console.lock
rm -f /var/lock/console/*

# Delete UUCP lock files.
rm -f /var/lock/LCK*

# Delete stale subsystem files.
rm -f /var/lock/subsys/*

# Delete stale pid files
rm -f /var/run/*.pid

# Delete X locks
rm -f /tmp/.X*-lock

# Delete Postgres sockets
rm -f /tmp/.s.PGSQL.*

# Set the system clock.
ARC=0
UTC=0
if [ -f /etc/sysconfig/clock ]; then
    . /etc/sysconfig/clock

    # convert old style clock config to new values
    if [ "${CLOCKMODE}" = "GMT" ]; then
	    UTC=true
    elif [ "${CLOCKMODE}" = "ARC" ]; then
	    ARC=true
    fi
fi

CLOCKDEF=""
if [ -x /sbin/hwclock ]; then
    CLOCKFLAGS="--hctosys"
    CLOCK=/sbin/hwclock
    $CLOCK --adjust
else
    CLOCKFLAGS="-a"
    CLOCK=/sbin/clock
fi

case "$UTC" in
  yes|true)
    CLOCKFLAGS="$CLOCKFLAGS -u";
    CLOCKDEF="$CLOCKDEF (utc)";
  ;;
esac

if [ "$CLOCK" = "/sbin/clock" ]; then
 case "$ARC" in
   yes|true)
     CLOCKFLAGS="$CLOCKFLAGS -A";
     CLOCKDEF="$CLOCKDEF (arc)";
   ;;
 esac
fi

$CLOCK $CLOCKFLAGS
action "Setting clock $CLOCKDEF: `date`" date

# Right, now turn on swap in case we swap to files.
swapon -a >/dev/null 2>&1
action "Enabling swap space" /bin/true

# Initialize the serial ports.
if [ -f /etc/rc.d/rc.serial ]; then
	. /etc/rc.d/rc.serial
fi

# Load modules (for backward compatibility with VARs)
if [ -f /etc/rc.d/rc.modules ]; then
	/etc/rc.d/rc.modules
fi

# If a SCSI tape has been detected, load the st module
unconditionally
# since many SCSI tapes don't deal well with st being
loaded and unloaded
if [ -f /proc/scsi/scsi ] && cat /proc/scsi/scsi | grep -
q 'Type:   Sequential-Access' 2>/dev/null ; then
	if cat /proc/devices | grep -qv ' 9 st' ; then
		if [ -n "$USEMODULES" ] ; then
			# Try to load the module.  If it
fails, ignore it...
			modprobe st 2>/dev/null
		fi
	fi
fi

# Set preferred X display manager link
preferred=
if [ -f /etc/sysconfig/desktop ]; then
	if [ -n "`grep GNOME /etc/sysconfig/desktop`" ];
then
		preferred=gdm
	elif [ -n "`grep KDE /etc/sysconfig/desktop`" ];
then
		preferred=kdm
	elif [ -n "`grep
AnotherLevel /etc/sysconfig/desktop`" ]; then
		preferred=xdm
	fi
fi
if [ -n "$preferred" ] && which $preferred >/dev/null 2>&1;
then
	ln -snf ../..`which $preferred` /etc/X11/prefdm
else
        if [ ! -L /etc/X11/prefdm ]; then
		if which gdm >/dev/null 2>&1; then
			ln -snf ../..`which
gdm` /etc/X11/prefdm
		elif which kdm >/dev/null 2>&1; then
			ln -snf ../..`which
kdm` /etc/X11/prefdm
		elif which xdm >/dev/null 2>&1; then
			ln -snf ../..`which
xdm` /etc/X11/prefdm
		fi
	fi
fi

# Now that we have all of our basic modules loaded and the
kernel going,
# let's dump the syslog ring somewhere so we can find it
later
dmesg > /var/log/dmesg


functions
----------

#!/bin/sh
#
# functions	This file contains functions to be used by
most or all
#		shell scripts in the /etc/init.d directory.
#
# Version:	@(#) /etc/init.d/functions 1.01 26-Oct-1993
#
# Author:	Miquel van Smoorenburg,
<miquels@drinkel.nl.mugnet.org>
# Hacked by:    Greg Galloway and Marc Ewing
#

# First set up a default search path.
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"

# Get a sane screen width
[ -z "$COLUMNS" ] && COLUMNS=80

# Read in our configuration
if [ -z "$BOOTUP" ]; then
  if [ -f /etc/sysconfig/init ]; then
      . /etc/sysconfig/init
  else
    # This all seem confusing? Look in /etc/sysconfig/init,
    # or in /usr/doc/initscripts-*/sysconfig.txt
    BOOTUP=color
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[300C\\033[$[${COLUMNS}-
${RES_COL}]D"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \\033[0;39m"
    LOGLEVEL=1
  fi
fi

if [ "$BOOTUP" != "verbose" ]; then
   INITLOG_ARGS="-q"
else
   INITLOG_ARGS=
fi

# A function to start a program.
daemon() {
	# Test syntax.
	gotbase=
	case $1 in
	    '')    echo '$0: Usage: daemon [+/-nicelevel]
{program}'
	           return 1;;
	    --check)
	           shift
		   base=$1
		   gotbase="yes"
		   shift
		   nicelevel=0
		   ;;

	    -*|+*) nicelevel=$1
	shift;;
	     *)    nicelevel=0;;
	esac

        # Save basename.
        [ -z $gotbase ] && base=`basename $1`

        # See if it's already running.
	pid=`pidofproc $base`
	[ -n "$pid" ] && ps h $pid >/dev/null 2>&1 && return

	# make sure it doesn't core dump anywhere; while
this could mask
	# problems with the daemon, it also closes some
security problems
	ulimit -c 0

	# Echo daemon
        [ "$BOOTUP" = "verbose" ] && echo -n " $base"

	# And start it up.
	nice -n $nicelevel initlog $INITLOG_ARGS -c "$*" &&
success "$base startup" || failure "$base startup"
}

# A function to stop a program.
killproc() {
	# Test syntax.
	if [ $# = 0 ]; then
		echo "Usage: killproc {program} [signal]"
		return 1
	fi

	notset=0
	# check for second arg to be kill level
	if [ "$2" != "" ] ; then
		killlevel=$2
	else
		notset=1
		killlevel="-9"
	fi

        # Save basename.
        base=`basename $1`

        # Find pid.
        pid=`pidofproc $base`

        # Kill it.
        if [ "$pid" != "" ] ; then
                [ $BOOTUP = "verbose" ] && echo -n "$base "
		if [ "$notset" = "1" ] ; then
		       if ps h $pid>/dev/null 2>&1; then
			   # TERM first, then KILL if not
dead
			   kill -TERM $pid
			   usleep 100000
			   if ps h $pid >/dev/null 2>&1 ;
then
				sleep 1
				if ps h $pid >/dev/null
2>&1 ; then
				        sleep 3
					if ps h $pid
>/dev/null 2>&1 ; then
					   kill -KILL $pid
					fi
				fi
			   fi
		        fi
			ps h $pid >/dev/null 2>&1 &&
failure "$base shutdown" || success "$base shutdown"
		# use specified level only
		else
		        if ps h $pid >/dev/null 2>&1; then
	                	kill $killlevel $pid &&
success "$base $killlevel" || failure "$base $killlevel"
			fi
		fi
	else
	    failure "$base shutdown"
	fi

        # Remove pid file if any.
	if [ "$notset" = "1" ]; then
            rm -f /var/run/$base.pid
	fi
}

# A function to find the pid of a program.
pidofproc() {
	# Test syntax.
	if [ $# = 0 ] ; then
		echo "Usage: pidofproc {program}"
		return 1
	fi

	# First try "/var/run/*.pid" files
	if [ -f /var/run/$1.pid ] ; then
	        pid=`head -1 /var/run/$1.pid`
	        if [ "$pid" != "" ] ; then
	                echo $pid
	                return 0
	        fi
	fi

	# Next try "pidof"
	pid=`pidof $1`
	if [ "$pid" != "" ] ; then
	        echo $pid
	        return 0
	fi

	# Finally try to extract it from ps
	ps ax | awk 'BEGIN { prog=ARGV[1]; ARGC=1 }
			   { if ((prog == $5) || (("("
prog ")") == $5) ||
			     (("[" prog "]") == $5) ||
			   ((prog ":") == $5)) { print $1 ;
exit 0 } }' $1
}

status() {
	# Test syntax.
	if [ $# = 0 ] ; then
		echo "Usage: status {program}"
		return 1
	fi

	# First try "pidof"
	pid=`pidof $1`
	if [ "$pid" != "" ] ; then
	        echo "$1 (pid $pid) is running..."
	        return 0
        else
                pid=`ps ax | awk 'BEGIN { prog=ARGV[1];
ARGC=1 }
			   { if ((prog == $5) || (("("
prog ")") == $5) ||
			     (("[" prog "]") == $5) ||
			   ((prog ":") == $5)) { print $1 ;
exit 0 } }' $1`
                if [ "$pid" != "" ] ; then
                        echo "$1 (pid $pid) is running..."
                        return 0
                fi
	fi

	# Next try "/var/run/*.pid" files
	if [ -f /var/run/$1.pid ] ; then
	        pid=`head -1 /var/run/$1.pid`
	        if [ "$pid" != "" ] ; then
	                echo "$1 dead but pid file exists"
	                return 1
	        fi
	fi
	# See if /var/lock/subsys/$1 exists
	if [ -f /var/lock/subsys/$1 ]; then
		echo "$1 dead but subsys locked"
		return 2
	fi
	echo "$1 is stopped"
	return 3
}

echo_success() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "[  "
  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
  echo -n "OK"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "  ]"
  return 0
}

echo_failure() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
  echo -n "FAILED"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  return 1
}

echo_passed() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
  echo -n "PASSED"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  return 1
}

# Log that something succeeded
success() {
  if [ -z "$IN_INITLOG" ]; then
     initlog $INITLOG_ARGS -n $0 -s "$1" -e 1
  else
     echo "-n $0 -s \"$1\" -e 1" >&21
  fi
  [ "$BOOTUP" != "verbose" ] && echo_success
  return 0
}

# Log that something failed
failure() {
  rc=$?
  if [ -z "$IN_INITLOG" ]; then
     initlog $INITLOG_ARGS -n $0 -s "$1" -e 2
  else
     echo "-n $0 -s \"$1\" -e 2" >&21
  fi
  [ "$BOOTUP" != "verbose" ] && echo_failure
  return $rc
}

# Log that something passed, but may have had errors.
Useful for fsck
passed() {
  rc=$?
  if [ -z "$IN_INITLOG" ]; then
     initlog $INITLOG_ARGS -n $0 -s "$1" -e 1
  else
     echo "-n $0 -s \"$1\" -e 1" >&21
  fi
  [ "$BOOTUP" != "verbose" ] && echo_passed
  return $rc
}

# Run some action. Log its output.
action() {
  STRING=$1
  echo -n "$STRING "
  shift
  initlog $INITLOG_ARGS -c "$*" && success "$STRING" ||
failure "$STRING"
  rc=$?
  echo
  return $rc
}

# Confirm whether we really want to run this service
confirm() {
  echo -n "Start service $1 (Y)es/(N)o/(C)ontinue? [Y] "
  read answer
  case $answer in
    y|Y|"")
      return 0
    ;;
    c|C)
      return 2
    ;;
    n|N)
      return 1
    ;;
    *)
      confirm $1
      return $?
    ;;
    esac
}

Comment 1 Bill Nottingham 1999-06-17 16:29:59 UTC
fixed in initscripts-4.21, except for the fsck calls...


Note You need to log in before you can comment on or make changes to this bug.