[scripts] fix grub2 setup, only support i386

This commit is contained in:
Fabio Erculiani
2012-12-26 00:28:08 +01:00
parent fa4d8fdc69
commit 5e2a4ba97b
+57 -54
View File
@@ -64,6 +64,21 @@ if [ -d "${i386_EFI_DIR}" ]; then
cp -Rp "${i386_EFI_DIR}" "${GRUB_BOOT_DIR}/" || exit 1
fi
# These must exist.
cp "${CHROOT_DIR}/usr/share/grub/unicode.pf2" "${GRUB_BOOT_DIR}"/ || exit 1
# Copy locale files
localedir="${CHROOT_DIR}/usr/share/locale"
for dir in "${localedir}"/*; do
if [ -f "${dir}/LC_MESSAGES/grub.mo" ]; then
cp -f "${dir}/LC_MESSAGES/grub.mo" "${GRUB_LOCALE_DIR}/${dir##*/}.mo"
fi
done
# Copy splash, this is in sabayon-artwork-grub, we expect to find it
cp "${CHROOT_DIR}/usr/share/grub/default-splash.png" "${GRUB_BOOT_DIR}"/ \
|| exit 1
# now setup SecureBoot for x86_64 using shim:
# See: http://mjg59.dreamwidth.org/20303.html
efi_x86_64_file="${EFI_BOOT_DIR}"/bootx64.efi
@@ -91,58 +106,46 @@ if [ -f "${efi_x86_64_file}" ]; then
--output "${grub_efi_file}.signed" \
"${grub_efi_file}" || exit 1
mv "${grub_efi_file}.signed" "${grub_efi_file}" || exit 1
# -- end of SecureBoot --
# UEFI is currently only supported in x86_64, anyways
# now the tricky part, create an eltorito alternative image
_efi_img="${GRUB_BOOT_DIR}"/efi.img
# 12 floppies = 2880 x 12, we need more space for SecureBoot and GRUB2
# stuff to make isohybrid work as expected.
dd bs=512 count=$((2880 * 12)) if=/dev/zero of="${_efi_img}" || exit 1
mkfs.msdos "${_efi_img}" || exit 1
tmp_dir=$(mktemp -d --suffix="make_grub_efi")
[[ -z "${tmp_dir}" ]] && exit 1
MOUNT_DIRS+=( "${tmp_dir}" )
mount -o loop "${_efi_img}" "${tmp_dir}" || exit 1
mkdir -p "${tmp_dir}/efi/boot" || exit 1
# copy our .efi executables in place
cp -Rp "${EFI_BOOT_DIR}"/* "${tmp_dir}/efi/boot/" || exit 1
# in order to make isohybrid work, we need to copy the grub
# stuff inside the EFI boot image
tmp_grub_dir="${tmp_dir}/boot/grub"
mkdir -p "${tmp_grub_dir}" || exit 1
# This file is used by grub to determine where's the cdroot
ts=$(date +%Y%m%d%H%M%S)
img_id="${ts}${RANDOM}"
id_file="id.${img_id}.uefi"
touch "${CDROOT_DIR}/${id_file}" || exit 1
# copy the chainload grub.cfg version
cp "${SABAYON_MOLECULE_HOME}/boot/core/grub/grub-uefi-isohybrid.cfg" \
"${tmp_grub_dir}/grub.cfg" || exit 1
sed -i "s:%id_file%:${id_file}:g" "${tmp_grub_dir}/grub.cfg" || exit 1
# copy modules, actually, we would just need search
cp "${GRUB_BOOT_DIR}/"*-efi "${tmp_grub_dir}/" || exit 1
umount "${tmp_dir}" || exit 1
rmdir "${tmp_dir}" # best effort
exit 0
fi
# These must exist.
cp "${CHROOT_DIR}/usr/share/grub/unicode.pf2" "${GRUB_BOOT_DIR}"/ || exit 1
# Copy locale files
localedir="${CHROOT_DIR}/usr/share/locale"
for dir in "${localedir}"/*; do
if [ -f "${dir}/LC_MESSAGES/grub.mo" ]; then
cp -f "${dir}/LC_MESSAGES/grub.mo" "${GRUB_LOCALE_DIR}/${dir##*/}.mo"
fi
done
# Copy splash, this is in sabayon-artwork-grub, we expect to find it
cp "${CHROOT_DIR}/usr/share/grub/default-splash.png" "${GRUB_BOOT_DIR}"/ \
|| exit 1
# now the tricky part, create an eltorito alternative image
_efi_img="${GRUB_BOOT_DIR}"/efi.img
# 12 floppies = 2880 x 12, we need more space for SecureBoot and GRUB2
# stuff to make isohybrid work as expected.
dd bs=512 count=$((2880 * 12)) if=/dev/zero of="${_efi_img}" || exit 1
mkfs.msdos "${_efi_img}" || exit 1
tmp_dir=$(mktemp -d --suffix="make_grub_efi")
[[ -z "${tmp_dir}" ]] && exit 1
MOUNT_DIRS+=( "${tmp_dir}" )
mount -o loop "${_efi_img}" "${tmp_dir}" || exit 1
mkdir -p "${tmp_dir}/efi/boot" || exit 1
# copy our .efi executables in place
cp -Rp "${EFI_BOOT_DIR}"/* "${tmp_dir}/efi/boot/" || exit 1
# in order to make isohybrid work, we need to copy the grub
# stuff inside the EFI boot image
tmp_grub_dir="${tmp_dir}/boot/grub"
mkdir -p "${tmp_grub_dir}" || exit 1
# This file is used by grub to determine where's the cdroot
ts=$(date +%Y%m%d%H%M%S)
img_id="${ts}${RANDOM}"
id_file="id.${img_id}.uefi"
touch "${CDROOT_DIR}/${id_file}" || exit 1
# copy the chainload grub.cfg version
cp "${SABAYON_MOLECULE_HOME}/boot/core/grub/grub-uefi-isohybrid.cfg" \
"${tmp_grub_dir}/grub.cfg" || exit 1
sed -i "s:%id_file%:${id_file}:g" "${tmp_grub_dir}/grub.cfg" || exit 1
# copy modules, actually, we would just need search
cp "${GRUB_BOOT_DIR}/"*-efi "${tmp_grub_dir}/" || exit 1
umount "${tmp_dir}" || exit 1
rmdir "${tmp_dir}" # best effort
exit 0