aboutsummaryrefslogtreecommitdiffstats
path: root/bootscripts/contrib/lsb-v3/lsb/manage-functions
diff options
context:
space:
mode:
authorBruce Dubbs <bdubbs@linuxfromscratch.org>2008-06-03 21:51:14 +0000
committerBruce Dubbs <bdubbs@linuxfromscratch.org>2008-06-03 21:51:14 +0000
commit1c4800743d22d675ccfa48364d8aa558e8b7407c (patch)
treeca4254cbe5dd5adb0ed8af1f87c26bc569403164 /bootscripts/contrib/lsb-v3/lsb/manage-functions
parent9faa3e27afb932894ace74854fbb76631022446b (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-functions306
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