Header Ads

Administrando VMs II

Update Mar 03/2017
En el post Administrando VMs, explicamos como administrar máquinas virtuales con phpvirtualbox 4x y Virtualbox 4x. Ahora, con la liberación de phpvirtualbox 5.0.5, se han solucionado la mayoría de las incompatibilidades con Virtualbox 5x y con PHP7. 
Es por eso que hoy dedicaremos este post a explicar la instalación paso a paso PHPVirtualbox 5x para Ubuntu 16.04x (Xenial Xerus) LTS x64VirtualBox 5x + ExtensionApache2, PHP7
Instalando Apache2
Asumiendo que ya tiene instalado las cabeceras (headers, build-essential module-assistant dkms, etc), instale Apache2..
sudo apt -y install apache2 apache2-doc apache2-utils apache2-dev apache2-suexec-pristine libaprutil1 libaprutil1-dev
Edite /etc/apache2/apache2.conf y asegúrese de que contenga la siguiente información:
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
ServerName localhost
ServerName gateproxy # el nombre de su servidor
ServerName 192.168.1.10 # la ip de su servidor
Modifique /etc/apache2/sites-enabled/000-default.conf y asegúrese de que contenga la siguiente información:
< VirtualHost *:80>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html

 < Directory />
  #Options FollowSymLinks
  Options None
  DirectoryIndex index.php index.html index.htm
  AllowOverride None
 < /Directory>
 < Directory "/var/www/html">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    < /Directory>

 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
 < Directory "/usr/lib/cgi-bin">
  AllowOverride None
  Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
         Require all granted
 < /Directory>
 LogLevel warn
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
< /VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Establezca la contraseña de apache2 para su usuario
sudo htpasswd -c /etc/apache2/.htpasswd $USER
Instalando y configurando Virtualbox con Extension Pack
echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
vboxmanage list runningvms | sed -r 's/.*\{(.*)\}/\1/' | xargs -L1 -I {} VBoxManage controlvm {} savestate >/dev/null 2>&1
sudo apt -y autoremove --purge virtualbox* >/dev/null 2>&1
sudo rm -rf /etc/vbox >/dev/null 2>&1
sudo apt update && sudo apt -y install virtualbox-5.0 bridge-utils && sudo dpkg --configure -a && sudo apt -f install
cd /tmp
export VBOX_VER=`VBoxManage --version|awk -Fr '{print $1}'`
sudo VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack" >/dev/null 2>&1
wget http://download.virtualbox.org/virtualbox/$VBOX_VER/Oracle_VM_VirtualBox_Extension_Pack-$VBOX_VER.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-$VBOX_VER.vbox-extpack
cd
sudo usermod -a -G vboxusers $USER
sudo systemctl enable vboxweb-service
sudo systemctl start vboxweb-service
Instalando PHP7
Antes de instalar, se recomienda encarecidamente eliminar cualquier versión anterior de php. No se recomienda por el momento usar PHPVirtualbox php 7.1, solo con PHP 7.0.15-0.
Desinstalar versione previas php...
sudo apt install php libapache2-mod-php
sudo a2dismod php5
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo apt purge libapache2-mod-php php 'php5*'
sudo apt purge php*
sudo apt autoremove
Use el repositorio de ondrej si falta algún paquete:
sudo add-apt-repository ppa:ondrej/php --yes
sudo apt update
Instalando paquetes necesarios de PHPVirtualbox...
sudo apt -y install language-pack-en-base
sudo apt -y install php7.0 php7.0-common php7.0-mysql libmcrypt-dev mcrypt php7.0-mcrypt php7.0-gd php7.0-xml php-xml php-xml-parser php7.0-curl php7.0-soap libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap php7.0-dev php-pear php-gettext libapache2-mod-php7.0 php7.0-json php7.0-cgi php7.0-mbstring php7.0-fpm php-xdebug php7.0-cli php7.0-bz2 php7.0-intl && sudo apt -f install
sudo a2enmod php7.0
Instalando PHPVirtualbox...
sudo mkdir -p /var/www/html/phpvirtualbox
cd /tmp/
sudo wget -c http://downloads.sourceforge.net/project/phpvirtualbox/phpvirtualbox-5.0-5.zip
sudo unzip phpvirtualbox-5.0-5.zip
sudo cp -R phpvirtualbox-5.0-5/* /var/www/html/phpvirtualbox/
sudo rm -R phpvirtualbox-5.0-5*
cd
sudo cp /var/www/html/phpvirtualbox/config.php-example /var/www/html/phpvirtualbox/config.php
sudo chown -R www-data:www-data /var/www/html/phpvirtualbox
Edite /var/www/html/phpvirtualbox/config.php y realice los siguientes cambios (se recomienda usar el mismo usuario y contraseña establecida para apache2, que puede ser la misma de su usuario de linux):
/* Username / Password for system user that runs VirtualBox */
var $username = 'vbox'; # Reemplace vbox por su usuario
var $password = 'pass'; # Reemplace pass por su contraseña
// Disable authentication
var $noAuth = true; # Descomente esta línea
Cree el archivo /etc/default/virtualbox y agregue la siguiente información:
VBOXWEB_USER=vbox # Reemplace vbox por su usuario
VBOXWEB_HOST=localhost
VBOXWEB_AUTH_LIBRARY=null
Cree el archivo /etc/apache2/sites-enabled/phpvbox.conf y agregue la siguiente información (el puerto 11600 es un ejemplo. Puede ser cualquier puerto que elija siempre que no sea reservado):
< VirtualHost *:11600>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html/phpvirtualbox
 < Directory />
  Options FollowSymLinks
  DirectoryIndex index.php index.html index.htm config.php
  AllowOverride None
 < /Directory>
 < Directory /var/www/html/phpvirtualbox/>
  AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
 < /Directory>

 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
 < Directory "/usr/lib/cgi-bin">
  AllowOverride None
  Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
         Require all granted
 < /Directory>
 ErrorLog ${APACHE_LOG_DIR}/error.log
 # Possible values include: debug, info, notice, warn, error, crit,
 # alert, emerg.
 LogLevel warn
 CustomLog ${APACHE_LOG_DIR}/access.log combined
