jueves, 2 de agosto de 2018

RHEV - All chosen VMs couldn't be retrieved by the external system and therefore have been filtered.

que tal comunidad, en este caso nos encontramos migrando maquinas virtuales de vmware a RHV y una de las maquinas nos arrojo el siguiente error.



la solución para este caso es basicamente observar el log de Hypervisor "/var/log/vdsm/vdsm.log" y estar atentos a log, para nuestro caso el error era por el número de CPU's los cuales deben ser números multiplos de 2 y nosotros teníamos 9.

el error en cuestión era.

All chosen VMs couldn't be retrieved by the external system and therefore have been filtered. Please see log for details.

En el log de hypervisor encontramos el siguiente mensaje.

201x-0x-0x 10:57:36,399-0500 ERROR (jsonrpc/0) [root] error getting domain xml for vm 'test-vm': internal error: Expecting VMX entry 'numvcpus' to be an unsigned integer (1 or a multiple of 2) but found 9 (v2v:1055)


A lo cual modificamos a 8 el número de cores y la importación se pudo hacer sin problema.

Exitos.

lunes, 19 de marzo de 2018

Script graph cisco snmp cdp walk / Script para graficar dispositivos cisco con SNMP CDP walk

Una entrada mas en mi ya veterano blog y no tan bueno como desearía o mejor aun que no he querido limpiar.

En esta ocasión me a quedado una semana con algo de tiempo y entre las diferentes actividades del día a día decidí recordar viejos tiempo en donde me gustaba picarle al codigo, claro ya no en c++ con qt, esta vez con python ya que a los facilitas nos ayuda considerablemente :).

Entrando en materia, decidi buscar una herramienta que me ayudase a graficar la red de dispositivos que tenemos y vaya todo lo que se vea de cisco y que soporte CDP a través de SNMP, un poco ambisioso de primera mano pero no imposible, además contando con los accesos correctos la tarea no parece tan titanica como en un inicio, en una pequeña busqueda en la web me encontre con el proyecto mnet el cual en su presentación hace lo que yo necesito pero que vaya al momento de usarlo no lo pude hacer funcionar, así que inspirado en este proyecto decidi hacer mi propio script, el cual presento a continuación.

Script cdp walk and graph

Una captura de lo que puede hacer:


El funcionamiento del script esta incluido dentro del mismo con solo ejecutarlo sin parametros, este mostrará el funcionamiento del mismo, tambien coloco una copia de la ayuda a continuación.

The usage is:"
          For db option you need three more options:
          ip -  Specified the entry point for walk
          snmp community for ingress to the devices
          deep - how much level you deep with the script
          Usage example for db option
          ./getcdpinfo-snmp.py db 192.168.154.1 public 5
         
          For pic option you need firts run the db option for generate database
          Usage example for pic option:
          ./getcdpinfo-snmp.py pic

Es altamente recomendable que se inicie la exploración desde el core switch ya que de lo contrario puede que las direcciones de las conexiones no serán del todo fiables.

Espero que sea util a alguién así como me a ayudado a mi, como siempre los comentarios son bienvenidos.

martes, 31 de octubre de 2017

Solaris recovery detach device - Recuperar device detachado de zpool Solaris 10

Esta es una historia que jamas debió haber pasado pero que se sabe pasa en días que transcurren, acompañen me a visitar este carrusel de emociones en donde encontraremos miedo, odio, resignación y como en toda buena historia una luz de esperanza al fin del camino; pues bien, iniciemos.

Capitulo 1 - El desastre.

Un día cualquiera por cuestiones de la vida, en nuestro centro de datos ocurrió una variación  de energía y nuestro  almacenamiento EVA perdió discos en sus VG tanto que los volúmenes se volvieron inaccesibles, esta EVA presentaba LUNs a nuestra Sun Sparc M5000 las cuales dejaron de ver la información y se volvió inaccesible la información.

A continuación una evidencia de lo sucedido.

















Ante esta situación claramente no teníamos nada que hacer, revisamos nuestra EVA y los volúmenes estaban protejidos y sin respaldos actuales, lo único que teníamos era un espejo en algo viejo en otra EVA, espejo que habíamos detachado (detach) del zpool mirror en que estaba. Por lo que erá la única esperanza de recuperar los datos medianamente usables, esto después de buscar respaldos por todos lados y sin tener un punto de donde recuperarnos a través del sistema de respaldos.

