X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=gen_bootloader.sh;h=5848bd24220c8aeefe6c0b254a3221afde19dda3;hb=refs%2Fheads%2Fmaster;hp=5f0bb51c4efb54e96bffa14bca529c5a9543d34f;hpb=a86ba695a91b38da5b952434ac5db2d4dd15625f;p=genkernel.git diff --git a/gen_bootloader.sh b/gen_bootloader.sh old mode 100644 new mode 100755 index 5f0bb51..5848bd2 --- a/gen_bootloader.sh +++ b/gen_bootloader.sh @@ -1,8 +1,13 @@ +# $Id$ + set_bootloader() { case "${BOOTLOADER}" in grub) set_bootloader_grub ;; + grub2) + set_bootloader_grub2 + ;; *) print_warning "Bootloader ${BOOTLOADER} is not currently supported" ;; @@ -26,6 +31,29 @@ set_bootloader_grub_read_device_map() { echo "${TEMP}/grub.map" } +set_bootloader_grub2() { + local GRUB_CONF + for candidate in \ + "${BOOTDIR}/grub2/grub.cfg" \ + "${BOOTDIR}/grub/grub.cfg" \ + ; do + if [[ -e "${candidate}" ]]; then + GRUB_CONF=${candidate} + break + fi + done + + if [[ -z "${GRUB_CONF}" ]]; then + print_error 1 "Error! Grub2 configuration file does not exist, please ensure grub2 is correctly setup first." + return 0 + fi + + print_info 1 "You can customize Grub2 parameters in /etc/default/grub." + print_info 1 "Running grub2-mkconfig to create ${GRUB_CONF}..." + grub2-mkconfig -o "${GRUB_CONF}" + [ "${BUILD_RAMDISK}" -ne 0 ] && sed -i 's/ro single/ro debug/' "${GRUB_CONF}" +} + set_bootloader_grub() { local GRUB_CONF="${BOOTDIR}/grub/grub.conf" @@ -58,14 +86,12 @@ set_bootloader_grub() { echo "root (${GRUB_BOOT_DISK},${GRUB_BOOT_PARTITION})" >> ${GRUB_CONF} echo >> ${GRUB_CONF} - # Add grub configuration to grub.conf + # Add grub configuration to grub.conf echo "# Genkernel generated entry, see GRUB documentation for details" >> ${GRUB_CONF} echo "title=Gentoo Linux ($KV)" >> ${GRUB_CONF} - if [ "${BUILD_INITRD}" -eq '0' ] + echo -e "\tkernel /kernel-${KNAME}-${ARCH}-${KV} root=${GRUB_ROOTFS}" >> ${GRUB_CONF} + if [ "${BUILD_INITRD}" = '1' ] then - echo -e "\tkernel /kernel-${KNAME}-${ARCH}-${KV} root=${GRUB_ROOTFS}" >> ${GRUB_CONF} - else - echo -e "\tkernel /kernel-${KNAME}-${ARCH}-${KV} root=/dev/ram0 init=/linuxrc real_root=${GRUB_ROOTFS}" >> ${GRUB_CONF} if [ "${PAT}" -gt '4' ] then echo -e "\tinitrd /initramfs-${KNAME}-${ARCH}-${KV}" >> ${GRUB_CONF} @@ -79,6 +105,11 @@ set_bootloader_grub() { else # The grub.conf already exists, so let's try to duplicate the default entry + if set_bootloader_grub_check_for_existing_entry "${GRUB_CONF}"; then + print_warning 1 "An entry was already found for a kernel/initramfs with this name...skipping update" + return 0 + fi + set_bootloader_grub_duplicate_default "${GRUB_CONF}" fi @@ -89,10 +120,20 @@ set_bootloader_grub_duplicate_default_replace_kernel_initrd() { sed -r -e "/^[[:space:]]*initrd/s/init(rd|ramfs)-[[:alnum:][:punct:]]+/init\1-${KNAME}-${ARCH}-${KV}/" } +set_bootloader_grub_check_for_existing_entry() { + local GRUB_CONF=$1 + if grep -q "^[[:space:]]*kernel[[:space:]=]*.*/kernel-${KNAME}-${ARCH}-${KV}\([[:space:]]\|$\)" "${GRUB_CONF}" && + grep -q "^[[:space:]]*initrd[[:space:]=]*.*/initramfs-${KNAME}-${ARCH}-${KV}\([[:space:]]\|$\)" "${GRUB_CONF}" + then + return 0 + fi + return 1 +} + set_bootloader_grub_duplicate_default() { local GRUB_CONF=$1 local GRUB_CONF_TMP="${GRUB_CONF}.tmp" - + line_count=$(wc -l < "${GRUB_CONF}") line_nums="$(grep -n "^title" "${GRUB_CONF}" | cut -d: -f1)" if [ -z "${line_nums}" ]; then @@ -103,6 +144,10 @@ set_bootloader_grub_duplicate_default() { # Find default entry default=$(sed -rn '/^[[:space:]]*default[[:space:]=]/s/^.*default[[:space:]=]+([[:alnum:]]+).*$/\1/p' "${GRUB_CONF}") + if [ -z "${default}" ]; then + print_warning 1 "No default entry found...assuming 0" + default=0 + fi if ! echo ${default} | grep -q '^[0-9]\+$'; then print_error 1 "We don't support non-numeric (such as 'saved') default values...skipping update" return 0