|
Packit |
d86cd3 |
#!/bin/sh
|
|
Packit |
d86cd3 |
. /usr/share/os-prober/common.sh
|
|
Packit |
d86cd3 |
set -e
|
|
Packit |
d86cd3 |
|
|
Packit |
d86cd3 |
partition="$1"
|
|
Packit |
d86cd3 |
bootpart="$2"
|
|
Packit |
d86cd3 |
mpoint="$3"
|
|
Packit |
d86cd3 |
type="$4"
|
|
Packit |
d86cd3 |
|
|
Packit |
d86cd3 |
found_item=0
|
|
Packit |
d86cd3 |
|
|
Packit |
d86cd3 |
title=""
|
|
Packit |
d86cd3 |
rootdev=""
|
|
Packit |
d86cd3 |
kernel=""
|
|
Packit |
d86cd3 |
parameters=""
|
|
Packit |
d86cd3 |
initrd=""
|
|
Packit |
d86cd3 |
read_only=""
|
|
Packit |
d86cd3 |
default_rootdev=""
|
|
Packit |
d86cd3 |
default_kernel=""
|
|
Packit |
d86cd3 |
default_parameters=""
|
|
Packit |
d86cd3 |
default_initrd=""
|
|
Packit |
d86cd3 |
default_read_only=""
|
|
Packit |
d86cd3 |
|
|
Packit |
d86cd3 |
dequote () {
|
|
Packit |
d86cd3 |
item="${1%\"}"
|
|
Packit |
d86cd3 |
echo "${item#\"}"
|
|
Packit |
d86cd3 |
}
|
|
Packit |
d86cd3 |
|
|
Packit |
d86cd3 |
recordstanza () {
|
|
Packit |
d86cd3 |
if [ -n "$kernel" ] && [ -n "$title" ]; then
|
|
Packit |
d86cd3 |
if [ -e "$mpoint/$kernel" ] || [ -e "$mpoint/boot$kernel" ]; then
|
|
Packit |
d86cd3 |
if [ -e "$mpoint/boot$initrd" ] || [ -e "$mpoint/$initrd" ]; then
|
|
Packit |
d86cd3 |
if [ "$read_only" ]; then
|
|
Packit |
d86cd3 |
parameters="ro $parameters"
|
|
Packit |
d86cd3 |
fi
|
|
Packit |
d86cd3 |
if [ "$rootdev" ]; then
|
|
Packit |
d86cd3 |
parameters="root=$rootdev $parameters"
|
|
Packit |
d86cd3 |
fi
|
|
Packit |
d86cd3 |
parameters="${parameters% }"
|
|
Packit |
d86cd3 |
result "$rootpart:$bootpart:$title:$kernel:$initrd:$parameters"
|
|
Packit |
d86cd3 |
found_item=1
|
|
Packit |
d86cd3 |
else
|
|
Packit |
d86cd3 |
debug "cannot find $initrd, not recording"
|
|
Packit |
d86cd3 |
fi
|
|
Packit |
d86cd3 |
else
|
|
Packit |
d86cd3 |
debug "cannot find $kernel, not recording"
|
|
Packit |
d86cd3 |
fi
|
|
Packit |
d86cd3 |
title=""
|
|
Packit |
d86cd3 |
rootdev="$default_rootdev"
|
|
Packit |
d86cd3 |
kernel="$default_kernel"
|
|
Packit |
d86cd3 |
parameters="$default_parameters"
|
|
Packit |
d86cd3 |
initrd="$default_initrd"
|
|
Packit |
d86cd3 |
read_only="$default_read_only"
|
|
Packit |
d86cd3 |
else
|
|
Packit |
d86cd3 |
# Everything before set default values.
|
|
Packit |
d86cd3 |
default_rootdev="$rootdev"
|
|
Packit |
d86cd3 |
default_kernel="$kernel"
|
|
Packit |
d86cd3 |
default_parameters="$parameters"
|
|
Packit |
d86cd3 |
default_initrd="$initrd"
|
|
Packit |
d86cd3 |
default_read_only="$read_only"
|
|
Packit |
d86cd3 |
fi
|
|
Packit |
d86cd3 |
}
|
|
Packit |
d86cd3 |
|
|
Packit |
d86cd3 |
parse_silo_conf () {
|
|
Packit |
d86cd3 |
mpoint="$1"
|
|
Packit |
d86cd3 |
rootpart="$2"
|
|
Packit |
d86cd3 |
bootpart="$3"
|
|
Packit |
d86cd3 |
IFS=" ="
|
|
Packit |
d86cd3 |
while read line; do
|
|
Packit |
d86cd3 |
debug "parsing: $line"
|
|
Packit |
d86cd3 |
set -f
|
|
Packit |
d86cd3 |
set -- $line
|
|
Packit |
d86cd3 |
set +f
|
|
Packit |
d86cd3 |
case "$1" in
|
|
Packit |
d86cd3 |
root)
|
|
Packit |
d86cd3 |
rootdev=$(dequote "$2")
|
|
Packit |
d86cd3 |
;;
|
|
Packit |
d86cd3 |
image)
|
|
Packit |
d86cd3 |
recordstanza
|
|
Packit |
d86cd3 |
# Dereference if symbolic link
|
|
Packit |
d86cd3 |
if echo "$2" | grep -qs "/boot/"; then
|
|
Packit |
d86cd3 |
kernel="$(readlink -f "$(dequote "$mpoint$2")" | sed -e 's#'"$mpoint"'##g')"
|
|
Packit |
d86cd3 |
else
|
|
Packit |
d86cd3 |
kernel="$(readlink -f "$(dequote "$mpoint/boot$2")" | sed -e 's#'"$mpoint"'/boot##g')"
|
|
Packit |
d86cd3 |
fi
|
|
Packit |
d86cd3 |
;;
|
|
Packit |
d86cd3 |
append)
|
|
Packit |
d86cd3 |
shift 1
|
|
Packit |
d86cd3 |
parameters=$(dequote "${line#append=}")
|
|
Packit |
d86cd3 |
;;
|
|
Packit |
d86cd3 |
initrd)
|
|
Packit |
d86cd3 |
# Dereference if symbolic link
|
|
Packit |
d86cd3 |
if echo "$2" | grep -qs "/boot/"; then
|
|
Packit |
d86cd3 |
initrd="$(readlink -f "$(dequote "$mpoint$2")" | sed -e 's#'"$mpoint"'##g')"
|
|
Packit |
d86cd3 |
else
|
|
Packit |
d86cd3 |
initrd="$(readlink -f "$(dequote "$mpoint/boot$2")" | sed -e 's#'"$mpoint"'/boot##g')"
|
|
Packit |
d86cd3 |
fi
|
|
Packit |
d86cd3 |
;;
|
|
Packit |
d86cd3 |
label)
|
|
Packit |
d86cd3 |
shift 1
|
|
Packit |
d86cd3 |
title=$(dequote "$*" | sed -e 's/:/ /g')
|
|
Packit |
d86cd3 |
;;
|
|
Packit |
d86cd3 |
other)
|
|
Packit |
d86cd3 |
recordstanza
|
|
Packit |
d86cd3 |
;;
|
|
Packit |
d86cd3 |
read-only)
|
|
Packit |
d86cd3 |
read_only=1
|
|
Packit |
d86cd3 |
;;
|
|
Packit |
d86cd3 |
esac
|
|
Packit |
d86cd3 |
done
|
|
Packit |
d86cd3 |
recordstanza
|
|
Packit |
d86cd3 |
}
|
|
Packit |
d86cd3 |
|
|
Packit |
d86cd3 |
if [ -e "$mpoint/boot/silo.conf" ]; then
|
|
Packit |
d86cd3 |
debug "parsing silo.conf"
|
|
Packit |
d86cd3 |
parse_silo_conf "$mpoint" "$partition" "$bootpart" < "$mpoint/boot/silo.conf"
|
|
Packit |
d86cd3 |
fi
|
|
Packit |
d86cd3 |
|
|
Packit |
d86cd3 |
if [ "$found_item" = 0 ]; then
|
|
Packit |
d86cd3 |
exit 1
|
|
Packit |
d86cd3 |
else
|
|
Packit |
d86cd3 |
exit 0
|
|
Packit |
d86cd3 |
fi
|