viernes, 29 de julio de 2016

Ionic2 con Navegación entre dos Páginas y aplicación de estilo usando Plantilla en Blanco

Continuando con mi intento de aprendizaje en Ionic2 y Angular2 en mi anterior entrada [Proyecto Inicial en Ionic2 y Angular2 usando una Plantilla en Blanco] presento los pasos iniciales para empezar a trabajar con Ionic2, ahora vengo a presentar un nuevo avance en el uso básico de navegación entre páginas y aplicando algo de estilo a la plantilla en blanco de nuestra primera Aplicación Ionic, también muestro como podemos probar nuestra aplicación directamente en un dispositivo físico Android y en un emulador de Android.



¡Vámos allá!



Crear un Proyecto


Para crear un proyecto usando Ionic2 usamos la siguiente instrucción desde línea de comandos, es importante tener en cuenta el uso de la bandera --v2 para indicar la creación de un proyecto usando Ionic en su versión 2 así:


$ ionic start demo1 blank --v2


Con el argumento blank indicamos que vamos a crear el proyecto usando la plantilla en blanco para Ionic.



Estructura del Proyecto


Para tener mas claridad sobre la estructura del proyecto es recomendable leer mi anterior entrada [Proyecto Inicial en Ionic2 y Angular2 usando una Plantilla en Blanco] para nuestro proyecto demo1 tenemos la siguiente estructura en el directorio app del proyecto:


app/
├── app.ts
├── pages
│   └── home
│       ├── home.html
│       ├── home.scss
│       └── home.ts
└── theme
    ├── app.core.scss
    ├── app.ios.scss
    ├── app.md.scss
    ├── app.variables.scss
    └── app.wp.scss

3 directories, 9 files


El archivo app.ts contiene la clase Main de nuestra aplicación, si observamos el archivo existe la definición de clase MyApp cuando ejecutamos la aplicación esta clase es la primera que se ejecuta y desde ésta se define cual es la pagina raíz de nuestra aplicación en nuestro caso se establece la clase HomePage la cual es la pagina creada bajo el directorio page/home.

Todas las paginas que crean en Ionic deben tener una estructura como en el caso de la pagina home, se usa el mismo nombre del directorio de la pagina para los archivos home.html home.scss y home.ts.

[ver archivo app/app.ts]


Ejecutar Aplicación


Para ejecutar la aplicación tenemos varias opciones, en mi anterior entrada [Proyecto Inicial en Ionic2 y Angular2 usando una Plantilla en Blanco] mostré como probar la aplicación desde un navegador web, ahora voy a mostrar como probar nuestra aplicación en dispositivo físico Android y en un emulador Android.


  • Dispositivo Android: Se ejecuta la aplicación usando la siguiente instrucción desde linea de comandos.

$ ionic run android --livereload


Para que la instrucción tenga efecto en dispositivo físico Android se asume que exista un dispositivo Android conectado al equipo mediante USB y que tenga activa las opciones de depuración para programadores, Ionic automáticamente reconoce el dispositivo conectado, compila, instala y ejecuta la aplicación.

Con el atributo --livereload se indica que podemos tener una vista en vivo de los cambios que realicemos a nuestro código fuente de aplicación, de esta forma no tenemos que ejecutar constante mente el comando cada vez que realicemos un cambio que queremos ver.


  • Emulador Android: Se ejecuta la aplicación usando la siguiente instrucción desde linea de comandos.

$ ionic emulate android --livereload


Para que la instrucción anterior tenga efecto se asume que exista un emulador creado de Android en el equipo.


Demo1 Ionic2
Demo1 Ionic2


Realizar algunos Cambios


Vamos a modificar el archivo home.html cambiando el contenido, agregando un Botón y un Footer a la aplicación:

[ver archivo app/pages/home/home.html]



La estructura de una página para aplicación tiene un área de Header o encabezado, un área de Contenido y un área de Footer o pie de página.

El header tiene una barra de navegación con titulo, a la cual podemos agregar otros elementos como botones o iconos. El elemento ion-navbar sólo puede ser agregado dentro del elemento header, si queremos agregar una barra similar pero al footer o pie de pagina debemos usar el elemento ion-toolbar al cual podemos agregar otros elementos como botones o iconos.

