martes, 20 de enero de 2015

Virtualización de máquinas en Servidor de Aula con KVM

Necesitamos crear una máquina virtual con otro sistema operativo para correr un determinado programa de otra plataforma.
Como hemos probado con VirtualBox y no va bien, me han dejado la tarea de probar con KVM que al no ser emulador y correr sobre el propio kernel parece que va mejor.

Inicialmente tiré del siguiente tutorial:

Aunque después me he servido de la siguiente presentación, bastante completa donde se va indicando todo.
http://www.gonzalonazareno.org/cloud/material/KVM.pdf

Y ésta también es una muy buena guía, de la cual he sacado la mejora de tarjeta gráfica y aceleración 2D y 3D.
http://www.makeinstall.es/2011/04/virtualizar-con-la-maquina-virtual-del.html

He comprobado que el procesador con el que vienen equipados los servidores de aula, intel i3, viene con la tecnología intel-vt, tan sólo es necesario activarla en la bios, si no está activada.
La he podido habilitar entrando en la bios y  en la pestaña que pone Advanced, allí menú CPU CONFIGURATIÓN  (en otro ordenador, me la he encontrado en  Overclocking dentro de ella vamos a CPU FEATURES )  y una vez allí ponemos la opción Intel Virtaulization Tech a enable.

Ya después de arrancar el sistema podemos ver si ha arrancado correctamente los módulos:

root@servidorweb:/# lsmod|grep kvm
kvm_intel             138825  0 
kvm                   404853  1 kvm_intel
root@servidorweb:/# 

Instalamos paquetes kvm:

root@a09-pro:~# apt-get install qemu-kvm libvirt-bin bridge-utils

 y después paquetes para aplicaciones auxiliares:

apt-get install virtinst virt-manager ubuntu-vmbuilder
virt-viewer

entre ellas virt-manager que nos va a ofrecer una interfaz gráfica para poder gestionar nuestras máquinas virtuales.

Para poder utilizar las máquinas virtuales el usuario debe pertenecer a los grupos: libvirtd y kvm.
En nuestro sistema, como los usuarios los tenemos en ldap, tenemos dos opciones:
1.- Añadirlos en el archivo de grupos: /etc/groups. Añado usuario en esos dos grupos después de los dos puntos. El sistema ya se encarga de meter mi usuario en esos grupos.

  GNU nano 2.2.6            Fichero: /etc/group                    Modificado  

clamav:x:129:
firebird:x:128:
kvm:x:130:usuario
libvirt:x:131:usuario
libvirt-qemu:x:132:libvirt-qemu
vde2-net:x:133:

2.- Creamos en ldap un nuevo grupo en la rama Groups y le añadimos los usuarios que deseemos.

Como de estas dos formas, me he encontrado, no sé el motivo, con problemas de autentificación de los usuarios, he decidido crear un usuario local con :

useradd  -D -m -d /homeInst/prueba -g kvm,libirt -p prueba prueba

Con este comando crea tanto usuario como su home, le mete la contraseña indicada y también lo mete dentro de los grupos que necesitamos.
Y luego lo añadimos como miembro de los grupos libvirt y kvm en el caso de que no se haya añadido al crearlo.

Creamos y definimos el pool de almacenamiento tal y como indica en la página 41 del pdf.
root@a09-pro:~# nano /tmp/pool-default.xml 

 GNU nano 2.2.6                   Fichero: /tmp/pool-default.xml                                              

<pool type='dir'>
<name>default</name>
<target>
<path>/var/lib/libvirt/images</path>
</target>
</pool>

root@a09-pro:~# virsh pool-autostart default
Pool default marked as autostarted

root@a09-pro:~# virsh pool-list --all
Name                 State      Autostart 
-----------------------------------------
default              inactive   yes       

root@a09-pro:~# virsh pool-start default
Pool default started

root@a09-pro:~# virsh pool-list --all
Name                 State      Autostart 
-----------------------------------------
default              active     yes       

root@a09-pro:~# 


Idem con la red en página 44:

root@a09-pro:~# virsh net-start default
Network default started

root@a09-pro:~# virsh net-autostart default
Network default marked as autostarted

root@a09-pro:~# virsh net-list
Name                 State      Autostart
-----------------------------------------
default              active     yes       

root@a09-pro:~#


Ya hemos finalizado con la instalación del software necesario, ya sólo nos quedaría crear las máquinas virtuales que necesitemos.

Lo podemos realizar mediante el comando virt-install  o directamente en modo gráfico desde virt-manager. Yo he utilizado esta forma que es más intuitiva.

Abrimos virt-manager y pulsamos el icono de máquina virtual nueva.
Ponemos nombre  y en Medio de instalación local le ponemos la dirección del ISO con la imagen del SO que queremos instalar, tipo de SO, memoria, procesadores, etc... (todo esto lo podremos modificar más adelante) y dejamos que comience y finalice la instalación.
La máquina virtual nos crea una imagen del disco duro virtual que crea(archivo .img), lo almacena en /var/lib/libvirt/images/   y por otra parte nos guarda la configuración de la máquina virtual (procesadores, memoria, gráfica, etc...) en el directorio /etc/libvirt/qemu/ un archivo xml por máquina virtual creada.
Como en mi caso queremos la máquina para trabajar con un programa de diseño gráfico y es muy importante que funcione muy bien la gráfica y tenga aceleración, se lo ponemos a mano directamente en este archivo xml en la etiqueta de video, cambiando vga por vmvga, aumentando la vram y poniendo la aceleración:
.    <video>
      <model type='vmvga' vram='131072' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
      <acceleration accel2d='yes' accel3d='yes'/>
    </video>
