X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=mkinitrd-dracut.sh;h=82d90684eddf337a692b0471b2b1fb2884482ad1;hb=3d2a6d29d4cec422e2d00c67b12ec5adae1ada86;hp=803abc0fcea18d4c516a9c63b1e07268d6933739;hpb=cbd1b385a2c91b1ac2b9720466583baceda0b0ee;p=thirdparty%2Fdracut.git diff --git a/mkinitrd-dracut.sh b/mkinitrd-dracut.sh index 803abc0fc..82d90684e 100755 --- a/mkinitrd-dracut.sh +++ b/mkinitrd-dracut.sh @@ -3,6 +3,8 @@ kver=$(uname -r) boot_dir="/boot" quiet=0 +host_only=0 +force=0 error() { echo "$@" >&2; } @@ -46,6 +48,68 @@ read_arg() { fi } +# Taken over from SUSE mkinitrd +default_kernel_images() { + local regex kernel_image kernel_version version_version initrd_image + local qf='%{NAME}-%{VERSION}-%{RELEASE}\n' + + case "${DRACUT_ARCH:-$(uname -m)}" in + s390|s390x) + regex='image' + ;; + ppc|ppc64) + regex='vmlinux' + ;; + i386|x86_64) + regex='vmlinuz' + ;; + arm*) + regex='[uz]Image' + ;; + aarch64|riscv64) + regex='Image' + ;; + *) regex='vmlinu.' + ;; + esac + + # user mode linux + if grep -q UML /proc/cpuinfo; then + regex='linux' + fi + + kernel_images="" + initrd_images="" + for kernel_image in $(ls $boot_dir \ + | sed -ne "\|^$regex\(-[0-9.]\+-[0-9]\+-[a-z0-9]\+$\)\?|p" \ + | grep -v kdump$ ) ; do + + # Note that we cannot check the RPM database here -- this + # script is itself called from within the binary kernel + # packages, and rpm does not allow recursive calls. + + [ -L "$boot_dir/$kernel_image" ] && continue + [ "${kernel_image%%.gz}" != "$kernel_image" ] && continue + kernel_version=$(/usr/bin/get_kernel_version \ + $boot_dir/$kernel_image 2> /dev/null) + initrd_image=$(echo $kernel_image | sed -e "s|${regex}|initrd|") + if [ "$kernel_image" != "$initrd_image" -a \ + -n "$kernel_version" -a \ + -d "/lib/modules/$kernel_version" ]; then + kernel_images="$kernel_images $boot_dir/$kernel_image" + initrd_images="$initrd_images $boot_dir/$initrd_image" + fi + done + for kernel_image in $kernel_images;do + kernels="$kernels ${kernel_image#*-}" + done + for initrd_image in $initrd_images;do + targets="$targets $initrd_image" + done + host_only=1 + force=1 +} + while (($# > 0)); do case ${1%%=*} in --with-usb) read_arg usbmodule "$@" || shift $? @@ -59,11 +123,11 @@ while (($# > 0)); do echo "mkinitrd: dracut compatibility wrapper" exit 0;; -v|--verbose) dracut_args="${dracut_args} -v";; - -f|--force) dracut_args="${dracut_args} -f";; + -f|--force) force=1;; --preload) read_arg modname "$@" || shift $? basicmodules="$basicmodules $modname";; --image-version) img_vers=yes;; - --rootfs) read_arg rootfs "$@" || shift $? + --rootfs|-d) read_arg rootfs "$@" || shift $? dracut_args="${dracut_args} --filesystems $rootfs";; --nocompress) dracut_args="$dracut_args --no-compress";; --help) usage -n;; @@ -90,6 +154,7 @@ while (($# > 0)); do --looppath*) ;; --dsdt*) ;; --bootchart) ;; + -s) ;; --quiet|-q) quiet=1;; -b) read_arg boot_dir "$@" || shift $? if [ ! -d $boot_dir ];then @@ -102,6 +167,8 @@ while (($# > 0)); do for kernel_image in $kernel_images;do kernels="$kernels ${kernel_image#*-}" done + host_only=1 + force=1 ;; -i) read_arg initrd_images "$@" || shift $? for initrd_image in $initrd_images;do @@ -119,12 +186,16 @@ while (($# > 0)); do shift done -[[ $targets && $kernels ]] || usage +[[ $targets && $kernels ]] || default_kernel_images +[[ $targets && $kernels ]] || (error "No kernel found in $boot_dir" && usage) # We can have several targets/kernels, transform the list to an array targets=( $targets ) [[ $kernels ]] && kernels=( $kernels ) +[[ $host_only == 1 ]] && dracut_args="${dracut_args} -H" +[[ $force == 1 ]] && dracut_args="${dracut_args} -f" + echo "Creating: target|kernel|dracut args|basicmodules " for ((i=0 ; $i<${#targets[@]} ; i++)); do