La plantilla en blanco no agrega tiene un estilo poco llamativo, podemos agregar un color o cambiar el estilo del botón.

Para agregar un color al header y al footer podemos usar la tabla de colores que se genera por defecto con el proyecto Ionic o también podemos usar nuestros propios colores modificando el archivo app.variables.scss:

[ver archivo app/theme/app.variables.scss]


Si queremos modificar un elemento con un color específico, podemos por ejemplo agregar el color correspondiente a primary los elementos ion-navbar y ion-toolbar.

Si deseamos que nuestro botón tenga el ancho de todo el contenido en nuestra aplicación usamos el atributo block al elemento button.


Estilo Ionic2
Estilo Ionic2



Crear Páginas


Para crear páginas nuevas podemos usar la instrucción desde linea de comandos que nos provee Ionic la cual construye los archivos necesarios para una página, Ionic usa una convención de nombres usando kebob-casing para los archivos .html .scss .ts incluyendo el nombre del directorio, es recomendable usar esta convención de nombres ya que facilita la depuración de errores a los desarrolladores.


$ ionic g page Pagina1


El comando recibe como argumentos dos atributos, el atributo page indica a Ionic que se va a generar una página y el atributo Pagina1 indica a Ionic el nombre de la clase generada para la página. Ionic automáticamente genera los nombres de los archivos y el directorio usando la convención kebob-casing.

Cuando se crea la nueva página se genera la siguiente estructura de directorios en el directorio app del proyecto:



app/
├── app.ts
├── pages
│   ├── home
│   │   ├── home.html
│   │   ├── home.scss
│   │   └── home.ts
│   └── pagina-1
│       ├── pagina-1.html
│       ├── pagina-1.scss
│       └── pagina-1.ts
└── theme
    ├── app.core.scss
    ├── app.ios.scss
    ├── app.md.scss
    ├── app.variables.scss
    └── app.wp.scss

4 directories, 12 files



Para continuar vamos a crear otra pagina que tenga el nombre Pagina2, a continuación vamos a ver como crear una navegación básica entre las páginas generadas para el proyecto Ionic2.

Cuando ejecutamos el comando para generar páginas, nos muestra un mensaje similar al siguiente:

Don't forget to add an import for pagina-2.scss in app/themes/app.core.scss:

  @import "../pages/pagina-2/pagina-2.scss";


Nos sugiere agregar el import para el estilo propio de la pagina-2.scss esto nos sirve para personalizar el estilo de cada pagina que nosotros creamos y no usar el estilo global definido para la aplicación en el archivo app.variables.scss.




Navegación entre Páginas


Para el caso concreto de realizar la navegación entre la página HomePage y la página Pagina1Page debemos tener en cuenta lo siguiente, primero debemos agregar al template de la pagina HomePage un botón con un evento de click que llame a una función de la clase HomePage en este caso la función tiene el nombre irPagina1().

Desde la función irPagina1() definida en la clase HomePage se hace el llamado al objeto NavController el cual tiene métodos que nos permite hacer llamados a otras páginas, las páginas son acumuladas en una estructura tipo LIFO (Ultimo en Entrar, Primero en Salir).

Para poder hacer el llamado llamado al objeto de clase Pagina1Page debemos hacer un import de la referencia a la clase, de esta forma podemos hacer el llamado de la función push para navegar a la Pagina1Page así this.navCtrl.push(Pagina1Page).


[ver archivo app/pages/home/home.html]

[ver archivo app/pages/home/home.ts]


Navegación Pagina1
Navegación Pagina1


De forma similar hacemos lo mismo con Pagina1Page desde la cual hacemos el llamado para navegar a Pagina2Page.


[ver archivo app/pages/pagina-1/pagina-1.html]

[ver archivo app/pages/pagina-1/pagina-1.ts]


Navegación Pagina2
Navegación Pagina2


Anteriormente mencionamos que la navegación entre páginas se maneja en una estructura tipo LIFO por sus siglas en ingles (Last In, First Out) tenemos a disposición el método pop() de la clase NavController el cual nos permite regresar al la página anterior.


