| #!/bin/sh |
| # Copyright 2017 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. |
| # |
| # If the hammer is attached during boot and needs update, we block the UI at |
| # splash screen until the hammer is updated. This script is called by `pre-ui` |
| # upstart job. |
| |
| . /usr/share/cros/init/hammerd-base-detector.sh || exit 1 |
| |
| LOGGER_TAG="hammerd-at-boot" |
| |
| monitor_dbus_signal() { |
| # Monitor the hammerd updating DBus signal. |
| # If we catch the "update start" signals, then show the boot message, and |
| # restore the frecon after the update ends. |
| local interface='org.chromium.hammerd' |
| local started_signal='BaseFirmwareUpdateStarted' |
| |
| local line |
| dbus-monitor --system --profile "interface='${interface}'" | \ |
| while read -r line; do |
| if [ -z "${line##*${started_signal}*}" ]; then |
| logger -t "${LOGGER_TAG}" "Hammerd starts updating, display message." |
| chromeos-boot-alert update_detachable_base_firmware |
| fi |
| done |
| } |
| |
| main() { |
| if ! base_connected "${LOGGER_TAG}"; then |
| logger -t "${LOGGER_TAG}" "Base not connected, skipping hammerd at boot." |
| metrics_client -e Platform.DetachableBase.AttachedOnBoot 0 2 |
| return |
| fi |
| |
| logger -t "${LOGGER_TAG}" "Force trigger hammerd at boot." |
| metrics_client -e Platform.DetachableBase.AttachedOnBoot 1 2 |
| |
| # Background process that catches the DBus signal. |
| monitor_dbus_signal & |
| local bg_pid=$! |
| |
| # Trigger hammerd job, which blocks until the job completes. |
| initctl start hammerd AT_BOOT="true" UPDATE_IF="mismatch" |
| |
| # Kill the dbus-monitor in the background process. |
| pkill -9 -P "${bg_pid}" -f dbus-monitor |
| } |
| |
| main "$@" |