if read md_level < $devdir/md/level 2> /dev/null; then
if [ "$md_level" = raid1 ]; then read md_disks < $devdir/md/raid_disks for i in `seq $md_disks`; do set +x eval "run_device '$devdir/md/rd$(($i - 1))/block' $argv" done else die "RAID $md_level not supported"
fi
else
# not RAID
set -x eval "run_device '$devdir' $argv"
fi
exit 0
}
run_normal() {
exec "${0%.sh}.real" "$@"
}
set -eu
argv=
i=1
for x; do
if [ "$x" = "-d" -a $i -eq $# ]; then
# /boot/efi is /dev/md and grub-install can't handle it yet eval "run_raid $argv"
die "never reached"
fi
I wrote a not-so-little wrapper for efibootmgr to pretend grub-install isn't broken:
# cd /bin
# mv efibootmgr efibootmgr.real
# ln -s efibootmgr.sh efibootmgr
efibootmgr.sh
---
#!/bin/sh
die() {
echo "$*" >&2
exit 1
}
run_device() {
local devdir="$1" label= label_set=
local devname= dev= partition=
shift
if [ "x$1" = "x-L" ]; then
label_ set=true
label= "$2"
shift 2
fi
if [ -s "$devdir/partition" ]; then
read partition < "$devdir/partition"
devname= "${devdir# #*/}"
devdir= "${devdir% /*}"
dev="/ dev/${devdir# #*/}"
fi
if [ -n "$label_set" -a -z "$label" ]; then
label= $devname $(lsb_release -si)"
else
[ -n "$label" ] || label="
fi
set -x
"${0%. sh}.real" "$@" -L "$label" -d "$dev" ${partition:+-p $partition}
}
run_raid() {
local x= argv=
local label= label_set= label_next=
local device= devdir=
local md_level= md_disks=
# extract label
label_ next=true
label_ set=
label=
elif [ -n "$label_next" ]; then
label_ next=
label_ set=true
label= "$x"
else
x=$( echo -n "$x" | sed -e 's|"|\\"|g')
argv= "$argv \"$x\""
for x; do
if [ "$x" = "-L" ]; then
fi
done
if [ -n "$label_set" ]; then
x=$(echo -n "$label" | sed -e 's|"|\\"|g')
argv= "-L \"$x\" $argv"
fi
[ -b "$device" ] || die "ESP not mounted"
if read md_level < $devdir/md/level 2> /dev/null; then
read md_disks < $devdir/ md/raid_ disks
for i in `seq $md_disks`; do
set +x
eval "run_device '$devdir/md/rd$(($i - 1))/block' $argv"
done
else
die "RAID $md_level not supported"
eval "run_device '$devdir' $argv"
if [ "$md_level" = raid1 ]; then
fi
else
# not RAID
set -x
fi
exit 0
}
run_normal() {
exec "${0%.sh}.real" "$@"
}
set -eu
argv=
eval "run_raid $argv"
i=1
for x; do
if [ "$x" = "-d" -a $i -eq $# ]; then
# /boot/efi is /dev/md and grub-install can't handle it yet
die "never reached"
fi
: $((i = i+1))
x=$(echo -n "$x" | sed -e 's|"|\\"|g')
argv="$argv \"$x\""
done
set -x
eval "run_normal $argv"
---