QVD

De 33system wiki
Saltar a: navegación, buscar

<< Informatica

QVD

Teoría

Se trata de un servicio de almacenamiento de archivos en red.

Práctica

Instalación

# repositorio de QVD
# old rep zypper ar http://download.opensuse.org/repositories/home:/qvd:/qvd-3.1/SLE_11_SP2/ QVD
zypper ar http://download.opensuse.org/repositories/home:/qvd:/qvd-3.1.0/SLE_11_SP2/ QVD
zypper refresh

# instalacion dependencias
zypper install  vi vim gcc zip gunzip rar unrar less make gmake postgresql91-server postgresql91 apache2 apache2-devel lxc ebtables kvm kvm_server ebtables openssl

# instalacion perl 
cd /opt
wget http://www.cpan.org/src/5.0/perl-5.16.1.tar.gz
tar -xzf perl-5.16.1.tar.gz
cd perl-5.16.1
./Configure -des -Dprefix=/opt/localperl
make
make test
make install
	 
mv /usr/bin/perl /usr/bin/perl.old
ln /opt/localperl/bin/perl /usr/bin/perl

# instalacion Catalyst
cpan Catalyst::Runtime


zypper install perl-QVD-Client perl-QVD-L7R perl-QVD-L7R-LoadBalancer perl-QVD-HKD perl-QVD-Admin perl-QVD-DB
 
# zypper install perl-QVD-Admin-Web

Base de Datos

# arrancamos el servicio de postgres
/etc/init.d/postgresql start
# utilizamos el usuario postgres
su - postgres
# creamos un usuario
createuser -P QVDUser
Enter password for new role: passw0rd
Enter it again: passw0rd
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
# creamos la base de datos y se la asignamos al usuario
createdb -O QVDUser QVDDatabase
# dejamos el usuario postgres
exit
# editamos el archivo de configuracion de postgres
vi /var/lib/pgsql/data/postgresql.conf
# cambiamos las variables
listen_addresses = '*'
default_transaction_isolation = 'serializable'
# editamos otro archivo de configuracion
vi /var/lib/pgsql/data/pg_hba.conf
# añadimos al final del archivo la siguiente linea
## cambiamos todos los ident por md5
host    QVDDatabase     QVDUser         192.168.5.0/24          md5
## asegurarnos de que el METHOD del IPv6 es md5

# creamos el archivo node.conf
cp /usr/lib/qvd/config/sample-node.conf /etc/qvd/node.conf
# y lo editamos 
vi /etc/qvd/node.conf

========================================================
nodename=qvd
database.host =localhost
database.name =QVDDatabase
database.user =QVDUser
database.password =passw0rd <-(cuidado con los espacios en blanco)
========================================================

# reiniciamos el servicio de postgres
/etc/init.d/postgresql restart
# creamos el directorio del log y el log
mkdir /var/log/qvd
touch /var/log/qvd/qvd.log
# comprobamos que se conecta correctamente
psql -U QVDUser -W -h localhost -d QVDDatabase
## consultamos las tablas
\d
## salimos de la base de datos
\q

# ejecutamos el script para cargar las bases de datos
/usr/lib/qvd/bin/qvd-deploy-db.pl

Configuracion

# metemos en el PATH el directorio de QVD
PATH=$PATH:/usr/lib/qvd/bin
# insertamos la configuracion
qvd-admin.pl config set vm.network.ip.start=10.3.15.50
qvd-admin.pl config set vm.network.netmask=24
qvd-admin.pl config set vm.network.gateway=10.3.15.1
qvd-admin.pl config set vm.network.bridge=br0
qvd-admin.pl config set wat.admin.login=admin
qvd-admin.pl config set wat.admin.password=admin

Redes

# establecemos a 1 el valor del forward
echo 1 > /proc/sys/net/ipv4/ip_forward
# editamos el archivo /etc/sysctl.conf
vim /etc/sysctl.conf
## sustituimos 0 por 1 o agregamos la linea
net.ipv4.ip_forward = 1
# cargamos la configuracion
sysctl -p

# creamos un interfaz virtual
yast2
## seleccionamos las opciones
Network Devices -> Network Settings -> Add
## Creamos un interfaz puente seleccionando
Device Type -> bridge
Configuration Name -> 0
Next
## Elegimos el interfaz que tenemos como principal para elegir donde ira el puente

apache2-mod_fcgid