[ver archivo app/pages/pagina-2/pagina-2.html]

[ver archivo app/pages/pagina-2/pagina-2.ts]


Listo eso es todo lo que he podido aprender hasta ahora, algo es algo, para complementar la información que he compartido voy a dejar unos enlaces a las referencias que estoy siguiendo en mi intento de aprender Ionic2.




Referencias




lunes, 25 de julio de 2016

Proyecto Inicial en Ionic2 y Angular2 usando una Plantilla en Blanco

En esta entrada quiero compartir mis primeros pasos en un intento por aprender a usar el Framework Ionic2 para desarrollar Aplicaciones Híbridas.

Ionic2 actualmente está en versión Beta, los desarrolladores del Framework han hecho importantes cambios, ahora ha sido desarrollado usando la ultima versión del Framework Angular2.

La versión de Angular2 también tiene importantes cambios, lo mas destacado es el uso de TypeScript el cual es un lenguaje de programación que hereda de JavaScript, TypeScript incorpora Tipado de datos y definición de Objetos basados en Clases. Con TypeScript podemos configurar la versión de ECMAScript para la cual el código TypeScript será compilado en código JavaScript nativo.



Entorno de Desarrollo


Para crear proyectos en Ionic2 primero tenemos que configurar nuestro entorno de desarrollo, para esto tenemos que instalar los siguientes programas:



Node.js

En la Internet existen muchos tutoriales de como instalar Node.js por lo tanto no voy a copiar y pegar en esta entrada como se hace la instalación, pero si recomiendo la documentación oficial de Node.js para realizar el proceso según el tipo de sistema operativo que se tenga.




NPM

Es un gestor de paquetes para Node.js con este programa podemos instalar paquetes desarrollados para Node.js JavaScript. Recomiendo la documentación oficial de instalación para NPM.




Ionic2

Suponiendo que se han instalado correctamente Node.js y NPM ahora el paso siguiente es instalar el SDK de Ionic2, igual que los programas anteriores no voy a copiar y pegar como se hace la instalación pero si recomiendo la documentación oficial.


Según la documentación oficial Ionic2 todavía está en versión beta pero podemos seguir creando proyectos de Ionic en la versión 1, por defecto al crear proyectos estos se crean por ahora en Ionic1.

Para poder crear proyecto en Ionic2 hay que indicarlo de forma explicita usando una bandera en el comando para crear el proyecto, esta bandera es --v2 un ejemplo sería:

$ ionic start proyecto --v2

En Ionic2 ya se implementa Angular2 por lo tanto no tenemos que instalar nada, por que Ionic automáticamente descarga y configura las dependencias necesarias.




Atom

Para escribir nuestro código JavaScript recomiendo el editor de texto inteligente Atom me ha gustado mucho usarlo ademas recomiendo instalar el paquete Atom TypeScript para el desarrollo de aplicaciones usando TypeScript que nos va a servir mucho.





Crear un Proyecto


Ahora que tenemos todo instalado podemos crear un primer proyecto en Ionic2, para esto tenemos que ejecutar desde una terminal el siguiente comando:

$ ionic start demo0 blank --v2

Como escribí inicialmente cuando se instala Ionic por defecto al crear los proyectos estos se crean con la versión Ionic1 y no con la versión Ionic2 por que actualmente está en versión Beta. Para crear un proyecto en Ionic2 hay que especificarlo con el uso de la bandera --v2.

Cuando se ejecuta el comando se crea el directorio demo0 para el proyecto, se descargan las librerías y plugins necesarias ademas se descarga la plantilla Blank para crear un proyecto en blanco desde el cual iniciar.



Estructura del Proyecto


El directorio demo0 del proyecto Ionic2 tiene la siguiente estructura:

.
├── app
├── config.xml
├── gulpfile.js
├── hooks
├── ionic.config.json
├── node_modules
├── package.json
├── plugins
├── resources
├── tsconfig.json
├── tslint.json
├── typings
├── typings.json
└── www

7 directories, 7 files


