junio 06, 2016

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:
Nota: Reemplace vbox por el nombre de su usuario y myvm por el nombre de su máquina virtual. Puede cambiar savestate, suspend o poweroff en dependencia de sus necesidades
#! /bin/sh
### BEGIN INIT INFO
# Provides:          VM
# 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
#Edit these variables!
VMUSER=vbox # reemplace vbox por su usuario
VMNAME="myvm" # reemplace myvm por el nombre de su vm
case "$1" in
  start)
    echo "Starting VirtualBox VM..."
    sudo -H -b -u $VMUSER /usr/bin/VBoxVRDP -s "$VMNAME"
    ;;
  stop)
    echo "Saving state of Virtualbox VM..."
    sudo -H -u  $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME" savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    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
Para iniciar o parar la VM manualmente, ejecute en el terminal:
sudo /etc/init.d/vm start
sudo /etc/init.d/vm stop
Para iniciar las VMs en Windows podemos consultar el post "VirtualBox: arrancando y controlando máquinas virtuales “sin cabeza” (GUI)"
Maravento, Actualizado en: 9:17
Escrito por: Maravento Studio
 
© 2017 Maravento. All Rights Reserved | Powered by Maravento
Design by Novatoz and Maravento | Bloggerized By LawnyDesignz
# https://github.com/google/code-prettify