Solved

Red Hat Enterprise 6 - No status after restarting services

Posted on 2015-01-28
34
299 Views
Last Modified: 2015-01-31
This is an odd question, but it is bothering me.

I have a RHEL 6 server I just installed, and installed DHCP.  When I start the dhcpd service I get the following:

[root@nswcpddhcp dhcp]# service dhcpd restart
Shutting down dhcpd: dhcpd
Starting dhcpd:  dhcpd


But I expect to see:

[root@nswcpddhcp dhcp]# service dhcpd restart
Shutting down dhcpd: dhcpd  [OK]
Starting dhcpd:  dhcpd [OK]

It is impossible to know when it fails to restart since it never shows the [FAILED] or [OK] status.

Does anyone have any idea why this is not showing?  Just in case it matters, I am logged into the system via ssh.
0
Comment
Question by:savone
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 15
  • 13
  • 4
  • +1
34 Comments
 
LVL 13

Expert Comment

by:Sandy
ID: 40577175
have you checked the port listening  ?

#netstat -lntp

TY/SA
0
 
LVL 23

Author Comment

by:savone
ID: 40577180
Sandy,
I think (hope) you misunderstood the question.  I just need to know why [OK] is not showing up.  The service is starting and functioning fine.

I have a piece of IPAM software that needs to see the [OK] when the service restarts in order to know it restarted the program.
0
 
LVL 13

Expert Comment

by:Sandy
ID: 40577190
check the "echo" parameter in dhcp service function then.

TY/SA
0
Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

 
LVL 62

Expert Comment

by:gheist
ID: 40577299
ask digit support to improve startup script. Editing yourself is counterproductive as you need to follow up each change with your customization.
Script can start multiple DHCPD-s, so a OK expectation is not adequate in situation either.
0
 
LVL 29

Expert Comment

by:Jan Springer
ID: 40577426
that information is output by the /etc/init.d/dhcpd script.  post your script and we'll add the information.
0
 
LVL 62

Expert Comment

by:gheist
ID: 40577431
That is RedHat produce that asker paid support for... It would be immoral to fix something that is bought in promised working condition.
0
 
LVL 29

Expert Comment

by:Jan Springer
ID: 40577437
morals have nothing to do with it.  the author can go back to RH or just edit the file.  the latter is easier.
0
 
LVL 23

Author Comment

by:savone
ID: 40577684
Well, I did some research on my own.  It looks like the /etc/init.d/dhcpd file includes a function file (/etc/rc.d/init.d/functions) that holds a function called echo_success that seems to do what I expect.  The problem is the dhcpd init script never calls any of the functions in the included file.  Seems odd ISC or RHEL would bother including a file they weren't going to reference.

Here is the /etc/init.d/dhcpd file:

#!/bin/sh
#
### BEGIN INIT INFO
# Provides: dhcpd
# Default-Start:
# Default-Stop:
# Should-Start: portreserve
# Required-Start: $network
# Required-Stop:
# Short-Description: Start and stop the DHCP server
# Description: dhcpd provides the Dynamic Host Configuration Protocol (DHCP)
#              server.
### END INIT INFO
#
# The fields below are left around for legacy tools (will remove later).
#
# chkconfig: - 65 35
# description: dhcpd provides the Dynamic Host Configuration Protocol (DHCP) \
#              server
# processname: dhcpd
# config: /etc/dhcp/dhcpd.conf
# config: /var/lib/dhcpd/dhcpd.leases
# pidfile: /var/run/dhcpd.pid

. /etc/rc.d/init.d/functions

RETVAL=0

prog=dhcpd
user=dhcpd
group=dhcpd
exec=/usr/sbin/dhcpd
lockfile=/var/lock/subsys/dhcpd
pidfile=/var/run/dhcpd.pid
statedir=/var/lib/dhcpd

[ -f /etc/sysconfig/dhcpd ] && . /etc/sysconfig/dhcpd

# if the user specified a different config file, make sure we reference it
findConfig() {
    for arg in $DHCPDARGS ; do
        if [ "$found" = 1 ]; then
            [ -f "$arg" ] && echo "$arg"
            return
        fi
        if [ "$arg" = "-cf" ]; then
            found=1
            continue
        fi
    done
    echo "/etc/dhcp/dhcpd.conf"
}

config="$(findConfig "$DHCPDARGS")"

if [ ! -f $statedir/dhcpd.leases ] ; then
    mkdir -p $statedir
    touch $statedir/dhcpd.leases
    [ -x /sbin/restorecon ] && [ -d /selinux ] && /sbin/restorecon $statedir/dhcpd.leases >/dev/null 2>&1