< /VirtualHost>
Edite /etc/apache2/port.conf y agregue la siguiente información:
# PHPVBOX
Listen 11600
Reinicie los servicios
sudo systemctl restart apache2.service && sudo systemctl restart vboxweb-service
Edite su firewall y abra los puertos TCP 11600,18083 para su interfaz de red local y reinicie. Ejemplo de regla iptables. Modifique los datos en dependencia de su red local (eth1= interfaz local y 192.168.1.0/24= rango y mascara)
/sbin/iptables -A INPUT -s 192.168.1.0/24 -i eth1 -p tcp -m multiport --dports 11600,18083 -j ACCEPT
Cree un script vigilante de vboxwebsrv (sudo touch /etc/init.d/vboxweb.sh), establezca su propiedad (sudo chown root:root /etc/init.d/vboxweb.sh), dele permisos de ejecución (sudo chmod +x /etc/init.d/vboxweb.sh) y agregue la siguiente información:
#!/bin/bash
### BEGIN INIT INFO
# Provides:          services reload
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
# VBOXWEBSERV
 date=`date +%d/%m/%Y" "%H:%M:%S`
 if [[ `ps -A | grep vboxwebsrv` != "" ]];then
 echo -e "\nONLINE"
 else
 echo -e "\n"
 sudo -H -u vbox bash -c '/usr/lib/virtualbox/vboxwebsrv --background'
 fi
