2 # Filename: 42_loopback-iso
3 # Purpose: grub-mkconfig helper script for loopback.cfg-compatible ISOs
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/isos"
26 # grml-rescueboot backwards compatibility
27 if [ -d /boot/grml ]; then
28 ISO_LOCATION="${ISO_LOCATION} /boot/grml"
31 if [ -r /etc/default/grub-loopback-isos ] ; then
32 . /etc/default/grub-loopback-isos
35 # grml-rescueboot backwards compatibility
36 if [ -r /etc/default/grml-rescueboot ] ; then
37 . /etc/default/grml-rescueboot
43 for block in /sys/block /sys/class/block ; do
44 [ ! -d ${block}/${base}/dm ] && continue
45 retval="/dev/mapper/$(cat ${block}/${base}/dm/name)"
51 retval="/dev/mapper/$(dmsetup info -C --noheadings -o name -j 253 -m $minor)"
60 if [ -z ${device} ] ; then
63 device=$(readlink -f ${device})
66 device="/dev/dm-$(dmsetup info -C --noheadings -o minor "$device")"
72 additional_dependencies=""
73 for block in /sys/block /sys/class/block ; do
74 [ ! -d ${block}/${base}/slaves ] && continue
75 for file in ${block}/${base}/slaves/* ; do
76 dep_name="/dev/${file##*/}"
77 dep_name=$(resolve_dm_name ${dep_name})
79 # resolve recursively all dependencies
80 additional_dependencies=$(get_dependencies ${dep_name})
82 dependencies="$dependencies $additional_dependencies $dep_name"
93 for dir in $ISO_LOCATION; do
94 for file in "$dir"/*.iso ; do
95 if grub_file_is_not_garbage "$file" ; then
96 iso_list="$iso_list $file "
101 for iso in $iso_list ; do
102 rel_dirname="$(make_system_path_relative_to_its_root $(dirname $iso))"
103 isofn="$(basename $iso)"
104 device="$(${grub_probe} -t device ${iso})"
109 /dev/mapper*|/dev/md*)
110 dependencies=$(get_dependencies ${device})
112 for dep in $dependencies $device ; do
113 dep_string="$dep_string,$dep"
115 dep_string=${dep_string#,}
116 additional_param="live-media=$dep_string"
120 echo "Found Loopback ISO image: $iso" >&2
121 title="Bootable ISO ($isofn)"
122 grub_prep=$(prepare_grub_to_access_device "$device" | sed -e "s/^/ /")
125 menuentry "${title}" {
127 iso_path="${rel_dirname}/${isofn}"
129 kernelopts=" $CUSTOM_BOOTOPTIONS $additional_param "
131 loopback loop "${rel_dirname}/$isofn"
133 configfile /boot/grub/loopback.cfg
138 ## END OF FILE #################################################################