diff options
author | Giancarlo Razzolini <grazzolini@archlinux.org> | 2019-10-10 23:40:23 +0200 |
---|---|---|
committer | Giancarlo Razzolini <grazzolini@archlinux.org> | 2019-10-10 23:40:23 +0200 |
commit | 9c1e0f3dd01151b79e9b557ea8510605616c1369 (patch) | |
tree | a7e09e6dab8ea5f13811f7ca5ecf3cef9dfddfd5 | |
parent | 0791321ed88bc480b193889c26cf4c356f1c78f7 (diff) | |
download | mkinitcpio-9c1e0f3dd01151b79e9b557ea8510605616c1369.tar.gz mkinitcpio-9c1e0f3dd01151b79e9b557ea8510605616c1369.tar.xz |
Rework the install script a bit more
Added comments to make the flow more understandable. We now actively bail when
we encounter a kernel with no pkgbase. Also, if the preset does not exist yet,
and there is a .pacsave, we move that instead of copying from the template. Move
the preset check alongside the check if all was passed and finally, check if the
args array is not empty, before trying to run mkinitcpio.
-rw-r--r-- | libalpm/scripts/mkinitcpio-install | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/libalpm/scripts/mkinitcpio-install b/libalpm/scripts/mkinitcpio-install index ab952a7..d2e5041 100644 --- a/libalpm/scripts/mkinitcpio-install +++ b/libalpm/scripts/mkinitcpio-install @@ -5,29 +5,40 @@ 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 - pkgbase=$(<"${line%/vmlinuz}/pkgbase") - [[ -n ${pkgbase} ]] + if ! read -r pkgbase > /dev/null 2>&1 < "${line%/vmlinuz}/pkgbase"; then + # if the kernel has no pkgbase, we skip it + continue + fi preset="/etc/mkinitcpio.d/${pkgbase}.preset" if [[ ! -e $preset ]]; then - sed "s|%PKGBASE%|${pkgbase}|g" /usr/share/mkinitcpio/hook.preset \ - | install -Dm644 /dev/stdin "$preset" + if [[ -e $preset.pacsave ]]; then + # move the pacsave to the template + mv "${preset}.pacsave" "$preset" + else + # create the preset from the template + sed "s|%PKGBASE%|${pkgbase}|g" /usr/share/mkinitcpio/hook.preset \ + | install -Dm644 /dev/stdin "$preset" + fi fi + # always install the kernel install -Dm644 "${line}" "/boot/vmlinuz-${pkgbase}" + + # compound args for each kernel args+=(-p "${pkgbase}") done -if (( all )); then +if (( all )) && compgen -G /etc/mkinitcpio.d/"*.preset" > /dev/null; then + # change to use all presets args=(-P) fi -if ! compgen -G /etc/mkinitcpio.d/"*.preset" > /dev/null; then - exit 0 +if (( ${#args[@]} )); then + mkinitcpio "${args[@]}" fi - -mkinitcpio "${args[@]}" |