diff options
Diffstat (limited to '0012-dracut-functions.sh-removed-non-dracut-install-shell.patch')
-rw-r--r-- | 0012-dracut-functions.sh-removed-non-dracut-install-shell.patch | 354 |
1 files changed, 354 insertions, 0 deletions
diff --git a/0012-dracut-functions.sh-removed-non-dracut-install-shell.patch b/0012-dracut-functions.sh-removed-non-dracut-install-shell.patch new file mode 100644 index 0000000..72d0420 --- /dev/null +++ b/0012-dracut-functions.sh-removed-non-dracut-install-shell.patch @@ -0,0 +1,354 @@ +From 55a0b3abc7b8da4f3714cfcb5d34f7aa4e78e5bc Mon Sep 17 00:00:00 2001 +From: Harald Hoyer <harald@redhat.com> +Date: Mon, 5 Aug 2013 11:47:54 +0200 +Subject: [PATCH] dracut-functions.sh: removed non dracut-install shell + functions + +--- + dracut-functions.sh | 315 ++++++++++------------------------------------------ + 1 file changed, 56 insertions(+), 259 deletions(-) + +diff --git a/dracut-functions.sh b/dracut-functions.sh +index dee53bb..c0a12cd 100755 +--- a/dracut-functions.sh ++++ b/dracut-functions.sh +@@ -55,14 +55,6 @@ if ! [[ $dracutbasedir ]]; then + dracutbasedir="$(readlink -f $dracutbasedir)" + fi + +-if ! [[ $DRACUT_INSTALL ]]; then +- DRACUT_INSTALL=$(find_binary dracut-install) +-fi +- +-if ! [[ $DRACUT_INSTALL ]] && [[ -x $dracutbasedir/dracut-install ]]; then +- DRACUT_INSTALL=$dracutbasedir/dracut-install +-fi +- + # Detect lib paths + if ! [[ $libdirs ]] ; then + if [[ "$(ldd /bin/sh)" == */lib64/* ]] &>/dev/null \ +@@ -588,268 +580,73 @@ fs_get_option() { + done + } + +-if [[ $DRACUT_INSTALL ]]; then +- [[ $DRACUT_RESOLVE_LAZY ]] || export DRACUT_RESOLVE_DEPS=1 +- inst_dir() { +- [[ -e ${initdir}/"$1" ]] && return 0 # already there +- $DRACUT_INSTALL ${initdir+-D "$initdir"} -d "$@" +- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -d "$@" || : +- } +- +- inst() { +- [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there +- #dinfo "$DRACUT_INSTALL -l $@" +- $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" +- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : +- } +- +- inst_simple() { +- [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there +- [[ -e $1 ]] || return 1 # no source +- $DRACUT_INSTALL ${initdir+-D "$initdir"} "$@" +- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} "$@" || : +- } +- +- inst_symlink() { +- [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there +- [[ -L $1 ]] || return 1 +- $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" +- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : +- } +- +- dracut_install() { +- local ret +- #dinfo "initdir=$initdir $DRACUT_INSTALL -l $@" +- $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" +- ret=$? +- (($ret != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : +- return $ret +- } +- +- inst_library() { +- [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there +- [[ -e $1 ]] || return 1 # no source +- $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" +- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : +- } +- +- inst_binary() { +- $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" +- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : +- } +- +- inst_script() { +- $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" +- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : +- } +- +-else +- +- # Install a directory, keeping symlinks as on the original system. +- # Example: if /lib points to /lib64 on the host, "inst_dir /lib/file" +- # will create ${initdir}/lib64, ${initdir}/lib64/file, +- # and a symlink ${initdir}/lib -> lib64. +- inst_dir() { +- [[ -e ${initdir}/"$1" ]] && return 0 # already there +- +- local _dir="$1" _part="${1%/*}" _file +- while [[ "$_part" != "${_part%/*}" ]] && ! [[ -e "${initdir}/${_part}" ]]; do +- _dir="$_part $_dir" +- _part=${_part%/*} +- done +- +- # iterate over parent directories +- for _file in $_dir; do +- [[ -e "${initdir}/$_file" ]] && continue +- if [[ -L $_file ]]; then +- inst_symlink "$_file" +- else +- # create directory +- mkdir -m 0755 -p "${initdir}/$_file" || return 1 +- [[ -e "$_file" ]] && chmod --reference="$_file" "${initdir}/$_file" +- chmod u+w "${initdir}/$_file" +- fi +- done +- } + +- # $1 = file to copy to ramdisk +- # $2 (optional) Name for the file on the ramdisk +- # Location of the image dir is assumed to be $initdir +- # We never overwrite the target if it exists. +- inst_simple() { +- [[ -f "$1" ]] || return 1 +- [[ "$1" == */* ]] || return 1 +- local _src=$1 _target="${2:-$1}" +- +- [[ -L $_src ]] && { inst_symlink $_src $_target; return $?; } +- +- if ! [[ -d ${initdir}/$_target ]]; then +- [[ -e ${initdir}/$_target ]] && return 0 +- [[ -L ${initdir}/$_target ]] && return 0 +- [[ -d "${initdir}/${_target%/*}" ]] || inst_dir "${_target%/*}" +- fi +- if [[ $DRACUT_FIPS_MODE ]]; then +- # install checksum files also +- if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then +- inst "${_src%/*}/.${_src##*/}.hmac" "${_target%/*}/.${_target##*/}.hmac" +- fi +- if [[ -e "/lib/fipscheck/${_src##*/}.hmac" ]]; then +- inst "/lib/fipscheck/${_src##*/}.hmac" "/lib/fipscheck/${_target##*/}.hmac" +- fi +- if [[ -e "/lib64/fipscheck/${_src##*/}.hmac" ]]; then +- inst "/lib64/fipscheck/${_src##*/}.hmac" "/lib64/fipscheck/${_target##*/}.hmac" +- fi +- fi +- ddebug "Installing $_src" +- cp --reflink=auto --sparse=auto -pfL "$_src" "${initdir}/$_target" +- } ++if ! [[ $DRACUT_INSTALL ]]; then ++ DRACUT_INSTALL=$(find_binary dracut-install) ++fi + +- # same as above, but specialized for symlinks +- inst_symlink() { +- local _src=$1 _target=${2:-$1} _realsrc +- [[ "$1" == */* ]] || return 1 +- [[ -L $1 ]] || return 1 +- [[ -L $initdir/$_target ]] && return 0 +- _realsrc=$(readlink -f "$_src") +- if ! [[ -e $initdir/$_realsrc ]]; then +- if [[ -d $_realsrc ]]; then +- inst_dir "$_realsrc" +- else +- inst "$_realsrc" +- fi +- fi +- [[ ! -e $initdir/${_target%/*} ]] && inst_dir "${_target%/*}" ++if ! [[ $DRACUT_INSTALL ]] && [[ -x $dracutbasedir/dracut-install ]]; then ++ DRACUT_INSTALL=$dracutbasedir/dracut-install ++fi + +- ln_r "${_realsrc}" "${_target}" +- } ++if ! [[ -x $DRACUT_INSTALL ]]; then ++ dfatal "dracut-install not found!" ++ exit 10 ++fi + +- # Same as above, but specialized to handle dynamic libraries. +- # It handles making symlinks according to how the original library +- # is referenced. +- inst_library() { +- local _src="$1" _dest=${2:-$1} _lib _reallib _symlink +- [[ "$1" == */* ]] || return 1 +- [[ -e $initdir/$_dest ]] && return 0 +- if [[ -L $_src ]]; then +- if [[ $DRACUT_FIPS_MODE ]]; then +- # install checksum files also +- if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then +- inst "${_src%/*}/.${_src##*/}.hmac" "${_dest%/*}/.${_dest##*/}.hmac" +- fi +- if [[ -e "/lib/fipscheck/${_src##*/}.hmac" ]]; then +- inst "/lib/fipscheck/${_src##*/}.hmac" "/lib/fipscheck/${_dest##*/}.hmac" +- fi +- if [[ -e "/lib64/fipscheck/${_src##*/}.hmac" ]]; then +- inst "/lib64/fipscheck/${_src##*/}.hmac" "/lib64/fipscheck/${_dest##*/}.hmac" +- fi +- fi +- _reallib=$(readlink -f "$_src") +- inst_simple "$_reallib" "$_reallib" +- inst_dir "${_dest%/*}" +- ln_r "${_reallib}" "${_dest}" +- else +- inst_simple "$_src" "$_dest" +- fi ++[[ $DRACUT_RESOLVE_LAZY ]] || export DRACUT_RESOLVE_DEPS=1 ++inst_dir() { ++ [[ -e ${initdir}/"$1" ]] && return 0 # already there ++ $DRACUT_INSTALL ${initdir+-D "$initdir"} -d "$@" ++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -d "$@" || : ++} + +- # Create additional symlinks. See rev_symlinks description. +- for _symlink in $(rev_lib_symlinks $_src) $(rev_lib_symlinks $_reallib); do +- [[ ! -e $initdir/$_symlink ]] && { +- ddebug "Creating extra symlink: $_symlink" +- inst_symlink $_symlink +- } +- done +- } ++inst() { ++ [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there ++ #dinfo "$DRACUT_INSTALL -l $@" ++ $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" ++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : ++} + +- # Same as above, but specialized to install binary executables. +- # Install binary executable, and all shared library dependencies, if any. +- inst_binary() { +- local _bin _target +- _bin=$(find_binary "$1") || return 1 +- _target=${2:-$_bin} +- [[ -e $initdir/$_target ]] && return 0 +- local _file _line +- local _so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)' +- # I love bash! +- LC_ALL=C ldd "$_bin" 2>/dev/null | while read _line; do +- [[ $_line = 'not a dynamic executable' ]] && break +- +- if [[ $_line =~ $_so_regex ]]; then +- _file=${BASH_REMATCH[1]} +- [[ -e ${initdir}/$_file ]] && continue +- inst_library "$_file" +- continue +- fi ++inst_simple() { ++ [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there ++ [[ -e $1 ]] || return 1 # no source ++ $DRACUT_INSTALL ${initdir+-D "$initdir"} "$@" ++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} "$@" || : ++} + +- if [[ $_line == *not\ found* ]]; then +- dfatal "Missing a shared library required by $_bin." +- dfatal "Run \"ldd $_bin\" to find out what it is." +- dfatal "$_line" +- dfatal "dracut cannot create an initrd." +- exit 1 +- fi +- done +- inst_simple "$_bin" "$_target" +- } ++inst_symlink() { ++ [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there ++ [[ -L $1 ]] || return 1 ++ $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" ++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : ++} + +- # same as above, except for shell scripts. +- # If your shell script does not start with shebang, it is not a shell script. +- inst_script() { +- local _bin +- _bin=$(find_binary "$1") || return 1 +- shift +- local _line _shebang_regex +- read -r -n 80 _line <"$_bin" +- # If debug is set, clean unprintable chars to prevent messing up the term +- [[ $debug ]] && _line=$(echo -n "$_line" | tr -c -d '[:print:][:space:]') +- _shebang_regex='(#! *)(/[^ ]+).*' +- [[ $_line =~ $_shebang_regex ]] || return 1 +- inst "${BASH_REMATCH[2]}" && inst_simple "$_bin" "$@" +- } ++dracut_install() { ++ local ret ++ #dinfo "initdir=$initdir $DRACUT_INSTALL -l $@" ++ $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" ++ ret=$? ++ (($ret != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : ++ return $ret ++} + +- # general purpose installation function +- # Same args as above. +- inst() { +- local _x +- +- case $# in +- 1) ;; +- 2) [[ ! $initdir && -d $2 ]] && export initdir=$2 +- [[ $initdir = $2 ]] && set $1;; +- 3) [[ -z $initdir ]] && export initdir=$2 +- set $1 $3;; +- *) dfatal "inst only takes 1 or 2 or 3 arguments" +- exit 1;; +- esac +- for _x in inst_symlink inst_script inst_binary inst_simple; do +- $_x "$@" && return 0 +- done +- return 1 +- } ++inst_library() { ++ [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there ++ [[ -e $1 ]] || return 1 # no source ++ $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" ++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : ++} + +- # dracut_install [-o ] <file> [<file> ... ] +- # Install <file> to the initramfs image +- # -o optionally install the <file> and don't fail, if it is not there +- dracut_install() { +- local _optional=no +- if [[ $1 = '-o' ]]; then +- _optional=yes +- shift +- fi +- while (($# > 0)); do +- if ! inst "$1" ; then +- if [[ $_optional = yes ]]; then +- dinfo "Skipping program $1 as it cannot be found and is" \ +- "flagged to be optional" +- else +- dfatal "Failed to install $1" +- exit 1 +- fi +- fi +- shift +- done +- } ++inst_binary() { ++ $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" ++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : ++} + +-fi ++inst_script() { ++ $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" ++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : ++} + + # find symlinks linked to given library file + # $1 = library file |