diff options
Diffstat (limited to 'sh/rc-functions.sh')
-rw-r--r-- | sh/rc-functions.sh | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/sh/rc-functions.sh b/sh/rc-functions.sh new file mode 100644 index 00000000..d77c5dd3 --- /dev/null +++ b/sh/rc-functions.sh @@ -0,0 +1,139 @@ +# Copyright (c) 2007 Gentoo Foundation +# Copyright (c) 2007-2009 Roy Marples <roy@marples.name> +# Released under the 2-clause BSD license. + +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 + + # Check OS specific flags to see if we're local or net mounted + mountinfo --quiet --netdev "$1" && return 0 + mountinfo --quiet --nonetdev "$1" && return 1 + + # Fall back on fs types + local t=$(mountinfo --fstype "$1") + for x in $net_fs_list $extra_net_fs_list; do + [ "$x" = "$t" ] && return 0 + done + return 1 +} + +is_union_fs() +{ + [ ! -x /sbin/unionctl ] && return 1 + unionctl "$1" --list >/dev/null 2>&1 +} + +get_bootparam() +{ + local match="$1" + [ -z "$match" -o ! -r /proc/cmdline ] && return 1 + + set -- $(cat /proc/cmdline) + while [ -n "$1" ]; do + [ "$1" = "$match" ] && return 0 + case "$1" in + gentoo=*) + local params="${1##*=}" + local IFS=, x= + for x in $params; do + [ "$x" = "$match" ] && return 0 + done + ;; + esac + shift + done + + return 1 +} + +get_bootparam_value() +{ + local match="$1" which_value="$2" sep="$3" result value + if [ -n "$match" -a -r /proc/cmdline ]; then + set -- $(cat /proc/cmdline) + while [ -n "$1" ]; do + case "$1" in + $match=*) + value="${1##*=}" + case "$which_value" in + all) + [ -z "$sep" ] && sep=' ' + if [ -z "$result" ]; then + result="$value" + else + result="${result}${sep}${value}" + fi + ;; + last) + result="$value" + ;; + *) + result="$value" + break + ;; + esac + ;; + esac + shift + done + fi + echo $result +} + +need_if_exists() +{ + for x; do + rc-service --exists "${x}" && need "${x}" + done +} + +# Called from openrc-run.sh or gendepends.sh +_get_containers() { + local c + case "${RC_UNAME}" in + FreeBSD) + c="-jail" + ;; + Linux) + c="-docker -lxc -openvz -rkt -systemd-nspawn -uml -vserver" + ;; + esac + echo $c +} + +_get_containers_remove() { + local c + for x in $(_get_containers); do + c="${c}!${x} " + done + echo $c +} + +_depend() { + depend + local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends= + + # Add any user defined depends + for _deptype in config:CONFIG need:NEED use:USE want:WANT \ + after:AFTER before:BEFORE \ + provide:PROVIDE keyword:KEYWORD; do + IFS=: + set -- $_deptype + unset IFS + eval _depends=\$rc_${_rc_svcname}_$1 + [ -z "$_depends" ] && eval _depends=\$rc_$1 + [ -z "$_depends" ] && eval _depends=\$RC_${_rc_svcname}_$2 + [ -z "$_depends" ] && eval _depends=\$RC_$2 + + $1 $_depends + done +} + +# Add our sbin to $PATH +case "$PATH" in + "$RC_LIBEXECDIR"/sbin|"$RC_LIBEXECDIR"/sbin:*);; + *) PATH="$RC_LIBEXECDIR/sbin:$PATH" ; export PATH ;; +esac |