Con la introducción en el mercado por parte de Apple de sus Mac con ARM, el paradigma del software ha cambiado mucho y se ha visto obligado a evolucionar. Pero en esta transición aún se necesita ejecutar aplicaciones x86_64 en los Mac con. En este tutorial usaremos la herramienta Lima en macOS con procesador ARM para arrancar un sistema operativo x86_64 emulado.
Índice de contenidos.
- 1. Introducción
- 2. Entorno
- 3. Instalación y configuración
- 4. Primeros pasos
- 5. Bonus: Instalar Docker dentro de Lima
- 6. Conclusiones
1. Introducción
Antes de entrar en materia, hay que entender la diferencia entre emular, virtualizar y traducir operaciones.
En la virtualización, la CPU ejecuta directamente las operaciones del sistema operativo usando el soporte nativo de la misma.
Por el contrario, con la emulación se pretende hacer creer a la CPU que está ejecutando código nativo, cuando en realidad está ejecutando código de otro entorno.
Por último, los Mac con ARM incluyen Rosetta 2, un software que intenta traducir las operaciones x86_64 a la arquitectura nativa de la CPU, en este caso a ARM.
En este tutorial vamos a emular un sistema operativo con Lima. Esta herramienta nos permite trabajar con QEMU de forma sencilla. Lima es una CLI
que gestionará los sistemas operativos que queramos arrancar (no solo ARM) y nos dará una serie de herramientas como el acceso a los ficheros del sistema operativo anfitrión sin necesidad de copiarlos al sistema operativo emulado.
2. Entorno
El entorno en el que se han probado las herramientas explicadas en este tutorial es el siguiente:
- Hardware: Portátil MacBook Pro 16′ 2021 (
Apple M1 Max
, 64 GB LPDDR5-6400, 2TB SSD). - Sistema Operativo: macOS Monterey
12.4
- ZSH
5.8.1
- Homebrew
0.11.0
- Lima
4.15.3
3. Instalación y configuración
La instalación de Lima es muy sencilla y usaremos Homebrew para ello. Habrá que ejecutar los siguientes comandos en una terminal, dejando un sistema operativo x86_64 emulado arrancado:
$ brew install lima $ limactl start (elegir "Open an editor to override the configuration")
Aparecerá un YAML que podrá ser modificado con el editor de texto por defecto de la terminal (en mi caso vi), donde habrá que cambiar los siguientes atributos del sistema operativo emulado:
arch: "x86_64" memory: "16Gib" (o el valor que mejor se ajuste) disk: "50Gib" (o el valor que mejor se ajuste)
Tras realizar los cambios y guardarlos, Lima empezará a arrancar y configurar el sistema operativo emulado.
4. Primeros pasos
Ahora que ya tenemos Lima instalado y ejecutando un sistema operativo x86_64 emulado vamos a ver qué opciones tenemos.
Para ejecutar un comando dentro del sistema operativo emulado ejecutamos lo siguiente:
$ lima uname -a Linux lima-default 5.15.0-37-generic #39-Ubuntu SMP Wed Jun 1 19:16:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Podemos acceder al sistema operativo emulado ejecutando $ lima
y ver los ficheros del sistema operativo anfitrión:
$ ls file $ lima $ ls file
Lima nos provee de una manera nativa de ejecutar contenedores dentro del sistema operativo emulado con nerdctl. Esta herramienta nos permite ejecutar comandos de Docker sin instalarlo, ya que usa el soporte nativo del sistema operativo. Tras ejecutar $ lima
en el sistema operativo anfitrión, ejecutamos lo siguiente:
$ nerdctl image ls REPOSITORY TAG IMAGE ID CREATED PLATFORM SIZE BLOB SIZE
Para salir y apagar la máquina virtual ejecutamos lo siguiente:
$ exit $ limactl stop
5. Bonus: Instalar Docker dentro de Lima
Aunque Lima nos provee del soporte nativo de contenedores, podemos instalar Docker como en cualquier otro sistema operativo Linux de la siguiente manera:
$ lima $ curl -fsSL https://get.docker.com | sh $ sudo usermod -aG docker $USER $ newgrp docker
Con esto tendremos instalado Docker dentro del sistema operativo emulado y podremos correr los contenedores que necesitemos.
Si el contenedor que corremos dentro de Lima mapea un puerto, este puerto será alcanzable en el sistema operativo anfitrión
6. Conclusiones
Lima no solo emula ARM, sino que permite correr otro tipo de sistemas operativos convirtiéndola en una alternativa a Virtual Box o Parallels.
Los Mac con ARM han abierto un mundo de posibilidades y han impulsado esta arquitectura, haciendo que el mercado no se quede anclado en x86_64. Pero estamos en un momento de transición en el que herramientas como Lima son bienvenidas.