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