grub-static: prevent gentoo breakage

This commit is contained in:
Zero_Chaos 2011-02-22 18:10:14 +00:00
parent eaacf6deeb
commit 137bd38ee4
2 changed files with 178 additions and 0 deletions

View file

@ -1,2 +1,4 @@
DIST grub-static-0.97-r10.tar.bz2 888963 RMD160 0c66b849f5e6d88471d5334d7e906a29cc45ef0b SHA1 1a0d9e1a18ccb74059aa9136114a958cbfb03a08 SHA256 812c8113efa13b6bfe254e866204b4763bf889c796835ed0b53cb64920428d82
DIST grub-static-0.97-r9.tar.bz2 937621 RMD160 d8cab235213050b5731d36097480f9f4136a34dc SHA1 fcad772b132feb1ee47771c790f83de4a4f291c8 SHA256 0d6af53c5380bd37ea67f314236364baebfff52762ea5e52bf2f66941dabe2d1
EBUILD grub-static-0.97-r10.ebuild 5491 RMD160 b9d14d6f05e372754832f4db58c41bdd430dd32a SHA1 ab88bd272b790db2fad7c14d24592c1ead1a5e97 SHA256 7b28bd0a366c1d74f7b62a236e7763a6f8dad096af925a44caf92695fc7c08ca
EBUILD grub-static-0.97-r9.ebuild 5491 RMD160 b9d14d6f05e372754832f4db58c41bdd430dd32a SHA1 ab88bd272b790db2fad7c14d24592c1ead1a5e97 SHA256 7b28bd0a366c1d74f7b62a236e7763a6f8dad096af925a44caf92695fc7c08ca

View file

@ -0,0 +1,176 @@
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-boot/grub-static/grub-static-0.97-r9.ebuild,v 1.10 2011/01/09 03:24:06 vapier Exp $
# 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 pax-utils
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="!sys-boot/grub"
RDEPEND="${DEPEND}"
PROVIDE="virtual/bootloader"
# These are already stripped since we use a binpkg.
QA_PRESTRIPPED="/sbin/grub /bin/mbchk"
pkg_setup() {
local arch="$(tc-arch)"
case ${arch} in
amd64)
CONFIG_CHECK='~IA32_EMULATION'
WARNING_IA32_EMULATION="You will NOT be able to run grub unless you have IA32_EMULATION set!"
check_extra_config
;;
esac
}
src_install() {
cp -a "${WORKDIR}"/* "${D}"/
run_test_grub "${D}"/sbin/grub && einfo "New grub can run on your system, good!"
# bug 330745
pax-mark -m "${D}"/sbin/grub
}
run_test_grub() {
local grub="$1"
local version="$(${grub} \
--read-only --no-pager --no-floppy --no-curses \
--no-config-file --batch --version)"
local error="grub test-run failed"
use amd64 && error="${error} Is IA32_EMULATION set?"
[ "${version/${PV}}" != "${version}" ] || die "${error}"
return 0
}
#
# Below this point, everything is also used in grub-static!
# Please keep in sync!
#
setup_boot_dir() {
local boot_dir=$1
local dir=${boot_dir}
run_test_grub /sbin/grub
mkdir -p "${dir}"
[[ ! -L ${dir}/boot ]] && ln -s . "${dir}/boot"
dir="${dir}/grub"
if [[ ! -e ${dir} ]] ; then
mkdir "${dir}" || die "${dir} does not exist!"
fi
# change menu.lst to grub.conf
if [[ ! -e ${dir}/grub.conf ]] && [[ -e ${dir}/menu.lst ]] ; then
mv -f "${dir}"/menu.lst "${dir}"/grub.conf
ewarn
ewarn "*** IMPORTANT NOTE: menu.lst has been renamed to grub.conf"
ewarn
fi
if [[ ! -e ${dir}/menu.lst ]]; then
einfo "Linking from new grub.conf name to menu.lst"
ln -snf grub.conf "${dir}"/menu.lst
fi
if [[ -e ${dir}/stage2 ]] ; then
mv "${dir}"/stage2{,.old}
ewarn "*** IMPORTANT NOTE: you must run grub and install"
ewarn "the new version's stage1 to your MBR. Until you do,"
ewarn "stage1 and stage2 will still be the old version, but"
ewarn "later stages will be the new version, which could"
ewarn "cause problems such as an unbootable system."
ewarn "This means you must use either grub-install or perform"
ewarn "root/setup manually! For more help, see the handbook:"
ewarn "http://www.gentoo.org/doc/en/handbook/handbook-${ARCH}.xml?part=1&chap=10#grub-install-auto"
ebeep
fi
einfo "Copying files from /lib/grub, /usr/lib/grub and /usr/share/grub to ${dir}"
for x in \
"${ROOT}"/lib*/grub/*/* \
"${ROOT}"/usr/lib*/grub/*/* \
"${ROOT}"/usr/share/grub/* ; do
[[ -f ${x} ]] && cp -p "${x}" "${dir}"/
done
if [[ ! -e ${dir}/grub.conf ]] ; then
s="${ROOT}/usr/share/doc/${PF}/grub.conf.gentoo"
[[ -e "${s}" ]] && cat "${s}" >${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}"
}