# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ # XXX: we need to review menu.lst vs grub.conf handling. We've been converting # all systems to grub.conf (and symlinking menu.lst to grub.conf), but # we never updated any of the source code (it still all wants menu.lst), # and there is no indication that upstream is making the transition. inherit eutils mount-boot toolchain-funcs linux-info PATCHVER="1.9" # Not used, just for tracking with main grub DESCRIPTION="GNU GRUB Legacy boot loader (static build)" HOMEPAGE="http://www.gnu.org/software/grub/" SRC_URI="mirror://gentoo/${PF}.tar.bz2" LICENSE="GPL-2" SLOT="0" KEYWORDS="-* amd64 ~x86" IUSE="" DEPEND="!${dir}/grub.conf [[ -e "${s}.gz" ]] && zcat "${s}.gz" >${dir}/grub.conf [[ -e "${s}.bz2" ]] && bzcat "${s}.bz2" >${dir}/grub.conf fi # Per bug 218599, we support grub.conf.install for users that want to run a # specific set of Grub setup commands rather than the default ones. grub_config=${dir}/grub.conf.install [[ -e ${grub_config} ]] || grub_config=${dir}/grub.conf if [[ -e ${grub_config} ]] ; then local tmp="${TMPDIR}/${P}-setup_boot_dir-$$" egrep \ -v '^[[:space:]]*(#|$|default|fallback|initrd|password|splashimage|timeout|title)' \ "${grub_config}" >"${tmp}" # Do NOT fail here, only warn. /sbin/grub --batch \ --device-map="${dir}"/device.map \ >/dev/null <"${tmp}" rc=$? [[ $rc -ne 0 ]] && ewarn "Grub failed to run!" fi # the grub default commands silently piss themselves if # the default file does not exist ahead of time if [[ ! -e ${dir}/default ]] ; then # This may fail, don't worry about it. grub-set-default --root-directory="${boot_dir}" default : fi einfo "Grub has been installed to ${boot_dir} successfully." } pkg_postinst() { mount-boot_pkg_postinst if [[ -n ${DONT_MOUNT_BOOT} ]]; then elog "WARNING: you have DONT_MOUNT_BOOT in effect, so you must apply" elog "the following instructions for your /boot!" elog "Neglecting to do so may cause your system to fail to boot!" elog else setup_boot_dir "${ROOT}"/boot # Trailing output because if this is run from pkg_postinst, it gets mixed into # the other output. einfo "" fi elog "To interactively install grub files to another device such as a USB" elog "stick, just run the following and specify the directory as prompted:" elog " emerge --config =${PF}" elog "Alternately, you can export GRUB_ALT_INSTALLDIR=/path/to/use to tell" elog "grub where to install in a non-interactive way." } pkg_config() { local dir if [ ! -d "${GRUB_ALT_INSTALLDIR}" ]; then einfo "Enter the directory where you want to setup grub:" read dir else dir="${GRUB_ALT_INSTALLDIR}" fi setup_boot_dir "${dir}" }