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

Side by Side Diff: image_to_vm.sh

Issue 3034030: image_to_vm: convert to calling setimage directly (Closed) Base URL: http://src.chromium.org/git/crosutils.git
Patch Set: tabs Created 10 years, 5 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 | « build_image ('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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 130
131 # Split apart the partitions and make some new ones 131 # Split apart the partitions and make some new ones
132 TEMP_DIR=$(mktemp -d) 132 TEMP_DIR=$(mktemp -d)
133 (cd "${TEMP_DIR}" && 133 (cd "${TEMP_DIR}" &&
134 "${FLAGS_from}/unpack_partitions.sh" "${SRC_IMAGE}") 134 "${FLAGS_from}/unpack_partitions.sh" "${SRC_IMAGE}")
135 135
136 # Fix the kernel command line 136 # Fix the kernel command line
137 TEMP_ESP="${TEMP_DIR}"/part_12 137 TEMP_ESP="${TEMP_DIR}"/part_12
138 TEMP_ROOTFS="${TEMP_DIR}"/part_3 138 TEMP_ROOTFS="${TEMP_DIR}"/part_3
139 TEMP_STATE="${TEMP_DIR}"/part_1 139 TEMP_STATE="${TEMP_DIR}"/part_1
140 TEMP_KERN="${TEMP_DIR}"/part_2
140 if [ -n "${FLAGS_state_image}" ]; then 141 if [ -n "${FLAGS_state_image}" ]; then
141 TEMP_STATE="${FLAGS_state_image}" 142 TEMP_STATE="${FLAGS_state_image}"
142 else 143 else
143 # If we have a stateful fs size specified create a new state partition 144 # If we have a stateful fs size specified create a new state partition
144 # of the specified size. 145 # of the specified size.
145 if [ "${FLAGS_statefulfs_size}" -ne -1 ]; then 146 if [ "${FLAGS_statefulfs_size}" -ne -1 ]; then
146 STATEFUL_SIZE_BYTES=$((1024 * 1024 * ${FLAGS_statefulfs_size})) 147 STATEFUL_SIZE_BYTES=$((1024 * 1024 * ${FLAGS_statefulfs_size}))
147 original_image_size=$(stat -c%s "${TEMP_STATE}") 148 original_image_size=$(stat -c%s "${TEMP_STATE}")
148 if [ "${original_image_size}" -gt "${STATEFUL_SIZE_BYTES}" ]; then 149 if [ "${original_image_size}" -gt "${STATEFUL_SIZE_BYTES}" ]; then
149 die "Cannot resize stateful image to smaller than original. Exiting." 150 die "Cannot resize stateful image to smaller than original. Exiting."
(...skipping 13 matching lines...) Expand all
163 sudo e2fsck -f "${STATEFUL_LOOP_DEV}" 164 sudo e2fsck -f "${STATEFUL_LOOP_DEV}"
164 sudo resize2fs "${STATEFUL_LOOP_DEV}" 165 sudo resize2fs "${STATEFUL_LOOP_DEV}"
165 sudo losetup -d "${STATEFUL_LOOP_DEV}" 166 sudo losetup -d "${STATEFUL_LOOP_DEV}"
166 fi 167 fi
167 fi 168 fi
168 TEMP_KERN="${TEMP_DIR}"/part_2 169 TEMP_KERN="${TEMP_DIR}"/part_2
169 TEMP_PMBR="${TEMP_DIR}"/pmbr 170 TEMP_PMBR="${TEMP_DIR}"/pmbr
170 dd if="${SRC_IMAGE}" of="${TEMP_PMBR}" bs=512 count=1 171 dd if="${SRC_IMAGE}" of="${TEMP_PMBR}" bs=512 count=1
171 172
172 TEMP_MNT=$(mktemp -d) 173 TEMP_MNT=$(mktemp -d)
174 TEMP_ESP_MNT=$(mktemp -d)
173 cleanup() { 175 cleanup() {
174 sudo umount -d "${TEMP_MNT}" 176 sudo umount -d "${TEMP_MNT}"
175 rmdir "${TEMP_MNT}" 177 sudo umount -d "${TEMP_ESP_MNT}"
178 rmdir "${TEMP_MNT}" "${TEMP_ESP_MNT}"
176 } 179 }
177 trap cleanup INT TERM EXIT 180 trap cleanup INT TERM EXIT
178 mkdir -p "${TEMP_MNT}" 181 mkdir -p "${TEMP_MNT}"
179 sudo mount -o loop "${TEMP_ROOTFS}" "${TEMP_MNT}" 182 sudo mount -o loop "${TEMP_ROOTFS}" "${TEMP_MNT}"
183 mkdir -p "${TEMP_ESP_MNT}"
184 sudo mount -o loop "${TEMP_ESP}" "${TEMP_ESP_MNT}"
185
180 if [ "${FLAGS_format}" = "qemu" ]; then 186 if [ "${FLAGS_format}" = "qemu" ]; then
181 sudo python ./fixup_image_for_qemu.py --mounted_dir="${TEMP_MNT}" \ 187 sudo python ./fixup_image_for_qemu.py --mounted_dir="${TEMP_MNT}" \
182 --enable_tablet=true 188 --enable_tablet=true
183 else 189 else
184 sudo python ./fixup_image_for_qemu.py --mounted_dir="${TEMP_MNT}" \ 190 sudo python ./fixup_image_for_qemu.py --mounted_dir="${TEMP_MNT}" \
185 --enable_tablet=false 191 --enable_tablet=false
186 fi 192 fi
193 # Remount read-only so that when we call setimage, it will recreate correct
194 # boot hashes for verifying the rootfs integrity. This is a bit of a cheat
195 # but it will have to do. We don't assume legacy bootloaders are secure so
196 # we update the hash too, but the hash in part_2 doesn't change which would
197 # cause failures on a Chrome OS boot (without re-running build_kernel_image).
198 sudo mount -o remount,ro "${TEMP_MNT}"
199 sync
187 200
188 # Change this value if the rootfs partition changes 201 # Check if the current image was build with --enable_rootfs_verification
189 ROOTFS_PARTITION=/dev/sda3 202 enable_rootfs_verification=
190 sudo "${TEMP_MNT}"/postinst "${ROOTFS_PARTITION}" --esp_part_file="${TEMP_ESP}" 203 if grep -qE '^chromeos-v' "${TEMP_ESP_MNT}"/syslinux/default.cfg; then
204 enable_rootfs_verification=--enable_rootfs_verification
205 fi
206
207 # Update the bootloader and verified hashes for the given rootfs in the
208 # vm and fixup changes.
209 DST_DEV=/dev/sda
210 BOOT_SLOT=A
211 syslinux_cfg="${TEMP_MNT}/boot/syslinux/root.${BOOT_SLOT}.cfg"
212 grub_cfg="${TEMP_MNT}/boot/efi/boot/grub.cfg"
213 sudo "${TEMP_MNT}"/usr/sbin/chromeos-setimage ${BOOT_SLOT} \
214 --dst=${DST_DEV} --run_as_root \
215 --update_syslinux_cfg="${syslinux_cfg}" \
216 --update_grub_cfg="${grub_cfg}" \
217 --rootfs_image="${TEMP_ROOTFS}" \
218 --esp_mounted_at="${TEMP_ESP_MNT}" \
219 --kernel_image="${TEMP_KERN}" \
220 --update_vmlinuz=${TEMP_MNT}/boot/vmlinuz \
221 ${enable_rootfs_verification}
222
191 trap - INT TERM EXIT 223 trap - INT TERM EXIT
192 cleanup 224 cleanup
193 225
194 # Make 3 GiB output image 226 # Make 3 GiB output image
195 TEMP_IMG=$(mktemp) 227 TEMP_IMG=$(mktemp)
196 # TOOD(adlr): pick a size that will for sure accomodate the partitions 228 # TOOD(adlr): pick a size that will for sure accomodate the partitions
197 sudo dd if=/dev/zero of="${TEMP_IMG}" bs=1 count=1 \ 229 sudo dd if=/dev/zero of="${TEMP_IMG}" bs=1 count=1 \
198 seek=$((${FLAGS_vdisk_size} * 1024 * 1024 - 1)) 230 seek=$((${FLAGS_vdisk_size} * 1024 * 1024 - 1))
199 231
200 # Set up the partition table 232 # Set up the partition table
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 guestOS = \"otherlinux\" 281 guestOS = \"otherlinux\"
250 ethernet0.addressType = \"generated\" 282 ethernet0.addressType = \"generated\"
251 floppy0.present = \"FALSE\"" 283 floppy0.present = \"FALSE\""
252 284
253 if [[ "${FLAGS_make_vmx}" = "${FLAGS_TRUE}" ]]; then 285 if [[ "${FLAGS_make_vmx}" = "${FLAGS_TRUE}" ]]; then
254 echo "${VMX_CONFIG}" > "${FLAGS_to}/${FLAGS_vmx}" 286 echo "${VMX_CONFIG}" > "${FLAGS_to}/${FLAGS_vmx}"
255 echo "Wrote the following config to: ${FLAGS_to}/${FLAGS_vmx}" 287 echo "Wrote the following config to: ${FLAGS_to}/${FLAGS_vmx}"
256 echo "${VMX_CONFIG}" 288 echo "${VMX_CONFIG}"
257 fi 289 fi
258 290
OLDNEW
« no previous file with comments | « build_image ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698