#!/bin/sh # Copyright 1999-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 . /usr/share/grub/grub-mkconfig_lib if [ -r /etc/default/systemrescuecd ] ; then . /etc/default/systemrescuecd fi COPY_SRCD_TO_BOOT=${COPY_SRCD_TO_BOOT:-no} bootdir="/boot" installdir="/usr/share/systemrescuecd" isorex='^(/.*/)?systemrescuecd-.*[.]iso$' # Path of the link to the newest ISO, created by ebuild srcd="${installdir}/systemrescuecd-x86-newest.iso" # Extract ISO version isovsed() { sed -E 's|^.*systemrescuecd(-x86)?-||;s|.iso$||' } # Find ISOs in a given directory isofind() { find "${1}" -maxdepth 1 -type f -regextype egrep -regex ${isorex} } # Copy ISO to boot partition copy_srcd_iso() { if [ ! -f "${bootdir}/"$(basename "${1}") ]; then if [ $(df -k --output=avail "${bootdir}" | tail -1) -gt $(du -k "${1}" | cut -f 1) ]; then cp "${1}" "${bootdir}/" else # Before complaining, check if the installed ISO is actually newer if $(printf '%s\n' $(isofind "${bootdir}" | isovsed | sort -V) $(echo "${1}" | isovsed) | sort -VC); then gettext_printf "Error: Not enough free disk space on ${bootdir}!\n" >&2 gettext_printf "Error: Failed to copy the new iso!\n" >&2 fi fi fi } write_srcd() { cat <&2 if $(printf '%s\n' "6.0.0" $(echo ${iso} | isovsed) | sort -VC); then write_srcd $(echo ${iso} | isovsed) else write_srcd_5 $(echo ${iso} | isovsed) fi done # End submenu echo "}" } bootops=")" if [ ! -z "${SRCD_BOOTOPTIONS}" ]; then bootops=" with bootoptions)" fi if [ "${COPY_SRCD_TO_BOOT}" = yes ]; then srcd=$(realpath "${srcd}") copy_srcd_iso "${srcd}" fi # Build menu entries for isopref in "${bootdir}" "${installdir}"; do # Make sure there are any ISOs ls "${isopref}" | grep -E -q -e "${isorex}" || continue diskuuid=/dev/disk/by-uuid/$(${grub_probe} --target=fs_uuid "${isopref}") device=$(${grub_probe} --target=device "${isopref}") label=$(${grub_probe} --target=fs_label "${isopref}") [ "${label}" = "(null)" ] && label=${device} grub_string=$(prepare_grub_to_access_device "${device}" | grub_add_tab | grub_add_tab) longname="SystemRescueCD on ${label}" gettext_printf "Found %s on %s\n" "${longname}" "${device}" >&2 write_srcd_submenu done