Por ahora solo nos interesa conocer lo siguiente, en el directorio app vamos a tener todo el código fuente que vamos a escribir para nuestra aplicación, se puede relacionar con el ambiente de desarrollo de nuestra aplicación, en el directorio www es donde se genera y código fuente compilado para poner en producción, es decir, es el código de nuestra aplicación que ha sido optimizado para ejecutarse. En el archivo config.xml se encuentra información sobre nuestra aplicación como el nombre, descripción y versión.

Si observamos el directorio app, tiene la siguiente estructura:

app/
├── app.ts
├── pages
└── theme

2 directories, 1 file


Si observamos el directorio www tiene la siguiente estructura:

www/
└── index.html

0 directories, 1 file



Ejecutar el Proyecto


Ahora podemos hacer una prueba de ejecutar el proyecto, para esto tenemos varias opciones:

Ejecuta la aplicación en el Navegador
$ ionic serve

Si tenemos dinero, ejecuta la aplicación en iOS
$ ionic run ios

Para los mas pobres, ejecutamos la aplicación en Android
$ ionic run android


Para hacer una prueba rápida ejecutamos la aplicación en el Navegador y podemos observar lo siguiente:

Ionic2 Plantilla Blank
Ionic2 Plantilla Blank


Realizar algunos Cambios


Esta es la plantilla en blanco que genera nuestro proyecto Ionic2 pero ahora queremos hacer algunos cambios para personalizar un poco nuestra aplicación.

Primero vamos a modificar el archivo config.xml para dar un nombre, descripción y numero de versión a nuestra aplicación.


Ahora si queremos cambiar el contenido que se muestra en la página de la plantilla en blanco debemos modificar el archivo home.html que está dentro del directorio app:

app/
├── app.ts
├── pages
│   └── home
│       ├── home.html
│       ├── home.scss
│       └── home.ts
└── theme
    ├── app.core.scss
    ├── app.ios.scss
    ├── app.md.scss
    ├── app.variables.scss
    └── app.wp.scss

3 directories, 9 files


NOTA: Es importante tener claro que no debemos modificar nada de lo que esté en el directorio www por que el contenido de este directorio se crea automáticamente por Ionic ademas todo lo que nosotros programemos debe estar en el directorio app.




Hacemos nuevamente una prueba rápida ejecutamos la aplicación en el Navegador y podemos observar lo siguiente:

Ionic2 Demo 0
Ionic2 Demo 0


Listo, por ahora eso es todo para empezar el intento de aprendizaje con Ionic2 y Angular2 próximamente voy actualizar esta entrada para mostrar la ejecución en un emulador y un dispositivo Android.


miércoles, 4 de mayo de 2016

Crear Maquina Virtual en VirtualBox desde Script Bash Linux Ubuntu

En una anterior entrada compartí los pasos a seguir para crear y configurar una maquina virtual en VirtualBox desde linea de comando Linux Ubuntu mediante la herramienta VBoxManage, en el siguiente link pueden leer en detalle los comandos utilizados:



[ VirtualBox desde Línea de Comandos Linux Ubuntu mediante la herramienta VBoxManage ]



En esta entrada quiero compartir un Script que hice en Bash para ejecutar en Linux Ubuntu y que nos construye una maquina virtual con solo ejecutar el Script.



Si desean tengo el archivo en un repositorio de GitHub para quienes quieran aportar código al Script.


martes, 3 de mayo de 2016

VirtualBox desde Línea de Comandos Linux Ubuntu mediante la herramienta VBoxManage



ACTUALIZACIÓN

He creado un Script para crear una maquina de VirtualBox con solo ejecutar el Script en Bash, pueden consultar el Script en la siguiente entrada:


[ Crear Maquina Virtual en VirtualBox desde Script Bash Linux Ubuntu ]




VBoxManage es la interfaz de línea de comandos para VirtualBox, con esta herramienta se puede controlar completamente VirtualBox desde la línea de comandos del sistema operativo host.


Mediante el uso de VBoxManage se puede acceder a todas las características dadas desde la interfaz gráfica de usuario de VirtualBox, pero la herramienta VBoxManage soporta un poco más de características.


