3 # Purpose: grub-mkconfig helper script for Grml rescue systems
4 # Authors: Grml team (grml.org), (c) Andreas Gredler <jimmy@grml.org>, Michael Prokop <mika@grml.org>
5 # License: This file is licensed under the GPL v2+.
6 ################################################################################
12 bindir=${exec_prefix}/bin
13 libdir=${exec_prefix}/lib
15 if [ -r ${libdir}/grub/grub-mkconfig_lib ] ; then
16 . ${libdir}/grub/grub-mkconfig_lib
17 elif [ -r /usr/share/grub/grub-mkconfig_lib ] ; then # fallback for e.g. Fedora
18 . /usr/share/grub/grub-mkconfig_lib
20 echo "Could not locate file grub-mkconfig_lib, please report a bug." >&2
23 # default unless configured otherwise:
24 ISO_LOCATION="/boot/grml"
26 if [ -r /etc/default/grml-rescueboot ] ; then
27 . /etc/default/grml-rescueboot
33 for block in /sys/block /sys/class/block ; do
34 [ ! -d ${block}/${base}/dm ] && continue
35 retval="/dev/mapper/$(cat ${block}/${base}/dm/name)"
41 retval="/dev/mapper/$(dmsetup info -C --noheadings -o name -j 253 -m $minor)"
50 if [ -z ${device} ] ; then
53 device=$(readlink -f ${device})
56 device="/dev/dm-$(dmsetup info -C --noheadings -o minor "$device")"
62 additional_dependencies=""
63 for block in /sys/block /sys/class/block ; do
64 [ ! -d ${block}/${base}/slaves ] && continue
65 for file in ${block}/${base}/slaves/* ; do
66 dep_name="/dev/${file##*/}"
67 dep_name=$(resolve_dm_name ${dep_name})
69 # resolve recursively all dependencies
70 additional_dependencies=$(get_dependencies ${dep_name})
72 dependencies="$dependencies $additional_dependencies $dep_name"
79 get_iso_identifier() {
82 if isoinfo --version >/dev/null 2>&1 ; then
83 id=$(isoinfo -d -i "${iso}" | grep '^Volume id:' | sed -e 's/^[^:]*: *//')
84 [ -n "${id}" ] || id=$(isoinfo -d -i "${iso}" | grep '^Application id:' | sed -e 's/^[^:]*: *//')
90 for file in "${ISO_LOCATION}"/*.iso ; do
91 if grub_file_is_not_garbage "$file" ; then
92 iso_list="$iso_list $file "
98 if [ -n "${GRUB_SUBMENU}" ] && [ -n "${iso_list}" ] ; then
99 echo "submenu \"${GRUB_SUBMENU}\" \$menuentry_id_option \"grml-rescueboot\" {"
100 submenu_indent="${indent}"
103 for grmliso in $iso_list ; do
104 rel_dirname="$(dirname $(make_system_path_relative_to_its_root $grmliso))"
105 grml="$(basename $grmliso)"
106 device="$(${grub_probe} -t device ${grmliso})"
111 /dev/mapper*|/dev/md*)
112 dependencies=$(get_dependencies ${device})
114 for dep in $dependencies $device ; do
117 md_name="$(mdadm --detail --export "$dep" | sed -ne 's/MD_NAME=//p')"
118 dep="/dev/md/$md_name"
120 dep_string="$dep_string,$dep"
122 dep_string=${dep_string#,}
123 additional_param="live-media=$dep_string"
127 echo "Found Grml ISO image: $grmliso" >&2
128 iso_id=$(get_iso_identifier "${grmliso}")
129 if [ -n "${iso_id}" ] ; then
130 title="${iso_id} (${grml})"
132 title="Grml Rescue System (${grml})"
134 grub_prep=$(prepare_grub_to_access_device "$device" | sed -e "s/^/ /")
136 sed -e "s/^/${submenu_indent}/" << EOF
137 menuentry "${title}" {
139 iso_path="${rel_dirname%/}/${grml}"
141 kernelopts=" $CUSTOM_BOOTOPTIONS $additional_param "
143 # support booting recent GRUB versions on UEFI systems
145 loopback loop "${rel_dirname%/}/$grml"
147 configfile /boot/grub/loopback.cfg
152 if [ -n "${GRUB_SUBMENU}" ] && [ -n "${iso_list}" ] ; then
153 echo "} # end submenu \"${GRUB_SUBMENU}\""
156 ## END OF FILE #################################################################