domingo, 10 de febrero de 2019
Firts focus professional services at Opensource Solutions on Puerto Vallarta
The company AKAsistemas started in 2019 and is focused to provide Opensource solutions your base operations is in Puerto Vallarta Mexico, visit our portal www.akasistemas.com for more information
viernes, 7 de septiembre de 2018
RHV/Ovirt Recuperar Windows pantalla azul falta Virtio-scsi - Recovering Windows from blue screen virtio-scsi
Dentro de las actividades de migración de maquinas virtuales de vmware a RHV nos encontramos con el siguiente escenario, si bien se es correcto y se lee la documentación se puede evitar dicho error; el error es basicamente al momento de migrar una VM desde vmware al RHV pero no le hemos dicho a RHV donde encontrar los drivers del disco para su correcto desempeño, el primer sintoma lo encontramos en los logs de migración con el siguiente mensaje.
El proceso de migración termina correctamente, pero al momento de iniciar la maquina virtual es donde nos encontramos los problemas, a continuación las siguiente imagenes como referencia.
mensaje del log en el host v2v
El proceso de migración termina correctamente, pero al momento de iniciar la maquina virtual es donde nos encontramos los problemas, a continuación las siguiente imagenes como referencia.
la VM migrada
error de windows al momento de iniciar con disco IDE
Con este error en windows, aunque cambiemos la interface del disco la maquina no arrancará.
Al parecer el proceso de migración no encuentra los drivers pero si escribe en windows para que busque los mismos cosa que causa el error.
El procedimiento basicamente consiste en instalar los drivers Virtio-ISCI desde la consola de recuperación de windows, así que manos a la obra.
1 - arrancar la maquina virtual desde el medio de instalación.
Configuración de inicio por defecto por CD
Consola de recuperación de Windows
Una vez se este en este paso ya tenemos acceso a la partición del SO, a continuación vamos autilizar la herramienta de microsoft llama DISM basicamente la herramienta nos permite manipular los drivers de SO.
Primero haremos una pequeña prueba listando los drivers instalados en la maquina.
dism /image:c:\ /Get-Drivers
Una vez identificada la unidad del SO la que generalmente es C: ya podemos proceder a insertar el cd con los drivers necesarios.
Imagen con las tools de redhat montada sobre unidad F:
Con esto basicamente nos queda ejecutar dsim para que nos instale el driver que necesitamos.
dsim /image:c:\ /Add-Driver /driver:f:\Drivers\vioscsi\2k8R2\amd64
Ahora se apaga la maquina y se cambia el adaptador del disco a VirtIO-SCSI y se inicia la maquina.
Y con esto ya se podría seguir con el proceso de configuración de las tools o lo que haga falta.
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)
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:
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:
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:
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.
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.) |
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.
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.
ln -s /tmp/akonadi-usuario.HTtCtb/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
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:
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:
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:
2. Se instala el revidor mysql/mariadb ruby y algunas herramientas adicionales de desarrollo para las anteriores herramientas.
3. Habilitamos el servidor de mariadb y se inicia.
4 .Ahora vamos a configurar mariadb y a crear las bases de datos correspondientes:
5. Ingresamos como usuario root al motor de la bd:
6. Creamos la base de datos de redmine:
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.
10. Habilitamos y iniciamos el servidor apache.
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/"
13. Se cambia el nombre al directorio recién creado se deja como gusten, en mi caso se queda como redmine.
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "my_password"
encoding: utf8
Successfully installed bundler-1.12.5
1 gem installed
bundle install --without development test postgresql sqlite
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.
bundle exec rake generate_secret_token
bundle exec rake db:migrate RAILS_ENV=production
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>
passenger-install-apache2-module
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"
yum install mariadb-server mariadb-devel ruby ruby-devel ImageMagick ImageMagick-devel rubygem-rake rubygem-bundler
systemctl enable mariadb && systemctl start mariadb
|
mysql_secure_installation
mysql -p
CREATE DATABASE redmine CHARACTER SET utf8;
8. Se conceden todos los permisos para el usuario redmine sobre la base de datos redmine.
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.gz13. 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
mv database.yml.example database.yml
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.
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.
Nos debe mostrar algo similar a lo siguiente:
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.
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.
<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
secret_key_base: cce23d6e14210e56b349303de9423dc14b77f59f1f07b960168883b7a07e7dce847fae8023f006ad8e357d4385a11eb2e73f2604c02d64d7fa70c17747d
cce23d6e14210e56b349303de9423dc14b77f59f1f07b960168883b7a07e7dce847fae8023f006ad8e357d4385a11eb2e73f2604c02d64d7fa70c17747d
c - luego creamos el archivo secrets.yml con el siguiente contenido (el hash es el del resultaod del paso anterior):
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.
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.
Suscribirse a:
Entradas (Atom)

















