Solved

Red Hat Enterprise 6 - No status after restarting services

Posted on 2015-01-28
34
257 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
  • 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
 
LVL 61

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 28

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 61

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 28

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 28

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 61

Expert Comment

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

Expert Comment

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

"rh_status" is a redhat thing.
0
 
LVL 61

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 61

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 61

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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 61

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 61

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 61

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 61

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 61

Expert Comment

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

Please install  A CLEAN SYSTEM.
0
 
LVL 61

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 61

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 61

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 61

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

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

The purpose of this article is to demonstrate how we can upgrade Python from version 2.7.6 to Python 2.7.10 on the Linux Mint operating system. I am using an Oracle Virtual Box where I have installed Linux Mint operating system version 17.2. Once yo…
Join Greg Farro and Ethan Banks from Packet Pushers (http://packetpushers.net/podcast/podcasts/pq-show-93-smart-network-monitoring-paessler-sponsored/) and Greg Ross from Paessler (https://www.paessler.com/prtg) for a discussion about smart network …
Learn how to get help with Linux/Unix bash shell commands. Use help to read help documents for built in bash shell commands.: Use man to interface with the online reference manuals for shell commands.: Use man to search man pages for unknown command…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:

762 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now