Compilamos nuestro propio modulo de apache

# descargamos el paquete
wget http://apache.rediris.es//httpd/mod_fcgid/mod_fcgid-2.3.7.tar.gz
# creamos los enlace simbolicos que requiere
ln -s /usr/include/apache2-prefork/mpm.h /usr/include/apache2/mpm.h
ln -s /usr/include/apache2-prefork/mpm_default.h 
/usr/include/apache2/mpm_default.h
# ejecutamos el ./config con una variable definida y una opcion
APXS=/usr/sbin/apxs2 ./configure.apxs --with-apxs=/usr/sbin/apxs2-worker
# instalamos
make
make install 

# activamos el modulo en apache
a2enmod fcgid

# monitorizamos el log de errores
tail -f /var/log/messages
# reiniciamos el servicio de apache
/etc/init.d/apache2 restart
# comprobamos en el log que no haya errores

Certificado

# creamos el directorio que almacenara los certificados
mkdir /etc/qvd/certs
# nos situamos sobre el 
cd /etc/qvd/certs
# generamos la clave privada
openssl genrsa 1024 > server-private-key.pem
# creamos el certificado
openssl req -new -x509 -nodes -sha1 -days 60 -key server-private-key.pem > server-certificate.pem

==================================================
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Madrid
Locality Name (eg, city) []:Madrid
Organization Name (eg, company) [Internet Widgits Pty Ltd]:33
Organizational Unit Name (eg, section) []:sysadmin
Common Name (eg, YOUR name) []:sysadmin.33.com
Email Address []:info@33system.com
==================================================

# configuramos el servidor para utilizar el certificado
qvd-admin.pl config ssl key=/etc/qvd/certs/server-private-key.pem cert=/etc/qvd/certs/server-certificate.pem

# establecemos la variable trusted_ssl_path
trusted_ssl_path=/etc/ssl/certs
# establecemos la variable cert_path
cert_path=/etc/qvd/certs/server-certificate.pem
# establecemos la variable cert_name
cert_name=`openssl x509 -noout -hash -in $cert_path`.0
# copiamos el certificado al directorio del ssl
cp $cert_path $trusted_ssl_path/QVD-L7R-cert.pem
# creamos un enlace simbolico con el nombre del certificado
ln -s $trusted_ssl_path/QVD-L7R-cert.pem $trusted_ssl_path/$cert_name


Entorno Web

# instalamos perl-QVD-Admin-Web
zypper install perl-QVD-Admin-Web
## ó
zypper install perl-QVD-Admin-Web -d
# compilamos apache2-mod_fcgid descrito mas abajo
rpm -i /root/perl-QVD-Admin-Web-3.1.0-16728.1.noarch.rpm --no-deps

# reiniciamos el servicio de apache2
/etc/init.d/apache2
# nos conectamos al puerto 3000 con el protocolo http

LXC

# instalamos los paquetes
zypper install lxc yast2-lxc
# comprobamos que todo funciona
lxc-checkconfig
# arrancamos el servicio cgroup
/etc/init.d/boot.cgroup start
## lo hacemos permanente
insserv boot.cgroup

# Creamos el archivo de configuracion de la maquina
vim /var/lib/lxc/lxc_opensuse01.conf
# definimos las variables
lxc.utsname = opensuse01 
lxc.network.type = veth 
lxc.network.flags = up 
lxc.network.link = br0 
lxc.network.hwaddr = 00:22:6F:08:EC:00 
lxc.network.ipv4 = 10.3.15.51
lxc.network.name = eth0 

# creamos el contenedor
lxc-create -f /var/lib/lxc/lxc_opensuse01.conf -n opensuse01

# nos enjaulamos para realizar cambios enla configuración del contenedor
chroot /var/lib/lxc/opensuse01/rootfs/
# añadimos a un usuario 
useradd -m user
passwd user        -> user


# arrancamos el contenedor
lxc-start -n opensuse01
# para obtener una shell del contenedor
lx-console -n opensuse01
# para parar el contenedor
lx-stop -n opensuse01
# para eliminar el contenedor
lxc-destroy -n opensuse01

OpenProj

