From f4031e8a9a7734fbb94e7350a814a5446c5cef5c Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Sat, 30 Jun 2012 09:12:35 +0200 Subject: [PATCH] move dracut-install to dracutbasedir We do not want to install dracut-install to /usr/bin until all interfaces are set to stone and the manpage is written. Until then the tool is dracut internal. --- Makefile | 25 ++++++++--- dracut-functions.sh | 121 +++++++++++++++++++++++++++++---------------------- dracut.sh | 4 +- dracut.spec | 9 +++- install/Makefile | 18 ++------ 5 files changed, 102 insertions(+), 75 deletions(-) diff --git a/Makefile b/Makefile index 5488f8e..1d5531d 100644 --- a/Makefile +++ b/Makefile @@ -13,10 +13,25 @@ manpages = dracut.8 dracut.cmdline.7 dracut.conf.5 dracut-catimages.8 .PHONY: install clean archive rpm testimage test all check AUTHORS doc -all: syncheck dracut-version.sh install/dracut-install +all: syncheck dracut-version.sh dracut-install -install/dracut-install: - $(MAKE) -C install dracut-install +DRACUT_INSTALL_SOURCE = \ + install/dracut-install.c \ + install/hashmap.c\ + install/log.c \ + install/util.c + +DRACUT_INSTALL_HEADER = \ + install/hashmap.h \ + install/log.h \ + install/macro.h \ + install/util.h + +dracut-install: $(DRACUT_INSTALL_SOURCE) $(DRACUT_INSTALL_HEADER) + gcc -std=gnu99 -O2 -g -Wall -o dracut-install $(DRACUT_INSTALL_SOURCE) + +indent: + indent -i8 -nut -br -linux -l120 install/dracut-install.c doc: $(manpages) dracut.html @@ -74,7 +89,7 @@ install: doc dracut-version.sh ln -s ../dracut-shutdown.service \ $(DESTDIR)$(systemdsystemunitdir)/shutdown.target.wants/dracut-shutdown.service; \ fi - $(MAKE) -C install install + install $(strip) -m 0755 dracut-install $(DESTDIR)$(pkglibdir)/dracut-install dracut-version.sh: @echo "DRACUT_VERSION=$(VERSION)-$(GITVERSION)" > dracut-version.sh @@ -85,9 +100,9 @@ clean: $(RM) */*/*~ $(RM) test-*.img $(RM) dracut-*.rpm dracut-*.tar.bz2 + $(RM) dracut-install $(RM) $(manpages) dracut.html $(MAKE) -C test clean - $(MAKE) -C install clean archive: dracut-$(VERSION)-$(GITVERSION).tar.bz2 diff --git a/dracut-functions.sh b/dracut-functions.sh index 3fca456..5acf6f6 100755 --- a/dracut-functions.sh +++ b/dracut-functions.sh @@ -20,11 +20,30 @@ # along with this program. If not, see . # -[[ -d "$initdir/.kernelmodseen" ]] || mkdir -p "$initdir/.kernelmodseen" + +if [[ $DRACUT_KERNEL_LAZY ]] && ! [[ $DRACUT_KERNEL_LAZY_HASHDIR ]]; then + if ! [[ -d "$initdir/.kernelmodseen" ]]; then + mkdir -p "$initdir/.kernelmodseen" + fi + DRACUT_KERNEL_LAZY_HASHDIR="$initdir/.kernelmodseen" +fi # Generic substring function. If $2 is in $1, return 0. strstr() { [[ $1 = *$2* ]]; } +# find a binary. If we were not passed the full path directly, +# search in the usual places to find the binary. +find_binary() { + if [[ -z ${1##/*} ]]; then + if [[ -x $1 ]] || { strstr "$1" ".so" && ldd $1 &>/dev/null; }; then + echo $1 + return 0 + fi + fi + + type -P $1 +} + if ! [[ $dracutbasedir ]]; then dracutbasedir=${BASH_SOURCE[0]%/*} [[ $dracutbasedir = "dracut-functions" ]] && dracutbasedir="." @@ -32,6 +51,14 @@ 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 strstr "$(ldd /bin/sh)" "/lib64/" &>/dev/null \ @@ -391,56 +418,56 @@ check_vol_slaves() { return 1 } -if [[ -x /usr/bin/dracut-install ]]; then +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 "$@" || : + $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} "$@" || : + #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"} "$@" || : + $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 ${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() { - #dinfo "initdir=$initdir dracut-install -l $@" - dracut-install ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" - (($? != 0)) && derror dracut-install ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : + #dinfo "initdir=$initdir $DRACUT_INSTALL -l $@" + $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" + (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : } 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 ${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} "$@" || : + $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} "$@" || : + $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 @@ -664,19 +691,6 @@ rev_lib_symlinks() { echo "${links}" } -# find a binary. If we were not passed the full path directly, -# search in the usual places to find the binary. -find_binary() { - if [[ -z ${1##/*} ]]; then - if [[ -x $1 ]] || { strstr "$1" ".so" && ldd $1 &>/dev/null; }; then - echo $1 - return 0 - fi - fi - - type -P $1 -} - # attempt to install any programs specified in a udev rule inst_rule_programs() { local _prog _bin @@ -1112,8 +1126,8 @@ install_kmod_with_fw() { [[ -e "${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" ]] \ && return 0 - if [[ -e "$initdir/.kernelmodseen/${1##*/}" ]]; then - read ret < "$initdir/.kernelmodseen/${1##*/}" + if [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && [[ -e "$DRACUT_KERNEL_LAZY_HASHDIR/${1##*/}" ]]; then + read ret < "$DRACUT_KERNEL_LAZY_HASHDIR/${1##*/}" return $ret fi @@ -1133,8 +1147,9 @@ install_kmod_with_fw() { inst_simple "$1" "/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" ret=$? - [ -d "$initdir/.kernelmodseen" ] && \ - echo $ret > "$initdir/.kernelmodseen/${1##*/}" + [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && \ + [[ -d "$DRACUT_KERNEL_LAZY_HASHDIR" ]] && \ + echo $ret > "$DRACUT_KERNEL_LAZY_HASHDIR/${1##*/}" (($ret != 0)) && return $ret local _modname=${1##*/} _fwdir _found _fw @@ -1181,38 +1196,38 @@ for_each_kmod_dep() { dracut_kernel_post() { local _moddirname=${srcmods%%/lib/modules/*} - if [[ -f "$initdir/.kernelmodseen/lazylist" ]]; then + if [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && [[ -f "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist" ]]; then xargs modprobe -a ${_moddirname+-d ${_moddirname}/} --ignore-install --show-depends \ - < "$initdir/.kernelmodseen/lazylist" 2>/dev/null \ + < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist" 2>/dev/null \ | sort -u \ | while read _cmd _modpath _options; do [[ $_cmd = insmod ]] || continue echo "$_modpath" - done > "$initdir/.kernelmodseen/lazylist.dep" + done > "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep" ( - if [[ -x /usr/bin/dracut-install ]] && [[ -z $_moddirname ]]; then - xargs dracut-install ${initdir+-D "$initdir"} -a < "$initdir/.kernelmodseen/lazylist.dep" + if [[ -x $DRACUT_INSTALL ]] && [[ -z $_moddirname ]]; then + xargs $DRACUT_INSTALL ${initdir+-D "$initdir"} -a < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep" else while read _modpath; do local _destpath=$_modpath [[ $_moddirname ]] && _destpath=${_destpath##$_moddirname/} _destpath=${_destpath##*/lib/modules/$kernel/} inst_simple "$_modpath" "/lib/modules/$kernel/${_destpath}" || exit $? - done < "$initdir/.kernelmodseen/lazylist.dep" + done < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep" fi ) & - if [[ -x /usr/bin/dracut-install ]]; then - xargs modinfo -k $kernel -F firmware < "$initdir/.kernelmodseen/lazylist.dep" \ + if [[ -x $DRACUT_INSTALL ]]; then + xargs modinfo -k $kernel -F firmware < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep" \ | while read line; do for _fwdir in $fw_dir; do echo $_fwdir/$line; done; - done |xargs dracut-install ${initdir+-D "$initdir"} -a -o + done |xargs $DRACUT_INSTALL ${initdir+-D "$initdir"} -a -o else - for _fw in $(xargs modinfo -k $kernel -F firmware < "$initdir/.kernelmodseen/lazylist.dep"); do + for _fw in $(xargs modinfo -k $kernel -F firmware < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep"); do for _fwdir in $fw_dir; do if [[ -d $_fwdir && -f $_fwdir/$_fw ]]; then inst_simple "$_fwdir/$_fw" "/lib/firmware/$_fw" @@ -1243,7 +1258,7 @@ dracut_kernel_post() { exit 1 fi - rm -fr "$initdir/.kernelmodseen" + [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && rm -fr "$DRACUT_KERNEL_LAZY_HASHDIR" } find_kernel_modules_by_path () ( @@ -1296,8 +1311,9 @@ instmods() { _mod=${_mod##*/} # if we are already installed, skip this module and go on # to the next one. - if [[ -f "$initdir/.kernelmodseen/${_mod%.ko}.ko" ]]; then - read _ret <"$initdir/.kernelmodseen/${_mod%.ko}.ko" + if [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && \ + [[ -f "$DRACUT_KERNEL_LAZY_HASHDIR/${_mod%.ko}.ko" ]]; then + read _ret <"$DRACUT_KERNEL_LAZY_HASHDIR/${_mod%.ko}.ko" return $_ret fi @@ -1312,7 +1328,7 @@ instmods() { && ! [[ "$add_drivers" =~ " ${_mod} " ]] \ && return 0 - if [[ "$_check" = "yes" ]] || ! [[ $DRACUT_KERNEL_LAZY ]]; then + if [[ "$_check" = "yes" ]] || ! [[ $DRACUT_KERNEL_LAZY_HASHDIR ]]; then # We use '-d' option in modprobe only if modules prefix path # differs from default '/'. This allows us to use Dracut with # old version of modprobe which doesn't have '-d' option. @@ -1325,7 +1341,8 @@ instmods() { --set-version $kernel ${_moddirname} $_mpargs ((_ret+=$?)) else - echo $_mod >> "$initdir/.kernelmodseen/lazylist" + [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && \ + echo $_mod >> "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist" fi ;; esac diff --git a/dracut.sh b/dracut.sh index 335f08b..1dc8cee 100755 --- a/dracut.sh +++ b/dracut.sh @@ -820,12 +820,12 @@ if [[ $kernel_only != yes ]]; then cat $f >> "${initdir}/etc/fstab" done - if [[ $DRACUT_RESOLVE_LAZY ]] && [[ -x /usr/bin/dracut-install ]]; then + if [[ $DRACUT_RESOLVE_LAZY ]] && [[ $DRACUT_INSTALL ]]; then dinfo "*** Resolving executable dependencies ***" find "$initdir" -type f \ '(' -perm -0100 -or -perm -0010 -or -perm -0001 ')' \ -not -path '*.ko' -print0 \ - | xargs -0 dracut-install ${initdir+-D "$initdir"} -R ${DRACUT_FIPS_MODE+-H} + | xargs -0 $DRACUT_INSTALL ${initdir+-D "$initdir"} -R ${DRACUT_FIPS_MODE+-H} dinfo "*** Resolving executable dependencies done***" fi diff --git a/dracut.spec b/dracut.spec index 96dbc9c..06d8139 100644 --- a/dracut.spec +++ b/dracut.spec @@ -19,8 +19,13 @@ Group: System Environment/Base %if 0%{?suse_version} Group: System/Base %endif -License: GPLv2+ + +# The entire source code is GPLv2+ +# except install/* which is LGPLv2.1+ +License: GPLv2+ and LGPLv2.1+ + URL: https://dracut.wiki.kernel.org/ + # Source can be generated by # http://git.kernel.org/?p=boot/dracut/dracut.git;a=snapshot;h=%{version};sf=tgz Source0: http://www.kernel.org/pub/linux/utils/boot/dracut/dracut-%{version}.tar.bz2 @@ -235,7 +240,6 @@ rm -rf $RPM_BUILD_ROOT %if 0%{?fedora} > 12 || 0%{?rhel} >= 6 || 0%{?suse_version} > 9999 %{_bindir}/mkinitrd %{_bindir}/lsinitrd -%{_bindir}/dracut-install %endif %dir %{dracutlibdir} %dir %{dracutlibdir}/modules.d @@ -244,6 +248,7 @@ rm -rf $RPM_BUILD_ROOT %{dracutlibdir}/dracut-version.sh %{dracutlibdir}/dracut-logger.sh %{dracutlibdir}/dracut-initramfs-restore +%{dracutlibdir}/dracut-install %config(noreplace) /etc/dracut.conf %if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} %config /etc/dracut.conf.d/01-dist.conf diff --git a/install/Makefile b/install/Makefile index 59532a8..5332f25 100644 --- a/install/Makefile +++ b/install/Makefile @@ -1,17 +1,7 @@ -prefix ?= /usr -bindir ?= ${prefix}/bin -strip ?= -s - -all: dracut-install - -dracut-install: dracut-install.c hashmap.c log.c util.c - gcc -std=gnu99 -O2 -g -Wall -o dracut-install dracut-install.c hashmap.c log.c util.c - -install: dracut-install - install $(strip) -m 0755 dracut-install $(DESTDIR)$(bindir)/dracut-install +all: + $(MAKE) -C .. clean: - rm -f dracut-install *~ + $(MAKE) -C .. clean -indent: - indent -i8 -nut -br -linux -l120 dracut-install.c +.PHONY: all clean