summaryrefslogtreecommitdiff
path: root/scripts/image_signing/strip_boot_from_image.sh
blob: 5e650af665c166a2d42afd9083b40d0231d9f885 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/bin/bash

# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Script to remove /boot directory from an image.

# Load common constants.  This should be the first executable line.
# The path to common.sh should be relative to your script's location.
. "$(dirname "$0")/common.sh"

load_shflags

DEFINE_string image "chromiumos_image.bin" \
  "Input file name of Chrome OS image to strip /boot from."

# Parse command line.
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"

# Abort on error.
set -e

if [ -z "${FLAGS_image}" ] || [ ! -s "${FLAGS_image}" ] ; then
  die "Error: need a valid file by --image"
fi

# Swiped/modifed from $SRC/src/scripts/base_library/base_image_util.sh.
zero_free_space() {
  local rootfs="$1"

  info "Zeroing freespace in ${rootfs}"
  # dd is a silly thing and will produce a "No space left on device" message
  # that cannot be turned off and is confusing to unsuspecting victims.
  ( sudo dd if=/dev/zero of="${rootfs}/filler" bs=4096 conv=fdatasync \
      status=noxfer || true ) 2>&1 | grep -v "No space left on device"
  sudo rm "${rootfs}/filler"
}


strip_boot() {
  local image=$1

  # Mount image so we can modify it.
  local rootfs_dir=$(make_temp_dir)
  mount_image_partition ${image} 3 ${rootfs_dir}

  sudo rm -rf "${rootfs_dir}/boot" &&
    info "/boot directory was removed."

  # To prevent the files we just removed from the FS from remaining as non-
  # zero trash blocks that bloat payload sizes, need to zero them. This was
  # done when the image was built, but needs to be repeated now that we've
  # modified it in a non-trivial way.
  zero_free_space "${rootfs_dir}"
}


IMAGE=$(readlink -f "${FLAGS_image}")
if [[ -z "${IMAGE}" || ! -f "${IMAGE}" ]]; then
  die "Missing required argument: --from (image to update)"
fi

strip_boot "${IMAGE}"