| # Copyright 2024 The ChromiumOS Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| description "Prepare /data for ARCVM" | |
| author "chromium-os-dev@chromium.org" | |
| start on starting arcvm-post-login-services | |
| stop on stopping arcvm-post-login-services | |
| # Derived from arcvm-post-login-services. | |
| oom score -100 | |
| task | |
| import CHROMEOS_USER | |
| import ARCVM_DATA_TYPE | |
| env ANDROID_MUTABLE_SOURCE=/run/arcvm/android-data/mount | |
| pre-start script | |
| # Use different minijail configs depending on the type of /data: | |
| # 1) For virtio-fs /data, it needs to be set up and mounted on | |
| # /run/arcvm/android-data/mount in the concierge namespace. | |
| # 2) For virtio-blk /data, the job temporarily mounts /data, which is safer to | |
| # perform in a confined minimalistic namespace. | |
| if [ "${ARCVM_DATA_TYPE}" = "virtiofs" ]; then | |
| exec /sbin/minijail0 \ | |
| --config /usr/share/minijail/arcvm-prepare-virtio-fs-data.conf \ | |
| -- /usr/sbin/arcvm-prepare-data --log_tag=arcvm-prepare-data \ | |
| --data_type="${ARCVM_DATA_TYPE}" | |
| else | |
| if [ "${ARCVM_DATA_TYPE}" != "lvm_volume" ] && | |
| [ "${ARCVM_DATA_TYPE}" != "concierge_disk" ]; then | |
| logger -t "${UPSTART_JOB}" "Invalid /data type: ${ARCVM_DATA_TYPE}" | |
| exit 1 | |
| fi | |
| CHROMEOS_USER_HOME=$(cryptohome-path system "${CHROMEOS_USER}") | |
| if [ ! -d "${CHROMEOS_USER_HOME}" ]; then | |
| logger -t "${UPSTART_JOB}" \ | |
| "User home ${CHROMEOS_USER_HOME} does not exist" | |
| exit 1 | |
| fi | |
| exec /sbin/minijail0 \ | |
| --config /usr/share/minijail/arcvm-prepare-virtio-blk-data.conf \ | |
| -k "${CHROMEOS_USER_HOME},${CHROMEOS_USER_HOME},none,MS_BIND|MS_REC" \ | |
| -- /usr/sbin/arcvm-prepare-data --log_tag=arcvm-prepare-data \ | |
| --data_type="${ARCVM_DATA_TYPE}" | |
| fi | |
| end script | |
| # This is needed to ensure this job doesn't remain in the started state. | |
| exec /bin/true |