diff --git a/arch_post_update_update_boot.sh b/arch_post_update_update_boot.sh index b9575c3..02fafca 100755 --- a/arch_post_update_update_boot.sh +++ b/arch_post_update_update_boot.sh @@ -17,49 +17,61 @@ source /etc/profile ask_overwrite() { echo "Existing destination folder ($ARCH_BOOT_DST_CURRENT_VERSION), do you want to overwrite? (y/n)"; read OVERWRITE; - test "$OVERWRITE" = "y" && return - echo "Do not overwrite. Exitting gently..." - exit 0; + return `test "$OVERWRITE" = "y"` } -PACMAN_BIN=${PACMAN_BIN:-/usr/bin/pacman} -BOOT_SYMLINK=${BOOT_SYMLINK:-current} +do_upgrade() { + PKG_NAME=$1 + ARCH_INITRAMFS=$2 + ARCH_INITRAMFS_FALLBACK=$3 + ARCH_VMLINUZ=$4 + + PACMAN_BIN=${PACMAN_BIN:-/usr/bin/pacman} + BOOT_SYMLINK=${BOOT_SYMLINK:-$PKG_NAME} + + BOOT_ORIG=/boot + + ARCH_BOOT_DST=$TMP_BOOT_DST/$BOOT_DIR_SUFFIX + + + CURRENT_VERSION=`${PACMAN_BIN} -Qi $PKG_NAME \ + | sed -n '/^Version *:/p' \ + | grep -o '[^ ]*$'` + + ARCH_BOOT_DST_CURRENT_VERSION=$ARCH_BOOT_DST/$CURRENT_VERSION + + test -d $ARCH_BOOT_DST_CURRENT_VERSION \ + && test `realpath $ARCH_BOOT_DST/$BOOT_SYMLINK` = $ARCH_BOOT_DST_CURRENT_VERSION \ + && echo "$PKG_NAME version already up to date ($CURRENT_VERSION)" && return 1; + + mkdir $ARCH_BOOT_DST_CURRENT_VERSION || ask_overwrite || return 1; + + ( + cd $BOOT_ORIG; + # Copy the new kernel files to the real destination in boot fs + cp -t $ARCH_BOOT_DST_CURRENT_VERSION $ARCH_INITRAMFS $ARCH_INITRAMFS_FALLBACK $ARCH_VMLINUZ; + ) + + ( + cd $ARCH_BOOT_DST; + # Re-link the good version + test -h $BOOT_SYMLINK && rm $BOOT_SYMLINK; + ln -s $CURRENT_VERSION $PKG_NAME; + ) + + echo "$PKG_NAME version updated to $CURRENT_VERSION" +} -CURRENT_VERSION=`${PACMAN_BIN} -Qi linux \ - | sed -n '/^Version *:/p' \ - | grep -o '[^ ]*$'` -BOOT_BLK=/dev/$LVM_VG_BOOT/$LVM_LG_BOOT_NAME -BOOT_ORIG=/boot TMP_BOOT_DST=`mktemp -d` - -ARCH_BOOT_DST=$TMP_BOOT_DST/$BOOT_DIR_SUFFIX -ARCH_BOOT_DST_CURRENT_VERSION=$ARCH_BOOT_DST/$CURRENT_VERSION -ARCH_INITRAMFS=initramfs-linux.img -ARCH_INITRAMFS_FALLBACK=initramfs-linux-fallback.img -ARCH_VMLINUZ=vmlinuz-linux - +BOOT_BLK=/dev/$LVM_VG_BOOT/$LVM_LG_BOOT_NAME mount $BOOT_BLK $TMP_BOOT_DST; -test -d $ARCH_BOOT_DST_CURRENT_VERSION \ - && test `realpath $ARCH_BOOT_DST/$BOOT_SYMLINK` = $ARCH_BOOT_DST_CURRENT_VERSION \ - && echo "Linux version already up to date ($CURRENT_VERSION)" && exit 0; -mkdir $ARCH_BOOT_DST_CURRENT_VERSION || ask_overwrite; +do_upgrade linux initramfs-linux.img initramfs-linux-fallback.img vmlinuz-linux \ + || echo "Skipped linux upgrade" -( - cd $BOOT_ORIG; - # Copy the new kernel files to the real destination in boot fs - cp -t $ARCH_BOOT_DST_CURRENT_VERSION $ARCH_INITRAMFS $ARCH_INITRAMFS_FALLBACK $ARCH_VMLINUZ; -) +do_upgrade linux-lts initramfs-linux-lts.img initramfs-linux-lts-fallback.img vmlinuz-linux-lts \ + || echo "Skipped linux-lts upgrade" -( - cd $ARCH_BOOT_DST; - # Re-link the good version - test -h $BOOT_SYMLINK && rm $BOOT_SYMLINK; - ln -s $CURRENT_VERSION current; -) - - -echo "Linux version updated to $CURRENT_VERSION" umount $TMP_BOOT_DST; rmdir $TMP_BOOT_DST; exit 0;