Capitulo 2 - Buscando un punto de apoyo en el abismo.

Ante la situación comenzamos a tratar de acceder a los volumenes de la EVA la cual tenía los espejos a travez de "zpool import -F XXXDBPNINST" la mala noticia es que este comando no arrojaba nada, el volumen aparentemente no tenía información y comenzaron las preocupaciones, decidimos revisar si la base de datos de zfs contenía algo en el volumen, esto lo hicimos con:






















Al parecer nuestra información si estaba en el disco, solo que algo pasaba con la metadata, revisando la documentación de zpool nos encontramos con que detach reescribe todo el uberblock del volumen, justo aquí fuimos concientes en el problema enorme en el que estábamos, una pequeña búsqueda en internet nos dio a entender que no se podía recuperar la información por medios tradicionales, por lo cual no nos quedó mas que buscar ayuda en el soporte de Oracle, después de varios correos de control nos dan la fabulosa noticia que la proxima vez que queramos desacoplar un disco utilicemos split y no detach (ya sabíamos que era lo que hacía detach), Buscamos ayuda a uno de nuestros proveedores y la respuesta fue muy similar, ellos no podían hacer mucho ya que era un tema bastante complejo, lo mejor era buscar ayuda con Oracle.

Con el animo por el piso y con unas cuantas amenazas de lo que podía suceder si no recuperabamos la información decidimos buscar un poco mas en internet y con la calma y con los términos y documentación un poco mas afianzada y nos encontramos con este enlace (agrego una copia del correo con el código fuente)del 2008, en resumidas cuentas a alguien le había pasado lo mismo pero en solaris x86 y logro acceder al volumen, esto lo logró escribiendo un programa en C que básicamente lo que hacía era reescanear la base del disco para encontrar los puntos de inicio del zpool y de esta forma volver a reescribir el ublock, todo un hacker de zfs.

Capitulo 3 - Una luz al final del tunel

Pues bien ya se tenía la tarea para hacer, lo primero que se intento fue usar el compilado que vienen adjunto en la lista de correo, claramente no funciono, lo siguiente fue intentar compilarlo en solaris, para desgracia de nosotros el código fuente fue hecho para opensolaris y no para solaris en si mismo, así que tampoco nos funciono, eso y nuestros conocimientos de desarrollo no nos permitieron hacer las modificaciones necesarias.

Al no poder hacer mucho desde la maquina que si tenía acceso a la información decidimos extraer imagenes puras de la LUN para copiarlas a otro servidor y poder hacer las pruebas necesarias, así que decidimos hacer copias con dd en los solaris y pasarlas por scp al servidor donde originalmente habían ocurrido los daños.

Una vez las imagenes en el servidor donde si podiamos hacer las pruebas procedimos a crear LUNs con espacios exactamente iguales, label iguales y sectores de disco iguales, lo siguiente fue inyectar los datos con dd a las nuevas LUNs y verificar con zdb, las cuales eran iguales a lo que teníamos en el servidor espejo, bien, en este punto estabamos casi al inicio pero con nuestra información ya en la otra EVA, el problema seguía siendo como accederla, después de buscar mas y mas nos encontramos con esta entrada en donde solicitan que se ingrese una funcionalidad a zfsonlinux (si, el mismo port de opensolaris a linux) y donde  mencionan otro articulo donde se hace una modificación del código fuente del 2008, las esperanzas comenzaron a regenerarse, leyendo un poco los comentarios básicamente las pruebas habían sido exitosas con Ubuntu 14.04 y zfsonlinux 0.6.5.1.

Lo siguiente fue montar nuestro servidor Ubuntu, presentar las LUNs a este servidor y seguir las instrucciones siguientes:

Originally written by Jeff Bonwick (http://www.mail-archive.com/zfs-discuss@opensolaris.org/msg15748.html), and updated by James Lee to work with modern ZFS libs (https://www.mail-archive.com/zfs-discuss@opensolaris.org/msg47316.html), I was able to compile this life-saving utility in Ubuntu 14.04 and have verified that it works. (I'm using ZFSonLinux.)
Download the ZFSonLinux tarball and replace the cmd/zhack/zhack.c file with "labelfix.c". Note that zhack is just a simple utility that we're replacing so that we don't have to setup the build environment. (It's hard, so we'll reuse the good work of the ZFSonLinux people.)
Run "./configure; make" and if all goes well then the zfs tools will be built, except for zhack, which we replaced. Run that with the device path to recover your data.

El codigo fuente modificado para zfsonlinux es el siguiente:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 

/*
 * Write a label block with a ZBT checksum.
 */
static void
label_write(int fd, uint64_t offset, uint64_t size, void *buf)
{
        zio_eck_t *zbt, zbt_orig;
        zio_cksum_t zc;

        zbt = (zio_eck_t *)((char *)buf + size) - 1;
        zbt_orig = *zbt;

        ZIO_SET_CHECKSUM(&zbt->zec_cksum, offset, 0, 0, 0);

        zio_checksum_SHA256(buf, size, &zc);
        zbt->zec_cksum = zc;

        VERIFY(pwrite64(fd, buf, size, offset) == size);

        *zbt = zbt_orig;
}

int
main(int argc, char **argv)
{
        int fd;
        vdev_label_t vl;
        nvlist_t *config;
        uberblock_t *ub = (uberblock_t *)vl.vl_uberblock;
        uint64_t txg;
        char *buf;
        size_t buflen;

        VERIFY(argc == 2);
        VERIFY((fd = open(argv[1], O_RDWR)) != -1);
        VERIFY(pread64(fd, &vl, sizeof (vdev_label_t), 0) ==
            sizeof (vdev_label_t));
        VERIFY(nvlist_unpack(vl.vl_vdev_phys.vp_nvlist,
            sizeof (vl.vl_vdev_phys.vp_nvlist), &config, 0) == 0);
        VERIFY(nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_TXG, &txg) == 0);
        VERIFY(txg == 0);
        VERIFY(ub->ub_txg == 0);
        VERIFY(ub->ub_rootbp.blk_birth != 0);

        txg = ub->ub_rootbp.blk_birth;
        ub->ub_txg = txg;

        VERIFY(nvlist_remove_all(config, ZPOOL_CONFIG_POOL_TXG) == 0);
        VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_POOL_TXG, txg) == 0);
        buf = vl.vl_vdev_phys.vp_nvlist;
        buflen = sizeof (vl.vl_vdev_phys.vp_nvlist);
        VERIFY(nvlist_pack(config, &buf, &buflen, NV_ENCODE_XDR, 0) == 0);

        label_write(fd, offsetof(vdev_label_t, vl_uberblock),
            1ULL << UBERBLOCK_SHIFT, ub);

        label_write(fd, offsetof(vdev_label_t, vl_vdev_phys),
            VDEV_PHYS_SIZE, &vl.vl_vdev_phys);

        fsync(fd);

        return (0);
}

Con animos de gastar todas las opciones disponibles, compilamos el código fuente como lo dice la sección anterior, el cual arrojo un error pero a la hora de revisar los binarios del paquete efectivamente se encontraba el binario zhack.

Capitulo 4 - Lecciones aprendidas

Con el momento de la verdad delante de nosotros ejecutamos el comando ./zhack /dev/dsk/c5t600508B40009BD73000050000F3F0000d0s2 el comando no arrojo ningún error, pero al momento de hacer el zimport nuevamente nos mostró la información en el ubuntu, en ese momento pudimos descansar, lo siguiente fue pasar por rsync la información al solaris ya que el hack no permitia ver el volumen en el solaris, así que con nuevos volumenes en el solaris nos faltaba hacer rsync a todo el volumen abierto y realizar las configuraciones faltantes.

Lo que aprendimos de toda esta odisea fue que siempre, siempre debemos tener respaldos, el tener un soporte no te garantiza que te hagan el trabajo sucio y por ultimo que internet es una fuente inagotable de información.

Espero que esta recopilación de información sea útil para algún sysadmin y pueda acceder a toda la historia del hack sin tener que deambular días por la web.




viernes, 9 de junio de 2017

Akonadi postgresql backend

Una entrada rápida, solo con el fin de registrar una curiosidad de KDE.

Para llevar a cabo nuestra premisa necesitamos tener instalados dos componentes fundamentales.
Es importante detener los servicios de akonadi para llevar a cabo estas tareas, esto lo logramos desde una terminal de un usuario normal.

akonadictl stop

El motor de base de datos y el driver de qt para postgres.