fi

configtest() {
    [ -x $exec ] || return 5
    [ -f $config ] || return 6
    $exec -q -t -cf $config
    RETVAL=$?
    if [ $RETVAL -eq 1 ]; then
        $exec -t -cf $config
    else
        echo "Syntax: OK" >&2
    fi
    return $RETVAL
}

rh_status() {
    status -p $pidfile $exec
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

start() {
    [ `id -u` -eq 0 ] || return 4
    [ -x $exec ] || return 5
    [ -f $config ] || return 6

    rh_status_q && return 0

    echo -n $"Starting $prog: "

    # tell portreserve to release the port
    [ -x /sbin/portrelease ] && /sbin/portrelease dhcpd &>/dev/null || :

    daemon --pidfile=$pidfile $exec -user $user -group $group $DHCPDARGS 2>/dev/null
    RETVAL=$?

    echo
    [ $RETVAL -eq 0 ] && touch $lockfile
    return $RETVAL
}

stop() {
    [ `id -u` -eq 0 ] || return 4

    rh_status_q || return 0

    echo -n $"Shutting down $prog: "
    killproc -p $pidfile $prog
    RETVAL=$?

    echo
    [ $RETVAL -eq 0 ] && rm -f $lockfile
    return $RETVAL
}

usage() {
    echo $"Usage: $0 {start|stop|restart|force-reload|condrestart|try-restart|configtest|status}"
}

if [ $# -gt 1 ]; then
    exit 2
fi

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart|force-reload)
        stop ; start
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        stop ; start
        ;;
    reload)
        usage
        # unimplemented feature
        exit 3
        ;;
    configtest)
        configtest
        ;;
    status)
        rh_status
        ;;
    *)
        usage
        exit 2
        ;;
esac

exit $?

Open in new window




And here is the referenced function file:

# -*-Shell-script-*-
#
# functions	This file contains functions to be used by most or all
#		shell scripts in the /etc/init.d directory.
#

TEXTDOMAIN=initscripts

# Make sure umask is sane
umask 022

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

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

[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="$(/sbin/consoletype)"

if [ -f /etc/sysconfig/i18n -a -z "${NOLOCALE:-}" -a -z "${LANGSH_SOURCED:-}" ] ; then
  . /etc/profile.d/lang.sh 2>/dev/null
  # avoid propagating LANGSH_SOURCED any further
  unset LANGSH_SOURCED
fi

# 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[${RES_COL}G"
    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
  if [ "$CONSOLETYPE" = "serial" ]; then
      BOOTUP=serial
      MOVE_TO_COL=
      SETCOLOR_SUCCESS=
      SETCOLOR_FAILURE=
      SETCOLOR_WARNING=
      SETCOLOR_NORMAL=
  fi
fi

# Interpret escape sequences in an fstab entry
fstab_decode_str() {
	fstab-decode echo "$1"
}

# Check if any of $pid (could be plural) are running
checkpid() {
	local i

	for i in $* ; do
		[ -d "/proc/$i" ] && return 0
	done
	return 1
}

__readlink() {
    ls -bl "$@" 2>/dev/null| awk '{ print $NF }'
}

__fgrep() {
    s=$1
    f=$2
    while read line; do
	if strstr "$line" "$s"; then
	    echo $line
	    return 0
	fi
    done < $f
    return 1
}

# __umount_loop awk_program fstab_file first_msg retry_msg retry_umount_args
# awk_program should process fstab_file and return a list of fstab-encoded
# paths; it doesn't have to handle comments in fstab_file.
__umount_loop() {
	local remaining sig=
	local retry=3 count

	remaining=$(LC_ALL=C awk "/^#/ {next} $1" "$2" | sort -r)
	while [ -n "$remaining" -a "$retry" -gt 0 ]; do
		if [ "$retry" -eq 3 ]; then
			action "$3" fstab-decode umount $remaining
		else
			action "$4" fstab-decode umount $5 $remaining
		fi
		count=4
		remaining=$(LC_ALL=C awk "/^#/ {next} $1" "$2" | sort -r)
		while [ "$count" -gt 0 ]; do
			[ -z "$remaining" ] && break
			count=$(($count-1))
			usleep 500000
			remaining=$(LC_ALL=C awk "/^#/ {next} $1" "$2" | sort -r)
		done
		[ -z "$remaining" ] && break
		kill $sig $(fstab-decode /sbin/fuser -m $remaining 2>/dev/null  | sed -e "s/\b$$\b//g") > /dev/null
		sleep 3
		retry=$(($retry -1))
		sig=-9
	done
}

# Similar to __umount loop above, specialized for loopback devices
__umount_loopback_loop() {
	local remaining devremaining sig=
	local retry=3

	remaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/mounts)
	devremaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" {print $1}' /proc/mounts)
	while [ -n "$remaining" -a "$retry" -gt 0 ]; do
		if [ "$retry" -eq 3 ]; then
			action $"Unmounting loopback filesystems: " \
				fstab-decode umount $remaining
		else
			action $"Unmounting loopback filesystems (retry):" \
				fstab-decode umount $remaining
		fi
		for dev in $devremaining ; do
			losetup $dev > /dev/null 2>&1 && \
				action $"Detaching loopback device $dev: " \
				losetup -d $dev
		done
		remaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/mounts)
		devremaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" {print $1}' /proc/mounts)
		[ -z "$remaining" ] && break
		fstab-decode /sbin/fuser -k -m $sig $remaining >/dev/null
		sleep 3
		retry=$(($retry -1))
		sig=-9
	done
}

