| #!/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. |
| |
| # 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" |
| . "$(dirname "$0")/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 |