Fedora
yum install postgresql-server qt-postgresql

Opensuse
zypper install postgresql-server libQt5Sql5-postgresql


Lo siguiente sería modificar la configuración de akonadi para que use postgresql en lugar de mysql, la configuración se encuentra en la ruta.

/home/usuario/.config/akonadi/akonadiserverrc

[Debug]
Tracer=null

[%General]
Driver=QPSQL

[QPSQL]
Host=/tmp/akonadi-usuario.HTtCtb
InitDbPath=/usr/bin/initdb
Name=akonadi
Options=
Password=akonadi
ServerPath=/usr/bin/pg_ctl
StartServer=true
User=akonadi


Para tener en cuenta los campos marcados en negrita, donde básicamente indicamos los datos de conexión.

Con esto iniciamos el motor por primera vez con el comando.

akonadictl start

Esto intentará iniciar el motor de akonadi pero fallará ya que el script de inicio no crea la base de datos y los usuarios dentro del motor de postgres, por ello procedemos a crear la base de datos para akonadi.

Antes de conectarnos necesitamos hacer un pequeño truco para poder acceder al motor de postgresql con la herramienta psql y es crear unos enlaces simbolicos, esto lo haremos con el usuario root:

ln -s /tmp/akonadi-usuario.HTtCtb/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

Para conectarnos al motor es necesario hacerlo desde el usuario normal con el siguiente comando.

psql postgres

esto nos ingresará a la consola de postgresql en donde crearemos nuestra base de datos y usuarios para recibir la conexión de akonadi.



create database akonadi;
CREATE ROLE akonadi WITH LOGIN PASSWORD 'akonadi';
grant ALL ON DATABASE akonadi TO akonadi;



Con esto ya tendremos la base de datos y los permisos necesarios para la conexión, ahora solo nos resta iniciar nuevamente el servidor de akonadi con:

akonadictl start

Y esto sería todo, con eso ya se tendría el servidor de akonadi con su backend en postgresql, hay que recordar que para grandes cargas de correo hay que tunear postgresql de lo contrario dará algunos problemas de lentitud.

Si hay dudas comenten y con gusto intentaré resolverlas.





miércoles, 3 de agosto de 2016

Instalación de Redmine con multiples instancias /Install Redmine multi-instance en CentOS 7

El día es corto y el trabajo no cesa, así que esta ves con mas prisas que otra cosa vengo a comentar como instalar redmine con multiples instancias bajo apache y su modulo passenger.

El propósito de dichos proyectos los pueden encontrar en los siguientes enlaces:

http://www.redmine.org/
https://projects.apache.org/project.html?httpd-http_server


Antes de iniciar es necesario mencionar que gran parte de las instrucciones fueron extraídas de este post lo cual merece todo el reconocimiento al autor, así que básicamente es una traducción con unos pocos agregados..
http://www.informaddict.net/installer-redmine-sur-centos-7/


1 .Descargamos las herramientas de desarrollo de la distribución:

yum groupinstall "Development Tools"

2. Se instala el revidor mysql/mariadb ruby y algunas herramientas adicionales de desarrollo para las anteriores herramientas.

yum install mariadb-server mariadb-devel ruby ruby-devel ImageMagick ImageMagick-devel rubygem-rake rubygem-bundler

3. Habilitamos el servidor de mariadb y se inicia.

systemctl enable mariadb && systemctl start mariadb

4 .Ahora vamos a configurar mariadb y a crear las bases de datos correspondientes:

mysql_secure_installation

5. Ingresamos como usuario root al motor de la bd:

mysql -p

6. Creamos la base de datos de redmine:

CREATE DATABASE redmine CHARACTER SET utf8;

7. Creamos el usuario de redmine dentro de la base de datos.

CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password';


8. Se conceden todos los permisos para el usuario redmine sobre la base de datos redmine.

GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';



9. Instalamos el servidor apache y sus librerías de desarrollo.

yum install libcurl-devel httpd-devel apr-devel apr-util-devel httpd -y


10. Habilitamos y iniciamos el servidor apache.

systemctl enable httpd && systemctl start httpd

11. Descargamos la ultima versión de redmine desde la pagina oficial (el enlace esta al inicio del post) y lo dejamos sobre el directorio "/var/www/html/"

12. Se descomprime el empaquetado.

cd /var/www/html
tar xvzf redmine-3.3.x.tar.gz