Programe vboxweb.sh en el cron cada 2 minutos (puede modificar el tiempo)
sudo crontab –e
*/02 * * * * /etc/init.d/vboxweb.sh
Acceda a sus VMs: http://192.168.1.10:11600 (en dependencia de la ip de su servidor) o http://localhost:11600 o http://localhost/phpvirtualbox/
Debe ingresar el usuario y la contraseña de su sistema, o la que eligió en el proceso de instalación. Si esta falla (algo muy común) ingrese con el usuario root y la contraseña de su sistema:
Importante:
En los archivos phpvbox.conf 000-default.conf, por razones de publicación, se le a dado un espacio a las etiquetas que comienzan con <. Ejemplo: < /Directory>, cuando debería ser </Directory>, < VirtualHost *:11600> cuando debería ser <VirtualHost *:11600>
Para los que usan Virtualbox 5.1x, es probable que salga el siguiente mensaje:
Esto es solo una advertencia de que se requiere actualizar a phpVirtualbox 5.1x (pero a la fecha de publicación de este post, no existe esta versión de phpVirtualbox. Va por la 5.0-5). Este mensaje no afecta el funcionamiento del aplicativo web.
Iniciando VMs automáticamente con el sistema
Cree el script vm (sudo touch /etc/init.d/vm), establezca su propiedad (sudo chown root:root /etc/init.d/vm), dele permisos de ejecución (sudo chmod +x /etc/init.d/vm) y agregue la siguiente información:
Muy importante:
Reemplace tu_usuario por el nombre de su usuario y my_vm_name por el nombre de su máquina virtual. Tenga especial cuidado con el uso de mayúsculas y minúsculas. Si tiene alguna duda sobre el nombre de su VM, puede reemplazarlo con el UUID (ej: VMNAME="4ec6acc1-a232-566d-a040-6bc4aadc19a6")
Tenga en cuenta que la cabecera del script debe quedar tal cual. No la modifique ni le agregue nada. Esta cabecera se basa en Linux Standard Base Core Specification (LSB headers), para que funcione correctamente con el comando update-rc.d y sus Runlevels.
#!/bin/bash
### BEGIN INIT INFO
# Provides:          vm
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts vm
# Description:       starts vm using start-stop-daemon
### END INIT INFO

# how to use:  /etc/init.d/vm {start|stop|shutdown|reset|status}
# Permissions:  sudo chmod +x /etc/init.d/vm
# update-rc.d add:  sudo update-rc.d vm defaults 99 01
# remove:   sudo update-rc.d -f vm remove
# confirm update-rc.d: ls -al /etc/rc?.d/ | grep vm
# add user vboxusers: sudo usermod -a -G vboxusers $USER # where $USER is your user

VMUSER="tu_usuario"
VMNAME="my_vm_name" # also you can put UUID in this variable (VMNAME="4ec6acc1-a232-566d-a040-6bc4aadc19a6")

case "$1" in
    start)
        echo "Starting $VMNAME..."
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        ;;
    stop)
        echo "Saving State $VMNAME..."
     sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
      sleep 20
        ;;
    shutdown)
        echo "Shutting Down $VMNAME..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
      sleep 20
        ;;
    reset)
        echo "Resetting $VMNAME..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
        ;;
    status)
        echo -n "VMNAME->";sudo -H -u $VMUSER VBoxManage showvminfo "$VMNAME" --machinereadable |grep "VMState="| cut -d "=" -f2
        exit 1
        ;;
esac
exit 0
Agregue la tarea para que su vm sea lo primero que inicie con el sistema y lo último que se cierre:
sudo update-rc.d vm defaults 99 01
Es posible que no salga nada en pantalla, por tanto es prudente verificar si el arranque fue agregado:
ls -al /etc/rc?.d/ | grep vm
lrwxrwxrwx   1 root root    12 ago 15 12:38 K01vm -> ../init.d/vm
lrwxrwxrwx   1 root root    12 ago 15 12:38 K01vm -> ../init.d/vm
lrwxrwxrwx   1 root root    12 ago 15 12:38 S04vm -> ../init.d/vm
lrwxrwxrwx   1 root root    12 ago 15 12:38 S04vm -> ../init.d/vm
lrwxrwxrwx   1 root root    12 ago 15 12:38 S04vm -> ../init.d/vm
lrwxrwxrwx   1 root root    12 ago 15 12:38 S04vm -> ../init.d/vm
lrwxrwxrwx   1 root root    12 ago 15 12:38 K01vm -> ../init.d/vm
Para iniciar o parar la VM manualmente, ejecute en el terminal:
sudo /etc/init.d/vm start
sudo /etc/init.d/vm stop
Las opciones son: start|stop|shutdown|reset|status
Para iniciar las VMs en Windows podemos consultar el post "VirtualBox: arrancando y controlando máquinas virtuales “sin cabeza” (GUI)"
Con la tecnología de Blogger.