zbm-syslinux-pacman-hook/pacman-zbm-syslinux-regen.sh

33 lines
1.2 KiB
Bash
Raw Normal View History

2023-10-26 02:03:32 +02:00
#!/bin/bash
boot_dir='/boot/syslinux'
boot_dir="${boot_dir%/}"
boot_fs="$(findmnt --noheadings --target "${boot_dir}" --output 'SOURCE')" || {
2023-10-26 02:03:32 +02:00
printf -- '%s\n' \
'Unable to identify boot drive for '"'${boot_dir}'"' boot dir.' \
'Cowardly exiting. No syslinux files nor MBR were overwritten.'
exit 1
}
if [[ "$(<<<"${boot_fs}" wc -l)" -gt '1' ]]; then
2023-10-26 02:03:32 +02:00
printf -- '%s\n' \
'More than one drive mounted at '"'${boot_dir}'"' boot dir.' \
'Cowardly exiting. No syslinux files nor MBR were overwritten.'
exit 1
fi
boot_fs_name="$(basename "${boot_fs}")"
boot_disk="$(lsblk --output 'NAME' --json --tree | jq --raw-output '.[][] | select(.children | length > 0) | select(.children[].name=="'"${boot_fs_name}"'") | .name')"
if [[ ! "${boot_disk}" ]]; then
# There's no parent drive over "${boot_fs}" meaning "${boot_fs}" itself
# already is the parent. This is a file system on a drive and not on a
# partition.
boot_disk="${boot_fs}"
else
boot_disk='/dev/'"${boot_disk}"
fi
2023-10-26 02:03:32 +02:00
find "${boot_dir}" -type f -iname '*.c32' -delete
rsync -a '/usr/lib/syslinux/bios/'*'.c32' "${boot_dir}"'/'
extlinux --install "${boot_dir}"
dd bs=440 count=1 conv=notrunc if='/usr/lib/syslinux/bios/mbr.bin' of="${boot_disk}"