Hay que tener en mente dos cosas cuando usamos el comando VBoxManage, primero que todo el comando VBoxManage siempre debe ser usado con un subcomando específico, por ejemplo; list, createvm, startvm, la lista completa de subcomandos la pueden consultar en el siguiente Chapter 8. VBoxManage o desde línea de comandos ejecutar el comando VBoxManage sin subcomandos. Cada subcomando requiere que sea especificado una máquina virtual en particular, excepto el subcomando list.


Podemos identificar las máquinas virtuales creadas en VirtualBox mediante el uso del subcomando list:


usuario@linux~$ VBoxManage list vms


De esta forma la salida del comando nos lista todas las máquinas virtuales que tenemos creadas y información general de cada una de ellas. Podemos relacionar comandos a máquinas virtuales específicas, mediante el uso de su nombre o relativo a su UUID el cual es un identificador único interno generado por VirtualBox. Si el nombre de la máquina virtual incluye espacios, debemos escribir el nombre entre comillas dobles.




A continuación se describe el uso de comandos básicos para la gestión de máquinas virtuales en VirtualBox desde línea de comandos usando la herramienta VBoxManage.


Para este ejemplo, se va a configurar una máquina virtual que tiene como propósito funcionar con Linux Ubuntu Server 16.04 Xenial Xerus. Los requerimientos básicos de instalación se pueden consultar en el siguiente Ubuntu Server 16.04 Requerimientos.


  • VBoxManage createvm


Crea una máquina virtual mediante la definición de un archivo XML el parámetro --name <nombremaquina> es requerido para especificar el nombre de la máquina.


Por defecto este comando solo crea un archivo XML sin registrar automáticamente la máquina virtual en la instalación de VirtualBox. Para registrar inmediatamente la máquina virtual en VirtualBox se usa el parámetro --register o usando el comando VBoxManage registervm <nombremaquina> si ya tenemos una máquina virtual creada pero no registrada en VirtualBox.


usuario@linux~$ VBoxManage createvm --name “UbuntuServerXenial” --register


Hasta el momento solo se ha creado y notificado en VirtualBox un archivo XML de definición de máquina virtual, esto es como si tuviéramos hasta ahora una máquina sin configurar su hardware, como disco duro, tarjeta de red, memoria ram, procesador, etc.


Ahora debemos crear y asociar a la máquina virtual la configuración de hardware que deseamos tener.


  • VBoxManage createhd


Crea una nueva imagen de un disco duro virtual, el parámetro --filename <nombrearchivo> es obligatorio para el nombre de archivo del disco duro, el parámetro --size <espaciodisco> es obligatorio para definir el tamaña del disco duro virtual en unidades de MB.


El parámetro --format <formato> el formato de salida del archivo de disco duro, por defecto es VDI que es un archivo de expansión dinámica, este archivo no ocupa inmediatamente todo el espacio en disco que le fué asignado sino que a medida que es usado el espacio en disco duro virtual este archivo toma ese valor en disco duro del host. El formato VDI es el formato por defecto de VirtualBox, otros posibles formatos son VMDK, VHD.


usuario@linux~$ VBoxManage createhd --filename “UbuntuServerXenial.vdi” --size 2024 --format VDI


  • VBoxManage storagectl


Con este comando se puede vincular, modificar o remover un controlador de almacenamiento a una máquina virtual, para posteriormente vincular un medio virtual al controlador como por ejemplo un disco duro, unidad de cd/dvd.


El parámetro uuid|vmname es obligatorio para especificar a qué máquina virtual deseamos agregar el controlador. Con el parámetro --name <nombrecontrolador> especificamos el nombre del controlador que deseamos asignar, el parámetro --add <bus> define el bus del sistema al cual el controlador de almacenamiento debe ser conectado, los posibles valores son ide, sata, scsi y floppy.


usuario@linux~$ VBoxManage storagectl “UbuntuServerXenial” --name “IDE Controller” --add ide


  • VBoxManage storageattach


Usando este comando se puede vincular, modificar o remover un medio de almacenamiento conectado a un controlador de almacenamiento que ha sido previamente creado y agregado mediante el comando storagectl.


