| #!/bin/sh |
| # Copyright 2015 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. |
| |
| # This script invokes clobber-state for factory wiping, and then invokes |
| # battery_cutoff.sh |
| # |
| |
| # ====================================================================== |
| # Constants |
| |
| STATE_PATH="/mnt/stateful_partition" |
| |
| BATTERY_CUTOFF="/usr/local/factory/sh/battery_cutoff.sh" |
| DISPLAY_MESSAGE="/usr/local/factory/sh/display_wipe_message.sh" |
| ENABLE_RELEASE_PARTITION="/usr/local/factory/bin/enable_release_partition" |
| |
| LOG_FILE="/tmp/wipe_init.log" |
| |
| # ===================================================================== |
| # Set up logging |
| |
| stop_and_save_logging() { |
| # Stop appending to the log and preserve it. |
| exec >/dev/null 2>&1 |
| |
| # If stateful partition is already unmounted, mount it before save log |
| # to stateful partition. |
| if ! mount | awk '{print $3}' | grep -q "^${STATE_PATH}$"; then |
| mount -t ext4 "${STATE_DEV}" "${STATE_PATH}" |
| fi |
| mv -f "${LOG_FILE}" "${STATE_PATH}"/unencrypted/"$(basename "${LOG_FILE}")" |
| sync && sleep 3 |
| } |
| |
| die() { |
| echo "ERROR: $*" |
| stop_and_save_logging |
| |
| ${DISPLAY_MESSAGE} wipe_failed |
| |
| exit 1 |
| } |
| |
| # Dumps each command to "${LOG_FILE}". |
| set -xe |
| exec >"${LOG_FILE}" 2>&1 |
| |
| # This script never exits under normal conditions. Traps all unexpected errors. |
| trap die EXIT |
| |
| # ====================================================================== |
| # Global variables |
| |
| FACTORY_ROOT_DEV="$1" |
| STATE_DEV=${FACTORY_ROOT_DEV%[0-9]*}1 |
| |
| ROOT_DISK="$2" |
| WIPE_ARGS="$3" |
| CUTOFF_ARGS="$4" |
| |
| # ====================================================================== |
| # Helper functions |
| |
| start_wipe() { |
| local release_root_dev="" |
| release_root_dev=$(echo "${FACTORY_ROOT_DEV}" | tr '35' '53') |
| |
| ROOT_DEV="${release_root_dev}" ROOT_DISK="${ROOT_DISK}" \ |
| FACTORY_RETURN_AFTER_WIPING="YES" clobber-state "${WIPE_ARGS}" |
| mv -f "/tmp/clobber-state.log" "${STATE_PATH}/unencrypted/clobber-state.log" |
| |
| "${ENABLE_RELEASE_PARTITION}" "${release_root_dev}" |
| |
| # TODO(shunhsingou): need to inform shopfloor here. |
| |
| trap - EXIT |
| "${BATTERY_CUTOFF}" ${CUTOFF_ARGS} |
| |
| # Should not reach here. |
| sleep 1d |
| } |
| |
| # ====================================================================== |
| # Main function |
| |
| main() { |
| "${DISPLAY_MESSAGE}" wipe |
| start_wipe |
| } |
| |
| main "$@" |