13. Se cambia el nombre al directorio recién creado se deja como gusten, en mi caso se queda como redmine.

mv redmine-3.3.x redmine


14. Se cambia el dueño y el grupo del directorio para el directorio redmine:

chown -R apache:apache redmine


15. Ahora vamos a hacer unos pequeños ajustes para que redmine se conecta a su base de datos, primero accedemos al directorio "config".

cd redmine/config

Ahora se cambia el nombre al archivo por defecto.

mv database.yml.example database.yml



Una vez cambiado el nombre del archivo vamos a editar su contenido con vi, buscaremos la sección de producción dicha sección debe lucir algo similar a lo siguiente:


production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "my_password"
encoding: utf8


Con esto ya le indicamos que base de datos va a utilizar ... continuamos..

16 . Ahora vamos a ubicarnos sobre el directorio base de redmine es decir sobre "/var/www/html/redmine", esto es muy importante ya que vamos a comenzar el despliegue de los plugings de ruby si no lo hacemos sobre este directorio nuestra instalación va a fallar.

cd /var/www/html/redmine


17. Hora de instalar el gem de bundler con el siguiente comando.


gem install bundler --no-rdoc --no-ri

Nos debe mostrar algo como lo siguiente.


Successfully installed bundler-1.12.5
1 gem installed

Ahora instalamos bundler con el siguiente comando.

bundle install --without development test postgresql sqlite


Nos debe mostrar algo similar a lo siguiente:

Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this
machine.
Rubygems 2.0.14 is not threadsafe, so your gems will be installed one at a time. Upgrade to Rubygems 2.1.0 or higher to enable parallel gem installation.
Using rake 11.2.2
Using i18n 0.7.0
Using json 1.8.3
Using minitest 5.9.0
Using thread_safe 0.3.5
Using builder 3.2.2
Using erubis 2.7.0
Using mini_portile2 2.1.0
Using pkg-config 1.1.7
Using rack 1.6.4
Using mime-types-data 3.2016.0521
Using arel 6.0.3
Using addressable 2.4.0
Using coderay 1.1.1
Using concurrent-ruby 1.0.2
Using htmlentities 4.3.1
Using thor 0.19.1
Using mimemagic 0.3.2
Using mysql2 0.3.21
Using net-ldap 0.12.1
Using ruby-openid 2.3.0
Using bundler 1.12.5
Using rbpdf-font 1.19.0
Using redcarpet 3.3.4
Using request_store 1.0.5
Using rmagick 2.15.4
Using tzinfo 1.2.2
Using nokogiri 1.6.8
Using rack-test 0.6.3
Using mime-types 3.1
Using css_parser 1.3.7
Using sprockets 3.7.0
Using rack-openid 1.4.2
Using rbpdf 1.19.0
Using activesupport 4.2.6
Using loofah 2.0.3
Using mail 2.6.4
Using roadie 3.1.1
Using rails-deprecated_sanitizer 1.0.3
Using globalid 0.3.7
Using activemodel 4.2.6
Using rails-html-sanitizer 1.0.3
Using rails-dom-testing 1.0.7
Using activejob 4.2.6
Using activerecord 4.2.6
Using protected_attributes 1.1.3
Using actionview 4.2.6
Using actionpack 4.2.6
Using actionmailer 4.2.6
Using actionpack-action_caching 1.1.1
Using actionpack-xml_parser 1.0.2
Using railties 4.2.6
Using sprockets-rails 3.1.1
Using jquery-rails 3.1.4
Using roadie-rails 1.1.1
Using rails 4.2.6
Bundle complete! 31 Gemfile dependencies, 56 gems now installed.
Gems in the groups development, test, postgresql and sqlite were not installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.




18. Generamos los tokens de seguridad.


bundle exec rake generate_secret_token



19. Poblamos la base de datos con los datos.

bundle exec rake db:migrate RAILS_ENV=production


20. Instalamos el gem de passenger.

gem install passenger --no-rdoc --no-ri


21. Antes de hacer el despliegue del gem vamos a ir a "/etc/httpd/conf.d" y crearemos un archivo llamado passenger.conf con el siguiente contenido.

LoadModule passenger_module /usr/local/share/gems/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so 

<IfModule mod_passenger.c >