# __proc_pids {program} [pidfile]
# Set $pid to pids from /var/run* for {program}.  $pid should be declared
# local in the caller.
# Returns LSB exit code for the 'status' action.
__pids_var_run() {
	local base=${1##*/}
	local pid_file=${2:-/var/run/$base.pid}
	local pid_dir=$(/usr/bin/dirname $pid_file)
	local binary=$3

	[ -d "$pid_dir" -a ! -r "$pid_dir" ] && return 4

	pid=
	if [ -f "$pid_file" ] ; then
	        local line p

		[ ! -r "$pid_file" ] && return 4 # "user had insufficient privilege"
		while : ; do
			read line
			[ -z "$line" ] && break
			for p in $line ; do
				if [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] ; then
					if [ -n "$binary" ] ; then
						local b=$(readlink /proc/$p/exe | sed -e 's/\s*(deleted)$//')
						[ "$b" != "$binary" ] && continue
					fi
					pid="$pid $p"
				fi
			done
		done < "$pid_file"

	        if [ -n "$pid" ]; then
	                return 0
	        fi
		return 1 # "Program is dead and /var/run pid file exists"
	fi
	return 3 # "Program is not running"
}

# Output PIDs of matching processes, found using pidof
__pids_pidof() {
	pidof -c -o $$ -o $PPID -o %PPID -x "$1" || \
		pidof -c -o $$ -o $PPID -o %PPID -x "${1##*/}"
}


# A function to start a program.
daemon() {
	# Test syntax.
	local gotbase= force= nicelevel corelimit
	local pid base= user= nice= bg= pid_file=
	local cgroup=
	nicelevel=0
	while [ "$1" != "${1##[-+]}" ]; do
	  case $1 in
	    '')    echo $"$0: Usage: daemon [+/-nicelevel] {program}"
	           return 1;;
	    --check)
		   base=$2
		   gotbase="yes"
		   shift 2
		   ;;
	    --check=?*)
	    	   base=${1#--check=}
		   gotbase="yes"
		   shift
		   ;;
	    --user)
		   user=$2
		   shift 2
		   ;;
	    --user=?*)
	           user=${1#--user=}
		   shift
		   ;;
	    --pidfile)
		   pid_file=$2
		   shift 2
		   ;;
	    --pidfile=?*)
		   pid_file=${1#--pidfile=}
		   shift
		   ;;
	    --force)
	    	   force="force"
		   shift
		   ;;
	    [-+][0-9]*)
	    	   nice="nice -n $1"
	           shift
		   ;;
	    *)     echo $"$0: Usage: daemon [+/-nicelevel] {program}"
	           return 1;;
	  esac
	done

        # Save basename.
        [ -z "$gotbase" ] && base=${1##*/}

        # See if it's already running. Look *only* at the pid file.
	__pids_var_run "$base" "$pid_file"

	[ -n "$pid" -a -z "$force" ] && return

	# make sure it doesn't core dump anywhere unless requested
	corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}"
	
	# if they set NICELEVEL in /etc/sysconfig/foo, honor it
	[ -n "${NICELEVEL:-}" ] && nice="nice -n $NICELEVEL"
	
	# if they set CGROUP_DAEMON in /etc/sysconfig/foo, honor it
	if [ -n "${CGROUP_DAEMON}" ]; then
		if [ ! -x /bin/cgexec ]; then
			echo -n "Cgroups not installed"; warning
			echo
		else
			cgroup="/bin/cgexec";
			for i in $CGROUP_DAEMON; do
				cgroup="$cgroup -g $i";
			done
		fi
	fi

	# Echo daemon
        [ "${BOOTUP:-}" = "verbose" -a -z "${LSB:-}" ] && echo -n " $base"

	# And start it up.
	if [ -z "$user" ]; then
	   $cgroup $nice /bin/bash -c "$corelimit >/dev/null 2>&1 ; $*"
	else
	   $cgroup $nice runuser -s /bin/bash $user -c "$corelimit >/dev/null 2>&1 ; $*"
	fi

	[ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"
}

