diff options
author | Bruce Dubbs <bdubbs@linuxfromscratch.org> | 2008-06-03 21:51:14 +0000 |
---|---|---|
committer | Bruce Dubbs <bdubbs@linuxfromscratch.org> | 2008-06-03 21:51:14 +0000 |
commit | 1c4800743d22d675ccfa48364d8aa558e8b7407c (patch) | |
tree | ca4254cbe5dd5adb0ed8af1f87c26bc569403164 /bootscripts/contrib/lsb-v3/lsb/manage-functions | |
parent | 9faa3e27afb932894ace74854fbb76631022446b (diff) |
Moved bootscripts and udev-config to BOOK
Updated Makefile to automatically generate bootscript and udev-config tarballs
Updated licesnse to be the same as BLFS
git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@8548 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
Diffstat (limited to 'bootscripts/contrib/lsb-v3/lsb/manage-functions')
-rw-r--r-- | bootscripts/contrib/lsb-v3/lsb/manage-functions | 306 |
1 files changed, 306 insertions, 0 deletions
diff --git a/bootscripts/contrib/lsb-v3/lsb/manage-functions b/bootscripts/contrib/lsb-v3/lsb/manage-functions new file mode 100644 index 000000000..7c7a8f495 --- /dev/null +++ b/bootscripts/contrib/lsb-v3/lsb/manage-functions @@ -0,0 +1,306 @@ +#!/bin/bash +# Begin /lib/lsb/manage-functions + +# /lib/lsb/manage-functions contains the functions used by +# /lib/lsb/install_initd and /lib/lsb/remove_initd as well as additional helper +# functions for use in programs that would provide functionality similar to +# the RedHat chkconfig utility, for instance. + +# source the confif file +. /etc/lsb/lsb-config + +# Define all arrays at script start to avoid scope issues +# scriptlist is a list of valid scripts used as an index +declare -a scriptlist +# fullheaders is a complete set of valid LSB headers, stored in memory for +# each indexed script, to avoid multiple disk reads +declare -a fullheaders + +############################################################################### +# get_headers() - Obtains a valid list of scripts contained in ${rcbase} and # +# inserts the name of the script into the scriptlist[] array # +# for use by all other functions. Additionally, it inserts # +# the entire LSB header information from each script into a # +# second array, fullheaders[], so that diskreads need only be # +# done once # +# Returns no value, but populates the variable ${scriptcount} # +# and the arrays ${scriptlist} and ${fullheaders} for use # +# with other functions in this script. This function is # +# called unconditionally at the end of this scrip and is # +# provided as a function only for the case that it needs to # +# be called again after other operations. # +############################################################################### +get_headers() +{ + echo -n "Retrieving script information from disk..." + count=1 + for file in $(find -P /etc/init.d -xdev -perm -u=x | sed -n 2~1p \ + | sed "s@/etc/init.d/rc@@") + do + # determine if script is an LSB compliant script + grep "### BEGIN INIT INFO" $file > /dev/null + if test $? -gt "0" + then + # this is not a valid script and is ignored + # skip the rest of the loop + continue + fi + # determine basename using only bash (is basename a builtin?) + filename=$(echo "${file}" | sed "s@${rcbase}/@@") + # assign it to an array possition + scriptlist["${count}"]="${filename}" + # find the begining of the init info for the script + begin=$(grep -n "### BEGIN INIT INFO" "${file}" | cut -d: -f1) + # find the end of the init info for the script + end=$(grep -n "### END INIT INFO" "${file}" | cut -d: -f1) + # we'll use the difference between the values in the tail command + diff=$(( ${end} - ${begin} )) + # assign the entire LSB header information as a single string to the + # fullheaders[] array + fullheaders["${count}"]=$(head -n "${end}" "${file}" \ + | tail -n "${diff}") + count=$(( ${count} + 1 )) + unset begin + unset end + unset diff + unset filename + done + # a number or array elements would be a nice regular variable assignment + scriptcount="${#scriptlist[@]}" + unset count + echo -e "Completed!" +} + +############################################################################### +# print_headers() - Presents a formatted list of all LSB compliant script # +# headers to stdout preceeded by script name for use in # +# other scripts # +############################################################################### +print_headers() +{ + get_headers + count=1 + while test "${count}" -lt "${scriptcount}" + do + echo "${scriptlist[$count]}" + echo "=============================================================" + echo "${fullheaders[$count]}" + echo "" + echo "" + count="$(( ${count} + 1 ))" + done +} + +############################################################################### +# get_index() - Determines the array index of the specified script # +############################################################################### + +get_index() +{ + filename=$(echo "${1}" | sed "s@${rcbase}/@@") + count=1 + while test "${count}" -lt "${scriptcount}" + do + echo "${scriptlist[${count}]}" | grep "${filename}" > /dev/null + if test "${?}" -ne "0" + then + count=$(( ${count} + 1 )) + continue + else + break + fi + done + if test "${filename}" == "${scriptlist[${count}]}" + then + echo "${count}" + else + echo "${1} is not a valid LSB init script." + exit 1 + fi + unset filename + unset count +} + +############################################################################### +# get_lsb_value() - Obtains the LSB Value of $1 for index of script ($2). # +############################################################################### +get_lsb_value() +{ + # Probably need some error checking in here + echo "${fullheaders[${2}]}" | \ + grep "^# ${1}" | \ + sed -e "s@# ${1}:@@" \ + -e "s/^[ \t]*//" +} + +############################################################################### +# convert_lsb_required() - Converts LSB defined facilities (facility names # +# begining with a '$' character) into script names # +# for required start/stop # +############################################################################### +convert_lsb_required() +{ + local count=0 + local provides="" + local reqfacility="" + local reqprovideslist="" + + for reqfacility in $@ + do + # find the requires and it's index and then find the script name + # from the index. Since this is required, exit if it is not found + ## If reqfacility is already in script name format, nothing needs to + ## be done, just echo it back out. I can't think of an easy way to + ## do this right now, the scriptname will be the same as the provides + ## anyway, so just let it fly for now...it'll be correct, it just + ## takes an extra couple of commands to get the same result. + ## Besides, this will do some extra sanity checking in case somebody + ## writes a script that isn't named the same as provides, though this + ## isn't LSB compliant. Additionally, these same comments apply to + ## the convert_lsb_should() fucntion below. + count=0 + while test ${count} -lt ${scriptcount} + do + count=$(( $count + 1 )) + provides="$( get_lsb_value Provides ${count} )" + if test "${provides}" = "${reqfacility}" + then + reqprovideslist="${reqprovideslist} ${scriptlist[$count]}" + break + fi + if test ${count} -eq ${scriptcount}; then + # If we've never broken out of the while loop, then this is an + # unrecoverable error since it is a required item. Exit now! + echo "Error: unable to locate required facility ${reqfacility}!" + exit 5 + fi + done + done + echo "${reqprovideslist}" | sed -e "s/^[ \t]*//" -e "s/^[ \t]*//" +} + +############################################################################### +# convert_lsb_should() - Converts LSB defined facilities (facility names # +# begining with a '$' character) into script names for # +# should start/stop # +############################################################################### + +convert_lsb_should() +{ + local count=0 + local provides="" + local optfacility="" + local optprovideslist="" + + for optfacility in $@ + do + # find the should and it's index and then find the script name + # from the index. Since this is not an error, simply warn if it + # is not found. + count=0 + while test ${count} -lt ${scriptcount} + do + count=$(( $count + 1 )) + provides="$( get_lsb_value Provides ${count} )" + if test "${provides}" = "${optfacility}" + then + optprovideslist="${optprovideslist} ${scriptlist[$count]}" + break + fi + # No need to error or warn on should items, and it's messy if so! + done + done + echo "${optprovideslist}" | sed -e "s/^[ \t]*//" -e "s/[ \t]*$//" +} + +get_headers + +############################################################################### +# get_lsb_required_value() - Additional function to simplify repetitive tasks # +# Obtains the LSB Value of $1 for index of script # +# ($2) and immediately converts LSB defined # +# facilities (beginning with a '$' character) to a # +# script name. If the script is not found, then # +# the function exits with an error as per # +# convert_lsb_required. # +############################################################################### +get_lsb_required_value() +{ + local reqval + # Probably need some error checking in here + reqval=`echo "${fullheaders[${2}]}" | \ + grep "^# ${1}" | \ + sed -e "s@# ${1}:@@" \ + -e "s/^[ \t]*//"` + + # If $reqval contains a '$' charcter, then convert it to a script name + echo "${reqval}" | grep "\\$" 2>&1 > /dev/null + if test "${?}" -eq "0" + then + reqval=`convert_lsb_required "${reqval}"` + fi + echo "${reqval}" +} + +############################################################################### +# get_lsb_should_value() - Additional function to simplify repetitive tasks # +# Obtains the LSB Value of $1 for index of script # +# ($2) and immediately converts LSB defined # +# facilities (beginning with a '$' character) to a # +# script name. If the script is not found, the # +# value is removed from the list as it is optional. # +############################################################################### +get_lsb_should_value() +{ + local optval + local listitem + local optitem + # Probably need some error checking in here + optval=`echo "${fullheaders[${2}]}" | \ + grep "^# ${1}" | \ + sed -e "s@# ${1}:@@" \ + -e "s/^[ \t]*//"` + + # If $optval contains a '$' charcter, then convert it to a script name + echo "${optval}" | grep "\\$" 2>&1 > /dev/null + if test "${?}" -eq "0" + then + optval=`convert_lsb_should "${optval}"` + # if we still have a "$" character, then it's not found and it should + # be removed from the list (and it's trailing space if one exists) + # since it is optional + echo "${optval}" | grep "\\$" 2>&1 > /dev/null + if test "${?}" -eq "0" + then + # Remove the value + for listitem in ${optval} + do + echo "${listitem}" | grep "\\$" + if test "${?}" -eq "0" + then + optval=`echo "${optval}" | sed -e 's@${listitem} @@' \ + -e 's@${listitem}@@' | \ + sed -e "s@# ${1}:@@" \ + -e "s/^[ \t]*//"` + fi + done + fi + fi + # If a should start value does not have a script associted with it, then + # remove it (or it and trailing space) from the list + for optitem in ${otpval} + do + grep "${optitem}" "${statedir}/enabled-scripts" 2>&1 > /dev/null + if test "${?}" -ne "0" + then + optval=`echo "${optval}" | sed -e 's@${otpitem} @@' \ + -e 's@${optitem}@@' | \ + sed -e "s@# ${1}:@@" \ + -e "s/^[ \t]*//"` + fi + done + + echo "${optval}" +} + +# End /lib/lsb/manage-functions |