PassengerRoot /usr/local/share/gems/gems/passenger-5.0.30/ 
PassengerDefaultRuby /usr/bin/ruby 
</IfModule >

NameVirtualHost *:80 
<VirtualHost *:80>
ServerName redmine 
DocumentRoot /var/www/html/redmine/public 
</VirtualHost>

Este paso es para que no falle la validación del despliegue del modulo de esta forma ya estamos desplegando el virtualhost de apache para redmine.

22. Bien hora de desplegar el gem de passenger, aquí va a preguntar algunas cosas, lo cual solo daremos enter hasta que comience el proceso de compilación, este demora un rato.


passenger-install-apache2-module

23. Establecer security tokens, error "utils.rb:87 ]: *** Exception RuntimeError in Rack application object (Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml`)", un error por cuestiones de retrocompatibilidad esto lo solucionamos de la siguiente forma.

a - vamos a ubicarnos sobre el directorio de configuración de redmine.

cd /var/www/html/redmine/config

b - Luego ejecutamos el comando, este nos debe arrojar una cadena.

rake secret
(in /var/www/html/redmine)
cce23d6e14210e56b349303de9423dc14b77f59f1f07b960168883b7a07e7dce847fae8023f006ad8e357d4385a11eb2e73f2604c02d64d7fa70c17747d

c - luego creamos el archivo secrets.yml con el siguiente contenido (el hash es el del resultaod del paso anterior):


secret_key_base: cce23d6e14210e56b349303de9423dc14b77f59f1f07b960168883b7a07e7dce847fae8023f006ad8e357d4385a11eb2e73f2604c02d64d7fa70c17747d


24. Reiniciar apache y verificar el correcto acceso a la herramienta.

systemctl restart httpd

25. Multiples instancias de redmine, básicamente lo que tenemos que hacer es crear una nueva base de datos, la cual la podemos hacer siguiendo los pasos del punto 6,7 y 8, lo siguiente es desempaquetar o copiar el directorio redmain (si son instancias en blando desde cero, las podemos copiar con rsync) si son instancias nuevas y las actuales ya están pobladas será descomprimir el tar.gz en el directorio "/var/www/html" (cuidado que no borre o reemplace la instalación ya existente), una ves creado el comprimido configuramos el redmine para el acceso a la base de datos como se hizo en el punto 15, seguidamente repoblamos la base de datos con el paso en el punto 19, creamos un nuevo secret lo cual especificamos en el punto 23, lo siguiente es agregar un puerto de escucha al apache y agregar el virtualhost adicional al passenger.conf, el contenido del nuevo passenger sería algo similar a lo siguiente.

LoadModule passenger_module /usr/local/share/gems/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so 

<IfModule mod_passenger.c >

PassengerRoot /usr/local/share/gems/gems/passenger-5.0.30/ 
PassengerDefaultRuby /usr/bin/ruby 
</IfModule >

NameVirtualHost *:80 
<VirtualHost *:80>
ServerName redmine 
DocumentRoot /var/www/html/redmine/public 
</VirtualHost> 

NameVirtualHost *:8090 
<VirtualHost *:8090>
ServerName redmine-ins1 
DocumentRoot /var/www/html/redmine-ins1/public 
</VirtualHost>

Si bien en este ejemplo se están utilizando puertos diferentes, también es funcional por el mismo puerto de apache, pero utilizando nombres DNS diferentes con el fin que los capture el virtualhost correspondiente.

Se recarga apache y con eso se tendría redmine en diferentes instancias.

Como siempre los comentarios y criticas son bienvenidos, espero sea de utilidad para alguien.


martes, 19 de julio de 2016

Centos 7 enable Smart Array E200i

Esta ves se me presento que tengo a disponibilidad un blade que tiene la controladora Smart Array E200i la cual ya no esta soportada pero necesito utilizarla para unas pruebas.

Bien, para hacerla funcionar se le tuvo que enviar el siguiente parámetro al kernel para reactivar la detección de dicha controladora.

hpsa.hpsa_simple_mode=1 hpsa.hpsa_allow_any=1
Esto lo extraje del siguiente vinculo.

http://serverfault.com/questions/611182/centos-7-x64-and-hp-proliant-dl360-g5-scsi-controller-compatibility/611210#611210?newreg=943fbdd1313641fc9680cef2ec089feb

lunes, 4 de abril de 2016

OVirt ovirt-engine-extension-aaa-ldap Active Directory mini how to

