# Copyright 2020 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    "Set up the hardware configuration files for ARCVM"
author         "chromium-os-dev@chromium.org"

oom score never

# Make this a task so that 'start arcvm-per-board-features' will block until
# the script finishes.
task

# Execute generate_camera_profile and board_hardware_features scripts and
# store the results in /run/arcvm/host_generated/oem.
script
  die() {
    logger -t "${UPSTART_JOB}" "$1"
    exit 1
  }

  DEV_CAMERA_ARGS=""
  if [ -e /dev/camera-internal0 ]; then
    DEV_CAMERA_ARGS=" -b /dev/camera-internal0"
  fi
  if [ -e /dev/camera-internal1 ]; then
    DEV_CAMERA_ARGS="${DEV_CAMERA_ARGS} -b /dev/camera-internal1"
  fi

  # /usr/sbin/arc-apply-per-board-config internally calls two scripts,
  # generate_camera_profile and /usr/sbin/board_hardware_features, to generate
  # 3 files,
  # /mnt/stateful_partition/encrypted/var/cache/camera/etc/media_profiles.xml,
  # /run/arcvm/host_generated/oem/etc/media_profiles.xml (copy of the first
  # one), and /run/arcvm/host_generated/oem/etc/permissions/platform.xml.
  #
  # /run/chromeos-config: /usr/bin/generate_camera_profile executes
  #     /usr/bin/cros_config on some boards and the command reads the directory.
  #     MS_REC is required since a squashfs image is mounted somewhere in the
  #     tree.
  # /mnt/stateful_partition/encrypted/var/cache/camera: generate_camera_profile
  #     writes results to the directory.
  # /var/cache/camera: generate_camera_profile reads a .json in the directory.
  #     Also, arc-apply-per-board-config adds camera.prop to the directory.
  # /sys: /usr/sbin/board_hardware_features for some boards reads /sys to
  #     detect the board's hardware. /usr/sbin/mosys command which
  #     generate_camera_profile script uses on some boards also depends on /sys.
  # /run/arcvm/host_generated/oem: Both arc-apply-per-board-config and
  #     board_hardware_features write results to the directory.
  # /dev/camera-internal(0|1) (DEV_CAMERA_ARGS): Reef's board_hardware_features
  #     accesses them for determining if the device supports multi cameras.
  exec /sbin/minijail0 \
      --profile=minimalistic-mountns --uts -e -l -p -N \
      -k 'tmpfs,/mnt,tmpfs,MS_NOSUID|MS_NODEV|MS_NOEXEC' \
      -k 'tmpfs,/run,tmpfs,MS_NOSUID|MS_NODEV|MS_NOEXEC' \
      -k 'tmpfs,/var,tmpfs,MS_NOSUID|MS_NODEV|MS_NOEXEC' \
      -k '/run/chromeos-config,/run/chromeos-config,none,MS_BIND|MS_REC' \
      -b /sys \
      -b /mnt/stateful_partition/encrypted/var/cache/camera,,1 \
      -b /run/arcvm/host_generated/oem,,1 \
      -b /var/cache/camera,,1 \
      ${DEV_CAMERA_ARGS} \
      -- /usr/sbin/arc-apply-per-board-config \
           --log_tag=arc-apply-per-board-config ||
      die "Failed to execute arc-apply-per-board-config"
end script