# A function to stop a program.
killproc() {
	local RC killlevel= base pid pid_file= delay try binary=

	RC=0; delay=3; try=0
	# Test syntax.
	if [ "$#" -eq 0 ]; then
		echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]"
		return 1
	fi
	if [ "$1" = "-p" ]; then
		pid_file=$2
		shift 2
	fi
	if [ "$1" = "-b" ]; then
		if [ -z $pid_file ]; then
			echo $"-b option can be used only with -p"
			echo $"Usage: killproc -p pidfile -b binary program"
			return 1
		fi
		binary=$2
		shift 2
	fi
	if [ "$1" = "-d" ]; then
		delay=$(echo $2 | awk -v RS=' ' -v IGNORECASE=1 '{if($1!~/^[0-9.]+[smhd]?$/) exit 1;d=$1~/s$|^[0-9.]*$/?1:$1~/m$/?60:$1~/h$/?60*60:$1~/d$/?24*60*60:-1;if(d==-1) exit 1;delay+=d*$1} END {printf("%d",delay+0.5)}')
		if [ "$?" -eq 1 ]; then
			echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]"
			return 1
		fi
		shift 2
	fi
        

	# check for second arg to be kill level
	[ -n "${2:-}" ] && killlevel=$2

        # Save basename.
        base=${1##*/}

        # Find pid.
	__pids_var_run "$1" "$pid_file" "$binary"
	RC=$?
	if [ -z "$pid" ]; then
		if [ -z "$pid_file" ]; then
			pid="$(__pids_pidof "$1")"
		else
			[ "$RC" = "4" ] && { failure $"$base shutdown" ; return $RC ;}
		fi
	fi

        # Kill it.
        if [ -n "$pid" ] ; then
                [ "$BOOTUP" = "verbose" -a -z "${LSB:-}" ] && echo -n "$base "
		if [ -z "$killlevel" ] ; then
		       if checkpid $pid 2>&1; then
			   # TERM first, then KILL if not dead
			   kill -TERM $pid >/dev/null 2>&1
			   usleep 100000
			   if checkpid $pid ; then
				try=0
				while [ $try -lt $delay ] ; do
					checkpid $pid || break
					sleep 1
					let try+=1
				done
				if checkpid $pid ; then
					kill -KILL $pid >/dev/null 2>&1
					usleep 100000
				fi
			   fi
		        fi
			checkpid $pid
			RC=$?
			[ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown"
			RC=$((! $RC))
		# use specified level only
		else
		        if checkpid $pid; then
	                	kill $killlevel $pid >/dev/null 2>&1
				RC=$?
				[ "$RC" -eq 0 ] && success $"$base $killlevel" || failure $"$base $killlevel"
			elif [ -n "${LSB:-}" ]; then
				RC=7 # Program is not running
			fi
		fi
	else
		if [ -n "${LSB:-}" -a -n "$killlevel" ]; then
			RC=7 # Program is not running
		else
			failure $"$base shutdown"
			RC=0
		fi
	fi

        # Remove pid file if any.
	if [ -z "$killlevel" ]; then
            rm -f "${pid_file:-/var/run/$base.pid}"
	fi
	return $RC
}

# A function to find the pid of a program. Looks *only* at the pidfile
pidfileofproc() {
	local pid

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

	__pids_var_run "$1"
	[ -n "$pid" ] && echo $pid
	return 0
}

# A function to find the pid of a program.
pidofproc() {
	local RC pid pid_file=

	# Test syntax.
	if [ "$#" = 0 ]; then
		echo $"Usage: pidofproc [-p pidfile] {program}"
		return 1
	fi
	if [ "$1" = "-p" ]; then
		pid_file=$2
		shift 2
	fi
	fail_code=3 # "Program is not running"

	# First try "/var/run/*.pid" files
	__pids_var_run "$1" "$pid_file"
	RC=$?
	if [ -n "$pid" ]; then
		echo $pid
		return 0
	fi

	[ -n "$pid_file" ] && return $RC
	__pids_pidof "$1" || return $RC
}

status() {
	local base pid lock_file= pid_file= binary=

	# Test syntax.
	if [ "$#" = 0 ] ; then
		echo $"Usage: status [-p pidfile] {program}"
		return 1
	fi
	if [ "$1" = "-p" ]; then
		pid_file=$2
		shift 2
	fi
	if [ "$1" = "-l" ]; then
		lock_file=$2
		shift 2
	fi
	if [ "$1" = "-b" ]; then
		if [ -z $pid_file ]; then
			echo $"-b option can be used only with -p"
			echo $"Usage: status -p pidfile -b binary program"
			return 1
		fi
		binary=$2
		shift 2
	fi
	base=${1##*/}

	# First try "pidof"
	__pids_var_run "$1" "$pid_file" "$binary"
	RC=$?
	if [ -z "$pid_file" -a -z "$pid" ]; then
		pid="$(__pids_pidof "$1")"
	fi
	if [ -n "$pid" ]; then
	        echo $"${base} (pid $pid) is running..."
	        return 0
	fi

	case "$RC" in
		0)
			echo $"${base} (pid $pid) is running..."
			return 0
			;;
		1)
	                echo $"${base} dead but pid file exists"
	                return 1
			;;
		4)
			echo $"${base} status unknown due to insufficient privileges."
			return 4
			;;
	esac
	if [ -z "${lock_file}" ]; then
		lock_file=${base}
	fi
	# See if /var/lock/subsys/${lock_file} exists
	if [ -f /var/lock/subsys/${lock_file} ]; then
		echo $"${base} dead but subsys locked"
		return 2
	fi
	echo $"${base} 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 "]"
  echo -ne "\r"
  return 0
}

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

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

