blob: f712b028efa1691b8814fb92b6e36475d20293c5 [file] [log] [blame]
#!/bin/sh
# Copyright 2016 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 sets the activation date to the RW_VPD of a device. Here we wait
# for a proper time sync to have taken place before setting the value
# to ensure that the time is correct.
JOB="activate_date"
FIELD_NAME="ActivateDate"
OOBE_COMPLETED_FILE="/home/chronos/.oobe_completed"
# Never run from a factory image.
if [ -f /root/.factory_test -o -f /root/.factory_installer ]; then
exit 0
fi
# Wait for OOBE to have completed.
while [ ! -f "${OOBE_COMPLETED_FILE}" ]; do
sleep 1
done
# Don't run if we have set the date already, we use vpd_get_value so that
# we can leverage the cached VPD file.
# This is a soft check, the activate_date script will also check the vpd
# directly to see if a date has been set.
ACTIVATE_DATE="$(vpd_get_value "${FIELD_NAME}" || :)"
if [ -n "${ACTIVATE_DATE}" ]; then
exit 0
fi
# Wait for remote sync of clock, then write activation date. Both enrollment
# and login require network connection (and tlsdated has been fixed to sync
# immediately when the network comes up [1]), thus in practice we should never
# have to wait.
# [1] https://code.google.com/p/chrome-os-partner/issues/detail?id=38718
while true; do
if dbus-send --system --dest=org.torproject.tlsdate --print-reply \
/org/torproject/tlsdate org.torproject.tlsdate.LastSyncInfo 2>&1 | \
grep -q 'string "network"'; then
if ! activate_date 2>&1; then
logger -t "${JOB}" "activate_date failed."
exit 0
fi
if ! dump_vpd_log --force 2>&1; then
logger -t "${JOB}" "dump_vpd_log failed."
exit 0
fi
logger -t "${JOB}" "Activation date set."
exit 0
fi
sleep 200
done