blob: f4789c7e13818b84b8c6770e095152a76b1e28a8 [file] [log] [blame]
# 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.
description "Run /system/bin/sdcard in a container"
author "chromium-os-dev@chromium.org"
# This job is started via arc-boot-continue.conf.
# This job is stopped via arc-lifetime.conf.
# Unused, but to be compliant with sdcardfs upstart script.
import CONTAINER_PID
env PIDFILE=/run/arc/sdcard.pid
env ANDROID_ROOTFS_DIR=/opt/google/containers/android/rootfs/root
env ANDROID_MUTABLE_SOURCE=/opt/google/containers/android/rootfs/android-data
env SDCARD_ROOTFS_DIR=\
/opt/google/containers/arc-sdcard/mountpoints/container-root
env SDCARD_MOUNT_DIR=/run/arc/sdcard
env ROOT_UID=655360
env SDCARD_UID=656383
# Clean up a stale pid file if it exists.
pre-start exec rm -f $PIDFILE
# Note: $SDCARD_MOUNT_DIR/... and $ANDROID_MUTABLE_SOURCE/data/...
# (including /data/media) should have been properly initialized.
# systemd-cat is used to redirect stdio from sdcard to journald for logging
# minijail will exit after forking into PID namespace and upstart tracks root
# of PID namespace
# -T static because mounts prevent minijail detecting that binary is static
# TODO(ereth): replace 0x44000 for the / dir mount with MS_REC|MS_PRIVATE once
# minijail accepts this combination of flags
expect fork
exec /usr/bin/systemd-cat -t "${UPSTART_JOB}" \
capsh --drop=CAP_BLOCK_SUSPEND,CAP_WAKE_ALARM,CAP_SYS_BOOT \
-- -c "exec minijail0 \
-P $SDCARD_ROOTFS_DIR \
-e -p -v -l -K -i \
-a android \
-f $PIDFILE \
-k 'proc,/proc,proc,MS_NOSUID|MS_NODEV|MS_NOEXEC' \
-b $ANDROID_ROOTFS_DIR/system/bin/sdcard,/system/bin/sdcard \
-b $ANDROID_MUTABLE_SOURCE/data,/data,1 \
-b /home/chronos/user/Downloads,/Downloads,1 \
-k none,/,none,0x44000 \
-b $SDCARD_MOUNT_DIR,/mnt/runtime,1 \
-k 'none,/mnt/runtime,none,MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_REMOUNT' \
-T static \
-- /system/bin/sdcard -u $SDCARD_UID -g $SDCARD_UID \
-m -w /data/media emulated"
post-stop exec /usr/sbin/arc-setup --mode=unmount-sdcard \
"--log_tag=${UPSTART_JOB}"