| #!/bin/bash |
| # Copyright (c) 2010 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. |
| # |
| # Emit scripts to pack and unpack the partitions from a GPT disk image. |
| |
| # --- BEGIN COMMON.SH BOILERPLATE --- |
| # Load common CrOS utilities. Inside the chroot this file is installed in |
| # /usr/lib/crosutils. Outside the chroot we find it relative to the script's |
| # location. |
| find_common_sh() { |
| local common_paths=(/usr/lib/crosutils $(dirname "$(readlink -f "$0")")) |
| local path |
| |
| SCRIPT_ROOT= |
| for path in "${common_paths[@]}"; do |
| if [ -r "${path}/common.sh" ]; then |
| SCRIPT_ROOT=${path} |
| break |
| fi |
| done |
| } |
| |
| find_common_sh |
| . "${SCRIPT_ROOT}/common.sh" || (echo "Unable to load common.sh" && exit 1) |
| # --- END COMMON.SH BOILERPLATE --- |
| |
| # Need to be inside the chroot to load chromeos-common.sh |
| assert_inside_chroot |
| |
| # Load functions and constants for chromeos-install |
| . "/usr/lib/installer/chromeos-common.sh" || \ |
| die "Unable to load /usr/lib/installer/chromeos-common.sh" |
| |
| set -e |
| |
| # Usage |
| IMAGE=${1:-} |
| DIR=${2:-} |
| if [[ -z "$IMAGE" || -z "$DIR" ]]; then |
| echo "Usage: $0 GPT_DEVICE DIRECTORY" 1>&2 |
| exit 1 |
| fi |
| |
| PACK="${DIR}/pack_partitions.sh" |
| UNPACK="${DIR}/unpack_partitions.sh" |
| |
| locate_gpt |
| |
| TMP=$(mktemp) |
| $GPT show "$IMAGE" > $TMP |
| |
| HEADER='#!/bin/bash -eu |
| # File generated by emit_gpt_scripts.sh. Do not edit. |
| TARGET=${1:-} |
| if [[ -z "$TARGET" ]]; then |
| echo "Usage: $0 DEVICE" 1>&2 |
| exit 1 |
| fi |
| set -x' |
| |
| echo "$HEADER" > "$PACK" |
| echo "$HEADER" > "$UNPACK" |
| cat $TMP | sed -e 's/^/# /' >> "$PACK" |
| cat $TMP | sed -e 's/^/# /' >> "$UNPACK" |
| |
| $GPT show -q "$IMAGE" | \ |
| while read start size part x; do \ |
| file="part_$part" |
| loc="\"\$TARGET\"" |
| echo "dd if=$loc of=$file bs=512 skip=$start count=$size" \ |
| >> "$UNPACK" |
| echo \ |
| "dd if=$file of=$loc bs=512 seek=$start count=$size conv=notrunc" \ |
| >> "$PACK" |
| done |
| |
| chmod +x "$PACK" "$UNPACK" |
| |
| rm $TMP |