mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-13 16:06:59 +02:00
feat(baselayout): add baselayout from chromeos
gives us function.sh in /etc/init.d
This commit is contained in:
parent
425fb83fe0
commit
f2600f70d5
1
sdk_container/src/third_party/coreos-overlay/sys-apps/baselayout/Manifest
vendored
Normal file
1
sdk_container/src/third_party/coreos-overlay/sys-apps/baselayout/Manifest
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
DIST baselayout-2.0.1.tar.bz2 23232 RMD160 43cc68d2ea0847578906aa64e475152ea6da0273 SHA1 3fab155e800ef7898b6c64e81919b3c755362fa9 SHA256 33c3c2a2ccfc7126287e0adf76a8d318249328119fb8d0f1bc122eebfc2a380b
|
65
sdk_container/src/third_party/coreos-overlay/sys-apps/baselayout/baselayout-2.0.1-r228.ebuild
vendored
Normal file
65
sdk_container/src/third_party/coreos-overlay/sys-apps/baselayout/baselayout-2.0.1-r228.ebuild
vendored
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# Copyright 1999-2009 Gentoo Foundation
|
||||||
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
# $Header: /var/cvsroot/gentoo-x86/sys-apps/baselayout/baselayout-2.0.1.ebuild,v 1.1 2009/05/24 19:47:02 vapier Exp $
|
||||||
|
|
||||||
|
inherit multilib
|
||||||
|
|
||||||
|
DESCRIPTION="Filesystem baselayout and init scripts (Modified for Chromium OS)"
|
||||||
|
HOMEPAGE="http://src.chromium.org/"
|
||||||
|
SRC_URI="mirror://gentoo/${P}.tar.bz2
|
||||||
|
http://dev.gentoo.org/~vapier/dist/${P}.tar.bz2"
|
||||||
|
|
||||||
|
LICENSE="GPL-2"
|
||||||
|
SLOT="0"
|
||||||
|
KEYWORDS="amd64 arm x86"
|
||||||
|
IUSE=""
|
||||||
|
|
||||||
|
src_install() {
|
||||||
|
emake \
|
||||||
|
OS=$(use kernel_FreeBSD && echo BSD || echo Linux) \
|
||||||
|
DESTDIR="${D}" \
|
||||||
|
install || die
|
||||||
|
|
||||||
|
# handle multilib paths. do it here because we want this behavior
|
||||||
|
# regardless of the C library that you're using. we do explicitly
|
||||||
|
# list paths which the native ldconfig searches, but this isn't
|
||||||
|
# problematic as it doesn't change the resulting ld.so.cache or
|
||||||
|
# take longer to generate. similarly, listing both the native
|
||||||
|
# path and the symlinked path doesn't change the resulting cache.
|
||||||
|
local libdir ldpaths
|
||||||
|
for libdir in $(get_all_libdirs) ; do
|
||||||
|
ldpaths+=":/${libdir}:/usr/${libdir}:/usr/local/${libdir}"
|
||||||
|
done
|
||||||
|
dosed '/^LDPATH/d' /etc/env.d/00basic || die
|
||||||
|
echo "LDPATH='${ldpaths#:}'" >> "${D}"/etc/env.d/00basic
|
||||||
|
|
||||||
|
# Remove files that don't make sense for Chromium OS
|
||||||
|
for x in issue issue.logo ; do
|
||||||
|
rm -f "${D}/etc/${x}"
|
||||||
|
done
|
||||||
|
|
||||||
|
# This file has moved to openrc, but we don't want that.
|
||||||
|
# https://bugs.gentoo.org/373219
|
||||||
|
insinto /etc/init.d
|
||||||
|
doins "${FILESDIR}"/functions.sh || die
|
||||||
|
}
|
||||||
|
|
||||||
|
pkg_postinst() {
|
||||||
|
local x
|
||||||
|
|
||||||
|
# We installed some files to /usr/share/baselayout instead of /etc to stop
|
||||||
|
# (1) overwriting the user's settings
|
||||||
|
# (2) screwing things up when attempting to merge files
|
||||||
|
# (3) accidentally packaging up personal files with quickpkg
|
||||||
|
# If they don't exist then we install them
|
||||||
|
for x in master.passwd passwd shadow group fstab ; do
|
||||||
|
[ -e "${ROOT}etc/${x}" ] && continue
|
||||||
|
[ -e "${ROOT}usr/share/baselayout/${x}" ] || continue
|
||||||
|
cp -p "${ROOT}usr/share/baselayout/${x}" "${ROOT}"etc
|
||||||
|
done
|
||||||
|
|
||||||
|
# Force shadow permissions to not be world-readable #260993
|
||||||
|
for x in shadow ; do
|
||||||
|
[ -e "${ROOT}etc/${x}" ] && chmod 0600 "${ROOT}etc/${x}"
|
||||||
|
done
|
||||||
|
}
|
861
sdk_container/src/third_party/coreos-overlay/sys-apps/baselayout/files/functions.sh
vendored
Normal file
861
sdk_container/src/third_party/coreos-overlay/sys-apps/baselayout/files/functions.sh
vendored
Normal file
@ -0,0 +1,861 @@
|
|||||||
|
# Copyright 1999-2007 Gentoo Foundation
|
||||||
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
|
||||||
|
RC_GOT_FUNCTIONS="yes"
|
||||||
|
|
||||||
|
# Override defaults with user settings ...
|
||||||
|
[[ -f /etc/conf.d/rc ]] && source /etc/conf.d/rc
|
||||||
|
|
||||||
|
# Check /etc/conf.d/rc for a description of these ...
|
||||||
|
declare -r svclib="/lib/rcscripts"
|
||||||
|
declare -r svcdir="${svcdir:-/var/lib/init.d}"
|
||||||
|
svcmount="${svcmount:-no}"
|
||||||
|
svcfstype="${svcfstype:-tmpfs}"
|
||||||
|
svcsize="${svcsize:-1024}"
|
||||||
|
|
||||||
|
# Different types of dependencies
|
||||||
|
deptypes="need use"
|
||||||
|
# Different types of order deps
|
||||||
|
ordtypes="before after"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Internal variables
|
||||||
|
#
|
||||||
|
|
||||||
|
# Dont output to stdout?
|
||||||
|
RC_QUIET_STDOUT="${RC_QUIET_STDOUT:-no}"
|
||||||
|
RC_VERBOSE="${RC_VERBOSE:-no}"
|
||||||
|
|
||||||
|
# Should we use color?
|
||||||
|
RC_NOCOLOR="${RC_NOCOLOR:-no}"
|
||||||
|
# Can the terminal handle endcols?
|
||||||
|
RC_ENDCOL="yes"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Default values for rc system
|
||||||
|
#
|
||||||
|
RC_TTY_NUMBER="${RC_TTY_NUMBER:-11}"
|
||||||
|
RC_PARALLEL_STARTUP="${RC_PARALLEL_STARTUP:-no}"
|
||||||
|
RC_NET_STRICT_CHECKING="${RC_NET_STRICT_CHECKING:-no}"
|
||||||
|
RC_USE_FSTAB="${RC_USE_FSTAB:-no}"
|
||||||
|
RC_USE_CONFIG_PROFILE="${RC_USE_CONFIG_PROFILE:-yes}"
|
||||||
|
RC_FORCE_AUTO="${RC_FORCE_AUTO:-no}"
|
||||||
|
RC_DEVICES="${RC_DEVICES:-auto}"
|
||||||
|
RC_DOWN_INTERFACE="${RC_DOWN_INTERFACE:-yes}"
|
||||||
|
RC_VOLUME_ORDER="${RC_VOLUME_ORDER:-raid evms lvm dm}"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Default values for e-message indentation and dots
|
||||||
|
#
|
||||||
|
RC_INDENTATION=''
|
||||||
|
RC_DEFAULT_INDENT=2
|
||||||
|
#RC_DOT_PATTERN=' .'
|
||||||
|
RC_DOT_PATTERN=''
|
||||||
|
|
||||||
|
# bool has_addon(addon)
|
||||||
|
#
|
||||||
|
# See if addon exists.
|
||||||
|
#
|
||||||
|
has_addon() {
|
||||||
|
[[ -e ${svclib}/addons/$1 ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
# void import_addon(char *addon)
|
||||||
|
#
|
||||||
|
# Import code from the specified addon if it exists
|
||||||
|
#
|
||||||
|
import_addon() {
|
||||||
|
local addon="${svclib}/addons/$1"
|
||||||
|
if has_addon $1 ; then
|
||||||
|
source "${addon}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# void splash(...)
|
||||||
|
#
|
||||||
|
# Notify bootsplash/splashutils/gensplash/whatever about
|
||||||
|
# important events.
|
||||||
|
#
|
||||||
|
splash() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
# This will override the splash() function...
|
||||||
|
if ! import_addon splash-functions.sh ; then
|
||||||
|
[[ -f /sbin/splash-functions.sh ]] && source /sbin/splash-functions.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
# void profiling(...)
|
||||||
|
#
|
||||||
|
# Notify bootsplash/whatever about important events.
|
||||||
|
#
|
||||||
|
profiling() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
import_addon profiling-functions.sh
|
||||||
|
|
||||||
|
# void bootlog(...)
|
||||||
|
#
|
||||||
|
# Notify bootlogger about important events.
|
||||||
|
bootlog() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
[[ ${RC_BOOTLOG} == "yes" ]] && import_addon bootlogger.sh
|
||||||
|
|
||||||
|
# void get_bootconfig()
|
||||||
|
#
|
||||||
|
# Get the BOOTLEVEL and SOFTLEVEL by setting
|
||||||
|
# 'bootlevel' and 'softlevel' via kernel
|
||||||
|
# parameters.
|
||||||
|
#
|
||||||
|
get_bootconfig() {
|
||||||
|
local copt=
|
||||||
|
local newbootlevel=
|
||||||
|
local newsoftlevel=
|
||||||
|
|
||||||
|
if [[ -r /proc/cmdline ]] ; then
|
||||||
|
for copt in $(</proc/cmdline) ; do
|
||||||
|
case "${copt%=*}" in
|
||||||
|
bootlevel)
|
||||||
|
newbootlevel="${copt##*=}"
|
||||||
|
;;
|
||||||
|
softlevel)
|
||||||
|
newsoftlevel="${copt##*=}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n ${newbootlevel} ]] ; then
|
||||||
|
export BOOTLEVEL="${newbootlevel}"
|
||||||
|
else
|
||||||
|
export BOOTLEVEL="boot"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n ${newsoftlevel} ]] ; then
|
||||||
|
export DEFAULTLEVEL="${newsoftlevel}"
|
||||||
|
else
|
||||||
|
export DEFAULTLEVEL="default"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_defaultlevels() {
|
||||||
|
get_bootconfig
|
||||||
|
|
||||||
|
if get_bootparam "noconfigprofile" ; then
|
||||||
|
export RC_USE_CONFIG_PROFILE="no"
|
||||||
|
|
||||||
|
elif get_bootparam "configprofile" ; then
|
||||||
|
export RC_USE_CONFIG_PROFILE="yes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${RC_USE_CONFIG_PROFILE} == "yes" && -n ${DEFAULTLEVEL} ]] && \
|
||||||
|
[[ -d "/etc/runlevels/${BOOTLEVEL}.${DEFAULTLEVEL}" || \
|
||||||
|
-L "/etc/runlevels/${BOOTLEVEL}.${DEFAULTLEVEL}" ]] ; then
|
||||||
|
export BOOTLEVEL="${BOOTLEVEL}.${DEFAULTLEVEL}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z ${SOFTLEVEL} ]] ; then
|
||||||
|
if [[ -f "${svcdir}/softlevel" ]] ; then
|
||||||
|
export SOFTLEVEL=$(< "${svcdir}/softlevel")
|
||||||
|
else
|
||||||
|
export SOFTLEVEL="${BOOTLEVEL}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# void get_libdir(void)
|
||||||
|
#
|
||||||
|
# prints the current libdir {lib,lib32,lib64}
|
||||||
|
#
|
||||||
|
get_libdir() {
|
||||||
|
if [[ -n ${CONF_LIBDIR_OVERRIDE} ]] ; then
|
||||||
|
CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}"
|
||||||
|
elif [[ -x /usr/bin/portageq ]] ; then
|
||||||
|
CONF_LIBDIR="$(/usr/bin/portageq envvar CONF_LIBDIR)"
|
||||||
|
fi
|
||||||
|
echo "${CONF_LIBDIR:=lib}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# void esyslog(char* priority, char* tag, char* message)
|
||||||
|
#
|
||||||
|
# use the system logger to log a message
|
||||||
|
#
|
||||||
|
esyslog() {
|
||||||
|
local pri=
|
||||||
|
local tag=
|
||||||
|
|
||||||
|
if [[ -x /usr/bin/logger ]] ; then
|
||||||
|
pri="$1"
|
||||||
|
tag="$2"
|
||||||
|
|
||||||
|
shift 2
|
||||||
|
[[ -z "$*" ]] && return 0
|
||||||
|
|
||||||
|
/usr/bin/logger -p "${pri}" -t "${tag}" -- "$*"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# void eindent(int num)
|
||||||
|
#
|
||||||
|
# increase the indent used for e-commands.
|
||||||
|
#
|
||||||
|
eindent() {
|
||||||
|
local i="$1"
|
||||||
|
(( i > 0 )) || (( i = RC_DEFAULT_INDENT ))
|
||||||
|
esetdent $(( ${#RC_INDENTATION} + i ))
|
||||||
|
}
|
||||||
|
|
||||||
|
# void eoutdent(int num)
|
||||||
|
#
|
||||||
|
# decrease the indent used for e-commands.
|
||||||
|
#
|
||||||
|
eoutdent() {
|
||||||
|
local i="$1"
|
||||||
|
(( i > 0 )) || (( i = RC_DEFAULT_INDENT ))
|
||||||
|
esetdent $(( ${#RC_INDENTATION} - i ))
|
||||||
|
}
|
||||||
|
|
||||||
|
# void esetdent(int num)
|
||||||
|
#
|
||||||
|
# hard set the indent used for e-commands.
|
||||||
|
# num defaults to 0
|
||||||
|
#
|
||||||
|
esetdent() {
|
||||||
|
local i="$1"
|
||||||
|
(( i < 0 )) && (( i = 0 ))
|
||||||
|
RC_INDENTATION=$(printf "%${i}s" '')
|
||||||
|
}
|
||||||
|
|
||||||
|
# void einfo(char* message)
|
||||||
|
#
|
||||||
|
# show an informative message (with a newline)
|
||||||
|
#
|
||||||
|
einfo() {
|
||||||
|
einfon "$*\n"
|
||||||
|
LAST_E_CMD="einfo"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# void einfon(char* message)
|
||||||
|
#
|
||||||
|
# show an informative message (without a newline)
|
||||||
|
#
|
||||||
|
einfon() {
|
||||||
|
[[ ${RC_QUIET_STDOUT} == "yes" ]] && return 0
|
||||||
|
[[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo
|
||||||
|
echo -ne " ${GOOD}*${NORMAL} ${RC_INDENTATION}$*"
|
||||||
|
LAST_E_CMD="einfon"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# void ewarn(char* message)
|
||||||
|
#
|
||||||
|
# show a warning message + log it
|
||||||
|
#
|
||||||
|
ewarn() {
|
||||||
|
if [[ ${RC_QUIET_STDOUT} == "yes" ]] ; then
|
||||||
|
echo " $*"
|
||||||
|
else
|
||||||
|
[[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo
|
||||||
|
echo -e " ${WARN}*${NORMAL} ${RC_INDENTATION}$*"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local name="rc-scripts"
|
||||||
|
[[ $0 != "/sbin/runscript.sh" ]] && name="${0##*/}"
|
||||||
|
# Log warnings to system log
|
||||||
|
esyslog "daemon.warning" "${name}" "$*"
|
||||||
|
|
||||||
|
LAST_E_CMD="ewarn"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# void eerror(char* message)
|
||||||
|
#
|
||||||
|
# show an error message + log it
|
||||||
|
#
|
||||||
|
eerror() {
|
||||||
|
if [[ ${RC_QUIET_STDOUT} == "yes" ]] ; then
|
||||||
|
echo " $*" >/dev/stderr
|
||||||
|
else
|
||||||
|
[[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo
|
||||||
|
echo -e " ${BAD}*${NORMAL} ${RC_INDENTATION}$*"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local name="rc-scripts"
|
||||||
|
[[ $0 != "/sbin/runscript.sh" ]] && name="${0##*/}"
|
||||||
|
# Log errors to system log
|
||||||
|
esyslog "daemon.err" "rc-scripts" "$*"
|
||||||
|
|
||||||
|
LAST_E_CMD="eerror"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# void ebegin(char* message)
|
||||||
|
#
|
||||||
|
# show a message indicating the start of a process
|
||||||
|
#
|
||||||
|
ebegin() {
|
||||||
|
local msg="$*" dots spaces="${RC_DOT_PATTERN//?/ }"
|
||||||
|
[[ ${RC_QUIET_STDOUT} == "yes" ]] && return 0
|
||||||
|
|
||||||
|
if [[ -n ${RC_DOT_PATTERN} ]] ; then
|
||||||
|
dots="$(printf "%$((COLS - 3 - ${#RC_INDENTATION} - ${#msg} - 7))s" '')"
|
||||||
|
dots="${dots//${spaces}/${RC_DOT_PATTERN}}"
|
||||||
|
msg="${msg}${dots}"
|
||||||
|
else
|
||||||
|
msg="${msg} ..."
|
||||||
|
fi
|
||||||
|
einfon "${msg}"
|
||||||
|
[[ ${RC_ENDCOL} == "yes" ]] && echo
|
||||||
|
|
||||||
|
LAST_E_LEN="$(( 3 + ${#RC_INDENTATION} + ${#msg} ))"
|
||||||
|
LAST_E_CMD="ebegin"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# void _eend(int error, char *efunc, char* errstr)
|
||||||
|
#
|
||||||
|
# indicate the completion of process, called from eend/ewend
|
||||||
|
# if error, show errstr via efunc
|
||||||
|
#
|
||||||
|
# This function is private to functions.sh. Do not call it from a
|
||||||
|
# script.
|
||||||
|
#
|
||||||
|
_eend() {
|
||||||
|
local retval="${1:-0}" efunc="${2:-eerror}" msg
|
||||||
|
shift 2
|
||||||
|
|
||||||
|
if [[ ${retval} == "0" ]] ; then
|
||||||
|
[[ ${RC_QUIET_STDOUT} == "yes" ]] && return 0
|
||||||
|
msg="${BRACKET}[ ${GOOD}ok${BRACKET} ]${NORMAL}"
|
||||||
|
else
|
||||||
|
if [[ -c /dev/null ]] ; then
|
||||||
|
rc_splash "stop" &>/dev/null &
|
||||||
|
else
|
||||||
|
rc_splash "stop" &
|
||||||
|
fi
|
||||||
|
if [[ -n $* ]] ; then
|
||||||
|
${efunc} "$*"
|
||||||
|
fi
|
||||||
|
msg="${BRACKET}[ ${BAD}!!${BRACKET} ]${NORMAL}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${RC_ENDCOL} == "yes" ]] ; then
|
||||||
|
echo -e "${ENDCOL} ${msg}"
|
||||||
|
else
|
||||||
|
[[ ${LAST_E_CMD} == ebegin ]] || LAST_E_LEN=0
|
||||||
|
printf "%$(( COLS - LAST_E_LEN - 6 ))s%b\n" '' "${msg}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return ${retval}
|
||||||
|
}
|
||||||
|
|
||||||
|
# void eend(int error, char* errstr)
|
||||||
|
#
|
||||||
|
# indicate the completion of process
|
||||||
|
# if error, show errstr via eerror
|
||||||
|
#
|
||||||
|
eend() {
|
||||||
|
local retval="${1:-0}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
_eend "${retval}" eerror "$*"
|
||||||
|
|
||||||
|
LAST_E_CMD="eend"
|
||||||
|
return ${retval}
|
||||||
|
}
|
||||||
|
|
||||||
|
# void ewend(int error, char* errstr)
|
||||||
|
#
|
||||||
|
# indicate the completion of process
|
||||||
|
# if error, show errstr via ewarn
|
||||||
|
#
|
||||||
|
ewend() {
|
||||||
|
local retval="${1:-0}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
_eend "${retval}" ewarn "$*"
|
||||||
|
|
||||||
|
LAST_E_CMD="ewend"
|
||||||
|
return ${retval}
|
||||||
|
}
|
||||||
|
|
||||||
|
# v-e-commands honor RC_VERBOSE which defaults to no.
|
||||||
|
# The condition is negated so the return value will be zero.
|
||||||
|
veinfo() { [[ ${RC_VERBOSE} != "yes" ]] || einfo "$@"; }
|
||||||
|
veinfon() { [[ ${RC_VERBOSE} != "yes" ]] || einfon "$@"; }
|
||||||
|
vewarn() { [[ ${RC_VERBOSE} != "yes" ]] || ewarn "$@"; }
|
||||||
|
veerror() { [[ ${RC_VERBOSE} != "yes" ]] || eerror "$@"; }
|
||||||
|
vebegin() { [[ ${RC_VERBOSE} != "yes" ]] || ebegin "$@"; }
|
||||||
|
veend() {
|
||||||
|
[[ ${RC_VERBOSE} == "yes" ]] && { eend "$@"; return $?; }
|
||||||
|
return ${1:-0}
|
||||||
|
}
|
||||||
|
vewend() {
|
||||||
|
[[ ${RC_VERBOSE} == "yes" ]] && { ewend "$@"; return $?; }
|
||||||
|
return ${1:-0}
|
||||||
|
}
|
||||||
|
|
||||||
|
# char *KV_major(string)
|
||||||
|
#
|
||||||
|
# Return the Major (X of X.Y.Z) kernel version
|
||||||
|
#
|
||||||
|
KV_major() {
|
||||||
|
[[ -z $1 ]] && return 1
|
||||||
|
|
||||||
|
local KV="$@"
|
||||||
|
echo "${KV%%.*}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# char *KV_minor(string)
|
||||||
|
#
|
||||||
|
# Return the Minor (Y of X.Y.Z) kernel version
|
||||||
|
#
|
||||||
|
KV_minor() {
|
||||||
|
[[ -z $1 ]] && return 1
|
||||||
|
|
||||||
|
local KV="$@"
|
||||||
|
KV="${KV#*.}"
|
||||||
|
echo "${KV%%.*}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# char *KV_micro(string)
|
||||||
|
#
|
||||||
|
# Return the Micro (Z of X.Y.Z) kernel version.
|
||||||
|
#
|
||||||
|
KV_micro() {
|
||||||
|
[[ -z $1 ]] && return 1
|
||||||
|
|
||||||
|
local KV="$@"
|
||||||
|
KV="${KV#*.*.}"
|
||||||
|
echo "${KV%%[^[:digit:]]*}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# int KV_to_int(string)
|
||||||
|
#
|
||||||
|
# Convert a string type kernel version (2.4.0) to an int (132096)
|
||||||
|
# for easy compairing or versions ...
|
||||||
|
#
|
||||||
|
KV_to_int() {
|
||||||
|
[[ -z $1 ]] && return 1
|
||||||
|
|
||||||
|
local KV_MAJOR="$(KV_major "$1")"
|
||||||
|
local KV_MINOR="$(KV_minor "$1")"
|
||||||
|
local KV_MICRO="$(KV_micro "$1")"
|
||||||
|
local KV_int="$(( KV_MAJOR * 65536 + KV_MINOR * 256 + KV_MICRO ))"
|
||||||
|
|
||||||
|
# We make version 2.2.0 the minimum version we will handle as
|
||||||
|
# a sanity check ... if its less, we fail ...
|
||||||
|
if [[ ${KV_int} -ge 131584 ]] ; then
|
||||||
|
echo "${KV_int}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# int get_KV()
|
||||||
|
#
|
||||||
|
# Return the kernel version (major, minor and micro concated) as an integer.
|
||||||
|
# Assumes X and Y of X.Y.Z are numbers. Also assumes that some leading
|
||||||
|
# portion of Z is a number.
|
||||||
|
# e.g. 2.4.25, 2.6.10, 2.6.4-rc3, 2.2.40-poop, 2.0.15+foo
|
||||||
|
#
|
||||||
|
_RC_GET_KV_CACHE=""
|
||||||
|
get_KV() {
|
||||||
|
[[ -z ${_RC_GET_KV_CACHE} ]] \
|
||||||
|
&& _RC_GET_KV_CACHE="$(uname -r)"
|
||||||
|
|
||||||
|
echo "$(KV_to_int "${_RC_GET_KV_CACHE}")"
|
||||||
|
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
# bool get_bootparam(param)
|
||||||
|
#
|
||||||
|
# return 0 if gentoo=param was passed to the kernel
|
||||||
|
#
|
||||||
|
# EXAMPLE: if get_bootparam "nodevfs" ; then ....
|
||||||
|
#
|
||||||
|
get_bootparam() {
|
||||||
|
local x copt params retval=1
|
||||||
|
|
||||||
|
[[ ! -r /proc/cmdline ]] && return 1
|
||||||
|
|
||||||
|
for copt in $(< /proc/cmdline) ; do
|
||||||
|
if [[ ${copt%=*} == "gentoo" ]] ; then
|
||||||
|
params=$(gawk -v PARAMS="${copt##*=}" '
|
||||||
|
BEGIN {
|
||||||
|
split(PARAMS, nodes, ",")
|
||||||
|
for (x in nodes)
|
||||||
|
print nodes[x]
|
||||||
|
}')
|
||||||
|
|
||||||
|
# Parse gentoo option
|
||||||
|
for x in ${params} ; do
|
||||||
|
if [[ ${x} == "$1" ]] ; then
|
||||||
|
# echo "YES"
|
||||||
|
retval=0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return ${retval}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Safer way to list the contents of a directory,
|
||||||
|
# as it do not have the "empty dir bug".
|
||||||
|
#
|
||||||
|
# char *dolisting(param)
|
||||||
|
#
|
||||||
|
# print a list of the directory contents
|
||||||
|
#
|
||||||
|
# NOTE: quote the params if they contain globs.
|
||||||
|
# also, error checking is not that extensive ...
|
||||||
|
#
|
||||||
|
dolisting() {
|
||||||
|
local x=
|
||||||
|
local y=
|
||||||
|
local tmpstr=
|
||||||
|
local mylist=
|
||||||
|
local mypath="$*"
|
||||||
|
|
||||||
|
if [[ ${mypath%/\*} != "${mypath}" ]] ; then
|
||||||
|
mypath=${mypath%/\*}
|
||||||
|
fi
|
||||||
|
|
||||||
|
for x in ${mypath} ; do
|
||||||
|
[[ ! -e ${x} ]] && continue
|
||||||
|
|
||||||
|
if [[ ! -d ${x} ]] && [[ -L ${x} || -f ${x} ]] ; then
|
||||||
|
mylist="${mylist} $(ls "${x}" 2> /dev/null)"
|
||||||
|
else
|
||||||
|
[[ ${x%/} != "${x}" ]] && x=${x%/}
|
||||||
|
|
||||||
|
cd "${x}"; tmpstr=$(ls)
|
||||||
|
|
||||||
|
for y in ${tmpstr} ; do
|
||||||
|
mylist="${mylist} ${x}/${y}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "${mylist}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# char *add_suffix(char * configfile)
|
||||||
|
#
|
||||||
|
# Returns a config file name with the softlevel suffix
|
||||||
|
# appended to it. For use with multi-config services.
|
||||||
|
add_suffix() {
|
||||||
|
if [[ ${RC_USE_CONFIG_PROFILE} != "yes" ]] ; then
|
||||||
|
echo "$1"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local suffix="${SOFTLEVEL}"
|
||||||
|
[[ ${SOFTLEVEL} == "${BOOTLEVEL}" \
|
||||||
|
|| ${SOFTLEVEL} == "reboot" \
|
||||||
|
|| ${SOFTLEVEL} == "shutdown" \
|
||||||
|
|| ${SOFTLEVEL} == "single" ]] \
|
||||||
|
&& suffix="${DEFAULTLEVEL}"
|
||||||
|
if [[ -e "$1.${suffix}" ]] ; then
|
||||||
|
echo "$1.${suffix}"
|
||||||
|
else
|
||||||
|
echo "$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# char *get_base_ver()
|
||||||
|
#
|
||||||
|
# get the version of baselayout that this system is running
|
||||||
|
#
|
||||||
|
get_base_ver() {
|
||||||
|
[[ ! -r /etc/gentoo-release ]] && return 0
|
||||||
|
local ver="$(</etc/gentoo-release)"
|
||||||
|
echo "${ver##* }"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Network filesystems list for common use in rc-scripts.
|
||||||
|
# This variable is used in is_net_fs and other places such as
|
||||||
|
# localmount.
|
||||||
|
NET_FS_LIST="afs cifs coda davfs fuse gfs ncpfs nfs nfs4 ocfs2 shfs smbfs"
|
||||||
|
|
||||||
|
# bool is_net_fs(path)
|
||||||
|
#
|
||||||
|
# return 0 if path is the mountpoint of a networked filesystem
|
||||||
|
#
|
||||||
|
# EXAMPLE: if is_net_fs / ; then ...
|
||||||
|
#
|
||||||
|
is_net_fs() {
|
||||||
|
local fstype
|
||||||
|
# /proc/mounts is always accurate but may not always be available
|
||||||
|
if [[ -e /proc/mounts ]] ; then
|
||||||
|
fstype="$( sed -n -e '/^rootfs/!s:.* '"$1"' \([^ ]*\).*:\1:p' /proc/mounts )"
|
||||||
|
else
|
||||||
|
fstype="$( mount | sed -n -e 's:.* on '"$1"' type \([^ ]*\).*:\1:p' )"
|
||||||
|
fi
|
||||||
|
[[ " ${NET_FS_LIST} " == *" ${fstype} "* ]]
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
# bool is_net_fs(path)
|
||||||
|
#
|
||||||
|
# return 0 if path is under unionfs control
|
||||||
|
#
|
||||||
|
# EXAMPLE: if is_union_fs / ; then ...
|
||||||
|
#
|
||||||
|
is_union_fs() {
|
||||||
|
[[ ! -x /sbin/unionctl ]] && return 1
|
||||||
|
unionctl "$1" --list &>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# bool is_uml_sys()
|
||||||
|
#
|
||||||
|
# return 0 if the currently running system is User Mode Linux
|
||||||
|
#
|
||||||
|
# EXAMPLE: if is_uml_sys ; then ...
|
||||||
|
#
|
||||||
|
is_uml_sys() {
|
||||||
|
grep -qs 'UML' /proc/cpuinfo
|
||||||
|
}
|
||||||
|
|
||||||
|
# bool is_vserver_sys()
|
||||||
|
#
|
||||||
|
# return 0 if the currently running system is a Linux VServer
|
||||||
|
#
|
||||||
|
# EXAMPLE: if is_vserver_sys ; then ...
|
||||||
|
#
|
||||||
|
is_vserver_sys() {
|
||||||
|
grep -qs '^s_context:[[:space:]]*[1-9]' /proc/self/status
|
||||||
|
}
|
||||||
|
|
||||||
|
# bool is_vz_sys()
|
||||||
|
#
|
||||||
|
# return 0 if the currently running system is OpenVZ container
|
||||||
|
#
|
||||||
|
# EXAMPLE: if is_vz_sys ; then ...
|
||||||
|
#
|
||||||
|
is_vz_sys() {
|
||||||
|
grep -qs '^envID:[[:space:]]*[1-9]' /proc/self/status
|
||||||
|
}
|
||||||
|
|
||||||
|
# bool is_xenU_sys()
|
||||||
|
#
|
||||||
|
# return 0 if the currently running system is an unprivileged Xen domain
|
||||||
|
#
|
||||||
|
# EXAMPLE: if is_xenU_sys ; then ...
|
||||||
|
#
|
||||||
|
is_xenU_sys() {
|
||||||
|
[[ ! -d /proc/xen ]] && return 1
|
||||||
|
[[ ! -r /proc/xen/capabilities ]] && return 1
|
||||||
|
grep -q "control_d" /proc/xen/capabilities && return 1
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# bool get_mount_fstab(path)
|
||||||
|
#
|
||||||
|
# return the parameters to pass to the mount command generated from fstab
|
||||||
|
#
|
||||||
|
# EXAMPLE: cmd=$( get_mount_fstab /proc )
|
||||||
|
# cmd=${cmd:--t proc none /proc}
|
||||||
|
# mount -n ${cmd}
|
||||||
|
#
|
||||||
|
get_mount_fstab() {
|
||||||
|
gawk '$1 ~ "^#" { next }
|
||||||
|
$2 == "'$*'" { stab="-t "$3" -o "$4" "$1" "$2; }
|
||||||
|
END { print stab; }
|
||||||
|
' /etc/fstab
|
||||||
|
}
|
||||||
|
|
||||||
|
# char *reverse_list(list)
|
||||||
|
#
|
||||||
|
# Returns the reversed order of list
|
||||||
|
#
|
||||||
|
reverse_list() {
|
||||||
|
for (( i = $# ; i > 0 ; --i )) ; do
|
||||||
|
echo -n "${!i} "
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# void start_addon(addon)
|
||||||
|
#
|
||||||
|
# Starts addon.
|
||||||
|
#
|
||||||
|
start_addon() {
|
||||||
|
local addon="$1"
|
||||||
|
(import_addon "${addon}-start.sh")
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# void stop_addon(addon)
|
||||||
|
#
|
||||||
|
# Stops addon.
|
||||||
|
#
|
||||||
|
stop_addon() {
|
||||||
|
local addon=$1
|
||||||
|
(import_addon "${addon}-stop.sh")
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# bool is_older_than(reference, files/dirs to check)
|
||||||
|
#
|
||||||
|
# return 0 if any of the files/dirs are newer than
|
||||||
|
# the reference file
|
||||||
|
#
|
||||||
|
# EXAMPLE: if is_older_than a.out *.o ; then ...
|
||||||
|
is_older_than() {
|
||||||
|
local x=
|
||||||
|
local ref="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
for x in "$@" ; do
|
||||||
|
[[ ${x} -nt ${ref} ]] && return 0
|
||||||
|
[[ -d ${x} ]] && is_older_than "${ref}" "${x}"/* && return 0
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# char* bash_variable(char *variable)
|
||||||
|
#
|
||||||
|
# Turns the given variable into something that bash can use
|
||||||
|
# Basically replaces anything not a-z,A-Z into a _
|
||||||
|
#
|
||||||
|
bash_variable() {
|
||||||
|
local args="$@"
|
||||||
|
LC_ALL=C echo "${args//[![:word:]]/_}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# void requote()
|
||||||
|
#
|
||||||
|
# Requotes params so they're suitable to be eval'd, just like this would:
|
||||||
|
# set -- 1 2 "3 4"
|
||||||
|
# /usr/bin/getopt -- '' "$@" | sed 's/^ -- //'
|
||||||
|
#
|
||||||
|
requote() {
|
||||||
|
local q=\'
|
||||||
|
set -- "${@//\'/$q\'$q}" # quote inner instances of '
|
||||||
|
set -- "${@/#/$q}" # add ' to start of each param
|
||||||
|
set -- "${@/%/$q}" # add ' to end of each param
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
# char* uniqify(char *arg, ...)
|
||||||
|
#
|
||||||
|
# Ensure that params are unique
|
||||||
|
#
|
||||||
|
uniqify() {
|
||||||
|
local result= x=
|
||||||
|
while [[ -n "$1" ]] ; do
|
||||||
|
[[ " ${result} " != *" $1 "* ]] && result="${result} $1"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
echo "${result# *}"
|
||||||
|
}
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# #
|
||||||
|
# This should be the last code in here, please add all functions above!! #
|
||||||
|
# #
|
||||||
|
# *** START LAST CODE *** #
|
||||||
|
# #
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
if [[ -z ${EBUILD} ]] ; then
|
||||||
|
# Setup a basic $PATH. Just add system default to existing.
|
||||||
|
# This should solve both /sbin and /usr/sbin not present when
|
||||||
|
# doing 'su -c foo', or for something like: PATH= rcscript start
|
||||||
|
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:${PATH}"
|
||||||
|
|
||||||
|
# Cache the CONSOLETYPE - this is important as backgrounded shells don't
|
||||||
|
# have a TTY. rc unsets it at the end of running so it shouldn't hang
|
||||||
|
# around
|
||||||
|
if [[ -z ${CONSOLETYPE} ]] ; then
|
||||||
|
export CONSOLETYPE="$( /sbin/consoletype 2>/dev/null )"
|
||||||
|
fi
|
||||||
|
if [[ ${CONSOLETYPE} == "serial" ]] ; then
|
||||||
|
RC_NOCOLOR="yes"
|
||||||
|
RC_ENDCOL="no"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for arg in "$@" ; do
|
||||||
|
case "${arg}" in
|
||||||
|
# Lastly check if the user disabled it with --nocolor argument
|
||||||
|
--nocolor|-nc)
|
||||||
|
RC_NOCOLOR="yes"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
setup_defaultlevels
|
||||||
|
|
||||||
|
# If we are not /sbin/rc then ensure that we cannot change level variables
|
||||||
|
if [[ -n ${BASH_SOURCE} \
|
||||||
|
&& ${BASH_SOURCE[${#BASH_SOURCE[@]}-1]} != "/sbin/rc" ]] ; then
|
||||||
|
declare -r BOOTLEVEL DEFAULTLEVEL SOFTLEVEL
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Should we use colors ?
|
||||||
|
if [[ $* != *depend* ]] ; then
|
||||||
|
# Check user pref in portage
|
||||||
|
RC_NOCOLOR="$(portageq envvar NOCOLOR 2>/dev/null)"
|
||||||
|
[[ ${RC_NOCOLOR} == "true" ]] && RC_NOCOLOR="yes"
|
||||||
|
else
|
||||||
|
# We do not want colors during emerge depend
|
||||||
|
RC_NOCOLOR="yes"
|
||||||
|
# No output is seen during emerge depend, so this is not needed.
|
||||||
|
RC_ENDCOL="no"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n ${EBUILD} && $* == *depend* ]] ; then
|
||||||
|
# We do not want stty to run during emerge depend
|
||||||
|
COLS=80
|
||||||
|
else
|
||||||
|
# Setup COLS and ENDCOL so eend can line up the [ ok ]
|
||||||
|
COLS="${COLUMNS:-0}" # bash's internal COLUMNS variable
|
||||||
|
(( COLS == 0 )) && COLS="$(set -- `stty size 2>/dev/null` ; echo "$2")"
|
||||||
|
(( COLS > 0 )) || (( COLS = 80 )) # width of [ ok ] == 7
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${RC_ENDCOL} == "yes" ]] ; then
|
||||||
|
ENDCOL=$'\e[A\e['$(( COLS - 8 ))'C'
|
||||||
|
else
|
||||||
|
ENDCOL=''
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Setup the colors so our messages all look pretty
|
||||||
|
if [[ ${RC_NOCOLOR} == "yes" ]] ; then
|
||||||
|
unset GOOD WARN BAD NORMAL HILITE BRACKET
|
||||||
|
else
|
||||||
|
GOOD=$'\e[32;01m'
|
||||||
|
WARN=$'\e[33;01m'
|
||||||
|
BAD=$'\e[31;01m'
|
||||||
|
HILITE=$'\e[36;01m'
|
||||||
|
BRACKET=$'\e[34;01m'
|
||||||
|
NORMAL=$'\e[0m'
|
||||||
|
fi
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# #
|
||||||
|
# *** END LAST CODE *** #
|
||||||
|
# #
|
||||||
|
# This should be the last code in here, please add all functions above!! #
|
||||||
|
# #
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
|
||||||
|
# vim:ts=4
|
Loading…
Reference in New Issue
Block a user