#!/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