# Copyright (c) 2011 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     "cros-disks upstart job"
author          "chromium-os-dev@chromium.org"

oom score -100

env CROS_DISKS_OPTS=''

# Set the default polling interval in milliseconds on block devices.
# This in-kernel polling mechanism is available since kernel 2.6.38.
# The poll timer slack is set to 25% in kernel (linux/block/genhd.c).
# With a polling interval <= 1 second, the system seems to react to
# eject requests from a CD-ROM drive more responsively.
env BLOCK_DEFAULT_POLL_MSECS=1000
env BLOCK_DEFAULT_POLL_MSECS_SYSFS_PATH=/sys/module/block/parameters/events_dfl_poll_msecs

# Minimum log level defined in base/logging.h.
#   0:INFO, 1:WARNING, 2:ERROR, 3:ERROR_REPORT, 4:FATAL
#   -1:VLOG(1), -2:VLOG(2), etc
# Set to log only INFO or above by default.
env CROS_DISKS_LOG_LEVEL=1

# Importing the TZ environment variable to allow the time zone to be changed
# for tests.
import TZ

start on starting system-services
stop on stopping system-services

pre-start script
  # The TZ variable is only allowed to exist in test builds for running
  # autotests. The existence, even if set to empty, of TZ interferes with the
  # regular functioning of the system timezone.
  if crossystem "cros_debug?0" && [ -n "${TZ+set}" ]; then
    logger -t "${UPSTART_JOB}" "TZ variable set in non-debug mode"
    exit 1
  fi

  # Set default polling interval on block devices.
  # This only affects block devices with removable media, which do not
  # support asynchronous media change/eject events.
  if [ -f "${BLOCK_DEFAULT_POLL_MSECS_SYSFS_PATH}" ]; then
    echo "${BLOCK_DEFAULT_POLL_MSECS}" > "${BLOCK_DEFAULT_POLL_MSECS_SYSFS_PATH}"
  fi

  # Load the FUSE module, which is used by various FUSE mounters.
  # cros-disks should still run even if the FUSE module fails to load.
  logger -t "${UPSTART_JOB}" "Loading FUSE module"
  modprobe fuse || logger -t "${UPSTART_JOB}" "Failed to load FUSE module"
end script

tmpfiles /usr/lib/tmpfiles.d/on-demand/cros-disks.conf

post-stop script
  if [ -f "${BLOCK_DEFAULT_POLL_MSECS_SYSFS_PATH}" ]; then
    # Disable default polling on block devices.
    echo 0 > "${BLOCK_DEFAULT_POLL_MSECS_SYSFS_PATH}"
  fi
end script

respawn
expect fork

# Run cros-disks under Minijail as follows:
# - Enter new IPC (-l) namespace.
#
# - Remain in the original network namespace in order to join to the system
#   DBus.
#
# - Remain in the original cgroup namespace as it isn't supported on systems
#   running kernel 3.8. TODO(benchan): Put cros-disks in new cgroup namespace
#   once all systems support it.
#
# - Temporarily skip new mount (-v) and PID (-p) namespace as cros-disks
#   needs to access /home/user/<hash> for archive support, which isn't
#   accessible inside a new mount namespace. TODO(benchan): Put cros-disks in
#   new mount and PID namespace after archive support in cros-disks is
#   deprecated (chromium:707327).
#
# - To let upstart track the cros-disks process properly according to the
#   'expect fork' stanza, Minijail exits immediately after fork (-i) while
#   cros-disks stays in foreground (--foreground) without daemonizing itself.
#
# - Use -K to prevent Minijail from remounting the shared mount at /media as
#   private.
#   TODO(benchan): Remove -K once Minijail provides a finer control over
#   what should be remounted private and what can remain shared (b:62056108).
#
# - Do not lock SECBIT_KEEP_CAPS (-B 0x20) such that nested minijail invocations
#   can enable the bit again to pass capabilities.
#
exec minijail0 -u cros-disks -g cros-disks -G \
  -c cap_chown,cap_setgid,cap_setuid,cap_sys_admin,cap_sys_chroot,cap_mknod,cap_setpcap=e \
  --ambient -B 0x20 \
  -i -l -n \
  -- /usr/bin/cros-disks --foreground \
       --log_level="${CROS_DISKS_LOG_LEVEL}" ${CROS_DISKS_OPTS}
