1 #!/bin/bash 2 3 # Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 7 # Script to remove /boot directory from an image. 8 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. 11 . "$(dirname "$0")/common.sh" 12 13 load_shflags 14 15 DEFINE_string image "chromiumos_image.bin" \ 16 "Input file name of Chrome OS image to strip /boot from." 17 18 # Parse command line. 19 FLAGS "$@" || exit 1 20 eval set -- "${FLAGS_ARGV}" 21 22 # Abort on error. 23 set -e 24 25 if [ -z "${FLAGS_image}" ] || [ ! -s "${FLAGS_image}" ] ; then 26 die "Error: need a valid file by --image" 27 fi 28 29 # Swiped/modifed from $SRC/src/scripts/base_library/base_image_util.sh. 30 zero_free_space() { 31 local rootfs="$1" 32 33 echo "Zeroing freespace in ${rootfs}" 34 # dd is a silly thing and will produce a "No space left on device" message 35 # that cannot be turned off and is confusing to unsuspecting victims. 36 ( sudo dd if=/dev/zero of="${rootfs}/filler" bs=4096 conv=fdatasync \ 37 status=noxfer || true ) 2>&1 | grep -v "No space left on device" 38 sudo rm "${rootfs}/filler" 39 } 40 41 42 strip_boot() { 43 local image=$1 44 45 # Mount image so we can modify it. 46 local rootfs_dir=$(make_temp_dir) 47 mount_image_partition ${image} 3 ${rootfs_dir} 48 49 sudo rm -rf "${rootfs_dir}/boot" && 50 echo "/boot directory was removed." 51 52 # To prevent the files we just removed from the FS from remaining as non- 53 # zero trash blocks that bloat payload sizes, need to zero them. This was 54 # done when the image was built, but needs to be repeated now that we've 55 # modified it in a non-trivial way. 56 zero_free_space "${rootfs_dir}" 57 } 58 59 60 IMAGE=$(readlink -f "${FLAGS_image}") 61 if [[ -z "${IMAGE}" || ! -f "${IMAGE}" ]]; then 62 die "Missing required argument: --from (image to update)" 63 fi 64 65 strip_boot "${IMAGE}" 66