123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #! /bin/sh
- set -e
- # grub-mkconfig helper script.
- # Copyright (C) 2008,2009,2010 Free Software Foundation, Inc.
- #
- # GRUB is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # GRUB is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with GRUB. If not, see <http://www.gnu.org/licenses/>.
- prefix="@prefix@"
- exec_prefix="@exec_prefix@"
- datarootdir="@datarootdir@"
- export TEXTDOMAIN=@PACKAGE@
- export TEXTDOMAINDIR="@localedir@"
- . "$pkgdatadir/grub-mkconfig_lib"
- case "`uname 2>/dev/null`" in
- CYGWIN*) ;;
- *) exit 0 ;;
- esac
- # Try C: even if current system is on other partition.
- case "$SYSTEMDRIVE" in
- [Cc]:) drives="C:" ;;
- [D-Zd-z]:) drives="C: $SYSTEMDRIVE" ;;
- *) exit 0 ;;
- esac
- get_os_name_from_boot_ini ()
- {
- # Fail if no or more than one partition.
- test "`sed -n 's,^\(\(multi\|scsi\)[^=]*\)=.*$,\1,p' "$1" 2>/dev/null | \
- sort | uniq | wc -l`" = 1 || return 1
- # Search 'default=PARTITION'
- get_os_name_from_boot_ini_part=`sed -n 's,^default=,,p' "$1" | sed 's,\\\\,/,g;s,[ $grub_tab\r]*$,,;1q'`
- test -n "$get_os_name_from_boot_ini_part" || return 1
- # Search 'PARTITION="NAME" ...'
- get_os_name_from_boot_ini_name=`sed -n 's,\\\\,/,g;s,^'"$get_os_name_from_boot_ini_part"'="\([^"]*\)".*$,\1,p' "$1" | sed 1q`
- test -n "$get_os_name_from_boot_ini_name" || return 1
- echo "$get_os_name_from_boot_ini_name"
- }
- for drv in $drives ; do
- # Convert to Cygwin path.
- dir=`cygpath "$drv"`
- test -n "$dir" || continue
- needmap=
- osid=
- # Check for Vista bootmgr.
- if [ -f "$dir"/bootmgr ] && [ -f "$dir"/boot/bcd ] ; then
- OS="$(gettext "Windows Vista/7 (loader)")"
- osid=bootmgr
- # Check for NTLDR.
- elif [ -f "$dir"/ntldr ] && [ -f "$dir"/ntdetect.com ] && [ -f "$dir"/boot.ini ] ; then
- OS=`get_os_name_from_boot_ini "$dir"/boot.ini` || OS="$(gettext "Windows NT/2000/XP (loader)")"
- osid=ntldr
- needmap=t
- else
- continue
- fi
- # Get boot device.
- dev=`${grub_probe} -t device "$dir" 2>/dev/null` || continue
- gettext_printf "Found %s on %s (%s)\n" "$OS" "$drv" "$dev" >&2
- cat << EOF
- menuentry '$(echo "$OS" | grub_quote)' \$menuentry_id_option '$osid-$(grub_get_device_id "${dev}")' {
- EOF
- save_default_entry | sed -e 's,^,$grub_tab,'
- prepare_grub_to_access_device "$dev" | sed 's,^,$grub_tab,'
- test -z "$needmap" || cat <<EOF
- drivemap -s (hd0) \$root
- EOF
- cat << EOF
- chainloader +1
- }
- EOF
- done
|