diff --git a/lsinitrd.sh b/lsinitrd.sh index b19a66a..7bb1188 100755 --- a/lsinitrd.sh +++ b/lsinitrd.sh @@ -92,15 +92,7 @@ if [[ $1 ]]; then exit 1 fi else - [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id - - if [[ -d /boot/loader/entries || -L /boot/loader/entries ]] \ - && [[ $MACHINE_ID ]] \ - && [[ -d /boot/${MACHINE_ID} || -L /boot/${MACHINE_ID} ]] ; then - image="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd" - else - image="/boot/initramfs-${KERNEL_VERSION}.img" - fi + image="/boot/initrd.img-${KERNEL_VERSION}" fi shift diff --git a/mkinitrd-dracut.sh b/mkinitrd-dracut.sh index da34e34..638280a 100755 --- a/mkinitrd-dracut.sh +++ b/mkinitrd-dracut.sh @@ -1,5 +1,5 @@ #!/bin/bash --norc -kver=$(uname -r) +kernel_ver_dir='/var/lib/initramfs/kernel' boot_dir="/boot" quiet=0 @@ -48,63 +48,16 @@ read_arg() { fi } -# Taken over from SUSE mkinitrd +# For photon default_kernel_images() { - local regex kernel_image kernel_version version_version initrd_image - local qf='%{NAME}-%{VERSION}-%{RELEASE}\n' - - case "$(uname -m)" in - s390|s390x) - regex='image' - ;; - ppc|ppc64) - regex='vmlinux' - ;; - i386|x86_64) - regex='vmlinuz' - ;; - arm*) - regex='[uz]Image' - ;; - aarch64) - regex='Image' - ;; - *) regex='vmlinu.' - ;; - esac + local kernel_version - # user mode linux - if grep -q UML /proc/cpuinfo; then - regex='linux' - fi + for kernel_version in $(ls $kernel_ver_dir) ; do + + # Take this directory as the source of truth + kernels="$kernels $kernel_version" + targets="$targets $boot_dir/initrd.img-$kernel_version" - 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 @@ -187,7 +140,7 @@ while (($# > 0)); do done [[ $targets && $kernels ]] || default_kernel_images -[[ $targets && $kernels ]] || (error "No kernel found in $boot_dir" && usage) +[[ $targets && $kernels ]] || (error "No Kernel Registered") # We can have several targets/kernels, transform the list to an array targets=( $targets ) @@ -196,7 +149,6 @@ targets=( $targets ) [[ $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 if [[ $img_vers ]];then @@ -206,21 +158,27 @@ for ((i=0 ; $i<${#targets[@]} ; i++)); do fi kernel="${kernels[$i]}" + if [[ -s "$kernel_ver_dir/$kernel" ]]; then + readarray -t kernel_cfg < <(xargs -n1 -a $kernel_ver_dir/$kernel) + else + kernel_cfg=() + fi + # Duplicate code: No way found how to redirect output based on $quiet if [[ $quiet == 1 ]];then - echo "$target|$kernel|$dracut_args|$basicmodules" + echo "Creating $target" if [[ $basicmodules ]]; then - dracut $dracut_args --add-drivers "$basicmodules" "$target" \ + dracut $dracut_args --add-drivers "$basicmodules" "${kernel_cfg[@]}" "$target" \ "$kernel" &>/dev/null else - dracut $dracut_args "$target" "$kernel" &>/dev/null + dracut $dracut_args "${kernel_cfg[@]}" "$target" "$kernel" &>/dev/null fi else if [[ $basicmodules ]]; then - dracut $dracut_args --add-drivers "$basicmodules" "$target" \ + dracut $dracut_args --add-drivers "$basicmodules" "${kernel_cfg[@]}" "$target" \ "$kernel" else - dracut $dracut_args "$target" "$kernel" + dracut $dracut_args "${kernel_cfg[@]}" "$target" "$kernel" fi fi done