Cuttlefish: Función multiusuario

La función multiusuario de Cuttlefish permite que tu máquina anfitrión inicie varios dispositivos virtuales de invitado con una sola invocación de inicio.

Estas máquinas virtuales de Cuttlefish pueden compartir algunos de los recursos del disco host, lo que te permite ahorrar espacio. Cada máquina virtual obtiene una superposición de disco distinta que cubre las particiones de Android (como super, userdata y boot). Cualquier modificación que se haga en el disco de invitado se ubica en una superposición de disco específica de invitado, lo que le da a cada máquina virtual de Cuttlefish una vista de copia en escritura de las particiones del disco. A medida que cada dispositivo virtual escribe más datos en su vista del disco, aumenta el tamaño de los archivos superpuestos en el disco de host, dado que capturan el delta entre el estado original y el actual.

Los archivos superpuestos se pueden restablecer para que el disco de Cuttlefish vuelva a su estado original. Este proceso se conoce como Powerwash

Números de instancia

Los dispositivos Cuttlefish crean y utilizan recursos en el host vinculado a su número de instancia. Por ejemplo, una conexión adb se expone a través de un socket del servidor del TCP en el puerto 6520 para el dispositivo Cuttlefish que tiene el número de instancia 1. Cuando se inician varias instancias, se crea un socket del servidor del TCP en el puerto 6520 para el primer dispositivo, 6521 para el segundo y, para cada dispositivo adicional, se aumenta el número de puerto.

Modificar la cantidad máxima de instancias compatibles

Los recursos del host, como los dispositivos de la red TAP, se deben asignar con antelación para las máquinas virtuales Cuttlefish. De forma predeterminada, el paquete cuttlefish-base de Debian aprovisiona recursos para los números de instancia entre 1 y 10.

Esto se puede cambiar si modificas num_cvd_accounts en /etc/default/cuttlefish-host-resources y reinicias el servicio cuttlefish-host-resources mediante el siguiente comando:

sudo systemctl restart cuttlefish-host-resources

Configuraciones canónicas

Las configuraciones canónicas representan la configuración de los dispositivos Cuttlefish en formato JSON. Puedes crear archivos JSON de configuración canónicos para describir la configuración de varios dispositivos Cuttlefish en un modelo multiusuario situación.

A continuación, se describe el formato que se utiliza para los archivos JSON de configuración canónicos (reemplaza los marcadores de posición por las configuraciones del dispositivo).

{
  "common": {
    CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
  },
  "instances": [
    {
      FIRST_DEVICE_CONFIGURATION
    },
    {
      NTH_DEVICE_CONFIGURATION
    }
  ]
}

El siguiente es un ejemplo de archivo de configuración de una configuración con dos dispositivos: un teléfono y un wearable:

{
  "instances": [
    {
      "@import": "phone",
      "vm": {
        "memory_mb": 8192,
        "setupwizard_mode": "OPTIONAL",
        "cpus": 4
      },
      "disk": {
        "default_build": "/home/username/devices/cf_x86_64_phone-userdebug"
      }
    },
    {
      "@import": "wearable",
      "vm": {
        "memory_mb": 8192,
        "setupwizard_mode": "REQUIRED",
        "cpus": 4
      },
      "disk": {
        "default_build": "/home/username/devices/cf_gwear_x86-userdebug"
      }
    }
  ]
}

En esta tabla, se describen los elementos utilizados en la configuración de ejemplo con dos dispositivos:

Elemento Tipo Descripción
instances Arreglo Matriz de objetos JSON, cada uno de los cuales describe un dispositivo en la grupo multiusuario de dispositivos que se iniciarán.
@import String Indica el tipo de dispositivo y establece los valores predeterminados para el dispositivo. configuración. Los tipos de dispositivos compatibles son phone y wearable.
vm Objeto Especifica las propiedades que se aplican al entorno de VM específico para la instancia de dispositivo.
memory_mb Número La cantidad de memoria que se asignará a una VM específica en megabytes.
setupwizard_mode String Especifica si se ejecuta el asistente de configuración del dispositivo para el usuario al principio. en toda la ejecución del dispositivo. Las opciones admitidas para el modo de asistente de configuración son DISABLED, OPTIONAL y REQUIRED
cpus Número La cantidad de CPU virtuales asignadas a la VM.
disk Objeto Especifica las propiedades relevantes para ubicar los artefactos del sistema de archivos que se usan. para ejecutar una única instancia de VM.
default_build String Ruta del sistema de archivos local a una carpeta que contiene un dispositivo virtual Cuttlefish imagen.

Para obtener más ejemplos de archivos de configuración distribuidos con cvd, consulta el cvd_test_configs en el árbol de código de Cuttlefish.

Controla las instancias multiusuario

En esta sección, se describe cómo iniciar y detener dispositivos en una situación multiusuario. Puedes iniciar varios dispositivos Cuttlefish con las siguientes opciones:

  • Configuración canónica: Inicio personalizado parámetros de configuración para cada dispositivo con un archivo de configuración JSON que la lista de instancias que se iniciarán.
  • Imagen de un solo invitado: Inicia varias a partir de una sola imagen de invitado.

Inicia varias VMs desde la configuración canónica

Iniciar varias VMs con una configuración canónica que describa la una situación multiusuario, invoca el comando cvd start con el --config_file=. de marca de la siguiente manera:

cvd start --config_file=CONFIG_FILE

El siguiente es un ejemplo de invocación que hace referencia a un archivo de configuración canónico llamado /etc/phone.json

cvd start --config_file=/etc/phone.json

Inicia varias VMs a partir de una sola imagen de invitado

Para iniciar varios dispositivos de Cuttlefish con una sola imagen de invitado, usa el comando La marca --num_instances=N, donde N es el número de dispositivos para lanzar. De forma predeterminada, los dispositivos se inician desde el número de instancia 1.

cvd start --num_instances=N

Para cambiar ese número de inicio, realiza una de las siguientes acciones:

  • Agrega la marca --base_instance_num=N, con N como primer número de instancia.

    cvd start --base_instance_num=N
    
  • Inicia Cuttlefish con una cuenta de usuario que coincida con vsoc-NN (NN es el número de instancia base en formato de dos dígitos). Por ejemplo, para iniciar Cuttlefish con la cuenta de usuario vsoc-01, ejecuta lo siguiente:

    cvd start --base_instance_num=1
    

Cómo detener dispositivos

Para detener todos los dispositivos que se iniciaron con la última invocación de cvd start, ejecuta lo siguiente:

cvd stop