From: Tom Zanussi <tom.zanussi@intel.com>
To: openembedded-core@lists.openembedded.org
Subject: [PATCH 2/2] initramfs-live-install: add a version for use with grub2
Date: Wed, 14 Sep 2011 00:39:32 -0500 [thread overview]
Message-ID: <1315978772.26879.1860.camel@elmorro> (raw)
grub2 uses a completely different set of install steps. These are
contained in a 2.0 version of init-install.sh, which is tied to grub2
(1.98) and a 2.0 version of the initramfs-live-install recipe.
Signed-off-by: Tom Zanussi <tom.zanussi@intel.com>
---
.../initrdscripts/files/init-install_2.0.sh | 178 ++++++++++++++++++++
.../initrdscripts/initramfs-live-install_2.0.bb | 22 +++
2 files changed, 200 insertions(+), 0 deletions(-)
create mode 100644 meta/recipes-core/initrdscripts/files/init-install_2.0.sh
create mode 100644 meta/recipes-core/initrdscripts/initramfs-live-install_2.0.bb
diff --git a/meta/recipes-core/initrdscripts/files/init-install_2.0.sh b/meta/recipes-core/initrdscripts/files/init-install_2.0.sh
new file mode 100644
index 0000000..a1876f8
--- /dev/null
+++ b/meta/recipes-core/initrdscripts/files/init-install_2.0.sh
@@ -0,0 +1,178 @@
+#!/bin/sh -e
+#
+# Copyright (C) 2011 Intel
+#
+# install.sh [device_name] [rootfs_name] [video_mode] [vga_mode]
+#
+
+# We need 20 Mb for the boot partition
+boot_size=20
+
+# 5% for the swap
+swap_ratio=5
+
+found="no"
+
+echo "Searching for a hard drive..."
+for device in 'hda' 'hdb' 'sda' 'sdb'
+ do
+ if [ -e /sys/block/${device}/removable ]; then
+ if [ "$(cat /sys/block/${device}/removable)" = "0" ]; then
+ found="yes"
+
+ while true; do
+ echo "Found drive at /dev/${device}. Do you want to install poky there ? [y/n]"
+ read answer
+ if [ "$answer" = "y" ] ; then
+ break
+ fi
+
+ if [ "$answer" = "n" ] ; then
+ found=no
+ break
+ fi
+
+ echo "Please answer by y or n"
+ done
+ fi
+ fi
+
+ if [ "$found" = "yes" ]; then
+ break;
+ fi
+
+done
+
+if [ "$found" = "no" ]; then
+ exit 1
+fi
+
+echo "Installing image on /dev/${device}"
+
+#
+# The udev automounter can cause pain here, kill it
+#
+rm -f /etc/udev/scripts/mount*
+
+#
+# Unmount anything the automounter had mounted
+#
+umount /dev/${device} 2> /dev/null || /bin/true
+umount /dev/${device}1 2> /dev/null || /bin/true
+umount /dev/${device}2 2> /dev/null || /bin/true
+umount /dev/${device}3 2> /dev/null || /bin/true
+umount /dev/${device}4 2> /dev/null || /bin/true
+umount /dev/${device}5 2> /dev/null || /bin/true
+umount /dev/${device}6 2> /dev/null || /bin/true
+
+if [ ! -b /dev/sda ] ; then
+ mknod /dev/sda b 8 0
+fi
+
+if [ ! -b /dev/sdb ] ; then
+ mknod /dev/sdb b 8 16
+fi
+
+if [ ! -b /dev/loop0 ] ; then
+ mknod /dev/loop0 b 7 0
+fi
+
+mkdir -p /tmp
+cat /proc/mounts > /etc/mtab
+
+disk_size=$(parted /dev/${device} unit mb print | grep Disk | cut -d" " -f 3 | sed -e "s/MB//")
+
+swap_size=$((disk_size*5/100))
+rootfs_size=$((disk_size-boot_size-swap_size))
+
+rootfs_start=$((boot_size + 1))
+rootfs_end=$((rootfs_start+rootfs_size))
+swap_start=$((rootfs_end+1))
+
+bootfs=/dev/${device}1
+rootfs=/dev/${device}2
+swap=/dev/${device}3
+
+echo "*****************"
+echo "Boot partition size: $boot_size MB (/dev/${device}1)"
+echo "Rootfs partition size: $rootfs_size MB (/dev/${device}2)"
+echo "Swap partition size: $swap_size MB (/dev/${device}3)"
+echo "*****************"
+echo "Deleting partition table on /dev/${device} ..."
+dd if=/dev/zero of=/dev/${device} bs=512 count=2
+
+echo "Creating new partition table on /dev/${device} ..."
+parted /dev/${device} mklabel msdos
+
+echo "Creating boot partition on /dev/${device}1"
+parted /dev/${device} mkpart primary 1 $boot_size
+
+echo "Creating rootfs partition on /dev/${device}2"
+parted /dev/${device} mkpart primary $rootfs_start $rootfs_end
+
+echo "Creating swap partition on /dev/${device}3"
+parted /dev/${device} mkpart primary $swap_start $disk_size
+
+parted /dev/${device} print
+
+echo "Formatting /dev/${device}1 to ext2..."
+mkfs.ext3 $bootfs
+
+echo "Formatting /dev/${device}2 to ext3..."
+mkfs.ext3 $rootfs
+
+echo "Formatting swap partition...(/dev/${device}3)"
+mkswap $swap
+
+mkdir /ssd
+mkdir /rootmnt
+mkdir /bootmnt
+
+mount $rootfs /ssd
+mount -o rw,loop,noatime,nodiratime /media/$1/$2 /rootmnt
+
+echo "Copying rootfs files..."
+cp -a /rootmnt/* /ssd
+
+if [ -d /ssd/etc/ ] ; then
+ echo "$swap swap swap defaults 0 0" >> /ssd/etc/fstab
+
+ # We dont want udev to mount our root device while we're booting...
+ if [ -d /ssd/etc/udev/ ] ; then
+ echo "/dev/${device}" >> /ssd/etc/udev/mount.blacklist
+ fi
+fi
+
+sed -i "s@__ROOTFS__@$rootfs@g" /ssd/etc/grub.d/40_custom
+sed -i "s/__VIDEO_MODE__/$3/g" /ssd/etc/grub.d/40_custom
+sed -i "s/__VGA_MODE__/$4/g" /ssd/etc/grub.d/40_custom
+mount $bootfs /bootmnt
+cp /ssd/etc/grub.d/40_custom /bootmnt/40_custom
+umount /bootmnt
+force="--force"
+
+umount /ssd
+umount /rootmnt
+
+echo "Preparing boot partition..."
+mount $bootfs /ssd
+grub-install $force --root-directory=/ssd /dev/${device}
+
+echo "(hd0) /dev/${device}" > /ssd/boot/grub/device.map
+
+mv /ssd/40_custom /ssd/boot/grub/grub.cfg
+sed -i "/#/d" /ssd/boot/grub/grub.cfg
+sed -i "/exec tail/d" /ssd/boot/grub/grub.cfg
+chmod 0444 /ssd/boot/grub/grub.cfg
+
+cp /media/$1/vmlinuz /ssd/boot/
+
+umount /ssd
+sync
+
+echo "Remove your installation media, and press ENTER"
+
+read enter
+
+echo "Rebooting..."
+reboot -f
diff --git a/meta/recipes-core/initrdscripts/initramfs-live-install_2.0.bb b/meta/recipes-core/initrdscripts/initramfs-live-install_2.0.bb
new file mode 100644
index 0000000..75ba198
--- /dev/null
+++ b/meta/recipes-core/initrdscripts/initramfs-live-install_2.0.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "A live image init script for grub2"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+SRC_URI = "file://init-install_2.0.sh"
+
+PR = "r0"
+
+RDEPENDS="grub (>= 1.99) parted e2fsprogs-mke2fs"
+
+do_install() {
+ install -m 0755 ${WORKDIR}/init-install_2.0.sh ${D}/install.sh
+}
+
+# While this package maybe an allarch due to it being a
+# simple script, reality is that it is Host specific based
+# on the COMPATIBLE_HOST below, which needs to take precedence
+#inherit allarch
+INHIBIT_DEFAULT_DEPS = "1"
+
+FILES_${PN} = " /install.sh "
+
+COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
--
1.7.0.4
next reply other threads:[~2011-09-14 5:45 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-14 5:39 Tom Zanussi [this message]
2011-09-14 12:29 ` [PATCH 2/2] initramfs-live-install: add a version for use with grub2 Otavio Salvador
2011-09-14 15:43 ` Tom Zanussi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1315978772.26879.1860.camel@elmorro \
--to=tom.zanussi@intel.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.