# Copyright (C) 2021 The Android Open Source Project
#
# init.rc for microdroid. This contains a minimal script plus basic service definitions (e.g. apexd)
# needed for microdroid to run.
# TODO(b/179340780): support APEX init scripts
#
# IMPORTANT: Do not create world writable files or directories.
# This is a common source of Android security bugs.
#

import /init.environ.rc

# Cgroups are mounted right before early-init using list from /etc/cgroups.json
on early-init
    # set RLIMIT_NICE to allow priorities from 19 to -20
    setrlimit nice 40 40

    start ueventd

on init
    # Mount binderfs
    mkdir /dev/binderfs
    mount binder binder /dev/binderfs stats=global
    chmod 0755 /dev/binderfs

    symlink /dev/binderfs/binder /dev/binder
    symlink /dev/binderfs/vndbinder /dev/vndbinder

    chmod 0666 /dev/binderfs/binder
    chmod 0666 /dev/binderfs/vndbinder

    # Prepare cpusets that are pre-defined by Android. Inside Microdroid, these however don't mean
    # much because the mapping from vCPUs to physical CPUs are quite flexible; a VM can be started
    # with any number of vCPUs and we in general can't be sure that vCPU N is a big core or a little
    # core. These nodes are provided just to satisfy the code which puts a PID to a specific cpuset.
    mkdir /dev/cpuset/foreground
    copy /dev/cpuset/cpus /dev/cpuset/foreground/cpus
    copy /dev/cpuset/mems /dev/cpuset/foreground/mems
    mkdir /dev/cpuset/background
    copy /dev/cpuset/cpus /dev/cpuset/background/cpus
    copy /dev/cpuset/mems /dev/cpuset/background/mems
    mkdir /dev/cpuset/system-background
    copy /dev/cpuset/cpus /dev/cpuset/system-background/cpus
    copy /dev/cpuset/mems /dev/cpuset/system-background/mems

    chown system system /dev/cpuset
    chown system system /dev/cpuset/foreground
    chown system system /dev/cpuset/background
    chown system system /dev/cpuset/system-background
    chown system system /dev/cpuset/tasks
    chown system system /dev/cpuset/foreground/tasks
    chown system system /dev/cpuset/background/tasks
    chown system system /dev/cpuset/system-background/tasks

    chmod 0664 /dev/cpuset/tasks
    chmod 0664 /dev/cpuset/foreground/tasks
    chmod 0664 /dev/cpuset/background/tasks
    chmod 0664 /dev/cpuset/system-background/tasks

    start servicemanager

    start vendor.dice-microdroid
    start diced

on init && property:ro.boot.logd.enabled=1
    # Start logd before any other services run to ensure we capture all of their logs.
    # TODO(b/217796229) set filterspec if debug_level is app_only
    start logd
    start seriallogging

on init
    mkdir /mnt/apk 0755 system system
    mkdir /mnt/extra-apk 0755 root root
    # Microdroid_manager starts apkdmverity/zipfuse/apexd
    start microdroid_manager

    # restorecon so microdroid_manager can create subdirectories
    restorecon /mnt/extra-apk

    # Wait for apexd to finish activating APEXes before starting more processes.
    wait_for_prop apexd.status activated
    perform_apex_config

    # Notify to microdroid_manager that perform_apex_config is done.
    # Microdroid_manager shouldn't execute payload before this, because app
    # payloads are not designed to run with bootstrap bionic
    setprop apex_config.done true

    setprop ro.debuggable ${ro.boot.microdroid.debuggable:-0}

on init && property:ro.boot.microdroid.debuggable=1
    # Mount tracefs (with GID=AID_READTRACEFS)
    mount tracefs tracefs /sys/kernel/tracing gid=3012

on init && property:ro.boot.adb.enabled=1
    start adbd

on load_persist_props_action && property:ro.boot.logd.enabled=1
    start logd
    start logd-reinit

# Mount filesystems and start core system services.
on late-init
    trigger early-fs

    # Mount fstab in init.{$device}.rc by mount_all command. Optional parameter
    # '--early' can be specified to skip entries with 'latemount'.
    # /system and /vendor must be mounted by the end of the fs stage,
    # while /data is optional.
    trigger fs
    trigger post-fs

    # Mount fstab in init.{$device}.rc by mount_all with '--late' parameter
    # to only mount entries with 'latemount'. This is needed if '--early' is
    # specified in the previous mount_all command on the fs stage.
    # With /system mounted and properties form /system + /factory available,
    # some services can be started.
    trigger late-fs

    trigger post-fs-data

    # Load persist properties and override properties (if enabled) from /data.
    trigger load_persist_props_action

    trigger early-boot
    trigger boot

on post-fs
    # Once everything is setup, no need to modify /.
    # The bind+remount combination allows this to work in containers.
    mount rootfs rootfs / remount bind ro nodev

    # TODO(b/185767624): change the hard-coded size?
    mount tmpfs tmpfs /data noatime nosuid nodev rw size=128M

    # We chown/chmod /data again so because mount is run as root + defaults
    chown system system /data
    chmod 0771 /data

    # We restorecon /data in case the userdata partition has been reset.
    restorecon /data

    # set up misc directory structure first so that we can end early boot
    # and start apexd
    mkdir /data/misc 01771 system misc
    # work around b/183668221
    restorecon /data/misc

    mkdir /data/misc/authfs 0700 root root
    start authfs_service

on late-fs && property:ro.debuggable=1
    # Ensure that tracefs has the correct permissions.
    # This does not work correctly if it is called in post-fs.
    chmod 0755 /sys/kernel/tracing
    chmod 0755 /sys/kernel/debug/tracing

on post-fs-data
    mark_post_data

    mkdir /data/vendor 0771 root root
    mkdir /data/vendor_ce 0771 root root
    mkdir /data/vendor_de 0771 root root
    mkdir /data/vendor/hardware 0771 root root

    # Start tombstoned early to be able to store tombstones.
    # microdroid doesn't have anr, but tombstoned requires it
    mkdir /data/anr 0775 system system
    mkdir /data/tombstones 0771 system system
    mkdir /data/vendor/tombstones 0771 root root

    start tombstoned

    # For security reasons, /data/local/tmp should always be empty.
    # Do not place files or directories in /data/local/tmp
    mkdir /data/local 0751 root root
    mkdir /data/local/tmp 0771 shell shell

service tombstone_transmit /system/bin/tombstone_transmit.microdroid -cid 2 -port 2000 -remove_tombstones_after_transmitting
    user root
    group system
    shutdown critical

service apexd-vm /system/bin/apexd --vm
    user root
    group system
    oneshot
    disabled

service ueventd /system/bin/ueventd
    class core
    critical
    seclabel u:r:ueventd:s0
    shutdown critical

service console /system/bin/sh
    class core
    console
    disabled
    user shell
    group shell log readproc
    seclabel u:r:shell:s0
    setenv HOSTNAME console

service seriallogging /system/bin/logcat -b all -v threadtime -f /dev/hvc2 *:V
    disabled
    user logd
    group root logd

on fs
    write /dev/event-log-tags "# content owned by logd
"
    chown logd logd /dev/event-log-tags
    chmod 0644 /dev/event-log-tags
