maitred provides init-like functionality for processes inside the VM.
maitred performs some early setup before it begins listening for rpcs from the host. This includes mounting various filesystems (like
maitred mounts a
tmpfs on the
/run directories so that applications can have temporary runtime storage.
New processes can either be spawned by sending
LaunchProcess rpc or by placing
.textproto files in
/etc/maitred. Both methods use the
LaunchProcessRequest message, which can be found in the vm_guest.proto file.
maitred will then follow the lifetime of this process until it exits or is killed by a signal. If the
LaunchProcessRequest message indicated that the process should be respawned, then
maitred will launch a new instance of that process. However, processes that respawn more than 10 times in 30 seconds will be stopped. These processes can only be restarted by sending another
Processes in the
/etc/maitred folder will be alphabetically sorted and started. Process files follow the naming convention
## defines the starting order. e.g
00-setup-process.textproto will start before
10-main-process.textproto. Make sure to use a two digits prefix, or you might run into unexpected behavior. e.g.
100-process.textproto will start before
90-setup-process.textproto. If a first process must start before a second, the first process will have to have the
wait_for_exit flag set in the
To launch a VM and without any of the processes in the /etc/maitred folder, you can provide a kernel parameter -
maitred.no\_startup\_processes. Once the VM is launched, it will accept
LaunchProcess rpcs like normal.
Processes launched by
maitred run as root with full privileges. If the sender of the
LaunchProcess rpc does not want that process to have full root access, then they should ensure that the program either uses
libminijail to drop privileges or launch the program using
minijail0 with the appropriate flags.
maitred receives a
Shutdown rpc, it sends a
SIGTERM signal to all processes running on the VM. After 5 seconds it terminates any remaining processes by sending them a
maitred then shuts down the system by issuing a
reboot system call.
Some processes may wish to perform some clean up before the system is shut down. For example
vm_syslog will want to flush any buffered logs before shut down. These processes should catch the SIGTERM signal sent out by
maitred, perform any clean up, and then exit.