| #!/bin/bash |
| # Copyright 2018 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. |
| # |
| # Based on http://go/termina-care-and-feeding |
| # |
| # Pushes the lastest local build of tatl to your test device. |
| # Usage: ./deploy_termina.sh device_ip |
| |
| IMAGE="/mnt/host/source/src/build/images/tatl/latest/chromiumos_test_image.bin" |
| STATEFUL_PARTITION="/mnt/stateful_partition/" |
| RUN_PATH="/run/imageloader/cros-termina/99999.0.0" |
| TEST_SSH_KEY="/mnt/host/source/chromite/ssh_keys/testing_rsa" |
| |
| die() { |
| echo "$0: error: $*" >&2 |
| exit 1 |
| } |
| |
| usage() { |
| echo "Usage: $0 -d=device_ip_addr [-v]" >&2 |
| exit 1 |
| } |
| |
| main() { |
| local device_ip_addr="" |
| local install_script="" |
| local out_dir="" |
| local verbose="false" |
| while getopts vd: name; do |
| case "${name}" in |
| d) device_ip_addr="${OPTARG}" ;; |
| v) verbose="true" ;; |
| ?) usage ;; |
| esac |
| done |
| if [[ -z "${device_ip_addr}" ]]; then |
| die "Missing -d flag" |
| fi |
| |
| if [[ ${verbose} == "true" ]]; then |
| echo "Pushing termina to '${device_ip_addr}'" >&2 |
| fi |
| |
| if [[ ${verbose} == "true" ]]; then |
| echo "Repacking the termina image..." >&2 |
| fi |
| |
| out_dir="$(mktemp -d)/tatl" |
| ./termina_build_image --image "${IMAGE}" -t --output "${out_dir}" |
| |
| if [[ ${verbose} == "true" ]]; then |
| echo "Copying image to device:" >&2 |
| fi |
| rsync -a "${out_dir}" -e "ssh -i ${TEST_SSH_KEY}" \ |
| "root@${device_ip_addr}:${STATEFUL_PARTITION}" \ |
| || die "Failed to copy to device." |
| rm -rf "${out_dir}" |
| |
| if [[ ${verbose} == "true" ]]; then |
| echo "Install image onto to device:" >&2 |
| fi |
| read -r -d '' install_script <<EOF |
| dbus-send --system --type=method_call --print-reply \ |
| --dest=org.chromium.ComponentUpdaterService \ |
| /org/chromium/ComponentUpdaterService \ |
| org.chromium.ComponentUpdaterService.LoadComponent 'string:cros-termina' && |
| mkdir -p "${RUN_PATH}" && |
| mount --bind "${STATEFUL_PARTITION}/tatl" "${RUN_PATH}" && |
| restart vm_concierge |
| EOF |
| ssh -i "${TEST_SSH_KEY}" "root@${device_ip_addr}" "${install_script}" \ |
| || die "Failed to deploy to device." |
| } |
| |
| main "$@" |