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

Side by Side Diff: src/scripts/build_image

Issue 2106009: Always build pristine image as well as dev/test image. (Closed) Base URL: ssh://git@chromiumos-git//chromeos
Patch Set: Fix ws Created 10 years, 7 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 | « no previous file | src/scripts/mount_gpt_image.sh » ('j') | 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 build a bootable keyfob-based chromeos system image from within 7 # Script to build a bootable keyfob-based chromeos system image from within
8 # a chromiumos setup. This assumes that all needed packages have been built into 8 # a chromiumos setup. This assumes that all needed packages have been built into
9 # the given target's root with binary packages turned on. This script will 9 # the given target's root with binary packages turned on. This script will
10 # build the Chrome OS image using only pre-built binary packages. 10 # build the Chrome OS image using only pre-built binary packages.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 60
61 # Determine build version. 61 # Determine build version.
62 . "${SCRIPTS_DIR}/chromeos_version.sh" 62 . "${SCRIPTS_DIR}/chromeos_version.sh"
63 63
64 # Use canonical path since some tools (e.g. mount) do not like symlinks. 64 # Use canonical path since some tools (e.g. mount) do not like symlinks.
65 # Append build attempt to output directory. 65 # Append build attempt to output directory.
66 IMAGE_SUBDIR="${CHROMEOS_VERSION_STRING}-a${FLAGS_build_attempt}" 66 IMAGE_SUBDIR="${CHROMEOS_VERSION_STRING}-a${FLAGS_build_attempt}"
67 OUTPUT_DIR="${FLAGS_output_root}/${FLAGS_board}/${IMAGE_SUBDIR}" 67 OUTPUT_DIR="${FLAGS_output_root}/${FLAGS_board}/${IMAGE_SUBDIR}"
68 ROOT_FS_DIR="${OUTPUT_DIR}/rootfs" 68 ROOT_FS_DIR="${OUTPUT_DIR}/rootfs"
69 ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image" 69 ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image"
70 OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/chromiumos_image.bin} 70
71 # If we are creating a developer image, also create a pristine image with a
72 # different name.
73 DEVELOPER_IMAGE_NAME=
74 PRISTINE_IMAGE_NAME=chromiumos_image.bin
75 if [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ]; then
76 PRISTINE_IMAGE_NAME=chromiumos_base_image.bin
77 DEVELOPER_IMAGE_NAME=chromiumos_image.bin
78 fi
79 OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}}
71 80
72 BOARD="${FLAGS_board}" 81 BOARD="${FLAGS_board}"
73 BOARD_ROOT="${FLAGS_build_root}/${BOARD}" 82 BOARD_ROOT="${FLAGS_build_root}/${BOARD}"
74 83
75 LOOP_DEV= 84 LOOP_DEV=
76 STATEFUL_LOOP_DEV= 85 STATEFUL_LOOP_DEV=
77 ESP_LOOP_DEV= 86 ESP_LOOP_DEV=
78 87
79 # What cross-build are we targeting? 88 # What cross-build are we targeting?
80 . "${BOARD_ROOT}/etc/make.conf.board_setup" 89 . "${BOARD_ROOT}/etc/make.conf.board_setup"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 SURE="${SURE:0:1}" # Get just the first character 165 SURE="${SURE:0:1}" # Get just the first character
157 if [ "${SURE}" == "y" ] ; then 166 if [ "${SURE}" == "y" ] ; then
158 sudo rm -rf "$OUTPUT_DIR" 167 sudo rm -rf "$OUTPUT_DIR"
159 echo "Deleted $OUTPUT_DIR" 168 echo "Deleted $OUTPUT_DIR"
160 else 169 else
161 echo "Not deleting $OUTPUT_DIR. Note dev server updates will not work" \ 170 echo "Not deleting $OUTPUT_DIR. Note dev server updates will not work" \
162 "until you successfully build another image or delete this directory" 171 "until you successfully build another image or delete this directory"
163 fi 172 fi
164 } 173 }
165 174
175 # $1 - Directory where developer rootfs is mounted.
176 # $2 - Directory where developer stateful_partition is mounted.
177 developer_cleanup() {
178 "$SCRIPTS_DIR/mount_gpt_image.sh" -u -r "$1" -s "$2"
179 delete_prompt
180 }
181
182 # Creates a new image based on $OUTPUT_IMG with additional developer packages.
183 create_developer_image() {
184 local root_fs_dir="${OUTPUT_DIR}/rootfs_dev"
185 local root_fs_img="${OUTPUT_DIR}/rootfs_dev.image"
186 local output_img="${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}"
187
188 # Create stateful partition of the same size as the rootfs.
189 local stateful_img="$OUTPUT_DIR/stateful_partition_dev.image"
190 local stateful_dir="$OUTPUT_DIR/stateful_partition_dev"
191
192 trap "developer_cleanup \"$root_fs_dir\" \"$stateful_dir\"" EXIT
193
194 # Mount a new copy of the base image.
195 echo "Creating developer image from base image $OUTPUT_IMG"
196 cp "$OUTPUT_IMG" "$output_img"
197 $SCRIPTS_DIR/mount_gpt_image.sh --from "$OUTPUT_DIR" \
198 --image "$DEVELOPER_IMAGE_NAME" -r "$root_fs_dir" -s "$stateful_dir"
199
200 # Determine the root dir for developer packages.
201 local root_dev_dir="$root_fs_dir"
202 [ $FLAGS_statefuldev -eq $FLAGS_TRUE ] && \
203 root_dev_dir="$root_fs_dir/usr/local"
204
205 # Install developer packages described in chromeos-dev.
206 sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \
207 --root="$root_dev_dir" --root-deps=rdeps \
208 --usepkgonly chromeos-dev $EMERGE_JOBS
209
210 # Re-run ldconfig to fix /etc/ldconfig.so.cache.
211 sudo /sbin/ldconfig -r "$root_fs_dir"
212
213 # Mark the image as a developer image (input to chromeos_startup).
214 sudo mkdir -p "$root_fs_dir/root"
215 sudo touch "$root_fs_dir/root/.dev_mode"
216
217 # Additional changes to developer image.
218
219 # The ldd tool is a useful shell script but lives in glibc; just copy it.
220 sudo cp -a "$(which ldd)" "${root_dev_dir}/usr/bin"
221
222 # If vim is installed, then a vi symlink would probably help.
223 if [[ -x "${ROOT_FS_DIR}/usr/local/bin/vim" ]]; then
224 sudo ln -sf vim "${ROOT_FS_DIR}/usr/local/bin/vi"
225 fi
226
227 # Check that the image has been correctly created.
228 "${SCRIPTS_DIR}/test_image" \
229 --root="$root_fs_dir" \
230 --target="$ARCH"
231
232 trap - EXIT
233 $SCRIPTS_DIR/mount_gpt_image.sh -u -r "$root_fs_dir" -s "$stateful_dir"
234 echo "Developer image built and stored at $output_img"
235 }
236
166 # ${DEV_IMAGE_ROOT} specifies the location of where developer packages will 237 # ${DEV_IMAGE_ROOT} specifies the location of where developer packages will
167 # be installed on the stateful dir. On a Chromium OS system, this will 238 # be installed on the stateful dir. On a Chromium OS system, this will
168 # translate to /usr/local 239 # translate to /usr/local
169 DEV_IMAGE_ROOT= 240 DEV_IMAGE_ROOT=
170 241
171 trap "cleanup && delete_prompt" EXIT 242 trap "cleanup && delete_prompt" EXIT
172 243
173 mkdir -p "$ROOT_FS_DIR" 244 mkdir -p "$ROOT_FS_DIR"
174 245
175 # Create and format the root file system. 246 # Create and format the root file system.
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 sudo mount --bind "${STATEFUL_DIR}/var" "${ROOT_FS_DIR}/var" 366 sudo mount --bind "${STATEFUL_DIR}/var" "${ROOT_FS_DIR}/var"
296 367
297 # We "emerge --root=$ROOT_FS_DIR --root-deps=rdeps --usepkgonly" all of the 368 # We "emerge --root=$ROOT_FS_DIR --root-deps=rdeps --usepkgonly" all of the
298 # runtime packages for chrome os. This builds up a chrome os image from binary 369 # runtime packages for chrome os. This builds up a chrome os image from binary
299 # packages with runtime dependencies only. We use INSTALL_MASK to trim the 370 # packages with runtime dependencies only. We use INSTALL_MASK to trim the
300 # image size as much as possible. 371 # image size as much as possible.
301 sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \ 372 sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \
302 --root="$ROOT_FS_DIR" --root-deps=rdeps \ 373 --root="$ROOT_FS_DIR" --root-deps=rdeps \
303 --usepkgonly chromeos $EMERGE_JOBS 374 --usepkgonly chromeos $EMERGE_JOBS
304 375
305 # Determine the root dir for development packages.
306 ROOT_DEV_DIR="$ROOT_FS_DIR"
307 [ $FLAGS_statefuldev -eq $FLAGS_TRUE ] && ROOT_DEV_DIR="$ROOT_FS_DIR/usr/local"
308
309 # Install development packages.
310 if [[ $FLAGS_withdev -eq $FLAGS_TRUE ]] ; then
311 sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \
312 --root="$ROOT_DEV_DIR" --root-deps=rdeps \
313 --usepkgonly chromeos-dev $EMERGE_JOBS
314
315 # TODO(sosa@chromium.org) - Re-hide under statefuldev after switch
316 # Flag will mount /usr/local on target device
317 sudo mkdir -p "$ROOT_FS_DIR/root"
318
319 # The ldd tool is a useful shell script but lives in glibc; just copy it.
320 sudo cp -a "$(which ldd)" "${ROOT_DEV_DIR}/usr/bin"
321 fi
322
323 # Extract the kernel from the root filesystem for use by the GPT image. Legacy 376 # Extract the kernel from the root filesystem for use by the GPT image. Legacy
324 # BIOS will use the kernel in the rootfs (via syslinux), Chrome OS BIOS will 377 # BIOS will use the kernel in the rootfs (via syslinux), Chrome OS BIOS will
325 # use the kernel partition. 378 # use the kernel partition.
326 sudo cp -f "${ROOT_FS_DIR}/boot/vmlinuz" "${OUTPUT_DIR}/vmlinuz.image" 379 sudo cp -f "${ROOT_FS_DIR}/boot/vmlinuz" "${OUTPUT_DIR}/vmlinuz.image"
327 380
328 # Create EFI System Partition to boot stock EFI BIOS (but not ChromeOS EFI 381 # Create EFI System Partition to boot stock EFI BIOS (but not ChromeOS EFI
329 # BIOS). We only need this for x86, but it's simpler and safer to keep the disk 382 # BIOS). We only need this for x86, but it's simpler and safer to keep the disk
330 # images the same for both x86 and ARM. 383 # images the same for both x86 and ARM.
331 ESP_IMG=${OUTPUT_DIR}/esp.image 384 ESP_IMG=${OUTPUT_DIR}/esp.image
332 # NOTE: The size argument for mkfs.vfat is in 1024-byte blocks. We'll hard-code 385 # NOTE: The size argument for mkfs.vfat is in 1024-byte blocks. We'll hard-code
(...skipping 21 matching lines...) Expand all
354 menuentry "local image A" { 407 menuentry "local image A" {
355 linux $grubpartA/boot/vmlinuz quiet console=tty2 init=/sbin/init boot=local ro otwait root=/dev/$linuxpartA ro noresume noswap i915.modeset=1 loglevel=1 408 linux $grubpartA/boot/vmlinuz quiet console=tty2 init=/sbin/init boot=local ro otwait root=/dev/$linuxpartA ro noresume noswap i915.modeset=1 loglevel=1
356 } 409 }
357 410
358 menuentry "local image B" { 411 menuentry "local image B" {
359 linux $grubpartB/boot/vmlinuz quiet console=tty2 init=/sbin/init boot=local ro otwait root=/dev/$linuxpartB ro noresume noswap i915.modeset=1 loglevel=1 412 linux $grubpartB/boot/vmlinuz quiet console=tty2 init=/sbin/init boot=local ro otwait root=/dev/$linuxpartB ro noresume noswap i915.modeset=1 loglevel=1
360 } 413 }
361 414
362 EOF 415 EOF
363 416
364 # By default, dev mode should be activated for either development builds or
365 # test builds.
366 if [[ $FLAGS_withdev -eq $FLAGS_TRUE ]] ; then
367 sudo touch "$ROOT_FS_DIR/root/.dev_mode"
368
369 # Re-run ldconfig to fix /etc/ldconfig.so.cache.
370 sudo /sbin/ldconfig -r "$ROOT_FS_DIR"
371 fi
372
373 # Perform any customizations on the root file system that are needed. 417 # Perform any customizations on the root file system that are needed.
374 "${SCRIPTS_DIR}/customize_rootfs" \ 418 "${SCRIPTS_DIR}/customize_rootfs" \
375 --root="$ROOT_FS_DIR" \ 419 --root="$ROOT_FS_DIR" \
376 --target="$ARCH" \ 420 --target="$ARCH" \
377 --board="$BOARD" 421 --board="$BOARD"
378 422
379 # Don't test the factory install shim. 423 # Don't test the factory install shim.
380 if [[ $FLAGS_factory_install -eq ${FLAGS_FALSE} ]] ; then 424 if [[ $FLAGS_factory_install -eq ${FLAGS_FALSE} ]] ; then
381 # Check that the image has been correctly created. 425 # Check that the image has been correctly created.
382 "${SCRIPTS_DIR}/test_image" \ 426 "${SCRIPTS_DIR}/test_image" \
(...skipping 18 matching lines...) Expand all
401 --arm_extra_bootargs="${FLAGS_arm_extra_bootargs}" \ 445 --arm_extra_bootargs="${FLAGS_arm_extra_bootargs}" \
402 "${OUTPUT_DIR}" \ 446 "${OUTPUT_DIR}" \
403 "${OUTPUT_IMG}" 447 "${OUTPUT_IMG}"
404 448
405 # Clean up temporary files. 449 # Clean up temporary files.
406 rm -f "${ROOT_FS_IMG}" "${STATEFUL_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \ 450 rm -f "${ROOT_FS_IMG}" "${STATEFUL_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \
407 "${ESP_IMG}" 451 "${ESP_IMG}"
408 rmdir "${ROOT_FS_DIR}" "${STATEFUL_DIR}" "${ESP_DIR}" 452 rmdir "${ROOT_FS_DIR}" "${STATEFUL_DIR}" "${ESP_DIR}"
409 453
410 OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}" 454 OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}"
455
456 # Create a developer image based on the chromium os base image
457 [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ] && create_developer_image
458 trap - EXIT
459
411 echo "Done. Image created in ${OUTPUT_DIR}" 460 echo "Done. Image created in ${OUTPUT_DIR}"
461 echo "Chromium OS image created as $PRISTINE_IMAGE_NAME"
462 if [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ]; then
463 echo "Developer image created as $DEVELOPER_IMAGE_NAME"
464 fi
412 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" 465 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:"
413 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX" 466 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX"
414 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:" 467 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:"
415 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" 468 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}"
416 echo "from the scripts directory where you entered the chroot." 469 echo "from the scripts directory where you entered the chroot."
417
418 trap - EXIT
OLDNEW
« no previous file with comments | « no previous file | src/scripts/mount_gpt_image.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698