# nos enjaulamos en el directorio raiz de la maquina virtual
mount -o bind /proc /var/lib/qvd/storage/basefs/1-image1.tgz/proc/
mount -o bind /dev /var/lib/qvd/storage/basefs/1-image1.tgz/dev/
mount -o bind /sys /var/lib/qvd/storage/basefs/1-image1.tgz/sys/
chroot /var/lib/qvd/storage/basefs/1-image1.tgz/
## ó
chroot /var/lib/qvd/storage/basefs/1-opensuse.tgz
# hace falta el jde de java
zypper install java-1_7_0-openjdk
# descargamos openproj
http://heanet.dl.sourceforge.net/project/openproj/OpenProj%20Binaries/1.4/openproj-1.4-2.noarch.rpm
# instalamos el paquete
rpm -i openproj-1.4-2.noarch.rpm
# creamos el archivo de ejecucion
touch /usr/bin/openproj.new
# editamos el archivo /usr/bin/openproj.new
vi /usr/bin/openproj.new
# insertamos las siguientes lineas
================================================================================
#! /bin/bash
java -Djava.vendor="Sun Microsystems Inc." -jar /usr/share/openproj/openproj.jar
================================================================================
# otorgamos permisos
chmod 755 /usr/bin/openproj.new
# cambiamos los archivos
mv /usr/bin/openproj /usr/bin/openproj.old
mv /usr/bin/openproj.new /usr/bin/openproj

# salimos de la jaula
exit
# creamos la imagen del sistema
dd if=/var/lib/lxc/opensuse01/rootfs/ | gzip > /path/to/image.gz/var/lib/qvd/storage/staging/opensuse01.img


Compilacion de OpenProj para utilizar cualquier vendor de java
# descargamos el codigo fuente de OpenProj
wget http://us.dongtaiwang.com/do/z__Z/_giNaLf5L3jb8eg6j8PgLYg_/Z20BNxa/0ZNYZ20B/jZNYk20B%s-dAYv2AN3/rLV/openproj-1.4-src.tar.gz 
# modificamos el archivo fuente Main.java
vim openproj-1.4-src/openproj_ui/src/com/projity/pm/graphic/gantt/Main.java
## buscamos la linear y añadimos ||javaVendor.startsWith("Oracle")
if (javaVendor==null || !(javaVendor.startsWith("Sun")||javaVendor.startsWith("IBM")||javaVendor.startsWith("Oracle"))){
# compilamos con eclipse

Configuracion QVD

# añadimos un nodo
qvd-admin.pl host add name=qvd address=192.168.5.38

# añadimos un usuario
qvd-admin.pl user add login=user password=user

# agregamos una maquina
## listamos los osf
qvd-admin.pl osf list
## copiamos 
## añadimos la imagen
qvd-admin.pl di add path=/var/lib/qvd/storage/staging/opensuse01.tar.gz osf=OSF
### ó
qvd-admin.pl di add path=/var/lib/qvd/storage/staging/opensuse01.img osf_id=1
# para asignar una maquina a un usuario 
## listamos los usuarios
qvd-admin.pl user list
## listamos los osf
qvd-admin.pl osf list
## asignamos la maquina
qvd-admin.pl vm add name=opensuse01 user_id=1 osf_id=1


# Establecemos lxc como motor de virtualizacion
qvd-admin.pl config set vm.hypervisor=lxc
qvd-admin.pl config set vm.lxc.unionfs.bind.ro=0
qvd-admin.pl config set vm.lxc.unionfs.type=unionfs-fuse
qvd-admin.pl config set command.unionfs-fuse=/usr/bin/unionfs
# reiniciamos el servicio para validar los cambios
/etc/init.d/qvd-hkd restart

Hooks

Un hook es un scritp que se ejecuta al ocurrir un evento. En este caso se ejecutará el scriot users.sh cuando un usuario intente conectarse con una maquina virtual.

# editamos el archivo de configuracion /etc/qvd/opensuse01.conf
vim /etc/qvd/opensuse01.conf
# añadimos la linea
vma.on_action.connect = /etc/qvd/hooks/users.sh
# creamos el directorio
mkdir /etc/qvd/hooks
# editamos el archivo users.sh
vim /etc/qvd/hooks/users.sh
========================================================
#! /bin/bash
qvd-admin.pl user list -f id=$2 >> $HOME/qvd-text.txt
echo $@ >> $HOME/qvd-text.txt
echo $0 >> $HOME/qvd-text.txt
echo +++++++++++++++++++++++++++++++++++++++++ >> $HOME/qvd-text.txt
========================================================

Documentacion