El parámetro uuid|vmname es obligatorio para especificar a qué máquina virtual deseamos agregar el controlador. Con el parámetro --storagectl se especifica el nombre del controlador de almacenamiento previamente creado, para ver la lista de controladores vinculados a una máquina virtual podemos usar el comando VBoxManage showvminfo <uuid|vmname>.


Con el parámetro --port <numeropuerto> se especifica el número del puerto del controlador de almacenamiento que se va a modificar, es obligatorio a menos que el controlador de almacenamiento tenga un único puerto.


El parámetro --device <numerodispositivo> especifica el número del dispositivo del puerto que se va a modificar, es obligatorio a menos que el controlador de almacenamiento tenga solo un dispositivo por puerto.


Con el parámetro --type <tipo> se especifica el tipo de medio que se va a vincular, desvincular o modificar, los posibles valores son dvddrive para un archivo de cd/dvd, hdd para un archivo de disco duro virtual y fdd para un archivo floppy.


El parámetro --medium <nombrearchivo> especifica que es lo que se va a vincular, si se especifica un nombre de archivo, este debe ser el path absoluto al archivo de una imagen de disco existente (ISO, VDI, RAW, VMDK u otro) el cual será vinculado al slot del dispositivo dado. Este parámetro tiene otros posibles valores que permiten vincular otros orígenes, por ejemplo la unidad DVD del host o vincular una imagen de VirtualBox Guest Additions, las posibles opciones se pueden consultar en el siguiente Chapter 8. VBoxManage storageattach.


Con el siguiente comando se vincula una imagen de disco duro virtual a la máquina virtual:


usuario@linux~$ VBoxManage storageattach “UbuntuServerXenial” --storagectl “IDE Controller” --port 0 --device 0 --type hdd --medium /PATHTO/UbuntuServerXenial.vdi


Donde /PATHTO/ representa el path absoluto a la ubicación del archivo de disco duro virtual UbuntuServerXenial.vdi, los parámetro --port 0 y --device 0 especifica que la imagen de disco duro virtual será montada en el puerto 0 del dispositivo 0.


Con el siguiente comando se vincula una imagen de disco cd/dvd a la máquina virtual:


usuario@linux~$ VBoxManage storageattach “UbuntuServerXenial” --storagectl “IDE Controller” --port 1 --device 0 --type dvddrive --medium /PATHTO/ubuntu-16.04-server-amd64.iso


Donde /PATHTO/ representa el path absoluto a la ubicación del archivo de una imagen de disco cd/dvd, en este caso es el instalador de Ubuntu Server 16.04 Xenial Xerus, los parámetro --port 1 y --device 0 especifica que la imagen de disco cd/dvd será montada en el puerto 1 del dispositivo 0.


  • VBoxManage modifyvm


Con este comando se pueden cambiar las propiedades de una máquina virtual que está registrada en VirtualBox y la cual no está en ejecución. La lista completa de propiedades que pueden ser configuradas se pueden consultar en el siguiente Chapter 8. VBoxManage modifyvm. Estas propiedades generalmente se definen con los requerimientos mínimos del sistema que deseamos instalar y configurar. El parámetro uuid|vmname es obligatorio para especificar a qué máquina virtual deseamos configurar sus propiedades.


usuario@linux~$ VBoxManage modifyvm “UbuntuServerXenial” [<propiedades>]


A continuación se describen las propiedades [<propiedades>] generales básicas para configurar una máquina virtual que previamente se ha creado y registrado.


Con el parámetro --description <descripción> podemos especificar una descripción de la máquina virtual que se ha creado, con esto podemos asociar fácilmente el propósito de la máquina virtual.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --description “Máquina Virtual para una instalación de Ubuntu Server 16.04 Xenial Xerus”


El parámetro --ostype <tipoos> sirve para especificar el tipo de sistema operativo que tiene instalado la máquina virtual.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --ostype “Ubuntu”


Se puede especificar la cantidad de memoria RAM que debe tomar la máquina virtual, la cantidad que es asignada debe ser inferior a la cantidad disponible del host, esto se hace mediante el comando --memory <cantidad> la cantidad se especifica en unidades de MB.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --memory 524