En esta ocasión me a tocado revisar algunos detalles de ovirt y dentro de los multiples problemas que han surgido, se hace necesario integrar la autenticación al Active Directory a claro pero con los nuevos plugings aaa de ldap "ovirt-engine-extension-aaa-ldap" el procedimiento que elegiremos será utilizar una herramienta que nos facilita enormemente la tarea de configurar los archivos.

1) instalar la herramienta de configuración.

#yum install ovirt-engine-extension-aaa-ldap-setup.noarch

2) Ejecutar la herramienta de configuración


#ovirt-engine-extension-aaa-ldap-setup

Esto nos mostrará lo siguiente:

[ INFO ] Stage: Initializing
[ INFO ] Stage: Environment setup
Configuration files: ['/etc/ovirt-engine-extension-aaa-ldap-setup.conf.d/10-packaging.conf']
Log file: /tmp/ovirt-engine-extension-aaa-ldap-setup-20160404183136-6n77oi.log
Version: otopi-1.4.1 (otopi-1.4.1-1.el6)
[ INFO ] Stage: Environment packages setup
[ INFO ] Stage: Programs detection
[ INFO ] Stage: Environment customization
Welcome to LDAP extension configuration program
Please specify profile name that will be visible to users: example.com

Lo cual tecleamos un nombre que nos identifique el dominio que queremos agregar a continuación la tecla Enter y nos muestra esto:

Available LDAP implementations:
1 - 389ds
2 - 389ds RFC-2307 Schema
3 - Active Directory
4 - IPA
5 - Novell eDirectory RFC-2307 Schema
6 - OpenLDAP RFC-2307 Schema
7 - OpenLDAP Standard Schema
8 - Oracle Unified Directory RFC-2307 Schema
9 - RFC-2307 Schema (Generic)
10 - RHDS
11 - RHDS RFC-2307 Schema
12 - iPlanet
Please select: 3

Basicamente nos solicita el tipo de directorio que queremos configurar, elejimos la opción 3 para Active Directory y nos solicita el forest name.

Please enter Active Directory Forest name: example.com

Con esto buscará en los servidores DNS registros de tipo SRV que hagan match con el dominio y con ellos intentará configurarse (ya lo veremos), presionamos Enter.

[ INFO ] Resolving Global Catalog SRV record for example.com
[ INFO ] Resolving LDAP SRV record for example.com
NOTE:
It is highly recommended to use secure protocol to access the LDAP server.
Protocol startTLS is the standard recommended method to do so.
Only in cases in which the startTLS is not supported, fallback to non standard ldaps protocol.
Use plain for test environments only.
Please select protocol to use (startTLS, ldaps, plain) [startTLS]:

Nos pregunta el tipo de Encriptación que usaremos para comunicarnos con el dominio, presionamos Enter para seleccionar startTLS.


Please select method to obtain PEM encoded CA certificate (File, URL, Inline, System, Insecure): Insecure

Ahora nos pregunta como obtendremos el certificado, por comodidad mas no por seguridad elegiremos Insecure:

[ INFO ] Resolving SRV record 'example.com'
[ INFO ] Connecting to LDAP using 'ldap://test01.example.com:389'
[ INFO ] Executing startTLS
[ INFO ] Connection succeeded
Enter search user DN (empty for anonymous): example\userauth

Ingresamos el usuario con que nos autenticaremos contra el dominio, es muy importante colocar el dominio y el usuario de lo contrario tendremos errores.

Enter search user password:
[ INFO ] Attempting to bind using 'example\userauth'
[ INFO ] Stage: Setup validation
The following files are about to be overwritten:
/etc/ovirt-engine/extensions.d/example-authn.properties
/etc/ovirt-engine/extensions.d/example-authz.properties
/etc/ovirt-engine/aaa/example.properties
Continue and overwrite? (Yes, No) [No]: Yes
NOTE:
It is highly recommended to test drive the configuration before applying it into engine.
Perform at least one Login sequence and one Search sequence.
Select test sequence to execute (Done, Abort, Login, Search) [Abort]:


Muy importante los archivos que genera, puuesto que son las configuraciones y podemos modificarlas manualmente, a continuación hacemos pruebas de Login y Search las cuales deben traernos información a cerca del usuario, Tecleamos Done y Enter y eso sería todo.