echo_warning() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
  echo -n $"WARNING"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 1
}

# Inform the graphical boot of our current state
update_boot_stage() {
  if [ -x /bin/plymouth ]; then
      /bin/plymouth --update="$1"
  fi
  return 0
}

# Log that something succeeded
success() {
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success
  return 0
}

# Log that something failed
failure() {
  local rc=$?
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_failure
  [ -x /bin/plymouth ] && /bin/plymouth --details
  return $rc
}

# Log that something passed, but may have had errors. Useful for fsck
passed() {
  local rc=$?
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_passed
  return $rc
}  

# Log a warning
warning() {
  local rc=$?
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_warning
  return $rc
}  

# Run some action. Log its output.
action() {
  local STRING rc

  STRING=$1
  echo -n "$STRING "
  shift
  "$@" && success $"$STRING" || failure $"$STRING"
  rc=$?
  echo
  return $rc
}

# returns OK if $1 contains $2
strstr() {
  [ "${1#*$2*}" = "$1" ] && return 1
  return 0
}

# Confirm whether we really want to run this service
confirm() {
  [ -x /bin/plymouth ] && /bin/plymouth --hide-splash
  while : ; do 
      echo -n $"Start service $1 (Y)es/(N)o/(C)ontinue? [Y] "
      read answer
      if strstr $"yY" "$answer" || [ "$answer" = "" ] ; then
         return 0
      elif strstr $"cC" "$answer" ; then
	 rm -f /var/run/confirm
	 [ -x /bin/plymouth ] && /bin/plymouth --show-splash
         return 2
      elif strstr $"nN" "$answer" ; then
         return 1
      fi
  done
}

# resolve a device node to its major:minor numbers in decimal or hex
get_numeric_dev() {
(
    fmt="%d:%d"
    if [ "$1" == "hex" ]; then
        fmt="%x:%x"
    fi
    ls -lH "$2" | awk '{ sub(/,/, "", $5); printf("'"$fmt"'", $5, $6); }'
) 2>/dev/null
}

# Check whether file $1 is a backup or rpm-generated file and should be ignored
is_ignored_file() {
    case "$1" in
	*~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave)
	    return 0
	    ;;
    esac
    return 1
}

# Evaluate shvar-style booleans
is_true() {
    case "$1" in
	[tT] | [yY] | [yY][eE][sS] | [tT][rR][uU][eE])
	return 0
	;;
    esac
    return 1
}

# Evaluate shvar-style booleans
is_false() {
    case "$1" in
	[fF] | [nN] | [nN][oO] | [fF][aA][lL][sS][eE])
	return 0
	;;
    esac
    return 1
}

