commit: a3444e9abf16ecb6145e95a891433b3a79800170 Author: Rabi Shanker Guha <guha.rabishankar <AT> gmail <DOT> com> AuthorDate: Fri Jan 9 15:02:28 2015 +0000 Commit: Robin H. Johnson <robbat2 <AT> gentoo <DOT> org> CommitDate: Fri Jan 9 15:02:28 2015 +0000 URL: http://sources.gentoo.org/gitweb/?p=proj/netifrc.git;a=commit;h=a3444e9a
Compatibility layer for multiple init systems --- sh/functions.sh | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/sh/functions.sh b/sh/functions.sh new file mode 100644 index 0000000..368bb73 --- /dev/null +++ b/sh/functions.sh @@ -0,0 +1,126 @@ +# Compatibility layer for netifrc to work with multiple init +# systems. + +# First check whether e* commands are present in the environment +# XXX [[-n RC_GOT_FUNCTIONS]] ?? +if [ -n "$(command -v ebegin >/dev/null 2>&1)" ]; then + : + +# Then check for the presence of functions.sh +elif [ -f /lib/gentoo/functions.sh ]; then + . /lib/gentoo/functions.sh + +else + echo "/lib/gentoo/functions.sh not found. Exiting" + exit -1 +fi + +# runscript functions +if [ -z "$(command -v service_set_value >/dev/null 2>&1)" ]; then + + # OpenRC functions used in depend + after() { + : + } + before() { + : + } + program() { + : + } + need() { + : + } + + shell_var() { + local output=$1 sanitized_arg= + shift 1 + for arg; do + sanitized_arg="${arg//[^a-zA-Z0-9_]/_}" + output="$output $arg" + done + echo "$output" + } + + net_fs_list="afs ceph cifs coda davfs fuse fuse.sshfs gfs glusterfs lustre ncpfs nfs nfs4 ocfs2 shfs smbfs" + is_net_fs() + { + [ -z "$1" ] && return 1 + + local fs=$(mount | grep " on $1 " | cut -f 5 -d ' ') + for x in $fs; do + for y in $net_fs_list; do + [ "$x" = "$y" ] && return 0 + done + done + return 1 + } + + service_set_value() { + local OPTION="$1" VALUE="$2" + if [ -z "$OPTION" ]; then + eerror "service_set_value requires parameter KEY" + return + fi + local file="$OPTIONSDIR/${OPTION}" + echo "$VALUE" > $file + } + service_get_value() { + local OPTION="$1" + if [ -z "$OPTION" ]; then + eerror "service_get_value requires parameter KEY" + return + fi + local file="$OPTIONSDIR/${OPTION}" + cat $file 2>/dev/null + } + STATEFILE="${STATEDIR}/state" + # Internal Function + # Stores the state of netifrc in ${SVCDIR}/${SVCNAME}/state file + _mark_service() { + local state=$1 + echo $state > $STATEFILE + } + #Internal Function + # Checks whether the state of netifrc is same as $1 + _service_state() { + state=$(cat $STATEFILE 2>/dev/null) + if [ state = $1 ]; then + return 1 + fi + return 0 + } + + mark_service_started() { + _mark_service started + } + mark_service_inactive() { + _mark_service inactive + } + mark_service_stopped() { + _mark_service stopped + } + service_started() { + _service_state started + return $? + } + service_inactive() { + _service_state inactive + return $? + } +fi + +# Extracts the interface for the current invocation +get_interface() { + case $INIT in + openrc) + printf ${RC_SVCNAME#*.};; + systemd) + printf ${RC_IFACE};; + *) + eerror "Init system not supported. Aborting" + exit -1;; + esac +} + +# vim: ts=4 sw=4 noexpandtab