diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh index c8818696..9eae4d91 100755 --- a/modules.d/99base/dracut-lib.sh +++ b/modules.d/99base/dracut-lib.sh @@ -602,6 +602,92 @@ usable_root() { return 0 } +inst_hook() { + local _hookname _unique _name _job _exe + while [ $# -gt 0 ]; do + case "$1" in + --hook) + _hookname="/$2";shift;; + --unique) + _unique="yes";; + --name) + _name="$2";shift;; + *) + break;; + esac + shift + done + + if [ -z "$_unique" ]; then + _job="${_name}$$" + else + _job="${_name:-$1}" + _job=${_job##*/} + fi + + _exe=$1 + shift + + [ -x "$_exe" ] || _exe=$(command -v $_exe) + + if [ -n "$onetime" ]; then + { + echo '[ -e "$_job" ] && rm "$_job"' + echo "$_exe $@" + } > "/tmp/$$-${_job}.sh" + else + echo "$_exe $@" > "/tmp/$$-${_job}.sh" + fi + + mv -f "/tmp/$$-${_job}.sh" "$hookdir/${_hookname}/${_job}.sh" +} + +# inst_mount_hook