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

Side by Side Diff: src/scripts/image_to_vmware.sh

Issue 1512001: test-fixet: Automated VMWare test of AutoUpdate (Closed)
Patch Set: fixes for review Created 10 years, 8 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 | « src/platform/memento_softwareupdate/autoupdated_vm_test.py ('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) 2009 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2009 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 11 matching lines...) Expand all
22 # Memory units are in MBs 22 # Memory units are in MBs
23 DEFAULT_MEM="1024" 23 DEFAULT_MEM="1024"
24 VBOX_TEMP_IMAGE="${IMAGES_DIR}/vbox_temp.img" 24 VBOX_TEMP_IMAGE="${IMAGES_DIR}/vbox_temp.img"
25 25
26 26
27 # Flags 27 # Flags
28 DEFINE_string from "$DEFAULT_FROM" \ 28 DEFINE_string from "$DEFAULT_FROM" \
29 "Directory containing rootfs.image and mbr.image" 29 "Directory containing rootfs.image and mbr.image"
30 DEFINE_string to "$DEFAULT_TO" \ 30 DEFINE_string to "$DEFAULT_TO" \
31 "Destination folder for VM output file(s)" 31 "Destination folder for VM output file(s)"
32 DEFINE_string state_image "" \
33 "Stateful partition image (defaults to creating new statful partition)"
32 DEFINE_string format "vmware" \ 34 DEFINE_string format "vmware" \
33 "Output format, either vmware or virtualbox" 35 "Output format, either vmware or virtualbox"
34 36
35 DEFINE_boolean make_vmx ${FLAGS_TRUE} \ 37 DEFINE_boolean make_vmx ${FLAGS_TRUE} \
36 "Create a vmx file for use with vmplayer (vmware only)." 38 "Create a vmx file for use with vmplayer (vmware only)."
37 DEFINE_string vmdk "$DEFAULT_VMDK" \ 39 DEFINE_string vmdk "$DEFAULT_VMDK" \
38 "Filename for the vmware disk image (vmware only)." 40 "Filename for the vmware disk image (vmware only)."
39 DEFINE_string vmx "$DEFAULT_VMX" \ 41 DEFINE_string vmx "$DEFAULT_VMX" \
40 "Filename for the vmware config (vmware only)." 42 "Filename for the vmware config (vmware only)."
41 DEFINE_integer mem "$DEFAULT_MEM" \ 43 DEFINE_integer mem "$DEFAULT_MEM" \
(...skipping 11 matching lines...) Expand all
53 55
54 if [ "$FLAGS_format" != "vmware" ]; then 56 if [ "$FLAGS_format" != "vmware" ]; then
55 FLAGS_make_vmx=${FLAGS_FALSE} 57 FLAGS_make_vmx=${FLAGS_FALSE}
56 fi 58 fi
57 59
58 # Convert args to paths. Need eval to un-quote the string so that shell 60 # Convert args to paths. Need eval to un-quote the string so that shell
59 # chars like ~ are processed; just doing FOO=`readlink -f $FOO` won't work. 61 # chars like ~ are processed; just doing FOO=`readlink -f $FOO` won't work.
60 FLAGS_from=`eval readlink -f $FLAGS_from` 62 FLAGS_from=`eval readlink -f $FLAGS_from`
61 FLAGS_to=`eval readlink -f $FLAGS_to` 63 FLAGS_to=`eval readlink -f $FLAGS_to`
62 64
63 # Make sure we have the gpt tool 65 # Split apart the partitions and make some new ones
64 if [ -z "$GPT" ]; then 66 TEMP_DIR=$(mktemp -d)
65 echo Unable to find gpt 67 (cd "$TEMP_DIR" &&
66 exit 1 68 "${FLAGS_from}/unpack_partitions.sh" "${FLAGS_from}/chromiumos_image.bin")
69
70 # Fix the kernel command line
71 TEMP_ROOTFS="$TEMP_DIR"/part_3
72 TEMP_STATE="$TEMP_DIR"/part_1
73 if [ -n "${FLAGS_state_image}" ]; then
74 TEMP_STATE="${FLAGS_state_image}"
67 fi 75 fi
76 TEMP_KERN="$TEMP_DIR"/part_2
77 TEMP_PMBR="$TEMP_DIR"/pmbr
78 dd if="${FLAGS_from}/chromiumos_image.bin" of="$TEMP_PMBR" bs=512 count=1
68 79
69 # Fix bootloader config.
70 TEMP_IMG=$(mktemp)
71 TEMP_MNT=$(mktemp -d) 80 TEMP_MNT=$(mktemp -d)
72
73 LOOP_DEV=$(sudo losetup -f)
74 if [ -z "$LOOP_DEV" ]; then
75 echo "No free loop device"
76 exit 1
77 fi
78
79 # Get rootfs offset
80 OFFSET=$(( $(partoffset "${FLAGS_from}/chromiumos_image.bin" 3) * 512 )) # bytes
81
82 echo Copying to temp file
83 cp "${FLAGS_from}/chromiumos_image.bin" "$TEMP_IMG"
84
85 cleanup() { 81 cleanup() {
86 sudo umount "$TEMP_MNT" || true 82 sudo umount -d "$TEMP_MNT"
87 sudo losetup -d "$LOOP_DEV" 83 rmdir "$TEMP_MNT"
88 } 84 }
89 trap cleanup INT TERM EXIT 85 trap cleanup INT TERM EXIT
90 sudo losetup -o $OFFSET "$LOOP_DEV" "$TEMP_IMG"
91 mkdir -p "$TEMP_MNT" 86 mkdir -p "$TEMP_MNT"
92 sudo mount "$LOOP_DEV" "$TEMP_MNT" 87 sudo mount -o loop "$TEMP_ROOTFS" "$TEMP_MNT"
93 sudo "$TEMP_MNT"/postinst /dev/sda3 88 sudo "$TEMP_MNT"/postinst /dev/sda3
94 trap - INT TERM EXIT 89 trap - INT TERM EXIT
95 cleanup 90 cleanup
96 rmdir "$TEMP_MNT" 91
92 # Make 3 GiB output image
93 TEMP_IMG=$(mktemp)
94 # TOOD(adlr): pick a size that will for sure accomodate the partitions
95 sudo dd if=/dev/zero of="${TEMP_IMG}" bs=1 count=1 \
96 seek=$((3 * 1024 * 1024 * 1024 - 1))
97
98 # Set up the partition table
99 install_gpt "$TEMP_IMG" "$TEMP_ROOTFS" "$TEMP_KERN" "$TEMP_STATE" \
100 "$TEMP_PMBR" true
101 # Copy into the partition parts of the file
102 dd if="$TEMP_ROOTFS" of="$TEMP_IMG" conv=notrunc bs=512 seek="$START_ROOTFS_A"
103 dd if="$TEMP_STATE" of="$TEMP_IMG" conv=notrunc bs=512 seek="$START_STATEFUL"
104 dd if="$TEMP_KERN" of="$TEMP_IMG" conv=notrunc bs=512 seek="$START_KERN_A"
97 105
98 echo Creating final image 106 echo Creating final image
99 # Convert image to output format 107 # Convert image to output format
100 if [ "$FLAGS_format" = "virtualbox" ]; then 108 if [ "$FLAGS_format" = "virtualbox" ]; then
101 qemu-img convert -f raw $TEMP_IMG \ 109 qemu-img convert -f raw $TEMP_IMG \
102 -O raw "${VBOX_TEMP_IMAGE}" 110 -O raw "${VBOX_TEMP_IMAGE}"
103 VBoxManage convertdd "${VBOX_TEMP_IMAGE}" "${FLAGS_to}/${FLAGS_vbox_disk}" 111 VBoxManage convertdd "${VBOX_TEMP_IMAGE}" "${FLAGS_to}/${FLAGS_vbox_disk}"
104 elif [ "$FLAGS_format" = "vmware" ]; then 112 elif [ "$FLAGS_format" = "vmware" ]; then
105 qemu-img convert -f raw $TEMP_IMG \ 113 qemu-img convert -f raw $TEMP_IMG \
106 -O vmdk "${FLAGS_to}/${FLAGS_vmdk}" 114 -O vmdk "${FLAGS_to}/${FLAGS_vmdk}"
107 else 115 else
108 echo invalid format: "$FLAGS_format" 116 echo invalid format: "$FLAGS_format"
109 exit 1 117 exit 1
110 fi 118 fi
111 119
112 rm -f "$TEMP_IMG" "${VBOX_TEMP_IMAGE}" 120 rm -rf "$TEMP_DIR" "${VBOX_TEMP_IMAGE}" "$TEMP_IMG"
121 if [ -z "$FLAGS_state_image" ]; then
122 rm -f "$STATE_IMAGE"
123 fi
113 124
114 echo "Created image ${FLAGS_to}" 125 echo "Created image ${FLAGS_to}"
115 126
116 # Generate the vmware config file 127 # Generate the vmware config file
117 # A good reference doc: http://www.sanbarrow.com/vmx.html 128 # A good reference doc: http://www.sanbarrow.com/vmx.html
118 VMX_CONFIG="#!/usr/bin/vmware 129 VMX_CONFIG="#!/usr/bin/vmware
119 .encoding = \"UTF-8\" 130 .encoding = \"UTF-8\"
120 config.version = \"8\" 131 config.version = \"8\"
121 virtualHW.version = \"4\" 132 virtualHW.version = \"4\"
122 memsize = \"${FLAGS_mem}\" 133 memsize = \"${FLAGS_mem}\"
123 ide0:0.present = \"TRUE\" 134 ide0:0.present = \"TRUE\"
124 ide0:0.fileName = \"${FLAGS_vmdk}\" 135 ide0:0.fileName = \"${FLAGS_vmdk}\"
125 ethernet0.present = \"TRUE\" 136 ethernet0.present = \"TRUE\"
126 usb.present = \"TRUE\" 137 usb.present = \"TRUE\"
127 sound.present = \"TRUE\" 138 sound.present = \"TRUE\"
128 sound.virtualDev = \"es1371\" 139 sound.virtualDev = \"es1371\"
129 displayName = \"Chromium OS\" 140 displayName = \"Chromium OS\"
130 guestOS = \"otherlinux\" 141 guestOS = \"otherlinux\"
131 ethernet0.addressType = \"generated\" 142 ethernet0.addressType = \"generated\"
132 floppy0.present = \"FALSE\"" 143 floppy0.present = \"FALSE\""
133 144
134 if [[ ${FLAGS_make_vmx} = ${FLAGS_TRUE} ]]; then 145 if [[ ${FLAGS_make_vmx} = ${FLAGS_TRUE} ]]; then
135 echo "${VMX_CONFIG}" > "${FLAGS_to}/${FLAGS_vmx}" 146 echo "${VMX_CONFIG}" > "${FLAGS_to}/${FLAGS_vmx}"
136 echo "Wrote the following config to: ${FLAGS_to}/${FLAGS_vmx}" 147 echo "Wrote the following config to: ${FLAGS_to}/${FLAGS_vmx}"
137 echo "${VMX_CONFIG}" 148 echo "${VMX_CONFIG}"
138 fi 149 fi
139 150
OLDNEW
« no previous file with comments | « src/platform/memento_softwareupdate/autoupdated_vm_test.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698