# Apply sysctl settings, including files in /etc/sysctl.d
apply_sysctl() {
    sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1
    for file in /etc/sysctl.d/* ; do
        is_ignored_file "$file" && continue
        test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1
    done
}

key_is_random() {
    [ "$1" = "/dev/urandom" -o "$1" = "/dev/hw_random" \
	-o "$1" = "/dev/random" ]
}

find_crypto_mount_point() {
    local fs_spec fs_file fs_vfstype remaining_fields
    local fs
    while read fs_spec fs_file remaining_fields; do
	if [ "$fs_spec" = "/dev/mapper/$1" ]; then
	    echo $fs_file
	    break;
	fi
    done < /etc/fstab
}

# Because of a chicken/egg problem, init_crypto must be run twice.  /var may be
# encrypted but /var/lib/random-seed is needed to initialize swap.
init_crypto() {
    local have_random dst src key opt mode owner params makeswap skip arg opt
    local param value rc ret mke2fs mdir prompt mount_point

    ret=0
    have_random=$1
    while read dst src key opt; do
	[ -z "$dst" -o "${dst#\#}" != "$dst" ] && continue
        [ -b "/dev/mapper/$dst" ] && continue;
	if [ "$have_random" = 0 ] && key_is_random "$key"; then
	    continue
	fi
	if [ -n "$key" -a "x$key" != "xnone" ]; then
	    if test -e "$key" ; then
		owner=$(ls -l $key | (read a b owner rest; echo $owner))
		if ! key_is_random "$key"; then
		    mode=$(ls -l "$key" | cut -c 5-10)
		    if [ "$mode" != "------" ]; then
		       echo $"INSECURE MODE FOR $key"
		    fi
		fi
		if [ "$owner" != root ]; then
		    echo $"INSECURE OWNER FOR $key"
		fi
	    else
		echo $"Key file for $dst not found, skipping"
		ret=1
		continue
	    fi
	else
	    key=""
	fi
	params=""
	makeswap=""
	mke2fs=""
	skip=""
	# Parse the src field for UUID= and convert to real device names
	if [ "${src%%=*}" == "UUID" ]; then
		src=$(/sbin/blkid -t "$src" -l -o device)
	elif [ "${src/^\/dev\/disk\/by-uuid\/}" != "$src" ]; then
		src=$(__readlink $src)
	fi
	# Is it a block device?
	[ -b "$src" ] || continue
	# Is it already a device mapper slave? (this is gross)
	devesc=${src##/dev/}
	devesc=${devesc//\//!}
	for d in /sys/block/dm-*/slaves ; do
	    [ -e $d/$devesc ] && continue 2
	done
	# Parse the options field, convert to cryptsetup parameters and
	# contruct the command line
	while [ -n "$opt" ]; do
	    arg=${opt%%,*}
	    opt=${opt##$arg}
	    opt=${opt##,}
	    param=${arg%%=*}
	    value=${arg##$param=}

	    case "$param" in
	    cipher)
		params="$params -c $value"
		if [ -z "$value" ]; then
		    echo $"$dst: no value for cipher option, skipping"
		    skip="yes"
		fi
	    ;;
	    size)
		params="$params -s $value"
		if [ -z "$value" ]; then
		    echo $"$dst: no value for size option, skipping"
		    skip="yes"
		fi
	    ;;
	    hash)
		params="$params -h $value"
		if [ -z "$value" ]; then
		    echo $"$dst: no value for hash option, skipping"
		    skip="yes"
		fi
	    ;;
	    verify)
	        params="$params -y"
	    ;;
	    swap)
		makeswap=yes
		;;
	    tmp)
		mke2fs=yes
	    esac
	done
	if [ "$skip" = "yes" ]; then
	    ret=1
	    continue
	fi
	if [ -z "$makeswap" ] && cryptsetup isLuks "$src" 2>/dev/null ; then
	    if key_is_random "$key"; then
		echo $"$dst: LUKS requires non-random key, skipping"
		ret=1
		continue
	    fi
	    if [ -n "$params" ]; then
		echo "$dst: options are invalid for LUKS partitions," \
		    "ignoring them"
	    fi
	    if [ -n "$key" ]; then
		/sbin/cryptsetup -d $key luksOpen "$src" "$dst" <&1 2>/dev/null && success || failure
		rc=$?
	    else
		mount_point="$(find_crypto_mount_point $dst)"
		[ -n "$mount_point" ] || mount_point=${src##*/}
		prompt=$(printf $"%s is password protected" "$mount_point")
		plymouth ask-for-password --prompt "$prompt" --command="/sbin/cryptsetup luksOpen -T1 $src $dst" <&1
		rc=$?
	    fi
	else
	    [ -z "$key" ] && plymouth --hide-splash
	    /sbin/cryptsetup $params ${key:+-d $key} create "$dst" "$src" <&1 2>/dev/null && success || failure
	    rc=$?
	    [ -z "$key" ] && plymouth --show-splash
	fi
	if [ $rc -ne 0 ]; then
	    ret=1
	    continue
	fi
	if [ -b "/dev/mapper/$dst" ]; then
	    if [ "$makeswap" = "yes" ]; then
		mkswap "/dev/mapper/$dst" 2>/dev/null >/dev/null
	    fi
	    if [ "$mke2fs" = "yes" ]; then
		if mke2fs "/dev/mapper/$dst" 2>/dev/null >/dev/null \
		    && mdir=$(mktemp -d /tmp/mountXXXXXX); then
		    mount "/dev/mapper/$dst" "$mdir" && chmod 1777 "$mdir"
		    umount "$mdir"
		    rmdir "$mdir"
		fi
	    fi
	fi
    done < /etc/crypttab
    return $ret
}

