blob: 84d1b3141796b022078ec7e39ccf3970408d2372 [file] [log] [blame]
# Copyright 2019 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.
description "Run rtanlaytics after the system services start"
author "chromium-os-dev@chromium.org"
# Stop rtanalytics if system-services are stopped or halt/reboot are started
stop on stopping ui
# Environment variable for the mount point of the rtanalytics library .so
# component to be loaded by the executable.
# TODO(chromium:835974): should be capitalized as MOUNT_POINT. Note: This
# requires a change in the chrome.mediaPerceptionPrivate implementation.
import mount_point
# Start rtanalytics with the default loglevel (INFO and above).
# Note: the mount point MUST be the first argument to rtanalytics_main.
#
# Below are used minijail0 arguments and their meaning:
# -e: process doesn't need network access
# -N: process doesn't need to modify control groups settings
# -p -r: process doesn't need to access other processes in the system
# -v: process doesn't need access to user mounts
# -l: process doesn't use SysV shared memory or IPC
# -u -g: run under user and group
# -n: process doesn't need new privileges
# -S: use seccomp policy restrictions
script
if [ -z "${mount_point}" ]; then
logger -t "${UPSTART_JOB}" \
"Mount point not set!"
else
# This is the code path used in production.
logger -t "${UPSTART_JOB}" "Mount point: ${mount_point}"
# Resolves the real path. This protects us from path escapes like ../
mount_point="$(realpath "${mount_point}")"
# Only run rtanalytics_main if the mount_point path matches our expectation.
case "${mount_point}" in
/run/imageloader/*|/opt/google/rta)
logger -t "${UPSTART_JOB}" "Valid mount point."
export LD_LIBRARY_PATH="${mount_point}"
exec minijail0 -e -N -p -r -v -l -G -n -u rtanalytics -g rtanalytics \
-S /usr/share/policy/rtanalytics.policy \
"${mount_point}"/rtanalytics_main \
--base_path="${mount_point}"/ \
--calculator_graph_config_file=guado_autozoom
;;
*)
logger -t "${UPSTART_JOB}" "Mount point invalid: ${mount_point}"
;;
esac
fi
end script
# Wait for analytics process to claim its
# D-Bus name before transitioning to started.
post-start exec gdbus wait --system --timeout 15 org.chromium.MediaPerception