| OLD | NEW |
| 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 usb image. | 7 # Script to convert the output of build_image.sh to a usb image. |
| 8 | 8 |
| 9 # Load common constants. This should be the first executable line. | 9 # Load common constants. This should be the first executable line. |
| 10 # The path to common.sh should be relative to your script's location. | 10 # The path to common.sh should be relative to your script's location. |
| 11 . "$(dirname "$0")/common.sh" | 11 . "$(dirname "$0")/common.sh" |
| 12 | 12 |
| 13 # Load functions and constants for chromeos-install | 13 # Load functions and constants for chromeos-install |
| 14 . "$(dirname "$0")/chromeos-common.sh" | 14 . "$(dirname "$0")/chromeos-common.sh" |
| 15 | 15 |
| 16 get_default_board | 16 get_default_board |
| 17 | 17 |
| 18 # Flags | 18 # Flags |
| 19 DEFINE_string board "${DEFAULT_BOARD}" "Board for which the image was built" | 19 DEFINE_string board "${DEFAULT_BOARD}" "Board for which the image was built" |
| 20 DEFINE_string from "" \ | 20 DEFINE_string from "" \ |
| 21 "Directory containing chromiumos_image.bin" | 21 "Directory containing chromiumos_image.bin" |
| 22 DEFINE_string to "" "${DEFAULT_TO_HELP}" | 22 DEFINE_string to "" "${DEFAULT_TO_HELP}" |
| 23 DEFINE_boolean yes ${FLAGS_FALSE} "Answer yes to all prompts" "y" | 23 DEFINE_boolean yes ${FLAGS_FALSE} "Answer yes to all prompts" "y" |
| 24 DEFINE_boolean force_copy ${FLAGS_FALSE} "Always rebuild test image" |
| 25 DEFINE_boolean factory ${FLAGS_FALSE} \ |
| 26 "Whether to generate a factory runin image. Implies aututest and test" |
| 24 DEFINE_boolean install_autotest ${FLAGS_FALSE} \ | 27 DEFINE_boolean install_autotest ${FLAGS_FALSE} \ |
| 25 "Whether to install autotest to the stateful partition." | 28 "Whether to install autotest to the stateful partition." |
| 26 DEFINE_boolean copy_kernel ${FLAGS_FALSE} \ | 29 DEFINE_boolean copy_kernel ${FLAGS_FALSE} \ |
| 27 "Copy the kernel to the fourth partition." | 30 "Copy the kernel to the fourth partition." |
| 28 DEFINE_boolean test_image "${FLAGS_FALSE}" \ | 31 DEFINE_boolean test_image "${FLAGS_FALSE}" \ |
| 29 "Copies normal image to chromiumos_test_image.bin, modifies it for test." | 32 "Copies normal image to chromiumos_test_image.bin, modifies it for test." |
| 30 DEFINE_string build_root "/build" \ | 33 DEFINE_string build_root "/build" \ |
| 31 "The root location for board sysroots." | 34 "The root location for board sysroots." |
| 32 | 35 |
| 33 # Parse command line | 36 # Parse command line |
| 34 FLAGS "$@" || exit 1 | 37 FLAGS "$@" || exit 1 |
| 35 eval set -- "${FLAGS_ARGV}" | 38 eval set -- "${FLAGS_ARGV}" |
| 36 | 39 |
| 40 # Require autotest for manucaturing image. |
| 41 if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ] ; then |
| 42 echo "Factory image requires --install_autotest and --test_image, setting." |
| 43 FLAGS_install_autotest=${FLAGS_TRUE} |
| 44 FLAGS_test_image=${FLAGS_TRUE} |
| 45 fi |
| 46 |
| 37 # Inside the chroot, so output to usb.img in the same dir as the other | 47 # Inside the chroot, so output to usb.img in the same dir as the other |
| 38 # Script can be run either inside or outside the chroot. | 48 # Script can be run either inside or outside the chroot. |
| 39 if [ ${INSIDE_CHROOT} -eq 1 ] | 49 if [ ${INSIDE_CHROOT} -eq 1 ] |
| 40 then | 50 then |
| 41 SYSROOT="${FLAGS_build_root}/${FLAGS_board}" | 51 SYSROOT="${FLAGS_build_root}/${FLAGS_board}" |
| 42 else | 52 else |
| 43 SYSROOT="${DEFAULT_CHROOT_DIR}${FLAGS_build_root}/${FLAGS_board}" | 53 SYSROOT="${DEFAULT_CHROOT_DIR}${FLAGS_build_root}/${FLAGS_board}" |
| 44 fi | 54 fi |
| 45 AUTOTEST_SRC="${SYSROOT}/usr/local/autotest" | 55 AUTOTEST_SRC="${SYSROOT}/usr/local/autotest" |
| 46 | 56 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 77 # Outside the chroot, so output to the default device for a usb key. | 87 # Outside the chroot, so output to the default device for a usb key. |
| 78 FLAGS_to="/dev/sdb" | 88 FLAGS_to="/dev/sdb" |
| 79 fi | 89 fi |
| 80 fi | 90 fi |
| 81 | 91 |
| 82 # Convert args to paths. Need eval to un-quote the string so that shell | 92 # Convert args to paths. Need eval to un-quote the string so that shell |
| 83 # chars like ~ are processed; just doing FOO=`readlink -f ${FOO}` won't work. | 93 # chars like ~ are processed; just doing FOO=`readlink -f ${FOO}` won't work. |
| 84 FLAGS_from=`eval readlink -f ${FLAGS_from}` | 94 FLAGS_from=`eval readlink -f ${FLAGS_from}` |
| 85 FLAGS_to=`eval readlink -f ${FLAGS_to}` | 95 FLAGS_to=`eval readlink -f ${FLAGS_to}` |
| 86 | 96 |
| 97 # Done evaluating arguments, lets go! |
| 98 echo "Caching sudo authentication" |
| 99 sudo -v |
| 100 echo "Done" |
| 101 |
| 87 # Use this image as the source image to copy | 102 # Use this image as the source image to copy |
| 88 SRC_IMAGE="${FLAGS_from}/chromiumos_image.bin" | 103 SRC_IMAGE="${FLAGS_from}/chromiumos_image.bin" |
| 89 | 104 |
| 90 # If we're asked to modify the image for test, then let's make a copy and | 105 # If we're asked to modify the image for test, then let's make a copy and |
| 91 # modify that instead. | 106 # modify that instead. |
| 92 if [ ${FLAGS_test_image} -eq ${FLAGS_TRUE} ] ; then | 107 if [ ${FLAGS_test_image} -eq ${FLAGS_TRUE} ] ; then |
| 93 if [ ! -f "${FLAGS_from}/chromiumos_test_image.bin" ] ; then | 108 if [ ! -f "${FLAGS_from}/chromiumos_test_image.bin" ] || \ |
| 109 [ ${FLAGS_force_copy} -eq ${FLAGS_TRUE} ] ; then |
| 94 # Copy it. | 110 # Copy it. |
| 95 echo "Creating test image from original..." | 111 echo "Creating test image from original..." |
| 96 cp -f "${SRC_IMAGE}" "${FLAGS_from}/chromiumos_test_image.bin" | 112 cp -f "${SRC_IMAGE}" "${FLAGS_from}/chromiumos_test_image.bin" |
| 113 |
| 114 # Check for manufacturing image. |
| 115 if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ] ; then |
| 116 FACTORY_ARGS="--factory" |
| 117 fi |
| 118 # Check for yes |
| 119 if [ ${FLAGS_yes} -eq ${FLAGS_TRUE} ] ; then |
| 120 YES="--yes" |
| 121 fi |
| 122 |
| 123 |
| 97 # Modify it. | 124 # Modify it. |
| 98 "${SCRIPTS_DIR}/mod_image_for_test.sh" --image \ | 125 "${SCRIPTS_DIR}/mod_image_for_test.sh" --image \ |
| 99 "${FLAGS_from}/chromiumos_test_image.bin" --yes | 126 "${FLAGS_from}/chromiumos_test_image.bin" ${FACTORY_ARGS} ${YES} |
| 127 echo "Done with mod_image_for_test." |
| 128 else |
| 129 echo "Using cached test image." |
| 100 fi | 130 fi |
| 101 # Use it. | |
| 102 SRC_IMAGE="${FLAGS_from}/chromiumos_test_image.bin" | 131 SRC_IMAGE="${FLAGS_from}/chromiumos_test_image.bin" |
| 132 echo "Source test image is: ${SRC_IMAGE}" |
| 103 fi | 133 fi |
| 104 | 134 |
| 105 STATEFUL_DIR="${FLAGS_from}/stateful_partition" | 135 STATEFUL_DIR="${FLAGS_from}/stateful_partition" |
| 106 mkdir -p "${STATEFUL_DIR}" | 136 mkdir -p "${STATEFUL_DIR}" |
| 107 | 137 |
| 108 function do_cleanup { | 138 function do_cleanup { |
| 109 echo "Cleaning loopback devices: ${STATEFUL_LOOP_DEV}" | 139 echo "Cleaning loopback devices: ${STATEFUL_LOOP_DEV}" |
| 110 if [ "${STATEFUL_LOOP_DEV}" != "" ]; then | 140 if [ "${STATEFUL_LOOP_DEV}" != "" ]; then |
| 111 sudo umount "${STATEFUL_DIR}" | 141 sudo umount "${STATEFUL_DIR}" |
| 112 sudo losetup -d "${STATEFUL_LOOP_DEV}" | 142 sudo losetup -d "${STATEFUL_LOOP_DEV}" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 133 trap do_cleanup INT TERM EXIT | 163 trap do_cleanup INT TERM EXIT |
| 134 | 164 |
| 135 echo "Mounting ${STATEFUL_DIR} loopback" | 165 echo "Mounting ${STATEFUL_DIR} loopback" |
| 136 sudo losetup -o $(( $offset * 512 )) "${stateful_loop_dev}" "${SRC_IMAGE}" | 166 sudo losetup -o $(( $offset * 512 )) "${stateful_loop_dev}" "${SRC_IMAGE}" |
| 137 sudo mount "${stateful_loop_dev}" "${STATEFUL_DIR}" | 167 sudo mount "${stateful_loop_dev}" "${STATEFUL_DIR}" |
| 138 stateful_root="${STATEFUL_DIR}/dev_image" | 168 stateful_root="${STATEFUL_DIR}/dev_image" |
| 139 | 169 |
| 140 echo "Install autotest into stateful partition..." | 170 echo "Install autotest into stateful partition..." |
| 141 autotest_client="/home/autotest-client" | 171 autotest_client="/home/autotest-client" |
| 142 sudo mkdir -p "${stateful_root}${autotest_client}" | 172 sudo mkdir -p "${stateful_root}${autotest_client}" |
| 173 sudo ln -sf /mnt/stateful_partition/dev_image${autotest_client} \ |
| 174 ${stateful_root}/autotest |
| 143 | 175 |
| 144 sudo cp -fpru ${AUTOTEST_SRC}/client/* \ | 176 sudo cp -fpru ${AUTOTEST_SRC}/client/* \ |
| 145 "${stateful_root}/${autotest_client}" | 177 "${stateful_root}/${autotest_client}" |
| 146 sudo chmod 755 "${stateful_root}/${autotest_client}" | 178 sudo chmod 755 "${stateful_root}/${autotest_client}" |
| 147 sudo chown -R 1000:1000 "${stateful_root}/${autotest_client}" | 179 sudo chown -R 1000:1000 "${stateful_root}/${autotest_client}" |
| 148 | 180 |
| 149 sudo umount ${STATEFUL_DIR} | 181 sudo umount ${STATEFUL_DIR} |
| 150 sudo losetup -d "${stateful_loop_dev}" | 182 sudo losetup -d "${stateful_loop_dev}" |
| 151 trap - INT TERM EXIT | 183 trap - INT TERM EXIT |
| 152 rmdir "${STATEFUL_DIR}" | 184 rmdir "${STATEFUL_DIR}" |
| 153 else | 185 else |
| 154 echo "/usr/local/autotest under ${DEFAULT_CHROOT_DIR} is not installed." | 186 echo "/usr/local/autotest under ${DEFAULT_CHROOT_DIR} is not installed." |
| 155 echo "Please call make_autotest.sh inside chroot first." | 187 echo "Please call build_autotest.sh inside chroot first." |
| 156 exit -1 | 188 exit -1 |
| 157 fi | 189 fi |
| 158 fi | 190 fi |
| 159 | 191 |
| 160 | 192 |
| 161 # Let's do it. | 193 # Let's do it. |
| 162 if [ -b "${FLAGS_to}" ] | 194 if [ -b "${FLAGS_to}" ] |
| 163 then | 195 then |
| 164 # Output to a block device (i.e., a real USB key), so need sudo dd | 196 # Output to a block device (i.e., a real USB key), so need sudo dd |
| 165 echo "Copying USB image ${SRC_IMAGE} to device ${FLAGS_to}..." | 197 echo "Copying USB image ${SRC_IMAGE} to device ${FLAGS_to}..." |
| 166 | 198 |
| 167 # Warn if it looks like they supplied a partition as the destination. | 199 # Warn if it looks like they supplied a partition as the destination. |
| 168 if echo "${FLAGS_to}" | grep -q '[0-9]$'; then | 200 if echo "${FLAGS_to}" | grep -q '[0-9]$'; then |
| 169 local drive=$(echo "${FLAGS_to}" | sed -re 's/[0-9]+$//') | 201 drive=$(echo "${FLAGS_to}" | sed -re 's/[0-9]+$//') |
| 170 if [ -b "${drive}" ]; then | 202 if [ -b "${drive}" ]; then |
| 171 echo | 203 echo |
| 172 echo "NOTE: It looks like you may have supplied a partition as the " | 204 echo "NOTE: It looks like you may have supplied a partition as the " |
| 173 echo "destination. This script needs to write to the drive's device " | 205 echo "destination. This script needs to write to the drive's device " |
| 174 echo "node instead (i.e. ${drive} rather than ${FLAGS_to})." | 206 echo "node instead (i.e. ${drive} rather than ${FLAGS_to})." |
| 175 echo | 207 echo |
| 176 fi | 208 fi |
| 177 fi | 209 fi |
| 178 | 210 |
| 179 # Make sure this is really what the user wants, before nuking the device | 211 # Make sure this is really what the user wants, before nuking the device |
| (...skipping 30 matching lines...) Expand all Loading... |
| 210 echo " sudo dd if=${FLAGS_to} of=/dev/sdb bs=4M" | 242 echo " sudo dd if=${FLAGS_to} of=/dev/sdb bs=4M" |
| 211 echo "where /dev/sdb is the entire keyfob." | 243 echo "where /dev/sdb is the entire keyfob." |
| 212 if [ ${INSIDE_CHROOT} -eq 1 ] | 244 if [ ${INSIDE_CHROOT} -eq 1 ] |
| 213 then | 245 then |
| 214 example=$(basename "${FLAGS_to}") | 246 example=$(basename "${FLAGS_to}") |
| 215 echo "NOTE: Since you are currently inside the chroot, and you'll need to" | 247 echo "NOTE: Since you are currently inside the chroot, and you'll need to" |
| 216 echo "run dd outside the chroot, the path to the USB image will be" | 248 echo "run dd outside the chroot, the path to the USB image will be" |
| 217 echo "different (ex: ~/chromeos/trunk/src/build/images/SOME_DIR/$example)." | 249 echo "different (ex: ~/chromeos/trunk/src/build/images/SOME_DIR/$example)." |
| 218 fi | 250 fi |
| 219 fi | 251 fi |
| OLD | NEW |