# A sed expression to filter out the files that is_ignored_file recognizes
__sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'

Open in new window

0
 
LVL 29

Expert Comment

by:Jan Springer
ID: 40577698
this is not an ISC thing, it's a RH thing.  if you want the init script that i use, let me know and i'll post it.
0
 
LVL 62

Expert Comment

by:gheist
ID: 40577743
Script is not from RHEL6.
"yum reinstall dhcp"
and use redhat script
0
 
LVL 29

Expert Comment

by:Jan Springer
ID: 40577762
it's not from ISC.  

"rh_status" is a redhat thing.
0
 
LVL 62

Expert Comment

by:gheist
ID: 40578079
dhcp.png demo from centos dhcpd with version (centos is 6U6)
0
 
LVL 23

Author Comment

by:savone
ID: 40578563
This was installed from red hat repos not from source.

@Jan Springer - Does your init script display the OK portion?  If so please post.

@gheist - Not sure what you are showing me here.  I have the same version installed from redhat:

[root@dhcp init.d]# rpm -q dhcp
dhcp-4.1.1-43.P1.el6_6.1.x86_64
0
 
LVL 62

Expert Comment

by:gheist
ID: 40578605
dhcpd init script is from RHEL5.
Please post content of /etc/redhat-release before we continue.
0
 
LVL 23

Author Comment

by:savone
ID: 40578608
[root@dhcp init.d]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.6 (Santiago)
0
 
LVL 62

Expert Comment

by:gheist
ID: 40578609
Now I read your post.
Remove /etc/rc.d/init.d/dhcpd
then yum reinstall dhcp

now you have rhel6 script that shows OK where due.
0
 
LVL 23

Author Comment

by:savone
ID: 40578626
@gheist - NOPE.  This system was just built yesterday.  All the packages are straight from Red Hat.

