108 lines
2.1 KiB
Bash
Executable File
108 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
. /usr/share/os-prober/common.sh
|
|
set -e
|
|
|
|
partition="$1"
|
|
bootpart="$2"
|
|
mpoint="$3"
|
|
type="$4"
|
|
|
|
found_item=0
|
|
|
|
entry_result () {
|
|
if [ "$ignore_item" = 0 ] && \
|
|
[ -n "$kernel" ] && \
|
|
[ -e "$mpoint/$kernel" ]; then
|
|
result "$rootpart:$bootpart:$title:$kernel:$initrd:$parameters"
|
|
found_item=1
|
|
fi
|
|
kernel=""
|
|
parameters=""
|
|
initrd=""
|
|
title=""
|
|
ignore_item=0
|
|
}
|
|
|
|
parse_grub_menu () {
|
|
mpoint="$1"
|
|
rootpart="$2"
|
|
bootpart="$3"
|
|
|
|
kernel=""
|
|
parameters=""
|
|
initrd=""
|
|
title=""
|
|
ignore_item=0
|
|
|
|
while read line; do
|
|
#debug "parsing: $line"
|
|
set -f
|
|
set -- $line
|
|
set +f
|
|
case "$1" in
|
|
title)
|
|
entry_result
|
|
shift 1
|
|
title="$(echo "$@" | sed 's/://g')"
|
|
if echo "$title" | grep -q '(on /dev/[^)]*)$'; then
|
|
log "Skipping entry '$title':"
|
|
log "appears to be an automatic reference taken from another menu.lst"
|
|
ignore_item=1
|
|
fi
|
|
;;
|
|
kernel)
|
|
# Hack alert: sed off any (hdn,n) but
|
|
# assume the kernel is on the same
|
|
# partition.
|
|
kernel="$(echo "$2" | sed 's/(.*)//')"
|
|
shift 2
|
|
parameters="$@"
|
|
# Systems with a separate /boot will not have
|
|
# the path to the kernel in menu.lst.
|
|
if [ "$partition" != "$bootpart" ]; then
|
|
kernel="/boot$kernel"
|
|
fi
|
|
;;
|
|
initrd)
|
|
# Hack alert take 2: sed off any (hdn,n)
|
|
# See #566102
|
|
initrd="$(echo "$2" | sed 's/(.*)//')"
|
|
# Initrd same.
|
|
if [ "$partition" != "$bootpart" ]; then
|
|
initrd="/boot$initrd"
|
|
fi
|
|
;;
|
|
boot)
|
|
entry_result
|
|
;;
|
|
module)
|
|
log "Skipping entry '$title':"
|
|
log "parsing of entries containing 'module' lines is currently not supported"
|
|
ignore_item=1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
entry_result
|
|
}
|
|
|
|
grubconf=
|
|
if [ -e "$mpoint/boot/grub/menu.lst" ]; then
|
|
grubconf="menu.lst"
|
|
elif [ -e "$mpoint/boot/grub/grub.conf" ]; then
|
|
grubconf="grub.conf"
|
|
fi
|
|
|
|
if [ "$grubconf" ] && \
|
|
([ ! -e "$mpoint/boot/grub/grub.cfg" ] || \
|
|
[ "$mpoint/boot/grub/$grubconf" -nt "$mpoint/boot/grub/grub.cfg" ]); then
|
|
debug "parsing $grubconf"
|
|
parse_grub_menu "$mpoint" "$partition" "$bootpart" < "$mpoint/boot/grub/$grubconf"
|
|
fi
|
|
|
|
if [ "$found_item" = 0 ]; then
|
|
exit 1
|
|
else
|
|
exit 0
|
|
fi
|