sysdeploy/syslinux.inc

77 lines
1.6 KiB
PHP
Raw Permalink Normal View History

2021-03-02 11:12:10 +00:00
#!/bin/bash
function dev_from_partnum()
2021-03-02 11:12:10 +00:00
{
local drive="$1"
local partnum="$2"
partition="$drive""$partnum"
until [ -b "$drive"1 ] || [ -b "$drive"p1 ]; do
sleep 1
done
2021-03-02 11:12:10 +00:00
if [ ! -b "$partition" ]; then
partition="$drive"p"$partnum"
2021-03-02 11:12:10 +00:00
if [ ! -b "$partition" ]; then
2021-03-02 21:15:19 +00:00
echo "Can't find ${partnum}-th partition for \"$drive\""
2021-03-02 11:12:10 +00:00
exit 1
fi
fi
}
function mount_efi()
{
local drive="$1"
dev_from_partnum "$drive" 1
2021-03-02 11:12:10 +00:00
unset mnt
mnt="$(mktemp -d)"
if ! mount "$partition" "$mnt"; then
mkfs.vfat "$partition"
if ! mount "$partition" "$mnt"; then
echo "Can't mount \"$partition\""
cleanup_mnt
exit 1
fi
fi
}
function umount_efi()
2021-03-02 11:12:10 +00:00
{
umount "$mnt"
2021-03-02 16:00:17 +00:00
sync
2021-03-02 11:12:10 +00:00
rmdir "$mnt"
}
function install_syslinux()
{
local drive="$1"
2021-03-02 20:57:06 +00:00
apt -yq install syslinux syslinux-common syslinux-efi
2021-03-02 20:55:35 +00:00
2021-03-03 09:50:11 +00:00
dd bs=440 count=1 conv=notrunc \
if=/usr/lib/syslinux/mbr/gptmbr.bin of="$drive"
sync
2021-03-02 20:20:17 +00:00
2021-03-02 11:12:10 +00:00
mount_efi "$drive"
# legacy
2021-03-02 19:33:48 +00:00
mkdir -p "$mnt"/syslinux
2021-03-02 11:12:10 +00:00
cp /usr/lib/syslinux/modules/bios/*.c32 "$mnt"/syslinux/
# UEFI
2021-03-02 19:33:48 +00:00
mkdir -p "$mnt"/EFI/BOOT
2021-03-02 11:12:10 +00:00
cp /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi "$mnt"/EFI/BOOT/BOOTX64.EFI
cp /usr/lib/syslinux/modules/efi64/ldlinux.e64 "$mnt"/EFI/BOOT/ldlinux.e64
cp /usr/lib/syslinux/modules/efi64/*.c32 "$mnt"/EFI/BOOT/
cp syslinux/{mainmenu,syslinux}.cfg "$mnt"/syslinux
cp syslinux/syslx64.cfg "$mnt"/EFI/BOOT
umount_efi
2021-03-03 11:30:15 +00:00
dev_from_partnum "$drive" 1
syslinux "$partition"
2021-03-02 11:12:10 +00:00
}
# vim: set ft=sh: