25개 이상의 토픽을 선택하실 수 없습니다.
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
4.9 KiB
177 lines
4.9 KiB
## |
|
## @l_prefix@/etc/rc.func -- Run-Command Helper Functions |
|
## Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH |
|
## Copyright (c) 2000-2002 The OpenPKG Project <http://www.openpkg.org/> |
|
## Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com> |
|
## |
|
## Permission to use, copy, modify, and distribute this software for |
|
## any purpose with or without fee is hereby granted, provided that |
|
## the above copyright notice and this permission notice appear in all |
|
## copies. |
|
## |
|
## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED |
|
## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|
## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR |
|
## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
|
## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
|
## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
## SUCH DAMAGE. |
|
## |
|
|
|
# |
|
# display an error message. |
|
# |
|
# Usage: opErr <message> |
|
# Example: opErr "invalid command line" |
|
# |
|
opErr () { |
|
echo "OpenPKG:ERROR: $*" 1>&2 |
|
exit 1 |
|
} |
|
|
|
# |
|
# display a warning message. |
|
# |
|
# Usage: opWarn <message> |
|
# Example: opWarn "unknown variable" |
|
# |
|
opWarn () { |
|
echo "OpenPKG:WARNING: $*" 1>&2 |
|
} |
|
|
|
# |
|
# append (or optionally prepend) one or more directories (optionally |
|
# have to be existing) to a colon-separated path variable. In case a |
|
# directory already exists, it is first removed. |
|
# |
|
# Usage: opPathAdd [-p] [-e] <variable> <dir> [<dir> ...] |
|
# Example: opPathAdd -e PATH /bin /sbin /usr/bin /usr/sbin /usr/ccs/bin |
|
# |
|
opPathAdd () { |
|
_prepend=0 |
|
_exists=0 |
|
while [ $# -gt 0 ]; do |
|
case $1 in |
|
-p ) _prepend=1; shift ;; |
|
-e ) _exists=1; shift ;; |
|
* ) break ;; |
|
esac |
|
done |
|
_var="$1" |
|
shift |
|
_edit_del="" |
|
_edit_add="" |
|
for _dir in "$@"; do |
|
if [ ".${_exists}" = .1 ] && [ ! -d "${_dir}" ]; then |
|
continue |
|
fi |
|
_edit_del="${_edit_del} -e 's;^${_dir}\$;;' -e 's;^${_dir}:;;'" |
|
_edit_del="${_edit_del} -e 's;:${_dir}:;:;' -e 's;:${_dir}\$;;'" |
|
if [ ".${_prepend}" = .0 ]; then |
|
_edit_add="${_edit_add} -e 's;\$;:${_dir};'" |
|
else |
|
_edit_add="-e 's;^;${_dir}:;' ${_edit_add}" |
|
fi |
|
done |
|
if [ ".${_edit_del}${_edit_add}" != . ]; then |
|
eval "${_var}=\`echo \"\$${_var}\" | sed ${_edit_del} ${_edit_add}\`" |
|
fi |
|
unset _prepend _exists _var _edit_del _edit_add _dir |
|
} |
|
|
|
# |
|
# remove one or more directories from a colon-separated path variable |
|
# |
|
# Usage: opPathDel <variable> <dir> [<dir> ...] |
|
# Example: opPathDel PATH /bin /sbin /usr/bin /usr/sbin /usr/ccs/bin |
|
# |
|
opPathDel () { |
|
_var="$1" |
|
shift |
|
_edit="" |
|
for _dir in "$@"; do |
|
_edit="${_edit} -e 's;^${_dir}\$;;' -e 's;^${_dir}:;;'" |
|
_edit="${_edit} -e 's;:${_dir}:;:;' -e 's;:${_dir}\$;;'" |
|
done |
|
eval "${_var}=\`echo \"\$${_var}\" | sed ${_edit}\`" |
|
unset _var _edit _dir |
|
} |
|
|
|
# |
|
# check whether a variable contains a positive "Yes" value. |
|
# |
|
# Usage: opVarIsYes <variable> |
|
# Example: if opVarIsYes foo; then ... |
|
# |
|
opVarIsYes () { |
|
_var="${1}" |
|
eval "_val=\"\$${_var}\"" |
|
case "${_val}" in |
|
[Yy][Ee][Ss] | [Tt][Rr][Uu][Ee] | [Oo][Nn] | 1 ) |
|
unset _var _val |
|
return 0 |
|
;; |
|
[Nn][Oo] | [Ff][Aa][Ll][Ss][Ee] | [Oo][Ff][Ff] | 0 ) |
|
unset _var _val |
|
return 1 |
|
;; |
|
*) |
|
opWarn "variable \$${_var} is not set properly." |
|
unset _var _val |
|
return 1 |
|
;; |
|
esac |
|
} |
|
|
|
# |
|
# check whether a service is enabled. |
|
# |
|
# Usage: opServiceEnabled <variable> |
|
# Example: if opServiceEnabled openssh; then ... |
|
# |
|
opServiceEnabled () { |
|
opVarIsYes ${1}_enable |
|
} |
|
|
|
# |
|
# generate temporary file directory |
|
# |
|
# Usage: opTmpDirGen <program> |
|
# Example: opTmpDirGen openssh |
|
# |
|
opTmpDirGen () { |
|
_tmpdir="@l_prefix@/RPM/TMP/${1}" |
|
rm -rf ${_tmpdir} >/dev/null 2>&1 || true |
|
mkdir ${_tmpdir} >/dev/null 2>&1 || true |
|
chmod 700 ${_tmpdir} >/dev/null 2>&1 || true |
|
} |
|
|
|
# |
|
# set filename of temporary file |
|
# |
|
# Usage: opTmpDirFile <program> <filename> <variable> |
|
# Example: opTmpDirFile openssh 0 tmpfile |
|
# |
|
opTmpDirFile () { |
|
_tmpdir="@l_prefix@/RPM/TMP/${1}" |
|
eval "${3}=\"${_tmpdir}/${2}\"" |
|
touch "${_tmpdir}/${2}" >/dev/null 2>&1 || true |
|
chmod 700 "${_tmpdir}/${2}" >/dev/null 2>&1 || true |
|
} |
|
|
|
# |
|
# delete temporary file directory |
|
# |
|
# Usage: opTmpDirDel <program> |
|
# Example: opTmpDirDel openssh |
|
# |
|
opTmpDirDel () { |
|
_tmpdir="@l_prefix@/RPM/TMP/${1}" |
|
rm -rf ${_tmpdir} >/dev/null 2>&1 || true |
|
} |
|
|
|
|