Es posible indicar si la máquina virtual tiene soporte para ACPI o I/O APIC se usa el parámetro --acpi <on|off>, en el caso de estar instalando un sistema operativo en la máquina virtual de 64-bit usamos el parámetro --ioapic <on|off>.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --ioapic on


Con el comando --cpus <cantidadcpu> se especifica la cantidad de CPUs virtuales para la máquina virtual, hay que tener en cuenta no usar un número máximo de núcleos de CPUs superior al total disponible en el host.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --cpus 1


El parámetro --cpuexecutioncap <1-100> configura el porcentaje de procesamiento que deseamos asignar a las CPUs un valor de 50 indica que una CPU virtual solo puede usar el 50% de un CPU del host.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --cpuexecutioncap 100


Si estamos seguros que nuestro sistema host soporta Virtualizacion por Hardware podemos activarlo en nuestra máquina virtual, usamos el parámetro --hwvirtex <on|off> para activar o desactivar la virtualización por hardware (Intel VT-x o AMD-V).


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --hwvirtex on


El parámetro --boot<1-4> permite configurar el orden de booteo de la máquina virtual, son cuatro slots que pueden ser accedidos, none|floppy|dvd|disk|net. En el caso de configurar el arranque en la unidad de cd/dvd el parámetro sería --boot1 dvd.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --boot1 dvd --boot2 disk --boot3 none --boot4 none


Es posible especificar la tarjeta de red virtual y que tipo de red debería estar disponible para la máquina virtual. Con el parámetro --nic<1-N> se especifica la tarjeta de red, se pueden vincular desde 1 hasta N tarjetas de red a la máquina virtual, las opciones disponibles para el tipo de red que debe tener la tarjeta son none|null|nat|natnetwork|bridged|intnet|hostonly|generic la especificación de cada tipo de red se puede consultar en el siguiente Chapter 8. VBoxManage modifyvm.


Una configuración básica es configurar un adaptador de red tipo bridged el cual consiste en conectar nuestra máquina virtual al adaptador de red de la máquina host así nuestra máquina virtual es visible a toda la red donde esta conectada la máquina host.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --nic1 bridged


Si se ha configurado una tarjeta de red para la máquina virtual tipo bridged se debe especificar el adaptador de red de la máquina host, para esto se usa el parámetro --bridgeadapter<1-N> podemos tener tantos adaptadores de red como sea posible, las opciones disponibles son none|<devicename> donde <devicename> es el nombre de nuestro adaptador de red de la máquina host. Lo podemos consultar desde una terminal linux con el comando ifconfig.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --bridgeadapter1 wlp4s0


Con el parámetro --vram <cantidadvideoram> es posible especificar la cantidad de memoria para la tarjeta gráfica virtual de video, se establece en unidades de MB y no debe superar la cantidad física disponible en el host.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --vram 128


  • VBoxManage startvm


Con este comando se inicia el arranque de una máquina virtual, como parámetro se indica el nombre o el UUID de la máquina virtual.


usuario@linux~$ VBoxManage startvm “UbuntuServerXenial”


  • VBoxManage controlvm


Con este comando podemos cambiar el estado de una máquina virtual que actualmente se está ejecutando.


El parámetro <vm> poweroff permite apagar una maquina virtual, con el parámetro <vm> reset permite hacer un reinicio duro de la máquina virtual.


usuario@linux~$ VBoxManage controlvm “UbuntuServerXenial” poweroff


usuario@linux~$ VBoxManage controlvm “UbuntuServerXenial” reset


  • VBoxManage export


Con este comando es posible exportar una o más máquinas virtuales de VirtualBox en un dispositivo virtual en formato OVF el cual incluye una copia de la imagen del disco virtual comprimida en VMDK. El parámetro --output <nombrearchivo> define el nombre del archivo OVF donde se exporta.


usuario@linux~$ VBoxManage export --output maquina.ovf


  • VBoxManage import


Con este comando es posible importar una máquina virtual en formato OVF copiando las imágenes de disco virtual y creando una máquina virtual en VirtualBox. El parámetro --dry-run muestra en pantalla un log del proceso de importar una máquina virtual en formato OVF.


usuario@linux~$ VBoxManage import maquina.ovf --dry-run