diff options
author | Tom Zanussi <tom.zanussi@intel.com> | 2011-01-31 06:07:54 (GMT) |
---|---|---|
committer | Tom Zanussi <tom.zanussi@intel.com> | 2011-01-31 06:07:54 (GMT) |
commit | c5ecc11dec2402aa05e68bd03b65a6460837b748 (patch) | |
tree | 8ca0e296946abc3a0b9a79b51fa9f04d7d5469d7 /common/recipes-core | |
parent | 3a6fbfdf01945277a4a271942fc8086575c41744 (diff) | |
download | meta-intel-c5ecc11dec2402aa05e68bd03b65a6460837b748.tar.gz |
meta-intel: add a /common dir with grub2/live-install changes
Add a /common dir to contain code shared by multiple BSPs in the
meta-intel repo, along with a couple recipes to live there
temporarily.
In this case, there are two BSPs that need to share the common grub2
and associated initramfs-live-install changes (sugarbay and
jasperforest).
The grub2 and associated initramfs-live-install changes will soon be
submitted to the main poky repo, but for now it makes more sense to
keep them here - they're needed for live-install of the two BSPs
mentioned, but they contain a couple hacks that need to be addressed
and are untested with anything else.
Signed-off-by: Tom Zanussi <tom.zanussi@intel.com>
Diffstat (limited to 'common/recipes-core')
-rw-r--r-- | common/recipes-core/initrdscripts/initramfs-live-install/init-install.sh | 188 | ||||
-rw-r--r-- | common/recipes-core/initrdscripts/initramfs-live-install_1.0.bbappend | 2 |
2 files changed, 190 insertions, 0 deletions
diff --git a/common/recipes-core/initrdscripts/initramfs-live-install/init-install.sh b/common/recipes-core/initrdscripts/initramfs-live-install/init-install.sh new file mode 100644 index 0000000..7f2ea7f --- /dev/null +++ b/common/recipes-core/initrdscripts/initramfs-live-install/init-install.sh | |||
@@ -0,0 +1,188 @@ | |||
1 | #!/bin/sh -e | ||
2 | # | ||
3 | # Copyright (C) 2008 Intel | ||
4 | # | ||
5 | # install.sh [device_name] [rootfs_name] [video_mode] [vga_mode] | ||
6 | # | ||
7 | |||
8 | # We need 20 Mb for the boot partition | ||
9 | boot_size=20 | ||
10 | |||
11 | # 5% for the swap | ||
12 | swap_ratio=5 | ||
13 | |||
14 | found="no" | ||
15 | |||
16 | echo "Searching for a hard drive..." | ||
17 | for device in 'hda' 'hdb' 'sda' 'sdb' | ||
18 | do | ||
19 | if [ -e /sys/block/${device}/removable ]; then | ||
20 | if [ "$(cat /sys/block/${device}/removable)" = "0" ]; then | ||
21 | found="yes" | ||
22 | |||
23 | while true; do | ||
24 | echo "Found drive at /dev/${device}. Do you want to install poky there ? [y/n]" | ||
25 | read answer | ||
26 | if [ "$answer" = "y" ] ; then | ||
27 | break | ||
28 | fi | ||
29 | |||
30 | if [ "$answer" = "n" ] ; then | ||
31 | found=no | ||
32 | break | ||
33 | fi | ||
34 | |||
35 | echo "Please answer by y or n" | ||
36 | done | ||
37 | fi | ||
38 | fi | ||
39 | |||
40 | if [ "$found" = "yes" ]; then | ||
41 | break; | ||
42 | fi | ||
43 | |||
44 | done | ||
45 | |||
46 | if [ "$found" = "no" ]; then | ||
47 | exit 1 | ||
48 | fi | ||
49 | |||
50 | echo "Installing image on /dev/${device}" | ||
51 | |||
52 | # | ||
53 | # The udev automounter can cause pain here, kill it | ||
54 | # | ||
55 | rm -f /etc/udev/scripts/mount* | ||
56 | |||
57 | # | ||
58 | # Unmount anything the automounter had mounted | ||
59 | # | ||
60 | umount /dev/${device} 2> /dev/null || /bin/true | ||
61 | umount /dev/${device}1 2> /dev/null || /bin/true | ||
62 | umount /dev/${device}2 2> /dev/null || /bin/true | ||
63 | umount /dev/${device}3 2> /dev/null || /bin/true | ||
64 | umount /dev/${device}4 2> /dev/null || /bin/true | ||
65 | umount /dev/${device}5 2> /dev/null || /bin/true | ||
66 | umount /dev/${device}6 2> /dev/null || /bin/true | ||
67 | |||
68 | if [ ! -b /dev/sda ] ; then | ||
69 | mknod /dev/sda b 8 0 | ||
70 | fi | ||
71 | |||
72 | if [ ! -b /dev/sdb ] ; then | ||
73 | mknod /dev/sdb b 8 16 | ||
74 | fi | ||
75 | |||
76 | if [ ! -b /dev/loop0 ] ; then | ||
77 | mknod /dev/loop0 b 7 0 | ||
78 | fi | ||
79 | |||
80 | mkdir -p /tmp | ||
81 | cat /proc/mounts > /etc/mtab | ||
82 | |||
83 | disk_size=$(parted /dev/${device} unit mb print | grep Disk | cut -d" " -f 3 | sed -e "s/MB//") | ||
84 | |||
85 | swap_size=$((disk_size*5/100)) | ||
86 | rootfs_size=$((disk_size-boot_size-swap_size)) | ||
87 | |||
88 | rootfs_start=$((boot_size + 1)) | ||
89 | rootfs_end=$((rootfs_start+rootfs_size)) | ||
90 | swap_start=$((rootfs_end+1)) | ||
91 | |||
92 | bootfs=/dev/${device}1 | ||
93 | rootfs=/dev/${device}2 | ||
94 | swap=/dev/${device}3 | ||
95 | |||
96 | echo "*****************" | ||
97 | echo "Boot partition size: $boot_size MB (/dev/${device}1)" | ||
98 | echo "Rootfs partition size: $rootfs_size MB (/dev/${device}2)" | ||
99 | echo "Swap partition size: $swap_size MB (/dev/${device}3)" | ||
100 | echo "*****************" | ||
101 | echo "Deleting partition table on /dev/${device} ..." | ||
102 | dd if=/dev/zero of=/dev/${device} bs=512 count=2 | ||
103 | |||
104 | echo "Creating new partition table on /dev/${device} ..." | ||
105 | parted /dev/${device} mklabel msdos | ||
106 | |||
107 | echo "Creating boot partition on /dev/${device}1" | ||
108 | parted /dev/${device} mkpartfs primary ext2 0 $boot_size | ||
109 | |||
110 | echo "Creating rootfs partition on /dev/${device}2" | ||
111 | parted /dev/${device} mkpartfs primary ext2 $rootfs_start $rootfs_end | ||
112 | |||
113 | echo "Creating swap partition on /dev/${device}3" | ||
114 | parted /dev/${device} mkpartfs primary linux-swap $swap_start $disk_size | ||
115 | |||
116 | parted /dev/${device} print | ||
117 | |||
118 | echo "Formatting /dev/${device}1 to ext2..." | ||
119 | mkfs.ext3 $bootfs | ||
120 | |||
121 | echo "Formatting /dev/${device}2 to ext3..." | ||
122 | mkfs.ext3 $rootfs | ||
123 | |||
124 | echo "Formatting swap partition...(/dev/${device}3)" | ||
125 | mkswap $swap | ||
126 | |||
127 | mkdir /ssd | ||
128 | mkdir /rootmnt | ||
129 | mkdir /bootmnt | ||
130 | |||
131 | mount $rootfs /ssd | ||
132 | mount -o rw,loop,noatime,nodiratime /media/$1/$2 /rootmnt | ||
133 | |||
134 | echo "Copying rootfs files..." | ||
135 | cp -a /rootmnt/* /ssd | ||
136 | |||
137 | if [ -d /ssd/etc/ ] ; then | ||
138 | echo "$swap swap swap defaults 0 0" >> /ssd/etc/fstab | ||
139 | |||
140 | # We dont want udev to mount our root device while we're booting... | ||
141 | if [ -d /ssd/etc/udev/ ] ; then | ||
142 | echo "/dev/${device}" >> /ssd/etc/udev/mount.blacklist | ||
143 | fi | ||
144 | fi | ||
145 | |||
146 | if [ -f /ssd/etc/grub.d/40_custom ] ; then | ||
147 | sed -i "s@__ROOTFS__@$rootfs@g" /ssd/etc/grub.d/40_custom | ||
148 | sed -i "s/__VIDEO_MODE__/$3/g" /ssd/etc/grub.d/40_custom | ||
149 | sed -i "s/__VGA_MODE__/$4/g" /ssd/etc/grub.d/40_custom | ||
150 | mount $bootfs /bootmnt | ||
151 | cp /ssd/etc/grub.d/40_custom /bootmnt/40_custom | ||
152 | umount /bootmnt | ||
153 | force="--force" | ||
154 | fi | ||
155 | |||
156 | umount /ssd | ||
157 | umount /rootmnt | ||
158 | |||
159 | echo "Preparing boot partition..." | ||
160 | mount $bootfs /ssd | ||
161 | grub-install $force --root-directory=/ssd /dev/${device} | ||
162 | |||
163 | echo "(hd0) /dev/${device}" > /ssd/boot/grub/device.map | ||
164 | |||
165 | if [ -f /ssd/40_custom ] ; then | ||
166 | mv /ssd/40_custom /ssd/boot/grub/grub.cfg | ||
167 | sed -i "/#/d" /ssd/boot/grub/grub.cfg | ||
168 | sed -i "/exec tail/d" /ssd/boot/grub/grub.cfg | ||
169 | chmod 0444 /ssd/boot/grub/grub.cfg | ||
170 | else | ||
171 | echo "default 0" > /ssd/boot/grub/menu.lst | ||
172 | echo "timeout 30" >> /ssd/boot/grub/menu.lst | ||
173 | echo "title Poky-Netbook" >> /ssd/boot/grub/menu.lst | ||
174 | echo "root (hd0,1)" >> /ssd/boot/grub/menu.lst | ||
175 | echo "kernel /boot/vmlinuz root=$rootfs rw $3 $4 quiet" >> /ssd/boot/grub/menu.lst | ||
176 | fi | ||
177 | |||
178 | cp /media/$1/vmlinuz /ssd/boot/ | ||
179 | |||
180 | umount /ssd | ||
181 | sync | ||
182 | |||
183 | echo "Remove your installation media, and press ENTER" | ||
184 | |||
185 | read enter | ||
186 | |||
187 | echo "Rebooting..." | ||
188 | reboot -f | ||
diff --git a/common/recipes-core/initrdscripts/initramfs-live-install_1.0.bbappend b/common/recipes-core/initrdscripts/initramfs-live-install_1.0.bbappend new file mode 100644 index 0000000..d3420e0 --- /dev/null +++ b/common/recipes-core/initrdscripts/initramfs-live-install_1.0.bbappend | |||
@@ -0,0 +1,2 @@ | |||
1 | THISDIR := "${@os.path.dirname(bb.data.getVar('FILE', d, True))}" | ||
2 | FILESPATH =. "${@base_set_filespath(["${THISDIR}/${PN}"], d)}:" | ||