From af7dcebb25e13eebc170178b7278318afc3c44a7 Mon Sep 17 00:00:00 2001 From: Olivier Sallou Date: Fri, 26 Jul 2013 15:33:16 +0200 Subject: [PATCH] udpate grub to add menu and add MBR --- providers/one/__init__.py | 2 +- providers/one/assets/grub.d/40_custom | 21 ++++-- providers/one/assets/grub.d/40_custom.orig | 81 ++++++++++++++++++++++ providers/one/tasks/filesystem.py | 3 +- 4 files changed, 99 insertions(+), 8 deletions(-) create mode 100644 providers/one/assets/grub.d/40_custom.orig diff --git a/providers/one/__init__.py b/providers/one/__init__.py index a7c16ec..7cc01a7 100644 --- a/providers/one/__init__.py +++ b/providers/one/__init__.py @@ -46,7 +46,7 @@ def tasks(tasklist, manifest): #apt.AptUpgrade(), boot.ConfigureGrub(), filesystem.ModifyFstab(), - #filesystem.InstallMbr(), + filesystem.InstallMbr(), boot.BlackListModules(), boot.DisableGetTTYs(), security.EnableShadowConfig(), diff --git a/providers/one/assets/grub.d/40_custom b/providers/one/assets/grub.d/40_custom index 0e74a8e..9977def 100644 --- a/providers/one/assets/grub.d/40_custom +++ b/providers/one/assets/grub.d/40_custom @@ -17,8 +17,14 @@ GRUB_DEVICE=/dev/sda1 cat << EOF -default ${GRUB_DEFAULT} -timeout ${GRUB_TIMEOUT} +set default ${GRUB_DEFAULT} +set timeout ${GRUB_TIMEOUT} +insmod part_msdos +insmod ext4 +insmod gettext +set menu_color_normal=cyan/blue +set meu_color_highlight=white/blue +set root='(hd0,msdos1)' EOF if ${GRUB_HIDDEN_TIMEOUT:-false}; then @@ -34,10 +40,15 @@ linux_entry () title="$(gettext_quoted "%s, with Linux %s")" cat << EOF -title ${version} - root (hd0) - kernel ${rel_dirname}/${basename} root=${GRUB_DEVICE} ro ${args} +menuentry 'Debian GNU/Linux, ${version}' --class debian --class gnu-linux --class os { + insmod part_msdos + insmod ext4 + set root='(hd0,msdos1)' + echo 'Loading Linux ${version}' + linux ${rel_dirname}/${basename} root=${GRUB_DEVICE} ro ${args} + echo 'Loading initial ramdisk ...' initrd ${rel_dirname}/${initrd} +} EOF } diff --git a/providers/one/assets/grub.d/40_custom.orig b/providers/one/assets/grub.d/40_custom.orig new file mode 100644 index 0000000..0e74a8e --- /dev/null +++ b/providers/one/assets/grub.d/40_custom.orig @@ -0,0 +1,81 @@ +#!/bin/sh + +# This file generates the old menu.lst configuration with grub2 +# It was copied from tomheadys github repo: +# https://github.com/tomheady/ec2debian/blob/master/src/root/etc/grub.d/40_custom + +prefix=/usr +exec_prefix=${prefix} +bindir=${exec_prefix}/bin +libdir=${exec_prefix}/lib +. ${libdir}/grub/grub-mkconfig_lib + +export TEXTDOMAIN=grub +export TEXTDOMAINDIR=${prefix}/share/locale + +GRUB_DEVICE=/dev/sda1 + + +cat << EOF +default ${GRUB_DEFAULT} +timeout ${GRUB_TIMEOUT} +EOF + +if ${GRUB_HIDDEN_TIMEOUT:-false}; then + printf "hiddenmenu\n" +fi + +linux_entry () +{ + os="$1" + version="$2" + args="$4" + + title="$(gettext_quoted "%s, with Linux %s")" + + cat << EOF +title ${version} + root (hd0) + kernel ${rel_dirname}/${basename} root=${GRUB_DEVICE} ro ${args} + initrd ${rel_dirname}/${initrd} +EOF +} + +list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* ; do + if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi + done` +prepare_boot_cache= + +while [ "x$list" != "x" ] ; do + linux=`version_find_latest $list` + basename=`basename $linux` + dirname=`dirname $linux` + rel_dirname=`make_system_path_relative_to_its_root $dirname` + version=`echo $basename | sed -e "s,^[^0-9]*-,,g"` + alt_version=`echo $version | sed -e "s,\.old$,,g"` + linux_root_device_thisversion="${LINUX_ROOT_DEVICE}" + + initrd= + for i in "initrd.img-${version}" "initrd-${version}.img" \ + "initrd-${version}" "initramfs-${version}.img" \ + "initrd.img-${alt_version}" "initrd-${alt_version}.img" \ + "initrd-${alt_version}" "initramfs-${alt_version}.img"; do + if test -e "${dirname}/${i}" ; then + initrd="$i" + break + fi + done + + initramfs= + for i in "config-${version}" "config-${alt_version}"; do + if test -e "${dirname}/${i}" ; then + initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${dirname}/${i}" | cut -f2 -d= | tr -d \"` + break + fi + done + + linux_entry "${OS}" "${version}" \ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" + + list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '` +done diff --git a/providers/one/tasks/filesystem.py b/providers/one/tasks/filesystem.py index 08f149a..618d8e1 100644 --- a/providers/one/tasks/filesystem.py +++ b/providers/one/tasks/filesystem.py @@ -145,5 +145,4 @@ class InstallMbr(Task): phase = phases.system_modification def run(self, info): - log_check_call(['/usr/sbin/chroot', info.root, 'install-mbr', '/dev/sda']) - log_check_call(['/usr/sbin/chroot', info.root, 'fdisk', '-l', '/dev/sda']) + log_check_call(['install-mbr', info.manifest.bootstrapper['image_file']])