Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: image_to_vm.sh

Issue 3189018: Clean up cros_make_image_bootable and image_to_vm (Closed) Base URL: http://src.chromium.org/git/crosutils.git
Patch Set: make sure unverified syslinux gets the root updated too Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « bin/cros_make_image_bootable ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/bin/bash 1 #!/bin/bash
2 2
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 # Script to convert the output of build_image.sh to a VMware image and write a 7 # Script to convert the output of build_image.sh to a VMware image and write a
8 # corresponding VMware config file. 8 # corresponding VMware config file.
9 9
10 # Load common constants. This should be the first executable line. 10 # Load common constants. This should be the first executable line.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 echo "Done with mod_image_for_test." 108 echo "Done with mod_image_for_test."
109 else 109 else
110 echo "Using cached test image." 110 echo "Using cached test image."
111 fi 111 fi
112 SRC_IMAGE="${FLAGS_from}/chromiumos_test_image.bin" 112 SRC_IMAGE="${FLAGS_from}/chromiumos_test_image.bin"
113 echo "Source test image is: ${SRC_IMAGE}" 113 echo "Source test image is: ${SRC_IMAGE}"
114 fi 114 fi
115 115
116 # Memory units are in MBs 116 # Memory units are in MBs
117 DEFAULT_MEM="1024" 117 DEFAULT_MEM="1024"
118 TEMP_IMAGE="${IMAGES_DIR}/temp_image.img" 118 TEMP_IMG="$(dirname ${SRC_IMAGE})/vm_temp_image.bin"
119
120 119
121 # If we're not building for VMWare, don't build the vmx 120 # If we're not building for VMWare, don't build the vmx
122 if [ "${FLAGS_format}" != "vmware" ]; then 121 if [ "${FLAGS_format}" != "vmware" ]; then
123 FLAGS_make_vmx="${FLAGS_FALSE}" 122 FLAGS_make_vmx="${FLAGS_FALSE}"
124 fi 123 fi
125 124
126 # Convert args to paths. Need eval to un-quote the string so that shell 125 # Convert args to paths. Need eval to un-quote the string so that shell
127 # chars like ~ are processed; just doing FOO=`readlink -f $FOO` won't work. 126 # chars like ~ are processed; just doing FOO=`readlink -f $FOO` won't work.
128 FLAGS_from=`eval readlink -f $FLAGS_from` 127 FLAGS_from=`eval readlink -f $FLAGS_from`
129 FLAGS_to=`eval readlink -f $FLAGS_to` 128 FLAGS_to=`eval readlink -f $FLAGS_to`
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 mkdir -p "${TEMP_ESP_MNT}" 181 mkdir -p "${TEMP_ESP_MNT}"
183 sudo mount -o loop "${TEMP_ESP}" "${TEMP_ESP_MNT}" 182 sudo mount -o loop "${TEMP_ESP}" "${TEMP_ESP_MNT}"
184 183
185 if [ "${FLAGS_format}" = "qemu" ]; then 184 if [ "${FLAGS_format}" = "qemu" ]; then
186 sudo python ./fixup_image_for_qemu.py --mounted_dir="${TEMP_MNT}" \ 185 sudo python ./fixup_image_for_qemu.py --mounted_dir="${TEMP_MNT}" \
187 --enable_tablet=true 186 --enable_tablet=true
188 else 187 else
189 sudo python ./fixup_image_for_qemu.py --mounted_dir="${TEMP_MNT}" \ 188 sudo python ./fixup_image_for_qemu.py --mounted_dir="${TEMP_MNT}" \
190 --enable_tablet=false 189 --enable_tablet=false
191 fi 190 fi
192 # Remount read-only so that when we call setimage, it will recreate correct 191
193 # boot hashes for verifying the rootfs integrity. This is a bit of a cheat 192 # Modify the unverified usb template which uses a default usb_disk of sdb3
194 # but it will have to do. We don't assume legacy bootloaders are secure so 193 sudo sed -i -e 's/sdb3/sda3/g' "${TEMP_MNT}/boot/syslinux/usb.A.cfg"
195 # we update the hash too, but the hash in part_2 doesn't change which would 194
196 # cause failures on a Chrome OS boot (without re-running build_kernel_image). 195 # Unmount everything prior to building a final image
197 sudo mount -o remount,ro "${TEMP_MNT}"
198 sync 196 sync
199
200 # Check if the current image was build with --enable_rootfs_verification
201 enable_rootfs_verification=
202 if grep -qE '^chromeos-v' "${TEMP_ESP_MNT}"/syslinux/default.cfg; then
203 enable_rootfs_verification=--enable_rootfs_verification
204 fi
205
206 # Update the bootloader and verified hashes for the given rootfs in the
207 # vm and fixup changes.
208 DST_DEV=/dev/sda
209 BOOT_SLOT=A
210 syslinux_cfg="${TEMP_MNT}/boot/syslinux/root.${BOOT_SLOT}.cfg"
211 grub_cfg="${TEMP_MNT}/boot/efi/boot/grub.cfg"
212 sudo "${TEMP_MNT}"/usr/sbin/chromeos-setimage ${BOOT_SLOT} \
213 --dst=${DST_DEV} --run_as_root \
214 --update_syslinux_cfg="${syslinux_cfg}" \
215 --update_grub_cfg="${grub_cfg}" \
216 --rootfs_image="${TEMP_ROOTFS}" \
217 --esp_mounted_at="${TEMP_ESP_MNT}" \
218 --kernel_image="${TEMP_KERN}" \
219 --update_vmlinuz=${TEMP_MNT}/boot/vmlinuz \
220 ${enable_rootfs_verification}
221
222 trap - INT TERM EXIT 197 trap - INT TERM EXIT
223 cleanup 198 cleanup
224 199
225 # Make 3 GiB output image 200 # Make 3 GiB output image
226 TEMP_IMG=$(mktemp)
227 # TOOD(adlr): pick a size that will for sure accomodate the partitions 201 # TOOD(adlr): pick a size that will for sure accomodate the partitions
228 sudo dd if=/dev/zero of="${TEMP_IMG}" bs=1 count=1 \ 202 dd if=/dev/zero of="${TEMP_IMG}" bs=1 count=1 \
229 seek=$((${FLAGS_vdisk_size} * 1024 * 1024 - 1)) 203 seek=$((${FLAGS_vdisk_size} * 1024 * 1024 - 1))
230 204
231 # Set up the partition table 205 # Set up the partition table
232 install_gpt "${TEMP_IMG}" "$(numsectors $TEMP_ROOTFS)" \ 206 install_gpt "${TEMP_IMG}" "$(numsectors $TEMP_ROOTFS)" \
233 "$(numsectors $TEMP_STATE)" "${TEMP_PMBR}" "$(numsectors $TEMP_ESP)" \ 207 "$(numsectors $TEMP_STATE)" "${TEMP_PMBR}" "$(numsectors $TEMP_ESP)" \
234 false ${FLAGS_rootfs_partition_size} 208 false ${FLAGS_rootfs_partition_size}
235 # Copy into the partition parts of the file 209 # Copy into the partition parts of the file
236 dd if="${TEMP_ROOTFS}" of="${TEMP_IMG}" conv=notrunc bs=512 \ 210 dd if="${TEMP_ROOTFS}" of="${TEMP_IMG}" conv=notrunc bs=512 \
237 seek="${START_ROOTFS_A}" 211 seek="${START_ROOTFS_A}"
238 dd if="${TEMP_STATE}" of="${TEMP_IMG}" conv=notrunc bs=512 \ 212 dd if="${TEMP_STATE}" of="${TEMP_IMG}" conv=notrunc bs=512 \
239 seek="${START_STATEFUL}" 213 seek="${START_STATEFUL}"
240 dd if="${TEMP_KERN}" of="${TEMP_IMG}" conv=notrunc bs=512 \ 214 dd if="${TEMP_KERN}" of="${TEMP_IMG}" conv=notrunc bs=512 \
241 seek="${START_KERN_A}" 215 seek="${START_KERN_A}"
242 dd if="${TEMP_ESP}" of="${TEMP_IMG}" conv=notrunc bs=512 \ 216 dd if="${TEMP_ESP}" of="${TEMP_IMG}" conv=notrunc bs=512 \
243 seek="${START_ESP}" 217 seek="${START_ESP}"
244 218
219 # Make the built-image bootable and ensure that the legacy default usb boot
220 # uses /dev/sda instead of /dev/sdb3.
221 # NOTE: The TEMP_IMG must live in the same image dir as the original image
222 # to operate automatically below.
223 ${SCRIPTS_DIR}/bin/cros_make_image_bootable $(dirname "${TEMP_IMG}") \
224 $(basename "${TEMP_IMG}") \
225 --usb_disk /dev/sda3
226
245 echo Creating final image 227 echo Creating final image
246 # Convert image to output format 228 # Convert image to output format
247 if [ "${FLAGS_format}" = "virtualbox" -o "${FLAGS_format}" = "qemu" ]; then 229 if [ "${FLAGS_format}" = "virtualbox" -o "${FLAGS_format}" = "qemu" ]; then
248 if [ "${FLAGS_format}" = "virtualbox" ]; then 230 if [ "${FLAGS_format}" = "virtualbox" ]; then
249 VBoxManage convertdd "${TEMP_IMG}" "${FLAGS_to}/${FLAGS_vbox_disk}" 231 VBoxManage convertdd "${TEMP_IMG}" "${FLAGS_to}/${FLAGS_vbox_disk}"
250 else 232 else
251 mv ${TEMP_IMG} ${FLAGS_to}/${DEFAULT_QEMU_IMAGE} 233 mv ${TEMP_IMG} ${FLAGS_to}/${DEFAULT_QEMU_IMAGE}
252 fi 234 fi
253 elif [ "${FLAGS_format}" = "vmware" ]; then 235 elif [ "${FLAGS_format}" = "vmware" ]; then
254 qemu-img convert -f raw "${TEMP_IMG}" \ 236 qemu-img convert -f raw "${TEMP_IMG}" \
(...skipping 26 matching lines...) Expand all
281 guestOS = \"otherlinux\" 263 guestOS = \"otherlinux\"
282 ethernet0.addressType = \"generated\" 264 ethernet0.addressType = \"generated\"
283 floppy0.present = \"FALSE\"" 265 floppy0.present = \"FALSE\""
284 266
285 if [[ "${FLAGS_make_vmx}" = "${FLAGS_TRUE}" ]]; then 267 if [[ "${FLAGS_make_vmx}" = "${FLAGS_TRUE}" ]]; then
286 echo "${VMX_CONFIG}" > "${FLAGS_to}/${FLAGS_vmx}" 268 echo "${VMX_CONFIG}" > "${FLAGS_to}/${FLAGS_vmx}"
287 echo "Wrote the following config to: ${FLAGS_to}/${FLAGS_vmx}" 269 echo "Wrote the following config to: ${FLAGS_to}/${FLAGS_vmx}"
288 echo "${VMX_CONFIG}" 270 echo "${VMX_CONFIG}"
289 fi 271 fi
290 272
OLDNEW
« no previous file with comments | « bin/cros_make_image_bootable ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698