mirror of
https://git.proxmox.com/git/pve-kernel-meta
synced 2025-04-28 18:05:35 +00:00
proxmox-boot: fix #3632 copy kernel+initrd unconditionally
do not use the -u (update) flag when copying kernel images and inird from /boot to the ESPs: * the ESPs are formatted with vfat, which has a 2 second precision for mtime (`linux/fs/fat/misc.c` - `fat_truncate_time`) * cp -u compares the mtimes of source (kernel image in /boot not on vfat) and destination - leading to the copy always being carried out, if the source files remain the same (and do not happen to have a mtime exactly happening on a even second) as laid out in the bug-report - the case where this leads to an unbootable system is when a kernel-version is shipped twice (built with different tool-chains) - e.g. currently the 5.11 kernels in PVE 6 and PVE 7. tested the behavior of `cp -u` by running opensnopp-bpfcc and copying a file twice onto ext4 (opened only once) and on vfat (opened twice). additionally reproduced the issue (by dist-upgrading a PVE 6 VM to 7 with the pve-no-subscription repo) and verified this patch fixes it. Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
This commit is contained in:
parent
221e6a67b1
commit
2a8a4b5e37
@ -132,21 +132,21 @@ copy_and_config_kernels() {
|
||||
KERNEL_ESP_DIR="${PMX_ESP_DIR}/${kver}"
|
||||
KERNEL_LIVE_DIR="${esp}/${KERNEL_ESP_DIR}"
|
||||
mkdir -p "${KERNEL_LIVE_DIR}"
|
||||
cp -u --preserve=timestamps "${linux_image}" "${KERNEL_LIVE_DIR}/"
|
||||
cp -u --preserve=timestamps "${initrd}" "${KERNEL_LIVE_DIR}/"
|
||||
cp --preserve=timestamps "${linux_image}" "${KERNEL_LIVE_DIR}/"
|
||||
cp --preserve=timestamps "${initrd}" "${KERNEL_LIVE_DIR}/"
|
||||
|
||||
# create loader entry
|
||||
cat > "${esp}/loader/entries/proxmox-${kver}.conf" <<- EOF
|
||||
title ${LOADER_TITLE}
|
||||
version ${kver}
|
||||
options ${CMDLINE}
|
||||
linux /${KERNEL_ESP_DIR}/vmlinuz-${kver}
|
||||
initrd /${KERNEL_ESP_DIR}/initrd.img-${kver}
|
||||
linux /${KERNEL_ESP_DIR}/vmlinuz-${kver}
|
||||
initrd /${KERNEL_ESP_DIR}/initrd.img-${kver}
|
||||
EOF
|
||||
else
|
||||
warn " Copying kernel ${kver}"
|
||||
cp -u --preserve=timestamps "${linux_image}" "${esp}/"
|
||||
cp -u --preserve=timestamps "${initrd}" "${esp}/"
|
||||
cp --preserve=timestamps "${linux_image}" "${esp}/"
|
||||
cp --preserve=timestamps "${initrd}" "${esp}/"
|
||||
fi
|
||||
done
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user