Ya por último, y como lo que estoy utilizando es un cliente windows, queríamos que todo funcionara lo mejor posible y habíamos leído que virtio mejoraba la fluídez, para eso añadimos un nuevo cdrom con la iso de virtio, desde Editar/Detalles de la máquina virtual con la máquina virtual seleccionada, y en información (símbolo de la bombilla) añadir nuevo hardware.


Para ello desde el administrador de dispositivos de Windows le dimos a actualizar controlador de tarjeta de red, bus pci, etc... y también los dispositivos no reconocidos, indicándole instalar desde el cdrom  o disco duro que hemos añadido.

Creo que ya poco más, la verdad es que el resultado es impresionante, y parece funcionar más rápido que una máquina real....
¿Cuál es el secreto?

lunes, 12 de enero de 2015

whatsapp en pc con pidgin

Necesitamos tener whatsapp en el instituto para hacer llegar comunicaciones por este medio.
Me puse a ver en internet y encontré que es posible hacerlo siguiendo las indicaciones de, entre otras, la siguiente página:

http://blog.desdelinux.net/como-usar-whatsapp-en-linux-con-pidgin/

más a la hora de solicitar la contraseña con yowsup, me encontre que daba error ya que la versión ha cambiado.
Después de entrar en la página del proyecto:

https://github.com/tgalal/yowsup/wiki/yowsup-cli-2.0

vi que ha cambiado un poco la filosofía del script yowsup-cli y en vez de solicitar dicho registro con la órden que indica el tutorial:

./yowsup-cli -c whatsapp_config.txt --requestcode sms

ahora se realiza en dos pasos, tal y como indica la documentación de yowsup-cli:

yowsup-cli registration --requestcode sms --phone 49XXXXXXXX --cc 49 --mcc 123 --mnc 456
yowsup-cli registration --register 123456 --phone 49XXXXXXXX --cc 49  
en donde cc y mcc son los códigos de país y operadora que se pueden encontrar en el siguiente enlace de la wikipedia:
https://en.wikipedia.org/wiki/Mobile_country_code#National_operators

Ya nos da el siguiente resultado:

jmmedi-hpt yowsup # ./yowsup-cli registration --requestcode sms --phone 34XXXXXX --cc 34 --mcc 214 --mnc 03
INFO:yowsup.common.http.warequest:{"status":"sent","length":6,"method":"sms","retry_after":1805}

status: sent
retry_after: 1805
length: 6
method: sms
jmmedina-hpt yowsup # ./yowsup-cli registration --register 115-070 --phone 34XXXXXXX  --cc 34
INFO:yowsup.common.http.warequest:{"status":"ok","login":"34XXXXXXX","pw":"RoqW8JhFo4laFi2tdR3fIvxFxeE=","type":"existing","expiration":1448664009,"kind":"free","price":"0,89 \u20ac","cost":"0.89","currency":"EUR","price_expiration":1423994449}

status: ok
kind: free
pw: RoqW8JhFo4laFi2tdheE=
price: 0,89 €
price_expiration: 1423994449
currency: EUR
cost: 0.89
expiration: 1448664009
login: 346ÇXXXXXXX
type: existing
jmmedinac03-hpt yowsup # 

Si queremos tener un archivo con la configuración podemos hacer los siguiente:

 yowsup # ./yowsup-cli demos --help-config > whatsapp-config.txt

############# Yowsup Configuration Sample ###########
#
# ====================
# The file contains info about your WhatsApp account. This is used during registration and login.
# You can define or override all fields in the command line args as well.
#
# Country code. See http://www.ipipi.com/help/telephone-country-codes.htm. This is now required.
cc=49
#
# Your full phone number including the country code you defined in 'cc', without preceding '+' or '00'
phone=491234567890
#
# You obtain this password when you register using Yowsup.
password=NDkxNTIyNTI1NjAyMkBzLndoYXRzYXBwLm5ldA==
#######################################################

y cambiamos los campos cc, phone y password por nuestros datos.

Si queremos más información sobre las opciones de yowsup-cli, en este caso demos, lo podemos ver con:

yowsup # ./yowsup-cli demos -h
usage: demos [-h] [-v] [-d] [--help-config] [-l phone:b64password | -c CONFIG]
             [-m] [-y] [-e] [-s phone message]

Run a yowsup demo

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         Print version info and exit
  -d, --debug           Show debug messages
  --help-config         Prints a config file sample

Configuration options for demos:
  -l phone:b64password, --login phone:b64password
                        WhatsApp login credentials, in the format
                        phonenumber:password, where password is base64
                        encoded.
  -c CONFIG, --config CONFIG
                        Path to config file containing authentication info.
                        For more info about config format use --help-config
  -m, --moxie           Enable experimental support for the new WhatsApp
                        encryption

Command line interface demo:
  -y, --yowsup          Start the Yowsup command line client

Echo client demo:
  -e, --echo            Start the Yowsup Echo client

Send client demo:
  -s phone message, --send phone message
                        Send a message to specified phone number, wait for
                        server receipt and exit


Y ya como indica el tuturial, abrir pidgin y crear una cuenta nueva de whatsapp con login número de teléfono(346XXXXXX) y password el código recibido como pw:.........

Probado y funcionando.