[root@dhcp init.d]# rm /etc/rc.d/init.d/dhcpd
rm: remove regular file `/etc/rc.d/init.d/dhcpd'? y
[root@dhcp init.d]# yum reinstall dhcp -y
Loaded plugins: product-id, rhnplugin
This system is receiving updates from RHN Classic or RHN Satellite.
Setting up Reinstall Process
Resolving Dependencies
--> Running transaction check
---> Package dhcp.x86_64 12:4.1.1-43.P1.el6_6.1 will be reinstalled
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================================================================
 Package                       Arch                            Version                                         Repository                                     Size
===================================================================================================================================================================
Reinstalling:
 dhcp                          x86_64                          12:4.1.1-43.P1.el6_6.1                          rhel-x86_64-server-6                          820 k

Transaction Summary
===================================================================================================================================================================
Reinstall     1 Package(s)

Total download size: 820 k
Installed size: 0  
Downloading Packages:
dhcp-4.1.1-43.P1.el6_6.1.x86_64.rpm                                                                                                         | 820 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 12:dhcp-4.1.1-43.P1.el6_6.1.x86_64                                                                                                              1/1 
  Verifying  : 12:dhcp-4.1.1-43.P1.el6_6.1.x86_64                                                                                                              1/1 

Installed:
  dhcp.x86_64 12:4.1.1-43.P1.el6_6.1                                                                                                                               

Complete!
[root@dhcp init.d]# service dhcpd restart
Shutting down dhcpd: dhcpd 
Starting dhcpd:  dhcpd

Open in new window

0
 
LVL 62

Expert Comment

by:gheist
ID: 40578635
no way.
check
#  rpm -V dhcp
Which files are changed? maybe you copied el5 configuration and pulled init script along? What you now are saying:  Windows 3.1 file manager appearing on windows 7 out of nowhere, directly from windows update?
0
 
LVL 23

Author Comment

by:savone
ID: 40578670
@gheist,  I don't know why you think it is a rhel5 init script.  I install RedHat 6.5 from a DVD, then registered the system with RHN, install dhcp and did the yum updates.  How would a RHEL5 init script possibly make it on to the system?
0
 
LVL 62

Expert Comment

by:gheist
ID: 40578723
Oh dear. I installed centos 6.6 minimal and installed dhcp and copied configuration example to dhcpd.conf
And it shows OK
0
 
LVL 23

Author Comment

by:savone
ID: 40579844
@Jan Springer - Can you please post your /etc/init.d/dhcpd file?

@gheist - Can you please post your /etc/init.d/dhcpd file as well?
0
 
LVL 62

Expert Comment

by:gheist
ID: 40579903
I did not change it. I believe it is this package:
http://mirror.centos.org/centos-6/6/os/x86_64/Packages/dhcp-4.1.1-43.P1.el6.centos.x86_64.rpm

wc /etc/rc.d/init.d/dhcpd
 156  418 3118 etc/rc.d/init.d/dhcpd

can you post output of
rpm -V dhcp
?
0
 
LVL 23

Author Comment

by:savone
ID: 40579970
@gheist, Thanks for posting your file... Seems like you only want to help your way.

[root@dhcp ~]# rpm -V dhcp
S.5....T.  c /etc/dhcp/dhcpd.conf
S.5....T.    /etc/rc.d/init.d/dhcpd

Both files were changed by me trying to get it to do what I want.
0
 
LVL 62

Expert Comment

by:gheist
ID: 40580043
So dhcpd script was broken by you. Please restore RedHat-provided script ASAP.
You must edit /etc/sysconfig/dhcpd to set script variables.
0
 
LVL 23

Author Comment

by:savone
ID: 40580503
@gheist - The files have been replaced, still don't work.  You don't seem to follow the thread, you just react on the last comment.  This was installed from REDHAT to begin with and the files only edited after it did not work.

[root@dhcp ~]# rpm -V dhcp
S.5....T.  c /etc/dhcp/dhcpd.conf
[root@dhcp ~]# service dhcpd restart
Shutting down dhcpd: dhcpd
Starting dhcpd:  dhcpd
[root@dhcp ~]#
0
 
LVL 62

Expert Comment

by:gheist
ID: 40580571
You have deleted /etc/sysconfig/init
Namely BOOTUP=color

Please install  A CLEAN SYSTEM.
0
 
LVL 62

Expert Comment

by:gheist
ID: 40580823
If you set bootup to anything else than color then /etc/init.d/functions will not display colourful [OK] decoration.
0
 
LVL 23

Author Comment

by:savone
ID: 40580840
I've requested that this question be deleted for the following reason:

The only solution I have received what to reinstall a fresh system which is the state the system was in when the problem began.  Please delete this question.
0
 
LVL 62

Accepted Solution

by:
gheist earned 500 total points
ID: 40580841
It works as configured.
If you change /etc/sysconfig/init parameter away from
BOOTUP=color

You dont get colour OK decorations.
It is voluntary change on your side.
0
 
LVL 23

Author Comment

by:savone
ID: 40580934
@ghiest, I will check that when I get back to the office.  If it works I will gladly give you the points.
0
 
LVL 62

Expert Comment

by:gheist
ID: 40580959
The monitoring system that relies on colour decorations is wrong. It is much safer to list /var/lock/subsys or check return code from service dhcpd status...
0
 
LVL 23

Author Comment

by:savone
ID: 40580966
@gheist, I agree but I have no control over the software.
0
 
LVL 62

Expert Comment

by:gheist
ID: 40580972
Report a serious bug... It checks if you like colour decoration, not if service performs its functions.
0
 
LVL 23

Author Closing Comment

by:savone
ID: 40581708
Thanks Gheist, we had a list misunderstanding but it all worked out in the end!
0

Featured Post

Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Linux users are sometimes dumbfounded by the severe lack of documentation on a topic. Sometimes, the documentation is copious, but other times, you end up with some obscure "it varies depending on your distribution" over and over when searching for …
The purpose of this article is to fix the unknown display problem in Linux Mint operating system. After installing the OS if you see Display monitor is not recognized then we can install "MESA" utilities to fix this problem or we can install additio…
Connecting to an Amazon Linux EC2 Instance from Windows Using PuTTY.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
Suggested Courses

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question