diff --git a/src/etc/pacman.d/hooks/90-mkinitcpio-install.hook b/src/etc/pacman.d/hooks/90-mkinitcpio-install.hook index 4653c7c..746525a 100644 --- a/src/etc/pacman.d/hooks/90-mkinitcpio-install.hook +++ b/src/etc/pacman.d/hooks/90-mkinitcpio-install.hook @@ -4,6 +4,13 @@ Operation = Install Operation = Upgrade Target = usr/lib/modules/*/vmlinuz +[Trigger] +Type = Package +Operation = Install +Target = mkinitcpio +Target = mkinitcpio-git +Target = eos-systemd-boot + [Action] Description = Installing mkinitcpio presets... When = PostTransaction diff --git a/src/usr/bin/gen-mkinitcpio-preset b/src/usr/bin/gen-mkinitcpio-preset new file mode 100755 index 0000000..c0f4264 --- /dev/null +++ b/src/usr/bin/gen-mkinitcpio-preset @@ -0,0 +1,35 @@ +#/usr/bin/env bash + +# Check to ensure we have the correct number of input parameters +if [[ -z $1 || -z $2 || -z $3 ]]; then + echo "Usage: gen-mkinitcpio-preset " + exit 1 +fi + +# parse the input +version=${1} +vmlinuz=${2} +packagename=${3} + +preset_file="/etc/mkinitcpio.d/${packagename}.preset" + +# get the machine-id +machineid=$(cat /etc/machine-id) +if [[ -z ${machineid} ]]; then + echo "Failed to get the machine ID" + exit +fi + +# Find the configured esp +esp=$(bootctl -p) + +# create a preset compatible with kernel-install +preset_file="/etc/mkinitcpio.d/${packagename}.preset" +echo ":: Generating ${preset_file}" + +echo 'ALL_config="/etc/mkinitcpio.conf"' > ${preset_file} +echo 'ALL_kver="'"${esp}/${machineid}/${version}/linux"'"' >> ${preset_file} +echo 'PRESETS=('default' 'fallback')' >> ${preset_file} +echo 'default_image="'"${esp}/${machineid}/${version}/initrd"'"' >> ${preset_file} +echo 'fallback_image="'"${esp}/${machineid}/${version}/initrd-fallback"'"' >> ${preset_file} +echo 'fallback_options="-S autodetect"' >> ${preset_file} \ No newline at end of file diff --git a/src/usr/share/libalpm/scripts/kernel-install-mkinitcpio-install b/src/usr/share/libalpm/scripts/kernel-install-mkinitcpio-install index 7383549..d4f558c 100755 --- a/src/usr/share/libalpm/scripts/kernel-install-mkinitcpio-install +++ b/src/usr/share/libalpm/scripts/kernel-install-mkinitcpio-install @@ -1,38 +1,38 @@ -#!/bin/bash -e +#!/usr/bin/env bash + + + +all=0 while read -r line; do + if [[ $line != */vmlinuz ]]; then + # triggers when it's a change to usr/lib/initcpio/* + all=1 + continue + fi if ! read -r pkgbase > /dev/null 2>&1 < "${line%/vmlinuz}/pkgbase"; then # if the kernel has no pkgbase, we skip it continue fi - + # parse the input version=$(basename "${line%/vmlinuz}") vmlinuz="/${line}" packagename=$(cat ${line%/vmlinuz}/pkgbase) - preset_file="/etc/mkinitcpio.d/${packagename}.preset" - - # get the machine-id - machineid=$(cat /etc/machine-id) - if [[ -z ${machineid} ]]; then - echo "Failed to get the machine ID" - exit - fi - - # Find the configured esp - esp=$(bootctl -p) - - # create a preset compatible with kernel-install - preset_file="/etc/mkinitcpio.d/${packagename}.preset" - echo ":: Modifying ${preset_file}" - - echo 'ALL_config="/etc/mkinitcpio.conf"' > ${preset_file} - echo 'ALL_kver="'"${esp}/${machineid}/${version}/linux"'"' >> ${preset_file} - echo 'PRESETS=('default' 'fallback')' >> ${preset_file} - echo 'default_image="'"${esp}/${machineid}/${version}/initrd"'"' >> ${preset_file} - echo 'fallback_image="'"${esp}/${machineid}/${version}/initrd-fallback"'"' >> ${preset_file} - echo 'fallback_options="-S autodetect"' >> ${preset_file} + echo /usr/bin/gen-mkinitcpio-preset ${version} ${vmlinuz} ${packagename} done + +if [[ $all == 0 ]]; then + # Run gen-mkinitcpio-preset for all the installed kernels + while read -r pkgbasefile; do + version=$(basename "${pkgbasefile%/pkgbase}") + vmlinuz="${pkgbasefile%/pkgbase}/vmlinuz" + packagename=$(cat ${pkgbasefile}) + echo /usr/bin/gen-mkinitcpio-preset ${version} ${vmlinuz} ${packagename} + done < <(find /usr/lib/modules -maxdepth 2 -type f -name pkgbase) +fi + +